From 532d7f77db7b08fb0b0ea4405d89a9effa441393 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Tue, 2 Jul 2019 19:04:37 -0700 Subject: [PATCH 001/214] Add some test info to the exception message --- .../Microsoft.FSharp.Control/AsyncModule.fs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs index 9154bd875d..fb18942eee 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs @@ -168,8 +168,8 @@ type AsyncModule() = let dispose(d : #IDisposable) = d.Dispose() - let testErrorAndCancelRace computation = - for _ in 1..20 do + let testErrorAndCancelRace testcaseName computation = + for i in 1..20 do let cts = new System.Threading.CancellationTokenSource() use barrier = new System.Threading.ManualResetEvent(false) async { cts.Cancel() } @@ -180,7 +180,7 @@ type AsyncModule() = Async.StartWithContinuations( computation, - (fun _ -> failwith "success not expected"), + (fun _ -> failwith (sprintf "%s -- success not expected -- iteration %d" testcaseName i)), (fun _ -> incr()), (fun _ -> incr()), cts.Token @@ -428,11 +428,11 @@ type AsyncModule() = let disposedEvent = new System.Threading.ManualResetEvent(false) dispose disposedEvent - testErrorAndCancelRace(Async.AwaitWaitHandle disposedEvent) + testErrorAndCancelRace "RaceBetweenCancellationAndError.AwaitWaitHandle" (Async.AwaitWaitHandle disposedEvent) [] member this.``RaceBetweenCancellationAndError.Sleep``() = - testErrorAndCancelRace (Async.Sleep (-5)) + testErrorAndCancelRace "RaceBetweenCancellationAndError.Sleep" (Async.Sleep -5) #if EXPENSIVE #if NET46 @@ -667,7 +667,7 @@ type AsyncModule() = member this.``RaceBetweenCancellationAndError.Parallel``() = [| for i in 1 .. 1000 -> async { return i } |] |> fun cs -> Async.Parallel(cs, 1) - |> testErrorAndCancelRace + |> testErrorAndCancelRace "RaceBetweenCancellationAndError.Parallel`" [] member this.``error on one workflow should cancel all others with maxDegreeOfParallelism``() = From 43f5510e8e2dd77e03d2dd6d041ec2f701c566ae Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Fri, 2 Aug 2019 12:49:17 -0700 Subject: [PATCH 002/214] prepare fsharp4.8 (#7333) --- eng/Versions.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 869a471cbf..faeb7772cb 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -12,9 +12,9 @@ beta - 4.7 + 4.8 $(FSLanguageVersion) - $(FSCoreMajorVersion).3 + $(FSCoreMajorVersion).0 $(FSCoreMajorVersion).0 $(FSCoreVersionPrefix).0 @@ -23,7 +23,7 @@ $(FSCorePackageVersion)-$(PreReleaseVersionLabel).* - 10.6 + 10.7 $(FSPackageMajorVersion).0 $(FSPackageVersion) $(FSPackageVersion).0 From ae009bb1503897c958187368ef0a64f93b94a7b6 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Sun, 1 Sep 2019 10:59:10 -0700 Subject: [PATCH 003/214] Remove desktop templates for FSharp5 (#7379) * Remove desktop templates * readme --- VisualFSharp.sln | 65 +- vsintegration/ProjectTemplates/.gitignore | 2 - .../ConsoleProject/ConsoleProject.csproj | 18 - .../ConsoleProject/Template/App.config | 6 - .../ConsoleProject/Template/AssemblyInfo.fs | 41 - .../Template/ConsoleApplication.fsproj | 65 - .../Template/ConsoleApplication.vstemplate | 33 - .../ConsoleProject/Template/Program.fs | 7 - .../Template/xlf/AssemblyInfo.fs.cs.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.de.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.es.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.fr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.it.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ja.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ko.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pl.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ru.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.tr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hant.xlf | 77 - .../Template/xlf/Program.fs.cs.xlf | 22 - .../Template/xlf/Program.fs.de.xlf | 22 - .../Template/xlf/Program.fs.es.xlf | 22 - .../Template/xlf/Program.fs.fr.xlf | 22 - .../Template/xlf/Program.fs.it.xlf | 22 - .../Template/xlf/Program.fs.ja.xlf | 22 - .../Template/xlf/Program.fs.ko.xlf | 22 - .../Template/xlf/Program.fs.pl.xlf | 22 - .../Template/xlf/Program.fs.pt-BR.xlf | 22 - .../Template/xlf/Program.fs.ru.xlf | 22 - .../Template/xlf/Program.fs.tr.xlf | 22 - .../Template/xlf/Program.fs.zh-Hans.xlf | 22 - .../Template/xlf/Program.fs.zh-Hant.xlf | 22 - .../source.extension.vsixmanifest | 24 - .../ProjectTemplates/Directory.Build.props | 10 - .../ProjectTemplates/Directory.Build.targets | 3 - .../LibraryProject/LibraryProject.csproj | 18 - .../LibraryProject/Template/AssemblyInfo.fs | 41 - .../LibraryProject/Template/Library.fsproj | 61 - .../Template/Library.vstemplate | 33 - .../LibraryProject/Template/Library1.fs | 4 - .../LibraryProject/Template/Script.fsx | 8 - .../Template/xlf/AssemblyInfo.fs.cs.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.de.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.es.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.fr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.it.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ja.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ko.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pl.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ru.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.tr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hant.xlf | 77 - .../Template/xlf/Script.fsx.cs.xlf | 22 - .../Template/xlf/Script.fsx.de.xlf | 22 - .../Template/xlf/Script.fsx.es.xlf | 22 - .../Template/xlf/Script.fsx.fr.xlf | 22 - .../Template/xlf/Script.fsx.it.xlf | 22 - .../Template/xlf/Script.fsx.ja.xlf | 22 - .../Template/xlf/Script.fsx.ko.xlf | 22 - .../Template/xlf/Script.fsx.pl.xlf | 22 - .../Template/xlf/Script.fsx.pt-BR.xlf | 22 - .../Template/xlf/Script.fsx.ru.xlf | 22 - .../Template/xlf/Script.fsx.tr.xlf | 22 - .../Template/xlf/Script.fsx.zh-Hans.xlf | 22 - .../Template/xlf/Script.fsx.zh-Hant.xlf | 22 - .../source.extension.vsixmanifest | 25 - .../TutorialProject/Template/Tutorial.fsproj | 66 - .../TutorialProject/Template/Tutorial.fsx | 997 ---------- .../Template/Tutorial.vstemplate | 31 - .../Template/xlf/Tutorial.fsx.cs.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.de.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.es.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.fr.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.it.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.ja.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.ko.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.pl.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.pt-BR.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.ru.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.tr.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.zh-Hans.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.zh-Hant.xlf | 1637 ----------------- .../TutorialProject/TutorialProject.csproj | 17 - .../source.extension.vsixmanifest | 25 - .../Source.extension.vsixmanifest | 28 - .../VisualFSharpTemplates.csproj | 60 - vsintegration/readme.md | 4 - 91 files changed, 1 insertion(+), 25546 deletions(-) delete mode 100644 vsintegration/ProjectTemplates/.gitignore delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/App.config delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest delete mode 100644 vsintegration/ProjectTemplates/Directory.Build.props delete mode 100644 vsintegration/ProjectTemplates/Directory.Build.targets delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest delete mode 100644 vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest delete mode 100644 vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 4a1e75f446..db6b4a1634 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -34,8 +34,6 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualFSharpFull", "vsintegration\Vsix\VisualFSharpFull\VisualFSharpFull.csproj", "{59ADCE46-9740-4079-834D-9A03A3494EBC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualFSharpTemplates", "vsintegration\Vsix\VisualFSharpTemplates\VisualFSharpTemplates.csproj", "{025CE01B-98F3-4C3C-B486-2C0BD038D011}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" @@ -144,21 +142,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{647810D0 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", "src\fsharp\FSharp.Compiler.nuget\Microsoft.FSharp.Compiler.csproj", "{04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProjectTemplates", "ProjectTemplates", "{BED74F9E-A0D2-48E2-9EE7-449832100487}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleProject", "vsintegration\ProjectTemplates\ConsoleProject\ConsoleProject.csproj", "{1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibraryProject", "vsintegration\ProjectTemplates\LibraryProject\LibraryProject.csproj", "{C32806E0-71C2-40E4-AEC4-517F73F6A18A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TutorialProject", "vsintegration\ProjectTemplates\TutorialProject\TutorialProject.csproj", "{7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.Core.nuget", "src\fsharp\FSharp.Core.nuget\FSharp.Core.nuget.csproj", "{8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer", "src\fsharp\FSharp.Compiler.LanguageServer\FSharp.Compiler.LanguageServer.fsproj", "{60BAFFA5-6631-4328-B044-2E012AB76DCA}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{AAF2D233-1C38-4090-8FFA-F7C545625E06}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharp.Editor.Helpers", "vsintegration\src\FSharp.Editor.Helpers\FSharp.Editor.Helpers.csproj", "{79255A92-ED00-40BA-9D64-12FCC664A976}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.Editor.Helpers", "vsintegration\src\FSharp.Editor.Helpers\FSharp.Editor.Helpers.csproj", "{79255A92-ED00-40BA-9D64-12FCC664A976}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -206,18 +196,6 @@ Global {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|Any CPU.Build.0 = Release|Any CPU {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|x86.ActiveCfg = Release|Any CPU {59ADCE46-9740-4079-834D-9A03A3494EBC}.Release|x86.Build.0 = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Debug|Any CPU.Build.0 = Debug|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Debug|x86.ActiveCfg = Debug|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Debug|x86.Build.0 = Debug|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Proto|Any CPU.ActiveCfg = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Proto|Any CPU.Build.0 = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Proto|x86.ActiveCfg = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Proto|x86.Build.0 = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Release|Any CPU.ActiveCfg = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Release|Any CPU.Build.0 = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Release|x86.ActiveCfg = Release|Any CPU - {025CE01B-98F3-4C3C-B486-2C0BD038D011}.Release|x86.Build.0 = Release|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -842,42 +820,6 @@ Global {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|Any CPU.Build.0 = Release|Any CPU {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|x86.ActiveCfg = Release|Any CPU {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|x86.Build.0 = Release|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Debug|x86.ActiveCfg = Debug|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Debug|x86.Build.0 = Debug|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Proto|Any CPU.Build.0 = Proto|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Proto|x86.ActiveCfg = Proto|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Proto|x86.Build.0 = Proto|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Release|Any CPU.Build.0 = Release|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Release|x86.ActiveCfg = Release|Any CPU - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8}.Release|x86.Build.0 = Release|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Debug|x86.ActiveCfg = Debug|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Debug|x86.Build.0 = Debug|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Proto|Any CPU.Build.0 = Proto|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Proto|x86.ActiveCfg = Proto|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Proto|x86.Build.0 = Proto|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Release|Any CPU.Build.0 = Release|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Release|x86.ActiveCfg = Release|Any CPU - {C32806E0-71C2-40E4-AEC4-517F73F6A18A}.Release|x86.Build.0 = Release|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Debug|x86.Build.0 = Debug|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Proto|Any CPU.ActiveCfg = Proto|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Proto|Any CPU.Build.0 = Proto|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Proto|x86.ActiveCfg = Proto|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Proto|x86.Build.0 = Proto|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Release|Any CPU.Build.0 = Release|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Release|x86.ActiveCfg = Release|Any CPU - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1}.Release|x86.Build.0 = Release|Any CPU {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}.Debug|Any CPU.Build.0 = Debug|Any CPU {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -940,7 +882,6 @@ Global {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {59ADCE46-9740-4079-834D-9A03A3494EBC} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} - {025CE01B-98F3-4C3C-B486-2C0BD038D011} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} = {B8DDA694-7939-42E3-95E5-265C2217C142} {DED3BBD7-53F4-428A-8C9F-27968E768605} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} @@ -993,10 +934,6 @@ Global {E93E7D28-1C6B-4E04-BE83-68428CF7E039} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {9482211E-23D0-4BD0-9893-E4AA5559F67A} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8} = {647810D0-5307-448F-99A2-E83917010DAE} - {BED74F9E-A0D2-48E2-9EE7-449832100487} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} - {1D8D778E-8D6B-4A8C-88A6-BE578988FBE8} = {BED74F9E-A0D2-48E2-9EE7-449832100487} - {C32806E0-71C2-40E4-AEC4-517F73F6A18A} = {BED74F9E-A0D2-48E2-9EE7-449832100487} - {7B345E51-F2C0-4D4B-B0E0-05432EC9D5E1} = {BED74F9E-A0D2-48E2-9EE7-449832100487} {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC} = {647810D0-5307-448F-99A2-E83917010DAE} {60BAFFA5-6631-4328-B044-2E012AB76DCA} = {B8DDA694-7939-42E3-95E5-265C2217C142} {AAF2D233-1C38-4090-8FFA-F7C545625E06} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} diff --git a/vsintegration/ProjectTemplates/.gitignore b/vsintegration/ProjectTemplates/.gitignore deleted file mode 100644 index cd42ee34e8..0000000000 --- a/vsintegration/ProjectTemplates/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -bin/ -obj/ diff --git a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj b/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj deleted file mode 100644 index 82e55b95ec..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ConsoleProject - - - - - - Template\AssemblyInfo.fs; - Template\Program.fs; - - - - - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config b/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config deleted file mode 100644 index 7301b90379..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - $if$ ($targetframeworkversion$ >= 4.0)$endif$$if$ ($targetframeworkversion$ < 4.0)$endif$ - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs deleted file mode 100644 index ae735840e6..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace $safeprojectname$.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// @@@GeneralInfo-Line1|General Information about an assembly is controlled through the following@@@ -// @@@GeneralInfo-Line2|set of attributes. Change these attribute values to modify the information@@@ -// @@@GeneralInfo-Line3|associated with an assembly.@@@ -[] -[] -[] -[] -[] -[] -[] -[] - -// @@@ComVisible-Line1|Setting ComVisible to false makes the types in this assembly not visible@@@ -// @@@ComVisible-Line2|to COM components. If you need to access a type in this assembly from@@@ -// @@@ComVisible-Line3|COM, set the ComVisible attribute to true on that type.@@@ -[] - -// @@@Guid-Line1|The following GUID is for the ID of the typelib if this project is exposed to COM@@@ -[] - -// @@@VersionInfo-Line1|Version information for an assembly consists of the following four values:@@@ -// -// @@@MajorVersion|Major Version@@@ -// @@@MinorVersion|Minor Version@@@ -// @@@BuildNumber|Build Number@@@ -// @@@Revision|Revision@@@ -// -// @@@VersionInfo-Line2|You can specify all the values or you can default the Build and Revision Numbers@@@ -// @@@VersionInfo-Line3|by using the '*' as shown below:@@@ -// [] -[] -[] - -do - () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj deleted file mode 100644 index 19c297de5e..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Exe - $safeprojectname$ - $safeprojectname$ - v$targetframeworkversion$ - true - true - 3239;$(WarningsAsErrors) - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - - - - - - - - - - - - 11 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate deleted file mode 100644 index fea0279b94..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Microsoft.FSharp.Application - FSharp - 4.5 - 1 - true - ConsoleApplication - true - true - - - - AssemblyInfo.fs - Program.fs - App.config - - - - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard - - - - - - - - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs b/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs deleted file mode 100644 index 93b7275510..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs +++ /dev/null @@ -1,7 +0,0 @@ -// @@@LearnMore|Learn more about F# at https://fsharp.org@@@ -// @@@SeeTutorial|See the 'F# Tutorial' project for more help.@@@ - -[] -let main argv = - printfn "%A" argv - 0 // @@@Return|return an integer exit code@@@ diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf deleted file mode 100644 index a580d9e396..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Obecné informace o sestavení se řídí přes následující - - - - set of attributes. Change these attribute values to modify the information - sadu atributů. Změnou hodnot těchto atributů se upraví informace - - - - associated with an assembly. - přidružené k sestavení. - - - - Setting ComVisible to false makes the types in this assembly not visible - Nastavením atributu ComVisible na hodnotu False budou typy v tomto sestavení neviditelné - - - - to COM components. If you need to access a type in this assembly from - pro komponenty modelu COM. Pokud potřebujete přistoupit k typu v tomto sestavení z - - - - COM, set the ComVisible attribute to true on that type. - modelu COM, nastavte atribut ComVisible daného typu na hodnotu True. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Následující GUID se používá pro ID knihovny typů, pokud je tento projekt vystavený pro COM. - - - - Version information for an assembly consists of the following four values: - Informace o verzi sestavení se skládá z těchto čtyř hodnot: - - - - Major Version - Hlavní verze - - - - Minor Version - Podverze - - - - Build Number - Číslo sestavení - - - - Revision - Revize - - - - You can specify all the values or you can default the Build and Revision Numbers - Můžete zadat všechny hodnoty nebo nechat nastavená výchozí čísla sestavení a revize - - - - by using the '*' as shown below: - pomocí zástupného znaku * takto: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf deleted file mode 100644 index 8df6ae7fc3..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Allgemeine Informationen über eine Assembly werden über die folgende - - - - set of attributes. Change these attribute values to modify the information - Attributgruppe gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, - - - - associated with an assembly. - die einer Assembly zugeordnet sind. - - - - Setting ComVisible to false makes the types in this assembly not visible - Durch Festlegen von ComVisible auf FALSE sind die Typen in dieser Assembly nicht - - - - to COM components. If you need to access a type in this assembly from - für COM-Komponenten sichtbar. Wenn Sie auf einen Typ in dieser Assembly von - - - - COM, set the ComVisible attribute to true on that type. - COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf TRUE festlegen. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird - - - - Version information for an assembly consists of the following four values: - Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: - - - - Major Version - Hauptversion - - - - Minor Version - Nebenversion - - - - Build Number - Buildnummer - - - - Revision - Revision - - - - You can specify all the values or you can default the Build and Revision Numbers - Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern - - - - by using the '*' as shown below: - übernehmen, indem Sie "*" eingeben: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf deleted file mode 100644 index 9beb403796..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - La información general de un ensamblado se controla mediante el siguiente - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Cambie estos valores de atributo para modificar la información - - - - associated with an assembly. - asociada con un ensamblado. - - - - Setting ComVisible to false makes the types in this assembly not visible - Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles - - - - to COM components. If you need to access a type in this assembly from - para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde - - - - COM, set the ComVisible attribute to true on that type. - COM, establezca el atributo ComVisible en true en este tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM. - - - - Version information for an assembly consists of the following four values: - La información de versión de un ensamblado consta de los cuatro valores siguientes: - - - - Major Version - Versión principal - - - - Minor Version - Versión secundaria - - - - Build Number - Número de compilación - - - - Revision - Revisión - - - - You can specify all the values or you can default the Build and Revision Numbers - Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión - - - - by using the '*' as shown below: - mediante el carácter '*', como se muestra a continuación: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf deleted file mode 100644 index a259bd3051..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Les informations générales relatives à un assembly dépendent de - - - - set of attributes. Change these attribute values to modify the information - l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations - - - - associated with an assembly. - associées à un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly - - - - to COM components. If you need to access a type in this assembly from - aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, affectez la valeur true à l'attribut ComVisible sur ce type. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM - - - - Version information for an assembly consists of the following four values: - Les informations de version pour un assembly se composent des quatre valeurs suivantes : - - - - Major Version - Version principale - - - - Minor Version - Version secondaire - - - - Build Number - Numéro de build - - - - Revision - Révision - - - - You can specify all the values or you can default the Build and Revision Numbers - Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut - - - - by using the '*' as shown below: - en utilisant '*', comme indiqué ci-dessous : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf deleted file mode 100644 index d5fc6c7558..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Le informazioni generali relative a un assembly sono controllate dal seguente - - - - set of attributes. Change these attribute values to modify the information - set di attributi. Modificare i valori di questi attributi per modificare le informazioni - - - - associated with an assembly. - associate a un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili - - - - to COM components. If you need to access a type in this assembly from - ai componenti COM. Se è necessario accedere a un tipo in questo assembly da - - - - COM, set the ComVisible attribute to true on that type. - COM, impostare su true l'attributo ComVisible per tale tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi - - - - Version information for an assembly consists of the following four values: - Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti: - - - - Major Version - Versione principale - - - - Minor Version - Versione secondaria - - - - Build Number - Numero di build - - - - Revision - Revisione - - - - You can specify all the values or you can default the Build and Revision Numbers - È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build - - - - by using the '*' as shown below: - utilizzando l'asterisco (*) come illustrato di seguito: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf deleted file mode 100644 index 1f413753d1..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - アセンブリに関する一般情報は、以下の属性セットによって - - - - set of attributes. Change these attribute values to modify the information - 制御されます。アセンブリに関連付けられている情報を変更するには、 - - - - associated with an assembly. - これらの属性値を変更します。 - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible を false に設定すると、COM コンポーネントがこのアセンブリ内のその型を認識 - - - - to COM components. If you need to access a type in this assembly from - できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 - - - - COM, set the ComVisible attribute to true on that type. - その型の ComVisible 属性を true に設定します。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります - - - - Version information for an assembly consists of the following four values: - アセンブリのバージョン情報は、以下の 4 つの値で構成されます。: - - - - Major Version - メジャー バージョン - - - - Minor Version - マイナー バージョン - - - - Build Number - ビルド番号 - - - - Revision - リビジョン - - - - You can specify all the values or you can default the Build and Revision Numbers - すべての値を指定するか、下に示すように '*' を使用してビルドおよびリビジョン番号を - - - - by using the '*' as shown below: - 既定値にすることができます。: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf deleted file mode 100644 index 258b4ebab2..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 어셈블리의 일반 정보는 다음 특성 집합을 통해 - - - - set of attributes. Change these attribute values to modify the information - 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 - - - - associated with an assembly. - 이러한 특성 값을 변경하세요. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 - - - - to COM components. If you need to access a type in this assembly from - 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 - - - - COM, set the ComVisible attribute to true on that type. - 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. - - - - Version information for an assembly consists of the following four values: - 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.: - - - - Major Version - 주 버전 - - - - Minor Version - 부 버전 - - - - Build Number - 빌드 번호 - - - - Revision - 수정 버전 - - - - You can specify all the values or you can default the Build and Revision Numbers - 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 - - - - by using the '*' as shown below: - 지정되도록 할 수 있습니다.: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf deleted file mode 100644 index ee3471fb55..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Ogólne informacje o zestawie są kontrolowane poprzez następujący - - - - set of attributes. Change these attribute values to modify the information - zbiór atrybutów. Zmień wartości tych atrybutów by zmodyfikować informacje - - - - associated with an assembly. - powiązane z zestawem. - - - - Setting ComVisible to false makes the types in this assembly not visible - Ustawienie wartości ComVisible na false sprawia, że typy w tym zestawie nie będą widoczne - - - - to COM components. If you need to access a type in this assembly from - dla składników COM. Jeśli potrzebny jest dostęp do typu w tym zestawie z - - - - COM, set the ComVisible attribute to true on that type. - COM, ustaw atrybut ComVisible na true dla danego typu. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Następujący GUID jest dla ID typelib jeśli ten projekt jest dostępny dla COM - - - - Version information for an assembly consists of the following four values: - Informacje o wersji zestawu zawierają następujące cztery wartości: - - - - Major Version - Wersja główna - - - - Minor Version - Wersja pomocnicza - - - - Build Number - Numer kompilacji - - - - Revision - Poprawka - - - - You can specify all the values or you can default the Build and Revision Numbers - Można określać wszystkie wartości lub używać domyślnych numerów kompilacji i poprawki - - - - by using the '*' as shown below: - przy użyciu symbolu „*”, tak jak pokazano poniżej: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf deleted file mode 100644 index 48d258faa2..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - As informações gerais sobre um assembly são controladas por meio do seguinte - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Altere estes valores de atributo para modificar as informações - - - - associated with an assembly. - associados a um assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Definir ComVisible como false oculta os tipos neste assembly - - - - to COM components. If you need to access a type in this assembly from - para componentes COM. Caso precise acessar um tipo neste assembly a partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, defina o atributo ComVisible como true nesse tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - O GUID a seguir é para a ID de typelib quando este projeto é exposto a COM - - - - Version information for an assembly consists of the following four values: - As informações da versão de um assembly consistem nos quatro valores a seguir: - - - - Major Version - Versão Principal - - - - Minor Version - Versão Secundária - - - - Build Number - Número da Versão - - - - Revision - Revisão - - - - You can specify all the values or you can default the Build and Revision Numbers - É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão - - - - by using the '*' as shown below: - utilizando o '*' como mostrado abaixo: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf deleted file mode 100644 index c0f2735eae..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Общие сведения о сборке можно задать с помощью следующего - - - - set of attributes. Change these attribute values to modify the information - набора атрибутов. Отредактируйте эти значения атрибутов, чтобы изменить сведения, - - - - associated with an assembly. - связанные с этой сборкой. - - - - Setting ComVisible to false makes the types in this assembly not visible - При установке значения False в атрибуте ComVisible типы в этой сборке становятся невидимыми - - - - to COM components. If you need to access a type in this assembly from - для COM-компонентов. Если требуется обратиться к типу в этой сборке через - - - - COM, set the ComVisible attribute to true on that type. - COM, задайте для атрибута ComVisible значение True для этого типа. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Следующий GUID служит для идентификации библиотеки типов, если этот проект видим для COM - - - - Version information for an assembly consists of the following four values: - Сведения о версии сборки состоят из следующих четырех значений: - - - - Major Version - Основной номер версии - - - - Minor Version - Вспомогательная версия - - - - Build Number - Номер сборки - - - - Revision - Редакция - - - - You can specify all the values or you can default the Build and Revision Numbers - Можно задать все значения или принять номера сборки и редакции по умолчанию - - - - by using the '*' as shown below: - используя "*", как показано ниже: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf deleted file mode 100644 index 906ec8f3ef..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki - - - - set of attributes. Change these attribute values to modify the information - öznitelikler kümesi. Bilgileri değiştirmek için bu öznitelik değerlerini değiştirin - - - - associated with an assembly. - Bir bütünleştirilmiş kod ile ilişkilendirildi. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible ayarının false olarak belirlenmesi bu derlemedeki türleri - - - - to COM components. If you need to access a type in this assembly from - COM bileşenlerine görünmez yapar. Bu derlemedeki bir türe COM'dan - - - - COM, set the ComVisible attribute to true on that type. - erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Eğer bu proje COM'a maruz kaldıysa aşağıdaki GUID typelib'in IDsi içindir - - - - Version information for an assembly consists of the following four values: - Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur: - - - - Major Version - Birincil Sürüm - - - - Minor Version - İkincil Sürüm - - - - Build Number - Yapı Numarası - - - - Revision - Düzeltme - - - - You can specify all the values or you can default the Build and Revision Numbers - Tüm değerleri belirtebilir veya varsayılan Oluşturma ve Düzeltme Numaralarını kullanabilirsiniz - - - - by using the '*' as shown below: - '*' karakterini aşağıda gösterildiği gibi kullanarak: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf deleted file mode 100644 index d76c9dbd18..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 有关程序集的一般信息由以下 - - - - set of attributes. Change these attribute values to modify the information - 控制。更改这些特性值可修改 - - - - associated with an assembly. - 与程序集关联的信息。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 将 ComVisible 设置为 false 将使此程序集中的类型 - - - - to COM components. If you need to access a type in this assembly from - 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, - - - - COM, set the ComVisible attribute to true on that type. - 请将此类型的 ComVisible 特性设置为 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID - - - - Version information for an assembly consists of the following four values: - 程序集的版本信息由下列四个值组成: - - - - Major Version - 主版本 - - - - Minor Version - 次版本 - - - - Build Number - 生成号 - - - - Revision - 修订 - - - - You can specify all the values or you can default the Build and Revision Numbers - 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, - - - - by using the '*' as shown below: - 方法是按如下所示使用“*”: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf deleted file mode 100644 index 477f8719df..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 組件的一般資訊是由下列的屬性集控制 - - - - set of attributes. Change these attribute values to modify the information - 變更這些屬性的值即可修改組件的相關 - - - - associated with an assembly. - 資訊。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 將 ComVisible 設定為 false 會使得這個組件中的類型 - - - - to COM components. If you need to access a type in this assembly from - 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 - - - - COM, set the ComVisible attribute to true on that type. - 的類型,請在該類型上將 ComVisible 屬性設定為 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID - - - - Version information for an assembly consists of the following four values: - 組件的版本資訊由下列四個值所組成: : - - - - Major Version - 主要版本 - - - - Minor Version - 次要版本 - - - - Build Number - 組建編號 - - - - Revision - 修訂 - - - - You can specify all the values or you can default the Build and Revision Numbers - 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 - - - - by using the '*' as shown below: - 指定為預設值: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf deleted file mode 100644 index 0a1913fea3..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Další informace o F# najdete na https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Pokud potřebujete další nápovědu, viz projekt Výukový kurz F#. - - - - return an integer exit code - vrátit celočíselný ukončovací kód - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf deleted file mode 100644 index 8c434e9d7d..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Weitere Informationen zu F# unter https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Weitere Hilfe finden Sie im Projekt "F#-Tutorial". - - - - return an integer exit code - Integer-Exitcode zurückgeben - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf deleted file mode 100644 index 1472966885..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Más información sobre F# en https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Vea el proyecto "Tutorial de F#" para obtener más ayuda. - - - - return an integer exit code - devolver un código de salida entero - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf deleted file mode 100644 index 8052d98708..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - En savoir plus sur F# : https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Voir le projet 'Didacticiel F#' pour obtenir de l'aide. - - - - return an integer exit code - retourne du code de sortie entier - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf deleted file mode 100644 index c9027ad5b6..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Altre informazioni su F# disponibili all'indirizzo https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Per altre informazioni, vedere il progetto 'Esercitazione su F#'. - - - - return an integer exit code - restituisce un intero come codice di uscita - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf deleted file mode 100644 index c24608aec3..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# の詳細については、https://fsharp.org をご覧ください - - - - See the 'F# Tutorial' project for more help. - 詳細については、'F# チュートリアル' プロジェクトを参照してください。 - - - - return an integer exit code - 整数の終了コードを返します - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf deleted file mode 100644 index 7d9f7dc54e..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - https://fsharp.org에서 F#에 대해 자세히 알아보기 - - - - See the 'F# Tutorial' project for more help. - 자세한 도움말은 'F# 자습서' 프로젝트를 참조하세요. - - - - return an integer exit code - 정수 종료 코드 반환 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf deleted file mode 100644 index 763d2db3df..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Dowiedz się więcej o języku F# na stronie https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Aby uzyskać dodatkową pomoc, zobacz projekt „Samouczek języka F#”. - - - - return an integer exit code - zwracanie kodu zakończenia w postaci liczby całkowitej - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf deleted file mode 100644 index 7af54cd8fd..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Saiba mais sobre o F# em https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Veja o projeto 'F# Tutorial' para obter mais ajuda. - - - - return an integer exit code - retornar um código de saída inteiro - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf deleted file mode 100644 index 54eb018503..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Дополнительные сведения об F# см. на странице https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Дополнительную справку см. в проекте "Учебник по F#". - - - - return an integer exit code - возвращение целочисленного кода выхода - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf deleted file mode 100644 index c584140b66..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# hakkında daha fazla bilgi edinmek için bkz. https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Daha fazla yardım almak için 'F# Öğreticisi' projesine göz atın. - - - - return an integer exit code - bir tamsayı çıkış kodu döndürür - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf deleted file mode 100644 index 27df727dbd..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 了解更多关于 F# 的信息,请访问 https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - 请参阅“F# 教程”项目以获取更多帮助。 - - - - return an integer exit code - 返回整数退出代码 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf deleted file mode 100644 index 5f67238de8..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 前往 https://fsharp.org 深入了解 F# - - - - See the 'F# Tutorial' project for more help. - 請參閱「F# 教學課程」專案,取得更多說明。 - - - - return an integer exit code - 傳回整數的結束代碼 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest deleted file mode 100644 index 5f28d2c06e..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest +++ /dev/null @@ -1,24 +0,0 @@ - - - - - F# .NETCore Project Templates - F# project templates for .NETCore. - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/ProjectTemplates/Directory.Build.props b/vsintegration/ProjectTemplates/Directory.Build.props deleted file mode 100644 index 49fb4e2d1f..0000000000 --- a/vsintegration/ProjectTemplates/Directory.Build.props +++ /dev/null @@ -1,10 +0,0 @@ - - - - ProjectTemplates - Microsoft.FSharp - - - - - diff --git a/vsintegration/ProjectTemplates/Directory.Build.targets b/vsintegration/ProjectTemplates/Directory.Build.targets deleted file mode 100644 index 6dd437b28f..0000000000 --- a/vsintegration/ProjectTemplates/Directory.Build.targets +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj b/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj deleted file mode 100644 index 23239f0047..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - LibraryProject - - - - - - Template\AssemblyInfo.fs; - Template\Script.fsx; - - - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs deleted file mode 100644 index ae735840e6..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace $safeprojectname$.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// @@@GeneralInfo-Line1|General Information about an assembly is controlled through the following@@@ -// @@@GeneralInfo-Line2|set of attributes. Change these attribute values to modify the information@@@ -// @@@GeneralInfo-Line3|associated with an assembly.@@@ -[] -[] -[] -[] -[] -[] -[] -[] - -// @@@ComVisible-Line1|Setting ComVisible to false makes the types in this assembly not visible@@@ -// @@@ComVisible-Line2|to COM components. If you need to access a type in this assembly from@@@ -// @@@ComVisible-Line3|COM, set the ComVisible attribute to true on that type.@@@ -[] - -// @@@Guid-Line1|The following GUID is for the ID of the typelib if this project is exposed to COM@@@ -[] - -// @@@VersionInfo-Line1|Version information for an assembly consists of the following four values:@@@ -// -// @@@MajorVersion|Major Version@@@ -// @@@MinorVersion|Minor Version@@@ -// @@@BuildNumber|Build Number@@@ -// @@@Revision|Revision@@@ -// -// @@@VersionInfo-Line2|You can specify all the values or you can default the Build and Revision Numbers@@@ -// @@@VersionInfo-Line3|by using the '*' as shown below:@@@ -// [] -[] -[] - -do - () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj deleted file mode 100644 index 5878583967..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Library - $safeprojectname$ - $safeprojectname$ - true - v$targetframeworkversion$ - true - 3239;$(WarningsAsErrors) - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - bin\$(Configuration)\$(AssemblyName).XML - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - bin\$(Configuration)\$(AssemblyName).XML - - - - - - - - - - - - - - 11 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate deleted file mode 100644 index d7f9a14d8d..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Microsoft.FSharp.Library - FSharp - 4.5 - 1 - true - Library - true - true - - - - AssemblyInfo.fs - Library1.fs - Script.fsx - - - - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard - - - - - - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs b/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs deleted file mode 100644 index c8a8cd1b46..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs +++ /dev/null @@ -1,4 +0,0 @@ -namespace $safeprojectname$ - -type Class1() = - member this.X = "F#" diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx b/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx deleted file mode 100644 index 0caeb86ca6..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx +++ /dev/null @@ -1,8 +0,0 @@ -// @@@LearnMore|Learn more about F# at https://fsharp.org@@@ -// @@@SeeTutorial|See the 'F# Tutorial' project for more help.@@@ - -#load "Library1.fs" -open $safeprojectname$ - -// @@@Define|Define your library scripting code here@@@ - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf deleted file mode 100644 index a580d9e396..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Obecné informace o sestavení se řídí přes následující - - - - set of attributes. Change these attribute values to modify the information - sadu atributů. Změnou hodnot těchto atributů se upraví informace - - - - associated with an assembly. - přidružené k sestavení. - - - - Setting ComVisible to false makes the types in this assembly not visible - Nastavením atributu ComVisible na hodnotu False budou typy v tomto sestavení neviditelné - - - - to COM components. If you need to access a type in this assembly from - pro komponenty modelu COM. Pokud potřebujete přistoupit k typu v tomto sestavení z - - - - COM, set the ComVisible attribute to true on that type. - modelu COM, nastavte atribut ComVisible daného typu na hodnotu True. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Následující GUID se používá pro ID knihovny typů, pokud je tento projekt vystavený pro COM. - - - - Version information for an assembly consists of the following four values: - Informace o verzi sestavení se skládá z těchto čtyř hodnot: - - - - Major Version - Hlavní verze - - - - Minor Version - Podverze - - - - Build Number - Číslo sestavení - - - - Revision - Revize - - - - You can specify all the values or you can default the Build and Revision Numbers - Můžete zadat všechny hodnoty nebo nechat nastavená výchozí čísla sestavení a revize - - - - by using the '*' as shown below: - pomocí zástupného znaku * takto: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf deleted file mode 100644 index 8df6ae7fc3..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Allgemeine Informationen über eine Assembly werden über die folgende - - - - set of attributes. Change these attribute values to modify the information - Attributgruppe gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, - - - - associated with an assembly. - die einer Assembly zugeordnet sind. - - - - Setting ComVisible to false makes the types in this assembly not visible - Durch Festlegen von ComVisible auf FALSE sind die Typen in dieser Assembly nicht - - - - to COM components. If you need to access a type in this assembly from - für COM-Komponenten sichtbar. Wenn Sie auf einen Typ in dieser Assembly von - - - - COM, set the ComVisible attribute to true on that type. - COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf TRUE festlegen. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird - - - - Version information for an assembly consists of the following four values: - Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: - - - - Major Version - Hauptversion - - - - Minor Version - Nebenversion - - - - Build Number - Buildnummer - - - - Revision - Revision - - - - You can specify all the values or you can default the Build and Revision Numbers - Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern - - - - by using the '*' as shown below: - übernehmen, indem Sie "*" eingeben: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf deleted file mode 100644 index 9beb403796..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - La información general de un ensamblado se controla mediante el siguiente - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Cambie estos valores de atributo para modificar la información - - - - associated with an assembly. - asociada con un ensamblado. - - - - Setting ComVisible to false makes the types in this assembly not visible - Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles - - - - to COM components. If you need to access a type in this assembly from - para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde - - - - COM, set the ComVisible attribute to true on that type. - COM, establezca el atributo ComVisible en true en este tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM. - - - - Version information for an assembly consists of the following four values: - La información de versión de un ensamblado consta de los cuatro valores siguientes: - - - - Major Version - Versión principal - - - - Minor Version - Versión secundaria - - - - Build Number - Número de compilación - - - - Revision - Revisión - - - - You can specify all the values or you can default the Build and Revision Numbers - Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión - - - - by using the '*' as shown below: - mediante el carácter '*', como se muestra a continuación: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf deleted file mode 100644 index a259bd3051..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Les informations générales relatives à un assembly dépendent de - - - - set of attributes. Change these attribute values to modify the information - l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations - - - - associated with an assembly. - associées à un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly - - - - to COM components. If you need to access a type in this assembly from - aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, affectez la valeur true à l'attribut ComVisible sur ce type. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM - - - - Version information for an assembly consists of the following four values: - Les informations de version pour un assembly se composent des quatre valeurs suivantes : - - - - Major Version - Version principale - - - - Minor Version - Version secondaire - - - - Build Number - Numéro de build - - - - Revision - Révision - - - - You can specify all the values or you can default the Build and Revision Numbers - Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut - - - - by using the '*' as shown below: - en utilisant '*', comme indiqué ci-dessous : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf deleted file mode 100644 index d5fc6c7558..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Le informazioni generali relative a un assembly sono controllate dal seguente - - - - set of attributes. Change these attribute values to modify the information - set di attributi. Modificare i valori di questi attributi per modificare le informazioni - - - - associated with an assembly. - associate a un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili - - - - to COM components. If you need to access a type in this assembly from - ai componenti COM. Se è necessario accedere a un tipo in questo assembly da - - - - COM, set the ComVisible attribute to true on that type. - COM, impostare su true l'attributo ComVisible per tale tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi - - - - Version information for an assembly consists of the following four values: - Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti: - - - - Major Version - Versione principale - - - - Minor Version - Versione secondaria - - - - Build Number - Numero di build - - - - Revision - Revisione - - - - You can specify all the values or you can default the Build and Revision Numbers - È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build - - - - by using the '*' as shown below: - utilizzando l'asterisco (*) come illustrato di seguito: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf deleted file mode 100644 index 1f413753d1..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - アセンブリに関する一般情報は、以下の属性セットによって - - - - set of attributes. Change these attribute values to modify the information - 制御されます。アセンブリに関連付けられている情報を変更するには、 - - - - associated with an assembly. - これらの属性値を変更します。 - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible を false に設定すると、COM コンポーネントがこのアセンブリ内のその型を認識 - - - - to COM components. If you need to access a type in this assembly from - できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 - - - - COM, set the ComVisible attribute to true on that type. - その型の ComVisible 属性を true に設定します。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります - - - - Version information for an assembly consists of the following four values: - アセンブリのバージョン情報は、以下の 4 つの値で構成されます。: - - - - Major Version - メジャー バージョン - - - - Minor Version - マイナー バージョン - - - - Build Number - ビルド番号 - - - - Revision - リビジョン - - - - You can specify all the values or you can default the Build and Revision Numbers - すべての値を指定するか、下に示すように '*' を使用してビルドおよびリビジョン番号を - - - - by using the '*' as shown below: - 既定値にすることができます。: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf deleted file mode 100644 index 258b4ebab2..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 어셈블리의 일반 정보는 다음 특성 집합을 통해 - - - - set of attributes. Change these attribute values to modify the information - 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 - - - - associated with an assembly. - 이러한 특성 값을 변경하세요. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 - - - - to COM components. If you need to access a type in this assembly from - 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 - - - - COM, set the ComVisible attribute to true on that type. - 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. - - - - Version information for an assembly consists of the following four values: - 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.: - - - - Major Version - 주 버전 - - - - Minor Version - 부 버전 - - - - Build Number - 빌드 번호 - - - - Revision - 수정 버전 - - - - You can specify all the values or you can default the Build and Revision Numbers - 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 - - - - by using the '*' as shown below: - 지정되도록 할 수 있습니다.: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf deleted file mode 100644 index ee3471fb55..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Ogólne informacje o zestawie są kontrolowane poprzez następujący - - - - set of attributes. Change these attribute values to modify the information - zbiór atrybutów. Zmień wartości tych atrybutów by zmodyfikować informacje - - - - associated with an assembly. - powiązane z zestawem. - - - - Setting ComVisible to false makes the types in this assembly not visible - Ustawienie wartości ComVisible na false sprawia, że typy w tym zestawie nie będą widoczne - - - - to COM components. If you need to access a type in this assembly from - dla składników COM. Jeśli potrzebny jest dostęp do typu w tym zestawie z - - - - COM, set the ComVisible attribute to true on that type. - COM, ustaw atrybut ComVisible na true dla danego typu. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Następujący GUID jest dla ID typelib jeśli ten projekt jest dostępny dla COM - - - - Version information for an assembly consists of the following four values: - Informacje o wersji zestawu zawierają następujące cztery wartości: - - - - Major Version - Wersja główna - - - - Minor Version - Wersja pomocnicza - - - - Build Number - Numer kompilacji - - - - Revision - Poprawka - - - - You can specify all the values or you can default the Build and Revision Numbers - Można określać wszystkie wartości lub używać domyślnych numerów kompilacji i poprawki - - - - by using the '*' as shown below: - przy użyciu symbolu „*”, tak jak pokazano poniżej: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf deleted file mode 100644 index 48d258faa2..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - As informações gerais sobre um assembly são controladas por meio do seguinte - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Altere estes valores de atributo para modificar as informações - - - - associated with an assembly. - associados a um assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Definir ComVisible como false oculta os tipos neste assembly - - - - to COM components. If you need to access a type in this assembly from - para componentes COM. Caso precise acessar um tipo neste assembly a partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, defina o atributo ComVisible como true nesse tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - O GUID a seguir é para a ID de typelib quando este projeto é exposto a COM - - - - Version information for an assembly consists of the following four values: - As informações da versão de um assembly consistem nos quatro valores a seguir: - - - - Major Version - Versão Principal - - - - Minor Version - Versão Secundária - - - - Build Number - Número da Versão - - - - Revision - Revisão - - - - You can specify all the values or you can default the Build and Revision Numbers - É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão - - - - by using the '*' as shown below: - utilizando o '*' como mostrado abaixo: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf deleted file mode 100644 index c0f2735eae..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Общие сведения о сборке можно задать с помощью следующего - - - - set of attributes. Change these attribute values to modify the information - набора атрибутов. Отредактируйте эти значения атрибутов, чтобы изменить сведения, - - - - associated with an assembly. - связанные с этой сборкой. - - - - Setting ComVisible to false makes the types in this assembly not visible - При установке значения False в атрибуте ComVisible типы в этой сборке становятся невидимыми - - - - to COM components. If you need to access a type in this assembly from - для COM-компонентов. Если требуется обратиться к типу в этой сборке через - - - - COM, set the ComVisible attribute to true on that type. - COM, задайте для атрибута ComVisible значение True для этого типа. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Следующий GUID служит для идентификации библиотеки типов, если этот проект видим для COM - - - - Version information for an assembly consists of the following four values: - Сведения о версии сборки состоят из следующих четырех значений: - - - - Major Version - Основной номер версии - - - - Minor Version - Вспомогательная версия - - - - Build Number - Номер сборки - - - - Revision - Редакция - - - - You can specify all the values or you can default the Build and Revision Numbers - Можно задать все значения или принять номера сборки и редакции по умолчанию - - - - by using the '*' as shown below: - используя "*", как показано ниже: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf deleted file mode 100644 index 906ec8f3ef..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki - - - - set of attributes. Change these attribute values to modify the information - öznitelikler kümesi. Bilgileri değiştirmek için bu öznitelik değerlerini değiştirin - - - - associated with an assembly. - Bir bütünleştirilmiş kod ile ilişkilendirildi. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible ayarının false olarak belirlenmesi bu derlemedeki türleri - - - - to COM components. If you need to access a type in this assembly from - COM bileşenlerine görünmez yapar. Bu derlemedeki bir türe COM'dan - - - - COM, set the ComVisible attribute to true on that type. - erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Eğer bu proje COM'a maruz kaldıysa aşağıdaki GUID typelib'in IDsi içindir - - - - Version information for an assembly consists of the following four values: - Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur: - - - - Major Version - Birincil Sürüm - - - - Minor Version - İkincil Sürüm - - - - Build Number - Yapı Numarası - - - - Revision - Düzeltme - - - - You can specify all the values or you can default the Build and Revision Numbers - Tüm değerleri belirtebilir veya varsayılan Oluşturma ve Düzeltme Numaralarını kullanabilirsiniz - - - - by using the '*' as shown below: - '*' karakterini aşağıda gösterildiği gibi kullanarak: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf deleted file mode 100644 index d76c9dbd18..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 有关程序集的一般信息由以下 - - - - set of attributes. Change these attribute values to modify the information - 控制。更改这些特性值可修改 - - - - associated with an assembly. - 与程序集关联的信息。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 将 ComVisible 设置为 false 将使此程序集中的类型 - - - - to COM components. If you need to access a type in this assembly from - 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, - - - - COM, set the ComVisible attribute to true on that type. - 请将此类型的 ComVisible 特性设置为 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID - - - - Version information for an assembly consists of the following four values: - 程序集的版本信息由下列四个值组成: - - - - Major Version - 主版本 - - - - Minor Version - 次版本 - - - - Build Number - 生成号 - - - - Revision - 修订 - - - - You can specify all the values or you can default the Build and Revision Numbers - 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, - - - - by using the '*' as shown below: - 方法是按如下所示使用“*”: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf deleted file mode 100644 index 477f8719df..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 組件的一般資訊是由下列的屬性集控制 - - - - set of attributes. Change these attribute values to modify the information - 變更這些屬性的值即可修改組件的相關 - - - - associated with an assembly. - 資訊。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 將 ComVisible 設定為 false 會使得這個組件中的類型 - - - - to COM components. If you need to access a type in this assembly from - 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 - - - - COM, set the ComVisible attribute to true on that type. - 的類型,請在該類型上將 ComVisible 屬性設定為 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID - - - - Version information for an assembly consists of the following four values: - 組件的版本資訊由下列四個值所組成: : - - - - Major Version - 主要版本 - - - - Minor Version - 次要版本 - - - - Build Number - 組建編號 - - - - Revision - 修訂 - - - - You can specify all the values or you can default the Build and Revision Numbers - 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 - - - - by using the '*' as shown below: - 指定為預設值: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf deleted file mode 100644 index e9771690a9..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Další informace o F# najdete na https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Pokud potřebujete další nápovědu, viz projekt Výukový kurz F#. - - - - Define your library scripting code here - Tady definujte skriptovací kód knihovny. - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf deleted file mode 100644 index 61df76a280..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Weitere Informationen zu F# unter https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Weitere Hilfe finden Sie im Projekt "F#-Tutorial". - - - - Define your library scripting code here - Skriptcode für die Bibliothek hier definieren - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf deleted file mode 100644 index 96fb3d3647..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Más información sobre F# en https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Vea el proyecto "Tutorial de F#" para obtener más ayuda. - - - - Define your library scripting code here - Definir aquí el código de scripting de bibliotecas - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf deleted file mode 100644 index cb48575303..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Pour en savoir plus sur le F# : https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Voir le projet 'Didacticiel F#' pour obtenir de l'aide. - - - - Define your library scripting code here - Définir votre code de script de bibliothèque ici - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf deleted file mode 100644 index 42558ead9d..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Altre informazioni su F# disponibili all'indirizzo https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Per altre informazioni, vedere il progetto 'Esercitazione su F#'. - - - - Define your library scripting code here - Viene definito qui il codice di script della libreria - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf deleted file mode 100644 index 45967e26bf..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# の詳細については、https://fsharp.org をご覧ください - - - - See the 'F# Tutorial' project for more help. - 詳細については、'F# チュートリアル' プロジェクトを参照してください。 - - - - Define your library scripting code here - ここでライブラリ スクリプト コードを定義します - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf deleted file mode 100644 index 661f9e6344..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - https://fsharp.org에서 F#에 대해 자세히 알아보기 - - - - See the 'F# Tutorial' project for more help. - 자세한 도움말은 'F# 자습서' 프로젝트를 참조하세요. - - - - Define your library scripting code here - 라이브러리 스크립팅 코드를 정의합니다. - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf deleted file mode 100644 index e32717ff70..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Dowiedz się więcej o języku F# na stronie https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Aby uzyskać dodatkową pomoc, zobacz projekt „Samouczek języka F#”. - - - - Define your library scripting code here - Tutaj zdefiniuj kod skryptu biblioteki - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf deleted file mode 100644 index 1bd32f9343..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Saiba mais sobre o F# em https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Veja o projeto 'F# Tutorial' para obter mais ajuda. - - - - Define your library scripting code here - Defina seu código de script de biblioteca aqui - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf deleted file mode 100644 index b8a6d8cced..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Дополнительные сведения об F# см. на странице https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Дополнительную справку см. в проекте "Учебник по F#". - - - - Define your library scripting code here - Определите здесь код скрипта библиотеки - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf deleted file mode 100644 index 1b3c2476e6..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# hakkında daha fazla bilgi edinmek için bkz. https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Daha fazla yardım almak için 'F# Öğreticisi' projesine göz atın. - - - - Define your library scripting code here - Kitaplık betik oluşturma kodunuzu buradan tanımlayın - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf deleted file mode 100644 index 4d849f68e3..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 了解更多关于 F# 的信息,请访问 https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - 请参阅“F# 教程”项目以获取更多帮助。 - - - - Define your library scripting code here - 在此处定义库脚本代码 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf deleted file mode 100644 index 14ed4156de..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 前往 https://fsharp.org 深入了解 F# - - - - See the 'F# Tutorial' project for more help. - 請參閱「F# 教學課程」專案,取得更多說明。 - - - - Define your library scripting code here - 在這裡定義程式庫指令碼程式碼 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest deleted file mode 100644 index f5157eaa6b..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest +++ /dev/null @@ -1,25 +0,0 @@ - - - - - F# .NETCore Project Templates - F# project templates for .NETCore. - - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj deleted file mode 100644 index dd2eed1525..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Exe - $safeprojectname$ - $safeprojectname$ - v$targetframeworkversion$ - true - true - true - 3239;$(WarningsAsErrors) - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - - - - - - - - - - - - 11 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx deleted file mode 100644 index 52b6649ca3..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx +++ /dev/null @@ -1,997 +0,0 @@ -// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ -// -// ******************************************************************************************************* -// @@@Instructions-Line1|To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click@@@ -// @@@Instructions-Line2|and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu.@@@ -// ******************************************************************************************************* -// -// @@@MoreAbout|For more about F#, see:@@@ -// https://fsharp.org -// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/ -// -// @@@SeeDocumentaton|To see this tutorial in documentation form, see:@@@ -// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tour -// -// @@@LearnMoreAbout|To learn more about applied F# programming, use@@@ -// https://fsharp.org/guides/enterprise/ -// https://fsharp.org/guides/cloud/ -// https://fsharp.org/guides/web/ -// https://fsharp.org/guides/data-science/ -// -// @@@ToInstall-Line1|To install the Visual F# Power Tools, use@@@ -// @@@ToInstall-Line2|'Tools' --> 'Extensions and Updates' --> `Online` and search@@@ -// -// @@@AdditionalTemplates-Line1|For additional templates to use with F#, see the 'Online Templates' in Visual Studio,@@@ -// @@@AdditionalTemplates-Line2|'New Project' --> 'Online Templates'@@@ - -// @@@SupportsComments|F# supports three kinds of comments:@@@ - -// @@@DoubleSlash|1. Double-slash comments. These are used in most situations.@@@ -(* @@@MLStyle|2. ML-style Block comments. These aren't used that often.@@@ *) -/// @@@TripleSlash-Line1|3. Triple-slash comments. These are used for documenting functions, types, and so on.@@@ -/// @@@TripleSlash-Line2|They will appear as text when you hover over something which is decorated with these comments.@@@ -/// -/// @@@XmlComments-Line1|They also support .NET-style XML comments, which allow you to generate reference documentation,@@@ -/// @@@XmlComments-Line2|and they also allow editors (such as Visual Studio) to extract information from them.@@@ -/// @@@XmlComments-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation@@@ - - -// @@@OpenNamespaces|Open namespaces using the 'open' keyword.@@@ -// -// @@@LearnMore|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword@@@ -open System - - -/// @@@Module-Line1|A module is a grouping of F# code, such as values, types, and function values.@@@ -/// @@@Module-Line2|Grouping code in modules helps keep related code together and helps avoid name conflicts in your program.@@@ -/// -/// @@@Module-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules@@@ -module IntegersAndNumbers = - - /// @@@SampleInt|This is a sample integer.@@@ - let sampleInteger = 176 - - /// @@@SampleFloat|This is a sample floating point number.@@@ - let sampleDouble = 4.1 - - /// @@@Computed-Line1|This computed a new number by some arithmetic. Numeric types are converted using@@@ - /// @@@Computed-Line2|functions 'int', 'double' and so on.@@@ - let sampleInteger2 = (sampleInteger/4 + 5 - 7) * 4 + int sampleDouble - - /// @@@ListNumbers|This is a list of the numbers from 0 to 99.@@@ - let sampleNumbers = [ 0 .. 99 ] - - /// @@@ListSquares|This is a list of all tuples containing all the numbers from 0 to 99 and their squares.@@@ - let sampleTableOfSquares = [ for i in 0 .. 99 -> (i, i*i) ] - - // @@@PrintList1|The next line prints a list that includes tuples, using '%A' for generic printing.@@@ - printfn "The table of squares from 0 to 99 is:\n%A" sampleTableOfSquares - - // @@@SampleIntType|This is a sample integer with a type annotation@@@ - let sampleInteger3: int = 1 - - -/// @@@ValuesImmutable-Line1|Values in F# are immutable by default. They cannot be changed@@@ -/// @@@ValuesImmutable-Line2|in the course of a program's execution unless explicitly marked as mutable.@@@ -/// -/// @@@ValuesImmutable-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable@@@ -module Immutability = - - /// @@@LetKeyword-Line1|Binding a value to a name via 'let' makes it immutable.@@@ - /// - /// @@@LetKeyword-Line2|The second line of code fails to compile because 'number' is immutable and bound.@@@ - /// @@@LetKeyword-Line3|Re-defining 'number' to be a different value is not allowed in F#.@@@ - let number = 2 - // let number = 3 - - /// @@@MutableKeyword|A mutable binding. This is required to be able to mutate the value of 'otherNumber'.@@@ - let mutable otherNumber = 2 - - printfn "'otherNumber' is %d" otherNumber - - // @@@MutableAssignment-Line1|When mutating a value, use '<-' to assign a new value.@@@ - // - // @@@MutableAssignment-Line2|You could not use '=' here for this purpose since it is used for equality@@@ - // @@@MutableAssignment-Line3|or other contexts such as 'let' or 'module'@@@ - otherNumber <- otherNumber + 1 - - printfn "'otherNumber' changed to be %d" otherNumber - - -/// @@@FunctionsModule-Line1|Much of F# programming consists of defining functions that transform input data to produce@@@ -/// @@@FunctionsModule-Line2|useful results.@@@ -/// -/// @@@FunctionsModule-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/@@@ -module BasicFunctions = - - /// @@@LetFunction-Line1|You use 'let' to define a function. This one accepts an integer argument and returns an integer.@@@ - /// @@@LetFunction-Line2|Parentheses are optional for function arguments, except for when you use an explicit type annotation.@@@ - let sampleFunction1 x = x*x + 3 - - /// @@@ApplyFunction-Line1|Apply the function, naming the function return result using 'let'.@@@ - /// @@@ApplyFunction-Line2|The variable type is inferred from the function return type.@@@ - let result1 = sampleFunction1 4573 - - // @@@printf-Line1|This line uses '%d' to print the result as an integer. This is type-safe.@@@ - // @@@printf-Line2|If 'result1' were not of type 'int', then the line would fail to compile.@@@ - printfn "The result of squaring the integer 4573 and adding 3 is %d" result1 - - /// @@@TypeAnnotation|When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required.@@@ - let sampleFunction2 (x:int) = 2*x*x - x/5 + 3 - - let result2 = sampleFunction2 (7 + 4) - printfn "The result of applying the 2nd sample function to (7 + 4) is %d" result2 - - /// @@@Conditionals-Line1|Conditionals use if/then/elid/elif/else.@@@ - /// - /// @@@Conditionals-Line2|Note that F# uses whitespace indentation-aware syntax, similar to languages like Python.@@@ - let sampleFunction3 x = - if x < 100.0 then - 2.0*x*x - x/5.0 + 3.0 - else - 2.0*x*x + x/5.0 - 37.0 - - let result3 = sampleFunction3 (6.5 + 4.5) - - // @@@printf-Line3|This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe.@@@ - printfn "The result of applying the 3rd sample function to (6.5 + 4.5) is %f" result3 - - -/// @@@Booleans-Line1|Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic.@@@ -/// -/// @@@Booleans-Line2|To learn more, see:@@@ -/// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/primitive-types -/// @@@Booleans-Line3|and@@@ -/// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/symbol-and-operator-reference/boolean-operators -module Booleans = - - /// @@@BooleanValues|Booleans values are 'true' and 'false'.@@@ - let boolean1 = true - let boolean2 = false - - /// @@@BooleanOperators|Operators on booleans are 'not', '&&' and '||'.@@@ - let boolean3 = not boolean1 && (boolean2 || false) - - // @@@BooleanPrintf|This line uses '%b'to print a boolean value. This is type-safe.@@@ - printfn "The expression 'not boolean1 && (boolean2 || false)' is %b" boolean3 - - -/// @@@Strings-Line1|Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation.@@@ -/// -/// @@@Strings-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings@@@ -module StringManipulation = - - /// @@@StringQuotes|Strings use double quotes.@@@ - let string1 = "Hello" - let string2 = "world" - - /// @@@StringLiterals-Line1|Strings can also use @ to create a verbatim string literal.@@@ - /// @@@StringLiterals-Line2|This will ignore escape characters such as '\', '\n', '\t', etc.@@@ - let string3 = @"C:\Program Files\" - - /// @@@StringTripleQuotes|String literals can also use triple-quotes.@@@ - let string4 = """The computer said "hello world" when I told it to!""" - - /// @@@StringConcatenation|String concatenation is normally done with the '+' operator.@@@ - let helloWorld = string1 + " " + string2 - - // @@@StringPrinting|This line uses '%s' to print a string value. This is type-safe.@@@ - printfn "%s" helloWorld - - /// @@@Substrings-Line1|Substrings use the indexer notation. This line extracts the first 7 characters as a substring.@@@ - /// @@@Substrings-Line2|Note that like many languages, Strings are zero-indexed in F#.@@@ - let substring = helloWorld.[0..6] - printfn "%s" substring - - -/// @@@Tuples-Line1|Tuples are simple combinations of data values into a combined value.@@@ -/// -/// @@@Tuples-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples@@@ -module Tuples = - - /// @@@TupleInteger|A simple tuple of integers.@@@ - let tuple1 = (1, 2, 3) - - /// @@@TupleFunction-Line1|A function that swaps the order of two values in a tuple.@@@ - /// - /// @@@TupleFunction-Line2|F# Type Inference will automatically generalize the function to have a generic type,@@@ - /// @@@TupleFunction-Line3|meaning that it will work with any type.@@@ - let swapElems (a, b) = (b, a) - - printfn "The result of swapping (1, 2) is %A" (swapElems (1,2)) - - /// @@@TupleMultiType-Line1|A tuple consisting of an integer, a string,@@@ - /// @@@TupleMultiType-Line2|and a double-precision floating point number.@@@ - let tuple2 = (1, "fred", 3.1415) - - printfn "tuple1: %A\ttuple2: %A" tuple1 tuple2 - - /// @@@TupleTypeAnnotation-Line1|A simple tuple of integers with a type annotation.@@@ - /// @@@TupleTypeAnnotation-Line2|Type annotations for tuples use the * symbol to separate elements@@@ - let tuple3: int * int = (5, 9) - - /// @@@StructTuple-Line1|Tuples are normally objects, but they can also be represented as structs.@@@ - /// - /// @@@StructTuple-Line2|These interoperate completely with structs in C# and Visual Basic.NET; however,@@@ - /// @@@StructTuple-Line3|struct tuples are not implicitly convertable with object tuples (often called reference tuples).@@@ - /// - /// @@@StructTuple-Line4|The second line below will fail to compile because of this. Uncomment it to see what happens.@@@ - let sampleStructTuple = struct (1, 2) - //let thisWillNotCompile: (int*int) = struct (1, 2) - - // @@@TupleConvert-Line1|Although you cannot implicitly convert between struct tuples and reference tuples,@@@ - // @@@TupleConvert-Line2|you can explicitly convert via pattern matching, as demonstrated below.@@@ - let convertFromStructTuple (struct(a, b)) = (a, b) - let convertToStructTuple (a, b) = struct(a, b) - - printfn "Struct Tuple: %A\nReference tuple made from the Struct Tuple: %A" sampleStructTuple (sampleStructTuple |> convertFromStructTuple) - - -/// @@@Pipes-Line1|The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<')@@@ -/// @@@Pipes-Line2|are used extensively when processing data. These operators are themselves functions@@@ -/// @@@Pipes-Line3|which make use of Partial Application.@@@ -/// -/// @@@Pipes-Line4|To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining@@@ -/// @@@Pipes-Line5|To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments@@@ -module PipelinesAndComposition = - - /// @@@Squares|Squares a value.@@@ - let square x = x * x - - /// @@@AddOne|Adds 1 to a value.@@@ - let addOne x = x + 1 - - /// @@@TestOdd|Tests if an integer value is odd via modulo.@@@ - let isOdd x = x % 2 <> 0 - - /// @@@NumberList1|A list of 5 numbers. More on lists later.@@@ - let numbers = [ 1; 2; 3; 4; 5 ] - - /// @@@FilterWithoutPipes-Line1|Given a list of integers, it filters out the even numbers,@@@ - /// @@@FilterWithoutPipes-Line2|squares the resulting odds, and adds 1 to the squared odds.@@@ - let squareOddValuesAndAddOne values = - let odds = List.filter isOdd values - let squares = List.map square odds - let result = List.map addOne squares - result - - printfn "processing %A through 'squareOddValuesAndAddOne' produces: %A" numbers (squareOddValuesAndAddOne numbers) - - /// @@@FilterShorter-Line1|A shorter way to write 'squareOddValuesAndAddOne' is to nest each@@@ - /// @@@FilterShorter-Line2|sub-result into the function calls themselves.@@@ - /// - /// @@@FilterShorter-Line3|This makes the function much shorter, but it's difficult to see the@@@ - /// @@@FilterShorter-Line4|order in which the data is processed.@@@ - let squareOddValuesAndAddOneNested values = - List.map addOne (List.map square (List.filter isOdd values)) - - printfn "processing %A through 'squareOddValuesAndAddOneNested' produces: %A" numbers (squareOddValuesAndAddOneNested numbers) - - /// @@@FilterWithPipes-Line1|A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators.@@@ - /// @@@FilterWithPipes-Line2|This allows you to avoid creating intermediate results, but is much more readable@@@ - /// @@@FilterWithPipes-Line3|than nesting function calls like 'squareOddValuesAndAddOneNested'@@@ - let squareOddValuesAndAddOnePipeline values = - values - |> List.filter isOdd - |> List.map square - |> List.map addOne - - printfn "processing %A through 'squareOddValuesAndAddOnePipeline' produces: %A" numbers (squareOddValuesAndAddOnePipeline numbers) - - /// @@@PipeInLambda-Line1|You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call@@@ - /// @@@PipeInLambda-Line2|into the first, using a Lambda Function.@@@ - /// - /// @@@PipeInLambda-Line3|Note that pipelines are also being used inside the lambda function. F# pipe operators@@@ - /// @@@PipeInLambda-Line4|can be used for single values as well. This makes them very powerful for processing data.@@@ - let squareOddValuesAndAddOneShorterPipeline values = - values - |> List.filter isOdd - |> List.map(fun x -> x |> square |> addOne) - - printfn "processing %A through 'squareOddValuesAndAddOneShorterPipeline' produces: %A" numbers (squareOddValuesAndAddOneShorterPipeline numbers) - - /// @@@PipesComposition-Line1|Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>'@@@ - /// @@@PipesComposition-Line2|to compose the two core operations: filtering out even numbers, then squaring and adding one.@@@ - /// @@@PipesComposition-Line3|Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply@@@ - /// @@@PipesComposition-Line4|being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used@@@ - /// @@@PipesComposition-Line5|there as well.@@@ - /// - /// @@@PipesComposition-Line6|The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a@@@ - /// @@@PipesComposition-Line7|list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list@@@ - /// @@@PipesComposition-Line8|of integers, you'll notice that it produces the same results as previous functions.@@@ - /// - /// @@@PipesComposition-Line9|This is using what is known as function composition. This is possible because functions in F#@@@ - /// @@@PipesComposition-Line10|use Partial Application and the input and output types of each data processing operation match@@@ - /// @@@PipesComposition-Line11|the signatures of the functions we're using.@@@ - let squareOddValuesAndAddOneComposition = - List.filter isOdd >> List.map (square >> addOne) - - printfn "processing %A through 'squareOddValuesAndAddOneComposition' produces: %A" numbers (squareOddValuesAndAddOneComposition numbers) - - -/// @@@Lists-Line1|Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation.@@@ -/// -/// @@@Lists-Line2|This module shows various ways to generate lists and process lists with some functions@@@ -/// @@@Lists-Line3|in the 'List' module in the F# Core Library.@@@ -/// -/// @@@Lists-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists@@@ -module Lists = - - /// @@@ListEmptyDefinition|Lists are defined using [ ... ]. This is an empty list.@@@ - let list1 = [ ] - - /// @@@ListElementDefinition|This is a list with 3 elements. ';' is used to separate elements on the same line.@@@ - let list2 = [ 1; 2; 3 ] - - /// @@@ListNewlineElements|You can also separate elements by placing them on their own lines.@@@ - let list3 = [ - 1 - 2 - 3 - ] - - /// @@@NumberList2|This is a list of integers from 1 to 1000@@@ - let numberList = [ 1 .. 1000 ] - - /// @@@ListComputation-Line1|Lists can also be generated by computations. This is a list containing@@@ - /// @@@ListComputation-Line2|all the days of the year.@@@ - let daysList = - [ for month in 1 .. 12 do - for day in 1 .. System.DateTime.DaysInMonth(2017, month) do - yield System.DateTime(2017, month, day) ] - - // @@@PrintList2|Print the first 5 elements of 'daysList' using 'List.take'.@@@ - printfn "The first 5 days of 2017 are: %A" (daysList |> List.take 5) - - /// @@@ListComputationConditional-Line1|Computations can include conditionals. This is a list containing the tuples@@@ - /// @@@ListComputationConditional-Line2|which are the coordinates of the black squares on a chess board.@@@ - let blackSquares = - [ for i in 0 .. 7 do - for j in 0 .. 7 do - if (i+j) % 2 = 1 then - yield (i, j) ] - - /// @@@ListMap-Line1|Lists can be transformed using 'List.map' and other functional programming combinators.@@@ - /// @@@ListMap-Line2|This definition produces a new list by squaring the numbers in numberList, using the pipeline@@@ - /// @@@ListMap-Line3|operator to pass an argument to List.map.@@@ - let squares = - numberList - |> List.map (fun x -> x*x) - - /// @@@ListFilter-Line1|There are many other list combinations. The following computes the sum of the squares of the@@@ - /// @@@ListFilter-Line2|numbers divisible by 3.@@@ - let sumOfSquares = - numberList - |> List.filter (fun x -> x % 3 = 0) - |> List.sumBy (fun x -> x * x) - - printfn "The sum of the squares of numbers up to 1000 that are divisible by 3 is: %d" sumOfSquares - - -/// @@@Arrays-Line1|Arrays are fixed-size, mutable collections of elements of the same type.@@@ -/// -/// @@@Arrays-Line2|Although they are similar to Lists (they support enumeration and have similar combinators for data processing),@@@ -/// @@@Arrays-Line3|they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable.@@@ -/// -/// @@@Arrays-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays@@@ -module Arrays = - - /// @@@EmptyArray|This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead.@@@ - let array1 = [| |] - - /// @@@ArrayConstructionList|Arrays are specified using the same range of constructs as lists.@@@ - let array2 = [| "hello"; "world"; "and"; "hello"; "world"; "again" |] - - /// @@@ArrayConstructionRange|This is an array of numbers from 1 to 1000.@@@ - let array3 = [| 1 .. 1000 |] - - /// @@@ArrayComputationConstruction|This is an array containing only the words "hello" and "world".@@@ - let array4 = - [| for word in array2 do - if word.Contains("l") then - yield word |] - - /// @@@ArrayInit|This is an array initialized by index and containing the even numbers from 0 to 2000.@@@ - let evenNumbers = Array.init 1001 (fun n -> n * 2) - - /// @@@ArraySlicing|Sub-arrays are extracted using slicing notation.@@@ - let evenNumbersSlice = evenNumbers.[0..500] - - /// @@@ArrayLooping|You can loop over arrays and lists using 'for' loops.@@@ - for word in array4 do - printfn "word: %s" word - - // @@@ArrayAssignment-Line1|You can modify the contents of an an array element by using the left arrow assignment operator.@@@ - // - // @@@ArrayAssignment-Line2|To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables@@@ - array2.[1] <- "WORLD!" - - /// @@@ArrayMap-Line1|You can transform arrays using 'Array.map' and other functional programming operations.@@@ - /// @@@ArrayMap-Line2|The following calculates the sum of the lengths of the words that start with 'h'.@@@ - let sumOfLengthsOfWords = - array2 - |> Array.filter (fun x -> x.StartsWith "h") - |> Array.sumBy (fun x -> x.Length) - - printfn "The sum of the lengths of the words in Array 2 is: %d" sumOfLengthsOfWords - - -/// @@@Sequences-Line1|Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays.@@@ -/// -/// @@@Sequences-Line2|Sequences are evaluated on-demand and are re-evaluated each time they are iterated.@@@ -/// @@@Sequences-Line3|An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>.@@@ -/// -/// @@@Sequences-Line4|Sequence processing functions can be applied to Lists and Arrays as well.@@@ -/// -/// @@@Sequences-Line5|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences@@@ -module Sequences = - - /// @@@EmptySequence|This is the empty sequence.@@@ - let seq1 = Seq.empty - - /// @@@SequenceOfValues|This a sequence of values.@@@ - let seq2 = seq { yield "hello"; yield "world"; yield "and"; yield "hello"; yield "world"; yield "again" } - - /// @@@OnDemandSequence|This is an on-demand sequence from 1 to 1000.@@@ - let numbersSeq = seq { 1 .. 1000 } - - /// @@@SequenceComposition|This is a sequence producing the words "hello" and "world"@@@ - let seq3 = - seq { for word in seq2 do - if word.Contains("l") then - yield word } - - /// @@@SequenceInit|This sequence producing the even numbers up to 2000.@@@ - let evenNumbers = Seq.init 1001 (fun n -> n * 2) - - let rnd = System.Random() - - /// @@@InfiniteSequence-Line1|This is an infinite sequence which is a random walk.@@@ - /// @@@InfiniteSequence-Line2|This example uses yield! to return each element of a subsequence.@@@ - let rec randomWalk x = - seq { yield x - yield! randomWalk (x + rnd.NextDouble() - 0.5) } - - /// @@@Sequence100Elements|This example shows the first 100 elements of the random walk.@@@ - let first100ValuesOfRandomWalk = - randomWalk 5.0 - |> Seq.truncate 100 - |> Seq.toList - - printfn "First 100 elements of a random walk: %A" first100ValuesOfRandomWalk - - -/// @@@RecursiveFunctions-Line1|Recursive functions can call themselves. In F#, functions are only recursive@@@ -/// @@@RecursiveFunctions-Line2|when declared using 'let rec'.@@@ -/// -/// @@@RecursiveFunctions-Line3|Recursion is the preferred way to process sequences or collections in F#.@@@ -/// -/// @@@RecursiveFunctions-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions@@@ -module RecursiveFunctions = - - /// @@@RecFunDef-Line1|This example shows a recursive function that computes the factorial of an@@@ - /// @@@RecRunDef-Line2|integer. It uses 'let rec' to define a recursive function.@@@ - let rec factorial n = - if n = 0 then 1 else n * factorial (n-1) - - printfn "Factorial of 6 is: %d" (factorial 6) - - /// @@@RecGcd-Line1|Computes the greatest common factor of two integers.@@@ - /// - /// @@@RecGcd-Line2|Since all of the recursive calls are tail calls,@@@ - /// @@@RecGcd-Line3|the compiler will turn the function into a loop,@@@ - /// @@@RecGcd-Line4|which improves performance and reduces memory consumption.@@@ - let rec greatestCommonFactor a b = - if a = 0 then b - elif a < b then greatestCommonFactor a (b - a) - else greatestCommonFactor (a - b) b - - printfn "The Greatest Common Factor of 300 and 620 is %d" (greatestCommonFactor 300 620) - - /// @@@RecSumList|This example computes the sum of a list of integers using recursion.@@@ - let rec sumList xs = - match xs with - | [] -> 0 - | y::ys -> y + sumList ys - - /// @@@RecSumListTail|This makes 'sumList' tail recursive, using a helper function with a result accumulator.@@@ - let rec private sumListTailRecHelper accumulator xs = - match xs with - | [] -> accumulator - | y::ys -> sumListTailRecHelper (accumulator+y) ys - - /// @@@RecSumListTailInvoke-Line1|This invokes the tail recursive helper function, providing '0' as a seed accumulator.@@@ - /// @@@RecSumListTailInvoke-Line2|An approach like this is common in F#.@@@ - let sumListTailRecursive xs = sumListTailRecHelper 0 xs - - let oneThroughTen = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] - - printfn "The sum 1-10 is %d" (sumListTailRecursive oneThroughTen) - - -/// @@@Records-Line1|Records are an aggregate of named values, with optional members (such as methods).@@@ -/// @@@Records-Line2|They are immutable and have structural equality semantics.@@@ -/// -/// @@@Records-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records@@@ -module RecordTypes = - - /// @@@RecordDefinition|This example shows how to define a new record type.@@@ - type ContactCard = - { Name : string - Phone : string - Verified : bool } - - /// @@@RecordInstantiation1|This example shows how to instantiate a record type.@@@ - let contact1 = - { Name = "Alf" - Phone = "(206) 555-0157" - Verified = false } - - /// @@@RecordInstantiation2|You can also do this on the same line with ';' separators.@@@ - let contactOnSameLine = { Name = "Alf"; Phone = "(206) 555-0157"; Verified = false } - - /// @@@UpdateRecord-Line1|This example shows how to use "copy-and-update" on record values. It creates@@@ - /// @@@UpdateRecord-Line2|a new record value that is a copy of contact1, but has different values for@@@ - /// @@@UpdateRecord-Line3|the 'Phone' and 'Verified' fields.@@@ - /// - /// @@@UpdateRecord-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions@@@ - let contact2 = - { contact1 with - Phone = "(206) 555-0112" - Verified = true } - - /// @@@ProcessRecord-Line1|This example shows how to write a function that processes a record value.@@@ - /// @@@ProcessRecord-Line2|It converts a 'ContactCard' object to a string.@@@ - let showContactCard (c: ContactCard) = - c.Name + " Phone: " + c.Phone + (if not c.Verified then " (unverified)" else "") - - printfn "Alf's Contact Card: %s" (showContactCard contact1) - - /// @@@RecordWithMember-Line1|This is an example of a Record with a member.@@@ - type ContactCardAlternate = - { Name : string - Phone : string - Address : string - Verified : bool } - - /// @@@RecordWithMember-Line2|Members can implement object-oriented members.@@@ - member this.PrintedContactCard = - this.Name + " Phone: " + this.Phone + (if not this.Verified then " (unverified)" else "") + this.Address - - let contactAlternate = - { Name = "Alf" - Phone = "(206) 555-0157" - Verified = false - Address = "111 Alf Street" } - - // @@@RecordAccess|Members are accessed via the '.' operator on an instantiated type.@@@ - printfn "Alf's alternate contact card is %s" contactAlternate.PrintedContactCard - - /// @@@RecordStruct-Line1|Records can also be represented as structs via the 'Struct' attribute.@@@ - /// @@@RecordStruct-Line2|This is helpful in situations where the performance of structs outweighs@@@ - /// @@@RecordStruct-Line3|the flexibility of reference types.@@@ - [] - type ContactCardStruct = - { Name : string - Phone : string - Verified : bool } - - -/// @@@DiscriminatedUnions-Line1|Discriminated Unions (DU for short) are values which could be a number of named forms or cases.@@@ -/// @@@DiscriminatedUnions-Line2|Data stored in DUs can be one of several distinct values.@@@ -/// -/// @@@DiscriminatedUnions-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions@@@ -module DiscriminatedUnions = - - /// @@@CardSuit|The following represents the suit of a playing card.@@@ - type Suit = - | Hearts - | Clubs - | Diamonds - | Spades - - /// @@@CardRank|A Disciminated Union can also be used to represent the rank of a playing card.@@@ - type Rank = - /// @@@CardRankValue|Represents the rank of cards 2 .. 10@@@ - | Value of int - | Ace - | King - | Queen - | Jack - - /// @@@CardMember|Discriminated Unions can also implement object-oriented members.@@@ - static member GetAllRanks() = - [ yield Ace - for i in 2 .. 10 do yield Value i - yield Jack - yield Queen - yield King ] - - /// @@@CardType-Line1|This is a record type that combines a Suit and a Rank.@@@ - /// @@@CardType-Line2|It's common to use both Records and Disciminated Unions when representing data.@@@ - type Card = { Suit: Suit; Rank: Rank } - - /// @@@ComputeFullDeck|This computes a list representing all the cards in the deck.@@@ - let fullDeck = - [ for suit in [ Hearts; Diamonds; Clubs; Spades] do - for rank in Rank.GetAllRanks() do - yield { Suit=suit; Rank=rank } ] - - /// @@@CardToString|This example converts a 'Card' object to a string.@@@ - let showPlayingCard (c: Card) = - let rankString = - match c.Rank with - | Ace -> "Ace" - | King -> "King" - | Queen -> "Queen" - | Jack -> "Jack" - | Value n -> string n - let suitString = - match c.Suit with - | Clubs -> "clubs" - | Diamonds -> "diamonds" - | Spades -> "spades" - | Hearts -> "hearts" - rankString + " of " + suitString - - /// @@@PrintAllCards|This example prints all the cards in a playing deck.@@@ - let printAllCards() = - for card in fullDeck do - printfn "%s" (showPlayingCard card) - - // @@@SingleCaseDu-Line1|Single-case DUs are often used for domain modeling. This can buy you extra type safety@@@ - // @@@SingleCaseDu-Line2|over primitive types such as strings and ints.@@@ - // - // @@@SingleCaseDu-Line3|Single-case DUs cannot be implicitly converted to or from the type they wrap.@@@ - // @@@SingleCaseDu-Line4|For example, a function which takes in an Address cannot accept a string as that input,@@@ - // @@@SingleCaseDu-Line5|or vive/versa.@@@ - type Address = Address of string - type Name = Name of string - type SSN = SSN of int - - // @@@InstantiateSingleCaseDu|You can easily instantiate a single-case DU as follows.@@@ - let address = Address "111 Alf Way" - let name = Name "Alf" - let ssn = SSN 1234567890 - - /// @@@UnwrapSingleCaseDu|When you need the value, you can unwrap the underlying value with a simple function.@@@ - let unwrapAddress (Address a) = a - let unwrapName (Name n) = n - let unwrapSSN (SSN s) = s - - // @@@PrintSingleCaseDu|Printing single-case DUs is simple with unwrapping functions.@@@ - printfn "Address: %s, Name: %s, and SSN: %d" (address |> unwrapAddress) (name |> unwrapName) (ssn |> unwrapSSN) - - /// @@@DuRecursiveDef-Line1|Disciminated Unions also support recursive definitions.@@@ - /// - /// @@@DuRecursiveDef-Line2|This represents a Binary Search Tree, with one case being the Empty tree,@@@ - /// @@@DuRecursiveDef-Line3|and the other being a Node with a value and two subtrees.@@@ - type BST<'T> = - | Empty - | Node of value:'T * left: BST<'T> * right: BST<'T> - - /// @@@SearchBinaryTree-Line1|Check if an item exists in the binary search tree.@@@ - /// @@@SearchBinaryTree-Line2|Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false.@@@ - let rec exists item bst = - match bst with - | Empty -> false - | Node (x, left, right) -> - if item = x then true - elif item < x then (exists item left) // @@@CheckLeftSubtree|Check the left subtree.@@@ - else (exists item right) // @@@CheckRightSubtree|Check the right subtree.@@@ - - /// @@@BinaryTreeInsert-Line1|Inserts an item in the Binary Search Tree.@@@ - /// @@@BinaryTreeInsert-Line2|Finds the place to insert recursively using Pattern Matching, then inserts a new node.@@@ - /// @@@BinaryTreeInsert-Line3|If the item is already present, it does not insert anything.@@@ - let rec insert item bst = - match bst with - | Empty -> Node(item, Empty, Empty) - | Node(x, left, right) as node -> - if item = x then node // @@@BinaryTreeInsert-Line4|No need to insert, it already exists; return the node.@@@ - elif item < x then Node(x, insert item left, right) // @@@BinaryTreeInsert-Line5|Call into left subtree.@@@ - else Node(x, left, insert item right) // @@@BinaryTreeInsert-Line6|Call into right subtree.@@@ - - /// @@@DuStruct-Line1|Discriminated Unions can also be represented as structs via the 'Struct' attribute.@@@ - /// @@@DuStruct-Line2|This is helpful in situations where the performance of structs outweighs@@@ - /// @@@DuStruct-Line3|the flexibility of reference types.@@@ - /// - /// @@@DuStruct-Line4|However, there are two important things to know when doing this:@@@ - /// @@@DuStruct-Line5|1. A struct DU cannot be recursively-defined.@@@ - /// @@@DuStruct-Line6|2. A struct DU must have unique names for each of its cases.@@@ - [] - type Shape = - | Circle of radius: float - | Square of side: float - | Triangle of height: float * width: float - - -/// @@@PatternMatching-Line1|Pattern Matching is a feature of F# that allows you to utilize Patterns,@@@ -/// @@@PatternMatching-Line2|which are a way to compare data with a logical structure or structures,@@@ -/// @@@PatternMatching-Line3|decompose data into constituent parts, or extract information from data in various ways.@@@ -/// @@@PatternMatching-Line4|You can then dispatch on the "shape" of a pattern via Pattern Matching.@@@ -/// -/// @@@PatternMatching-Line5|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching@@@ -module PatternMatching = - - /// @@@PersonRecord|A record for a person's first and last name@@@ - type Person = { - First : string - Last : string - } - - /// @@@EmployeeDu|A Discriminated Union of 3 different kinds of employees@@@ - type Employee = - | Engineer of engineer: Person - | Manager of manager: Person * reports: List - | Executive of executive: Person * reports: List * assistant: Employee - - /// @@@CountEmployees-Line1|Count everyone underneath the employee in the management hierarchy,@@@ - /// @@@CountEmployees-Line2|including the employee.@@@ - let rec countReports(emp : Employee) = - 1 + match emp with - | Engineer(id) -> - 0 - | Manager(id, reports) -> - reports |> List.sumBy countReports - | Executive(id, reports, assistant) -> - (reports |> List.sumBy countReports) + countReports assistant - - - /// @@@FindDave-Line1|Find all managers/executives named "Dave" who do not have any reports.@@@ - /// @@@FindDave-Line2|This uses the 'function' shorthand to as a lambda expression.@@@ - let rec findDaveWithOpenPosition(emps : List) = - emps - |> List.filter(function - | Manager({First = "Dave"}, []) -> true // @@@MatchEmptyList|[] matches an empty list.@@@ - | Executive({First = "Dave"}, [], _) -> true - | _ -> false) // @@@MatchWildcard-Line1|'_' is a wildcard pattern that matches anything.@@@ - // @@@MatchWildCard-Line2|This handles the "or else" case.@@@ - - /// @@@MatchShorthand-Line1|You can also use the shorthand function construct for pattern matching,@@@ - /// @@@MatchShorthand-Line2|which is useful when you're writing functions which make use of Partial Application.@@@ - let private parseHelper f = f >> function - | (true, item) -> Some item - | (false, _) -> None - - let parseDateTimeOffset = parseHelper DateTimeOffset.TryParse - - let result = parseDateTimeOffset "1970-01-01" - match result with - | Some dto -> printfn "It parsed!" - | None -> printfn "It didn't parse!" - - // @@@ParseHelpers|Define some more functions which parse with the helper function.@@@ - let parseInt = parseHelper Int32.TryParse - let parseDouble = parseHelper Double.TryParse - let parseTimeSpan = parseHelper TimeSpan.TryParse - - // @@@ActivePatterns-Line1|Active Patterns are another powerful construct to use with pattern matching.@@@ - // @@@ActivePatterns-Line2|They allow you to partition input data into custom forms, decomposing them at the pattern match call site.@@@ - // - // @@@ActivePatterns-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns@@@ - let (|Int|_|) = parseInt - let (|Double|_|) = parseDouble - let (|Date|_|) = parseDateTimeOffset - let (|TimeSpan|_|) = parseTimeSpan - - /// @@@MatchActivePattern|Pattern Matching via 'function' keyword and Active Patterns often looks like this.@@@ - let printParseResult = function - | Int x -> printfn "%d" x - | Double x -> printfn "%f" x - | Date d -> printfn "%s" (d.ToString()) - | TimeSpan t -> printfn "%s" (t.ToString()) - | _ -> printfn "Nothing was parse-able!" - - // @@@PrintParse|Call the printer with some different values to parse.@@@ - printParseResult "12" - printParseResult "12.045" - printParseResult "12/28/2016" - printParseResult "9:01PM" - printParseResult "banana!" - - -/// @@@Option-Line1|Option values are any kind of value tagged with either 'Some' or 'None'.@@@ -/// @@@Option-Line2|They are used extensively in F# code to represent the cases where many other@@@ -/// @@@Option-Line3|languages would use null references.@@@ -/// -/// @@@Option-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options@@@ -module OptionValues = - - /// @@@ZipCode|First, define a zipcode defined via Single-case Discriminated Union.@@@ - type ZipCode = ZipCode of string - - /// @@@Customer|Next, define a type where the ZipCode is optional.@@@ - type Customer = { ZipCode: ZipCode option } - - /// @@@ShippingCalculator-Line1|Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code,@@@ - /// @@@ShippingCalculator-Line2|given implementations for the 'getState' and 'getShippingZone' abstract methods.@@@ - type ShippingCalculator = - abstract GetState : ZipCode -> string option - abstract GetShippingZone : string -> int - - /// @@@CalcShippingZone-Line1|Next, calculate a shipping zone for a customer using a calculator instance.@@@ - /// @@@CalcShippingZone-Line2|This uses combinators in the Option module to allow a functional pipeline for@@@ - /// @@@CalcShippingZone-Line3|transforming data with Optionals.@@@ - let CustomerShippingZone (calculator: ShippingCalculator, customer: Customer) = - customer.ZipCode - |> Option.bind calculator.GetState - |> Option.map calculator.GetShippingZone - - -/// @@@UnitsOfMeasure-Line1|Units of measure are a way to annotate primitive numeric types in a type-safe way.@@@ -/// @@@UnitsOfMeasure-Line2|You can then perform type-safe arithmetic on these values.@@@ -/// -/// @@@UnitsOfMeasure-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure@@@ -module UnitsOfMeasure = - - /// @@@CommonUnits|First, open a collection of common unit names@@@ - open Microsoft.FSharp.Data.UnitSystems.SI.UnitNames - - /// @@@DefineUnitConstant|Define a unitized constant@@@ - let sampleValue1 = 1600.0 - - /// @@@MileUnit|Next, define a new unit type@@@ - [] - type mile = - /// @@@MileToMeter|Conversion factor mile to meter.@@@ - static member asMeter = 1609.34 - - /// @@@DefineMileConstant|Define a unitized constant@@@ - let sampleValue2 = 500.0 - - /// @@@ComputeMileToMeter|Compute metric-system constant@@@ - let sampleValue3 = sampleValue2 * mile.asMeter - - // @@@PrintUnitsOfMeasure|Values using Units of Measure can be used just like the primitive numeric type for things like printing.@@@ - printfn "After a %f race I would walk %f miles which would be %f meters" sampleValue1 sampleValue2 sampleValue3 - - -/// @@@Classes-Line1|Classes are a way of defining new object types in F#, and support standard Object-oriented constructs.@@@ -/// @@@Classes-Line2|They can have a variety of members (methods, properties, events, etc.)@@@ -/// -/// @@@Classes-Line3|To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes@@@ -/// -/// @@@Classes-Line4|To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members@@@ -module DefiningClasses = - - /// @@@Vector-Line1|A simple two-dimensional Vector class.@@@ - /// - /// @@@Vector-Line2|The class's constructor is on the first line,@@@ - /// @@@Vector-Line3|and takes two arguments: dx and dy, both of type 'double'.@@@ - type Vector2D(dx : double, dy : double) = - - /// @@@ClassInternalField-Line1|This internal field stores the length of the vector, computed when the@@@ - /// @@@ClassInternalField-Line2|object is constructed@@@ - let length = sqrt (dx*dx + dy*dy) - - // @@@ThisKeyword-Line1|'this' specifies a name for the object's self identifier.@@@ - // @@@ThisKeyword-Line2|In instance methods, it must appear before the member name.@@@ - member this.DX = dx - - member this.DY = dy - - member this.Length = length - - /// @@@MemberMethod|This member is a method. The previous members were properties.@@@ - member this.Scale(k) = Vector2D(k * this.DX, k * this.DY) - - /// @@@InstantiateClass|This is how you instantiate the Vector2D class.@@@ - let vector1 = Vector2D(3.0, 4.0) - - /// @@@ScaledVector|Get a new scaled vector object, without modifying the original object.@@@ - let vector2 = vector1.Scale(10.0) - - printfn "Length of vector1: %f\nLength of vector2: %f" vector1.Length vector2.Length - - -/// @@@GenericClasses-Line1|Generic classes allow types to be defined with respect to a set of type parameters.@@@ -/// @@@GenericClasses-Line2|In the following, 'T is the type parameter for the class.@@@ -/// -/// @@@GenericClasses-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/@@@ -module DefiningGenericClasses = - - type StateTracker<'T>(initialElement: 'T) = - - /// @@@InternalField|This internal field store the states in a list.@@@ - let mutable states = [ initialElement ] - - /// @@@AddElement|Add a new element to the list of states.@@@ - member this.UpdateState newState = - states <- newState :: states // @@@MutableAssignment|use the '<-' operator to mutate the value.@@@ - - /// @@@History|Get the entire list of historical states.@@@ - member this.History = states - - /// @@@Current|Get the latest state.@@@ - member this.Current = states.Head - - /// @@@InferredTypeParameter|An 'int' instance of the state tracker class. Note that the type parameter is inferred.@@@ - let tracker = StateTracker 10 - - // @@@AddState|Add a state@@@ - tracker.UpdateState 17 - - -/// @@@Interfaces-Line1|Interfaces are object types with only 'abstract' members.@@@ -/// @@@Interfaces-Line2|Object types and object expressions can implement interfaces.@@@ -/// -/// @@@Interfaces-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces@@@ -module ImplementingInterfaces = - - /// @@@IDisposable|This is a type that implements IDisposable.@@@ - type ReadFile() = - - let file = new System.IO.StreamReader("readme.txt") - - member this.ReadLine() = file.ReadLine() - - // @@@IDisposableImplementation|This is the implementation of IDisposable members.@@@ - interface System.IDisposable with - member this.Dispose() = file.Close() - - - /// @@@IDisposableObjectExpression-Line1|This is an object that implements IDisposable via an Object Expression@@@ - /// @@@IDisposableObjectExpression-Line2|Unlike other languages such as C# or Java, a new type definition is not needed@@@ - /// @@@IDisposableObjectExpression-Line3|to implement an interface.@@@ - let interfaceImplementation = - { new System.IDisposable with - member this.Dispose() = printfn "disposed" } - - -/// @@@Parallel-Line1|The FSharp.Core library defines a range of parallel processing functions. Here@@@ -/// @@@Parallel-Line2|you use some functions for parallel processing over arrays.@@@ -/// -/// @@@Parallel-Line3|To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D@@@ -module ParallelArrayProgramming = - - /// @@@InputArray|First, an array of inputs.@@@ - let oneBigArray = [| 0 .. 100000 |] - - // @@@ExpensiveFunction|Next, define a functions that does some CPU intensive computation.@@@ - let rec computeSomeFunction x = - if x <= 2 then 1 - else computeSomeFunction (x - 1) + computeSomeFunction (x - 2) - - // @@@ParallelMap|Next, do a parallel map over a large input array.@@@ - let computeResults() = - oneBigArray - |> Array.Parallel.map (fun x -> computeSomeFunction (x % 20)) - - // @@@PrintParallel|Next, print the results.@@@ - printfn "Parallel computation results: %A" (computeResults()) - - - -/// @@@Events-Line1|Events are a common idiom for .NET programming, especially with WinForms or WPF applications.@@@ -/// -/// @@@Events-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events@@@ -module Events = - - /// @@@SimpleEvent|First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger).@@@ - let simpleEvent = new Event() - - // @@@AddEventHandler1|Next, add handler to the event.@@@ - simpleEvent.Publish.Add( - fun x -> printfn "this handler was added with Publish.Add: %d" x) - - // @@@TriggerEvent|Next, trigger the event.@@@ - simpleEvent.Trigger(5) - - // @@@EventWithArgs|Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs).@@@ - let eventForDelegateType = new Event() - - // @@@AddEventHandler2|Next, add a handler for this new event.@@@ - eventForDelegateType.Publish.AddHandler( - EventHandler(fun _ _ -> printfn "this handler was added with Publish.AddHandler")) - - // @@@TriggerEventWithArgs|Next, trigger this event (note that sender argument should be set).@@@ - eventForDelegateType.Trigger(null, EventArgs.Empty) - - - -#if COMPILED -module BoilerPlateForForm = - [] - do () - do System.Windows.Forms.Application.Run() -#endif diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate deleted file mode 100644 index adb7d6e230..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Microsoft.FSharp.Tutorial - FSharp - 4.5 - 1 - true - Tutorial - true - true - - - - Tutorial.fsx - - - - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard - - - - - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf deleted file mode 100644 index 6de826791a..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Tato ukázka vás provede elementy jazyka F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Pokud chcete kód provést v nástroji F# Interactive, zvýrazněte oddíl kódu a stiskněte Alt-Enter nebo klikněte pravým tlačítkem myši - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - a vyberte Provést v Interactive. Okno F# Interactive můžete otevřít z nabídky Zobrazit. - - - - For more about F#, see: - Další informace o F# najdete na: - - - - To see this tutorial in documentation form, see: - Na tomto webu najdete tento kurz v podobě dokumentace: - - - - To learn more about applied F# programming, use - K získání dalších informací o použitém programovém kódu F# použijte - - - - To install the Visual F# Power Tools, use - K instalaci Visual F# Power Tools použijte - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - Nástroje --> Rozšíření a aktualizace --> Online a potom hledejte - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Další šablony, které můžete používat s F#, najdete tak, že v sadě Visual Studio vyberete Online šablony, - - - - 'New Project' --> 'Online Templates' - Nový projekt --> Online šablony. - - - - F# supports three kinds of comments: - F# podporuje tři typy komentářů: - - - - 1. Double-slash comments. These are used in most situations. - 1. Komentáře se dvěma lomítky. Ty se používají ve většině situací. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Blokové komentáře ve stylu ML. Ty se moc často nepoužívají. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Komentáře se třemi lomítky. Ty se používají k dokumentaci funkcí, typů a podobně. - - - - They will appear as text when you hover over something which is decorated with these comments. - Když na elementy s těmito komentáři nastavíte ukazatel myši, zobrazí se komentáře jako text. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Podporují se také komentáře XML ve stylu .NET, které umožňují generovat referenční dokumentaci. - - - - and they also allow editors (such as Visual Studio) to extract information from them. - Umožňují také, aby z nich editory (jako například Visual Studio) extrahovaly informace. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Otevírejte obory názvů pomocí klíčového slova open. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Modul je seskupení kódu F#, například hodnot, typů a hodnot funkcí. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Seskupování kódu do modulů pomáhá zachovat související kód pohromadě a vyhnout se v programu konfliktům názvů. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Toto je ukázkové celé číslo. - - - - This is a sample floating point number. - Toto je ukázkové číslo s plovoucí desetinnou čárkou. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Tady se pomocí aritmetiky vypočítalo nové číslo. Číselné typy se převádějí pomocí - - - - functions 'int', 'double' and so on. - funkcí int, double atd. - - - - This is a list of the numbers from 0 to 99. - Toto je seznam čísel od 0 do 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Toto je seznam všech řazených kolekcí členů obsahujících všechna čísla od 0 do 99 a jejich druhé mocniny. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Další řádek vytiskne seznam, který zahrnuje řazené kolekce členů, s použitím %A pro obecný tisk. - - - - This is a sample integer with a type annotation - Toto je ukázkové celé číslo s anotací typu. - - - - Values in F# are immutable by default. They cannot be changed - Hodnoty v F# jsou ve výchozím nastavení neměnné. Nedají se změnit - - - - in the course of a program's execution unless explicitly marked as mutable. - během provádění programu, pokud nejsou explicitně označené jako měnitelné. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Po navázání hodnoty na název pomocí klíčového slova „let“ se hodnota stane neměnnou. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Druhý řádek kódu nejde zkompilovat, protože proměnná number je neměnná a vázaná. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Předefinování položky number na jinou hodnotu se v jazyce F# nepovoluje. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Změnitelná vazba. Je to nutné, aby bylo možné měnit hodnotu otherNumber. - - - - When mutating a value, use '<-' to assign a new value. - Při změnách hodnoty použijte <- pro přiřazení nové hodnoty. - - - - You could not use '=' here for this purpose since it is used for equality - Znak = tady pro tento účel nemůžete použít, protože se používá pro rovnost - - - - or other contexts such as 'let' or 'module' - nebo jiné kontexty jako let nebo module - - - - Much of F# programming consists of defining functions that transform input data to produce - Velká část programování v F# spočívá v definování funkcí, které transformují vstupní data na - - - - useful results. - užitečné výsledky. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Pomocí klíčového slova „let“ můžete definovat funkci. Tato přebírá celočíselný argument a vrací celé číslo. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Závorky jsou pro argumenty funkce nepovinné – s výjimkou použití anotace explicitního typu. - - - - Apply the function, naming the function return result using 'let'. - Použití funkce a pojmenování výsledku vrácení funkce pomocí klíčového slova let - - - - The variable type is inferred from the function return type. - Typ proměnné je odvozený z návratového typu funkce. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Tento řádek používá %d k vytištění výsledku jako celého čísla. Je to typově bezpečné. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Pokud by result1 nebyl typu int, pak by se kompilace řádku nezdařila. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - V případě potřeby anotujte typ názvu parametru pomocí (argument:typ). Závorky jsou povinné. - - - - Conditionals use if/then/elid/elif/else. - Podmíněné výrazy používají příkazy if, then, elid, elif, else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Všimněte si, že F# používá syntaxi rozpoznávající odsazení pomocí mezer – je to podobné jako u jazyků, jako je Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Tento řádek používá %f k vytištění výsledku jako hodnoty s plovoucí desetinnou čárkou. Stejně jako u výše uvedeného parametru %d je to typově bezpečné. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Logické hodnoty představují základní datové typy v jazyce F#. Tady je několik příkladů logických hodnot a podmíněné logiky. - - - - To learn more, see: - Další informace: - - - - and - a - - - - Booleans values are 'true' and 'false'. - Logické hodnoty jsou true a false. - - - - Operators on booleans are 'not', '&&' and '||'. - Operátory u logických hodnot jsou not, && a ||. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Tento řádek používá %b k vytištění logické hodnoty. Je to typově bezpečné. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Řetězce představují základní datové typy v jazyce F#. Tady je několik příkladů řetězců a základní manipulace s nimi. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Pro řetězce se používají dvojité uvozovky. - - - - Strings can also use @ to create a verbatim string literal. - V řetězcích je také možné použít @ k vytvoření řetězcového literálu verbatim. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Tím se budou ignorovat řídicí znaky jako \, \n, \t apod. - - - - String literals can also use triple-quotes. - Řetězcové literály můžou používat také trojité uvozovky. - - - - String concatenation is normally done with the '+' operator. - Zřetězení se obvykle provádí operátorem +. - - - - This line uses '%s' to print a string value. This is type-safe. - Tento řádek používá %s k vytištění řetězcové hodnoty. Je to typově bezpečné. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Podřetězce používají notaci indexeru. Tento řádek extrahuje prvních 7 znaků jako podřetězec. - - - - Note that like many languages, Strings are zero-indexed in F#. - Všimněte si, že jako v mnoha jiných jazycích mají řetězce v jazyce F# nulový index. - - - - Tuples are simple combinations of data values into a combined value. - Řazená kolekce členů představuje jedinou hodnotu vytvořenou jednoduchým zkombinováním hodnot dat. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Jednoduchá řazená kolekce členů v podobě celých čísel. - - - - A function that swaps the order of two values in a tuple. - Funkce, která zamění pořadí dvou hodnot v řazené kolekci členů - - - - F# Type Inference will automatically generalize the function to have a generic type, - Odvození typu proměnné v jazyce F# automaticky generalizuje funkci tak, aby byla obecného typu, - - - - meaning that it will work with any type. - což znamená, že bude fungovat s jakýmkoli typem. - - - - A tuple consisting of an integer, a string, - Řazená kolekce členů skládající se z celého čísla, řetězce - - - - and a double-precision floating point number. - a čísla s plovoucí desetinnou čárkou a dvojitou přesností - - - - A simple tuple of integers with a type annotation. - Jednoduchá řazená kolekce členů celých čísel s anotací typu - - - - Type annotations for tuples use the * symbol to separate elements - Anotace typů pro řazené kolekce členů používají k oddělování elementů symbol *. - - - - Tuples are normally objects, but they can also be represented as structs. - Řazené kolekce členů jsou obvykle objekty, ale můžou být vyjádřeny i jako struktury. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Ty zcela spolupracují se strukturami v jazycích C# a Visual Basic .NET. Platí ale, že - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - řazené kolekce členů představující struktury nejsou implicitně převeditelné na řazené kolekce členů představující objekty (často označované jako řazené kolekce členů odkazů). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Kompilace druhého řádku uvedeného níže se z tohoto důvodu nezdaří. Odkomentujte ho a podívejte se, co se stane. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Mezi řazenými kolekcemi členů představujícími struktury a řazenými kolekcemi členů odkazů nemůžete provést implicitní převod, - - - - you can explicitly convert via pattern matching, as demonstrated below. - ale můžete převod provést explicitně přes porovnávání vzorů, jak je znázorněno níže. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Operátory kanálu (|>, <| atd.) a operátory složení (>>, <<) v jazyce F# - - - - are used extensively when processing data. These operators are themselves functions - se při zpracovávání dat používají ve velkém měřítku. Tyto operátory představují samy o sobě funkce, - - - - which make use of Partial Application. - které využívají částečné použití argumentů. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Další informace o těchto operátorech: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Další informace o částečném použití argumentů: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Umocní hodnotu na druhou. - - - - Adds 1 to a value. - Přičte 1 k hodnotě. - - - - Tests if an integer value is odd via modulo. - Otestuje, jestli je celočíselná hodnota lichá na základě zbytku po dělení. - - - - A list of 5 numbers. More on lists later. - Seznam 5 čísel. Více o seznamech později. - - - - Given a list of integers, it filters out the even numbers, - V daném seznamu celých čísel odfiltruje sudá čísla, - - - - squares the resulting odds, and adds 1 to the squared odds. - umocní výsledná lichá čísla na druhou a přičte 1 k lichým číslům umocněným na druhou. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Kratší způsob, jak napsat squareOddValuesAndAddOne, je vnořit jednotlivé - - - - sub-result into the function calls themselves. - dílčí výsledky přímo do volání funkcí. - - - - This makes the function much shorter, but it's difficult to see the - Díky tomu může být funkce mnohem kratší, ale je obtížné sledovat - - - - order in which the data is processed. - pořadí, v jakém se data zpracovávají. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Preferovaným způsobem, jak napsat squareOddValuesAndAddOne, je použití operátorů kanálu v jazyce F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - To vám umožní vyhnout se vytváření mezivýsledků, ale je to mnohem čitelnější - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - než vnoření volání funkcí, jak je vidět v squareOddValuesAndAddOneNested. - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Můžete zkrátit squareOddValuesAndAddOnePipeline přesunutím druhého volání List.map - - - - into the first, using a Lambda Function. - do prvního, pomocí funkce lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Všimněte si, že kanály se používají i ve funkci lambda. Operátory kanálu v jazyce F# - - - - can be used for single values as well. This makes them very powerful for processing data. - se dají použít i pro jednotlivé hodnoty. Díky tomu jsou velmi efektivní při zpracovávání dat. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - A konečně, můžete eliminovat nutnost explicitně převzít values jako parametr pomocí >> - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - s cílem sestavit dvě základní operace: odfiltrování sudých čísel a následné umocnění na druhou a přičtení jedné. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Obdobně není nutná část výrazu lambda „fun x -> ...“, protože x se jednoduše - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - v tomto oboru definuje tak, aby ho bylo možné předat jako funkční kanál. Proto je tam >> možné použít - - - - there as well. - také. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Výsledek squareOddValuesAndAddOneComposition je sám o sobě další funkcí, která přebírá - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - jako vstup seznam celých čísel. Pokud provedete squareOddValuesAndAddOneComposition se seznamem - - - - of integers, you'll notice that it produces the same results as previous functions. - celých čísel, všimnete si, že dává stejné výsledky jako předchozí funkce. - - - - This is using what is known as function composition. This is possible because functions in F# - Označuje se to jako složení funkcí. Je to možné, protože funkce v jazyce F# - - - - use Partial Application and the input and output types of each data processing operation match - používají částečné použití argumentů a vstupní a výstupní typy každé operace zpracování dat odpovídají - - - - the signatures of the functions we're using. - signaturám funkcí, které používáme. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Seznamy jsou uspořádané, neměnné a jednorázově propojené. Velmi dynamicky se vyhodnocují. - - - - This module shows various ways to generate lists and process lists with some functions - Tento modul zobrazuje různé způsoby, jak generovat seznamy a jak je zpracovat pomocí některých funkcí - - - - in the 'List' module in the F# Core Library. - v modulu List v knihovně F# Core. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Seznamy se definují pomocí syntaxe [ ... ]. Toto je prázdný seznam. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Toto je seznam se 3 elementy. K oddělení prvků na stejném řádku se používá středník (;). - - - - You can also separate elements by placing them on their own lines. - Elementy můžete oddělit i jejich umístěním na samostatné řádky. - - - - This is a list of integers from 1 to 1000 - Toto je seznam celých čísel od 1 do 1000 - - - - Lists can also be generated by computations. This is a list containing - Seznamy je možné generovat pomocí výpočtů. Toto je seznam obsahující - - - - all the days of the year. - všechny dny v roce. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Vytiskněte prvních 5 elementů daysList pomocí List.take. - - - - Computations can include conditionals. This is a list containing the tuples - Výpočty můžou obsahovat podmíněné výrazy. Toto je seznam obsahující řazené kolekce členů - - - - which are the coordinates of the black squares on a chess board. - což jsou souřadnice černých polí na šachovnici. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Seznamy se dají transformovat pomocí souboru List.map a dalších funkčních programových kombinátorů. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Tato definice vytvoří nový seznam vypočítáním druhých mocnin hodnot v seznamu numberList pomocí kanálu - - - - operator to pass an argument to List.map. - operátor pro předání argumentu do souboru List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Existuje mnoho dalších kombinací seznamů. Následující kód vypočítá součet druhých mocnin - - - - numbers divisible by 3. - čísel dělitelných 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Pole jsou měnitelné kolekce s pevně stanovenou velikostí, které obsahují elementy stejného typu. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - I když se podobají seznamům (podporují výčet a mají podobné kombinátory pro zpracování dat), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - jsou obecně rychlejší a podporují rychlý náhodný přístup. Nevýhodou je nižší zabezpečení, protože je možné je měnit. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Toto je prázdné pole. Všimněte si, že syntaxe je podobná seznamům, ale používá se [| ... |]. - - - - Arrays are specified using the same range of constructs as lists. - Pole jsou definovaná pomocí stejného rozsahu konstruktorů jako seznamy. - - - - This is an array of numbers from 1 to 1000. - Toto je pole čísel od 1 do 1000. - - - - This is an array containing only the words "hello" and "world". - Toto je pole obsahující pouze slova hello a world. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Toto je pole inicializované indexem, které obsahuje sudá čísla od 0 do 2000. - - - - Sub-arrays are extracted using slicing notation. - Dílčí pole se extrahují pomocí slicingové notace. - - - - You can loop over arrays and lists using 'for' loops. - Přes pole a seznamy se můžete přesunovat pomocí smyček for. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Můžete upravit obsah elementu pole pomocí operátoru přiřazení s šipkou doleva. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Další informace o tomto operátoru: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Pole můžete transformovat pomocí Array.map a dalších funkčních programových operací. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Následující kód vypočítá součet délek slov, která začínají na „h“. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sekvence jsou logické řady elementů, které jsou všechny stejného typu. Jedná se o obecnější typ než seznamy a pole. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sekvence se vyhodnocují na vyžádání a při každé iteraci se vyhodnocují znovu. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Sekvence F# je alias pro .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funkce na zpracování sekvencí je možné použít také na seznamy a pole. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Toto je prázdná sekvence. - - - - This a sequence of values. - Toto je sekvence hodnot. - - - - This is an on-demand sequence from 1 to 1000. - Toto je sekvence na vyžádání od 1 do 1000. - - - - This is a sequence producing the words "hello" and "world" - Toto je sekvence, která vrátí slova hello a world - - - - This sequence producing the even numbers up to 2000. - Tato sekvence vrátí sudá čísla až do 2000. - - - - This is an infinite sequence which is a random walk. - Toto je nekonečná sekvence, která je náhodnou funkcí walk. - - - - This example uses yield! to return each element of a subsequence. - Tento příklad vrací pomocí příkazu yield! jednotlivé elementy dílčí sekvence. - - - - This example shows the first 100 elements of the random walk. - Tento příklad ukazuje prvních 100 elementů náhodné funkce walk. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Rekurzivní funkce můžou volat samy sebe. V F# jsou všechny funkce rekurzivní - - - - when declared using 'let rec'. - při deklarování pomocí let rec. - - - - Recursion is the preferred way to process sequences or collections in F#. - Rekurze je preferovaný způsob zpracování sekvencí nebo kolekcí v jazyce F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Tento příklad ukazuje rekurzivní funkci, která vypočítá faktoriál - - - - integer. It uses 'let rec' to define a recursive function. - integer. Pomocí let rec se definuje rekurzivní funkce. - - - - Computes the greatest common factor of two integers. - Vypočítá největšího společného dělitele dvou celých čísel. - - - - Since all of the recursive calls are tail calls, - Vzhledem k tomu, že všechna rekurzivní volání jsou volání funkce Tail, - - - - the compiler will turn the function into a loop, - kompilátor změní funkci na smyčku, - - - - which improves performance and reduces memory consumption. - což zvyšuje výkon a snižuje spotřebu paměti. - - - - This example computes the sum of a list of integers using recursion. - Tento příklad zjistí součet seznamu celých čísel pomocí rekurze. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Tím se funkce Tail sumList stane rekurzivní, a to s použitím pomocné funkce s akumulátorem výsledků. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Tím se vyvolá rekurzivní pomocná funkce Tail, poskytující 0 jako zdrojový akumulátor. - - - - An approach like this is common in F#. - Takový postup je v jazyce F# běžný. - - - - Records are an aggregate of named values, with optional members (such as methods). - Záznamy jsou agregátem pojmenovaných hodnot s volitelnými členy (jako jsou metody). - - - - They are immutable and have structural equality semantics. - Jsou neměnné a mají sémantiku se strukturální rovností. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Tento příklad ukazuje, jak definovat nový typ záznamu. - - - - This example shows how to instantiate a record type. - Tento příklad ukazuje, jak vytvořit instanci typu záznamu. - - - - You can also do this on the same line with ';' separators. - Můžete to udělat i na stejném řádku se středníky (;) jako oddělovači. - - - - This example shows how to use "copy-and-update" on record values. It creates - Tento příklad ukazuje, jak použít copy-and-update pro hodnoty záznamu. Vytvoří - - - - a new record value that is a copy of contact1, but has different values for - hodnotu nového záznamu, která je kopií záznamu contact1, ale má jiné hodnoty pro - - - - the 'Phone' and 'Verified' fields. - pole Telefon a Ověřeno. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Tento příklad ukazuje, jak napsat funkci, která zpracuje hodnotu záznamu. - - - - It converts a 'ContactCard' object to a string. - Převádí objekt ContactCard na řetězec. - - - - This is an example of a Record with a member. - Toto je příklad záznamu se členem. - - - - Members can implement object-oriented members. - Členové můžou implementovat objektově orientované členy. - - - - Members are accessed via the '.' operator on an instantiated type. - Ke členům se přistupuje prostřednictvím operátoru „.“ u typu tvořícího instanci. - - - - Records can also be represented as structs via the 'Struct' attribute. - Záznamy můžou být vyjádřeny i jako struktury prostřednictvím atributu Struct. - - - - This is helpful in situations where the performance of structs outweighs - To je užitečné v situacích, kdy má výkon struktur větší váhu než - - - - the flexibility of reference types. - flexibilita odkazových typů. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Rozlišovaná sjednocení (zkratka: DU) jsou hodnoty, které můžou představovat celou řadu pojmenovaných forem nebo případů. - - - - Data stored in DUs can be one of several distinct values. - Data uložená v DU můžou představovat jednu z několika různých hodnot. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Následující příklad představuje barvu hrací karty. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Rozlišované sjednocení může také představovat hodnotu hrací karty. - - - - Represents the rank of cards 2 .. 10 - Představuje hodnotu karet 2 .. 10. - - - - Discriminated Unions can also implement object-oriented members. - Rozlišovaná sjednocení můžou také implementovat objektově orientované členy. - - - - This is a record type that combines a Suit and a Rank. - Toto je typ záznamu, který kombinuje barvu a hodnotu hrací karty. - - - - It's common to use both Records and Disciminated Unions when representing data. - Při vyjadřování dat se běžně používají záznamy i rozlišovaná sjednocení. - - - - This computes a list representing all the cards in the deck. - Tady se vypočítá seznam představující všechny karty z balíčku. - - - - This example converts a 'Card' object to a string. - Tento příklad převede objekt Card na řetězec. - - - - This example prints all the cards in a playing deck. - Tento příklad vytiskne všechny karty v hracím balíčku. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Rozlišovaná sjednocení s jedním případem se často používají pro modelování domén. Tím můžete získat dodatečnou bezpečnost typů - - - - over primitive types such as strings and ints. - oproti primitivním typům, jako jsou řetězce a celá čísla. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Rozlišovaná sjednocení s jedním případem nejde implicitně převést na typ nebo z typu, který obalují. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Například funkce, která přebírá adresu, nemůže jako vstup převzít řetězec - - - - or vive/versa. - a naopak. - - - - You can easily instantiate a single-case DU as follows. - Instanci rozlišovaného sjednocení s jedním případem můžete snadno vytvořit následujícím způsobem. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Pokud danou hodnotu potřebujete, můžete základní hodnotu rozbalit pomocí jednoduché funkce. - - - - Printing single-case DUs is simple with unwrapping functions. - Tisk rozlišovaných sjednocení s jedním případem je jednoduchý s použitím rozbalovacích funkcí. - - - - Disciminated Unions also support recursive definitions. - Rozlišovaná sjednocení podporují i rekurzivní definice. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Toto představuje binární vyhledávací strom, přičemž jeden případ je prázdný strom - - - - and the other being a Node with a value and two subtrees. - a druhý je uzel s hodnotou a dvěma podstromy. - - - - Check if an item exists in the binary search tree. - Zkontroluje, jestli položka existuje v binárním vyhledávacím stromu. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Rekurzivně vyhledává porovnáváním vzorů. Vrátí hodnotu true, pokud existuje; v opačném případě false. - - - - Check the left subtree. - Zkontroluje levý podstrom. - - - - Check the right subtree. - Zkontroluje pravý podstrom. - - - - Inserts an item in the Binary Search Tree. - Vloží položku do binárního vyhledávacího stromu. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Najde místo pro rekurzivní vložení pomocí porovnávání vzorů a pak vloží nový uzel. - - - - If the item is already present, it does not insert anything. - Pokud je už položka přítomna, nevloží nic. - - - - No need to insert, it already exists; return the node. - Nemusí se vkládat, už existuje; vrátí se uzel. - - - - Call into left subtree. - Provede volání do levého podstromu. - - - - Call into right subtree. - Provede volání do pravého podstromu. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Rozlišovaná sjednocení můžou být vyjádřena i jako struktury prostřednictvím atributu Struct. - - - - This is helpful in situations where the performance of structs outweighs - To je užitečné v situacích, kdy má výkon struktur větší váhu než - - - - the flexibility of reference types. - flexibilita odkazových typů. - - - - However, there are two important things to know when doing this: - Při tomto postupu je ale třeba vědět dvě důležité věci: - - - - 1. A struct DU cannot be recursively-defined. - 1. Rozlišované sjednocení typu struktura nemůže být definované rekurzivně. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Rozlišované sjednocení typu struktura musí mít jedinečné názvy pro každý ze svých případů. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Porovnávání vzorů je funkce jazyka F#, která umožňuje používat vzory, - - - - which are a way to compare data with a logical structure or structures, - což představuje způsob, jak porovnávat data s logickou strukturou nebo strukturami, - - - - decompose data into constituent parts, or extract information from data in various ways. - jak rozložit data na základní části nebo extrahovat informace z dat různými způsoby. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Odesílání pak můžete provádět na základě vzoru v rámci porovnávání vzorů. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Záznam pro jméno a příjmení daného člověka - - - - A Discriminated Union of 3 different kinds of employees - Rozlišované sjednocení se 3 různými typy zaměstnanců - - - - Count everyone underneath the employee in the management hierarchy, - Spočítají se všichni zaměstnanci pod daným zaměstnancem v hierarchii řízení, - - - - including the employee. - včetně tohoto zaměstnance. - - - - Find all managers/executives named "Dave" who do not have any reports. - Vyhledá všechny nadřízené/výkonné pracovníky se jménem Dave, kteří nemají žádné podřízené. - - - - This uses the 'function' shorthand to as a lambda expression. - Tady se používá zkrácený název function jako výraz lambda. - - - - [] matches an empty list. - [] odpovídá prázdnému seznamu. - - - - '_' is a wildcard pattern that matches anything. - „_“ je zástupný vzor, kterému odpovídá úplně všechno. - - - - This handles the "or else" case. - Toto řeší případ „or else“ - - - - You can also use the shorthand function construct for pattern matching, - Můžete také použít zkrácenou konstrukci function pro porovnávání vzorů, - - - - which is useful when you're writing functions which make use of Partial Application. - což je užitečné při psaní funkcí, které využívají částečné použití argumentů. - - - - Define some more functions which parse with the helper function. - Definujte pár dalších funkcí, které se analyzují s pomocnou funkcí. - - - - Active Patterns are another powerful construct to use with pattern matching. - Aktivní vzory představují další efektivní konstrukci pro použití s porovnáváním vzorů. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Umožňují rozdělit vstupní data do vlastních forem, přičemž se rozkládají v místě volání porovnávání vzorů. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Porovnávání vzorů přes klíčové slovo function a aktivní vzory často vypadá takto. - - - - Call the printer with some different values to parse. - Volání tiskárny s nějakými jinými hodnotami k parsování - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Hodnotami parametru můžou být hodnoty jakéhokoliv typu s označením Some (Nějaké) nebo None (Žádné). - - - - They are used extensively in F# code to represent the cases where many other - Používají se často v kódu F#, kde reprezentují případy, ve kterých by se v řadě jiných - - - - languages would use null references. - jazyků používaly odkazy null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Nejprve definujte PSČ prostřednictvím rozlišovaného sjednocení s jedním případem. - - - - Next, define a type where the ZipCode is optional. - Dále definujte typ, kde je PSČ volitelné. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Potom definujte typ rozhraní, který bude představovat objekt pro výpočet expediční oblasti pro PSČ zákazníka - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - se zohledněním implementací pro abstraktní metody getState a getShippingZone. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Dále vypočítejte expediční oblast pro zákazníka pomocí instance kalkulačky. - - - - This uses combinators in the Option module to allow a functional pipeline for - Tady se používají kombinátory v modulu Option, pomocí kterých se povoluje funkční kanál pro - - - - transforming data with Optionals. - transformaci dat s volitelnými hodnotami. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Měrné jednotky jsou způsob, jak anotovat primitivní číselné typy typově bezpečnou metodou. - - - - You can then perform type-safe arithmetic on these values. - Pak u těchto hodnot můžete provádět typově bezpečnou aritmetiku. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Nejdříve otevřete kolekci běžných názvů jednotek. - - - - Define a unitized constant - Definovat unifikovanou konstantu - - - - Next, define a new unit type - Potom definujte nový typ jednotky - - - - Conversion factor mile to meter. - Přepočtový koeficient pro přepočet mílí na metry - - - - Define a unitized constant - Definovat unifikovanou konstantu - - - - Compute metric-system constant - Vypočítat konstantu v metrickém systému - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Hodnoty s měrnými jednotkami je možné používat stejně jako primitivní číselný typ pro operace, jako je tisk. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Třídy představují způsob definice nových objektových typů v jazyce F# a podporují standardní objektově orientované konstrukce. - - - - They can have a variety of members (methods, properties, events, etc.) - Můžou mít celou řadu členů (metody, vlastnosti, události atd.). - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Další informace o třídách: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Další informace o členech: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Jednoduchá dvojrozměrná vektorová třída. - - - - The class's constructor is on the first line, - Konstruktor třídy je na prvním řádku - - - - and takes two arguments: dx and dy, both of type 'double'. - a přebírá dva argumenty: dx a dy, oba typu double. - - - - This internal field stores the length of the vector, computed when the - Toto interní pole ukládá délku vektoru vypočítanou při - - - - object is constructed - zkonstruování objektu - - - - 'this' specifies a name for the object's self identifier. - this určuje název identifikátoru samotného objektu. - - - - In instance methods, it must appear before the member name. - V metodách instancí se musí objevovat před názvem člena. - - - - This member is a method. The previous members were properties. - Tento člen je metoda. Předchozí členové představují vlastnosti. - - - - This is how you instantiate the Vector2D class. - Toto je způsob, jak vytvořit instanci třídy Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Získá nový škálovaný vektorový objekt, aniž by se změnil původní objekt. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Obecné třídy umožňují definování typů s ohledem na sadu parametrů typu. - - - - In the following, 'T is the type parameter for the class. - V následujícím příkladu „T“ představuje parametr typu pro třídu. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Toto interní pole ukládá stavy v seznamu. - - - - Add a new element to the list of states. - Přidá nový element do seznamu stavů. - - - - use the '<-' operator to mutate the value. - Použije operátor <- ke změně (mutaci) hodnoty. - - - - Get the entire list of historical states. - Získá celý seznam historických stavů. - - - - Get the latest state. - Získá nejnovější stav. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Instance int třídy pro sledování stavů. Poznámka: Parametr typu je odvozený. - - - - Add a state - Přidat stav - - - - Interfaces are object types with only 'abstract' members. - Rozhraní jsou typy objektů pouze s členy abstract. - - - - Object types and object expressions can implement interfaces. - Objektové typy a výrazy můžou implementovat rozhraní. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Toto je typ, který implementuje rozhraní IDisposable. - - - - This is the implementation of IDisposable members. - Toto je implementace členů IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Toto je objekt, který implementuje IDisposable pomocí výrazu objektu. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Na rozdíl od jiných jazyků, jako jsou C# nebo Java, není nutná nová definice typu - - - - to implement an interface. - pro implementaci rozhraní. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - Knihovna FSharp.Core definuje rozsah funkcí paralelního zpracování. Tady - - - - you use some functions for parallel processing over arrays. - použijete některé funkce pro paralelní zpracování polí. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Další informace: https://msdn.microsoft.com/cs-cz/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Nejdříve pole vstupů. - - - - Next, define a functions that does some CPU intensive computation. - Dále definujte funkci, která bude provádět výpočty náročné na procesor. - - - - Next, do a parallel map over a large input array. - Dále proveďte paralelní mapování přes velké vstupní pole. - - - - Next, print the results. - Potom vytiskněte výsledky. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Události jsou běžné základní struktury programového kódu .NET, zejména s aplikacemi WinForms nebo WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Nejdříve vytvořte instanci objektu Event, který se bude skládat z bodu odběru (event.Publish) a aktivační události (event.Trigger). - - - - Next, add handler to the event. - Potom přidejte obslužnou rutinu pro událost. - - - - Next, trigger the event. - Potom spusťte událost. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Potom vytvořte instanci objektu Event podle standardní konvence .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Dále přidejte obslužnou rutinu pro tuto novou událost. - - - - Next, trigger this event (note that sender argument should be set). - Potom spusťte tuto událost (poznámka: musí být nastavený argument odesílatele). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf deleted file mode 100644 index 0908855049..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Dieses Beispiel zeigt Ihnen verschiedene Elemente der F#-Programmiersprache. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Markieren Sie zum Ausführen des Codes in F# Interactive einen Codeabschnitt, und drücken Sie dann entweder ALT+EINGABETASTE oder klicken Sie mit der rechten Maustaste - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - und wählen Sie "In Interactive ausführen" aus. Sie können das F# Interactive-Fenster über das Menü "Ansicht" öffnen. - - - - For more about F#, see: - Weitere Informationen zu F# finden Sie unter: - - - - To see this tutorial in documentation form, see: - Dieses Tutorial ist auch als Dokumentation verfügbar. Siehe hierzu: - - - - To learn more about applied F# programming, use - Verwenden Sie Folgendes, um weitere Informationen zur praktischen F#-Programmierung zu erhalten: - - - - To install the Visual F# Power Tools, use - Verwenden Sie Folgendes, um die Visual F# Power Tools zu installieren: - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - "Extras" > "Erweiterungen und Updates" > "Online", und suchen Sie nach - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Weitere Vorlagen zum Verwenden mit F# finden Sie in Visual Studio unter "Onlinevorlagen", - - - - 'New Project' --> 'Online Templates' - "Neue Projekte" > "Onlinevorlagen". - - - - F# supports three kinds of comments: - F# unterstützt drei Arten von Kommentaren: - - - - 1. Double-slash comments. These are used in most situations. - 1. Kommentare mit doppeltem Schrägstrich. Diese werden in den meisten Situationen verwendet. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Blockkommentare im ML-Stil. Diese werden nicht sehr häufig verwendet. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Kommentare mit drei Schrägstrichen. Diese werden zum Dokumentieren von Funktionen, Typen usw. verwendet. - - - - They will appear as text when you hover over something which is decorated with these comments. - Sie erscheinen als Text, wenn Sie den Mauszeiger über einem Element positionieren, das mit diesen Kommentaren versehen ist. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Sie bieten außerdem Unterstützung für XML-Kommentare im .NET-Stil zum Generieren von Referenzdokumentation, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - und sie ermöglichen das Extrahieren von Informationen über Editoren (z.B. Visual Studio). - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/xml-documentation. - - - - Open namespaces using the 'open' keyword. - Öffnen Sie Namespaces mit dem Schlüsselwort "open". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Weitere Informationen finden Sie hier: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword. - - - - A module is a grouping of F# code, such as values, types, and function values. - Ein Modul ist eine Gruppierung von F#-Code, z.B. Werte, Typen und Funktionswerte. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Die Codegruppierung in Modulen ermöglicht das Zusammenfassen von zueinander in Beziehung stehendem Code sowie das Vermeiden von Namenskonflikten in Ihrem Programm. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/modules. - - - - This is a sample integer. - Dies ist ein Beispiel für eine Ganzzahl. - - - - This is a sample floating point number. - Dies ist ein Beispiel für eine Gleitkommazahl. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Hier wird mithilfe einer arithmetischen Operation eine neue Zahl berechnet. Numerische Typen werden unter Verwendung der - - - - functions 'int', 'double' and so on. - Funktionen "int", "double" usw. konvertiert. - - - - This is a list of the numbers from 0 to 99. - Dies ist eine Liste der Zahlen von 0 bis 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Dies ist eine Liste aller Tupel, die alle Zahlen von 0 bis 99 sowie Ihre Quadratzahlen enthalten. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Die nächste Zeile gibt eine Liste mit Tupeln aus, wobei "%A" für die generische Ausgabe verwendet wird. - - - - This is a sample integer with a type annotation - Dies ist ein Beispiel für eine ganze Zahl mit einer Typanmerkung. - - - - Values in F# are immutable by default. They cannot be changed - Werte in F# sind standardmäßig unveränderlich. Sie können im Verlauf - - - - in the course of a program's execution unless explicitly marked as mutable. - der Ausführung eines Programms nicht geändert werden – es sei denn, sie sind explizit als änderbar gekennzeichnet. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Wenn ein Wert mithilfe von "let" an einen Namen gebunden wird, ist er unveränderlich. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Die zweite Codezeile kann nicht kompiliert werden, da "number" unveränderlich und gebunden ist. - - - - Re-defining 'number' to be a different value is not allowed in F#. - "number" darf in F# nicht als ein anderer Wert neu definiert werden. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Eine veränderliche Bindung. Dies ist erforderlich, damit der Wert von "otherNumber" verändert werden kann. - - - - When mutating a value, use '<-' to assign a new value. - Wenn Sie einen Wert verändern, weisen Sie mithilfe von "<-" einen neuen Wert zu. - - - - You could not use '=' here for this purpose since it is used for equality - Sie können "=" hier nicht verwenden, da es für Gleichheit verwendet wird. - - - - or other contexts such as 'let' or 'module' - oder andere Kontexte wie "let" oder "module" - - - - Much of F# programming consists of defining functions that transform input data to produce - Bei der F#-Programmierung werden größtenteils Funktionen definiert, die Eingabedaten in hilfreiche - - - - useful results. - Ergebnisse umwandelt. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Verwenden Sie "let", um eine Funktion zu definieren. Diese akzeptiert ein Integer-Argument und gibt einen Integer zurück. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Klammern sind für Funktionsargumente optional, außer wenn Sie eine explizite Typanmerkung verwenden. - - - - Apply the function, naming the function return result using 'let'. - Die Funktion anwenden, und das Rückgabeergebnis der Funktion mithilfe von "let" benennen. - - - - The variable type is inferred from the function return type. - Der Variablentyp wird vom Rückgabetyp der Funktion abgeleitet. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Diese Zeile verwendet "%d", um das Ergebnis als Integer zu drucken. Dies ist typsicher. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Wenn "result1" nicht vom Typ "int" wäre, käme es bei der Kompilierung der Zeile zu einem Fehler. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Blenden Sie bei Bedarf den Typ eines Parameternamens mithilfe von "(argument:type)" ein. Klammern sind erforderlich. - - - - Conditionals use if/then/elid/elif/else. - Für Bedingungen wird Folgendes verwendet: if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Bei der Syntax von F# werden ebenso wie bei Sprachen wie Python leerzeichenbasierte Einzüge beachtet. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Diese Zeile verwendet "%f", um das Ergebnis als float-Eigenschaft zu drucken. Wie auch zuvor bei "%d" ist dies typsicher. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Boolesche Werte sind grundlegende Datentypen in F#. Hier finden Sie einige Beispiele für boolesche Werte und Bedingungen. - - - - To learn more, see: - Weitere Informationen finden Sie unter: - - - - and - Und - - - - Booleans values are 'true' and 'false'. - Boolesche Werte sind "true" und "false". - - - - Operators on booleans are 'not', '&&' and '||'. - Operatoren für boolesche Werte sind "not", "&&" und "||". - - - - This line uses '%b'to print a boolean value. This is type-safe. - Diese Zeile verwendet "%b" zum Drucken eines booleschen Werts. Dies ist typsicher. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Zeichenfolgen sind grundlegende Datentypen in F#. Hier finden Sie einige Beispiele für Zeichenfolgen und Zeichenfolgenmanipulationen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Für Zeichenfolgen werden doppelte Anführungszeichen verwendet. - - - - Strings can also use @ to create a verbatim string literal. - Mit "@" lassen sich ausführliche Zeichenfolgenliterale erstellen. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Dadurch werden Escapezeichen wie "\", "\n", "\t" usw. ignoriert. - - - - String literals can also use triple-quotes. - Für Zeichenfolgen können auch dreifache Anführungszeichen verwendet werden. - - - - String concatenation is normally done with the '+' operator. - Die Verkettung von Zeichenfolgen erfolgt in der Regel mit dem Operator "+". - - - - This line uses '%s' to print a string value. This is type-safe. - Diese Zeile verwendet "%s" zum Drucken eines Zeichenfolgewerts. Dies ist typsicher. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Für Teilzeichenfolgen wird die Indexernotation verwendet. Diese Zeile extrahiert die ersten sieben Zeichen als Teilzeichenfolge. - - - - Note that like many languages, Strings are zero-indexed in F#. - Im Gegensatz zu den meisten anderen Sprachen sind Zeichenfolgen in F# nullindiziert. - - - - Tuples are simple combinations of data values into a combined value. - Tupel sind einfache Datenwertkombinationen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Ein einfaches Tupel aus Integerwerten. - - - - A function that swaps the order of two values in a tuple. - Eine Funktion, die die Reihenfolge von zwei Werten in einem Tupel austauscht. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Der F#-Typrückschluss generalisiert die Funktion automatisch und erstellt einen generischen Typ, - - - - meaning that it will work with any type. - d. h. er funktioniert mit jedem Typ. - - - - A tuple consisting of an integer, a string, - Ein Tupel aus einem Integer, einer Zeichenfolge - - - - and a double-precision floating point number. - und einer Gleitkommazahl mit doppelter Genauigkeit. - - - - A simple tuple of integers with a type annotation. - Ein einfaches Tupel aus Integerwerten mit einer Typanmerkung. - - - - Type annotations for tuples use the * symbol to separate elements - Typanmerkungen für Tupel trennen Elemente durch das *-Symbol. - - - - Tuples are normally objects, but they can also be represented as structs. - Tupel sind normalerweise Objekte, sie können aber auch als Strukturen dargestellt werden. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Sie arbeiten mit Strukturen in C# und Visual Basic.Net vollständig zusammen. - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - Strukturtupel sind jedoch nicht implizit mit Objekttupeln (häufig als Referenztupel bezeichnet) konvertierbar. - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Die unten angezeigte zweite Zeile kann aus diesem Grund nicht kompiliert werden. Heben Sie die Auskommentierung auf, und sehen Sie, was passiert. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Sie können zwar nicht implizit zwischen Strukturtupeln und Verweistupeln konvertieren, - - - - you can explicitly convert via pattern matching, as demonstrated below. - Sie können aber wie unten gezeigt eine explizite Konvertierung über den Musterabgleich durchführen. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Die F#-PipeOperatoren ("|>", "<|" usw.) und die F#-Zusammensetzungsoperatoren (">>", "<<") - - - - are used extensively when processing data. These operators are themselves functions - werden bei der Datenverarbeitung umfassend eingesetzt. Diese Operatoren sind Funktionen, - - - - which make use of Partial Application. - die die partielle Anwendung nutzen. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Weitere Informationen zu diesen Operatoren finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Weitere Informationen zur partiellen Anwendung finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Quadriert einen Wert. - - - - Adds 1 to a value. - Addiert 1 zu einem Wert hinzu. - - - - Tests if an integer value is odd via modulo. - Testet mit Modulo, ob ein Integerwert gerade ist. - - - - A list of 5 numbers. More on lists later. - Eine Liste mit fünf Nummern. Weitere Informationen zu Listen finden Sie später. - - - - Given a list of integers, it filters out the even numbers, - Aus einer Liste mit Integern werden die geraden Zahlen herausgefiltert, - - - - squares the resulting odds, and adds 1 to the squared odds. - die sich ergebenden ungeraden Zahlen werden quadratiert, und zu dem Ergebnis wird 1 hinzuaddiert. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Eine kürzere Möglichkeit zum Schreiben von "squareOddValuesAndAddOne" besteht im Verschachteln von jedem - - - - sub-result into the function calls themselves. - Teilergebnis im Funktionsaufruf selbst. - - - - This makes the function much shorter, but it's difficult to see the - Dadurch wird die Funktion viel kürzer, - - - - order in which the data is processed. - die Reihenfolge der Datenverarbeitung ist jedoch schlechter sichtbar. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Eine bevorzugte Möglichkeit zum Schreiben von "squareOddValuesAndAddOne" besteht in der Verwendung von F#-Pipe-Operatoren. - - - - This allows you to avoid creating intermediate results, but is much more readable - Dadurch können Sie verhindern, dass Zwischenergebnisse erstellt werden, dies ist jedoch besser lesbar - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - als verschachtelte Funktionsaufrufe wie "squareOddValuesAndAddOneNested". - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Sie können "squareOddValuesAndAddOnePipeline" kürzen, indem Sie den zweiten "List.map"-Aufruf - - - - into the first, using a Lambda Function. - mithilfe einer Lambda-Funktion in den ersten verschieben. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Pipelines werden auch innerhalb der Lambda-Funktion verwendet. F#-Pipe-Operatoren - - - - can be used for single values as well. This makes them very powerful for processing data. - können auch für einzelne Werte verwendet werden. So ist eine leistungsstarke Datenverarbeitung möglich. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Es ist nicht mehr erforderlich, "values" als Parameter aufzunehmen, indem Sie mithilfe von ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - die beiden zentralen Vorgänge erstellen: Herausfiltern von geraden Zahlen, Quadratieren und Addieren von 1. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Der Teil "fun x -> ..." des Lambdaausdrucks ist dementsprechend ebenfalls nicht erforderlich, da "x" lediglich - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - in dem Bereich definiert wird, damit es an eine Funktionspipeline übergeben werden kann. Daher kann ">>" - - - - there as well. - dort ebenfalls verwendet werden. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Das Ergebnis von "squareOddValuesAndAddOneComposition" selbst ist eine andere Funktion, die eine - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - Liste von Integern als Eingabe verwendet. Wenn Sie "squareOddValuesAndAddOneComposition" mit einer Liste - - - - of integers, you'll notice that it produces the same results as previous functions. - von Integern ausführen, erhalten Sie das gleiche Ergebnis wie bei vorherigen Funktionen. - - - - This is using what is known as function composition. This is possible because functions in F# - Dabei wird die so genannte Funktionskomposition verwendet. Das ist möglich, da Funktionen in F# - - - - use Partial Application and the input and output types of each data processing operation match - die partielle Anwendung nutzen, und die Ein- und Ausgabetypen jedes Datenverarbeitungsvorgangs - - - - the signatures of the functions we're using. - mit den Signaturen der verwendeten Funktionen übereinstimmen. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Listen sind geordnete, unveränderliche, einfach verknüpfte Listen. Ihre Auswertung ist streng. - - - - This module shows various ways to generate lists and process lists with some functions - Dieses Modul zeigt verschiedene Möglichkeiten zum Erstellen von Listen und Prozesslisten mit einigen Funktionen - - - - in the 'List' module in the F# Core Library. - im Modul "List" in der F#-Kernbibliothek. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Listen werden mithilfe von "[ ... ]" definiert. Dies ist eine leere Liste. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Dies ist eine Liste mit drei Elementen. ";" dient dazu, Elemente in der gleichen Zeile zu trennen. - - - - You can also separate elements by placing them on their own lines. - Sie können Elemente auch trennen, indem Sie sie in separaten Zeilen einfügen. - - - - This is a list of integers from 1 to 1000 - Dies ist eine Liste mit ganzen Zahlen von 1 bis 1000. - - - - Lists can also be generated by computations. This is a list containing - Listen können auch mithilfe von Berechnungen generiert werden. Dies ist eine Liste mit - - - - all the days of the year. - allen Tagen des Jahres. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Drucken Sie mithilfe von "List.take" die ersten fünf Elemente in "daysList". - - - - Computations can include conditionals. This is a list containing the tuples - Berechnungen können Bedingungen enthalten. Dies ist eine Liste mit den Tupeln, - - - - which are the coordinates of the black squares on a chess board. - bei denen es sich um die Koordinaten der schwarzen Felder auf einem Schachbrett handelt. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listen können mithilfe von "List.map" und anderen funktionalen Programmierkombinatoren umgewandelt werden. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Diese Definition erzeugt eine neue Liste, indem die Zahlen in "numberList" quadriert werden. Dabei wird der Pipeline- - - - - operator to pass an argument to List.map. - Operator verwendet, um ein Argument an "List.map" zu übergeben. - - - - There are many other list combinations. The following computes the sum of the squares of the - Es stehen noch viele andere Listenkombinationen zur Verfügung. Mit dem Folgenden wird die Summe der Quadrate der - - - - numbers divisible by 3. - durch 3 teilbaren Zahlen berechnet. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Arrays sind veränderliche Sammlungen fester Größe, die Elemente des gleichen Typs enthalten. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Sie ähneln Listen (sie unterstützen Enumeration und haben ähnliche Combinators für die Datenverarbeitung), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - sind im Allgemeinen jedoch schneller und unterstützen einen schnellen wahlfreien Zugriff. Dafür sind sie jedoch weniger sicher, da sie veränderlich sind. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Dies ist das leere Array. Die Syntax ähnelt der von Listen, verwendet jedoch stattdessen "[| ... |]". - - - - Arrays are specified using the same range of constructs as lists. - Arrays werden mithilfe der gleichen Konstrukte angegeben wie Listen. - - - - This is an array of numbers from 1 to 1000. - Dies ist ein Array mit Zahlen von 1 bis 1000. - - - - This is an array containing only the words "hello" and "world". - Dieses Array enthält nur die Wörter "hello" und "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Dieses Array wurde per Index initialisiert und enthält gerade Zahlen von 0 bis 2000. - - - - Sub-arrays are extracted using slicing notation. - Teilarrays werden mithilfe der Segmentnotation extrahiert. - - - - You can loop over arrays and lists using 'for' loops. - Mit For-Schleifen können Sie bei Arrays und Listen Schleifen ausführen. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Sie können die Inhalte eines Arrayelements mithilfe des Zuweisungsoperators "Pfeil nach links" ändern. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Weitere Informationen zu diesem Operator finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Sie können Arrays mithilfe von "Array.map" und anderen funktionalen Programmiervorgängen umwandeln. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Mit Folgendem wird die Summe der Längen von Wörtern berechnet, die mit "h" beginnen. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sequenzen sind logische Serien von Elementen, die alle vom gleichen Typ sind. Ihr Typ ist allgemeiner als Listen und Arrays. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sequenzen werden bei Bedarf ausgewertet und bei jeder Iteration erneut ausgewertet. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Eine F#-Sequenz ist ein Alias für .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funktionen mit Sequenzverarbeitung können auch auf Listen und Arrays angewendet werden. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Dies ist die leere Sequenz. - - - - This a sequence of values. - Dies ist eine Sequenz mit Werten. - - - - This is an on-demand sequence from 1 to 1000. - Dies ist eine bedarfsbasierte Sequenz von 1 bis 1000. - - - - This is a sequence producing the words "hello" and "world" - Diese Sequenz generiert die Wörter "hello" und "world". - - - - This sequence producing the even numbers up to 2000. - Diese Sequenz erzeugt gerade Zahlen bis 2000. - - - - This is an infinite sequence which is a random walk. - Dies ist eine unendliche Sequenz und ermöglicht Zufallsdurchläufe. - - - - This example uses yield! to return each element of a subsequence. - In diesem Beispiel werden mithilfe von "yield!" die einzelnen Elemente einer Untersequenz zurückgegeben. - - - - This example shows the first 100 elements of the random walk. - Dieses Beispiel zeigt die ersten 100 Elemente des Zufallsdurchlaufs. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Rekursive Funktionen können sich selbst aufrufen. In F# sind Funktionen nur rekursiv, - - - - when declared using 'let rec'. - für die Deklaration mithilfe von "let rec". - - - - Recursion is the preferred way to process sequences or collections in F#. - Rekursion ist die bevorzugte Möglichkeit zum Verarbeiten von Sequenzen oder Sammlungen in F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Dieses Beispiel zeigt eine rekursive Funktion, die die Fakultät einer ganzen - - - - integer. It uses 'let rec' to define a recursive function. - Zahl berechnet. Zum Definieren einer rekursiven Funktion wird "let rec" verwendet. - - - - Computes the greatest common factor of two integers. - Berechnet den höchsten gemeinsamen Faktor von zwei Integern. - - - - Since all of the recursive calls are tail calls, - Da alle rekursiven Aufrufe Endeaufrufe sind, - - - - the compiler will turn the function into a loop, - wandelt der Compiler die Funktion in eine Schleife um, - - - - which improves performance and reduces memory consumption. - was die Leistung verbessert und die Arbeitsspeicherbedarf reduziert. - - - - This example computes the sum of a list of integers using recursion. - Dieses Beispiel berechnet mithilfe von Rekursion die Summe einer Liste von Integern. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Mithilfe einer Hilfsfunktion mit einem Ergebnisakkumulator wird "sumList" endrekursiv. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Dies ruft die endrekursive Hilfsfunktion auf und verwendet "0" als Startwertakkumulator. - - - - An approach like this is common in F#. - Dies ist eine häufige Vorgehensweise in F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Datensätze sind ein Aggregat aus benannten Werten mit optionalen Membern (wie etwa Methoden). - - - - They are immutable and have structural equality semantics. - Sie sind nicht veränderlich und verfügen über eine strukturelle Gleichheitssemantik. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Dieses Beispiel zeigt, wie ein neuer Datensatztyp definiert wird. - - - - This example shows how to instantiate a record type. - In diesem Beispiel erfahren Sie, wie Sie einen Datensatztyp instanziieren. - - - - You can also do this on the same line with ';' separators. - Das ist in der gleichen Zeile auch mit dem Trennzeichen ";" möglich. - - - - This example shows how to use "copy-and-update" on record values. It creates - Dieses Beispiel zeigt die Verwendung von "Kopieren und aktualisieren" für Datensatzwerte. Es wird - - - - a new record value that is a copy of contact1, but has different values for - ein neuer Datensatz als Kopie von "contact1" erstellt, der jedoch über andere Werte - - - - the 'Phone' and 'Verified' fields. - für die Felder "Phone" und "Verified" verfügt. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Dieses Beispiel veranschaulicht das Schreiben einer Funktion zum Verarbeiten eines Datensatzwerts. - - - - It converts a 'ContactCard' object to a string. - Es konvertiert ein Objekt vom Typ "ContactCard" in eine Zeichenfolge. - - - - This is an example of a Record with a member. - Dies ist ein Beispiel für einen Datensatz mit einem Member. - - - - Members can implement object-oriented members. - Member können objektorientierte Member implementieren. - - - - Members are accessed via the '.' operator on an instantiated type. - Auf Member wird über den Operator "." in einem instanziierten Typ zugegriffen. - - - - Records can also be represented as structs via the 'Struct' attribute. - Datensätze können mithilfe des Attributs "Struct" auch als Strukturen dargestellt werden. - - - - This is helpful in situations where the performance of structs outweighs - Dies ist in Situationen hilfreich, in denen die Leistung der Strukturen wichtiger ist als - - - - the flexibility of reference types. - die Flexibilität der Verweistypen. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Diskriminierte Unions (DUs) sind Werte, die eine Anzahl benannter Formen oder Fälle sein können. - - - - Data stored in DUs can be one of several distinct values. - In DUs gespeicherte Daten können einer von verschiedenen eindeutigen Werten sein. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Folgendes stellt die Farbe einer Spielkarte dar. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Eine diskriminierte Union kann auch verwendet werden, um den Rang einer Spielkarte darzustellen. - - - - Represents the rank of cards 2 .. 10 - Stellt den Rang der Karten 2 bis 10 dar 10 - - - - Discriminated Unions can also implement object-oriented members. - Diskriminierte Unions können objektorientierte Member implementieren. - - - - This is a record type that combines a Suit and a Rank. - Dieser Datensatztyp kombiniert eine Farbe und einen Rang. - - - - It's common to use both Records and Disciminated Unions when representing data. - Beim Darstellen von Daten werden häufig sowohl Datensätze als auch diskriminierte Unions verwendet. - - - - This computes a list representing all the cards in the deck. - Dies berechnet eine Liste mit allen Karten im Stapel. - - - - This example converts a 'Card' object to a string. - Dieses Beispiel konvertiert ein Objekt vom Typ "Card" in eine Zeichenfolge. - - - - This example prints all the cards in a playing deck. - Dieses Beispiel gibt alle Karten in einem Kartenstapel aus. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Einzelfall-DUs werden häufig für die Domänenmodellierung verwendet. Dadurch erhalten Sie zusätzliche Typsicherheit - - - - over primitive types such as strings and ints. - für primitive Typen wie Zeichenfolgen und Integer. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Eine implizite Konvertierung von Einzelfall-DUs in den umschlossenen Typ oder aus diesem Typ ist nicht möglich. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Beispielsweise eine Funktion, die eine Adresse akzeptiert, kann keine Zeichenfolge als Eingabe akzeptieren - - - - or vive/versa. - (oder umgekehrt). - - - - You can easily instantiate a single-case DU as follows. - Sie können Einzelfall-DUs folgendermaßen instanziieren. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Wenn Sie den Wert benötigen, können Sie den zugrunde liegenden Wert mit einer einfachen Funktion entpacken. - - - - Printing single-case DUs is simple with unwrapping functions. - Mit entpackten Funktionen lassen sich Einzelfall-DUs einfach drucken. - - - - Disciminated Unions also support recursive definitions. - Diskriminierte Unions unterstützen auch rekursive Definitionen. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Dies stellt eine Struktur für die Binärsuche dar, wobei ein Fall eine leere Struktur ist - - - - and the other being a Node with a value and two subtrees. - und der andere Fall einen Knoten mit einem Wert und zwei Unterstrukturen darstellt. - - - - Check if an item exists in the binary search tree. - Prüfen Sie, ob die Struktur für die Binärsuche ein Element enthält. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Sucht rekursiv mithilfe des Musterabgleichs. Gibt bei vorhandenem Element "true" aus, andernfalls "false". - - - - Check the left subtree. - Prüfen Sie die linke Unterstruktur. - - - - Check the right subtree. - Prüfen Sie die rechte Unterstruktur. - - - - Inserts an item in the Binary Search Tree. - Fügt in die Struktur für die Binärsuche ein Element ein. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Findet die Position für das rekursive Einfügen mithilfe des Musterabgleichs und fügt anschließend einen neuen Knoten ein. - - - - If the item is already present, it does not insert anything. - Wenn das Element bereits vorhanden ist, wird nichts eingefügt. - - - - No need to insert, it already exists; return the node. - Einfügen nicht erforderlich, da bereits vorhanden; Knoten zurückgeben. - - - - Call into left subtree. - Aufruf in linker Unterstruktur. - - - - Call into right subtree. - Aufruf in rechter Unterstruktur. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Diskriminierte Unions können mithilfe des Attributs "Struct" auch als Struktur dargestellt werden. - - - - This is helpful in situations where the performance of structs outweighs - Dies ist in Situationen hilfreich, in denen die Leistung der Strukturen wichtiger ist als - - - - the flexibility of reference types. - die Flexibilität der Verweistypen. - - - - However, there are two important things to know when doing this: - Dabei sind jedoch zwei Punkte zu beachten: - - - - 1. A struct DU cannot be recursively-defined. - 1. Eine Struktur-DU kann nicht rekursiv definiert werden. - - - - 2. A struct DU must have unique names for each of its cases. - 2. In einer Struktur-DU muss jeder Fall einen eindeutigen Namen haben. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Der Musterabgleich ist eine Funktion von F#, die Ihnen die Verwendung von Mustern ermöglicht, - - - - which are a way to compare data with a logical structure or structures, - die eine Möglichkeit sind, um Daten mit logischen Strukturen oder Strukturen zu vergleichen, - - - - decompose data into constituent parts, or extract information from data in various ways. - Daten in ihre Einzelteile zu zerlegen oder auf verschiedene Weise Informationen aus Daten zu extrahieren. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Das Verteilen ist anschließend mithilfe des Musterabgleichs anhand der Form eines Musters möglich. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Ein Datensatz für den Vor- und Nachnamen einer Person - - - - A Discriminated Union of 3 different kinds of employees - Eine diskriminierte Union mit drei verschiedenen Arten von Mitarbeitern - - - - Count everyone underneath the employee in the management hierarchy, - Zählen Sie alle Personen unterhalb des Angestellten in der Verwaltungshierarchie, - - - - including the employee. - einschließlich des Angestellten. - - - - Find all managers/executives named "Dave" who do not have any reports. - Suchen Sie alle Manager/Führungskräfte mit dem Namen "Dave", die über keine Berichte verfügen. - - - - This uses the 'function' shorthand to as a lambda expression. - Dies verwendet die Kurzform "function" als Lambdaausdruck. - - - - [] matches an empty list. - [] entspricht einer leeren Liste. - - - - '_' is a wildcard pattern that matches anything. - "_" ist ein Platzhaltermuster, das mit allem übereinstimmt - - - - This handles the "or else" case. - Dies behandelt den "or else"-Fall. - - - - You can also use the shorthand function construct for pattern matching, - Sie können das Kurzform-Funktionskonstrukt auch für den Musterabgleich verwenden, - - - - which is useful when you're writing functions which make use of Partial Application. - was beim Schreiben von Funktionen, die die partielle Anwendung nutzen, hilfreich ist. - - - - Define some more functions which parse with the helper function. - Definieren Sie weitere Funktionen, die eine Analyse mithilfe der Hilfsfunktion durchführen. - - - - Active Patterns are another powerful construct to use with pattern matching. - Aktive Muster sind ein weiteres leistungsstarkes Konstrukt, das beim Musterabgleich verwendet werden kann. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Sie ermöglichen eine Partitionierung der Eingabedaten in benutzerdefinierte Formen, wobei sie an der Musterabgleichs-Aufrufsite zerlegt werden. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Der Musterabgleich mithilfe des Schlüsselworts "function" und das aktive Muster sehen häufig wie folgt aus. - - - - Call the printer with some different values to parse. - Rufen Sie den Drucker mit unterschiedlichen zu analysierenden Werten auf. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Bei Optionswerten handelt es sich um eine beliebige Art von Werten, die entweder mit "Some" oder mit "None" markiert sind. - - - - They are used extensively in F# code to represent the cases where many other - Sie werden in F#-Code umfassend verwendet, um die Fälle darzustellen, in denen viele - - - - languages would use null references. - Sprachen NULL-Verweise verwenden würden. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Definieren Sie als Erstes eine Postleitzahl, die über eine diskriminierte Einzelfall-Union definiert ist. - - - - Next, define a type where the ZipCode is optional. - Definieren Sie als Nächstes einen Typ, bei dem "ZipCode" optional ist. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Definieren Sie dann einen Schnittstellentyp, der ein Objekt zum Berechnen der Versandkosten für die Postleitzahl des Kunden repräsentiert, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - sofern Implementierungen für die abstrakten Methoden "getState" und "getShippingZone" vorhanden sind. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Berechnen Sie nun mithilfe einer Rechnerinstanz die Versandkosten für einen Kunden. - - - - This uses combinators in the Option module to allow a functional pipeline for - Dies verwendet Kombinatoren im Option-Modul für eine funktionale Pipeline zum - - - - transforming data with Optionals. - Transformieren von Daten mit Optionen. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Maßeinheiten sind eine Möglichkeit, um für primitive numerische Typen typsicher den Änderungsverlauf einzublenden. - - - - You can then perform type-safe arithmetic on these values. - Anschließend können Sie für diese Werte die typsichere Arithmetik ausführen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Öffnen Sie zunächst eine Auflistung mit allgemeinen Einheitennamen. - - - - Define a unitized constant - Definieren Sie eine einheitliche Konstante. - - - - Next, define a new unit type - Definieren Sie als Nächstes einen neuen Einheitentyp. - - - - Conversion factor mile to meter. - Faktor für die Umrechnung von Meilen in Meter. - - - - Define a unitized constant - Definieren Sie eine einheitliche Konstante. - - - - Compute metric-system constant - Berechnen Sie die Konstante für das metrische System. - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Werte, die Maßeinheiten verwenden, können wie der primitive numerische Typ z.B. zum Drucken genutzt werden. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Klassen sind eine Möglichkeit zum Definieren neuer Objekttypen in F#. Sie unterstützen standardmäßige objektorientierte Konstrukte. - - - - They can have a variety of members (methods, properties, events, etc.) - Sie können über verschiedene Member verfügen (Methoden, Eigenschaften, Ereignisse usw.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Weitere Informationen zu Klassen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Weitere Informationen zu Membern finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Eine einfache, zweidimensionale Vektorklasse. - - - - The class's constructor is on the first line, - Der Konstruktor der Klasse befindet sich in der ersten Zeile - - - - and takes two arguments: dx and dy, both of type 'double'. - und akzeptiert zwei Argumente: dx und dy, beide vom Typ "double". - - - - This internal field stores the length of the vector, computed when the - Dieses interne Feld speichert die Länge des Vektors, die berechnet wird, wenn - - - - object is constructed - das Objekt konstruiert wird. - - - - 'this' specifies a name for the object's self identifier. - "this" gibt einen Namen für den Selbstbezeichner des Objekts an. - - - - In instance methods, it must appear before the member name. - In Instanzmethoden muss dies vor dem Membernamen angegeben werden. - - - - This member is a method. The previous members were properties. - Dieser Member ist eine Methode. Die vorherigen Member waren Eigenschaften. - - - - This is how you instantiate the Vector2D class. - So instanziieren Sie die Vector2D-Klasse. - - - - Get a new scaled vector object, without modifying the original object. - Rufen Sie ein neues skaliertes Vektorobjekt ab, ohne das ursprüngliche Objekt zu verändern. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Generische Klassen ermöglichen das Definieren von Typen in Bezug auf eine Gruppe von Typparametern. - - - - In the following, 'T is the type parameter for the class. - Im Folgenden ist 'T der Typparameter für die Klasse. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Dieses interne Feld speichert die Zustände in einer Liste. - - - - Add a new element to the list of states. - Der Liste der Zustände ein neues Element hinzufügen - - - - use the '<-' operator to mutate the value. - Den "<-"-Operator verwenden, um den Wert zu mutieren - - - - Get the entire list of historical states. - Die gesamte Liste der Verlaufszustände abrufen - - - - Get the latest state. - Den aktuellen Zustand abrufen - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Eine int-Instanz der state tracker-Klasse. Beachten Sie, dass der Typ-Parameter abgeleitet wird. - - - - Add a state - Einen Zustand hinzufügen - - - - Interfaces are object types with only 'abstract' members. - Schnittstellen sind Objekttypen, die nur über abstrakte Member verfügen. - - - - Object types and object expressions can implement interfaces. - Objekttypen und Objektausdrücke können Schnittstellen implementieren. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Dieser Typ implementiert "IDisposable". - - - - This is the implementation of IDisposable members. - Dies ist die Implementierung von IDisposable-Membern. - - - - This is an object that implements IDisposable via an Object Expression - Dies ist ein Objekt, das IDisposable über einen Objektausdruck implementiert. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Im Gegensatz zu anderen Sprachen wie C# oder Java ist keine neue Typendefinition erforderlich, - - - - to implement an interface. - um eine Schnittstelle zu implementieren. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - Die Bibliothek "FSharp.Core" definiert eine Reihe paralleler Verarbeitungsfunktionen. Hier - - - - you use some functions for parallel processing over arrays. - verwenden Sie einige Funktionen zur parallelen Verarbeitung über Arrays. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Weitere Informationen finden Sie unter: https://msdn.microsoft.com/de-de/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Definieren Sie zunächst ein Array mit Eingaben. - - - - Next, define a functions that does some CPU intensive computation. - Definieren Sie dann eine Funktion mit CPU-intensiven Berechnungen. - - - - Next, do a parallel map over a large input array. - Führen Sie als Nächstes eine parallele Zuordnung für ein umfangreiches Eingabearray durch. - - - - Next, print the results. - Geben Sie die Ergebnisse aus. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Ereignisse sind ein gängiger Begriff bei der .NET-Programmierung, v. a. bei WinForms oder WPF-Anwendungen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Erstellen Sie zunächst eine Instanz des Event-Objekts mit Abonnementpunkt (event.Publish) und Ereignisauslöser (event.Trigger). - - - - Next, add handler to the event. - Fügen Sie dem Ereignis einen Handler hinzu. - - - - Next, trigger the event. - Lösen Sie das Ereignis aus. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Erstellen Sie als Nächstes eine Event-Instanz gemäß der .NET-Standardkonvention: (sender, EventArgs) - - - - Next, add a handler for this new event. - Fügen Sie einen Handler für das neue Ereignis hinzu. - - - - Next, trigger this event (note that sender argument should be set). - Lösen Sie das Ereignis aus. (Hinweis: das sender-Argument muss festgelegt sein.) - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf deleted file mode 100644 index 692964c713..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Este ejemplo le guiará por los elementos del lenguaje F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Para ejecutar el código en F# interactivo, resalte una sección de código y presione Alt+Entrar, o bien haga clic con el botón secundario - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - y seleccione "Ejecutar en modo interactivo". Puede abrir la ventana de F# interactivo desde el menú "Ver". - - - - For more about F#, see: - Para obtener más información acerca de F#, vea: - - - - To see this tutorial in documentation form, see: - Para ver este tutorial en forma de documentación, vea: - - - - To learn more about applied F# programming, use - Para obtener más información sobre la programación de F# aplicada, use - - - - To install the Visual F# Power Tools, use - Para instalar Visual F# Power Tools, use - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - "Herramientas" --> "Extensiones y actualizaciones" --> "En línea" y busque - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Para obtener plantillas adicionales para su uso con F#, consulte 'Plantillas en línea' en Visual Studio, - - - - 'New Project' --> 'Online Templates' - "Nuevo proyecto" --> "Plantillas en línea" - - - - F# supports three kinds of comments: - F# admite tres tipos de comentarios: - - - - 1. Double-slash comments. These are used in most situations. - 1. Comentarios con doble barra diagonal. Se usan en la mayoría de las situaciones. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Comentarios de bloque de estilo ML. No se usan con tanta frecuencia. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Comentarios de triple barra diagonal. Se utilizan para funciones de documentación, tipos, etc. - - - - They will appear as text when you hover over something which is decorated with these comments. - Aparecerán como texto al mantener el puntero por encima de algo decorado con estos comentarios. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - También admiten comentarios XML de estilo .NET, que le permite generar documentación de referencia, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - y también permite a los editores (como Visual Studio) extraer información de ellos. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Abra los espacios de nombres con la palabra clave "open". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Un módulo es una agrupación de código de F#, como valores, tipos y valores de función. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - El código de agrupación de los módulos ayuda a mantener el código relacionado en conjunto y ayuda a evitar los conflictos de nombres en su programa. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Este es un entero de ejemplo. - - - - This is a sample floating point number. - Este es un número de punto flotante de ejemplo. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Se calcula un número nuevo aplicando cierta aritmética. Los tipos numéricos se convierten mediante - - - - functions 'int', 'double' and so on. - funciones "int", "double", etc. - - - - This is a list of the numbers from 0 to 99. - Esta es una lista de números del 0 al 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Esta es una lista de todas las tuplas que contienen todos los números de 0 a 99 y sus cuadrados. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - La línea siguiente imprime una lista que incluye tuplas, utilizando "%A" para la impresión genérica. - - - - This is a sample integer with a type annotation - Este es un entero de ejemplo con una anotación de tipo - - - - Values in F# are immutable by default. They cannot be changed - Los valores de F# son inmutables de manera predeterminada. No se pueden cambiar - - - - in the course of a program's execution unless explicitly marked as mutable. - en el transcurso de la ejecución de un programa a menos que se marquen explícitamente como mutable. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Al enlazar un valor a un nombre con "let", se convierte en inmutable. - - - - The second line of code fails to compile because 'number' is immutable and bound. - La segunda línea de código no se compila porque "number" es inmutable y está enlazado. - - - - Re-defining 'number' to be a different value is not allowed in F#. - En F#, no se puede redefinir "number" para darle otro valor. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Enlace mutable. Es necesario para poder mutar el valor de "otherNumber". - - - - When mutating a value, use '<-' to assign a new value. - Para la mutación de un valor, use "<-" para asignar un valor nuevo. - - - - You could not use '=' here for this purpose since it is used for equality - No pudo usar "=" con este propósito, porque se usa para la igualdad - - - - or other contexts such as 'let' or 'module' - u otros contextos, como "let" o "module" - - - - Much of F# programming consists of defining functions that transform input data to produce - Gran parte de la programación de F# consiste en definir funciones que transforman los datos de entrada para generar - - - - useful results. - resultados útiles. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - "let" se utiliza para definir una función. En este caso, acepta un argumento de entero y devuelve un entero. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Los paréntesis son opcionales para argumentos de función, excepto cuando se utiliza una anotación de tipo explícito. - - - - Apply the function, naming the function return result using 'let'. - Aplicar la función, asignando un nombre al resultado devuelto por la función mediante 'let'. - - - - The variable type is inferred from the function return type. - El tipo de variable se infiere del tipo de valor devuelto por la función. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Esta línea utiliza "%d" para imprimir el resultado de un entero. Cuenta con seguridad de tipos. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Si "result1" no fuese de tipo "int", la línea no se compilaría. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Si es necesario, anote el tipo de un nombre de parámetro usando "(argument:type)". Los paréntesis son obligatorios. - - - - Conditionals use if/then/elid/elif/else. - Los condicionales usan if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Tenga en cuenta que F# utiliza una sintaxis que tiene en cuenta la sangría de espacios en blanco, de forma parecida a lenguajes como Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Esta línea utiliza "%f" para imprimir el resultado como un valor float. Al igual que "%d", cuenta con seguridad de tipos. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Los valores booleanos son tipos de datos fundamentales en F#. Estos son algunos ejemplos de valores booleanos y lógica condicional. - - - - To learn more, see: - Para obtener más información, vea: - - - - and - Y - - - - Booleans values are 'true' and 'false'. - Los valores booleanos son "true" y "false". - - - - Operators on booleans are 'not', '&&' and '||'. - Los operadores de valores booleanos son "not", "&&" y "||". - - - - This line uses '%b'to print a boolean value. This is type-safe. - Esta línea utiliza "%b" para imprimir un valor booleano. Cuenta con seguridad de tipos. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Las cadenas son tipos de datos fundamentales en F#. Estos son algunos ejemplos de cadenas y de manipulación básica de cadenas. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Las cadenas usan comillas dobles. - - - - Strings can also use @ to create a verbatim string literal. - Las cadenas también pueden usar @ para crear un literal de cadena textual. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - No tiene en cuenta los caracteres de escape, como "\", "\n", "\t", etc. - - - - String literals can also use triple-quotes. - Los literales de cadena también pueden usar comillas triples. - - - - String concatenation is normally done with the '+' operator. - La concatenación de cadenas suele hacerse con el operador "+". - - - - This line uses '%s' to print a string value. This is type-safe. - Esta línea utiliza "%s" para imprimir un valor de cadena. Cuenta con seguridad de tipos. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Las subcadenas utilizan la notación del indexador. Esta línea extrae los 7 primeros caracteres como una subcadena. - - - - Note that like many languages, Strings are zero-indexed in F#. - Tenga en cuenta que, al igual que en otros muchos lenguajes, las cadenas tienen índice 0 en F#. - - - - Tuples are simple combinations of data values into a combined value. - Las tuplas son combinaciones simples de valores de datos en un valor combinado. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Tupla de enteros sencilla. - - - - A function that swaps the order of two values in a tuple. - Una función que intercambia el orden de dos valores en una tupla. - - - - F# Type Inference will automatically generalize the function to have a generic type, - La inferencia de tipos de F# generalizará la función de forma automática para que tenga un tipo genérico, - - - - meaning that it will work with any type. - lo que significa que funcionará con cualquier tipo. - - - - A tuple consisting of an integer, a string, - Una tupla que consta de un entero, una cadena, - - - - and a double-precision floating point number. - y un número de punto flotante de doble precisión. - - - - A simple tuple of integers with a type annotation. - Una tupla de enteros sencilla con una anotación de tipo. - - - - Type annotations for tuples use the * symbol to separate elements - Las anotaciones de tipo para las tuplas usan el símbolo * para separar los elementos - - - - Tuples are normally objects, but they can also be represented as structs. - Las tuplas suelen ser objetos, pero también se pueden representar como estructuras. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Interoperan completamente con estructuras de C# y Visual Basic.NET; sin embargo, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - las tuplas de estructuras no son implícitamente convertibles con tuplas de objeto (a menudo denominadas tuplas de referencia). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - La segunda línea no se compilará por esto. Quite las marcas de comentario para ver qué ocurre. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Aunque no puede convertir tuplas de struct en tuplas de referencia y viceversa de forma implícita, - - - - you can explicitly convert via pattern matching, as demonstrated below. - puede hacer la conversión de forma explícita mediante coincidencia de patrones, como se muestra a continuación. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Los operadores de canalización ("|>", "<|", etc.) y de composición (">>", "<<") de F# - - - - are used extensively when processing data. These operators are themselves functions - se utilizan mucho en el procesamiento de datos. Estos operadores son en sí mismos funciones. - - - - which make use of Partial Application. - que usan aplicación parcial. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Para obtener más información sobre estos operadores, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Para obtener más información sobre la aplicación parcial, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Eleva un valor la cuadrado. - - - - Adds 1 to a value. - Suma 1 a un valor. - - - - Tests if an integer value is odd via modulo. - Comprueba si un valor entero es impar mediante un módulo. - - - - A list of 5 numbers. More on lists later. - Lista de 5 números. Más adelante, se proporciona más información sobre listas. - - - - Given a list of integers, it filters out the even numbers, - Dada una lista de enteros, aplica un filtro para excluir los números pares, - - - - squares the resulting odds, and adds 1 to the squared odds. - eleva al cuadrado los impares resultantes y les suma 1. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Una forma más corta de escribir "squareOddValuesAndAddOne" es anidar cada - - - - sub-result into the function calls themselves. - subresultado en las propias llamadas a la función. - - - - This makes the function much shorter, but it's difficult to see the - Esto hace la función mucho más corta, pero es difícil ver el - - - - order in which the data is processed. - orden en el que se procesan los datos. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Una forma recomendable de escribir "squareOddValuesAndAddOne" es usar operadores de canalización de F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Esto permite evitar que se creen resultados intermedios, pero es mucho más fácil de leer - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - que anidar las llamadas a la función como "squareOddValuesAndAddOneNested" - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - No puede acortar "squareOddValuesAndAddOnePipeline" moviendo la segunda llamada de "List.map" - - - - into the first, using a Lambda Function. - a la primera, usando una función lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Tenga en cuenta que las canalizaciones se usan también en la función lambda. Los operadores de canalización de F# - - - - can be used for single values as well. This makes them very powerful for processing data. - se puede usar también para valores individuales. Esto les confiere una gran capacidad para el procesamiento de datos. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Por último, puede eliminar la necesidad de tomar "valores" de forma explícita como parámetro usando ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - para componer las dos operaciones principales: aplicar un filtro para excluir los números pares, elevar al cuadrado y sumar uno. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - De igual modo, no se necesita tampoco la parte "fun x -> ..." de la expresión lambda, porque "x" - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - se define en ese ámbito para poderlo pasar a una canalización funcional. Por tanto, ">>" se pude usar - - - - there as well. - aquí también. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - El resultado de "squareOddValuesAndAddOneComposition" es en sí mismo otra función que toma una - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - lista de enteros como entrada. Si ejecuta "squareOddValuesAndAddOneComposition" con una lista - - - - of integers, you'll notice that it produces the same results as previous functions. - de enteros, notará que produce los mismos resultados que las funciones anteriores. - - - - This is using what is known as function composition. This is possible because functions in F# - Aquí se utiliza lo que se conoce como composición de funciones. Es posible porque las funciones en F# - - - - use Partial Application and the input and output types of each data processing operation match - utilizan aplicación parcial y los tipos de entrada y salida de cada operación de procesamiento de datos buscan - - - - the signatures of the functions we're using. - las signaturas de las funciones que estamos usando. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Las listas están ordenadas, son inmutables y están vinculadas individualmente. Son diligentes en su evaluación. - - - - This module shows various ways to generate lists and process lists with some functions - Este módulo muestra varias formas de generar listas y procesarlas con algunas funciones - - - - in the 'List' module in the F# Core Library. - en el módulo "List" de la biblioteca principal de F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Las listas se definen mediante [ ... ]. Esta es una lista vacía. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Esta es una lista de 3 elementos. Se utiliza ";" para separar los elementos que están en la misma línea. - - - - You can also separate elements by placing them on their own lines. - También puede separar los elementos poniendo cada uno en su propia línea. - - - - This is a list of integers from 1 to 1000 - Esta es una lista de enteros del 1 al 1000 - - - - Lists can also be generated by computations. This is a list containing - Las listas también pueden generarse mediante cálculos. Esta es una lista que contiene - - - - all the days of the year. - todos los días del año. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Imprime los 5 primeros elementos de "daysList" usando "List.take". - - - - Computations can include conditionals. This is a list containing the tuples - Los cálculos pueden incluir condicionales. Esta es una lista que contiene las tuplas - - - - which are the coordinates of the black squares on a chess board. - que son las coordenadas de los cuadrados negros de un tablero de ajedrez. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Las listas se pueden transformas mediante "List.map" y otros combinadores de programación funcionales. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Esta definición genera una nueva lista al elevar al cuadrado los números incluidos en numberList y usa el operador - - - - operator to pass an argument to List.map. - de canalización para pasar un argumento a List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Hay otras muchas combinaciones de listas. La siguiente, calcula la suma de los cuadrados de los - - - - numbers divisible by 3. - números divisibles por 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Las matrices son colecciones mutables de tamaño fijo de elementos del mismo tipo. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Aunque son parecidas a las listas (admiten enumeración y tienen combinadores parecidos para el procesamiento de datos), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - suelen ser más rápidas y admitir acceso aleatorio rápido. A cambio, tiene el inconveniente de que es menos seguro porque es mutable. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Esta es una matriz vacía. Observe que la sintaxis es parecida a la de las listas, pero utiliza "[| ... |]" en su lugar. - - - - Arrays are specified using the same range of constructs as lists. - Las matrices se especifican con el mismo intervalo de construcciones que las listas. - - - - This is an array of numbers from 1 to 1000. - Esta es una matriz de números del 1 al 1000. - - - - This is an array containing only the words "hello" and "world". - Esta es una matriz que solo contiene las palabras "hola" y "todos". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Esta es una matriz inicializada con un índice que contiene los números pares del 0 al 2000. - - - - Sub-arrays are extracted using slicing notation. - Las submatrices se extraen mediante la notación divisoria. - - - - You can loop over arrays and lists using 'for' loops. - Puede ejecutar un bucle en matrices y listas usando bucles "for". - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Puede modificar el contenido de un elemento de matriz mediante el operador de asignación de flecha izquierda. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Para obtener más información sobre este operador, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Para transformar matrices, use "Array.map" y otras operaciones de programación funcionales. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - La operación siguiente calcula la suma de las longitudes de las palabras que empiezan por "h". - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Las secuencias son una serie lógica de elementos del mismo tipo. Son de un tipo más general que las listas o las matrices. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Las secuencias se evalúan previa petición y se vuelven a evaluar cada vez que se recorren en iteración. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Una secuencia de F# es un alias para un elemento System.Collections.Generic.IEnumerable<'T> de .NET. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Las funciones de procesamiento de secuencias también pueden aplicarse a las listas y a las matrices. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Esta es una secuencia vacía. - - - - This a sequence of values. - Esta es una secuencia de valores. - - - - This is an on-demand sequence from 1 to 1000. - Esta es una secuencia a petición del 1 al 1000. - - - - This is a sequence producing the words "hello" and "world" - Esta es una secuencia que genera las palabras "hola" y "todos" - - - - This sequence producing the even numbers up to 2000. - Esta secuencia genera los números pares hasta el 2000. - - - - This is an infinite sequence which is a random walk. - Esta es una secuencia infinita que constituye un recorrido aleatorio. - - - - This example uses yield! to return each element of a subsequence. - Este ejemplo usa yield! para devolver cada uno de los elementos de una subsecuencia. - - - - This example shows the first 100 elements of the random walk. - Este ejemplo muestra los 100 primeros elementos del recorrido aleatorio. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Las funciones recursivas pueden llamarse a sí mismas. En F#, las funciones solo son recursivas - - - - when declared using 'let rec'. - cuando se declara con "let rec". - - - - Recursion is the preferred way to process sequences or collections in F#. - La recursión es la forma recomendada de procesar secuencias o colecciones en F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Este ejemplo muestra una función recursiva que calcula el factorial de un - - - - integer. It uses 'let rec' to define a recursive function. - entero. Usa "let rec" para definir una función recursiva. - - - - Computes the greatest common factor of two integers. - Calcula el mayor factor común de dos enteros. - - - - Since all of the recursive calls are tail calls, - Puesto que todas las llamadas recursivas son llamadas de cola, - - - - the compiler will turn the function into a loop, - el compilador devolverá la función en un bucle, - - - - which improves performance and reduces memory consumption. - lo que mejora el rendimiento y reduce el consumo de memoria. - - - - This example computes the sum of a list of integers using recursion. - Este ejemplo calcula la suma de una lista de enteros con recursión. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Esto convierte la función "sumList" en recursiva de cola, usando una función auxiliar con un acumulador de resultados. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Este código invoca la función auxiliar recursiva de cola, proporcionando "0" como acumulador de valores de inicialización. - - - - An approach like this is common in F#. - Este método es habitual en F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Los registros son un agregado de valores con nombre, con miembros opcionales (como los métodos). - - - - They are immutable and have structural equality semantics. - Son inmutables y tienen semántica de igualdad estructural. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Este ejemplo muestra cómo definir un nuevo tipo de registro. - - - - This example shows how to instantiate a record type. - Este ejemplo muestra cómo crear una instancia de un tipo de registro. - - - - You can also do this on the same line with ';' separators. - También puede hacer esto en la misma línea usando ";" como separador. - - - - This example shows how to use "copy-and-update" on record values. It creates - Este ejemplo muestra cómo usar "copy-and-update" en los valores de registro. Crea - - - - a new record value that is a copy of contact1, but has different values for - un nuevo valor de registro que es una copia de contact1, pero con valores distintos para - - - - the 'Phone' and 'Verified' fields. - los campos "Phone" y "Verified". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Este ejemplo muestra cómo escribir una función que procesa un valor del registro. - - - - It converts a 'ContactCard' object to a string. - Convierte un objeto "ContactCard" en una cadena. - - - - This is an example of a Record with a member. - Este es un ejemplo de un registro con un miembro. - - - - Members can implement object-oriented members. - Los miembros pueden implementar miembros orientados a objetos. - - - - Members are accessed via the '.' operator on an instantiated type. - A los miembros se accede con el operador "." en un tipo del que se ha creado una instancia. - - - - Records can also be represented as structs via the 'Struct' attribute. - Los registros se pueden representar también como estructuras con el atributo "Struct". - - - - This is helpful in situations where the performance of structs outweighs - Esto es útil en situaciones donde el rendimiento de las estructuras es superior a - - - - the flexibility of reference types. - la flexibilidad de los tipos de referencia. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Las uniones discriminadas (DU) son valores que podrían ser un gran número de formas o casos con nombre. - - - - Data stored in DUs can be one of several distinct values. - Los datos almacenados en uniones discriminadas pueden ser uno de varios valores diferentes. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - El siguiente código representa el palo de una carta. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - También se puede usar una unión discriminada para representar el rango de una carta. - - - - Represents the rank of cards 2 .. 10 - Representa el rango de cartas 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Las uniones discriminadas pueden implementar también miembros orientados a objetos. - - - - This is a record type that combines a Suit and a Rank. - Este es un tipo de registro que combina un palo y un rango. - - - - It's common to use both Records and Disciminated Unions when representing data. - Es habitual utilizar tanto registros como uniones discriminadas cuando se representan datos. - - - - This computes a list representing all the cards in the deck. - Este código calcula una lista que representa todas las cartas de la baraja. - - - - This example converts a 'Card' object to a string. - Este ejemplo convierte un objeto "Card" en una cadena. - - - - This example prints all the cards in a playing deck. - Este ejemplo imprime todas las cartas de una baraja. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Las uniones discriminadas de un solo caso se usan con frecuencia en el modelado de dominios. Esto puede aportar mayor seguridad de tipos - - - - over primitive types such as strings and ints. - en tipos primitivos, como cadenas y enteros. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Las uniones discriminadas de un solo caso no se pueden convertir de forma implícita en el tipo que encapsulan, ni viceversa. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Por ejemplo, una función que toma una dirección no puede aceptar una cadena como esa entrada, - - - - or vive/versa. - o viceversa. - - - - You can easily instantiate a single-case DU as follows. - Puede crear fácilmente una instancia de una unión discriminada de un solo caso del siguiente modo. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Cuando necesite el valor, puede desencapsular el valor subyacente con una función sencilla. - - - - Printing single-case DUs is simple with unwrapping functions. - Imprimir uniones discriminadas de un solo caso es muy sencillo con funciones de desencapsulamiento. - - - - Disciminated Unions also support recursive definitions. - Las uniones discriminadas admiten también definiciones recursivas. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Esto representa un árbol de búsqueda binaria, donde un caso es el árbol vacío - - - - and the other being a Node with a value and two subtrees. - y el otro es un nodo con un valor y dos subárboles. - - - - Check if an item exists in the binary search tree. - Comprueba si existe un elemento en el árbol de búsqueda binaria. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Hace búsquedas de forma recursiva usando coincidencia de patrones. Devuelve true si existe; de lo contrario, false. - - - - Check the left subtree. - Comprueba el subárbol de la izquierda. - - - - Check the right subtree. - Comprueba el subárbol de la derecha. - - - - Inserts an item in the Binary Search Tree. - Inserta un elemento en el árbol de búsqueda binaria. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Busca dónde insertar de forma recursiva un nuevo nodo usando coincidencia de patrones y lo inserta. - - - - If the item is already present, it does not insert anything. - Si el elemento ya está presente, no inserta nada. - - - - No need to insert, it already exists; return the node. - No es necesario insertarlo, ya existe; devuelve el nodo. - - - - Call into left subtree. - Llama al subárbol de la izquierda. - - - - Call into right subtree. - Llama al subárbol de la derecha. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Las uniones discriminadas se pueden representar también como estructuras con el atributo "Struct". - - - - This is helpful in situations where the performance of structs outweighs - Esto es útil en situaciones donde el rendimiento de las estructuras es superior a - - - - the flexibility of reference types. - la flexibilidad de los tipos de referencia. - - - - However, there are two important things to know when doing this: - No obstante, hay dos cosas importantes que deben tenerse en cuenta cuando se hace esto: - - - - 1. A struct DU cannot be recursively-defined. - 1. Una unión discriminada de estructura no se puede definir de forma recursiva. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Una unión discriminada de estructura debe tener un nombre único para cada uno de sus casos. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - La coincidencia de patrones es una característica de F# que permite utilizar patrones, - - - - which are a way to compare data with a logical structure or structures, - que son una forma de comparar datos con estructuras lógicas, - - - - decompose data into constituent parts, or extract information from data in various ways. - descomponer datos en partes constituyentes o extraer información de datos de varias formas. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Después, puede hacer envíos en función de la "forma" de un patrón mediante coincidencia de patrones. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Un registro para el nombre y los apellidos de una persona - - - - A Discriminated Union of 3 different kinds of employees - Una unión discriminada de 3 tipos de empleados diferentes - - - - Count everyone underneath the employee in the management hierarchy, - Cuenta a todos por debajo del empleado en la jerarquía de administración, - - - - including the employee. - incluido el empleado. - - - - Find all managers/executives named "Dave" who do not have any reports. - Buscar a todos los directores o ejecutivos que se llamen "Dave" que no tengan jefes. - - - - This uses the 'function' shorthand to as a lambda expression. - Aquí se utiliza la forma abreviada "function" como una expresión lambda. - - - - [] matches an empty list. - [] coincide con una lista vacía. - - - - '_' is a wildcard pattern that matches anything. - "_" es un patrón comodín que busca cualquier cosa. - - - - This handles the "or else" case. - Este código controla el caso "or else". - - - - You can also use the shorthand function construct for pattern matching, - También puede usar la construcción abreviada de funciones para la coincidencia de patrones, - - - - which is useful when you're writing functions which make use of Partial Application. - que es muy útil cuando se escriben funciones que utilizan aplicación parcial. - - - - Define some more functions which parse with the helper function. - Define algunas funciones más que se analizan con la función auxiliar. - - - - Active Patterns are another powerful construct to use with pattern matching. - Los patrones activos son también una construcción muy eficaz para usarla con coincidencia de patrones. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Permiten particionar los datos de entrada en formas personalizadas, descomponiéndolos en el sitio de llamada de coincidencia de patrones. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - La coincidencia de patrones con la palabra clave "function" y patrones activos suele ser similar a este código. - - - - Call the printer with some different values to parse. - Llamar a la impresora con algunos valores diferentes para analizar. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Los valores de opción son cualquier tipo de valor etiquetado como 'Some' o 'None'. - - - - They are used extensively in F# code to represent the cases where many other - Se usan de forma exhaustiva en el código de F# para representar los casos en los que muchos otros - - - - languages would use null references. - lenguajes usarían referencias NULL. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - En primer lugar, defina un código postal con una unión discriminada de un solo caso. - - - - Next, define a type where the ZipCode is optional. - Después, defina un tipo donde ZipCode sea opcional. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Después, defina un tipo de interfaz que represente un objeto para calcular la zona de envío del código postal del cliente, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - especificando implementaciones para los métodos abstractos 'getState' y 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Después, calcule una zona de envío para un cliente con una instancia de la calculadora. - - - - This uses combinators in the Option module to allow a functional pipeline for - Aquí se utilizan combinadores en el módulo Option para permitir que una canalización funcional - - - - transforming data with Optionals. - transforme datos con valores opcionales. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Las unidades de medida son una forma de anotar tipos numéricos primitivos con seguridad de tipos. - - - - You can then perform type-safe arithmetic on these values. - Después, puede realizar operaciones aritméticas con seguridad de tipos en estos valores. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Primero, abra una colección de nombres de unidad comunes - - - - Define a unitized constant - Defina una constante dividida en unidades - - - - Next, define a new unit type - Después, defina un nuevo tipo de unidad - - - - Conversion factor mile to meter. - Factor de conversión de millas a metros. - - - - Define a unitized constant - Defina una constante dividida en unidades - - - - Compute metric-system constant - Calcular constante del sistema métrico - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Los valores que usan unidades de medida se pueden usar simplemente como tipo numérico primitivo para cosas como la impresión. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Las clases son una forma de definir tipos de objeto nuevos en F# y admiten construcciones orientadas a objetos estándar. - - - - They can have a variety of members (methods, properties, events, etc.) - Pueden tener una gran variedad de miembros (métodos, propiedades, eventos, etc.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Para obtener más información sobre las clases, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Para obtener más información sobre miembros, vea https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Clase Vector bidimensional sencilla. - - - - The class's constructor is on the first line, - El constructor de la clase está en la primera línea - - - - and takes two arguments: dx and dy, both of type 'double'. - y toma dos argumentos: dx y dy, ambos de tipo "double". - - - - This internal field stores the length of the vector, computed when the - Este campo interno almacena la longitud del vector, que se calcula cuando - - - - object is constructed - se construye el objeto - - - - 'this' specifies a name for the object's self identifier. - 'this' especifica un nombre para el propio identificador del objeto. - - - - In instance methods, it must appear before the member name. - En los métodos de instancia, debe aparecer delante del nombre del miembro. - - - - This member is a method. The previous members were properties. - Este miembro es un método. Los miembros anteriores eran propiedades. - - - - This is how you instantiate the Vector2D class. - Así es cómo se crea una instancia de la clase Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Obtener un nuevo objeto de vector a escala sin modificar el objeto original. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Las clases genéricas permiten definir tipos con respecto a un conjunto de parámetros de tipo. - - - - In the following, 'T is the type parameter for the class. - En el siguiente código, 'T es el parámetro de tipo para la clase. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Este campo interno almacena los estados en una lista. - - - - Add a new element to the list of states. - Agregar un nuevo elemento a la lista de estados. - - - - use the '<-' operator to mutate the value. - Use el operador "<-" para mutar el valor. - - - - Get the entire list of historical states. - Obtener la lista completa de estados históricos. - - - - Get the latest state. - Obtener el último estado. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Una instancia 'int' de la clase del rastreador de estados. Observe que se ha inferido el parámetro de tipo. - - - - Add a state - Agregar un estado - - - - Interfaces are object types with only 'abstract' members. - Las interfaces son tipos de objeto que solo tienen miembros "abstract". - - - - Object types and object expressions can implement interfaces. - Los tipos de objeto y las expresiones de objeto pueden implementar interfaces. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Este es un tipo que implementa IDisposable. - - - - This is the implementation of IDisposable members. - Esta es la implementación de los miembros de IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Este es un objeto que implementa IDisposable mediante una expresión de objeto - - - - Unlike other languages such as C# or Java, a new type definition is not needed - A diferencia de otros lenguajes, como C# o Java, no es necesaria una nueva definición de tipo - - - - to implement an interface. - para implementar una interfaz. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - La biblioteca FSharp.Core define un intervalo de funciones de procesamiento paralelo. Aquí - - - - you use some functions for parallel processing over arrays. - se usan algunas funciones de procesamiento paralelo en matrices. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Para obtener más información, vea: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Primero, una matriz de entradas. - - - - Next, define a functions that does some CPU intensive computation. - Después, defina una función que realice algunos cálculos con gran consumo de CPU. - - - - Next, do a parallel map over a large input array. - Después, realice una asignación en paralelo en una matriz de entrada grande. - - - - Next, print the results. - Después, imprima los resultados. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Los eventos son algo habitual en la programación para .NET, especialmente con aplicaciones de WinForms o WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Primero, cree una instancia del objeto Event que conste de un punto de suscripción (event.Publish) y un desencadenador de eventos (event.Trigger). - - - - Next, add handler to the event. - Después, agregue un controlador al evento. - - - - Next, trigger the event. - Después, desencadene el evento. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Después, cree una instancia de Event que siga la convención estándar de .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Después, agregue un controlador para este nuevo evento. - - - - Next, trigger this event (note that sender argument should be set). - Después, desencadene este evento (tenga en cuenta que el argumento sender debe estar establecido). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf deleted file mode 100644 index ecef37c188..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Cet exemple est destiné à vous montrer les différents éléments du langage F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Pour exécuter le code dans F# Interactive, mettez en surbrillance une portion du code, puis appuyez sur Alt+Entrée ou cliquez avec le bouton droit, - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - puis sélectionnez Exécuter en mode interactif. Pour ouvrir la fenêtre F# Interactive, accédez au menu Affichage. - - - - For more about F#, see: - Pour en savoir plus sur F#, consultez : - - - - To see this tutorial in documentation form, see: - Pour afficher ce didacticiel au format documentation, consultez : - - - - To learn more about applied F# programming, use - Pour en savoir plus sur la programmation F# appliquée, utilisez - - - - To install the Visual F# Power Tools, use - Pour installer Visual F# Power Tools, utilisez - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Outils' --> 'Extensions et mises à jour' --> `En ligne` et rechercher - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Pour consulter d'autres modèles d'utilisation du langage F#, cliquez sur Modèles en ligne dans Visual Studio, - - - - 'New Project' --> 'Online Templates' - 'Nouveau projet' --> 'Modèles en ligne' - - - - F# supports three kinds of comments: - F# prend en charge trois genres de commentaires : - - - - 1. Double-slash comments. These are used in most situations. - 1. Commentaires avec double barre oblique (utilisés dans la plupart des cas). - - - - 2. ML-style Block comments. These aren't used that often. - 2. Commentaires de bloc de style ML (rarement utilisés). - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Commentaires avec triple barre oblique (utilisés pour documenter les fonctions, les types, etc.). - - - - They will appear as text when you hover over something which is decorated with these comments. - Ils apparaissent sous forme de texte quand vous pointez sur un élément décoré avec ces commentaires. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Ils prennent également en charge les commentaires XML de style .NET, ce qui vous permet de générer une documentation de référence. - - - - and they also allow editors (such as Visual Studio) to extract information from them. - Les éditeurs tels que Visual Studio peuvent également extraire des informations à partir de ces commentaires. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Ouvrir des espaces de noms à l'aide du mot clé 'open'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Un module est un regroupement d’éléments de code F#, comme des valeurs, des types et des valeurs de fonction. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Le regroupement du code dans les modules permet de conserver le code associé ensemble et d'éviter les conflits de noms dans votre programme. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Exemple d'entier. - - - - This is a sample floating point number. - Exemple de nombre à virgule flottante. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Nouveau nombre calculé par une opération arithmétique. Les types numériques sont convertis à l'aide des - - - - functions 'int', 'double' and so on. - fonctions 'int', 'double', etc. - - - - This is a list of the numbers from 0 to 99. - Liste des nombres de 0 à 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Liste de tous les tuples contenant tous les nombres de 0 à 99 et leur carré. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - La ligne suivante imprime une liste comprenant des tuples, en utilisant '%A' pour l'impression générique. - - - - This is a sample integer with a type annotation - Exemple d'entier avec une annotation de type. - - - - Values in F# are immutable by default. They cannot be changed - Les valeurs en F# sont immuables par défaut. Elles ne peuvent pas être changées - - - - in the course of a program's execution unless explicitly marked as mutable. - durant l'exécution d'un programme, sauf si elles sont explicitement marquées comme mutables. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Le fait de lier une valeur à un nom au moyen de 'let' la rend non modifiable. - - - - The second line of code fails to compile because 'number' is immutable and bound. - La compilation de la deuxième ligne de code échoue, car 'number' est non modifiable et lié. - - - - Re-defining 'number' to be a different value is not allowed in F#. - La redéfinition de 'number' en une valeur différente n'est pas autorisée dans F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Liaison mutable. Obligatoire pour muter la valeur de 'otherNumber'. - - - - When mutating a value, use '<-' to assign a new value. - En cas de mutation d'une valeur, utilisez '<-' pour assigner une nouvelle valeur. - - - - You could not use '=' here for this purpose since it is used for equality - Vous ne pouvez pas utiliser '=' ici à cet effet, car il est utilisé pour l'égalité - - - - or other contexts such as 'let' or 'module' - ou autres contextes tels que 'let' ou 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - La programmation F# consiste en grande partie à définir des fonctions qui transforment des données d'entrée pour produire des - - - - useful results. - résultats utiles. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Utilisez 'let' pour définir une fonction. Celle-ci accepte un argument entier et retourne un entier. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Les parenthèses sont facultatives pour les arguments de fonction, sauf quand vous utilisez une annotation de type explicite. - - - - Apply the function, naming the function return result using 'let'. - Appliquez la fonction, en nommant le résultat de retour de la fonction à l'aide de 'let'. - - - - The variable type is inferred from the function return type. - Le type de variable est déduit du type de retour de la fonction. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Cette ligne utilise '%d' pour imprimer le résultat comme entier. Cette opération est de type sécurisé. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Si 'result1' n'est pas de type 'int', la compilation de la ligne échoue. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Si nécessaire, annotez le type d'un nom de paramètre en utilisant '(argument:type)'. Les parenthèses sont obligatoires. - - - - Conditionals use if/then/elid/elif/else. - Les conditions utilisent if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Notez que F# utilise une syntaxe prenant en charge la mise en retrait à l'aide d'espaces, comme Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Cette ligne utilise '%f' pour imprimer le résultat comme float. Comme '%d' ci-dessus, cette opération est de type sécurisé. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Les booléens sont des types de données fondamentaux en F#. Voici quelques exemples illustrant des booléens et la logique conditionnelle. - - - - To learn more, see: - Pour en savoir plus, consultez : - - - - and - Et - - - - Booleans values are 'true' and 'false'. - Les valeurs booléennes sont 'true' et 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Les opérateurs sur les booléens sont 'not', '&&' et '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Cette ligne utilise '%b' pour imprimer une valeur booléenne. Cette opération est de type sécurisé. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Les chaînes sont des types de données fondamentaux en F#. Voici quelques exemples illustrant des chaînes et la manipulation de chaînes de base. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Les chaînes utilisent des guillemets doubles. - - - - Strings can also use @ to create a verbatim string literal. - Les chaînes peuvent également utiliser @ pour créer un littéral de chaîne textuelle. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Les caractères d'échappement tels que '\', '\n', '\t', etc. sont ainsi ignorés. - - - - String literals can also use triple-quotes. - Les littéraux de chaîne peuvent également utiliser des guillemets triples. - - - - String concatenation is normally done with the '+' operator. - L'opérateur '+' est généralement utilisé pour la concaténation de chaînes. - - - - This line uses '%s' to print a string value. This is type-safe. - Cette ligne utilise '%s' pour imprimer une valeur de chaîne. Cette opération est de type sécurisé. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Les sous-chaînes utilisent la notation de l'indexeur. Cette ligne extrait les 7 premiers caractères comme sous-chaîne. - - - - Note that like many languages, Strings are zero-indexed in F#. - Comme dans bien d'autres langages, les chaînes ont un index de base zéro en F#. - - - - Tuples are simple combinations of data values into a combined value. - Les tuples sont des combinaisons simples de valeurs de données formant une valeur combinée. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Tuple simple d'entiers. - - - - A function that swaps the order of two values in a tuple. - Fonction qui inverse l'ordre de deux valeurs d'un tuple. - - - - F# Type Inference will automatically generalize the function to have a generic type, - L'inférence de type F# généralise automatiquement la fonction pour qu'elle soit de type générique, - - - - meaning that it will work with any type. - ce qui signifie qu'elle peut fonctionner avec n'importe quel type. - - - - A tuple consisting of an integer, a string, - Tuple constitué d'un entier, d'une chaîne - - - - and a double-precision floating point number. - et d'un nombre à virgule flottante à double précision. - - - - A simple tuple of integers with a type annotation. - Tuple simple d'entiers avec une annotation de type. - - - - Type annotations for tuples use the * symbol to separate elements - Annotations de type pour les tuples qui utilisent le symbole * afin de séparer les éléments - - - - Tuples are normally objects, but they can also be represented as structs. - Les tuples sont généralement des objets, mais peuvent aussi être représentés sous forme de structs. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Ils interagissent entièrement avec les structs en C# et Visual Basic .NET ; cependant, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - les tuples de type struct ne sont pas implicitement convertibles avec des tuples d'objet (souvent appelés tuples de référence). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - La compilation de la deuxième ligne ci-dessous échoue à cause de cela. Supprimez les marques de commentaire pour voir ce qui se passe. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Bien que vous ne puissiez pas effectuer de conversion implicite entre les tuples de type struct et les tuples de type référence, - - - - you can explicitly convert via pattern matching, as demonstrated below. - vous pouvez effectuer une conversion explicite à l'aide de critères spéciaux, comme indiqué ci-dessous. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Les opérateurs de canal F# ('|>', '<|', etc.) et les opérateurs de composition F# ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - sont très utilisés de façon pour le traitement des données. Ces opérateurs sont eux-mêmes des fonctions - - - - which make use of Partial Application. - qui utilisent l'application partielle. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Pour en savoir plus sur ces opérateurs, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Pour en savoir plus sur l'application partielle, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Met une valeur au carré. - - - - Adds 1 to a value. - Ajoute 1 à une valeur. - - - - Tests if an integer value is odd via modulo. - Teste si une valeur entière est impaire à l'aide d'une opération modulo. - - - - A list of 5 numbers. More on lists later. - Liste de 5 nombres. Nous reviendrons sur les listes plus tard. - - - - Given a list of integers, it filters out the even numbers, - Pour une liste d'entiers donnée, élimine les nombres pairs par filtrage, - - - - squares the resulting odds, and adds 1 to the squared odds. - met au carré les nombres impairs résultants, puis ajoute 1 au carré des nombres impairs. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Pour écrire plus rapidement 'squareOddValuesAndAddOne', imbriquez chaque - - - - sub-result into the function calls themselves. - sous-résultat dans les appels de fonction. - - - - This makes the function much shorter, but it's difficult to see the - La fonction est ainsi considérablement raccourcie, mais il est difficile de voir - - - - order in which the data is processed. - l'ordre dans lequel les données sont traitées. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Pour écrire 'squareOddValuesAndAddOne', utilisez de préférence des opérateurs de canal F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Aucun résultat intermédiaire n'est créé, mais la syntaxe est beaucoup plus lisible - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - que d'imbriquer des appels de fonction comme 'squareOddValuesAndAddOneNested' - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Vous pouvez raccourcir 'squareOddValuesAndAddOnePipeline' en déplaçant le second appel 'List.map' - - - - into the first, using a Lambda Function. - dans le premier en utilisant une fonction lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Notez que les pipelines sont également utilisés dans la fonction lambda. Les opérateurs de canal F# - - - - can be used for single values as well. This makes them very powerful for processing data. - peuvent également être utilisés pour des valeurs uniques. Ils sont donc très efficaces dans le traitement des données. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Enfin, vous pouvez éliminer la nécessité d'accepter explicitement 'values' comme paramètre en utilisant '>>' - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - pour composer les deux opérations principales : élimination des nombres pairs par filtrage, puis mise au carré et ajout d'une unité. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - De même, la partie 'fun x -> ...' de l'expression lambda n'est pas nécessaire, car 'x' est simplement - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - défini dans cette portée pour pouvoir être passé à un pipeline fonctionnel. Vous pouvez donc utiliser '>>' - - - - there as well. - ici aussi. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Le résultat de 'squareOddValuesAndAddOneComposition' est une autre fonction qui accepte une - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - liste d'entiers comme entrée. Si vous exécutez 'squareOddValuesAndAddOneComposition' avec une liste - - - - of integers, you'll notice that it produces the same results as previous functions. - d'entiers, les résultats sont identiques à ceux des fonctions précédentes. - - - - This is using what is known as function composition. This is possible because functions in F# - C'est ce qui s'appelle la composition de fonctions. Cela vient du fait que les fonctions dans F# - - - - use Partial Application and the input and output types of each data processing operation match - utilisent l'application partielle et que les types d'entrée et de sortie de chaque opération de traitement de données correspondent - - - - the signatures of the functions we're using. - aux signatures des fonctions que nous utilisons. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Les listes sont ordonnées, non modifiables et liées individuellement. Elles font l'objet d'une évaluation stricte. - - - - This module shows various ways to generate lists and process lists with some functions - Ce module montre différentes façons de générer et de traiter des listes à l'aide de fonctions - - - - in the 'List' module in the F# Core Library. - du module 'List' de la bibliothèque principale F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Les listes sont définies à l'aide de [ ... ]. Il s'agit d'une liste vide. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Il s'agit d'une liste avec 3 éléments. ';' permet de séparer des éléments sur la même ligne. - - - - You can also separate elements by placing them on their own lines. - Vous pouvez également séparer des éléments en les plaçant chacun sur une ligne. - - - - This is a list of integers from 1 to 1000 - Il s'agit de la liste des entiers de 1 à 1 000 - - - - Lists can also be generated by computations. This is a list containing - Les listes peuvent également être générées par calculs. Il s'agit d'une liste contenant - - - - all the days of the year. - tous les jours de l'année. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Imprimez les 5 premiers éléments de 'daysList' en utilisant 'List.take'. - - - - Computations can include conditionals. This is a list containing the tuples - Les calculs peuvent inclure des conditions. Il s'agit d'une liste contenant les tuples - - - - which are the coordinates of the black squares on a chess board. - qui sont les coordonnées des cases noires d'un échiquier. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Les listes peuvent être transformées à l'aide de 'List.map' et d'autres combinateurs de programmation fonctionnelle. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Cette définition produit une nouvelle liste en mettant au carré les nombres de numberList à l'aide de - - - - operator to pass an argument to List.map. - l'opérateur du pipeline pour passer un argument à List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Il existe de nombreuses autres combinaisons de listes. La combinaison suivante calcule la somme des carrés des - - - - numbers divisible by 3. - nombres divisibles par 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Les tableaux sont des collections de taille fixe et mutables d'éléments du même type. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Bien qu'ils soient semblables aux listes (prise en charge de l'énumération et combinateurs similaires pour le traitement des données), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - ils offrent généralement une vitesse accrue et prennent en charge l'accès aléatoire rapide. Ils sont toutefois moins sécurisés du fait de leur mutabilité. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Tableau vide. Notez que la syntaxe est semblable à celle des listes, mais '[| ... |]' est utilisé à la place. - - - - Arrays are specified using the same range of constructs as lists. - Les tableaux sont spécifiés à l'aide de la même plage de constructions que les listes. - - - - This is an array of numbers from 1 to 1000. - Il s'agit d'un tableau de nombres de 1 à 1 000. - - - - This is an array containing only the words "hello" and "world". - Il s'agit d'un tableau contenant uniquement les mots "hello" et "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Il s'agit d'un tableau lancé par index, qui contient les nombres pairs de 0 à 2 000. - - - - Sub-arrays are extracted using slicing notation. - Les sous-tableaux sont extraits à l'aide de la notation de découpage. - - - - You can loop over arrays and lists using 'for' loops. - Vous pouvez effectuer une boucle sur des tableaux et des listes à l'aide de boucles 'for'. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Vous pouvez modifier le contenu d'un élément de tableau à l'aide de l'opérateur d'assignation flèche gauche. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Pour en savoir plus sur cet opérateur, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Vous pouvez transformer des tableaux à l'aide de 'Array.map' et d'autres opérations de programmation fonctionnelle. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - L'opération suivante calcule la somme des longueurs des mots qui commencent par 'h'. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Les séquences sont des séries logiques d'éléments du même type. Elles sont plus générales que les listes et les tableaux. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Les séquences sont évaluées sur demande et sont réévaluées à chacune de leur itération. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Une séquence F# est un alias pour un System.Collections.Generic.IEnumerable .NET<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Les fonctions de traitement de séquence peuvent être appliquées aux listes et aux tableaux également. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Il s'agit de la séquence vide. - - - - This a sequence of values. - Il s'agit d'une séquence de valeurs. - - - - This is an on-demand sequence from 1 to 1000. - Séquence à la demande de 1 à 1000. - - - - This is a sequence producing the words "hello" and "world" - Il s'agit d'une séquence produisant les mots "hello" et "world" - - - - This sequence producing the even numbers up to 2000. - Cette séquence produit les nombres pairs jusqu'à 2 000. - - - - This is an infinite sequence which is a random walk. - Il s'agit d'une séquence infinie correspondant à une marche aléatoire. - - - - This example uses yield! to return each element of a subsequence. - Cet exemple utilise yield! pour retourner chaque élément d'une sous-séquence. - - - - This example shows the first 100 elements of the random walk. - Cet exemple montre les 100 premiers éléments de la marche aléatoire. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Les fonctions récursives peuvent s'appeler elles-mêmes. En F#, les fonctions sont uniquement récursives - - - - when declared using 'let rec'. - en cas de déclaration avec 'let rec'. - - - - Recursion is the preferred way to process sequences or collections in F#. - Il est recommandé d'utiliser la récursivité pour traiter des séquences ou des collections en F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Cet exemple montre une fonction récursive qui calcule la factorielle d'un - - - - integer. It uses 'let rec' to define a recursive function. - entier. Il utilise 'let rec' pour définir une fonction récursive. - - - - Computes the greatest common factor of two integers. - Calcule le plus grand commun diviseur de deux entiers. - - - - Since all of the recursive calls are tail calls, - Comme tous les appels récursifs sont des appels terminaux, - - - - the compiler will turn the function into a loop, - le compilateur transforme la fonction en boucle, - - - - which improves performance and reduces memory consumption. - ce qui améliore le niveau de performance et réduit la consommation de mémoire. - - - - This example computes the sum of a list of integers using recursion. - Cet exemple calcule la somme d'une liste d'entiers à l'aide de la récursivité. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 'sumList' est converti en fonction à récursivité terminale, en utilisant une fonction d'assistance avec accumulateur de résultats. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - La fonction d'assistance de récursivité terminale est appelée et fournit '0' comme accumulateur de valeurs initiales. - - - - An approach like this is common in F#. - Une telle approche est courante en F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Les enregistrements sont des agrégats de valeurs nommées, avec des membres facultatifs (comme des méthodes). - - - - They are immutable and have structural equality semantics. - Ils ne sont pas modifiables et ont une sémantique d'égalité structurelle. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Cet exemple montre comment définir un nouveau type d'enregistrement. - - - - This example shows how to instantiate a record type. - Cet exemple montre comment instancier un type d'enregistrement. - - - - You can also do this on the same line with ';' separators. - Vous pouvez également effectuer cette opération sur la même ligne avec des séparateurs ';'. - - - - This example shows how to use "copy-and-update" on record values. It creates - Cet exemple montre comment utiliser "copy-and-update" sur des valeurs d'enregistrement. Il crée - - - - a new record value that is a copy of contact1, but has different values for - une nouvelle valeur d'enregistrement qui est une copie de contact1, mais qui a différentes valeurs pour - - - - the 'Phone' and 'Verified' fields. - les champs 'Phone' et 'Verified'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Cet exemple montre comment écrire une fonction qui traite une valeur d'enregistrement. - - - - It converts a 'ContactCard' object to a string. - Il convertit un objet 'ContactCard' en chaîne. - - - - This is an example of a Record with a member. - Il s'agit d'un exemple d'enregistrement avec un membre. - - - - Members can implement object-oriented members. - Les membres peuvent implémenter des membres orientés objet. - - - - Members are accessed via the '.' operator on an instantiated type. - Les membres sont accessibles au moyen de l'opérateur '.' sur un type instancié. - - - - Records can also be represented as structs via the 'Struct' attribute. - Les enregistrements peuvent également être représentés sous forme de structs par le biais de l'attribut 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Cela peut s'avérer utile dans les situations où le niveau de performance des structs l'emporte - - - - the flexibility of reference types. - sur la flexibilité des types de référence. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Les unions discriminées sont des valeurs qui peuvent correspondre à un certain nombre de formulaires ou de cas nommés. - - - - Data stored in DUs can be one of several distinct values. - Les données stockées dans les unions discriminées peuvent prendre une valeur parmi plusieurs valeurs distinctes. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Ce qui suit représente la couleur d'une carte à jouer. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Une union discriminée peut également servir à représenter le rang d'une carte à jouer. - - - - Represents the rank of cards 2 .. 10 - Représente le rang des cartes 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Les unions discriminées peuvent également implémenter des membres orientés objet. - - - - This is a record type that combines a Suit and a Rank. - Il s'agit d'un type d'enregistrement qui combine une couleur et un rang. - - - - It's common to use both Records and Disciminated Unions when representing data. - Il est fréquent d'utiliser à la fois des enregistrements et des unions discriminées pour représenter des données. - - - - This computes a list representing all the cards in the deck. - Ceci calcule une liste représentant toutes les cartes du paquet. - - - - This example converts a 'Card' object to a string. - Cet exemple convertit un objet 'Card' en chaîne. - - - - This example prints all the cards in a playing deck. - Cet exemple imprime toutes les cartes d'un jeu de cartes. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Les unions discriminées à cas unique sont souvent utilisées pour la modélisation de domaines. Il peut en résulter une meilleure cohérence des types - - - - over primitive types such as strings and ints. - sur des types primitifs tels que les chaînes et les entiers. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Les unions discriminées à cas unique ne peuvent pas être converties implicitement vers ou à partir du type qu'elles incluent dans un wrapper. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Par exemple, une fonction qui accepte une adresse ne peut pas accepter une chaîne comme entrée - - - - or vive/versa. - ou vice versa. - - - - You can easily instantiate a single-case DU as follows. - Vous pouvez facilement instancier une union discriminée à cas unique comme suit. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Quand vous avez besoin de la valeur, vous pouvez exclure la valeur sous-jacente du wrapper à l'aide d'une fonction simple. - - - - Printing single-case DUs is simple with unwrapping functions. - Les fonctions d'exclusion d'un wrapper facilitent l'impression d'unions discriminées à cas unique. - - - - Disciminated Unions also support recursive definitions. - Les unions discriminées prennent également en charge les définitions récursives. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Ceci représente un arbre de recherche binaire, l'un des cas étant l'arbre vide - - - - and the other being a Node with a value and two subtrees. - et l'autre étant un nœud avec une valeur et deux sous-arbres. - - - - Check if an item exists in the binary search tree. - Vérifiez si un élément existe dans l'arbre de recherche binaire. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Effectue une recherche récursive à l'aide de critères spéciaux. Retourne true si l'élément existe ; sinon, false. - - - - Check the left subtree. - Vérifiez le sous-arbre gauche. - - - - Check the right subtree. - Vérifiez le sous-arbre droit. - - - - Inserts an item in the Binary Search Tree. - Insère un élément dans l'arbre de recherche binaire. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Recherche l'emplacement de l'insertion récursive à l'aide de critères spéciaux, puis insère un nouveau nœud. - - - - If the item is already present, it does not insert anything. - Si l'élément est déjà présent, rien n'est inséré. - - - - No need to insert, it already exists; return the node. - Insertion inutile, car l'élément existe déjà ; retournez le nœud. - - - - Call into left subtree. - Appelez le sous-arbre gauche. - - - - Call into right subtree. - Appelez le sous-arbre droit. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Les unions discriminées peuvent également être représentées sous forme de structs au moyen de l'attribut 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Cela peut s'avérer utile dans les situations où le niveau de performance des structs l'emporte - - - - the flexibility of reference types. - sur la flexibilité des types de référence. - - - - However, there are two important things to know when doing this: - Cependant, retenez les deux points suivants si vous procédez de la sorte : - - - - 1. A struct DU cannot be recursively-defined. - 1. Une union discriminée struct ne peut pas être définie de manière récursive. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Une union discriminée struct doit avoir des noms uniques pour chacun de ses cas. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Les critères spéciaux sont une fonctionnalité de F# qui vous permet d'utiliser des modèles - - - - which are a way to compare data with a logical structure or structures, - pour comparer des données avec une ou plusieurs structures logiques, - - - - decompose data into constituent parts, or extract information from data in various ways. - décomposer des données en parties constitutives ou extraire des informations à partir de données de plusieurs façons. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Vous pouvez ensuite effectuer une répartition selon la "forme" d'un modèle à l'aide de critères spéciaux. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Enregistrement contenant le nom et le prénom d'une personne - - - - A Discriminated Union of 3 different kinds of employees - Union discriminée de 3 genres d'employés différents - - - - Count everyone underneath the employee in the management hierarchy, - Comptez tout le monde sous l'employé dans la hiérarchie de gestion - - - - including the employee. - (employé inclus). - - - - Find all managers/executives named "Dave" who do not have any reports. - Recherchez tous les responsables ou cadres dont le prénom est "Dave" et qui ne disposent d'aucun rapport. - - - - This uses the 'function' shorthand to as a lambda expression. - Le raccourci 'function' est utilisé comme expression lambda. - - - - [] matches an empty list. - [] correspond à une liste vide. - - - - '_' is a wildcard pattern that matches anything. - '_' est un modèle générique qui correspond à n'importe quel élément. - - - - This handles the "or else" case. - Ceci permet de gérer le cas "or else". - - - - You can also use the shorthand function construct for pattern matching, - Vous pouvez également utiliser la construction de fonction raccourcie pour les critères spéciaux, - - - - which is useful when you're writing functions which make use of Partial Application. - ce qui peut s'avérer utile quand vous écrivez des fonctions qui utilisent l'application partielle. - - - - Define some more functions which parse with the helper function. - Définissez d'autres fonctions d'analyse avec la fonction d'assistance. - - - - Active Patterns are another powerful construct to use with pattern matching. - Les modèles actifs sont une autre construction efficace à utiliser avec les critères spéciaux. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Ils permettent de partitionner des données d'entrée dans des formulaires personnalisés, en les décomposant au niveau du site d'appel de correspondance au modèle. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Les critères spéciaux avec le mot clé 'function' et les modèles actifs ressemblent souvent à ceci. - - - - Call the printer with some different values to parse. - Appelez l'imprimante avec des valeurs différentes à analyser. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Les valeurs d'option sont tout type de valeur marquée avec 'Some' ou 'None'. - - - - They are used extensively in F# code to represent the cases where many other - Elles sont très utilisées dans le code F# pour représenter les cas où de nombreux autres - - - - languages would use null references. - langages utilisent des références null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Commencez par définir un code postal au moyen d'une union discriminée à cas unique. - - - - Next, define a type where the ZipCode is optional. - Définissez ensuite un type où ZipCode est facultatif. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Ensuite, définissez un type d'interface qui représente un objet pour calculer la zone d'expédition correspondant au code postal du client, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - en fonction des implémentations des méthodes abstraites 'getState' et 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Ensuite, calculez une zone d'expédition pour un client à l'aide d'une instance de calculatrice. - - - - This uses combinators in the Option module to allow a functional pipeline for - Des combinateurs du module Option sont utilisés pour permettre à un pipeline fonctionnel de - - - - transforming data with Optionals. - transformer les données avec Optionals. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Les unités de mesure sont un moyen d'annoter les types numériques primitifs de manière sécurisée pour les types. - - - - You can then perform type-safe arithmetic on these values. - Vous pouvez ensuite effectuer des opérations arithmétiques de type sécurisé sur ces valeurs. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Pour commencer, ouvrez une collection de noms d'unité courants - - - - Define a unitized constant - Définissez une constante unifiée - - - - Next, define a new unit type - Ensuite, définissez un nouveau type d'unité - - - - Conversion factor mile to meter. - Facteur de conversion mile en mètre. - - - - Define a unitized constant - Définissez une constante unifiée - - - - Compute metric-system constant - Calculez la constante de système métrique - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Les valeurs avec des unités de mesure s'utilisent de la même façon que le type numérique primitif dans des opérations comme l'impression. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Les classes sont un moyen de définir de nouveaux types d'objet en F#. Elles prennent en charge les constructions orientées objet standard. - - - - They can have a variety of members (methods, properties, events, etc.) - Elles peuvent avoir différents membres (méthodes, propriétés, événements, etc.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Pour en savoir plus sur les classes, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Pour en savoir plus sur les membres, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Classe Vector à deux dimensions simple. - - - - The class's constructor is on the first line, - Le constructeur de la classe est sur la première ligne - - - - and takes two arguments: dx and dy, both of type 'double'. - et accepte deux arguments : dx et dy (tous deux de type 'double'). - - - - This internal field stores the length of the vector, computed when the - Ce champ interne stocke la longueur du vecteur, calculée quand - - - - object is constructed - l'objet est construit - - - - 'this' specifies a name for the object's self identifier. - 'this' spécifie un nom pour l'auto-identificateur de l'objet. - - - - In instance methods, it must appear before the member name. - Dans les méthodes d'instance, il doit apparaître avant le nom du membre. - - - - This member is a method. The previous members were properties. - Ce membre est une méthode. Les membres précédents étaient des propriétés. - - - - This is how you instantiate the Vector2D class. - Voici comment instancier la classe Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Obtenez un nouvel objet vector mis à l'échelle, sans modifier l'objet d'origine. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Les classes génériques autorisent la définition des types par rapport à un jeu de paramètres de type. - - - - In the following, 'T is the type parameter for the class. - Dans ce qui suit, 'T est le paramètre de type pour la classe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Ce champ interne stocke les états dans une liste. - - - - Add a new element to the list of states. - Ajoutez un nouvel élément à la liste d'états. - - - - use the '<-' operator to mutate the value. - utilisez l'opérateur '<-' pour muter la valeur. - - - - Get the entire list of historical states. - Obtenez la liste complète des états historiques. - - - - Get the latest state. - Obtenez le dernier état. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Instance 'int' de la classe de suivi des états. Notez que le paramètre de type est déduit. - - - - Add a state - Ajouter un état - - - - Interfaces are object types with only 'abstract' members. - Les interfaces sont des types d'objet avec des membres 'abstract' uniquement. - - - - Object types and object expressions can implement interfaces. - Les types et expressions d'objet peuvent implémenter des interfaces. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Type qui implémente IDisposable. - - - - This is the implementation of IDisposable members. - Implémentation de membres IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Objet qui implémente IDisposable à l'aide d'une expression d'objet - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Contrairement à d'autres langages tels que C# ou Java, une nouvelle définition de type n'est pas nécessaire - - - - to implement an interface. - pour implémenter une interface. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - La bibliothèque FSharp.Core définit une plage de fonctions de traitement parallèle. Ici - - - - you use some functions for parallel processing over arrays. - vous utilisez des fonctions pour le traitement parallèle des tableaux. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Pour en savoir plus, consultez : https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Tout d'abord, un tableau d'entrées. - - - - Next, define a functions that does some CPU intensive computation. - Ensuite, définissez une fonction qui effectue un calcul nécessitant une utilisation intensive du processeur. - - - - Next, do a parallel map over a large input array. - Ensuite, effectuez un mappage parallèle sur un grand tableau d'entrée. - - - - Next, print the results. - Ensuite, imprimez les résultats. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Les événements sont un idiome courant de la programmation .NET, en particulier avec les applications WinForms ou WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Pour commencer, créez une instance d'objet Event qui se compose d'un point d'abonnement (event.Publish) et d'un déclencheur d'événements (event.Trigger). - - - - Next, add handler to the event. - Ensuite, ajoutez un gestionnaire à l'événement. - - - - Next, trigger the event. - Ensuite, déclenchez l'événement. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Ensuite, créez une instance d'événement qui respecte la convention .NET standard : (sender, EventArgs). - - - - Next, add a handler for this new event. - Ensuite, ajoutez un gestionnaire à ce nouvel événement. - - - - Next, trigger this event (note that sender argument should be set). - Ensuite, déclenchez cet événement (notez que l'argument sender doit être défini). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf deleted file mode 100644 index ecd508e58b..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Questo esempio consente all'utente di familiarizzare con gli elementi del linguaggio F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Per eseguire il codice in F# Interactive, evidenziare una sezione di codice e premere ALT-INVIO oppure fare clic con il pulsante destro del mouse - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - e selezionare "Esegui in Interactive". È possibile aprire la finestra di F# Interactive dal menu "Visualizza". - - - - For more about F#, see: - Per altre informazioni su F#, vedere: - - - - To see this tutorial in documentation form, see: - Per visualizzare questa esercitazione sotto forma di documentazione, vedere: - - - - To learn more about applied F# programming, use - Per altre informazioni sulla programmazione F# applicata, usare - - - - To install the Visual F# Power Tools, use - Per installare Visual F# Power Tools, usare - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Strumenti' --> 'Estensioni e aggiornamenti' --> `Online` e cercare - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Per altri modelli da usare con F#, vedere 'Modelli online' in Visual Studio, - - - - 'New Project' --> 'Online Templates' - 'Nuovo progetto' --> 'Modelli online' - - - - F# supports three kinds of comments: - In F# sono supportati tre tipi di commenti: - - - - 1. Double-slash comments. These are used in most situations. - 1. Commenti introdotti da una doppia barra. Vengono usati nella maggior parte delle situazioni. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Commenti per il blocco in stile ML. Non vengono usati molto spesso. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Commenti introdotti da una tripla barra. Vengono usati per la documentazione di funzioni, tipi e così via. - - - - They will appear as text when you hover over something which is decorated with these comments. - Verranno visualizzati come testo quando si passa con il puntatore su un elemento decorato con questi commenti. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Supportano anche commenti XML in stile .NET, che consentono di generare documentazione di riferimento. - - - - and they also allow editors (such as Visual Studio) to extract information from them. - Consentono anche agli editor, come Visual Studio, di estrarre informazioni. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Aprire gli spazi dei nomi con la parola chiave 'open'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Un modulo è un raggruppamento di codice F#, ad esempio valori, tipi e valori di funzione. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Il raggruppamento del codice nei moduli consente di riunire il codice correlato e contribuisce a evitare conflitti di nome nel programma. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Questo è un valore integer di esempio. - - - - This is a sample floating point number. - Questo è un numero a virgola mobile di esempio. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Questo ha calcolato un nuovo numero in base a una certa aritmetica. I tipi numerici vengono convertiti con - - - - functions 'int', 'double' and so on. - funzioni 'int', 'double' e così via. - - - - This is a list of the numbers from 0 to 99. - Questo è un elenco di numeri compresi tra 0 e 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Questo è un elenco di tutte le tuple che contengono tutti i numeri compresi tra 0 e 99 e i relativi quadrati. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - La riga successiva stampa un elenco che include le tuple, usando '%A' per la stampa generica. - - - - This is a sample integer with a type annotation - Questo è un intero di esempio con un'annotazione di tipo - - - - Values in F# are immutable by default. They cannot be changed - Per impostazione predefinita, i valori in F# non sono modificabili e non è possibile cambiarli - - - - in the course of a program's execution unless explicitly marked as mutable. - durante l'esecuzione di un programma a meno che non siano contrassegnati esplicitamente come modificabili. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Il binding di un valore in un nome tramite 'let' lo rende non modificabile. - - - - The second line of code fails to compile because 'number' is immutable and bound. - La seconda riga di codice non viene compilata perché 'number' non è modificabile e ne è stato eseguito il binding. - - - - Re-defining 'number' to be a different value is not allowed in F#. - La ridefinizione di 'number' in un valore diverso non è consentita in F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Binding modificabile. È necessario per poter modificare il valore di 'otherNumber'. - - - - When mutating a value, use '<-' to assign a new value. - Durante la modifica di un valore, usare '<-' per assegnare un nuovo valore. - - - - You could not use '=' here for this purpose since it is used for equality - Non è possibile usare '=' in questo punto per questa finalità perché viene usato per l'uguaglianza - - - - or other contexts such as 'let' or 'module' - o altri contesti come 'let' o 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - Buona parte della programmazione F# consiste nella definizione di funzioni che trasformano i dati di input per produrre - - - - useful results. - risultati utili. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Usare 'let' per definire una funzione. Questa accetta un argomento Integer e restituisce un intero. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Le parentesi sono facoltative per gli argomenti di funzione, ad eccezione dei casi in cui si usa un'annotazione di tipo esplicita. - - - - Apply the function, naming the function return result using 'let'. - Applicare la funzione, denominando il risultato restituito della funzione tramite 'let'. - - - - The variable type is inferred from the function return type. - Il tipo variabile viene dedotto dal tipo restituito della funzione. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Questa riga usa '%d' per stampare il risultato in formato Integer. È indipendente dai tipi. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Se il tipo di 'result1' non fosse 'int', la riga non verrebbe compilata. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Quando necessario, annotare il tipo di un nome di parametro usando '(argument:type)'. Le parentesi sono obbligatorie. - - - - Conditionals use if/then/elid/elif/else. - Nelle istruzioni condizionali si usano if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Si noti che F# usa la sintassi con riconoscimento degli spazi vuoti di rientro, in modo analogo a linguaggi come Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Questa riga usa '%f' per stampare il risultato in formato float. Come con '%d' in precedenza, è indipendente dai tipi. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - I valori booleani sono tipi di dati fondamentali in F#. Ecco alcuni esempi di valori booleani e logica condizionale. - - - - To learn more, see: - Per altre informazioni, vedere: - - - - and - e - - - - Booleans values are 'true' and 'false'. - I valori booleani sono 'true' e 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Gli operatori su valori booleani sono 'not', '&&' e '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Questa riga usa '%b' per stampare un valore booleano. È indipendente dai tipi. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Le stringhe sono tipi di dati fondamentali in F#. Ecco alcuni esempi di stringhe e di manipolazione di base delle stringhe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Per le stringhe si usano le virgolette doppie. - - - - Strings can also use @ to create a verbatim string literal. - Nelle stringhe si può anche usare @ per creare un valore letterale di stringa verbatim. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - In questo modo i caratteri di escape, come '\', '\n', '\t' e così via, verranno ignorati. - - - - String literals can also use triple-quotes. - Nei valori letterali si possono usare anche virgolette triple. - - - - String concatenation is normally done with the '+' operator. - Per la concatenazione di stringhe viene in genere usato l'operatore '+'. - - - - This line uses '%s' to print a string value. This is type-safe. - Questa riga usa '%s' per stampare un valore stringa. È indipendente dai tipi. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Nelle sottostringhe si usa la notazione dell'indicizzatore. Questa riga estrae i primi sette caratteri come sottostringa. - - - - Note that like many languages, Strings are zero-indexed in F#. - Si noti che, analogamente a molti linguaggi, le stringhe presentano indice zero in F#. - - - - Tuples are simple combinations of data values into a combined value. - Le tuple sono semplici combinazioni di valori dati in un valore combinato. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Tupla di interi semplice. - - - - A function that swaps the order of two values in a tuple. - Funzione che scambia l'ordine di due valori in una tupla. - - - - F# Type Inference will automatically generalize the function to have a generic type, - L'inferenza del tipo di F# consentirà di generalizzare automaticamente la funzione in modo che il relativo tipo sia generico, - - - - meaning that it will work with any type. - per indicare che funzionerà con qualsiasi tipo. - - - - A tuple consisting of an integer, a string, - Tupla costituita da un intero, una stringa - - - - and a double-precision floating point number. - e un numero a virgola mobile a precisione doppia. - - - - A simple tuple of integers with a type annotation. - Tupla di interi semplice con annotazione di tipo. - - - - Type annotations for tuples use the * symbol to separate elements - Nelle annotazioni di tipo per le tuple si usa il simbolo * per separare gli elementi - - - - Tuples are normally objects, but they can also be represented as structs. - Le tuple sono in genere oggetti, ma possono essere rappresentate anche come struct. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Questi interagiscono completamente con gli struct in C# e Visual Basic.NET; tuttavia, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - le tuple di struct non sono convertibili in modo implicito con tuple di oggetto (spesso chiamate tuple di riferimento). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - A causa di questo problema la seconda riga sotto non verrà compilata. Rimuovere il commento per vedere cosa succede. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Anche se non è possibile eseguire la conversione in modo implicito tra tuple della struttura e tuple di riferimento, - - - - you can explicitly convert via pattern matching, as demonstrated below. - è possibile eseguire la conversione in modo esplicito tramite i criteri di ricerca, come illustrato di seguito. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Gli operatori pipe di F# ('|>', '<|' e così via) e gli operatori di composizione di F# ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - sono particolarmente usati durante l'elaborazione dati. Questi operatori sono di per sé funzioni - - - - which make use of Partial Application. - che usano l'applicazione parziale. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Per altre informazioni su questi operatori, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Per altre informazioni sull'applicazione parziale, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Calcola il quadrato di un valore. - - - - Adds 1 to a value. - Aggiunge 1 a un valore. - - - - Tests if an integer value is odd via modulo. - Testa se un valore intero è dispari tramite modulo. - - - - A list of 5 numbers. More on lists later. - Elenco di cinque numeri. Per altre informazioni sugli elenchi, vedere più avanti. - - - - Given a list of integers, it filters out the even numbers, - Dato un elenco di interi, filtra i numeri pari, - - - - squares the resulting odds, and adds 1 to the squared odds. - calcola i quadrati dei numeri dispari risultati e aggiunge 1 ai numeri dispari quadrati. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Uno dei modi più brevi per scrivere 'squareOddValuesAndAddOne' consiste nell'annidare ogni - - - - sub-result into the function calls themselves. - risultato secondario nelle chiamate di funzione stesse. - - - - This makes the function much shorter, but it's difficult to see the - In questo modo la funzione è molto più breve, ma risulta più difficile visualizzare - - - - order in which the data is processed. - l'ordine in cui vengono elaborati i dati. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Uno dei modi preferiti per scrivere 'squareOddValuesAndAddOne' consiste nell'usare gli operatori pipe di F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - In tal modo sarà possibile evitare risultati intermedi, ma si migliora la leggibilità - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - rispetto all'annidamento di chiamate di funzione come 'squareOddValuesAndAddOneNested' - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - È possibile abbreviare 'squareOddValuesAndAddOnePipeline' spostando la seconda chiamata a `List.map` - - - - into the first, using a Lambda Function. - nella prima usando una funzione lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Si noti che le pipeline vengono usate anche all'interno della funzione lambda. Gli operatori pipe di F# - - - - can be used for single values as well. This makes them very powerful for processing data. - possono essere usati anche per singoli valori, di conseguenza sono particolarmente efficaci per l'elaborazione dei dati. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - È infine possibile evitare di accettare in modo esplicito 'values' come parametro usando '>>' - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - per comporre le due operazioni di base, ovvero filtrare i numeri pari, calcolare il quadrato e aggiungere 1. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Analogamente, anche la parte 'fun x -> ...' dell'espressione lambda non è necessaria perché 'x' viene semplicemente - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - definito in tale ambito in modo che sia possibile passarlo a una pipeline funzionale. In questo punto è quindi possibile - - - - there as well. - usare anche '>>'. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Il risultato di 'squareOddValuesAndAddOneComposition' è di per sé un'altra funzione che accetta come input un - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - elenco di interi. Se si esegue 'squareOddValuesAndAddOneComposition' con un elenco - - - - of integers, you'll notice that it produces the same results as previous functions. - di interi, si noterà che consente di ottenere gli stessi risultati delle funzioni precedenti. - - - - This is using what is known as function composition. This is possible because functions in F# - Usa la cosiddetta composizione di funzione. Tale operazione è possibile perché in F# le funzioni - - - - use Partial Application and the input and output types of each data processing operation match - usano l'applicazione parziale e i tipi di input e output di ogni operazione di elaborazione dati corrispondono - - - - the signatures of the functions we're using. - alle firme delle funzioni usate. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Gli elenchi sono elenchi a un solo collegamento ordinati e non modificabili la cui valutazione è di tipo eager. - - - - This module shows various ways to generate lists and process lists with some functions - Questo modulo mostra diversi modi per generare elenchi ed elenchi i processi con alcune funzioni - - - - in the 'List' module in the F# Core Library. - nel modulo 'List' della libreria di base di F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Per definire gli elenchi si usa [ ... ]. Questo è un elenco vuoto. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Questo è un elenco con tre elementi. Per delimitare gli elementi sulla stessa riga, viene usato il punto e virgola (';'). - - - - You can also separate elements by placing them on their own lines. - È anche possibile delimitare gli elementi posizionandoli su righe distinte. - - - - This is a list of integers from 1 to 1000 - Questo è un elenco di numeri interi tra 1 e 1000 - - - - Lists can also be generated by computations. This is a list containing - Gli elenchi possono anche essere generati da calcoli. Questo è un elenco contenente - - - - all the days of the year. - tutti i giorni dell'anno. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Stampa i primi cinque elementi di 'daysList' usando 'List.take'. - - - - Computations can include conditionals. This is a list containing the tuples - I calcoli possono contenere istruzioni condizionali. Questo è un elenco contenente le tuple - - - - which are the coordinates of the black squares on a chess board. - che rappresentano le coordinate dei quadrati neri su una scacchiera. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Per trasformare gli elenchi, è possibile usare 'List.map' e altri combinatori di programmazione funzionale. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Questa definizione consente di produrre un nuovo elenco mediante la quadratura dei numeri in numberList, usando l'operatore pipeline - - - - operator to pass an argument to List.map. - per passare un argomento a List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Esistono molte altre combinazioni di elenco. L'istruzione seguente calcola la somma dei quadrati dei - - - - numbers divisible by 3. - numeri divisibili per 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Le matrici sono raccolte modificabili di dimensioni fisse di elementi dello stesso tipo. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Anche se sono simili agli elenchi (supportano l'enumerazione e contengono combinatori simili per l'elaborazione dati), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - sono in genere più veloci e supportano l'accesso casuale rapido. La maggiore velocità implica però una minore sicurezza perché questi elementi sono modificabili. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Questa è la matrice vuota. Si noti che la sintassi è simile a quella degli elenchi, ma viene usato `[| ... |]`. - - - - Arrays are specified using the same range of constructs as lists. - Per specificare le matrici viene usato lo stesso intervallo di costrutti degli elenchi. - - - - This is an array of numbers from 1 to 1000. - Questo è una matrice di numeri compresi tra 1 e 1000. - - - - This is an array containing only the words "hello" and "world". - Questa è una matrice contenente solo le parole "hello" e "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Questa è una matrice inizializzata dall'indice e contenente i numeri pari compresi tra 0 e 2000. - - - - Sub-arrays are extracted using slicing notation. - Le sottomatrici vengono estratte mediante una notazione di sezionamento. - - - - You can loop over arrays and lists using 'for' loops. - Per eseguire il ciclo su matrici ed elenchi, si possono usare i cicli 'for'. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - È possibile modificare il contenuto di un elemento di matrice usando l'operatore di assegnazione freccia sinistra. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Per altre informazioni su questo operatore, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Per trasformare le matrici, è possibile usare 'Array.map' e altre operazioni di programmazione funzionale. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Il codice seguente consente di calcolare la somma delle lunghezze delle parole che iniziano con 'h'. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Le sequenze sono costituite da una serie logica di elementi, tutti dello stesso tipo. Sono di un tipo più generale rispetto ad elenchi e matrici. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Le sequenze vengono valutate su richiesta e rivalutate ogni volta che vengono iterate. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Una sequenza F# è un alias dell'elemento System.Collections.Generic.IEnumerable<'T> di .NET. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Le funzioni di elaborazione della sequenza possono essere applicate anche a elenchi e matrici. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Questa è la sequenza vuota. - - - - This a sequence of values. - Questa è una sequenza di valori. - - - - This is an on-demand sequence from 1 to 1000. - Questa è una sequenza su richiesta compresa tra 1 e 1000. - - - - This is a sequence producing the words "hello" and "world" - Questa è una sequenza che produce le parole "hello" e "world" - - - - This sequence producing the even numbers up to 2000. - Questa è la sequenza che produce i numeri pari fino a 2000. - - - - This is an infinite sequence which is a random walk. - Questa è una sequenza infinita, ovvero un percorso casuale. - - - - This example uses yield! to return each element of a subsequence. - In questo esempio si usa yield! per restituire ogni elemento di una sottosequenza. - - - - This example shows the first 100 elements of the random walk. - Questo esempio mostra i primi 100 elementi del percorso casuale. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Le funzioni ricorsive possono chiamarsi da sole. In F# le funzioni sono ricorsive solo - - - - when declared using 'let rec'. - quando per la dichiarazione si usa 'let rec'. - - - - Recursion is the preferred way to process sequences or collections in F#. - La ricorsione è il modo preferito per elaborare sequenze o raccolte in F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Questo esempio mostra una funzione ricorsiva che calcola il fattoriale di un - - - - integer. It uses 'let rec' to define a recursive function. - numero intero. Usa 'let rec' per definire una funzione ricorsiva. - - - - Computes the greatest common factor of two integers. - Calcola il fattore comune maggiore di due interi. - - - - Since all of the recursive calls are tail calls, - Dal momento che tutte le chiamate ricorsive sono chiamate tail, - - - - the compiler will turn the function into a loop, - il compilatore convertirà la funzione in un ciclo, - - - - which improves performance and reduces memory consumption. - in modo da migliorare le prestazioni e ridurre il consumo di memoria. - - - - This example computes the sum of a list of integers using recursion. - Questo esempio consente di calcolare la somma di un elenco di interi usando la ricorsione. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - In questo modo la funzione tail 'sumList' viene resa ricorsiva, usando una funzione helper con un accumulatore di risultati. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Viene chiamata la funzione helper tail ricorsiva, fornendo '0' come accumulatore di seeding. - - - - An approach like this is common in F#. - Un approccio di questo tipo è comune in F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - I record sono un aggregato di valori denominati, con membri facoltativi, ad esempio metodi. - - - - They are immutable and have structural equality semantics. - Non sono modificabili e includono la semantica di uguaglianza strutturale. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Questo esempio mostra come definire un nuovo tipo di record. - - - - This example shows how to instantiate a record type. - Questo esempio mostra come creare un'istanza di un tipo di record. - - - - You can also do this on the same line with ';' separators. - È possibile eseguire questa operazione sulla stessa riga usando i separatori ';'. - - - - This example shows how to use "copy-and-update" on record values. It creates - Questo esempio mostra come usare il metodo di copia e aggiornamento su valori di record. Crea - - - - a new record value that is a copy of contact1, but has different values for - un nuovo valore di record che è una copia di contact1, ma contiene valori diversi per - - - - the 'Phone' and 'Verified' fields. - i campi 'Phone' e 'Verified'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Questo esempio mostra come scrivere una funzione che elabora un valore di record. - - - - It converts a 'ContactCard' object to a string. - Converte un oggetto 'ContactCard' in una stringa. - - - - This is an example of a Record with a member. - Questo è un esempio di record con un membro. - - - - Members can implement object-oriented members. - I membri possono implementare membri orientati a oggetti. - - - - Members are accessed via the '.' operator on an instantiated type. - In un tipo di cui è stata creata un'istanza l'accesso ai membri avviene tramite l'operatore '.'. - - - - Records can also be represented as structs via the 'Struct' attribute. - I record possono essere rappresentati anche come struct tramite l'attributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Questo comportamento è utile in situazioni in cui la prestazioni degli struct sono prioritarie rispetto alla - - - - the flexibility of reference types. - flessibilità dei tipi di riferimento. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Le unioni discriminate sono valori che potrebbero corrispondere a un certo numero di case o form denominati. - - - - Data stored in DUs can be one of several distinct values. - I dati archiviati nelle unioni discriminate possono essere uno di diversi valori distinti. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - L'istruzione seguente rappresenta il seme di una carta da gioco. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - È possibile usare un'unione discriminata anche per rappresentare il valore di una carta da gioco. - - - - Represents the rank of cards 2 .. 10 - Rappresenta il valore delle carte da 2 a 10 - - - - Discriminated Unions can also implement object-oriented members. - Le unioni discriminate possono inoltre implementare membri orientati a oggetti. - - - - This is a record type that combines a Suit and a Rank. - Questo è un tipo di record che combina un seme e un valore. - - - - It's common to use both Records and Disciminated Unions when representing data. - Per la rappresentazione dei dati si usano in genere record e unioni discriminate. - - - - This computes a list representing all the cards in the deck. - Calcola un elenco che rappresenta tutte le carte del mazzo. - - - - This example converts a 'Card' object to a string. - Questo esempio consente di convertire un oggetto 'Card' in una stringa. - - - - This example prints all the cards in a playing deck. - Questo esempio consente di stampare tutte le carte di un mazzo. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Le unioni discriminate a case singolo vengono spesso usate per la modellazione dei domini. In questo modo è possibile garantire una maggiore sicurezza dei tipi - - - - over primitive types such as strings and ints. - rispetto a tipi primitivi come stringhe e valori int. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Le unioni discriminate a case singolo non possono essere convertite in modo implicito nel o dal tipo di cui eseguono il wrapping. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Ad esempio, una funzione che accetta un indirizzo non può accettare come input una stringa, - - - - or vive/versa. - o viceversa. - - - - You can easily instantiate a single-case DU as follows. - È possibile creare facilmente un'istanza di una unione discriminata a case singolo come descritto di seguito. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Quando è necessario il valore, è possibile annullare il wrapping del valore sottostante con una funzione semplice. - - - - Printing single-case DUs is simple with unwrapping functions. - Le funzioni di unwrapping semplificano la stampa di unioni discriminate a case singolo. - - - - Disciminated Unions also support recursive definitions. - Le unioni discriminate supportano anche definizioni ricorsive. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Rappresenta un albero di ricerca binaria, in cui un caso è l'albero vuoto, - - - - and the other being a Node with a value and two subtrees. - e l'altro è un nodo con un valore e due sottoalberi. - - - - Check if an item exists in the binary search tree. - Verifica l'esistenza di un elemento nell'albero della ricerca binaria. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Esegue la ricerca in modo ricorsivo usando i criteri di ricerca. Restituisce true se esiste; in caso contrario, false. - - - - Check the left subtree. - Verifica il sottoalbero di sinistra. - - - - Check the right subtree. - Verifica il sottoalbero di destra. - - - - Inserts an item in the Binary Search Tree. - Inserisce un elemento nell'albero della ricerca binaria. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Trova la posizione da inserire in modo ricorsivo con i criteri di ricerca, quindi inserisce un nuovo nodo. - - - - If the item is already present, it does not insert anything. - Se l'elemento è già presente, non inserisce nulla. - - - - No need to insert, it already exists; return the node. - Non è necessario inserirla perché esiste già; restituisce il nodo. - - - - Call into left subtree. - Chiamata nel sottoalbero di sinistra. - - - - Call into right subtree. - Chiamata nel sottoalbero di destra. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Le unioni discriminate possono essere rappresentate anche come struct tramite l'attributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Questo comportamento è utile in situazioni in cui la prestazioni degli struct sono prioritarie rispetto alla - - - - the flexibility of reference types. - flessibilità dei tipi di riferimento. - - - - However, there are two important things to know when doing this: - Quando si esegue questa operazione, è però importante conoscere due aspetti: - - - - 1. A struct DU cannot be recursively-defined. - 1. Un'unione discriminata di struct non può essere definita in modo ricorsivo. - - - - 2. A struct DU must have unique names for each of its cases. - 2. A ogni case di un'unione discriminata di struct deve essere assegnato un nome univoco. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - I criteri di ricerca sono una funzionalità di F# che consente di utilizzare i criteri, - - - - which are a way to compare data with a logical structure or structures, - che consentono di confrontare i dati con una o più strutture logiche, - - - - decompose data into constituent parts, or extract information from data in various ways. - scomporre i dati nelle parti costituenti o estrarre le informazioni dai dati in diversi modi. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - È quindi possibile intervenire sulla "forma" di un criterio tramite i criteri di ricerca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Record per il nome e il cognome di una persona - - - - A Discriminated Union of 3 different kinds of employees - Unione discriminata di tre diversi tipi di dipendenti - - - - Count everyone underneath the employee in the management hierarchy, - Conta chiunque sotto il dipendente nella gerarchia di gestione, - - - - including the employee. - includendo il dipendente. - - - - Find all managers/executives named "Dave" who do not have any reports. - Trova tutti i manager/dirigenti il cui nome è "Dave" e per i quali non sono disponibili report. - - - - This uses the 'function' shorthand to as a lambda expression. - Usa la sintassi abbreviata di 'function' come espressione lambda. - - - - [] matches an empty list. - [] corrisponde a un elenco vuoto. - - - - '_' is a wildcard pattern that matches anything. - '_' è un carattere jolly che corrisponde a qualsiasi stringa. - - - - This handles the "or else" case. - Gestisce il caso "or else". - - - - You can also use the shorthand function construct for pattern matching, - Per i criteri di ricerca è anche possibile usare il costrutto di funzione a sintassi abbreviata, - - - - which is useful when you're writing functions which make use of Partial Application. - che risulta utile quando si scrivono funzioni che usano l'applicazione parziale. - - - - Define some more functions which parse with the helper function. - Consente di definire alcune altre funzioni che vengono analizzate con la funzione helper. - - - - Active Patterns are another powerful construct to use with pattern matching. - I criteri attivi sono un altro costrutto efficace da usare con i criteri di ricerca. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Consentono di partizionare i dati di input in form personalizzati, scomponendoli a livello del sito di chiamata dei criteri di ricerca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - I criteri di ricerca con parola chiave 'function' e criteri attivi sono spesso simili a questi. - - - - Call the printer with some different values to parse. - Chiama la stampante con alcuni valori diversi da analizzare. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Il valore dell'opzione è qualsiasi valore con tag 'Some' o 'None'. - - - - They are used extensively in F# code to represent the cases where many other - Questi valori sono ampiamente utilizzati nel codice F# per rappresentare i casi in cui molti altri - - - - languages would use null references. - linguaggi utilizzerebbero riferimenti null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Consente innanzitutto di definire un codice postale definito tramite l'unione discriminata a case singolo. - - - - Next, define a type where the ZipCode is optional. - Definire quindi un tipo in cui l'elemento ZipCode è facoltativo. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Definire quindi un tipo di interfaccia che rappresenta un oggetto per calcolare la zona di spedizione per il codice postale del cliente, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - date le implementazioni per i metodi astratti 'getState' e 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Calcolare quindi una zona di spedizione per un cliente usando un'istanza della calcolatrice. - - - - This uses combinators in the Option module to allow a functional pipeline for - Usa i combinatori del modulo Option per consentire una pipeline funzionale per - - - - transforming data with Optionals. - la trasformazione di dati con Optionals. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Le unità di misura consentono di annotare tipi numerici primitivi in modo indipendente dai tipi. - - - - You can then perform type-safe arithmetic on these values. - È quindi possibile eseguire operazioni aritmetiche indipendenti dai tipi su questi valori. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Aprire innanzitutto una raccolta di nomi di unità comuni - - - - Define a unitized constant - Definire una costante unificata - - - - Next, define a new unit type - Definire quindi un nuovo tipo di unità - - - - Conversion factor mile to meter. - Fattore di conversione da miglia a metri. - - - - Define a unitized constant - Definire una costante unificata - - - - Compute metric-system constant - Calcola la costante del sistema metrico - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - I valori che usano unità di misura possono essere usati come il tipo numerico primitivo per elementi come la stampa. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Le classi sono un modo per definire nuovi tipi di oggetto in F# e supportano costrutti standard orientati a oggetti. - - - - They can have a variety of members (methods, properties, events, etc.) - Possono includere numerosi membri (metodi, proprietà, eventi e così via) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Per altre informazioni sulle classi, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Per altre informazioni sui membri, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Semplice classe di vettore bidimensionale. - - - - The class's constructor is on the first line, - Il costruttore della classe si trova sulla prima riga - - - - and takes two arguments: dx and dy, both of type 'double'. - e accetta due argomenti, dx e dy, entrambi di tipo 'double'. - - - - This internal field stores the length of the vector, computed when the - In questo campo interno è archiviata la lunghezza del vettore, calcolata durante - - - - object is constructed - la costruzione dell'oggetto - - - - 'this' specifies a name for the object's self identifier. - 'this' specifica un nome per l'autoidentificatore dell'oggetto. - - - - In instance methods, it must appear before the member name. - Nei metodi di istanza, deve trovarsi prima del nome del membro. - - - - This member is a method. The previous members were properties. - Questo membro è un metodo. I membri precedenti erano proprietà. - - - - This is how you instantiate the Vector2D class. - In questo modo viene creata un'istanza della classe Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Consente di ottenere un nuovo oggetto vettore scalato senza modificare l'oggetto originale. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Le classi generiche consentono di definire tipi rispetto a un set di parametri di tipo. - - - - In the following, 'T is the type parameter for the class. - Nel codice seguente 'T è il parametro di tipo per la classe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Questo campo interno archivia gli stati in un elenco. - - - - Add a new element to the list of states. - Aggiunge un nuovo elemento all'elenco degli stati. - - - - use the '<-' operator to mutate the value. - usare l'operatore '<-' per modificare il valore. - - - - Get the entire list of historical states. - Consente di ottenere l'intero elenco degli stati cronologici. - - - - Get the latest state. - Consente di ottenere l'ultimo stato. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Istanza 'int' della classe di rilevamento stato. Si noti che il parametro di tipo è dedotto. - - - - Add a state - Viene aggiunto uno stato - - - - Interfaces are object types with only 'abstract' members. - Le interfacce sono tipi di oggetto contenenti solo membri 'abstract'. - - - - Object types and object expressions can implement interfaces. - I tipi di oggetto e le espressioni di oggetto possono implementare interfacce. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Questo è un tipo che implementa IDisposable. - - - - This is the implementation of IDisposable members. - Questa è l'implementazione dei membri di IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Questo è un oggetto che implementa IDisposable tramite un'espressione di oggetto - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Diversamente da altri linguaggi, come C# o Java, non è necessaria una nuova definizione di tipo - - - - to implement an interface. - per implementare un'interfaccia. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - La libreria FSharp.Core definisce un intervallo di funzioni di elaborazione parallela. In questo caso - - - - you use some functions for parallel processing over arrays. - si usano alcune funzioni per l'elaborazione parallela sulle matrici. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Per altre informazioni, vedere: https://msdn.microsoft.com/it-it/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Definire innanzitutto una matrice di input. - - - - Next, define a functions that does some CPU intensive computation. - Definire quindi una funzione che esegue alcuni calcoli intensivi della CPU. - - - - Next, do a parallel map over a large input array. - Eseguire quindi un mapping parallelo su una matrice di input di grandi dimensioni. - - - - Next, print the results. - Stampare quindi i risultati. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Gli eventi sono un termine comune per la programmazione .NET, in particolare con le applicazioni Windows Form o WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Creare innanzitutto un'istanza dell'oggetto Event costituito dal punto di sottoscrizione (event.Publish) e dal trigger di evento (event.Trigger). - - - - Next, add handler to the event. - Aggiungere quindi il gestore all'evento. - - - - Next, trigger the event. - Attivare quindi l'evento. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Creare quindi un'istanza dell'oggetto Event che segue la convenzione .NET standard: (sender, EventArgs). - - - - Next, add a handler for this new event. - Aggiungere quindi un gestore per questo nuovo evento. - - - - Next, trigger this event (note that sender argument should be set). - Attivare quindi questo evento (si noti che è necessario impostare l'argomento sender). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf deleted file mode 100644 index 0eda61edb1..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - このサンプルは、F# 言語の要素を紹介します。 - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - F# インタラクティブでコードを実行するには、コードの一部を強調表示して、Alt キーを押しながら Enter キーを押すか、右マウス ボタンをクリックし - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - [対話形式で実行]5D; を選択します。[表示]5D; メニューから F# インタラクティブ ウィンドウを開くことができます。 - - - - For more about F#, see: - F# の詳細については、次のページを参照してください: - - - - To see this tutorial in documentation form, see: - このチュートリアルをドキュメント形式で表示するには、次を参照してください: - - - - To learn more about applied F# programming, use - 適用された F# プログラミングの詳細については、次を使用します - - - - To install the Visual F# Power Tools, use - Visual F# Power Tools をインストールするには、次を使用します - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - [ツール]5D; --> [拡張機能と更新プログラム]5D; --> [オンライン]5D; と検索 - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - F# で使用するその他のテンプレートについては、Visual Studio の 'オンライン テンプレート' を参照してください。 - - - - 'New Project' --> 'Online Templates' - ([新しいプロジェクト]5D; --> [オンライン テンプレート]5D;) を参照してください。 - - - - F# supports three kinds of comments: - F# は、3 種類のコメントをサポートしています: - - - - 1. Double-slash comments. These are used in most situations. - 1. ダブルスラッシュ コメント。これはほとんどの場合に使用されます。 - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML スタイル ブロック コメント。これはそれほど頻繁には使用されません。 - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. トリプル スラッシュ コメント。これは、関数や型などの文書化に使用されます。 - - - - They will appear as text when you hover over something which is decorated with these comments. - このコメントで修飾されているものをポイントすると、これがテキストとして表示されます。 - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - これは .NET スタイルの XML コメントもサポートしています。このコメントを使用すると、リファレンス ドキュメントを生成できます。 - - - - and they also allow editors (such as Visual Studio) to extract information from them. - また、(Visual Studio などの) エディターでそこから情報を抽出することもできます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 'open' キーワードを使用して名前空間を開きます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - モジュールは、値、型、関数値などの、F# コードのグループ化です。 - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - コードをモジュールにグループ化することで、関連コードを 1 つにまとめて、プログラムでの名前の競合を回避することができます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - これは、サンプルの整数値です。 - - - - This is a sample floating point number. - これは、サンプルの浮動小数点数です。 - - - - This computed a new number by some arithmetic. Numeric types are converted using - 算術によって新しい数値が算出されました。数値型は以下を使用するよう変換されています - - - - functions 'int', 'double' and so on. - 関数の 'int'、'double' などです。 - - - - This is a list of the numbers from 0 to 99. - これは 0 ~ 99 の数値のリストです。 - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - これは、0 ~ 99 のすべての数値とその二乗を含むすべてのタプルのリストです。 - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 次の行は、タプルを含むリストを出力します。一般的な出力に '%A' を使用しています。 - - - - This is a sample integer with a type annotation - これは、型の注釈付きのサンプルの整数です - - - - Values in F# are immutable by default. They cannot be changed - 既定では、F# の値は不変です。明示的に変更可能として指定しない限り、 - - - - in the course of a program's execution unless explicitly marked as mutable. - プログラムの実行の過程で変更することはできません。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 'let' を介して値を名前にバインドすると、変更できなくなります。 - - - - The second line of code fails to compile because 'number' is immutable and bound. - コードの 2 番目の行は、'number' が変更できず、バインドされているため、コンパイルに失敗します。 - - - - Re-defining 'number' to be a different value is not allowed in F#. - F# では、'number' を別の値に再定義することはできません。 - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 変更可能なバインド。これは 'otherNumber' の値を変更できるようにするために必要です。 - - - - When mutating a value, use '<-' to assign a new value. - 値を変換する場合は、'<-' を使用して新しい値を割り当てます。 - - - - You could not use '=' here for this purpose since it is used for equality - この場合、'=' は等価を示すために使用するため、ここで使用することはできません - - - - or other contexts such as 'let' or 'module' - または、'let' や 'module' などの他のコンテキスト - - - - Much of F# programming consists of defining functions that transform input data to produce - F# プログラミングの多くは、生成する入力データを変換する定義する関数で構成されています - - - - useful results. - 有用な結果。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 関数を定義するには、'let' を使用します。これは整数の引数を受け取り、整数を返します。 - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 明示的な型の注釈を使用する場合を除いて、かっこは関数引数では省略可能です。 - - - - Apply the function, naming the function return result using 'let'. - 関数を適用します。'let' を使用し、関数の戻り値の結果に名前を付けます。 - - - - The variable type is inferred from the function return type. - 変数の型は、関数の戻り値の型から推論されます。 - - - - This line uses '%d' to print the result as an integer. This is type-safe. - この行は '%d' を使用して結果を整数として出力します。これはタイプ セーフです。 - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 'result1' が 'int' 型でなかった場合、行はコンパイルに失敗します。 - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 必要であれば、'(引数:型)' を使用してパラメーター名の型に注釈を付けます。かっこは必須です。 - - - - Conditionals use if/then/elid/elif/else. - 条件は、if/then/elid/elif/else を使用します。 - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - F# は Python などの言語のように、空白のインデント対応構文を使用することに注意してください。 - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - この行は '%f' を使用して結果を浮動小数として出力します。上記の '%d' と同様に、これはタイプ セーフです。 - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - ブール値は F# の基本のデータ型です。ブール値と条件ロジックの例をいくつか示します。 - - - - To learn more, see: - 詳細については、次を参照してください: - - - - and - AND - - - - Booleans values are 'true' and 'false'. - ブール型の値は 'true' と 'false' です。 - - - - Operators on booleans are 'not', '&&' and '||'. - ブール値の演算子は 'not'、'&&'、および '||' です。 - - - - This line uses '%b'to print a boolean value. This is type-safe. - この行は '%b' を使用してブール値を出力します。これはタイプ セーフです。 - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 文字列は F# の基本のデータ型です。文字列と基本的な文字列操作の例をいくつか示します。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 文字列は二重引用符を使用します。 - - - - Strings can also use @ to create a verbatim string literal. - 文字列は @ を使用して、verbatim 文字列リテラルを作成することもできます。 - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - これは、'\'、'\n'、'\t' などのエスケープ文字を無視します。 - - - - String literals can also use triple-quotes. - 文字列リテラルは三重引用符を使用することもできます。 - - - - String concatenation is normally done with the '+' operator. - 通常、文字列の連結は '+' 演算子を使用して実行されます。 - - - - This line uses '%s' to print a string value. This is type-safe. - この行は、'%s' を使用して文字列値を出力します。これはタイプ セーフです。 - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - サブ文字列はインデクサー表記を使用します。この行はサブ文字列として最初の 7 文字を抽出します。 - - - - Note that like many languages, Strings are zero-indexed in F#. - 多くの言語と同様に、F# では、文字列のインデックスは 0 から始まることに注意してください。 - - - - Tuples are simple combinations of data values into a combined value. - タプルは、データ値と合計値の単純な組み合わせです。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 整数のシンプルなタプルです。 - - - - A function that swaps the order of two values in a tuple. - タプルの 2 つの値の順序を入れ替える関数。 - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 型の推定は、ジェネリック型を持つように関数を自動的に一般化し、 - - - - meaning that it will work with any type. - 任意の型で動作することを意味します。 - - - - A tuple consisting of an integer, a string, - タプルを構成するのは、整数、文字列、 - - - - and a double-precision floating point number. - および倍精度浮動小数点数です。 - - - - A simple tuple of integers with a type annotation. - 型の注釈が指定された整数のシンプルなタプル。 - - - - Type annotations for tuples use the * symbol to separate elements - タプルの型の注釈では、要素を区切るために * の記号を使用します - - - - Tuples are normally objects, but they can also be represented as structs. - タプルは通常はオブジェクトですが、構造体として表すこともできます。 - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - C# と Visual Basic.NET では、これらは構造体と完全に相互運用されます。ただし、 - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 構造体のタプルは、オブジェクト タプル (参照タプルと呼ばれることが多い) と暗黙的に変換できません。 - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - このため、以下の 2 番目の行はコンパイルに失敗します。発生する事象を確認するには、コメントを解除します。 - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 構造体タプルと参照タプル間で暗黙的に変換することはできませんが、 - - - - you can explicitly convert via pattern matching, as demonstrated below. - 以下に示すように、パターン マッチングを使用して明示的に変換できます。 - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# パイプ演算子 ('|>'、'<|' など) と F# 合成演算子 ('>>'、'<<') - - - - are used extensively when processing data. These operators are themselves functions - は、データの処理時に幅広く使用されます。これらの演算子はそれ自体が関数であり、 - - - - which make use of Partial Application. - 部分適用を利用します。 - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - これらの演算子の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 部分適用の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 値を 2 乗します。 - - - - Adds 1 to a value. - 値に 1 を追加します。 - - - - Tests if an integer value is odd via modulo. - 剰余を使って整数値が奇数であるかどうかをテストします。 - - - - A list of 5 numbers. More on lists later. - 5 個の数値のリストです。リストの詳細については後述。 - - - - Given a list of integers, it filters out the even numbers, - 整数のリストを指定すると、偶数を除外し、 - - - - squares the resulting odds, and adds 1 to the squared odds. - 結果の奇数を 2 乗し、2 乗した奇数に 1 を加算します。 - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 'squareOddValuesAndAddOne' を記述するためのより簡単な方法は、 - - - - sub-result into the function calls themselves. - それぞれのサブ結果を関数呼び出し自体に入れ子にすることです。 - - - - This makes the function much shorter, but it's difficult to see the - これにより、関数は大幅に短くなりますが、データが処理される順序を - - - - order in which the data is processed. - 判別するのは難しくなります。 - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 'squareOddValuesAndAddOne' を記述するための推奨される方法は、F# パイプ演算子を使用する方法です。 - - - - This allows you to avoid creating intermediate results, but is much more readable - これにより、中間結果を作成しなくてもよくなります。また、 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 'squareOddValuesAndAddOneNested' のような関数呼び出しを入れ子にするよりもはるかに読みやすくすることができます - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - ラムダ関数を使用して、2 番目の `List.map` 呼び出しを先頭に移動することにより、 - - - - into the first, using a Lambda Function. - 'squareOddValuesAndAddOnePipeline' を短くすることができます。 - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - パイプラインはラムダ関数の内部でも使用されることに注意してください。F# パイプ演算子は、 - - - - can be used for single values as well. This makes them very powerful for processing data. - 単一の値にも使用できます。これにより、データ処理能力が向上します。 - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 最後に、'>>' を使用して次の 2 つのコア操作を作成すると、'values' をパラメーターとして - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 明示的に受け取る必要がなくなります: 偶数を除外してから、2 乗して 1 を加算する。 - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 同様に、ラムダ式の 'fun x -> ...' ビットも必要ありません。 'x' は単に、 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 関数型パイプラインに渡すことができるようにそのスコープ内で定義されているだけだからです。そのため、 - - - - there as well. - そこでも同様に '>>' を使用できます。 - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition' の結果は、それ自体が別の関数です。その関数は、 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 整数のリストを入力として受け取ります。整数のリストを指定して 'squareOddValuesAndAddOneComposition' を - - - - of integers, you'll notice that it produces the same results as previous functions. - 実行すると、前の関数と同じ結果が生成されることがわかります。 - - - - This is using what is known as function composition. This is possible because functions in F# - これは、関数合成と呼ばれるものを使用しています。これが可能なのは、F# の関数が - - - - use Partial Application and the input and output types of each data processing operation match - 部分適用を使用しており、各データ処理操作の入力と出力の型が、使用している - - - - the signatures of the functions we're using. - 関数のシグネチャと一致するためです。 - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - リストは、順序指定された、変更できない単方向リストです。 リストは集中評価されます。 - - - - This module shows various ways to generate lists and process lists with some functions - このモジュールは、リストを生成し、F# コア ライブラリ内の 'List' モジュールに含まれる - - - - in the 'List' module in the F# Core Library. - いくつかの関数を使用してリストを処理するためのさまざまな方法を示しています。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - リストは [ ... ] を使用して定義されます。これは空のリストです。 - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - これは 3 つの要素を含むリストです。';' は同じ行にある要素を区切るために使用されます。 - - - - You can also separate elements by placing them on their own lines. - 要素は、それぞれの行に配置することで分割することもできます。 - - - - This is a list of integers from 1 to 1000 - これは 1 ~ 1000 の整数のリストです - - - - Lists can also be generated by computations. This is a list containing - リストは計算によっても生成できます。これは、次を含むリストです: - - - - all the days of the year. - 1 年のすべての日。 - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 'List.take' を使用して 'daysList' の最初の 5 つの要素を出力します。 - - - - Computations can include conditionals. This is a list containing the tuples - 計算には条件を含めることができます。これはタプルを含むリストです - - - - which are the coordinates of the black squares on a chess board. - チェス盤の黒いマス目の座標のタプルを含むリストです。 - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - リストは 'List.map' と他の関数型プログラミング連結子を使用して変換することができます。 - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - この定義は、パイプラインを使用して numberList 内の数値を 2 乗することによって新しいリストを生成します - - - - operator to pass an argument to List.map. - 引数を List.map に渡す演算子です。 - - - - There are many other list combinations. The following computes the sum of the squares of the - 他に多くのリストの組み合わせがあります。次の二乗和をコンピューティングします: - - - - numbers divisible by 3. - 3 で割り切れる数。 - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 配列は、型が同じ要素の固定サイズの変更可能なコレクションです。 - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - これらはリストと似ています (列挙型をサポートし、データ処理のための同様の連結子を備えています) が、 - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 一般的により高速であり、高速ランダム アクセスをサポートしています。その代わり、変更可能であるため安全性が低下します。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - これは空の配列です。構文はリストの構文と似ていますが、代わりに `[| ... |]` を使用することにご注意ください。 - - - - Arrays are specified using the same range of constructs as lists. - 配列は、リストと同じコンストラクトの範囲を使用して指定されます。 - - - - This is an array of numbers from 1 to 1000. - これは 1 ~ 1000 の数値の配列です。 - - - - This is an array containing only the words "hello" and "world". - これは "hello" と "world" のみを含む配列です。 - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - これはインデックスによって初期化され、0 ~ 2000 の間の偶数を含む配列です。 - - - - Sub-arrays are extracted using slicing notation. - サブ配列はスライス表記法を使用して抽出されます。 - - - - You can loop over arrays and lists using 'for' loops. - 'for' ループを使用して、配列とリストに渡ってループできます。 - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 左矢印代入演算子を使用して、配列要素の内容を変更できます。 - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - この演算子の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 'Array.map' と他の関数型プログラミング操作を使用して、配列を変換できます。 - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 以下は、'h' で始まる単語の長さの合計を計算します。 - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - シーケンスは論理的な一連の要素であり、すべてが同じ型です。これらはリストや配列よりも一般的な型です。 - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - シーケンスはオンデマンドで評価され、繰り返されるたびに再評価されます。 - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# シーケンスは .NET System.Collections.Generic.IEnumerable<'T> のエイリアスです。 - - - - Sequence processing functions can be applied to Lists and Arrays as well. - シーケンス処理関数はリストと配列にも適用できます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - これは空のシーケンスです。 - - - - This a sequence of values. - これは一連の値です。 - - - - This is an on-demand sequence from 1 to 1000. - これは 1 ~ 1000 のオンデマンドのシーケンスです。 - - - - This is a sequence producing the words "hello" and "world" - これは 単語 "hello" と "world" を生成するシーケンスです - - - - This sequence producing the even numbers up to 2000. - このシーケンスは、2000 までの偶数を生成します。 - - - - This is an infinite sequence which is a random walk. - これはランダム ウォークである無限シーケンスです。 - - - - This example uses yield! to return each element of a subsequence. - この例では、yield! を使用して、サブシーケンスの各要素を返します。 - - - - This example shows the first 100 elements of the random walk. - この例では、ランダム ウォークの最初の 100 要素を示します。 - - - - Recursive functions can call themselves. In F#, functions are only recursive - 再帰関数は自身を呼び出すことができます。F# では、関数は単に再帰的です - - - - when declared using 'let rec'. - 'let rec' を使用して宣言される場合。 - - - - Recursion is the preferred way to process sequences or collections in F#. - 再帰は、F# でシーケンスまたはコレクションを処理するための推奨される方法です。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - この例では、次の階乗をコンピューティングする再帰関数を示します - - - - integer. It uses 'let rec' to define a recursive function. - 整数。'let rec' を使用して、再帰関数を定義します。 - - - - Computes the greatest common factor of two integers. - 2 つの整数の最大公約数をコンピューティングします。 - - - - Since all of the recursive calls are tail calls, - すべての再帰呼び出しは末尾呼び出しであるため、 - - - - the compiler will turn the function into a loop, - コンパイラは関数をループにします - - - - which improves performance and reduces memory consumption. - これによりパフォーマンスが向上し、メモリの消費を抑えることができます。 - - - - This example computes the sum of a list of integers using recursion. - この例では、再帰を使用して整数のリストの合計をコンピューティングします。 - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - これは、ヘルパー関数を結果アキュムレータと共に使用して 'sumList' を末尾再帰にします。 - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - これは、シード アキュムレータとして '0' を指定して、末尾再帰的なヘルパー関数を呼び出します。 - - - - An approach like this is common in F#. - F# では、このようなアプローチは一般的です。 - - - - Records are an aggregate of named values, with optional members (such as methods). - レコードは、オプションのメンバー (メソッドなど) を含む名前付きの値の集約です。 - - - - They are immutable and have structural equality semantics. - これらは変更できず、構造上の等価セマンティクスを持ちます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - この例では、新しいレコード型を定義する方法を示します。 - - - - This example shows how to instantiate a record type. - この例では、レコードの種類をインスタンス化する方法を示します。 - - - - You can also do this on the same line with ';' separators. - ';' 区切りを使用して、同じ行でこれを行うこともできます。 - - - - This example shows how to use "copy-and-update" on record values. It creates - この例では、レコード値で "copy-and-update" を使用する方法を示します。次を作成します: - - - - a new record value that is a copy of contact1, but has different values for - contact1 のコピーであるレコード値。ただし、次の値は異なります: - - - - the 'Phone' and 'Verified' fields. - [電話番号]5D; および [検証済み]5D; フィールド。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - この例では、レコード値を処理する関数を書き込む方法を示します。 - - - - It converts a 'ContactCard' object to a string. - 'ContactCard' オブジェクトを文字列に変換します。 - - - - This is an example of a Record with a member. - これは、メンバーを含むレコードの例です。 - - - - Members can implement object-oriented members. - メンバーはオブジェクト指向のメンバーを実装できます。 - - - - Members are accessed via the '.' operator on an instantiated type. - メンバーには、インスタンス化された型に対する '.' 演算子を介してアクセスできます。 - - - - Records can also be represented as structs via the 'Struct' attribute. - レコードは 'Struct' 属性を介して構造体として表すこともできます。 - - - - This is helpful in situations where the performance of structs outweighs - これは、構造体のパフォーマンスが参照型の柔軟性よりも - - - - the flexibility of reference types. - 重要である場合に役立ちます。 - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 判別共用体 (略して DU) は、多数の名前付きのフォームまたはケースである可能性のある値です。 - - - - Data stored in DUs can be one of several distinct values. - DU の格納データは、複数の個別の値のいずれかになります。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - たとえば、次は一揃いのトランプを表します。 - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 判別共用体はトランプのランクを表すためにも使用できます。 - - - - Represents the rank of cards 2 .. 10 - 2 ~ 10 の札のランクを表します - - - - Discriminated Unions can also implement object-oriented members. - 判別共用体はオブジェクト指向のメンバーを実装することもできます。 - - - - This is a record type that combines a Suit and a Rank. - これは Suit と Rank を組み合わせたレコード型です。 - - - - It's common to use both Records and Disciminated Unions when representing data. - データを表すときには、レコードと判別共用体の両方を使用するのが一般的です。 - - - - This computes a list representing all the cards in the deck. - これは、一組のトランプのすべてのカードを表すリストをコンピューティングします。 - - - - This example converts a 'Card' object to a string. - この例では 'Card' オブジェクトを文字列に変換します。 - - - - This example prints all the cards in a playing deck. - この例では、一組のトランプのカードすべてを印刷します。 - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 単一ケースの DU は、ドメイン モデリングで多く使用されます。これにより、文字列や整数などの - - - - over primitive types such as strings and ints. - プリミティブ型に加えて、さらにタイプ セーフが追加されます。 - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 単一ケースの DU は、ラップする型との間で暗黙的に変換することはできません。 - - - - For example, a function which takes in an Address cannot accept a string as that input, - たとえば、アドレスを受け取る関数は文字列をその入力として受け入れることはできません - - - - or vive/versa. - (その逆もできません)。 - - - - You can easily instantiate a single-case DU as follows. - 次のように、単一ケースの DU のインスタンスを簡単に作成できます。 - - - - When you need the value, you can unwrap the underlying value with a simple function. - 値が必要な場合は、簡単な関数を使用して基になる値のラップを解除できます。 - - - - Printing single-case DUs is simple with unwrapping functions. - 単一ケースの DU は、関数のラップを解除するだけで出力できます。 - - - - Disciminated Unions also support recursive definitions. - 判別共用体は再帰的な定義もサポートしています。 - - - - This represents a Binary Search Tree, with one case being the Empty tree, - これはバイナリ検索ツリーを表します。片方のケースは空のツリーであり、 - - - - and the other being a Node with a value and two subtrees. - もう片方は値と 2 つのサブツリーを含む Node です。 - - - - Check if an item exists in the binary search tree. - バイナリ検索ツリーにアイテムが存在するかどうかを確認します。 - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - パターン マッチングを使用して再帰的に検索します。存在する場合は true を返し、そうでない場合は false を返します。 - - - - Check the left subtree. - 左側のサブツリーを確認します。 - - - - Check the right subtree. - 右側のサブツリーを確認します。 - - - - Inserts an item in the Binary Search Tree. - バイナリ検索ツリーにアイテムを挿入します。 - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - パターン マッチングを使用して再帰的に挿入する場所を検索し、新しいノードを挿入します。 - - - - If the item is already present, it does not insert anything. - アイテムが既に存在する場合は、何も挿入しません。 - - - - No need to insert, it already exists; return the node. - 既に存在しているため、挿入する必要はありません。ノードを返します。 - - - - Call into left subtree. - 左側のサブツリーに呼び出します。 - - - - Call into right subtree. - 右側のサブツリーに呼び出します。 - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 判別共用体は、'Struct' 属性を介して構造体として表すこともできます。 - - - - This is helpful in situations where the performance of structs outweighs - これは、構造体のパフォーマンスが参照型の柔軟性よりも - - - - the flexibility of reference types. - 重要である場合に役立ちます。 - - - - However, there are two important things to know when doing this: - ただし、これを行うときに理解しておく必要のある重要な点が 2 つあります: - - - - 1. A struct DU cannot be recursively-defined. - 1. 構造体 DU は再帰的に定義できません。 - - - - 2. A struct DU must have unique names for each of its cases. - 2. 構造体 DU の名前は各ケースに対して一意である必要があります。 - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - パターン マッチングはパターンを使用できるようにする F# の機能です。 - - - - which are a way to compare data with a logical structure or structures, - これは、データと 1 つまたは複数の論理構造を比較したり、 - - - - decompose data into constituent parts, or extract information from data in various ways. - データを構成要素部分に分解したり、さまざまな方法でデータから情報を抽出したりするための方法です。 - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - その後、パターン マッチングを介してパターンの "形" でディスパッチできます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 個人の姓および名のレコード - - - - A Discriminated Union of 3 different kinds of employees - 3 種類の社員の判別共用体 - - - - Count everyone underneath the employee in the management hierarchy, - 管理階層構造の中で、ある社員の下にいる全員の数を数えます - - - - including the employee. - (その社員自身を含む)。 - - - - Find all managers/executives named "Dave" who do not have any reports. - 名前が "Dave" で、レポートのないすべてのマネージャー/役員を検索します。 - - - - This uses the 'function' shorthand to as a lambda expression. - これは、ラムダ式として 'function' の短縮形を使用します。 - - - - [] matches an empty list. - [] は空白のリストに一致します。 - - - - '_' is a wildcard pattern that matches anything. - '_' は、任意のものに一致するワイルドカード パターンです。 - - - - This handles the "or else" case. - これは "or else" ケースを処理します。 - - - - You can also use the shorthand function construct for pattern matching, - パターン マッチングのために、短縮形の関数コンストラクトを使用することもできます。 - - - - which is useful when you're writing functions which make use of Partial Application. - これは、部分適用を利用する関数を記述している場合に役立ちます。 - - - - Define some more functions which parse with the helper function. - ヘルパー関数で解析する別の関数をいくつか定義します。 - - - - Active Patterns are another powerful construct to use with pattern matching. - アクティブなパターンは、パターン マッチングで使用するもう 1 つの強力なコンストラクトです。 - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - パターン マッチの呼び出しサイトで分解して、入力データをカスタム フォームにパーティション分割できるようにします。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 'function' キーワードとアクティブ パターンによるパターン マッチングは、多くの場合、次のようになります。 - - - - Call the printer with some different values to parse. - 解析するいくつかの異なる値でプリンターを呼び出します。 - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - オプション値とは、'Some' または 'None' がタグされたあらゆる種類の値です。 - - - - They are used extensively in F# code to represent the cases where many other - F# コードで広く使用され、他の多くの言語で null 参照が使用される - - - - languages would use null references. - ケースを表します。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - まず、単一ケースの判別共用体を介して定義した郵便番号を定義します。 - - - - Next, define a type where the ZipCode is optional. - 次に、郵便番号が省略可能である型を定義します。 - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 次に、オブジェクトを表すインターフェイスの型を定義して、顧客の郵便番号の出荷ゾーンをコンピューティングし、 - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 'getState' および 'getShippingZone' 抽象メソッドの実装が指定されています。 - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 次に、電卓のインスタンスを使用して顧客の出荷ゾーンを計算します。 - - - - This uses combinators in the Option module to allow a functional pipeline for - これは、オプション モジュール内の連結子を使用することにより、オプションを使用したデータ変換のために - - - - transforming data with Optionals. - 関数型パイプラインを使用できるようにします。 - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 測定単位は、タイプ セーフな方法でプリミティブな数値型に注釈を付ける方法です。 - - - - You can then perform type-safe arithmetic on these values. - 次に、これらの値に対してタイプ セーフの算術を実行できます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - まず、共通の単位名のコレクションを開きます - - - - Define a unitized constant - 単位化された定数を定義します - - - - Next, define a new unit type - 次に、新しい単位の種類を定義します - - - - Conversion factor mile to meter. - マイルからメートルへの変換係数。 - - - - Define a unitized constant - 単位化された定数を定義します - - - - Compute metric-system constant - メートル法の定数をコンピューティングします - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 測定単位を使用する値は、印刷などに対するプリミティブな数値型と同じように使用できます。 - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - クラスは、F# で新しいオブジェクト型を定義する方法であり、標準のオブジェクト指向のコンストラクトをサポートします。 - - - - They can have a variety of members (methods, properties, events, etc.) - さまざまなメンバー (メンバー、プロパティ、イベントなど) を含めることができます - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - クラスの詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - メンバーの詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 単純な 2 次元のベクター クラス。 - - - - The class's constructor is on the first line, - クラスのコンストラクターは最初の行にあり、 - - - - and takes two arguments: dx and dy, both of type 'double'. - また、dx と dy の 2 つの引数を取ります。どちらも 'double' 型です。 - - - - This internal field stores the length of the vector, computed when the - この内部フィールドはベクトルの長さを格納します。これは、次の時点でにコンピューティングされます: - - - - object is constructed - オブジェクトが構築されます - - - - 'this' specifies a name for the object's self identifier. - 'this' は、オブジェクトの自己識別子の名前を指定します。 - - - - In instance methods, it must appear before the member name. - インスタンス メソッドでは、メンバー名の前に表示される必要があります。 - - - - This member is a method. The previous members were properties. - このメンバーはメソッドです。前のメンバーはプロパティでした。 - - - - This is how you instantiate the Vector2D class. - これは、Vector2D クラスのインスタンスを作成する方法です。 - - - - Get a new scaled vector object, without modifying the original object. - 元のオブジェクトを変更せずに、新しく調節されたベクター オブジェクトを取得します。 - - - - Generic classes allow types to be defined with respect to a set of type parameters. - ジェネリック クラスでは、型パラメーターのセットに対して型を定義することができます。 - - - - In the following, 'T is the type parameter for the class. - 以下では、'T はクラスの型パラメーターです。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - この内部フィールドは状態をリストに保存します。 - - - - Add a new element to the list of states. - 状態のリストに新しい要素を追加します。 - - - - use the '<-' operator to mutate the value. - '<-' 演算子を使用して、値を変換します。 - - - - Get the entire list of historical states. - 状態の履歴のリスト全体を取得します。 - - - - Get the latest state. - 最新の状態を取得します。 - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 状態トラッカー クラスの 'int' インスタンス。型パラメーターは推論されていることに注意してください。 - - - - Add a state - 状態を追加します - - - - Interfaces are object types with only 'abstract' members. - インターフェイスは 'abstract' メンバーのみを持つオブジェクト型です。 - - - - Object types and object expressions can implement interfaces. - オブジェクト型とオブジェクト式はインターフェイスを実装できます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - これは IDisposable を実装する型です。 - - - - This is the implementation of IDisposable members. - これは IDisposable メンバーの実装です。 - - - - This is an object that implements IDisposable via an Object Expression - これは、オブジェクト式を使用して IDisposable を実装するオブジェクトです - - - - Unlike other languages such as C# or Java, a new type definition is not needed - C# や Java などの他の言語とは異なり、インターフェイスを実装するために - - - - to implement an interface. - 新しい型定義は必要ありません。 - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core ライブラリは並列処理関数の範囲を定義します。ここでは - - - - you use some functions for parallel processing over arrays. - アレイ全体で並列処理に対していくつかの関数を使用できます。 - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 詳細については、次を参照してください: https://msdn.microsoft.com/ja-jp/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - まず、入力の配列です。 - - - - Next, define a functions that does some CPU intensive computation. - 次に、CPU 集約型の計算を実行する関数を定義します。 - - - - Next, do a parallel map over a large input array. - 次に、大きい入力配列に対して並列マップを実行します。 - - - - Next, print the results. - 次に、結果を印刷します。 - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - イベントは、特に WinForms または WPF アプリケーションでの .NET プログラミングの一般的な用法です。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - まず、サブスクリプション ポイント (event.Publish) およびイベント トリガー (event.Trigger) で構成されるイベント オブジェクトのインスタンスを作成します。 - - - - Next, add handler to the event. - 次に、ハンドラーをイベントに追加します。 - - - - Next, trigger the event. - 次に、イベントをトリガーします。 - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 次に、標準的な .NET 表記規則に従うイベントのインスタンスを作成します: (sender, EventArgs)。 - - - - Next, add a handler for this new event. - 次に、この新しいイベントのハンドラーを追加します。 - - - - Next, trigger this event (note that sender argument should be set). - 次に、このイベントをトリガーします (sender 引数を設定する必要があります)。 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf deleted file mode 100644 index 7e8e4a4de4..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - 이 샘플에서는 F# 언어의 요소에 대해 안내합니다. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - F# 대화형에서 코드를 실행하려면 코드 섹션을 강조 표시하고 <Alt+Enter>를 누르거나 마우스 오른쪽 단추를 클릭한 다음 - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - "대화형으로 실행"을 선택하세요. "보기" 메뉴에서 F# 대화형 창을 열 수 있습니다. - - - - For more about F#, see: - F#에 대한 자세한 내용은 다음을 참조하세요. - - - - To see this tutorial in documentation form, see: - 이 자습서를 설명서 형식으로 보려면 다음을 참조하세요. - - - - To learn more about applied F# programming, use - 적용된 F# 프로그래밍에 대해 자세히 알아보려면 다음을 사용하세요. - - - - To install the Visual F# Power Tools, use - Visual F# Power 도구를 설치하려면 다음을 사용하세요. - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - '도구' --> '확장 및 업데이트' --> `온라인`으로 이동하고 검색합니다. - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - F#과 함께 사용할 수 있는 추가 템플릿은 Visual Studio의 다음 위치에서 '온라인 템플릿'을 참조하세요. - - - - 'New Project' --> 'Online Templates' - '새 프로젝트' --> '온라인 템플릿' - - - - F# supports three kinds of comments: - F#에서는 세 가지 종류의 주석을 지원합니다. - - - - 1. Double-slash comments. These are used in most situations. - 1. 이중 슬래시 주석은 대부분의 경우에 사용됩니다. - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML 스타일 블록 주석은 자주 사용되지 않습니다. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. 삼중 슬래시 주석은 함수, 형식 등을 설명하는 경우에 사용됩니다. - - - - They will appear as text when you hover over something which is decorated with these comments. - 이러한 주석으로 데코레이트된 항목 위에 마우스를 올리면 텍스트로 표시됩니다. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - 참조 문서를 생성할 수 있는 .NET 스타일 XML 주석도 지원하며, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - 또한 편집기(예: Visual Studio)에서 정보를 추출할 수 있도록 합니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 'open' 키워드를 사용하여 네임스페이스를 엽니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - 모듈은 값, 형식, 함수 값 같은 F# 코드의 그룹화입니다. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - 모듈로 코드를 그룹화하면 관련 코드를 함께 유지하고 프로그램에서 이름 충돌을 방지하는 데 도움이 됩니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - 샘플 정수입니다. - - - - This is a sample floating point number. - 샘플 부동 소수점 숫자입니다. - - - - This computed a new number by some arithmetic. Numeric types are converted using - 산술을 사용하여 새 수를 계산했습니다. 숫자 형식은 - - - - functions 'int', 'double' and so on. - 'int', 'double' 등의 함수를 사용하여 변환됩니다. - - - - This is a list of the numbers from 0 to 99. - 0에서 99까지의 숫자 목록입니다. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - 0에서 99까지의 모든 숫자와 제곱을 포함하는 모든 튜플 목록입니다. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 다음 줄은 제네릭 출력에 대해 '%A'을(를) 사용하여 튜플을 포함하는 목록을 출력합니다. - - - - This is a sample integer with a type annotation - 형식 주석이 있는 샘플 정수입니다. - - - - Values in F# are immutable by default. They cannot be changed - F#의 값은 기본적으로 변경할 수 없습니다. 변경 가능으로 - - - - in the course of a program's execution unless explicitly marked as mutable. - 명시적으로 표시되지 않는 한 프로그램 실행 중 변경할 수 없습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 'let'을 통해 값을 이름에 바인딩하면 값을 변경할 수 없게 됩니다. - - - - The second line of code fails to compile because 'number' is immutable and bound. - 'number'는 변경이 불가능하고 바인딩되어 있으므로 코드의 두 번째 줄이 컴파일되지 않습니다. - - - - Re-defining 'number' to be a different value is not allowed in F#. - F#에서는 'number'를 다른 값으로 다시 정의할 수 없습니다. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 변경할 수 있는 바인딩은 'otherNumber' 값을 변경하기 위해 필요합니다. - - - - When mutating a value, use '<-' to assign a new value. - 값을 변경할 때는 '<-'를 사용하여 새 값을 할당하세요. - - - - You could not use '=' here for this purpose since it is used for equality - '='이 같음에 대해 사용되지 않으므로 여기에서 이 용도로 '='을 사용할 수 없습니다. - - - - or other contexts such as 'let' or 'module' - 또는 'let'이나 'module' 같은 기타 컨텍스트 - - - - Much of F# programming consists of defining functions that transform input data to produce - 대부분의 F# 프로그래밍은 유용한 결과를 생성하기 위해 입력 데이터를 변환하는 함수 정의로 - - - - useful results. - 구성됩니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 'let'을 사용하여 정수 인수를 받고 정수를 반환하는 함수를 정의합니다. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 괄호는 명시적 형식 주석을 사용하는 경우 외에는 함수 인수에 선택적으로 사용할 수 있습니다. - - - - Apply the function, naming the function return result using 'let'. - 함수를 적용하고, 'let'을 사용하여 함수 반환 결과에 이름을 지정합니다. - - - - The variable type is inferred from the function return type. - 변수 형식은 함수 반환 형식에서 유추됩니다. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - 이 줄은 '%d'을(를) 사용하여 결과를 integer로 인쇄합니다. 이 코드는 형식이 안전합니다. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 'result1'이 'int' 형식이 아닌 경우 줄이 컴파일되지 않습니다. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 필요한 경우 '(argument:type)'을 사용하여 매개 변수 이름 형식에 대한 주석을 답니다. 괄호가 필요합니다. - - - - Conditionals use if/then/elid/elif/else. - 조건은 if/then/elid/elif/else를 사용합니다. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - F#은 Python과 같은 언어처럼 공백 들여쓰기 인식 구문을 사용합니다. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - 이 줄은 '%f'을(를) 사용하여 결과를 float으로 인쇄합니다. 위의 '%d'처럼 이 코드는 형식이 안전합니다. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - 부울은 F#에서 기본적인 데이터 형식입니다. 다음은 부울 및 조건부 논리의 몇 가지 예입니다. - - - - To learn more, see: - 자세히 알아보려면 다음을 참조하세요. - - - - and - 그리고 - - - - Booleans values are 'true' and 'false'. - 부울 값은 'true' 및 'false'입니다. - - - - Operators on booleans are 'not', '&&' and '||'. - 부울의 연산자는 'not', '&&' 및 '||'입니다. - - - - This line uses '%b'to print a boolean value. This is type-safe. - 이 줄은 '%b'을(를) 사용하여 부울 값을 인쇄합니다. 이 코드는 형식이 안전합니다. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 문자열은 F#에서 기본적인 데이터 형식입니다. 다음은 문자열 및 기본 문자열 조작의 몇 가지 예입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 문자열은 큰따옴표를 사용합니다. - - - - Strings can also use @ to create a verbatim string literal. - 또한 문자열은 @을 사용하여 축자 문자열 리터럴을 만듭니다. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - 이 경우 '\', '\n', '\t' 등과 같은 이스케이프 문자열을 무시합니다. - - - - String literals can also use triple-quotes. - 또한 문자열 리터럴은 세 따옴표를 사용합니다. - - - - String concatenation is normally done with the '+' operator. - 문자열 연결은 일반적으로 '+' 연산자로 합니다. - - - - This line uses '%s' to print a string value. This is type-safe. - 이 줄은 '%s'을(를) 사용하여 문자열 값을 인쇄합니다. 이 코드는 형식이 안전합니다. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - 부분 문자열은 인덱서 표기법을 사용합니다. 이 줄은 처음 7개 문자를 부분 문자열로 추출합니다. - - - - Note that like many languages, Strings are zero-indexed in F#. - 다른 여러 언어처럼 F#에서는 문자열이 0으로 인덱싱됩니다. - - - - Tuples are simple combinations of data values into a combined value. - 튜플은 데이터 값을 조합된 값으로 만드는 간단한 조합입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 단순한 정수 튜플입니다. - - - - A function that swaps the order of two values in a tuple. - 튜플에 있는 두 값의 순서를 바꾸는 함수입니다. - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 형식 유추에서는 자동으로 함수를 제너릭 형식으로 일반화하므로, - - - - meaning that it will work with any type. - 모든 형식에 사용할 수 있습니다. - - - - A tuple consisting of an integer, a string, - 정수, 문자열 및 배정밀도 부동 소수점 - - - - and a double-precision floating point number. - 숫자로 구성된 튜플입니다. - - - - A simple tuple of integers with a type annotation. - 형식 주석이 포함된 단순한 정수 튜플입니다. - - - - Type annotations for tuples use the * symbol to separate elements - 튜플에 대한 형식 주석은 * 기호를 사용하여 요소를 구분합니다. - - - - Tuples are normally objects, but they can also be represented as structs. - 튜플은 일반적으로 개체이지만 구조체로 나타낼 수도 있습니다. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - 이러한 구조체는 C# 및 Visual Basic.NET의 구조체와 완벽히 상호 운용되지만, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 구조체 튜플은 개체 튜플(참조 튜플이라고도 함)로 암시적인 변환을 할 수 없습니다. - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - 이로써 아래 두 번째 줄은 컴파일되지 않으며 결과를 확인하려면 이 줄의 주석 처리를 제거하세요. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 구조체 튜플과 참조 튜플 간을 암시적으로 변환할 수 없지만, - - - - you can explicitly convert via pattern matching, as demonstrated below. - 아래 설명된 것처럼 패턴 일치를 통해 명시적으로 변환할 수 있습니다. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# 파이프 연산자('|>', '<|' 등) 및 F# 합성 연산자('>>', '<<')는 - - - - are used extensively when processing data. These operators are themselves functions - 데이터를 처리할 때 광범위하게 사용됩니다. 이러한 연산자는 자체가 함수이며 - - - - which make use of Partial Application. - 부분 애플리케이션을 사용합니다. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - 이러한 연산자에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 부분 애플리케이션에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 값을 제곱합니다. - - - - Adds 1 to a value. - 값에 1을 더합니다. - - - - Tests if an integer value is odd via modulo. - 모듈로를 통해 정수 값이 홀수인지 테스트합니다. - - - - A list of 5 numbers. More on lists later. - 5개 숫자 목록입니다. 추가 숫자는 나중에 표시됩니다. - - - - Given a list of integers, it filters out the even numbers, - 정수 목록인 경우 짝수를 필터링하고, - - - - squares the resulting odds, and adds 1 to the squared odds. - 결과 홀수를 제곱하고 제곱한 홀수에 1을 더합니다. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 'squareOddValuesAndAddOne'을 더 짧게 작성하려면 - - - - sub-result into the function calls themselves. - 각 하위 결과를 함수 호출 자체에 중첩합니다. - - - - This makes the function much shorter, but it's difficult to see the - 그러면 함수가 더 짧아지지만 데이터가 처리되는 순서를 - - - - order in which the data is processed. - 알아보기 어렵습니다. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 'squareOddValuesAndAddOne'을 작성하려면 기본적으로 F# 파이프 연산자를 사용합니다. - - - - This allows you to avoid creating intermediate results, but is much more readable - 그러면 중간 결과를 생성하지 않아도 되며 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 'squareOddValuesAndAddOneNested'와 같이 함수 호출을 중첩할 때보다 읽기도 쉽습니다. - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 'squareOddValuesAndAddOnePipeline'을 줄이려면 두 번째 `List.map` 호출을 - - - - into the first, using a Lambda Function. - 람다 함수를 사용하여 첫 번째로 이동합니다. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - 파이프라인은 람다 함수 내에도 사용됩니다. F# 파이프 연산자는 - - - - can be used for single values as well. This makes them very powerful for processing data. - 단일 값에도 사용할 수 있습니다. 따라서 데이터 처리에 매우 유용합니다. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 마지막으로 명시적으로 'values'를 매개 변수로 사용할 필요가 없습니다. '>>'를 사용하여 - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 짝수를 필터링한 다음 제곱하고 1을 더하는 두 가지 핵심 작업을 작성하면 됩니다. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 마찬가지로 'fun x -> ...' 람다 식도 필요하지 않습니다. 'x'를 해당 범위에서 간단히 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 정의하여 함수 파이프라인에 전달할 수 있기 때문입니다. 따라서 여기에서도 '>>'를 - - - - there as well. - 사용할 수 있습니다. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition'의 결과 자체도 정수 목록을 입력으로 사용하는 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 다른 함수입니다. 'squareOddValuesAndAddOneComposition'을 정수 목록을 사용하여 - - - - of integers, you'll notice that it produces the same results as previous functions. - 실행하는 경우 이전 함수와 동일한 결과를 생성합니다. - - - - This is using what is known as function composition. This is possible because functions in F# - 여기서는 이른바 함수 컴퍼지션을 사용합니다. 이것이 가능한 이유는 F#의 함수가 - - - - use Partial Application and the input and output types of each data processing operation match - 부분 애플리케이션을 사용하고 각 데이터 처리 작업의 입력 및 출력 형식이 사용 중인 함수의 - - - - the signatures of the functions we're using. - 시그니처와 일치하기 때문입니다. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - 순서가 지정되고 변경 불가능한 단일 연결 목록으로 즉시 평가됩니다. - - - - This module shows various ways to generate lists and process lists with some functions - 이 모듈에서는 F# 주요 라이브러리의 'List' 모듈에 있는 일부 함수를 사용하여 목록을 생성하고 - - - - in the 'List' module in the F# Core Library. - 목록을 처리하는 다양한 방법을 보여 줍니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - 목록은 [ ... ]을 사용하여 정의됩니다. 이것은 빈 목록입니다. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - 3개 요소가 포함된 목록입니다. 동일한 줄에서 ';'을 사용하여 요소를 구분합니다. - - - - You can also separate elements by placing them on their own lines. - 요소를 다른 줄에 배치하여 요소를 구분할 수도 있습니다. - - - - This is a list of integers from 1 to 1000 - 이것은 1에서 1000까지의 정수 리스트입니다. - - - - Lists can also be generated by computations. This is a list containing - 리스트는 계산에 의해서도 생성될 수 있습니다. 다음은 - - - - all the days of the year. - 연중 모든 날짜를 포함하는 리스트입니다. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 'daysList'의 처음 5개 요소를 'List.take'를 사용하여 인쇄합니다. - - - - Computations can include conditionals. This is a list containing the tuples - 계산은 조건을 포함할 수 있습니다. 다음은 - - - - which are the coordinates of the black squares on a chess board. - 체스 보드에서 검은색 칸의 좌표를 가리키는 튜플이 포함된 리스트입니다. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - 리스트는 'List.map' 및 기타 함수 프로그래밍 조합기를 사용하여 변환될 수 있습니다. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - 이 정의는 인수를 List.map으로 전달하기 위해 파이프라인 연산자를 사용하여 numberList의 숫자를 - - - - operator to pass an argument to List.map. - 제곱하여 새 리스트를 생성합니다. - - - - There are many other list combinations. The following computes the sum of the squares of the - 다른 리스트 조합이 많이 있습니다. 다음은 - - - - numbers divisible by 3. - 3으로 나눠지는 수의 제곱의 합을 계산합니다. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 배열은 고정 크기이며 같은 형식의 요소로 구성된 변경 가능한 컬렉션입니다. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - 배열은 목록과 마찬가지로 열거형을 지원하고 데이터 처리를 위한 유사한 조합기를 사용하지만, - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 배열은 일반적으로 더 빠르고 빠른 임의 액세스를 지원합니다. 변경이 가능하므로 덜 안전하다는 단점은 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - 빈 배열입니다. 목록의 구문과 유사하지만 `[| ... |]`을 대신 사용합니다. - - - - Arrays are specified using the same range of constructs as lists. - 배열은 리스트와 같은 범위의 구문을 사용하여 지정됩니다. - - - - This is an array of numbers from 1 to 1000. - 1에서 1000까지의 숫자 배열입니다. - - - - This is an array containing only the words "hello" and "world". - "hello"와 "world"라는 단어만 포함된 배열입니다. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - 0에서 2000까지의 짝수가 포함되고 인덱스로 초기화된 배열입니다. - - - - Sub-arrays are extracted using slicing notation. - 하위 배열은 조각화 표기법을 사용하여 추출됩니다. - - - - You can loop over arrays and lists using 'for' loops. - 'for' 루프를 사용하여 배열 및 목록을 반복할 수 있습니다. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 왼쪽 화살표 대입 연산자를 사용하여 배열 요소의 내용을 수정할 수 있습니다. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - 이 연산자에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 'Array'map' 및 기타 함수 프로그래밍 연산을 사용하여 배열을 변환할 수 있습니다. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 다음은 'h'로 시작하는 단어 길이의 합을 계산합니다. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - 시퀀스는 모두 형식이 같은 요소가 논리적으로 연속되는 것입니다. 목록 및 배열보다 일반적인 형식입니다. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - 시퀀스는 요청 시 계산되며 반복될 때마다 다시 계산됩니다. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# 시퀀스는 .NET System.Collections.Generic.IEnumerable<'T>의 별칭입니다. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - 시퀀스 처리 함수는 리스트와 배열 모두에 적용할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - 빈 시퀀스입니다. - - - - This a sequence of values. - 시퀀스 값입니다. - - - - This is an on-demand sequence from 1 to 1000. - 1에서 1000까지의 요청 시 시퀀스입니다. - - - - This is a sequence producing the words "hello" and "world" - "hello"와 "world"라는 단어를 생성하는 시퀀스입니다. - - - - This sequence producing the even numbers up to 2000. - 2000까지의 짝수를 생성하는 시퀀스입니다. - - - - This is an infinite sequence which is a random walk. - 임의 행로인 무한 시퀀스입니다. - - - - This example uses yield! to return each element of a subsequence. - 이 예에서는 yield!를 사용하여 하위 시퀀스의 각 요소를 반환합니다. - - - - This example shows the first 100 elements of the random walk. - 이 예에서는 임의 행로의 처음 100개 요소를 보여 줍니다. - - - - Recursive functions can call themselves. In F#, functions are only recursive - 재귀 함수는 자신을 호출할 수 있습니다. F#에서 함수는 - - - - when declared using 'let rec'. - 'let rec'을 사용하여 선언할 때에만 반복됩니다. - - - - Recursion is the preferred way to process sequences or collections in F#. - 재귀는 F#에서 시퀀스 또는 컬렉션을 처리하는 기본 방법입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 자세히 알아보려면 https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions를 참조하세요. - - - - This example shows a recursive function that computes the factorial of an - 이 예에서는 정수의 계승을 계산하는 재귀 함수를 보여 줍니다. - - - - integer. It uses 'let rec' to define a recursive function. - 'let rec'를 사용하여 재귀 함수를 정의합니다. - - - - Computes the greatest common factor of two integers. - 두 정수의 최대 공약수를 계산합니다. - - - - Since all of the recursive calls are tail calls, - 모든 재귀 호출은 마무리 호출이므로, - - - - the compiler will turn the function into a loop, - 컴파일러에서는 함수를 루프로 전환합니다. - - - - which improves performance and reduces memory consumption. - 루프는 성능을 향상시키고 메모리 소비량을 줄여 줍니다. - - - - This example computes the sum of a list of integers using recursion. - 이 예제에서는 재귀를 사용하여 정수 목록의 합을 계산합니다. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 도우미 함수와 결과 누적기를 사용하여 'sumList'를 마무리 재귀 함수로 만듭니다. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - '0'을 시드 누적기로 제공하여 마무리 재귀 도우미 함수를 호출합니다. - - - - An approach like this is common in F#. - F#에서 이와 같은 접근 방식이 일반적입니다. - - - - Records are an aggregate of named values, with optional members (such as methods). - 레코드는 명명된 값의 집계이며, 필요에 따라 메서드와 같은 선택적 멤버도 포함합니다. - - - - They are immutable and have structural equality semantics. - 레코드는 변경 불가능하며 구조적으로 같음 의미 체계가 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - 이 예에서는 새 레코드 형식을 정의하는 방법을 보여 줍니다. - - - - This example shows how to instantiate a record type. - 이 예제에서는 레코드 형식을 인스턴스화하는 방법을 보여 줍니다. - - - - You can also do this on the same line with ';' separators. - 동일한 줄에서 ';' 구분 기호를 사용하여 이 작업을 수행할 수도 있습니다. - - - - This example shows how to use "copy-and-update" on record values. It creates - 이 예에서는 레코드 값에 "copy-and-update"를 사용하는 방법을 보여 줍니다. - - - - a new record value that is a copy of contact1, but has different values for - contact1의 복사본인 새 레코드 값을 만들지만 - - - - the 'Phone' and 'Verified' fields. - 'Phone'과 'Verified' 필드의 값이 다릅니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - 이 예에서는 레코드 값을 처리하는 함수를 작성하는 방법을 보여 줍니다. - - - - It converts a 'ContactCard' object to a string. - 'ContactCard' 개체를 문자열로 변환합니다. - - - - This is an example of a Record with a member. - 멤버가 하나인 레코드의 예제입니다. - - - - Members can implement object-oriented members. - 멤버는 개체 지향 멤버를 구현할 수 있습니다. - - - - Members are accessed via the '.' operator on an instantiated type. - 인스턴스화된 형식에서 '.' 연산자를 통해 멤버에 액세스합니다. - - - - Records can also be represented as structs via the 'Struct' attribute. - 'Struct' 특성을 통해 레코드를 구조체로 나타낼 수도 있습니다. - - - - This is helpful in situations where the performance of structs outweighs - 구조체 성능이 참조 형식의 유연성보다 중요한 경우에 - - - - the flexibility of reference types. - 유용합니다. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 구분된 공용 구조체(줄여서 DU)는 여러 명명된 폼 또는 케이스일 수 있는 값입니다. - - - - Data stored in DUs can be one of several distinct values. - DU에 저장된 데이터는 여러 고유한 값 중 하나일 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - 다음은 플레인 카드의 짝패를 나타냅니다. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 구분된 공용 구조체를 사용하여 플레잉 카드의 순위를 나타낼 수도 있습니다. - - - - Represents the rank of cards 2 .. 10 - 카드 2부터 10까지의 순위를 나타냅니다. - - - - Discriminated Unions can also implement object-oriented members. - 구분된 공용 구조체는 개체 지향 멤버도 구현할 수 있습니다. - - - - This is a record type that combines a Suit and a Rank. - 짝패와 순위를 조합하는 레코드 형식입니다. - - - - It's common to use both Records and Disciminated Unions when representing data. - 일반적으로 레코드와 구분된 공용 구조체를 모두 사용하여 데이터를 나타냅니다. - - - - This computes a list representing all the cards in the deck. - 데크에 있는 모든 카드를 나타내는 목록을 계산합니다. - - - - This example converts a 'Card' object to a string. - 이 예에서는 'Card' 개체를 문자열로 변환합니다. - - - - This example prints all the cards in a playing deck. - 이 예에서는 플레잉 데크의 모든 카드를 인쇄합니다. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 단일 케이스 DU를 도메인 모델링에 사용하는 경우가 많습니다. 그러면 문자열 및 정수와 같은 - - - - over primitive types such as strings and ints. - 기본 형식보다 형식 안전성을 추가로 얻을 수 있습니다. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 단일 케이스 DU를 래핑하는 형식으로 암시적으로 변환하거나 반대로 변환할 수 없습니다. - - - - For example, a function which takes in an Address cannot accept a string as that input, - 예를 들어 주소에서 사용하는 함수는 문자열을 입력으로 사용할 수 없으며, - - - - or vive/versa. - 그 반대도 마찬가지입니다. - - - - You can easily instantiate a single-case DU as follows. - 다음과 같이 단일 케이스 DU를 쉽게 인스턴스화할 수 있습니다. - - - - When you need the value, you can unwrap the underlying value with a simple function. - 값이 필요하면 간단한 함수로 내부 값을 래핑 해제할 수 있습니다. - - - - Printing single-case DUs is simple with unwrapping functions. - 래핑 해제 함수로 단일 케이스 DU를 간단히 인쇄할 수 있습니다. - - - - Disciminated Unions also support recursive definitions. - 구분된 공용 구조체는 재귀 정의도 지원합니다. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - 이진 검색 트리를 나타냅니다. 여기서 한 케이스는 빈 트리이고 - - - - and the other being a Node with a value and two subtrees. - 다른 케이스는 값과 두 개의 하위 트리를 포함하는 노드입니다. - - - - Check if an item exists in the binary search tree. - 이진 검색 트리에 항목이 있는지 확인합니다. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - 패턴 일치를 사용하여 재귀적으로 검색합니다. 있으면 true를 반환하고 그렇지 않은 경우 false를 반환합니다. - - - - Check the left subtree. - 왼쪽 하위 트리를 확인합니다. - - - - Check the right subtree. - 오른쪽 하위 트리를 확인합니다. - - - - Inserts an item in the Binary Search Tree. - 이진 검색 트리에 항목을 삽입합니다. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - 패턴 일치를 사용하여 재귀적으로 삽입할 위치를 찾은 다음 새 노드를 삽입합니다. - - - - If the item is already present, it does not insert anything. - 항목이 이미 있으면 아무 항목도 삽입하지 않습니다. - - - - No need to insert, it already exists; return the node. - 이미 항목이 있으므로 삽입할 필요가 없습니다. 노드를 반환합니다. - - - - Call into left subtree. - 왼쪽 하위 트리를 호출합니다. - - - - Call into right subtree. - 오른쪽 하위 트리를 호출합니다. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 'Struct' 특성을 통해 구분된 공용 구조체를 구조체로 나타낼 수도 있습니다. - - - - This is helpful in situations where the performance of structs outweighs - 구조체 성능이 참조 형식의 유연성보다 중요한 경우에 - - - - the flexibility of reference types. - 유용합니다. - - - - However, there are two important things to know when doing this: - 하지만 이 작업을 수행할 때는 다음 두 가지 중요한 사항을 알고 있어야 합니다. - - - - 1. A struct DU cannot be recursively-defined. - 1. 구조체 DU는 재귀적으로 정의할 수 없습니다. - - - - 2. A struct DU must have unique names for each of its cases. - 2. 각 케이스마다 구조체 DU의 이름이 고유해야 합니다. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - 패턴 일치는 패턴을 활용할 수 있는 F#의 기능이며, - - - - which are a way to compare data with a logical structure or structures, - 패턴을 사용하면 데이터를 논리 구조와 비교하거나, - - - - decompose data into constituent parts, or extract information from data in various ways. - 데이터를 구성 부분으로 분해하거나, 다양한 방법으로 데이터에서 정보를 추출할 수 있습니다. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - 그런 다음 패턴 일치를 사용하여 패턴의 "모양"을 디스패치할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 사람의 성과 이름에 대한 레코드입니다. - - - - A Discriminated Union of 3 different kinds of employees - 세 가지 다른 직원 유형이 있는 구분된 공용 구조체 - - - - Count everyone underneath the employee in the management hierarchy, - 관리 계층 구조에서 이 직원을 포함하여 이 아래에 있는 모든 직원의 수를 - - - - including the employee. - 셉니다. - - - - Find all managers/executives named "Dave" who do not have any reports. - 이름이 "Dave"이고 부하직원이 없는 모든 관리자/간부를 찾습니다. - - - - This uses the 'function' shorthand to as a lambda expression. - 여기서는 'function' 약어를 람다 식으로 사용합니다. - - - - [] matches an empty list. - []는 빈 목록과 일치합니다. - - - - '_' is a wildcard pattern that matches anything. - '_'는 모든 항목과 일치하는 와일드카드 패턴입니다. - - - - This handles the "or else" case. - 이 와일드카드 패턴은 "or else" 케이스를 처리합니다. - - - - You can also use the shorthand function construct for pattern matching, - 패턴 일치에 약어 형식 함수 구문을 사용할 수도 있습니다. - - - - which is useful when you're writing functions which make use of Partial Application. - 이 구문은 부분 애플리케이션을 사용하는 함수를 작성할 때 유용합니다. - - - - Define some more functions which parse with the helper function. - 도우미 함수를 사용하여 구문 분석하는 함수를 더 정의합니다. - - - - Active Patterns are another powerful construct to use with pattern matching. - 활성 패턴은 패턴 일치와 함께 사용하면 유용한 다른 구문입니다. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - 활성 패턴을 사용하면 입력 데이터를 사용자 지정 폼으로 분할하고, 패턴 일치 호출 사이트에서 이 폼을 분해할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 'function' 키워드 및 활성 패턴을 통한 패턴 일치는 이처럼 보이는 경우가 많습니다. - - - - Call the printer with some different values to parse. - 구문 분석할 다른 값을 사용하여 프린터를 호출합니다. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - 옵션 값에는 'Some' 또는 'None'으로 태그 처리된 모든 종류의 값을 사용할 수 있습니다. - - - - They are used extensively in F# code to represent the cases where many other - F# 코드에서 광범위하게 사용되어 다른 언어에서는 null 참조를 사용하는 케이스를 - - - - languages would use null references. - 나타냅니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - 먼저 단일 케이스 구분된 공용 구조체를 통해 정의된 우편 번호를 정의합니다. - - - - Next, define a type where the ZipCode is optional. - 다음으로 ZipCode가 선택 사항인 형식을 정의합니다. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 그리고 고객의 우편 번호에 대한 배송 영역을 계산하기 위해 개체를 나타내는 인터페이스 형식을 정의합니다. - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 고객의 우편 번호에 대한 쇼핑 지역을 계산하는 추상 클래스입니다. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 다음으로 계산기 인스턴스를 사용하여 고객의 배송 영역을 계산합니다. - - - - This uses combinators in the Option module to allow a functional pipeline for - 여기서는 Option 모듈 내의 조합기를 사용하여 함수 파이프라인에서 - - - - transforming data with Optionals. - Optionals를 통해 데이터를 변환할 수 있게 합니다. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 측정 단위를 사용하면 형식이 안전한 방식으로 기본 숫자 형식에 주석을 달 수 있습니다. - - - - You can then perform type-safe arithmetic on these values. - 그런 다음 이러한 값에 대해 형식이 안전한 산술 연산을 수행할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - 먼저 일반적인 단위 이름의 컬렉션을 엽니다. - - - - Define a unitized constant - 결합된 상수 정의 - - - - Next, define a new unit type - 다음으로 새 단위 형식을 정의합니다. - - - - Conversion factor mile to meter. - 마일 대 미터 변환 비율입니다. - - - - Define a unitized constant - 결합된 상수 정의 - - - - Compute metric-system constant - 미터 단위 상수를 계산합니다. - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 측정 단위를 사용하는 값은 인쇄와 같은 작업에 기본 숫자 형식처럼 사용할 수 있습니다. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - 클래스는 F#에서 새 개체 형식을 정의하는 방법이며 표준 개체 지향 구문을 지원합니다. - - - - They can have a variety of members (methods, properties, events, etc.) - 클래스는 다양한 멤버(메서드, 속성, 이벤트 등)를 포함할 수 있습니다. - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - 클래스에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - 멤버에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 단순한 2차원 벡터 클래스입니다. - - - - The class's constructor is on the first line, - 클래스의 생성자는 첫 줄에 있고, - - - - and takes two arguments: dx and dy, both of type 'double'. - 'double' 형식의 두 인수 dx 및 dy를 사용합니다. - - - - This internal field stores the length of the vector, computed when the - 이 내부 필드는 개체가 생성될 때 계산된 벡터 길이를 - - - - object is constructed - 저장합니다. - - - - 'this' specifies a name for the object's self identifier. - 'this'는 개체 자체의 식별자에 대한 이름을 지정합니다. - - - - In instance methods, it must appear before the member name. - 인스턴스 메서드에서는 멤버 이름 앞에 와야 합니다. - - - - This member is a method. The previous members were properties. - 이 멤버는 메서드입니다. 이전 멤버는 속성이었습니다. - - - - This is how you instantiate the Vector2D class. - Vector2D 클래스를 인스턴스화하는 방법은 다음과 같습니다. - - - - Get a new scaled vector object, without modifying the original object. - 원래 개체를 수정하지 않고 비율이 조정된 새 벡터 개체를 가져옵니다. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - 제네릭 클래스를 통해 형식 매개변수 집합에 대해 형식을 정의할 수 있습니다. - - - - In the following, 'T is the type parameter for the class. - 다음에서 'T는 클래스의 형식 매개 변수입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - 이 내부 필드는 목록에 상태를 저장합니다. - - - - Add a new element to the list of states. - 상태 리스트에 새 요소를 추가합니다. - - - - use the '<-' operator to mutate the value. - '<-' 연산자를 사용하여 값을 변경합니다. - - - - Get the entire list of historical states. - 기록 상태의 전체 목록을 가져옵니다. - - - - Get the latest state. - 최신 상태를 가져옵니다. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 상태 추적기 클래스의 'int' 인스턴스입니다. 형식 매개 변수는 유추됩니다. - - - - Add a state - 상태를 추가합니다. - - - - Interfaces are object types with only 'abstract' members. - 인터페이스는 '추상' 멤버만 있는 개체 형식입니다. - - - - Object types and object expressions can implement interfaces. - 개체 형식 및 개체 식은 인터페이스를 구현할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - IDisposable를 구현하는 형식입니다. - - - - This is the implementation of IDisposable members. - IDisposable 멤버의 구현입니다. - - - - This is an object that implements IDisposable via an Object Expression - 개체 식을 통해 IDisposable을 구현하는 개체입니다. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - C# 또는 Java와 같은 다른 언어와 달리 인터페이스를 구현하기 위해 새 형식 정의가 - - - - to implement an interface. - 필요하지 않습니다. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core 라이브러리는 병렬 처리 함수 범위를 정의합니다. - - - - you use some functions for parallel processing over arrays. - 여기에서 배열에 대해 병렬 처리 함수를 사용합니다. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 자세히 알아보려면 다음을 참조하세요. https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - 먼저 입력 배열입니다. - - - - Next, define a functions that does some CPU intensive computation. - 다음으로 CPU를 많이 사용하는 계산을 수행하는 함수를 정의합니다. - - - - Next, do a parallel map over a large input array. - 다음으로 큰 입력 배열에 대해 병렬 맵을 수행합니다. - - - - Next, print the results. - 다음으로 결과를 인쇄합니다. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - 이벤트는 특히 WinForms 또는 WPF 애플리케이션을 사용하는 .NET 프로그래밍에서 일반적으로 사용되는 말입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - 먼저 구독 지점(event.Publish)과 이벤트 트리거(event.Trigger)로 구성된 Event 개체의 인스턴스를 만듭니다. - - - - Next, add handler to the event. - 다음으로 이벤트에 처리기를 추가합니다. - - - - Next, trigger the event. - 다음으로 이벤트를 트리거합니다. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 다음으로 표준 .NET 규칙(sender, EventArgs)을 따르는 Event의 인스턴스를 만듭니다. - - - - Next, add a handler for this new event. - 다음으로 이 새 이벤트에 대한 처리기를 추가합니다. - - - - Next, trigger this event (note that sender argument should be set). - 다음으로 이 이벤트를 트리거합니다(sender 인수를 설정해야 함). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf deleted file mode 100644 index 9ee0ae09ae..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Ten przykład zawiera opis elementów języka F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Aby wykonać kod w programie F# Interactive, zaznacz sekcję kodu i naciśnij kombinację klawiszy Alt-Enter lub kliknij prawym przyciskiem myszy, - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - a następnie wybierz opcję „Wykonaj w trybie interaktywnym”. Okno narzędzia F# Interactive można otworzyć z menu „Widok”. - - - - For more about F#, see: - Aby uzyskać więcej informacji o języku F#, zobacz: - - - - To see this tutorial in documentation form, see: - Aby wyświetlić ten samouczek w formie dokumentacji, zobacz: - - - - To learn more about applied F# programming, use - Aby dowiedzieć się więcej o programowaniu w języku F# w praktyce, użyj - - - - To install the Visual F# Power Tools, use - Aby zainstalować narzędzia Visual F# Power Tools, użyj - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - „Narzędzia” --> „Rozszerzenia i aktualizacje” --> „Online” i wyszukaj - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Aby uzyskać informacje o dodatkowych szablonach do użycia w języku F#, zobacz sekcję dotyczącą szablonów w trybie online w programie Visual Studio, - - - - 'New Project' --> 'Online Templates' - „Nowy projekt” --> „Szablony w trybie online” - - - - F# supports three kinds of comments: - Język F# obsługuje trzy rodzaje komentarzy: - - - - 1. Double-slash comments. These are used in most situations. - 1. Komentarze z podwójnym ukośnikiem. Są używane w większości sytuacji. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Komentarze blokowe w stylu ML. Nie są używane zbyt często. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Komentarze z potrójnymi ukośnikami. Są używane do dokumentowania funkcji, typów itd. - - - - They will appear as text when you hover over something which is decorated with these comments. - Będą wyświetlane jako tekst po zatrzymaniu wskaźnika myszy nad tym, do czego zostały dodane. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Obsługują także komentarze XML w stylu programu .NET, które pozwalają na generowanie dokumentacji referencyjnej, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - a także umożliwiają edytorom (takim jak program Visual Studio) na wydobywanie z nich informacji. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Otwieraj przestrzenie nazw, używając słowa kluczowego „open”. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Moduł to zbiór kodu w języku F#, takiego jak wartości, typy i wartości funkcji. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Grupowanie kodu w modułach pomaga trzymać razem powiązany kod i unikać konfliktów nazw w programie. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - To jest przykładowa liczba całkowita. - - - - This is a sample floating point number. - To jest przykładowa liczba zmiennoprzecinkowa. - - - - This computed a new number by some arithmetic. Numeric types are converted using - To obliczyło nową liczbę, wykonując pewne operacje arytmetyczne. Typy liczbowe są konwertowane za pomocą - - - - functions 'int', 'double' and so on. - funkcji „int”, „double” itd. - - - - This is a list of the numbers from 0 to 99. - To jest lista liczb od 0 do 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - To jest lista wszystkich krotek zawierających wszystkie liczby od 0 do 99 i ich kwadraty. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Następny wiersz wyświetla listę z krotkami, używając symbolu „%A” do wyświetlania ogólnego. - - - - This is a sample integer with a type annotation - To jest przykładowa liczba całkowita z adnotacją typu - - - - Values in F# are immutable by default. They cannot be changed - Wartości w języku F# są domyślnie niezmienialne. Nie można ich modyfikować - - - - in the course of a program's execution unless explicitly marked as mutable. - w trakcie wykonywania programu, chyba że zostaną jawnie oznaczone jako zmienialne. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Powiązanie wartości z nazwą za pomocą polecenia „let” sprawia, że będzie ona niezmienna. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Nie można skompilować drugiego wiersza kodu, ponieważ element „number” jest niezmienny i powiązany. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Ponowne definiowanie elementu „number” na inną wartość nie jest dozwolone w języku F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Modyfikowalne powiązanie. Jest to wymagane w celu modyfikowania wartości elementu „otherNumber”. - - - - When mutating a value, use '<-' to assign a new value. - Podczas modyfikowania wartości użyj strzałki „<-”, aby przydzielić nową wartość. - - - - You could not use '=' here for this purpose since it is used for equality - Nie możesz w tym celu użyć tutaj znaku „=”, ponieważ jest on używany do oznaczania równości - - - - or other contexts such as 'let' or 'module' - lub innych kontekstów, np. „let” lub „module” - - - - Much of F# programming consists of defining functions that transform input data to produce - Duża część programowania w języku F# to definiowanie funkcji, które przekształcają dane wejściowe w celu utworzenia - - - - useful results. - przydatne wyniki. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Polecenia „let” używa się do definiowania funkcji. To polecenie akceptuje argument w postaci liczby całkowitej i zwraca liczbę całkowitą. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Nawiasy są opcjonalne w przypadku argumentów funkcji, z wyjątkiem użycia jawnego typu adnotacji. - - - - Apply the function, naming the function return result using 'let'. - Zastosuj funkcję i nadaj jej wynikowi zwrotnemu nazwę, używając instrukcji „let”. - - - - The variable type is inferred from the function return type. - Typ zmiennej jest wywnioskowany na podstawie zwracanego typu funkcji. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Ten wiersz używa elementu „%d”, aby wydrukować wynik jako liczbę całkowitą. Jest to bezpieczne. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Jeśli element „result1” nie miałby typu „int”, kompilacja wiersza zakończyłaby się niepowodzeniem. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - W razie potrzeby adnotuj typ nazwy parametru przy użyciu polecenia „(argument:typ)”. Nawiasy są wymagane. - - - - Conditionals use if/then/elid/elif/else. - Wyrażenia warunkowe używają słów kluczowych if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Należy zauważyć, że język F# używa składni uwzględniającej wcięcia w postaci odstępów, tak jak w przypadku języków podobnych do języka Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Ten wiersz używa elementu „%f”, aby wydrukować wynik jako liczbę zmiennoprzecinkową. Podobnie jak w przypadku elementu „%d” powyżej jest to bezpieczne. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Wartości logiczne są fundamentalnymi typami danych w języku F#. Oto kilka przykładów wartości logicznych i logiki warunkowej. - - - - To learn more, see: - Aby dowiedzieć się więcej, zobacz: - - - - and - oraz - - - - Booleans values are 'true' and 'false'. - Wartości logiczne przyjmują wartość „true” i „false”. - - - - Operators on booleans are 'not', '&&' and '||'. - Operatory wartości logicznych to „not”, „&&” i „||”. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Ten wiersz używa elementu „%b”, aby wydrukować wartość logiczną. Jest to bezpieczne. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Ciągi są fundamentalnymi typami danych w języku F#. Oto kilka przykładów ciągów i podstawowych manipulacji ciągami. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Ciągi używają cudzysłowów. - - - - Strings can also use @ to create a verbatim string literal. - W ciągach można także używać znaku @ do tworzenia dosłownych literałów ciągu. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Spowoduje to ignorowanie znaków ucieczki, np. „\”, „\n”, „\t” itp. - - - - String literals can also use triple-quotes. - Literały ciągu mogą także używać potrójnych cudzysłowów. - - - - String concatenation is normally done with the '+' operator. - Łączenie ciągów wykonuje się zazwyczaj przy użyciu operatora „+”. - - - - This line uses '%s' to print a string value. This is type-safe. - Ten wiersz używa elementu „%s”, aby wydrukować wartość ciągu. Jest to bezpieczne. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Podciągi używają notacji indeksatora. Ten wiersz wyodrębnia pierwsze 7 znaków w formie podciągu. - - - - Note that like many languages, Strings are zero-indexed in F#. - Należy zauważyć, że w języku F# ciągi znaków są indeksowane od zera, podobnie jak w wielu innych językach. - - - - Tuples are simple combinations of data values into a combined value. - Krotki to proste kombinacje wartości danych tworzące połączoną wartość. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Prosta krotka liczb całkowitych. - - - - A function that swaps the order of two values in a tuple. - Funkcja zamieniająca kolejność dwóch wartości w krotce. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Wnioskowanie o typie języka F# będzie automatycznie uogólniać funkcję do typu ogólnego, - - - - meaning that it will work with any type. - co oznacza, że będzie działać z dowolnym typem. - - - - A tuple consisting of an integer, a string, - Krotka składająca się z liczby całkowitej, ciągu - - - - and a double-precision floating point number. - i liczby zmiennoprzecinkowej podwójnej precyzji. - - - - A simple tuple of integers with a type annotation. - Prosta krotka składająca się z liczb całkowitych z adnotacją typu. - - - - Type annotations for tuples use the * symbol to separate elements - Adnotacje typu w krotkach korzystają z symbolu * do oddzielania elementów - - - - Tuples are normally objects, but they can also be represented as structs. - Krotki są zazwyczaj obiektami, niemniej mogą być również reprezentowane w formie struktur. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Całkowicie współpracują ze strukturami w języku C# i Visual Basic.NET; niemniej - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - krotki w formie struktur nie mogą być niejawnie konwertowane na krotki w formie obiektów (często zwane krotkami odwołań). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Z tego powodu nie będzie można skompilować drugiego wiersza poniżej. Usuń komentarz z tego wiersza, aby zobaczyć, co się stanie. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Mimo że nie możesz przeprowadzać niejawnej konwersji między krotkami struktury i krotkami odwołania, - - - - you can explicitly convert via pattern matching, as demonstrated below. - możesz konwertować jawnie za pośrednictwem dopasowywania do wzorców, jak pokazano poniżej. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Operatory potoków języka F# („|>”, „<|” itp.) oraz operatory kompozycji języka F# („>>”, „<<”) - - - - are used extensively when processing data. These operators are themselves functions - są często używane podczas przetwarzania danych. Operatory te są funkcjami - - - - which make use of Partial Application. - wykorzystującymi częściową aplikację. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Aby dowiedzieć się więcej o tych operatorach, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Aby dowiedzieć się więcej o częściowej aplikacji, zobacz: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Podnosi wartość do potęgi drugiej. - - - - Adds 1 to a value. - Dodaje 1 do wartości. - - - - Tests if an integer value is odd via modulo. - Sprawdza, czy wartość liczby całkowitej jest nieparzysta za pomocą operacji modulo. - - - - A list of 5 numbers. More on lists later. - Lista 5 liczb. Więcej informacji na temat list znajduje się dalej. - - - - Given a list of integers, it filters out the even numbers, - W oparciu o podaną listę liczb całkowitych funkcja filtruje liczby parzyste, - - - - squares the resulting odds, and adds 1 to the squared odds. - podnosi nieparzyste wyniki do potęgi drugiej, a następnie dodaje 1 do podniesionych do potęgi drugiej liczb nieparzystych. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Krótszym sposobem zapisu „squareOddValuesAndAddOne” jest zagnieżdżenie każdego - - - - sub-result into the function calls themselves. - wyniku podrzędnego w samych wywołaniach funkcji. - - - - This makes the function much shorter, but it's difficult to see the - Dzięki temu funkcja będzie znacznie krótsza, ale trudno będzie zobaczyć - - - - order in which the data is processed. - kolejność przetwarzania danych. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Preferowanym sposobem zapisu funkcji „squareOddValuesAndAddOne” jest użycie operatorów potoków języka F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Dzięki temu unika się tworzenia wyników pośrednich, a całość jest znacznie bardziej czytelna - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - niż w przypadku zagnieżdżania wywołań funkcji, np. „squareOddValuesAndAddOneNested” - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Możesz skrócić wywołanie „squareOddValuesAndAddOnePipeline” przez przeniesienie drugiego wywołania „List.map” - - - - into the first, using a Lambda Function. - do pierwszego, korzystając z funkcji lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Należy zauważyć, że potoki są również używane w funkcji lambda. Operatorów potoków języka F# - - - - can be used for single values as well. This makes them very powerful for processing data. - można również użyć w przypadku pojedynczych wartości. Dzięki temu jest to bardzo zaawansowane narzędzie do przetwarzania danych. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - W końcu możesz wyeliminować potrzebę jawnego przyjmowania elementu „values” jako parametru, używając wyrażenia „>>”, - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - aby zredagować dwie kluczowe operacje: odfiltrowywanie liczb parzystych, a następnie podnoszenie do potęgi drugiej i dodawanie jedynki. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Podobnie fragment „fun x -> ...” wyrażenia lambda nie jest wymagany, ponieważ wartość „x” jest po prostu - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - definiowana w tym zakresie w celu przekazania do potoku funkcyjnego. Dlatego można również użyć wyrażenia „>>” - - - - there as well. - w tym miejscu. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Wynikiem funkcji „squareOddValuesAndAddOneComposition” jest inna funkcja, która przyjmuje - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - listę liczb całkowitych w formie danych wejściowych. Jeśli wykonasz funkcję „squareOddValuesAndAddOneComposition” z listą - - - - of integers, you'll notice that it produces the same results as previous functions. - liczb całkowitych, funkcja będzie podawać takie same wyniki jak poprzednie funkcje. - - - - This is using what is known as function composition. This is possible because functions in F# - Używa się tu kompozycji funkcji. Jest to możliwe, ponieważ funkcje w języku F# - - - - use Partial Application and the input and output types of each data processing operation match - używają częściowej aplikacji, a typy danych wejściowych i wyjściowych dla każdej operacji przetwarzania danych są dopasowane do - - - - the signatures of the functions we're using. - podpisów funkcji, których używamy. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Listy są uporządkowane, niezmienne i jednokierunkowe. Są wartościowane przed przetworzeniem. - - - - This module shows various ways to generate lists and process lists with some functions - Ten moduł pokazuje różne sposoby generowania list i ich przetwarzania przy użyciu niektórych funkcji - - - - in the 'List' module in the F# Core Library. - w module „Lista” w bibliotece podstawowej języka F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Listy definiuje się za pomocą zapisu [ ... ]. To jest pusta lista. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Jest to lista z 3 elementami. Znak „;” oddziela elementy w tym samym wierszu. - - - - You can also separate elements by placing them on their own lines. - Możesz również oddzielić elementy przez umieszczenie ich w osobnych wierszach. - - - - This is a list of integers from 1 to 1000 - To jest lista liczb całkowitych z zakresu od 1 do 1000 - - - - Lists can also be generated by computations. This is a list containing - Listy można także generować za pomocą obliczeń. To jest lista zawierająca - - - - all the days of the year. - wszystkie dni roku. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Wydrukuj 5 pierwszych elementów listy „daysList” przy użyciu wyrażenia „List.take”. - - - - Computations can include conditionals. This is a list containing the tuples - Obliczenia mogą obejmować wyrażenia warunkowe. To jest lista zawierająca krotki - - - - which are the coordinates of the black squares on a chess board. - które są współrzędnymi czarnych kwadratów na szachownicy. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listy można przekształcać za pomocą elementu „List.map” i innych kombinatorów programowania funkcjonalnego. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Ta definicja umożliwia utworzenie nowej listy przez podniesienie do kwadratu elementów na liście numberList za pomocą potoku - - - - operator to pass an argument to List.map. - operatora, aby przekazać argument do elementu List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Istnieje wiele innych kombinacji listy. Następujący kod oblicza sumę kwadratów - - - - numbers divisible by 3. - liczby podzielne przez 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Tablice to zmienialne kolekcje o stałym rozmiarze, w których zawierają się elementy tego samego typu. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Chociaż są podobne do list (obsługują wyliczenia i mają podobne kombinatory przetwarzania danych), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - ogólnie są szybsze i obsługują szybki dostęp losowy. Niemniej oznacza to mniejsze bezpieczeństwo związane z możliwością ich modyfikacji. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - To jest pusta tablica. Należy zauważyć, że składnia jest podobna do składni list, ale tutaj używa się zapisu „[| ... |]”. - - - - Arrays are specified using the same range of constructs as lists. - Tablice określa się za pomocą tego samego zestawu konstrukcji co listy. - - - - This is an array of numbers from 1 to 1000. - To jest tablica liczb z zakresu od 1 do 1000. - - - - This is an array containing only the words "hello" and "world". - To jest tablica zawierająca tylko słowa „hello” i „world”. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - To jest tablica zainicjowana za pomocą indeksu i zawierająca liczby parzyste z zakresu od 0 do 2000. - - - - Sub-arrays are extracted using slicing notation. - Tablice podrzędne wyodrębnia się za pomocą notacji wycinania. - - - - You can loop over arrays and lists using 'for' loops. - Możesz zapętlić tablice i listy przy użyciu pętli „for”. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Możesz zmodyfikować zawartość elementu tablicy za pomocą operatora przypisania „strzałka w lewo”. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Aby dowiedzieć się więcej o tym operatorze, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Możesz przekształcić tablice za pomocą operacji „Array.map” i innych operacji programowania funkcjonalnego. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Następujący kod oblicza sumę długości słów zaczynających się od litery „h”. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sekwencje są logicznymi seriami elementów tego samego typu. Jest to typ bardziej ogólny niż listy i tablice. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sekwencje są sprawdzane na żądanie, a ich ponowne sprawdzenie następuje za każdym razem, gdy są one iterowane. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Sekwencja języka F# jest aliasem dla elementu .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funkcje przetwarzania sekwencji można także zastosować dla list i tablic. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - To jest pusta sekwencja. - - - - This a sequence of values. - To jest sekwencja wartości. - - - - This is an on-demand sequence from 1 to 1000. - To jest sekwencja na żądanie zawierająca liczby od 1 do 1000. - - - - This is a sequence producing the words "hello" and "world" - To jest sekwencja generująca słowa „hello” i „world” - - - - This sequence producing the even numbers up to 2000. - Ta sekwencja generuje numery parzyste nie większe niż 2000. - - - - This is an infinite sequence which is a random walk. - To jest nieskończona sekwencja stanowiąca losowe przechodzenie. - - - - This example uses yield! to return each element of a subsequence. - W tym przykładzie użyto instrukcji yield! do zwrócenia każdego elementu sekwencji podrzędnej. - - - - This example shows the first 100 elements of the random walk. - Ten przykład przedstawia pierwszych 100 elementów losowego przechodzenia. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Funkcje rekursywne mogą wywoływać same siebie. W języku F# funkcje to jedyne rekursywne - - - - when declared using 'let rec'. - w przypadku deklarowania przy użyciu wyrażenia „let rec”. - - - - Recursion is the preferred way to process sequences or collections in F#. - Rekursja jest preferowanym sposobem przetwarzania sekwencji lub kolekcji w języku F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Ten przykład przedstawia funkcję rekursywną, która oblicza silnię - - - - integer. It uses 'let rec' to define a recursive function. - liczba całkowita. Używa deklaratora „let rec” do zdefiniowania funkcji rekursywnej. - - - - Computes the greatest common factor of two integers. - Oblicza największy wspólny dzielnik dwóch liczb całkowitych. - - - - Since all of the recursive calls are tail calls, - Jako że wszystkie wywołania rekurencyjne są wywołaniami ogonowymi, - - - - the compiler will turn the function into a loop, - kompilator zamieni funkcję w pętlę, - - - - which improves performance and reduces memory consumption. - która umożliwi zwiększenie wydajności i zmniejszenie zużycia pamięci. - - - - This example computes the sum of a list of integers using recursion. - Ten przykład oblicza sumę listy liczb całkowitych przy użyciu rekursji. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Operacja zamieni listę „sumList” w listę z rekursją ogonową przy użyciu funkcji pomocniczej z akumulatorem wyników. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Spowoduje to wywołanie funkcji pomocniczej z rekursją ogonową, z wartością „0” jako akumulatorem początkowym. - - - - An approach like this is common in F#. - Takie podejście jest typowe dla języka F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Rekordy są agregacjami nazwanych wartości z opcjonalnymi elementami członkowskimi (np. metodami). - - - - They are immutable and have structural equality semantics. - Są niezmienne i mają semantykę równości strukturalnej. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Ten przykład przedstawia sposób definiowania nowego typu rekordu. - - - - This example shows how to instantiate a record type. - W tym przykładzie pokazano sposób tworzenia wystąpienia typu rekordu. - - - - You can also do this on the same line with ';' separators. - Możesz to również zrobić w tym samym wierszu, korzystając z separatorów „;”. - - - - This example shows how to use "copy-and-update" on record values. It creates - Ten przykład przedstawia sposób użycia operacji „kopiuj i aktualizuj” na wartościach rekordu. Tworzy - - - - a new record value that is a copy of contact1, but has different values for - nową wartość rekordu, która jest kopią elementu contact1, lecz ma inne wartości dla - - - - the 'Phone' and 'Verified' fields. - pola „Phone” i „Verified”. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Ten przykład przedstawia, jak napisać funkcję przetwarzającą wartość rekordu. - - - - It converts a 'ContactCard' object to a string. - Konwertuje obiekt „ContactCard” na ciąg. - - - - This is an example of a Record with a member. - Jest to przykład rekordu z elementem członkowskim. - - - - Members can implement object-oriented members. - Elementy członkowskie mogą implementować elementy członkowskie zorientowane obiektowo. - - - - Members are accessed via the '.' operator on an instantiated type. - Do elementów członkowskich uzyskuje się dostęp za pośrednictwem operatora „.” w typie skonkretyzowanym. - - - - Records can also be represented as structs via the 'Struct' attribute. - Rekordy można również reprezentować jako struktury za pośrednictwem atrybutu „Struct”. - - - - This is helpful in situations where the performance of structs outweighs - Jest to przydatne w sytuacjach, w których wydajność struktur przewyższa - - - - the flexibility of reference types. - elastyczność typów odwołań. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Unie rozłączne (DU, Discriminated Union) są wartościami, które mogą być liczbą nazwanych formularzy lub przypadków. - - - - Data stored in DUs can be one of several distinct values. - Dane przechowywane w uniach rozłącznych mogą mieć jedną z kilku różnych wartości. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Następująca wartość reprezentuje kolor karty do gry. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Unii rozłącznej można również użyć do reprezentowania wartości karty do gry. - - - - Represents the rank of cards 2 .. 10 - Reprezentuje wartości kart 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Unie rozłączne mogą również implementować elementy członkowskie zorientowane obiektowo. - - - - This is a record type that combines a Suit and a Rank. - To jest typ rekordu łączący kolor i wysokość. - - - - It's common to use both Records and Disciminated Unions when representing data. - Często używa się rekordów i unii rozłącznych w przypadku reprezentowania danych. - - - - This computes a list representing all the cards in the deck. - Operacja oblicza listę reprezentującą wszystkie karty w talii. - - - - This example converts a 'Card' object to a string. - Ten przykład umożliwia przekonwertowanie elementu „Card” na ciąg. - - - - This example prints all the cards in a playing deck. - Ten przykład umożliwia wyświetlenie wszystkich kart w talii. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Unie rozłączne o pojedynczych przypadkach są często używane podczas modelowania domeny. Może to zapewnić większe bezpieczeństwo typów - - - - over primitive types such as strings and ints. - niż typy pierwotne, np. ciągi i liczby całkowite. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Unie rozłączne o pojedynczych przypadkach nie mogą być niejawnie konwertowane do lub z typu przez nich opakowywanego. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Przykładowo funkcja przyjmująca adres nie może zaakceptować ciągu jako danych wejściowych - - - - or vive/versa. - i na odwrót. - - - - You can easily instantiate a single-case DU as follows. - Możesz z łatwością utworzyć wystąpienie dla unii rozłącznej o pojedynczym przypadku w następujący sposób. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Jeśli potrzebujesz wartości, możesz cofnąć opakowywanie wartości bazowej za pomocą prostej funkcji. - - - - Printing single-case DUs is simple with unwrapping functions. - Drukowanie unii rozłącznych o pojedynczych przypadkach jest proste z funkcjami cofającymi opakowywanie. - - - - Disciminated Unions also support recursive definitions. - Unie rozłączne obsługują również definicje rekursywne. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Reprezentuje to binarne drzewo wyszukiwania, gdzie jeden przypadek jest pustym drzewem, - - - - and the other being a Node with a value and two subtrees. - a drugi węzłem z wartością i dwoma poddrzewami. - - - - Check if an item exists in the binary search tree. - Sprawdź, czy element istnieje w binarnym drzewie wyszukiwania. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Wyszukuje rekursywnie przy użyciu dopasowywania wzorca. Zwraca wartość true, jeśli element istnieje; w przeciwnym wypadku zwraca wartość false. - - - - Check the left subtree. - Sprawdź lewe poddrzewo. - - - - Check the right subtree. - Sprawdź prawe poddrzewo. - - - - Inserts an item in the Binary Search Tree. - Wstawia element do binarnego drzewa wyszukiwania. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Znajduje miejsce do wstawienia rekursywnego przy użyciu dopasowania wzorca, a następnie wstawia nowy węzeł. - - - - If the item is already present, it does not insert anything. - Jeśli element jest już obecny, nie wstawia niczego. - - - - No need to insert, it already exists; return the node. - Wstawianie nie jest konieczne, element już istnieje; zwróć węzeł. - - - - Call into left subtree. - Wywołanie do lewego poddrzewa. - - - - Call into right subtree. - Wywołanie do prawego poddrzewa. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Unie rozłączne mogą być również reprezentowane w formie struktur za pośrednictwem atrybutu „Struct”. - - - - This is helpful in situations where the performance of structs outweighs - Jest to przydatne w sytuacjach, w których wydajność struktur przewyższa - - - - the flexibility of reference types. - elastyczność typów odwołań. - - - - However, there are two important things to know when doing this: - Niemniej w przypadku tej operacji należy pamiętać o dwóch ważnych rzeczach: - - - - 1. A struct DU cannot be recursively-defined. - 1. Unii rozłącznej w formie struktury nie można zdefiniować rekursywnie. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Unia rozłączna w formie struktury musi mieć unikatowe nazwy dla każdego ze swoich przypadków. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Dopasowywanie wzorca jest funkcją języka F# umożliwiającą wykorzystywanie wzorców, - - - - which are a way to compare data with a logical structure or structures, - które są sposobem na porównywanie danych ze strukturami logicznymi lub strukturami, - - - - decompose data into constituent parts, or extract information from data in various ways. - rozkładanie danych na części składowe lub wyodrębnianie informacji z danych na różne sposoby. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Następnie możesz wysłać „kształt” wzorca za pośrednictwem funkcji dopasowywania wzorca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Rekord zawierający imię i nazwisko osoby - - - - A Discriminated Union of 3 different kinds of employees - Unia rozłączna 3 różnych rodzajów pracowników - - - - Count everyone underneath the employee in the management hierarchy, - Licz wszystkich podlegających pracownikowi w hierarchii zarządzania, - - - - including the employee. - z uwzględnieniem pracownika. - - - - Find all managers/executives named "Dave" who do not have any reports. - Znajdź wszystkich kierowników/dyrektorów o imieniu „Dave”, którzy nie mają żadnych podwładnych. - - - - This uses the 'function' shorthand to as a lambda expression. - Operacja używa skrótu słowa „function” jako wyrażenia lambda. - - - - [] matches an empty list. - [] dopasuje pustą listę. - - - - '_' is a wildcard pattern that matches anything. - „_” to wzorzec wieloznaczny, który pasuje do wszystkiego. - - - - This handles the "or else" case. - Obsługuje przypadek „w przeciwnym razie”. - - - - You can also use the shorthand function construct for pattern matching, - Możesz również użyć konstrukcji funkcji skrótu w przypadku dopasowywania wzorców, - - - - which is useful when you're writing functions which make use of Partial Application. - co jest przydatne podczas pisania funkcji wykorzystujących częściową aplikację. - - - - Define some more functions which parse with the helper function. - Zdefiniuj więcej funkcji, które będą analizować przy użyciu funkcji pomocniczej. - - - - Active Patterns are another powerful construct to use with pattern matching. - Wzorce aktywne to kolejna zaawansowana konstrukcja do zastosowania podczas dopasowywania wzorców. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Umożliwiają one partycjonowanie danych wejściowych do formularzy niestandardowych przez ich rozkładanie w lokacji wywołania dopasowania wzorca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Dopasowywanie wzorców za pośrednictwem słowa kluczowego „function” i wzorców aktywnych często wygląda w następujący sposób. - - - - Call the printer with some different values to parse. - Wywołaj drukarkę za pomocą innych wartości do przeanalizowania. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Wartości opcji to dowolne wartości otagowane jako „Some” lub „None”. - - - - They are used extensively in F# code to represent the cases where many other - Są one bardzo często używane w kodzie języka F# do reprezentowania przypadków, w których w wielu innych - - - - languages would use null references. - językach użyte zostałyby odwołania o wartości null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Najpierw zdefiniuj kod pocztowy zdefiniowany za pośrednictwem unii rozłącznej o pojedynczym przypadku. - - - - Next, define a type where the ZipCode is optional. - Następnie zdefiniuj typ, w którym element ZipCode jest opcjonalny. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Następnie zdefiniuj typ interfejsu reprezentujący obiekt, aby obliczyć strefę wysyłki dla kodu pocztowego klienta - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - przy użyciu danych implementacji metod abstrakcyjnych „getState” i „getShippingZone”. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Następnie oblicz strefę wysyłki dla klienta za pomocą wystąpienia kalkulatora. - - - - This uses combinators in the Option module to allow a functional pipeline for - Operacja używa kombinatorów w module opcji, aby umożliwiać potokowi funkcjonalnemu - - - - transforming data with Optionals. - przekształcanie danych z wykorzystaniem elementów opcjonalnych. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Jednostki miary są bezpiecznym sposobem dodawania adnotacji do pierwotnych typów numerycznych. - - - - You can then perform type-safe arithmetic on these values. - Następnie możesz przeprowadzić bezpieczne operacje arytmetyczne dla tych wartości. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Najpierw otwórz kolekcję typowych nazw jednostek - - - - Define a unitized constant - Definiuj stałą w jednostkach - - - - Next, define a new unit type - Następnie zdefiniuj nowy typ jednostki - - - - Conversion factor mile to meter. - Współczynnik konwersji mil na metry. - - - - Define a unitized constant - Definiuj stałą w jednostkach - - - - Compute metric-system constant - Oblicz stałą systemu metryk - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Wartości używające jednostek miary można dostosować tak jak pierwotny typ numeryczny, np. w przypadku drukowania. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Klasy są sposobem definiowania nowych typów obiektów w języku F# i obsługują standardowe konstrukcje zorientowane obiektowo. - - - - They can have a variety of members (methods, properties, events, etc.) - Mogą mieć różne elementy członkowskie (metody, właściwości, zdarzenia itp.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Aby dowiedzieć się więcej o klasach, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Aby dowiedzieć się więcej o elementach członkowskich, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Prosta, dwuwymiarowa klasa Vector. - - - - The class's constructor is on the first line, - Konstruktor klasy znajduje się w pierwszym wierszu - - - - and takes two arguments: dx and dy, both of type 'double'. - i przyjmuje dwa argumenty: dx i dy, oba typu „double”. - - - - This internal field stores the length of the vector, computed when the - To pole wewnętrzne przechowuje długość wektora obliczoną podczas - - - - object is constructed - obiekt jest skonstruowany - - - - 'this' specifies a name for the object's self identifier. - Wyraz „this” określa nazwę własnego identyfikatora obiektu. - - - - In instance methods, it must appear before the member name. - W metodach wystąpień musi on znajdować się przed nazwą elementu członkowskiego. - - - - This member is a method. The previous members were properties. - Ten element członkowski jest metodą. Poprzednie elementy członkowskie były właściwościami. - - - - This is how you instantiate the Vector2D class. - Jest to sposób tworzenia wystąpienia dla klasy Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Pobierz nowy skalowany obiekt wektora bez modyfikowania obiektu oryginalnego. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Klasy ogólne umożliwiają definiowanie typów z uwzględnieniem zestawu parametrów typu. - - - - In the following, 'T is the type parameter for the class. - W następującym przykładzie 'T jest parametrem typu dla klasy. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - To wewnętrzne pole przechowuje stany na liście. - - - - Add a new element to the list of states. - Dodaj nowy element do listy stanów. - - - - use the '<-' operator to mutate the value. - użyj operatora „<-”, aby zmodyfikować wartość. - - - - Get the entire list of historical states. - Pobierz całą listę stanów historycznych. - - - - Get the latest state. - Pobierz najnowszy stan. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Wystąpienie typu „int” klasy procedury śledzenia stanu. Należy zwrócić uwagę, że parametr typu jest wywnioskowany. - - - - Add a state - Dodaj stan - - - - Interfaces are object types with only 'abstract' members. - Interfejsy to typy obiektu, których wszystkie elementy członkowskie są abstrakcyjne. - - - - Object types and object expressions can implement interfaces. - Typy obiektu i wyrażenia obiektu mogą implementować interfejsy. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - To jest typ implementujący interfejs IDisposable. - - - - This is the implementation of IDisposable members. - To jest implementacja elementów członkowskich interfejsu IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - To jest obiekt implementujący interfejs IDisposable za pośrednictwem wyrażenia obiektu - - - - Unlike other languages such as C# or Java, a new type definition is not needed - W przeciwieństwie do innych języków, np. C# lub Java, nowy typ definicji nie jest wymagany - - - - to implement an interface. - do zaimplementowania interfejsu. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - Biblioteka FSharp.Core definiuje zestaw funkcji przetwarzania równoległego. Tutaj - - - - you use some functions for parallel processing over arrays. - niektóre funkcje są używane do równoległego przetwarzania tablic. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Aby dowiedzieć się więcej, zobacz https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Najpierw tablica wartości wejściowych. - - - - Next, define a functions that does some CPU intensive computation. - Następnie zdefiniuj funkcje, które wykonują obliczenia intensywnie korzystające z procesora. - - - - Next, do a parallel map over a large input array. - Następnie wykonaj równoległe mapowanie dla dużej tablicy wejściowej. - - - - Next, print the results. - Następnie wyświetl wyniki. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Zdarzenia są wspólnym idiomem dla programowania na platformie .NET, zwłaszcza przy użyciu aplikacji WinForms lub WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Najpierw utwórz wystąpienie obiektu Event, które składa się z punktu subskrypcji (event.Publish) i wyzwalacza zdarzenia (event.Trigger). - - - - Next, add handler to the event. - Następnie dodaj procedurę obsługi do zdarzenia. - - - - Next, trigger the event. - Następnie wyzwól zdarzenie. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Następnie utwórz wystąpienie zdarzenia zgodne ze standardową konwencją platformy .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Następnie dodaj procedurę obsługi dla tego nowego zdarzenia. - - - - Next, trigger this event (note that sender argument should be set). - Następnie wyzwól to zdarzenie (zwróć uwagę, że argument elementu wysyłającego powinien być ustawiony). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf deleted file mode 100644 index 64df6c8506..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Esta amostra guiará você pelos elementos da linguagem F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Para executar o código no F# Interativo, realce uma seção de código e pressione Alt-Enter ou clique com botão direito do mouse - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - e selecione "Executar em Interativo". Você pode abrir a janela F# Interativo no menu "Exibir". - - - - For more about F#, see: - Para obter mais informações sobre F#, consulte: - - - - To see this tutorial in documentation form, see: - Para ver este tutorial em forma de documentação, consulte: - - - - To learn more about applied F# programming, use - Para saber mais sobre a programação F# aplicada, use - - - - To install the Visual F# Power Tools, use - Para instalar o Visual F# Power Tools, use - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Ferramentas' --> 'Extensões e Atualizações' --> `Online` e pesquise - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Para obter modelos adicionais a serem usados com F#, consulte 'Modelos online' no Visual Studio, - - - - 'New Project' --> 'Online Templates' - 'Novo projeto --> 'Modelos online' - - - - F# supports three kinds of comments: - F# dá suporte a três tipos de comentários: - - - - 1. Double-slash comments. These are used in most situations. - 1. Comentários de barra dupla. São usados na maioria das situações. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Comentários de bloco em estilo de ML. Eles não são usados com muita frequência. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Comentários de barra tripla. São usados para funções de documentação, tipos, etc. - - - - They will appear as text when you hover over something which is decorated with these comments. - Eles aparecerão como texto quando você passar o mouse sobre algo decorado com esses comentários. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Eles também dão suporte a comentários XML em estilo .NET, que permitem que você gere documentação de referência, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - além de permitirem que editores (como o Visual Studio) extraiam informações deles. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Abra os namespaces usando a palavra-chave 'open'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Um módulo é um agrupamento de código F#, assim como valores, valores de função e tipos. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Agrupar código em módulos ajuda a manter o código relacionado junto e ajuda a evitar conflitos de nome em seu programa. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Este é um inteiro de exemplo. - - - - This is a sample floating point number. - Esta é uma amostra de número de ponto flutuante. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Isso computou um novo número por meio de alguma aritmética. Tipos numéricos são convertidos usando - - - - functions 'int', 'double' and so on. - funções 'int', 'double' e assim por diante. - - - - This is a list of the numbers from 0 to 99. - Esta é uma lista de números de 0 a 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Isso é uma lista de todas as tuplas contendo todos os números de 0 a 99 e seus quadrados. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - A próxima linha imprime uma lista que inclui tuplas, usando '%A' para impressão genérica. - - - - This is a sample integer with a type annotation - Este é um inteiro de exemplo com uma anotação de tipo - - - - Values in F# are immutable by default. They cannot be changed - Os valores em F# são imutáveis por padrão. Eles não podem ser alterados - - - - in the course of a program's execution unless explicitly marked as mutable. - no decorrer da execução de um programa a menos que explicitamente marcados como mutáveis. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Associar um valor a um nome via 'let' o torna imutável. - - - - The second line of code fails to compile because 'number' is immutable and bound. - A compilação da segunda linha de código falha porque 'number' é imutável e limitado. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Não é permitido redefinir 'number' para um valor diferente em F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Uma associação mutável. Isso é necessário para que se possa modificar o valor de 'otherNumber'. - - - - When mutating a value, use '<-' to assign a new value. - Ao converter um valor, use '<-' para atribuir um novo valor. - - - - You could not use '=' here for this purpose since it is used for equality - Você não pode usar '=' aqui para essa finalidade, já que ele é usado para igualdade - - - - or other contexts such as 'let' or 'module' - ou outros contextos como 'let' ou 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - Grande parte da programação F# consiste em definir funções que transformam os dados de entrada para produzir - - - - useful results. - resultados úteis. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Use 'let' para definir uma função. Ele aceita um argumento inteiro e retorna um inteiro. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Parênteses são opcionais para os argumentos da função, exceto quando você usa uma anotação de tipo explícito. - - - - Apply the function, naming the function return result using 'let'. - Aplique a função, nomeando o resultado de retorno de função usando 'let'. - - - - The variable type is inferred from the function return type. - O tipo de variável é deduzido do tipo de retorno de função. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Esta linha usa '%d' para imprimir o resultado como um inteiro. Isso é fortemente tipado. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Se 'result1' não fosse do tipo 'int', a linha falharia na compilação. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Quando necessário, anote o tipo de um nome de parâmetro usando '(argument:type)'. É necessário usar parênteses. - - - - Conditionals use if/then/elid/elif/else. - Condicionais usam if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Observe que F# usa sintaxe com reconhecimento de recuo de espaço em branco, semelhante a linguagens como Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Esta linha usa '%f' para imprimir o resultado como um float. Como em '%d' acima, isso é fortemente tipado. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Boolianos são tipos de dados fundamentais em F#. Aqui estão alguns exemplos de Boolianos e lógica condicional. - - - - To learn more, see: - Para saber mais, acesse: - - - - and - E - - - - Booleans values are 'true' and 'false'. - Valores booliano são 'true' e 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Operadores em boolianos são 'not', '&&' e '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Esta linha usa '%b' para imprimir um valor booliano. Isso é fortemente tipado. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Cadeias de caracteres são tipos de dados fundamentais em F#. Aqui estão alguns exemplos de Cadeias de caracteres e a manipulação básicas de Cadeia de caracteres. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Cadeias de caracteres usam aspas duplas. - - - - Strings can also use @ to create a verbatim string literal. - Cadeias de caracteres também podem usar @ para criar um literal de cadeia de caracteres textual. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Isso vai ignorar caracteres de escapada como '\', '\n', '\t', etc. - - - - String literals can also use triple-quotes. - Literais de cadeia de caracteres também podem usar aspas triplas. - - - - String concatenation is normally done with the '+' operator. - A concatenação de cadeia de caracteres normalmente é feita com o operador '+'. - - - - This line uses '%s' to print a string value. This is type-safe. - Esta linha usa '%s' para imprimir um valor de cadeia de caracteres. Isso é fortemente tipado. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Subcadeias de caracteres usam a notação de indexador. Essa linha extrai os sete primeiros caracteres como uma subcadeia de caracteres. - - - - Note that like many languages, Strings are zero-indexed in F#. - Observe que, como muitas linguagens, Cadeias de Caracteres são indexadas com zero em F#. - - - - Tuples are simple combinations of data values into a combined value. - Tuplas são combinações simples de valores de dados em um valor combinado. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Uma tupla simples de inteiros. - - - - A function that swaps the order of two values in a tuple. - Uma função que troca a ordem de dois valores em uma tupla. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Inferência de Tipos F# generalizará automaticamente a função para ter um tipo genérico, - - - - meaning that it will work with any type. - significando que ele funcionará com qualquer tipo. - - - - A tuple consisting of an integer, a string, - Uma tupla consistindo em um inteiro, uma cadeia de caracteres, - - - - and a double-precision floating point number. - e um número de ponto flutuante de precisão dupla. - - - - A simple tuple of integers with a type annotation. - Uma tupla simples de números inteiros com uma anotação de tipo. - - - - Type annotations for tuples use the * symbol to separate elements - As anotações de tipo para tuplas usam o símbolo * para separar elementos - - - - Tuples are normally objects, but they can also be represented as structs. - Tuplas normalmente são objetos, mas também podem ser representados como structs. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Esses interoperam completamente com structs em C# e Visual Basic.NET; entretanto, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - tuplas de struct não são implicitamente conversíveis com tuplas de objeto (geralmente chamadas de tuplas de referência). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - A compilação da segunda linha abaixo falhará por causa disso. Remova a marca de comentário para ver o que acontece. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Embora não seja possível converter implicitamente entre tuplas de struct e tuplas de referência, - - - - you can explicitly convert via pattern matching, as demonstrated below. - você pode converter explicitamente via correspondência de padrões, conforme demonstrado abaixo. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Os operadores de pipe F# ('|>', '<|', etc.) e os operadores de composição F# ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - são usadas extensivamente durante o processamento de dados. Esses operadores são funções - - - - which make use of Partial Application. - que fazem uso do Aplicativo Parcial. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Para saber mais sobre esses operadores, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Para saber mais sobre Aplicativo Parcial, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Eleva um valor ao quadrado. - - - - Adds 1 to a value. - Adiciona 1 a um valor. - - - - Tests if an integer value is odd via modulo. - Testa se um valor inteiro for ímpar por meio do módulo. - - - - A list of 5 numbers. More on lists later. - Uma lista de cinco números. Mais sobre listas posteriormente. - - - - Given a list of integers, it filters out the even numbers, - Dada uma lista de inteiros, ele filtra os números pares, - - - - squares the resulting odds, and adds 1 to the squared odds. - eleva os ímpares resultantes ao quadrado e adiciona 1 aos ímpares elevados ao quadrado. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Uma maneira mais curta para gravar 'squareOddValuesAndAddOne' é aninhar cada - - - - sub-result into the function calls themselves. - sub-resultado em função invoca a si mesmo. - - - - This makes the function much shorter, but it's difficult to see the - Isso faz com que a função fique muito menor, mas é difícil ver a - - - - order in which the data is processed. - ordem em que os dados são processados. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Uma maneira preferencial para gravar 'squareOddValuesAndAddOne' é usar operadores de pipe F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Isso permite que você evite criar resultados intermediários, mas é muito mais legível - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - que a função de aninhamento invoca como 'squareOddValuesAndAddOneNested' - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Você pode reduzir 'squareOddValuesAndAddOnePipeline' movendo a segunda chamada `List.map` - - - - into the first, using a Lambda Function. - no primeiro, usando uma Função Lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Observe que pipelines também estão sendo usados dentro da função lambda. Operadores de pipe F# - - - - can be used for single values as well. This makes them very powerful for processing data. - podem ser usados para valores únicos também. Isso os torna muito eficientes para o processamento de dados. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Por fim, você pode eliminar a necessidade de incluir explicitamente 'valores' como um parâmetro usando '>>' - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - para compor as duas principais operações: filtrar números pares e, em seguida, elevar ao quadrado e adicionar um. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Da mesma forma, o bit 'fun x -> ...' da expressão lambda também não é necessário porque 'x' é simplesmente - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - sendo definido nesse escopo para que possa ser passada a um pipeline funcional. Portanto, '>>' pode ser usado - - - - there as well. - lá também. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - O resultado de 'squareOddValuesAndAddOneComposition' é em si outra função que leva um - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - lista de inteiros como sua entrada. Se você executar 'squareOddValuesAndAddOneComposition' com uma lista - - - - of integers, you'll notice that it produces the same results as previous functions. - de inteiros, você observará que ela produz os mesmos resultados que as funções anteriores. - - - - This is using what is known as function composition. This is possible because functions in F# - Isso está usando o que é conhecido como composição de função. Isso é possível porque funções em F# - - - - use Partial Application and the input and output types of each data processing operation match - use Aplicativo Parcial e os tipos de entrada e saída de cada correspondência de operação de processamento de dados - - - - the signatures of the functions we're using. - as assinaturas das funções que estamos usando. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - As listas são listas ordenadas, imutáveis, vinculadas de modo único. Elas são adiantadas em sua avaliação. - - - - This module shows various ways to generate lists and process lists with some functions - Este módulo mostra várias formas de gerar listas e listas de processo com algumas funções - - - - in the 'List' module in the F# Core Library. - no módulo 'Lista' na Biblioteca Principal de F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - As listas são definidas usando [ ... ]. Esta é uma lista vazia. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Esta é uma lista com 3 elementos. ';' é usado para separar elementos na mesma linha. - - - - You can also separate elements by placing them on their own lines. - Você também pode separar elementos colocando-os em suas próprias linhas. - - - - This is a list of integers from 1 to 1000 - Esta é uma lista de inteiros de 1 a 1.000 - - - - Lists can also be generated by computations. This is a list containing - Listas também podem ser geradas pelos cálculos. Esta é uma lista contendo - - - - all the days of the year. - todos os dias do ano. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Imprima os primeiros cinco elementos de 'daysList' usando 'List.take'. - - - - Computations can include conditionals. This is a list containing the tuples - Cálculos podem incluir condicionais. Esta é uma lista contendo as tuplas - - - - which are the coordinates of the black squares on a chess board. - que são as coordenadas dos quadrados pretos em um tabuleiro de xadrez. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listas podem ser transformadas usando 'List. map' e outros combinadores de programação funcional. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Essa definição produz uma nova lista ao elevar ao quadrado os números em numberList, usando o pipeline - - - - operator to pass an argument to List.map. - operador para passar um argumento para List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Há muitas outras combinações de lista. O exemplo a seguir computa a soma dos quadrados dos - - - - numbers divisible by 3. - números divisíveis por 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Matrizes são coleções de tamanho fixo, mutáveis de elementos do mesmo tipo. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Embora elas sejam semelhantes às Listas (eles dão suporte à enumeração e têm combinadores semelhantes para processamento de dados), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - elas geralmente são mais rápidas e dão suporte ao acesso aleatório rápido. Isso vem com o custo de ser menos seguro por ser mutável. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Esta é a matriz vazia. Observe que a sintaxe é semelhante à de Listas, mas usa '[| ... |]' em vez disso. - - - - Arrays are specified using the same range of constructs as lists. - Matrizes são especificadas usando o mesmo intervalo de construções usado em listas. - - - - This is an array of numbers from 1 to 1000. - Esta é uma matriz de números de 1 a 1.000. - - - - This is an array containing only the words "hello" and "world". - Esta é uma matriz que contém apenas as palavras "olá" e "mundo". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Esta é uma matriz inicializada pelo índice e que contém os números pares de 0 a 2.000. - - - - Sub-arrays are extracted using slicing notation. - Submatrizes são extraídas usando a notação de divisão. - - - - You can loop over arrays and lists using 'for' loops. - Você pode executar um loop através de matrizes e listas usando loops 'for'. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Você pode modificar o conteúdo de um elemento de matriz usando o operador de atribuição de seta para a esquerda. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Para saber mais sobre esse operador, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Você pode transformar as matrizes usando 'Array.map' e outras operações de programação funcional. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - O exemplo a seguir calcula a soma dos tamanhos de palavras que começam com 'h'. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sequências são uma série lógica de elementos, todos do mesmo tipo. Eles são um tipo mais geral que Listas e Matrizes. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - As sequências são avaliada sob demanda e reavaliadas sempre que são repetidas. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Uma sequência de F# é um alias para um System.Collections.Generic.IEnumerable .NET<' t>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funções de processamento de sequência também podem ser aplicadas a matrizes e listas. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Esta é a sequência vazia. - - - - This a sequence of values. - Esta é uma sequência de valores. - - - - This is an on-demand sequence from 1 to 1000. - Esta é uma sequência sob demanda de 1 a 1000. - - - - This is a sequence producing the words "hello" and "world" - Esta é uma sequência produzindo as palavras "olá" e "mundo" - - - - This sequence producing the even numbers up to 2000. - Esta sequência produzindo os números pares até 2.000. - - - - This is an infinite sequence which is a random walk. - Esta é uma sequência infinita, que é um exame aleatório. - - - - This example uses yield! to return each element of a subsequence. - Este exemplo usa yield! para retornar cada elemento de uma subsequência. - - - - This example shows the first 100 elements of the random walk. - Este exemplo mostra os primeiros 100 elementos do exame aleatório. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Funções recursivas podem chamar a si mesmas. Em F#, funções são recursivas somente - - - - when declared using 'let rec'. - quando declarada usando 'let rec'. - - - - Recursion is the preferred way to process sequences or collections in F#. - Recursão é a maneira preferencial de processar sequências ou coleções em F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Este exemplo mostra uma função recursiva que computa o fatorial de um - - - - integer. It uses 'let rec' to define a recursive function. - inteiro. Ele usa 'let gra' para definir uma função recursiva. - - - - Computes the greatest common factor of two integers. - Calcula o máximo divisor comum de dois inteiros. - - - - Since all of the recursive calls are tail calls, - Como todas as chamadas recursivas são chamadas tail, - - - - the compiler will turn the function into a loop, - o compilador transformará a função em um loop, - - - - which improves performance and reduces memory consumption. - que melhora o desempenho e reduz o consumo de memória. - - - - This example computes the sum of a list of integers using recursion. - Este exemplo calcula a soma de uma lista de inteiros usando recursão. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Isso torna a cauda de 'sumList' recursiva usando uma função auxiliar com um acumulador de resultado. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Isso invoca a cauda da função auxiliar recursiva, fornecendo '0' como um acumulador de semente. - - - - An approach like this is common in F#. - Uma abordagem como essa é comum em F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Registros são uma agregação de valores nomeados com membros opcionais (como métodos). - - - - They are immutable and have structural equality semantics. - Eles são imutáveis e têm semântica de igualdade estrutural. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Este exemplo mostra como definir um novo tipo de registro. - - - - This example shows how to instantiate a record type. - Este exemplo mostra como criar uma instância de um tipo de registro. - - - - You can also do this on the same line with ';' separators. - Você também pode fazer isso na mesma linha com separadores ';'. - - - - This example shows how to use "copy-and-update" on record values. It creates - Este exemplo mostra como usar o "copiar e atualizar" em valores do Registro. Ele cria - - - - a new record value that is a copy of contact1, but has different values for - um novo valor de registro é uma cópia de contact1, mas tem valores diferentes para - - - - the 'Phone' and 'Verified' fields. - os campos 'Telefone' e 'Verificado'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Este exemplo mostra como escrever uma função que processa um valor de Registro. - - - - It converts a 'ContactCard' object to a string. - Converte um objeto 'ContactCard' em uma cadeia de caracteres. - - - - This is an example of a Record with a member. - Este é um exemplo de um Registro com um membro. - - - - Members can implement object-oriented members. - Os membros podem implementar membros orientados a objeto. - - - - Members are accessed via the '.' operator on an instantiated type. - Os membros são acessados por meio do operador '.' em um tipo instanciado. - - - - Records can also be represented as structs via the 'Struct' attribute. - Registros também podem ser representados como structs por meio do atributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Isso é útil em situações em que o desempenho de structs é superior - - - - the flexibility of reference types. - a flexibilidade de tipos de referência. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Uniões Discriminadas (UD) são valores que podem ser vários formulários nomeados ou casos. - - - - Data stored in DUs can be one of several distinct values. - Dados armazenados em DUs podem ser um dos vários valores distintos. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - O exemplo a seguir representa o naipe de uma carta de baralho. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Uma União Discriminada também pode ser usada para representar a classificação de uma carta de baralho. - - - - Represents the rank of cards 2 .. 10 - Representa posição das cartas 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Uniões Discriminadas também podem implementar membros orientados a objeto. - - - - This is a record type that combines a Suit and a Rank. - Este é um tipo de registro que combina um Naipe e uma Classificação. - - - - It's common to use both Records and Disciminated Unions when representing data. - É comum usar Registros e Uniões Discriminadas ao representar dados. - - - - This computes a list representing all the cards in the deck. - Isto calcula uma lista que representa todas as cartas do baralho. - - - - This example converts a 'Card' object to a string. - Este exemplo converte um objeto 'Carta' em uma cadeia de caracteres. - - - - This example prints all the cards in a playing deck. - Este exemplo imprime todas as cartas de um baralho de jogo. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - UDs de caso único são frequentemente usadas para modelagem de domínio. Isso pode significar um tipo extra de segurança para você - - - - over primitive types such as strings and ints. - sobre tipos primitivos como cadeias de caracteres e inteiros. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - UDs de caso único não podem ser convertidas implicitamente de ou para o tipo que elas encapsulam. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Por exemplo, uma função que compreende um Endereço não pode aceitar uma sequência de caracteres como essa entrada, - - - - or vive/versa. - ou vice-versa. - - - - You can easily instantiate a single-case DU as follows. - Você pode facilmente criar uma instância em uma UD de único caso conforme mostrado a seguir. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Quando precisar do valor, você pode decodificar o valor subjacente com uma função simples. - - - - Printing single-case DUs is simple with unwrapping functions. - Imprimir UDs de caso único é simples com funções não encapsuladas. - - - - Disciminated Unions also support recursive definitions. - Uniões Discriminadas também dão suporte a definições recursivas. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Isso representa uma Árvore de Pesquisa Binária, com um caso sendo a árvore Vazia, - - - - and the other being a Node with a value and two subtrees. - e o outro sendo um Nó com um valor e duas subárvores. - - - - Check if an item exists in the binary search tree. - Verifique se um item existe na árvore de pesquisa binária. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Pesquisa recursivamente usando Correspondência de Padrões. Retorna verdadeiro se existir; caso contrário, falso. - - - - Check the left subtree. - Verifique a subárvore à esquerda. - - - - Check the right subtree. - Verifique a subárvore à direita. - - - - Inserts an item in the Binary Search Tree. - Insere um item na Árvore de Pesquisa Binária. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Encontra o local para inserir recursivamente usando Correspondência de Padrões e, em seguida, insere um novo nó. - - - - If the item is already present, it does not insert anything. - Se o item já estiver presente, ele não insere nada. - - - - No need to insert, it already exists; return the node. - Não é preciso inseri-lo, ele já existe; retorne o nó. - - - - Call into left subtree. - Chamar subárvore à esquerda. - - - - Call into right subtree. - Chamar subárvore à direita. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Uniões Discriminadas também podem ser representadas como structs por meio do atributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Isso é útil em situações em que o desempenho de structs é superior - - - - the flexibility of reference types. - a flexibilidade de tipos de referência. - - - - However, there are two important things to know when doing this: - No entanto, existem duas coisas importantes a saber ao fazer isso: - - - - 1. A struct DU cannot be recursively-defined. - 1. Uma UD struct não pode ser definida recursivamente. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Uma UD struct deve ter nomes exclusivos para cada um dos seus casos. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Correspondência de padrões é um recurso do F# que permite que você utilize Padrões, - - - - which are a way to compare data with a logical structure or structures, - que são uma forma de comparar dados com uma estrutura lógica ou com estruturas, - - - - decompose data into constituent parts, or extract information from data in various ways. - decompor os dados em partes constituintes ou extrair informações de dados de diversas maneiras. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Em seguida, você pode expedir na "forma" de um padrão por meio da Correspondência de Padrões. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Um registro de nome e sobrenome de uma pessoa - - - - A Discriminated Union of 3 different kinds of employees - Uma União Discriminada de 3 tipos diferentes de funcionários - - - - Count everyone underneath the employee in the management hierarchy, - Conta todos abaixo do funcionário na hierarquia de gerenciamento, - - - - including the employee. - incluindo o funcionário. - - - - Find all managers/executives named "Dave" who do not have any reports. - Localize todos os gerentes/executivos chamados "Dave" que não têm nenhum relatório. - - - - This uses the 'function' shorthand to as a lambda expression. - Isso usa a forma abreviada de 'function' como uma expressão lambda. - - - - [] matches an empty list. - [] corresponde a uma lista vazia. - - - - '_' is a wildcard pattern that matches anything. - '_' é um padrão de caractere curinga que coincide com qualquer coisa. - - - - This handles the "or else" case. - Isso identifica o caso "ou também". - - - - You can also use the shorthand function construct for pattern matching, - Você também pode usar o constructo da função abreviada para correspondência de padrões, - - - - which is useful when you're writing functions which make use of Partial Application. - que é útil quando você está gravando funções que fazem uso do Aplicativo Parcial. - - - - Define some more functions which parse with the helper function. - Defina mais algumas funções que são analisadas com a função auxiliar. - - - - Active Patterns are another powerful construct to use with pattern matching. - Padrões Ativos são outro constructo avançado para usar com correspondência de padrões. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Eles permitem particionar os dados de entrada em formulários personalizados, decompondo-os no local da chamada de correspondência de padrão. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Correspondência de Padrões por meio de palavra-chave 'function' e Padrões Ativos geralmente têm essa aparência. - - - - Call the printer with some different values to parse. - Chamar a impressora com alguns valores diferentes para analisar. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Os valores de opção são qualquer tipo de valor marcado com 'Algum' ou 'Nenhum'. - - - - They are used extensively in F# code to represent the cases where many other - Eles são usados extensivamente no código F# para representar os casos em que muitos outros - - - - languages would use null references. - idiomas usariam referências nulas. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Primeiro, determine um CEP definido por meio de União Discriminada de Único Caso. - - - - Next, define a type where the ZipCode is optional. - Em seguida, defina um tipo em que o CEP é opcional. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Em seguida, defina um tipo de interface que representa um objeto para computar a zona de remessa para o CEP do cliente, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - determinadas implementações para os métodos abstratos 'getState' e 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Em seguida, calcule uma zona de remessa para um cliente usando uma instância da calculadora. - - - - This uses combinators in the Option module to allow a functional pipeline for - Isso usa combinadores no módulo Option para permitir um pipeline funcional para - - - - transforming data with Optionals. - transformando dados com Opcionais. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Unidades de medida são uma forma de anotar tipos numéricos primitivos de um modo fortemente tipado. - - - - You can then perform type-safe arithmetic on these values. - Então, você pode executar a aritmética fortemente tipada nesses valores. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Primeiro, abra uma coleção de nomes comuns de unidade - - - - Define a unitized constant - Definir uma constante unitizada - - - - Next, define a new unit type - Em seguida, defina um novo tipo de unidade - - - - Conversion factor mile to meter. - Fator de conversão de milha para metro. - - - - Define a unitized constant - Definir uma constante unitizada - - - - Compute metric-system constant - Computar a constante de sistema métrico - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Valores que usam Unidades de Medida podem ser usados exatamente como o tipo numérico primitivo para coisas como impressão. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Classes são uma maneira de definir novos tipos de objetos em F# e dão suporte a constructos padrão Orientados a objeto. - - - - They can have a variety of members (methods, properties, events, etc.) - Elas podem ter uma variedade de membros (métodos, propriedades, eventos, etc.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Para saber mais sobre Classes, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Para saber mais sobre Membros, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Uma classe de vetor bidimensional simples. - - - - The class's constructor is on the first line, - O construtor da classe está na primeira linha, - - - - and takes two arguments: dx and dy, both of type 'double'. - e leva dois argumentos: dx e dy, ambos do tipo 'duplo'. - - - - This internal field stores the length of the vector, computed when the - Este campo interno armazena o comprimento do vetor, computado quando o - - - - object is constructed - objeto é construído - - - - 'this' specifies a name for the object's self identifier. - 'this' especifica um nome para o identificador automático do objeto. - - - - In instance methods, it must appear before the member name. - Em métodos de instância, ele deve aparecer antes do nome do membro. - - - - This member is a method. The previous members were properties. - Esse membro é um método. Os membros anteriores eram propriedades. - - - - This is how you instantiate the Vector2D class. - É assim que você cria uma instância de classe Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Obter um novo objeto de vetor em escala, sem modificar o objeto original. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Classes genéricas permitem que os tipos sejam definidos em relação a um conjunto de parâmetros de tipo. - - - - In the following, 'T is the type parameter for the class. - No exemplo a seguir, 'T é o parâmetro de tipo para a classe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Este campo interno armazena os estados em uma lista. - - - - Add a new element to the list of states. - Adicione um novo elemento à lista de estados. - - - - use the '<-' operator to mutate the value. - use o operador '<-' para modificar o valor. - - - - Get the entire list of historical states. - Obter a lista completa de estados históricos. - - - - Get the latest state. - Obter o estado mais recente. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Uma instância ' int' da classe de controlador do estado. Observe que o parâmetro de tipo é deduzido. - - - - Add a state - Adicionar um estado - - - - Interfaces are object types with only 'abstract' members. - As interfaces são tipos de objeto com apenas membros 'abstract'. - - - - Object types and object expressions can implement interfaces. - Tipos de objeto e expressões de objeto podem implementar interfaces. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Este é um tipo que implementa IDisposable. - - - - This is the implementation of IDisposable members. - Essa é a implementação de membros IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Este é um objeto que implementa IDisposable por meio de uma Expressão de Objeto - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Diferentemente de outras linguagens, como C# ou Java, uma nova definição de tipo não é necessária - - - - to implement an interface. - para implementar uma interface. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - A biblioteca FSharp.Core define várias funções de processamento paralelo. Aqui - - - - you use some functions for parallel processing over arrays. - você usa algumas funções para processamento paralelo por matrizes. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Para saber mais, acesse: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Primeiro, uma matriz de entradas. - - - - Next, define a functions that does some CPU intensive computation. - Em seguida, defina uma função que realiza computação com uso intensivo de CPU. - - - - Next, do a parallel map over a large input array. - Em seguida, faça um mapa paralelo por uma grande matriz de entrada. - - - - Next, print the results. - Em seguida, imprima os resultados. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Eventos são uma linguagem comum para programação em .NET, especialmente com aplicativos WinForms ou WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Primeiro, crie a instância do objeto Evento que consiste em ponto de assinatura (event.Publish) e gatilho de eventos (event.Trigger). - - - - Next, add handler to the event. - Em seguida, adicione o manipulador ao evento. - - - - Next, trigger the event. - Em seguida, dispare o evento. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Em seguida, crie uma instância do evento que segue a convenção padrão do .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Em seguida, adicione um manipulador para este novo evento. - - - - Next, trigger this event (note that sender argument should be set). - Em seguida, dispare esse evento (observe que o argumento do remetente deve ser definido). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf deleted file mode 100644 index 6bded45999..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Этот пример поможет узнать о различных элементах языка F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Чтобы выполнить код в F# Interactive, выделите фрагмент кода и нажмите ALT+ВВОД или щелкните правой кнопкой мыши - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - и выберите команду "Выполнение в интерактивном режиме". Интерактивное окно F# можно также открыть из меню "Вид". - - - - For more about F#, see: - Дополнительные сведения о F# см. по адресу: - - - - To see this tutorial in documentation form, see: - Чтобы просмотреть это руководство в виде документа, см.: - - - - To learn more about applied F# programming, use - Чтобы получить дополнительные сведения о прикладном программировании на языке F#, воспользуйтесь - - - - To install the Visual F# Power Tools, use - Чтобы установить Visual F# Power Tools, используйте - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - "Сервис" --> "Расширения и обновления" --> "В сети" и выполните поиск - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Дополнительные шаблоны, которые можно использовать с F#, см. в разделе "Шаблоны в Интернете" в Visual Studio. - - - - 'New Project' --> 'Online Templates' - "Создать проект --> Шаблоны в Интернете" - - - - F# supports three kinds of comments: - F# поддерживает три типа комментариев: - - - - 1. Double-slash comments. These are used in most situations. - 1. Комментарии с двойной косой чертой. Они используются в большинстве ситуаций. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Комментарии блоков в стиле ML. Они используются довольно редко. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Комментарии с тройной косой чертой. Они используются для документирования функций, типов и т. д. - - - - They will appear as text when you hover over something which is decorated with these comments. - При наведении указателя мыши на код, задекорированный этими комментариями, они отображаются в виде текста. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Кроме того, они поддерживают XML-комментарии в стиле .NET, делая возможным формирование справочной документации, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - а также позволяют редакторам (таким как Visual Studio) извлекать из них информацию. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Открывайте пространства имен с помощью ключевого слова "open". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Модуль представляет собой группирование кода F#, например значений, типов и значений функций. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Группирование кода в модулях помогает держать связанный код в одном месте и предотвратить конфликты имен в программе. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Это пример целого числа. - - - - This is a sample floating point number. - Это пример числа с плавающей запятой. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Это новое число, вычисленное с помощью некоторых арифметических операций. Числовые типы преобразуются с помощью - - - - functions 'int', 'double' and so on. - функций "int", "double" и т. п. - - - - This is a list of the numbers from 0 to 99. - Это список чисел от 0 до 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Это список всех кортежей, содержащих все числа от 0 до 99 и их квадраты. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Следующая строка выводит список, включающий в себя кортежи, используя "%A" для универсальной печати. - - - - This is a sample integer with a type annotation - Это пример целого числа с аннотацией типа - - - - Values in F# are immutable by default. They cannot be changed - В F# значения по умолчанию неизменяемы. Их невозможно изменить - - - - in the course of a program's execution unless explicitly marked as mutable. - во время выполнения программы, если только они явно не помечены как изменяемые. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Привязка значения к имени через let делает его неизменяемым. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Сбой компиляции второй строки кода происходит, так как number неизменяем и привязан. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Переопределение number в другое значение запрещено в F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Изменяемая привязка. Она необходима, чтобы иметь возможность изменять значение otherNumber. - - - - When mutating a value, use '<-' to assign a new value. - При изменении значения используйте "<-", чтобы присвоить новое значение. - - - - You could not use '=' here for this purpose since it is used for equality - Не удалось использовать "=" здесь и для этой цели, так как знак используется как оператор равенства. - - - - or other contexts such as 'let' or 'module' - или другие контексты, такие как "let" или "module" - - - - Much of F# programming consists of defining functions that transform input data to produce - Программирование на языке F# в основном заключается в определении функций, которые преобразуют входные данные и выдают - - - - useful results. - полезные результаты. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - let используется для определения функции. Эта функция принимает целочисленный аргумент и возвращает целое число. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Круглые скобки необязательны для аргументов функции, если только не используется явная аннотация типа. - - - - Apply the function, naming the function return result using 'let'. - Применяйте функции, именуя возвращаемый функцией результат с помощью let. - - - - The variable type is inferred from the function return type. - Тип переменной определяется типом возвращаемого значения функции. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - В этой строке используется "%d" для вывода результата как целого числа. Это типобезопасно. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Если бы result1 не принадлежал к типу int, при компиляции строки произошел бы сбой. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - При необходимости аннотируйте тип имени параметра при помощи "(argument:type)". Скобки обязательны. - - - - Conditionals use if/then/elid/elif/else. - В условных выражениях используются операторы if, then, elid, elif и else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Обратите внимание, что в F# используется синтаксис с отступами в виде пробелов, аналогично таким языкам, как Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Эта строка использует "%f" для вывода результата в виде числа с плавающей запятой. Как и в случае с "%d" выше, это типобезопасно. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Логические значения являются основными типами данных в F#. Ниже приведен ряд примеров логических типов данных и условной логики. - - - - To learn more, see: - Подробности: - - - - and - И - - - - Booleans values are 'true' and 'false'. - Логические значения — это true и false. - - - - Operators on booleans are 'not', '&&' and '||'. - Операторы для логических значений — not, && и ||. - - - - This line uses '%b'to print a boolean value. This is type-safe. - В этой строке "%b" используется для вывода логического значения. Это типобезопасно. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Строки являются основными типами данных в F#. Ниже приведено несколько примеров строк и основных действий с ними. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - В строках используются двойные кавычки. - - - - Strings can also use @ to create a verbatim string literal. - В строках также может использоваться @ для создания буквальных (verbatim) строковых литералов. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Будут пропускаться escape-символы, такие как "\", "\n", "\t" и т. д. - - - - String literals can also use triple-quotes. - В строковых литералах также используются тройные кавычки. - - - - String concatenation is normally done with the '+' operator. - Сцепление строк обычно выполняется при помощи оператора "+". - - - - This line uses '%s' to print a string value. This is type-safe. - В этой строке "%s" используется для вывода строкового значения. Это типобезопасно. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Подстроки используют нотацию индексатора. Эта строка кода извлекает первые семь символов в виде подстроки. - - - - Note that like many languages, Strings are zero-indexed in F#. - Учтите, что, как и во многих других языках, в F# строки индексируются от нуля. - - - - Tuples are simple combinations of data values into a combined value. - Кортеж — это простое сочетание значений данных в виде объединенного значения. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Простой кортеж целых чисел. - - - - A function that swaps the order of two values in a tuple. - Функция, меняющая местами два значения в кортеже. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Определение типа F# будет автоматически назначать функции универсальный тип, - - - - meaning that it will work with any type. - что означает, что он будет работать с любым типом. - - - - A tuple consisting of an integer, a string, - Кортеж, состоящий из целого числа, строки - - - - and a double-precision floating point number. - и числа двойной точности с плавающей запятой. - - - - A simple tuple of integers with a type annotation. - Простой кортеж целых чисел с аннотацией типа. - - - - Type annotations for tuples use the * symbol to separate elements - Аннотации типов для кортежей используют символ * для разделения элементов. - - - - Tuples are normally objects, but they can also be represented as structs. - Кортежи обычно являются объектами, но они также могут быть представлены как структуры. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Они полноценно взаимодействуют со структурами в C# и Visual Basic.NET; тем не менее - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - кортежи структур нельзя явно преобразовать в кортежи объектов (часто называемые эталонными кортежами). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Из-за этого произойдет сбой компиляции второй строки ниже. Раскомментируйте ее, чтобы увидеть, что произойдет. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Хотя кортежи-структуры и ссылочные кортежи невозможно преобразовывать неявно, - - - - you can explicitly convert via pattern matching, as demonstrated below. - вы можете явно преобразовывать их с помощью сопоставления шаблонов, как показано ниже. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Операторы конвейера F# ("|>", "<|" и т. д.) и операторы объединения F# (">>", "<<") - - - - are used extensively when processing data. These operators are themselves functions - широко используются при обработке данных. Эти операторы сами по себе являются функциями, - - - - which make use of Partial Application. - использующими частичное применение. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Подробности об этих операторах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining. - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Подробности о частичном применении: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments. - - - - Squares a value. - Возводит значение в квадрат. - - - - Adds 1 to a value. - Добавляет 1 к значению. - - - - Tests if an integer value is odd via modulo. - Проверяет, является ли целое число нечетным по модулю. - - - - A list of 5 numbers. More on lists later. - Список из 5 чисел. Дополнительно о списках позднее. - - - - Given a list of integers, it filters out the even numbers, - При наличии списка целых чисел выполняет фильтрацию по номерам событий, - - - - squares the resulting odds, and adds 1 to the squared odds. - возводит полученные нечетные в квадрат, а затем добавляет 1 к нечетным, возведенным в квадрат. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Более короткий способ записи squareOddValuesAndAddOne — вложить каждый - - - - sub-result into the function calls themselves. - вложенный результат в сами вызовы функции. - - - - This makes the function much shorter, but it's difficult to see the - Это позволяет значительно сократить функцию, но будет сложно увидеть - - - - order in which the data is processed. - порядок, в котором обрабатываются данные. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Предпочтительный способ записи squareOddValuesAndAddOne — использовать операторы конвейера F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Это позволяет избежать создания промежуточных результатов, и при этом более удобно для чтения, - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - чем вложение вызовов функций, таких как squareOddValuesAndAddOneNested. - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - squareOddValuesAndAddOnePipeline можно сократить, переместив второй вызов List.map - - - - into the first, using a Lambda Function. - в первый, используя лямбда-функцию. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Учтите, что конвейеры также используются внутри лямбда-функции. Операторы конвейера F# - - - - can be used for single values as well. This makes them very powerful for processing data. - можно также использовать для отдельных значений. Это делает их очень эффективными при обработке данных. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - И наконец, можно исключить необходимость явного принятия значений в качестве параметра при помощи ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - для объединения двух основных операций: фильтрации четных чисел, а затем возведения в квадрат и добавления единицы. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Аналогично, часть "fun x -> ..." лямбда-выражения также не требуется, так как x просто - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - определяется в этой области действия, чтобы его можно было передать в функциональный конвейер. Таким образом, здесь также можно - - - - there as well. - использовать ">>". - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Результат squareOddValuesAndAddOneComposition сам по себе является другой функцией, которая принимает - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - список целых чисел в качестве входных данных. Если squareOddValuesAndAddOneComposition выполняется со списком - - - - of integers, you'll notice that it produces the same results as previous functions. - целых чисел, вы заметите, что результаты соответствуют результатам предыдущих функций. - - - - This is using what is known as function composition. This is possible because functions in F# - Используется так называемая композиция функций. Это возможно, так как функции в F# - - - - use Partial Application and the input and output types of each data processing operation match - используют частичное применение, а входные и выходные типы каждой операции обработки данных соответствуют - - - - the signatures of the functions we're using. - сигнатурам функций, которые мы используем. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Списки — это упорядоченные, неизменяемые однонаправленные списки. При вычислении они являются безотложными. - - - - This module shows various ways to generate lists and process lists with some functions - Этот модуль демонстрирует различные способы создания и обработки списков при помощи некоторых функций - - - - in the 'List' module in the F# Core Library. - в модуле List основной библиотеки F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/lists. - - - - Lists are defined using [ ... ]. This is an empty list. - Списки определяются с помощью [ ... ]. Это пустой список. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Это — список с тремя элементами. Символ ";" используется для разделения элементов в одной строке. - - - - You can also separate elements by placing them on their own lines. - Элементы можно также разделить, поместив их в отдельные строки. - - - - This is a list of integers from 1 to 1000 - Это список целых чисел от 1 до 1000. - - - - Lists can also be generated by computations. This is a list containing - Списки также могут создаваться в результате вычислений. Это список, содержащий - - - - all the days of the year. - все дни года. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Вывод первых пяти элементов daysList при помощи List.take. - - - - Computations can include conditionals. This is a list containing the tuples - Вычисления могут включать условные выражения. Это список, содержащий кортежи - - - - which are the coordinates of the black squares on a chess board. - являющиеся координатами черных квадратов на шахматной доске. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Списки можно преобразовывать с помощью List.map и других методов объединения, применяемых в функциональном программировании. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Это определение создает новый список путем возведения в квадрат чисел из numberList с помощью конвейера. - - - - operator to pass an argument to List.map. - оператор для передачи аргумента в List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Существует множество других сочетаний списков. Приведенный ниже код вычисляет сумму квадратов. - - - - numbers divisible by 3. - числа, кратные 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Массивы — это изменяемые коллекции фиксированного размера, содержащие элементы одного типа. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Хотя они и похожи на списки (поддерживают перечисление и включают схожие методы объединения для обработки данных), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - они, как правило, быстрее и поддерживают быстрый случайный доступ. С другой стороны, они менее безопасны, так как изменяемы. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/arrays. - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Это — пустой массив. Обратите внимание, что синтаксис похож на синтаксис списков, но используются квадратные скобки "[| ... |]". - - - - Arrays are specified using the same range of constructs as lists. - Массивы задаются с помощью того же диапазона конструкций в виде списков. - - - - This is an array of numbers from 1 to 1000. - Это массив чисел от 1 до 1000. - - - - This is an array containing only the words "hello" and "world". - Это — массив, содержащий только слова "hello" и "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Это — массив, инициализируемый по индексу и содержащий четные числа от 0 до 2000. - - - - Sub-arrays are extracted using slicing notation. - Подмассивы извлекаются с помощью нотации выделения фрагмента. - - - - You can loop over arrays and lists using 'for' loops. - Можно выполнять перебор массивов и списков при помощи циклов for. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Изменить содержимое элемента массива можно с помощью оператора присваивания в виде стрелки влево. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Подробности об этом операторе: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/values/index#mutable-variables. - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Вы можете преобразовывать массивы при помощи Array.map и других операций функционального программирования. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Следующий фрагмент вычисляет сумму длин слов, которые начинаются с буквы "h". - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Последовательности — это логические серии элементов одного типа. Это — более общий тип, чем списки и массивы. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Последовательности вычисляются по требованию и заново вычисляются при каждом их переборе. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Последовательность F# является псевдонимом для .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Функции обработки последовательностей можно также применять к спискам и массивам. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Это пустая последовательность. - - - - This a sequence of values. - Это последовательность значений. - - - - This is an on-demand sequence from 1 to 1000. - Это последовательность по требованию от 1 до 1000. - - - - This is a sequence producing the words "hello" and "world" - Это последовательность, создающая слова hello и world. - - - - This sequence producing the even numbers up to 2000. - Эта последовательность выдает целые числа до 2000. - - - - This is an infinite sequence which is a random walk. - Это бесконечная последовательность, представляющая случайное блуждание. - - - - This example uses yield! to return each element of a subsequence. - В этом примере используется оператор yield! для получения каждого элемента подпоследовательности. - - - - This example shows the first 100 elements of the random walk. - В этом примере показаны первые 100 элементов случайного блуждания. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Рекурсивные функции могут вызывать сами себя. В F# функции являются рекурсивными только - - - - when declared using 'let rec'. - при объявлении с помощью let rec. - - - - Recursion is the preferred way to process sequences or collections in F#. - Рекурсия — это предпочтительный способ обработки последовательностей или коллекций в F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions. - - - - This example shows a recursive function that computes the factorial of an - В этом примере показана рекурсивная функция, вычисляющая факториал - - - - integer. It uses 'let rec' to define a recursive function. - целое число. В нем используется "let rec" для определения рекурсивной функции. - - - - Computes the greatest common factor of two integers. - Вычисляет наибольший общий делитель двух целых чисел. - - - - Since all of the recursive calls are tail calls, - Так как все рекурсивные вызовы являются хвостовыми вызовами, - - - - the compiler will turn the function into a loop, - компилятор сделает из функции цикл, - - - - which improves performance and reduces memory consumption. - что повысит производительность и снизит потребление памяти. - - - - This example computes the sum of a list of integers using recursion. - Этот пример вычисляет сумму списка целых чисел при помощи рекурсии. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - При этом sumList становится функцией с хвостовой рекурсией, использующей вспомогательную функцию с аккумулятором результатов. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Вызывается вспомогательная функция хвостовой рекурсии, предоставляющая "0" в качестве аккумулятора начальных значений. - - - - An approach like this is common in F#. - Подобный подход широко распространен в F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Записи являются агрегатами именованных значений с необязательными элементами (такими как методы). - - - - They are immutable and have structural equality semantics. - Они являются неизменяемыми и обладают семантикой структурного равенства. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/records. - - - - This example shows how to define a new record type. - В этом примере показано, как определить новый тип записи. - - - - This example shows how to instantiate a record type. - В этом примере показано создание экземпляра типа записи. - - - - You can also do this on the same line with ';' separators. - Это также можно сделать в одной строке при помощи разделителя ";", - - - - This example shows how to use "copy-and-update" on record values. It creates - В этом примере показано, как использовать функцию "копировать и обновить" применительно к значениям записей. В нем создается - - - - a new record value that is a copy of contact1, but has different values for - новое значение записи, которое является копией contact1, но имеет другие значения для - - - - the 'Phone' and 'Verified' fields. - поля Phone и Verified. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions. - - - - This example shows how to write a function that processes a record value. - В этом примере показано, как создать функцию, обрабатывающую значение записи. - - - - It converts a 'ContactCard' object to a string. - Он преобразует объект ContactCard в строку. - - - - This is an example of a Record with a member. - Это — пример записи с элементом. - - - - Members can implement object-oriented members. - Элементы могут реализовать объектно-ориентированные элементы. - - - - Members are accessed via the '.' operator on an instantiated type. - Доступ к элементам осуществляется через оператор "." для экземпляра типа. - - - - Records can also be represented as structs via the 'Struct' attribute. - Записи также могут быть представлены как структуры при помощи атрибута Struct. - - - - This is helpful in situations where the performance of structs outweighs - Это удобно в ситуациях, когда производительность структур важнее - - - - the flexibility of reference types. - гибкости ссылочных типов. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Размеченные объединения (DU) — это значения, которые могут состоять из нескольких именованных форм или ветвей. - - - - Data stored in DUs can be one of several distinct values. - Данные, хранимые в размеченных объединениях, могут являться одними из нескольких различных значений. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/discriminated-unions. - - - - The following represents the suit of a playing card. - Следующий код представляет масть игральной карты. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Размеченное объединение также может использоваться для представления ранга игральной карты. - - - - Represents the rank of cards 2 .. 10 - Представляет достоинство карт 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Кроме того, размеченные объединения могут реализовать объектно-ориентированные элементы. - - - - This is a record type that combines a Suit and a Rank. - Это тип записи, объединяющий масть и достоинство. - - - - It's common to use both Records and Disciminated Unions when representing data. - Как правило, при представлении данных используются как записи, так и размеченные объединения. - - - - This computes a list representing all the cards in the deck. - Вычисляется список, представляющий все карты в колоде. - - - - This example converts a 'Card' object to a string. - В этом примере объект Card преобразуется в строку. - - - - This example prints all the cards in a playing deck. - В этом примере печатаются все карты колоды. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Размеченные объединения с одной ветвью часто используются для моделирования доменов. Это более типобезопасно, чем использование - - - - over primitive types such as strings and ints. - примитивных типов, таких как строки и целые числа. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Размеченные объединения с одной ветвью нельзя неявно преобразовать в тип или из типа, оболочкой которого они служат. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Например, функция, которая принимает адрес, не может принять в качестве входных данных строку - - - - or vive/versa. - или наоборот. - - - - You can easily instantiate a single-case DU as follows. - Можно легко создать экземпляр размеченного объединения с одной ветвью следующим образом. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Если вам требуется значение, вы можете распаковать базовое значение при помощи простой функции. - - - - Printing single-case DUs is simple with unwrapping functions. - Вывод размеченных объединений с одной ветвью не представляет сложности при использовании функций распаковки. - - - - Disciminated Unions also support recursive definitions. - Размеченные объединения также поддерживают рекурсивные определения. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Это представляет двоичное дерево поиска, в котором одна ветвь является пустым деревом, - - - - and the other being a Node with a value and two subtrees. - а другая — узлом со значением и двумя поддеревьями. - - - - Check if an item exists in the binary search tree. - Проверка наличия элемента в двоичном дереве поиска. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Рекурсивный поиск при помощи сопоставления шаблонов. Возвращает значение True, если существует; в противном случае — значение False. - - - - Check the left subtree. - Проверка левого поддерева. - - - - Check the right subtree. - Проверка правого поддерева. - - - - Inserts an item in the Binary Search Tree. - Вставляет элемент в двоичное дерево поиска. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Находит место для рекурсивной вставки при помощи сопоставления шаблонов, а затем вставляет новый узел. - - - - If the item is already present, it does not insert anything. - Если элемент уже существует, ничего не вставляется. - - - - No need to insert, it already exists; return the node. - Нет необходимости вставки, так как она уже существует; возврат узла. - - - - Call into left subtree. - Вызов левого поддерева. - - - - Call into right subtree. - Вызов правого поддерева. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Размеченные объединения также могут быть представлены как структуры при помощи атрибута Struct. - - - - This is helpful in situations where the performance of structs outweighs - Это удобно в ситуациях, когда производительность структур важнее - - - - the flexibility of reference types. - гибкости ссылочных типов. - - - - However, there are two important things to know when doing this: - Но при этом следует помнить о следующих двух важных вещах: - - - - 1. A struct DU cannot be recursively-defined. - 1. Размеченное объединение структуры не может определяться рекурсивно. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Каждой из ветвей размеченного объединения структуры должны быть присвоены уникальные названия. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Сопоставление шаблонов — это возможность F#, которая позволяет использовать шаблоны, - - - - which are a way to compare data with a logical structure or structures, - что представляет способ сравнения данных с логической структурой или структурами, - - - - decompose data into constituent parts, or extract information from data in various ways. - разложение данных на составные части или извлечение информации из данных различными способами. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Затем можно передать "форму" шаблона при помощи сопоставления шаблонов. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/pattern-matching. - - - - A record for a person's first and last name - Запись с именем и фамилией человека - - - - A Discriminated Union of 3 different kinds of employees - Размеченное соединение трех разных типов сотрудников - - - - Count everyone underneath the employee in the management hierarchy, - Подсчет всех сотрудников на уровнях иерархии управления, следующих за этим сотрудником, - - - - including the employee. - включая этого сотрудника. - - - - Find all managers/executives named "Dave" who do not have any reports. - Поиск всех менеджеров и руководителей с именем Dave, не имеющих отчетов. - - - - This uses the 'function' shorthand to as a lambda expression. - При этом используется сокращение функции до лямбда-выражения. - - - - [] matches an empty list. - [] соответствует пустому списку. - - - - '_' is a wildcard pattern that matches anything. - "_" — подстановочный знак, обозначающий любой набор символов. - - - - This handles the "or else" case. - Обрабатывается ветвь "or else". - - - - You can also use the shorthand function construct for pattern matching, - Для сопоставления шаблонов можно также использовать краткую форму конструкции функции, - - - - which is useful when you're writing functions which make use of Partial Application. - что удобно при написании функций, использующих частичное применение. - - - - Define some more functions which parse with the helper function. - Определение некоторых других функций, которые выполняют анализ при помощи вспомогательной функции. - - - - Active Patterns are another powerful construct to use with pattern matching. - Активные шаблоны — это еще одна эффективная конструкция, используемая при сопоставлении шаблонов. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Они позволяют сегментировать входные данные в настраиваемые формы с декомпозицией в месте вызова сопоставления шаблонов. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/active-patterns. - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Сопоставление шаблонов по ключевому слову function и активным шаблонам часто выглядит следующим образом. - - - - Call the printer with some different values to parse. - Вызов принтера с несколькими разными значениями для анализа. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Опциональные значения - это любой тип значений, отмеченных ключевым словом Some или None. - - - - They are used extensively in F# code to represent the cases where many other - Они широко используются в коде F# для представления случаев, когда во многих - - - - languages would use null references. - других языках используются пустые ссылки. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/options. - - - - First, define a zipcode defined via Single-case Discriminated Union. - Во-первых, определите индекс при помощи размеченного объединения с одной ветвью. - - - - Next, define a type where the ZipCode is optional. - Далее определите тип, в котором ZipCode является необязательным. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Далее определите тип интерфейса, представляющий объект для вычисления зоны доставки по почтовому индексу заказчика, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - при заданных реализациях абстрактных методов getState и getShippingZone. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Затем определите зону доставки для заказчика при помощи экземпляра калькулятора. - - - - This uses combinators in the Option module to allow a functional pipeline for - При этом используются методы объединения в модуле Option, чтобы обеспечить работу функционального конвейера для - - - - transforming data with Optionals. - преобразования данных с помощью Optionals. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Единицы измерения — это способ аннотации примитивных числовых типов типобезопасным способом. - - - - You can then perform type-safe arithmetic on these values. - Затем с этими значениями можно выполнять типобезопасные арифметические действия. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/units-of-measure. - - - - First, open a collection of common unit names - Сначала откройте коллекцию стандартных названий единиц измерения. - - - - Define a unitized constant - Определите константу с единицей измерения. - - - - Next, define a new unit type - Далее определите новый тип единицы. - - - - Conversion factor mile to meter. - Коэффициент пересчета миль в метры. - - - - Define a unitized constant - Определите константу с единицей измерения. - - - - Compute metric-system constant - Вычислите константу в метрической системе. - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Значения, использующие единицы измерения, можно применять как примитивные числовые типы для таких действий, как печать. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Классы — это способ определения новых типов объектов в F#. Они поддерживают стандартные объектно-ориентированные конструкции. - - - - They can have a variety of members (methods, properties, events, etc.) - Они могут содержать различные элементы (методы, свойства, события и т. д.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Подробности о классах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/classes. - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Подробности об элементах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/members. - - - - A simple two-dimensional Vector class. - Простой двухмерный класс Vector. - - - - The class's constructor is on the first line, - Конструктор класса находится в первой строке - - - - and takes two arguments: dx and dy, both of type 'double'. - и принимает два аргумента: dx и dy, оба имеют тип double. - - - - This internal field stores the length of the vector, computed when the - В этом внутреннем поле хранится длина вектора, вычисляемая, когда - - - - object is constructed - объект создается - - - - 'this' specifies a name for the object's self identifier. - Ключевое слово this задает имя идентификатора самого объекта. - - - - In instance methods, it must appear before the member name. - В методах экземпляров оно должно находиться перед именем элемента. - - - - This member is a method. The previous members were properties. - Этот элемент является методом. Предыдущие элементы были свойствами. - - - - This is how you instantiate the Vector2D class. - Вот как выполняется создание экземпляра класса Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Получение нового объекта масштабируемого вектора без изменения исходного объекта. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Универсальные классы позволяют определять типы с набором параметров типа. - - - - In the following, 'T is the type parameter for the class. - В следующем примере 'T — это параметр типа для класса. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/generics/. - - - - This internal field store the states in a list. - В этом внутреннем поле хранятся состояния в списке. - - - - Add a new element to the list of states. - Добавление нового элемента в список состояний. - - - - use the '<-' operator to mutate the value. - Оператор "<-" служит для изменения значения. - - - - Get the entire list of historical states. - Получение полного списка исторических состояний. - - - - Get the latest state. - Получение последнего состояния. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Экземпляр int класса отслеживания состояний. Обратите внимание, что параметр типа подразумевается. - - - - Add a state - Добавление состояния - - - - Interfaces are object types with only 'abstract' members. - Интерфейсы — это типы объектов, которые имеют только абстрактные члены. - - - - Object types and object expressions can implement interfaces. - Типы объектов и выражения объектов могут реализовывать интерфейсы. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/interfaces. - - - - This is a type that implements IDisposable. - Это — тип, который реализует интерфейс IDisposable. - - - - This is the implementation of IDisposable members. - Это — реализация элементов интерфейса IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Это — объект, реализующий интерфейс IDisposable через выражение объекта. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - В отличие от других языков, таких как C# или Java, новое определение типа не требуется - - - - to implement an interface. - для реализации интерфейса. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - В библиотеке FSharp.Core определен ряд функций параллельной обработки. Здесь - - - - you use some functions for parallel processing over arrays. - вы используете определенные функции для параллельной обработки массивов. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Подробности: https://msdn.microsoft.com/ru-ru/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D. - - - - First, an array of inputs. - Сначала — массив входных данных. - - - - Next, define a functions that does some CPU intensive computation. - Далее определите функции, выполняющие ряд вычислений с интенсивным использованием ЦП. - - - - Next, do a parallel map over a large input array. - Затем выполните параллельное сопоставление по большому входному массиву. - - - - Next, print the results. - Далее напечатайте результаты. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - События представляют собой стандартные идиомы программирования .NET, особенно для приложений WinForms или WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/members/events. - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Сначала создайте экземпляр объекта Event, состоящий из точки подписки (event.Publish) и триггера события (event.Trigger). - - - - Next, add handler to the event. - Затем добавьте обработчик для события. - - - - Next, trigger the event. - Затем активируйте событие. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Затем создайте экземпляр события в соответствии со стандартным соглашением .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Затем добавьте обработчик для этого нового события. - - - - Next, trigger this event (note that sender argument should be set). - Затем вызовите событие (обратите внимание на то, что аргумент sender должен быть задан). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf deleted file mode 100644 index 2fcd8d0f2c..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Bu örnek, size F# dilinin öğelerini gösterir. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Kodu F# Etkileşimli’de yürütmek için kodun bir bölümünü vurgulayın ve Alt-Enter'a basın veya sağ tıklatın - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - ve "Etkileşimlide Yürüt" seçeneğini belirleyin. F# Etkileşimli Penceresini "Görünüm" menüsünden açabilirsiniz. - - - - For more about F#, see: - F# hakkında daha fazla bilgi için bkz: - - - - To see this tutorial in documentation form, see: - Bu öğreticiyi belge biçiminde görmek için, bkz: - - - - To learn more about applied F# programming, use - Uygulamalı F# programlama hakkında daha fazla bilgi edinmek için şunu kullanın: - - - - To install the Visual F# Power Tools, use - Visual F# Power Tools'u yüklemek için - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Araçlar' --> 'Uzantılar ve Güncelleştirmeler' --> `Çevrimiçi` seçeneğini kullanın ve arama yapın - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - F# ile kullanabileceğiniz ek şablonlar için Visual Studio'daki 'Çevrimiçi Şablonlar'a bakın, - - - - 'New Project' --> 'Online Templates' - 'Yeni Proje' --> 'Çevrimiçi Şablonlar' - - - - F# supports three kinds of comments: - F# üç açıklama türünü destekler: - - - - 1. Double-slash comments. These are used in most situations. - 1. Çift eğik çizgili açıklamalar. Çoğu durumda bunlar kullanılır. - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML stili Blok açıklamaları. Bunlar sık kullanılmaz. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Üç eğik çizgili açıklamalar. Bunlar işlevleri, türleri vb. belgelemek için kullanılır. - - - - They will appear as text when you hover over something which is decorated with these comments. - Bu açıklamalarla belirlenmiş bir öğenin üzerine geldiğinizde, açıklamalar metin olarak görüntülenir. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Ayrıca başvuru belgeleri oluşturmanıza olanak sağlayan .NET stili XML açıklamalarını destekler, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - bilgi ayıklamak için düzenleyicilerin (örneğin Visual Studio) kullanılmasına da olanak sağlar. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 'Open' anahtar sözcüğünü kullanarak ad alanlarını açın. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Modül; değer, tür ve işlev değeri gibi bir F# kodu gruplandırmasıdır. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Kodu modüller içinde gruplandırmak ilgili kodların bir arada bulunmasını sağlar ve programınızda ad çakışmalarını önlemeye yardımcı olur. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Bu, örnek bir tamsayıdır. - - - - This is a sample floating point number. - Bu, örnek bir kayan noktalı sayıdır. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Bu, aritmetik kullanarak yeni bir sayı hesaplar. Sayısal türler - - - - functions 'int', 'double' and so on. - 'int', 'double' vb. işlevler kullanılarak dönüştürülür. - - - - This is a list of the numbers from 0 to 99. - Bu, 0'dan 99'a kadar olan sayıların listesidir. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Bu, 0'dan 99'a kadar olan sayıları ve bunların karelerini içeren bir listedir. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Sonraki satır genel yazdırma için '%A' kullanarak demetleri içeren bir liste yazdırır. - - - - This is a sample integer with a type annotation - Bu tür açıklaması olan örnek bir tamsayıdır - - - - Values in F# are immutable by default. They cannot be changed - F# değerleri varsayılan olarak sabittir. Bu değerler - - - - in the course of a program's execution unless explicitly marked as mutable. - değiştirilebilir olarak açıkça işaretlenmediği sürece bir programın yürütülmesi sırasında değiştirilemez. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Bir değeri 'let' ile bir ada bağlamak, değeri sabit yapar. - - - - The second line of code fails to compile because 'number' is immutable and bound. - 'Number' değişmez ve bağlı olduğu için ikinci kod satırı derlenemiyor. - - - - Re-defining 'number' to be a different value is not allowed in F#. - F# içinde 'number' değerini farklı bir değer olarak yeniden tanımlamaya izin verilmez. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Değiştirilebilir bir bağlama. Bu, 'otherNumber' değerini değiştirmek için gereklidir. - - - - When mutating a value, use '<-' to assign a new value. - Bir değeri değiştirirken, yeni bir değer atamak için '<-' kullanın. - - - - You could not use '=' here for this purpose since it is used for equality - Eşitlik amacıyla kullanıldığından, burada '=' kullanamazsınız - - - - or other contexts such as 'let' or 'module' - veya 'let' ya da 'module' gibi diğer bağlamlar - - - - Much of F# programming consists of defining functions that transform input data to produce - F# programlama çoğunlukla, giriş verilerini kullanışlı sonuçlara dönüştüren işlevleri - - - - useful results. - tanımlamaktan oluşur. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Bir işlevi tanımlamak için 'let' kullanın. Bu, bir tamsayı bağımsız değişkenini kabul ederek bir tamsayı döndürür. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - İşlev bağımsız değişkenlerinde ayraçlar, açık tür ek açıklaması kullanılan durumlar dışında isteğe bağlıdır. - - - - Apply the function, naming the function return result using 'let'. - İşlev döndürme sonucunu 'let' ile adlandırarak işlevi uygulayın. - - - - The variable type is inferred from the function return type. - Değişken türü, işlev dönüş türü olarak algılanır. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Bu satır, sonucu bir tamsayı olarak yazdırmak için '%d' kullanır. Tür kullanımıyla uyumludur. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 'Result1' 'int' türünde değilse, satır derleme işlemi başarısız olur. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Gerekli olduğunda, '(argument:type)' kullanarak parametre adı türü için ek açıklama girin. Ayraçlar gereklidir. - - - - Conditionals use if/then/elid/elif/else. - Koşullu deyimlerde if/then/elid/elif/else kullanılır. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - F#'ın, Python gibi diller ile benzer şekilde, boşluk girintisini tanıyan söz dizimi kullandığını unutmayın. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Bu satır, sonucu kayan noktalı sayı olarak yazdırmak için '%f' kullanır. Yukarıdaki '%d' gibi bu da tür kullanımıyla uyumludur. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Boole değerleri, F# içindeki temel veri türleridir. Aşağıda bazı Boole ve koşullu mantık örnekleri verilmiştir. - - - - To learn more, see: - Daha fazla bilgi için bkz. - - - - and - ve - - - - Booleans values are 'true' and 'false'. - Boole değerleri şunlardır: 'true' ve 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Boole değerleri üzerindeki işleçler: 'not', '&&' ve '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Bu satır, bir boole değeri yazdırmak için '%b' kullanır. Tür kullanımıyla uyumludur. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Dizeler, F# içindeki temel veri türleridir. Aşağıda bazı Dizeler ve temel dize işleme örnekleri verilmiştir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Dizeler çift tırnak kullanır. - - - - Strings can also use @ to create a verbatim string literal. - Dizeler ayrıca, tam harf dizisi oluşturmak için @ kullanabilir. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Bu; '\', '\n', '\t' vb. kaçış karakterlerini yoksayar. - - - - String literals can also use triple-quotes. - Harf dizileri ayrıca üçlü tırnak da kullanabilir. - - - - String concatenation is normally done with the '+' operator. - Dizi bitiştirme normalde '+' işleci ile yapılır. - - - - This line uses '%s' to print a string value. This is type-safe. - Bu satır, bir dize değeri yazdırmak için '%s' kullanır. Tür kullanımıyla uyumludur. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Alt dizeler dizin oluşturucu gösterimini kullanır. Bu satır, ilk 7 karakteri alt dize olarak ayıklar. - - - - Note that like many languages, Strings are zero-indexed in F#. - Birçok dilde olduğu gibi F#'ta da Dizeler sıfır dizinlidir. - - - - Tuples are simple combinations of data values into a combined value. - Demetler, veri değerlerinin birleşik bir değer halindeki basit bileşimleridir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Basit bir tamsayı demeti. - - - - A function that swaps the order of two values in a tuple. - Bir demetteki iki değerin sırasını değiştiren bir işlev. - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# Tür Çıkarımı, işlevi genel türe sahip olacak şekilde otomatik olarak genelleştirir, - - - - meaning that it will work with any type. - yani, herhangi bir tür ile çalışabilir. - - - - A tuple consisting of an integer, a string, - Bir tamsayı, bir dize ve bir çift duyarlıklı kayan nokta sayısından - - - - and a double-precision floating point number. - oluşan bir demet. - - - - A simple tuple of integers with a type annotation. - Tür ek açıklaması içeren basit bir tamsayı tanımlama grubu. - - - - Type annotations for tuples use the * symbol to separate elements - Tanımlama grupları için tür ek açıklamaları öğeleri ayırmak için * sembolünü kullanır - - - - Tuples are normally objects, but they can also be represented as structs. - Demetler, normalde nesnedir ancak yapı olarak da gösterilebilir. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Bunlar C# ve Visual Basic.NET ile tamamen uyumlu olarak birlikte çalışır ancak - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - yapı demetleri, nesne demetleri ile (genellikle başvuru demetleri olarak adlandırılır) örtük olarak dönüştürülebilir değildir. - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Bu nedenle aşağıdaki ikinci satırı derleme işlemi başarısız olacak. Ne olacağını görmek için açıklamayı kaldırın. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Yapı demetleri ile başvuru demetleri arasında örtük dönüştürme gerçekleştiremezsiniz, ancak - - - - you can explicitly convert via pattern matching, as demonstrated below. - aşağıda gösterildiği gibi, desen eşleştirme aracılığıyla açık dönüştürme gerçekleştirebilirsiniz. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# kanal işleçleri ('|>', '<|', vb.) ve F# birleştirme işleçleri ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - veriler işlenirken yaygın olarak kullanılır. Bu işleçler, başı başına birer işlevdir ve - - - - which make use of Partial Application. - Kısmi Uygulamadan yararlanır. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Bu işleçler hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Kısmi Uygulama hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Bir değerin karesini alır. - - - - Adds 1 to a value. - Bir değere 1 ekler. - - - - Tests if an integer value is odd via modulo. - Mod aracılığıyla bir tamsayı değerinin tek sayı olup olmadığını test eder. - - - - A list of 5 numbers. More on lists later. - 5 numaradan oluşan bir liste. Listeler hakkında daha fazla bilgiyi ilerleyen bölümlerde bulabilirsiniz. - - - - Given a list of integers, it filters out the even numbers, - Bir tamsayı listesinde, çift sayıları filtreler, - - - - squares the resulting odds, and adds 1 to the squared odds. - kalan tek sayıların karesini alır ve karesi alınan tek sayılara 1 ekler. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 'squareOddValuesAndAddOne' yazmanın daha kısa bir yolu, her bir - - - - sub-result into the function calls themselves. - alt sonucu işlev hücrelerinin kendisinde iç içe yerleştirmektir. - - - - This makes the function much shorter, but it's difficult to see the - Bu, işlevi çok daha kısa hale getirir ancak - - - - order in which the data is processed. - verilerin işlenme sırasını görmek zordur. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 'squareOddValuesAndAddOne' yazmanın tercih edilen bir yolu, F# kanal işleçlerini kullanmaktır. - - - - This allows you to avoid creating intermediate results, but is much more readable - Bu, ara sonuçlar oluşturmaktan kaçınmanızı sağlar ancak - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 'squareOddValuesAndAddOneNested' gibi iç içe geçmiş işlev çağrılarından daha okunaklıdır - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 'squareOddValuesAndAddOnePipeline' öğesini kısaltmak için ikinci `List.map` çağrısını - - - - into the first, using a Lambda Function. - bir Lambda İşlevi kullanarak birinciye taşıyabilirsiniz. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Komut zincirleri, lambda işlevi içinde de kullanılıyor. F# kanal işleçleri - - - - can be used for single values as well. This makes them very powerful for processing data. - tek değerler için de kullanılabilir. Bu, işleçlerin veri işleme işlevlerini geliştirir. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Son olarak, şu iki temel işlemi oluşturmak için '>>' kullanarak 'values' öğesini parametre olarak - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - açıkça alma ihtiyacını ortadan kaldırabilirsiniz: çift sayıları filtreleme ve ardından karelerini alıp bir ekleme. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Benzer şekilde, 'x' bir işlevsel komut zincirine geçirilmek için bu kapsamda tanımlandığından - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - lambda ifadesindeki 'fun x -> ...' bölümü de gerekli değildir. Bu nedenle, '>>' - - - - there as well. - burada da kullanılabilir. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition' sonucunun kendisi, giriş olarak bir tamsayı listesi alan - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - diğer bir işlevdir. 'squareOddValuesAndAddOneComposition' öğesini bir tamsayı listesi ile - - - - of integers, you'll notice that it produces the same results as previous functions. - yürütürseniz, önceki işlevler ile aynı sonuçları ürettiğini fark görürsünüz. - - - - This is using what is known as function composition. This is possible because functions in F# - Bu, işlev kompozisyonu olarak bilinen işlemi kullanır. Bu, F# içindeki işlevler Kısmi Uygulama kullandığı - - - - use Partial Application and the input and output types of each data processing operation match - ve her bir bilgi işlem işleminin giriş ve çıkış türleri kullandığımız işlevlerin imzaları ile eşleştiği için - - - - the signatures of the functions we're using. - mümkün olmaktadır. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Listeler sıralı, sabit ve tek bağlantılıdır. Bu listelerde erken değerlendirme yapılır. - - - - This module shows various ways to generate lists and process lists with some functions - Bu modül, liste oluşturmanın çeşitli yollarını gösterir ve listeleri F# Core Kitaplığı'ndaki - - - - in the 'List' module in the F# Core Library. - 'List' modülünde yer alan işlevlerle işler. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Listeler [ ... ] kullanılarak tanımlanır. Bu boş bir listedir. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Bu, 3 öğeden oluşan bir listedir. ';' aynı satırdaki öğeleri ayırmak için kullanılır. - - - - You can also separate elements by placing them on their own lines. - Öğeleri, ayrı satırlara yerleştirerek de ayırabilirsiniz. - - - - This is a list of integers from 1 to 1000 - Bu, 1'den 1000'e kadar olan tamsayıların listesidir - - - - Lists can also be generated by computations. This is a list containing - Listeler ayrıca hesaplamalar aracılığıyla da üretilebilir. Bu, yılın tüm - - - - all the days of the year. - günlerini içeren bir listedir. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 'List.take' kullanarak 'daysList'in ilk 5 öğesini yazdırın. - - - - Computations can include conditionals. This is a list containing the tuples - Hesaplamalar, koşullu deyimler içerebilir. Bu, bir satranç tahtasındaki siyah karelerin - - - - which are the coordinates of the black squares on a chess board. - koordinatları olan demetleri içeren bir listedir. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listeler, 'List.map' ve diğer işlevsel programlama birleştiricileri kullanılarak dönüştürülebilir. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Bu tanım, numberList içindeki sayıların karelerini alıp, List.map'e bir bağımsız değişken geçirmek üzere - - - - operator to pass an argument to List.map. - komut zinciri işlecini kullanarak yeni bir liste oluşturur. - - - - There are many other list combinations. The following computes the sum of the squares of the - Başka birçok liste bileşimi daha vardır. Aşağıda, 3'e bölünebilen sayıların karelerinin - - - - numbers divisible by 3. - toplamı hesaplanır. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Diziler, aynı türdeki sabit boyutlu, değiştirilebilir öğe koleksiyonlarıdır. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Lists'e benzer olsalar da (numaralandırmayı desteklerler ve bilgi işlem için benzer birleştiricilere sahiptirler) - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - genellikle daha hızlıdırlar ve hızlı rastgele erişimi desteklerler. Buna karşılık, değişken oldukları için daha az güvenlidirler. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Bu, boş dizidir. Söz diziminin Lists'e benzediğine ancak `[| ... |]` kullandığına dikkat edin. - - - - Arrays are specified using the same range of constructs as lists. - Diziler, listeler ile aynı yapı aralıkları kullanılarak belirtilir. - - - - This is an array of numbers from 1 to 1000. - Bu, 1'den 1000'e kadar olan sayıların dizisidir. - - - - This is an array containing only the words "hello" and "world". - Bu, yalnızca "hello" ve "world" sözcüklerini içeren bir dizidir. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Bu, dizin tarafından başlatılan ve 0'dan 2000'e kadar olan çift sayıları içeren bir dizidir. - - - - Sub-arrays are extracted using slicing notation. - Alt diziler dilimleme gösterimi aracılığıyla ayıklanır. - - - - You can loop over arrays and lists using 'for' loops. - Diziler ve listeler üzerinden döngü oluşturmak için 'for' döngülerini kullanabilirsiniz. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Bir dizi öğesinin içeriğini sol ok atama işlecini kullanarak değiştirebilirsiniz. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Bu işleç hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 'Array.map' ve diğer işlevsel programlama işlemlerini kullanarak dizileri dönüştürebilirsiniz. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Aşağıdaki, 'h' ile başlayan sözcüklerin uzunluklarının toplamını hesaplar. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sıralar, aynı türdeki öğelerden oluşan mantıksal öğe serileridir. Bunlar, Lists ve Arrays'e kıyasla daha genel türlerdir. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sıralar isteğe bağlı olarak değerlendirilir ve her yinelendiklerinde yeniden değerlendirilir. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# sırası, .NET System.Collections.Generic.IEnumerable<'T> için diğer addır. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Seri işleme işlevleri, Listeler ve Dizilere de uygulanabilir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Bu, boş bir seridir. - - - - This a sequence of values. - Bu bir değerler serisidir. - - - - This is an on-demand sequence from 1 to 1000. - Bu, 1'den 1000'e kadar olan isteğe bağlı bir seridir. - - - - This is a sequence producing the words "hello" and "world" - Bu, "hello" ve "world" sözcüklerini üreten bir seridir - - - - This sequence producing the even numbers up to 2000. - Bu, 2000'e kadar olan çift sayıları üreten bir seridir. - - - - This is an infinite sequence which is a random walk. - Bu, rastgele olan sonsuz bir seridir. - - - - This example uses yield! to return each element of a subsequence. - Bu örnek, alt serinin her öğesini döndürmek için yield! kullanır. - - - - This example shows the first 100 elements of the random walk. - Bu örnek rastgele serinin ilk 100 öğesini gösterir. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Özyinelemeli işlevler kendilerini çağırabilir. F# içinde, işlevler yalnızca - - - - when declared using 'let rec'. - 'let rec' kullanılarak bildirildiğinde özyinelemeli olur. - - - - Recursion is the preferred way to process sequences or collections in F#. - Özyineleme, F# içinde sıraları veya koleksiyonları işlemek için tercih edilen yöntemdir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Bu örnek, bir tamsayının faktöriyelini hesaplayan özyinelemeli bir işlevi - - - - integer. It uses 'let rec' to define a recursive function. - gösterir. Özyinelemeli işlevi tanımlamak için 'let rec' kullanır. - - - - Computes the greatest common factor of two integers. - İki tamsayının en büyük ortak çarpanını hesaplar. - - - - Since all of the recursive calls are tail calls, - Özyinelemeli tüm çağrılar tail çağrısı olduğundan, - - - - the compiler will turn the function into a loop, - derleyici, işlevi bir döngüye dönüştürür, - - - - which improves performance and reduces memory consumption. - bu da performansı artırır ve bellek tüketimini azaltır. - - - - This example computes the sum of a list of integers using recursion. - Bu örnek, özyineleme kullanarak bir tamsayılar listesinin toplamını hesaplar. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Bu, bir sonuç biriktirici ile bir yardımcı işlev kullanarak 'sumList' tail öğesini özyinelemeli yapar. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Bu, çekirdek biriktirici olarak '0' sağlayarak özyinelemeli tail yardımcı işlevini çağırır. - - - - An approach like this is common in F#. - Benzer yaklaşımlar F# içinde yaygındır. - - - - Records are an aggregate of named values, with optional members (such as methods). - Kayıtlar, isteğe bağlı üyeleri (örneğin, metotlar) içeren adlandırılmış değerlerin kümesidir. - - - - They are immutable and have structural equality semantics. - Bunlar sabittir ve yapısal eşitlik semantiğine sahiptir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Bu örnek yeni bir kayıt türü tanımlamayı gösterir. - - - - This example shows how to instantiate a record type. - Bu örnekte, bir kayıt türünün örneğinin nasıl oluşturulacağı gösterilmektedir. - - - - You can also do this on the same line with ';' separators. - Bunu ';' ayırıcıları ile aynı satırda da yapabilirsiniz. - - - - This example shows how to use "copy-and-update" on record values. It creates - Bu örnek kayıt değerlerinde "kopyalama ve güncelleştirme" kullanımını gösterir. contact1'in - - - - a new record value that is a copy of contact1, but has different values for - kopyası olan, ama 'Telefon' ve 'Doğrulanmış' alanları için farklı değerleri olan - - - - the 'Phone' and 'Verified' fields. - yeni bir kayıt değeri oluşturur. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Bu örnek kayıt değerini işleyen bir işlev yazmayı gösterir. - - - - It converts a 'ContactCard' object to a string. - 'ContactCard' nesnesini dizeye dönüştürür. - - - - This is an example of a Record with a member. - Bu, üye içeren bir Kayıt örneğidir. - - - - Members can implement object-oriented members. - Üyeler, nesne yönelimli üyeleri uygulayabilir. - - - - Members are accessed via the '.' operator on an instantiated type. - Örnekli bir tür üzerinde, üyelere '.' işleci ile erişilir. - - - - Records can also be represented as structs via the 'Struct' attribute. - Kayıtlar 'Struct' özniteliği ile yapı olarak da gösterilebilir. - - - - This is helpful in situations where the performance of structs outweighs - Bu, yapıların performansının, başvuru türlerinin esnekliğinden daha önemli - - - - the flexibility of reference types. - olduğu durumlarda kullanışlıdır. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Ayırt Edici Birleşimler (kısaca DU), bir dizi adlandırılmış form veya durum olabilen değerleri ifade eder. - - - - Data stored in DUs can be one of several distinct values. - DU'larda depolanan veriler birkaç farklı değerden biri olabilir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Aşağıdaki, bir iskambil kartının cinsini gösterir. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Bir iskambil kartının sırasını göstermek için bir Ayırt Edici Birleşim de kullanılabilir. - - - - Represents the rank of cards 2 .. 10 - 2 .. 10 arasındaki kartları temsil eder - - - - Discriminated Unions can also implement object-oriented members. - Ayırt Edici Birleşimler ayrıca nesne yönelimli üyeleri uygulayabilir. - - - - This is a record type that combines a Suit and a Rank. - Bu, Cins ve Sırayı birleştiren bir kayıt türüdür. - - - - It's common to use both Records and Disciminated Unions when representing data. - Verileri temsil ederken Kayıtları ve Ayırt Edici Birleşimleri birlikte kullanmak yaygındır. - - - - This computes a list representing all the cards in the deck. - Bu, destedeki tüm kartları gösteren bir liste hesaplar. - - - - This example converts a 'Card' object to a string. - Bu örnek, bir 'Card' nesnesini dizeye dönüştürür. - - - - This example prints all the cards in a playing deck. - Bu örnek bir iskambil destesindeki tüm kartları yazdırır. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Tek Olaylı DU'lar genellikle etki alanı modelleme için kullanılır. Bu, dizeler ve tamsayılar gibi temel türlere göre - - - - over primitive types such as strings and ints. - ek tür güvenliği sağlamanıza yardımcı olabilir. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Tek durumlu DU'lar, sarmaladıkları türe veya bu türden örtük olarak dönüştürülemez. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Örneğin, Adres alan bir işlev bu giriş için dize kabul edemez - - - - or vive/versa. - veya bu durumun tersi olamaz. - - - - You can easily instantiate a single-case DU as follows. - Tek Olaylı DU'ları aşağıdaki gibi kolayca örnekleyebilirsiniz. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Değere ihtiyacınız olduğunda, basit bir işlev ile temel değerin sarmalamasını açabilirsiniz. - - - - Printing single-case DUs is simple with unwrapping functions. - Sarmalama açma işlevleri ile tek olayı DU'ları yazdırmak kolaydır. - - - - Disciminated Unions also support recursive definitions. - Ayırt Edici Birleşimler ayrıca özyinelemeli tanımları da destekler. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Bu, bir olayı Boş ağacı ve diğeri bir değer ile iki alt ağaç içeren bir Düğüme sahip - - - - and the other being a Node with a value and two subtrees. - İkili Arama Ağacı'nı gösterir. - - - - Check if an item exists in the binary search tree. - İkili arama ağacında bir öğe olup olmadığını denetleyin. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Desen Eşleştirme kullanarak özyinelemeli olarak arar. Varsa true, aksi takdirde false döndürür. - - - - Check the left subtree. - Sol alt ağacı denetleyin. - - - - Check the right subtree. - Sağ alt ağacı denetleyin. - - - - Inserts an item in the Binary Search Tree. - İkili Arama Ağacı'na bir öğe ekler. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Desen Eşleştirme kullanarak özyinelemeli olarak eklenecek yeri bulur ve ardından yeni bir düğüm ekler. - - - - If the item is already present, it does not insert anything. - Öğe zaten varsa yeni bir öğe eklenmez. - - - - No need to insert, it already exists; return the node. - Eklemeye gerek yok, öğe zaten var; düğümü döndürün. - - - - Call into left subtree. - Sol alt ağaca çağırın. - - - - Call into right subtree. - Sağ alt ağaca çağırın. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Ayırt Edici Birleşimler, 'Struct' özniteliği aracılığıyla yapı olarak da gösterilebilir. - - - - This is helpful in situations where the performance of structs outweighs - Bu, yapıların performansının, başvuru türlerinin esnekliğinden daha önemli - - - - the flexibility of reference types. - olduğu durumlarda kullanışlıdır. - - - - However, there are two important things to know when doing this: - Ancak, bunu yaparken bilmeniz gereken iki önemli nokta vardır: - - - - 1. A struct DU cannot be recursively-defined. - 1. Bir yapı DU'su, özyinelemeli olarak tanımlanamaz. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Bir yapı DU'su, her bir durumu için benzersiz adlara sahip olmalıdır. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Desen Eşleştirme, Desenleri kullanmanızı sağlayan bir F# özelliğidir. - - - - which are a way to compare data with a logical structure or structures, - Desenler, verileri mantıksal yapı veya yapılar ile karşılaştırmak, - - - - decompose data into constituent parts, or extract information from data in various ways. - verileri bileşenlerine ayırmak veya verilerden bilgileri çeşitli şekillerde ayıklamak için harika bir yol sunar. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Daha sonra Desen Eşleştirme ile bir desenin "şeklini" gönderebilirsiniz. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Bir kişinin ad ve soyadı kaydı - - - - A Discriminated Union of 3 different kinds of employees - 3 farklı çalışan türünden oluşan bir Ayırt Edici Birleşim - - - - Count everyone underneath the employee in the management hierarchy, - Çalışan da dahil olmak üzere, yönetim hiyerarşisinde çalışanın altındaki - - - - including the employee. - herkesi sayın. - - - - Find all managers/executives named "Dave" who do not have any reports. - Herhangi bir raporu olmayan, "Dave" adlı tüm yöneticileri bulun. - - - - This uses the 'function' shorthand to as a lambda expression. - Bu, 'function' kısaltmasını bir lambda ifadesi olarak kullanır. - - - - [] matches an empty list. - [] boş bir liste ile eşleşir. - - - - '_' is a wildcard pattern that matches anything. - '_' herhangi bir öğeyle eşleşen bir joker karakter desenidir. - - - - This handles the "or else" case. - Bu, "or else" durumunu ele alır. - - - - You can also use the shorthand function construct for pattern matching, - Kısaltma özellik yapısını desen eşleştirme için de kullanabilirsiniz, - - - - which is useful when you're writing functions which make use of Partial Application. - bu Kısmi Uygulamayı kullanan işlevler yazarken kullanışlıdır. - - - - Define some more functions which parse with the helper function. - Yardımcı işlev ile ayrıştırılan birkaç işlev daha tanımlayın. - - - - Active Patterns are another powerful construct to use with pattern matching. - Etkin Desenler, desen eşleştirme ile kullanabileceğiniz diğer bir güçlü yapıdır. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Giriş verilerini desen eşleştirme çağrı sitesinde bölerek özel formlara ayırmanıza olanak sağlar. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 'Function' anahtar sözcüğü ve Etkin Desenler aracılığıyla Desen Eşleştirme, genellikle böyle görünür. - - - - Call the printer with some different values to parse. - Ayrıştırılacak farklı değerlerle yazıcıyı çağırın. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Seçenek değerleri 'Some' veya 'None' ile etiketlenmiş herhangi bir değer türü olabilir. - - - - They are used extensively in F# code to represent the cases where many other - Bunlar yaygın olarak diğer birçok dilin null başvurular kullandığı durumları temsil - - - - languages would use null references. - etmek üzere F# kodunda kullanılır. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - İlk olarak, Tek Durumlu Ayırt Edici Birleşim ile tanımlanan bir posta kodu tanımlayın. - - - - Next, define a type where the ZipCode is optional. - Sonra, ZipCode’un isteğe bağlı olduğu bir tür tanımlayın. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Sonra, müşterinin posta kodu için sevkiyat alanını hesaplayan bir nesneyi temsil eden arabirim türünü tanımlayın, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 'getState' ve 'getShippingZone' soyut metotları uygulamalarından faydalanır. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Sonra, hesaplayıcı örneğini kullanarak müşteri için sevkiyat bölgesi hesaplayın. - - - - This uses combinators in the Option module to allow a functional pipeline for - Bu, Optionals ile veri dönüştürülmesini sağlamak için - - - - transforming data with Optionals. - Option modülünde birleştiricilerin kullanılmasını sağlar. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Ölçü birimleri, basit sayısal türler için tür açısından güvenli bir şekilde ek açıklama girmenin bir yoludur. - - - - You can then perform type-safe arithmetic on these values. - Böylece bu değerler üzerinde tür açısından güvenli aritmetik gerçekleştirebilirsiniz. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - İlk olarak, ortak birim adlarından oluşan bir koleksiyon açın - - - - Define a unitized constant - Birimlere ayrılmış bir sabit tanımlayın - - - - Next, define a new unit type - Sonra, yeni bir birim türü tanımlayın - - - - Conversion factor mile to meter. - Milden metreye dönüştürme faktörü. - - - - Define a unitized constant - Birimlere ayrılmış bir sabit tanımlayın - - - - Compute metric-system constant - Metrik sistem sabitini hesaplayın - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Ölçü Birimleri kullanan değerler, yazdırma gibi işler için temel sayısal tür ile aynı şekilde kullanılabilir. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Sınıflar, F# içinde yeni nesneleri tanımlamanın bir yoludur ve standart Nesne yönelimli yapıları destekler. - - - - They can have a variety of members (methods, properties, events, etc.) - Çeşitli üyelere sahip olabilirler (metotlar, özellikler, olaylar vb.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Sınıflar hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Üyeler hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Basit bir iki boyutlu Vektör sınıfı. - - - - The class's constructor is on the first line, - Sınıfın oluşturucusu ilk satırdadır - - - - and takes two arguments: dx and dy, both of type 'double'. - ve ikisi de 'double' türünde olan iki bağımsız değişken alır: dx ve dy. - - - - This internal field stores the length of the vector, computed when the - Bu dahili alan, nesne oluşturulduğunda hesaplanan vektör - - - - object is constructed - uzunluğunu depolar - - - - 'this' specifies a name for the object's self identifier. - 'this', nesnenin kendi tanımlayıcısı için bir ad belirtir. - - - - In instance methods, it must appear before the member name. - Örnek metotlarında üye adından önce gelmelidir. - - - - This member is a method. The previous members were properties. - Bu üye, bir metot. Önceki üyeler özellikti. - - - - This is how you instantiate the Vector2D class. - Vector2D sınıfının örneğini bu şekilde oluşturabilirsiniz. - - - - Get a new scaled vector object, without modifying the original object. - Özgün nesneyi değiştirmeden, yeni bir ölçekli vektör nesnesi alın. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Genel sınıflar, türlerin bir tür parametreleri kümesine göre tanımlanmasına izin verir. - - - - In the following, 'T is the type parameter for the class. - Aşağıda, 'T', sınıf için tür parametresidir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Bu dahili alan, bir listedeki durumları depolar. - - - - Add a new element to the list of states. - Durumlar listesine yeni bir öğe ekleyin. - - - - use the '<-' operator to mutate the value. - değeri değiştirmek için '<-' işlecini kullanın. - - - - Get the entire list of historical states. - Geçmiş durumların tam listesini alın. - - - - Get the latest state. - Son durumu alın. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Durum izleyicisi sınıfının bir 'int' örneği. Tür parametresinin algılandığını unutmayın. - - - - Add a state - Durum ekle - - - - Interfaces are object types with only 'abstract' members. - Arabirimler, yalnızca 'abstract' üyelere sahip olan nesne türleridir. - - - - Object types and object expressions can implement interfaces. - Nesne türleri ve nesne ifadeleri arabirim uygulayabilir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Bu, IDisposable uygulayan bir türdür. - - - - This is the implementation of IDisposable members. - Bu, IDisposable üyelerinin uygulamasıdır. - - - - This is an object that implements IDisposable via an Object Expression - Bu, bir Object İfadesi ile IDisposable uygulayan bir nesnedir - - - - Unlike other languages such as C# or Java, a new type definition is not needed - C# veya Java gibi diğer dillerin aksine, bir arabirim uygulamak için yeni bir tür tanımı - - - - to implement an interface. - gerekli değildir. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core kitaplığı bir paralel işleme işlevleri aralığı tanımlar. Burada - - - - you use some functions for parallel processing over arrays. - diziler üzerinde çeşitli paralel işleme işlevleri kullanırsınız. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Daha fazla bilgi için bkz. https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - İlk olarak, bir giriş dizisi. - - - - Next, define a functions that does some CPU intensive computation. - Sonra, yoğun CPU kullanarak hesaplama yapan bir işlev tanımlayın. - - - - Next, do a parallel map over a large input array. - Sonra, büyük bir giriş dizisi üzerinde paralel bir eşleme oluşturun. - - - - Next, print the results. - Sonra, sonuçları yazdırın. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Events, .NET programlamasında özellikle WinForms veya WPF uygulamaları ile yaygın olarak kullanılan bir deyimdir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - İlk olarak, abonelik noktası (event.Publish) ve olay tetikleyicisinden (event.Trigger) oluşan Olay nesnesi örneğini oluşturun. - - - - Next, add handler to the event. - Sonra, olaya işleyici ekleyin. - - - - Next, trigger the event. - Sonra, olayı tetikleyin. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Sonra, olayın standart .NET kuralını takip eden bir örneğini oluşturun: (sender, EventArgs). - - - - Next, add a handler for this new event. - Sonra, bu yeni olay için bir işleyici ekleyin. - - - - Next, trigger this event (note that sender argument should be set). - Sonra, bu olayı tetikleyin (sender bağımsız değişkeninin ayarlanmış olması gerektiğine dikkat edin). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf deleted file mode 100644 index cb0a1983af..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - 此示例将引导你了解 F# 语言的各个元素。 - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - 若要在 F# 交互窗口中执行代码,请突出显示一个代码节并按 Alt-Enter 或右击 - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - 并选择“在 Interactive 中执行”。 可从“视图”菜单中打开 F# 交互窗口。 - - - - For more about F#, see: - 有关 F# 的详细信息,请参见: - - - - To see this tutorial in documentation form, see: - 若要以文档的形式查看此教程,请参阅: - - - - To learn more about applied F# programming, use - 若要了解有关已应用的 F# 编程的详细信息,请使用 - - - - To install the Visual F# Power Tools, use - 若要安装 Visual F# Power Tools,请使用 - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - “工具”-->“扩展和更新”-->“联机”和搜索 - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - 有关要用于 F# 的其他模板,请参见 Visual Studio 中的“联机模板”, - - - - 'New Project' --> 'Online Templates' - “新建项目”-->“联机模板” - - - - F# supports three kinds of comments: - F# 支持三种注释: - - - - 1. Double-slash comments. These are used in most situations. - 1. 双斜线注释。 此类注释用于大多数情况。 - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML 样式块注释。此类注释不经常使用。 - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. 三斜线注释。此类注释用于记录功能和类型等。 - - - - They will appear as text when you hover over something which is decorated with these comments. - 光标悬停在附带有注释的位置时,这些注释会以文本形式显示。 - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - 它们还支持 .NET 样式的 XML 注释,这些注释可生成参考文档, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - 还可允许编辑器(例如 Visual Studio)从其中提取信息。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 使用 "open" 关键字打开命名空间。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - 模块是值、类型和函数值等 F# 代码的分组。 - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - 用模块分组代码有助于汇集相关代码和避免程序中出现名称冲突。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - 此为示例整数。 - - - - This is a sample floating point number. - 此为示例浮点数。 - - - - This computed a new number by some arithmetic. Numeric types are converted using - 这按照某种运算方法计算新的数字。数字类型通过 - - - - functions 'int', 'double' and so on. - "int"、"double" 等函数进行转换。 - - - - This is a list of the numbers from 0 to 99. - 这是从 0 到 99 的数字列表 - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - 这是包含从 0 到 99 的所有数字及其平方的所有元组的列表. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 下一行打印包含元组的列表,使用 "%A" 来进行一般打印。 - - - - This is a sample integer with a type annotation - 这是一个具有类型注释的示例整数 - - - - Values in F# are immutable by default. They cannot be changed - F# 中的值默认为不可变。程序执行过程中 - - - - in the course of a program's execution unless explicitly marked as mutable. - 这些值无法更改,除非被显式标记为可变。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 通过 "let" 将值绑定到名称可使其不可变。 - - - - The second line of code fails to compile because 'number' is immutable and bound. - 未能编译第二行代码,因为 "number" 不可变且已绑定。 - - - - Re-defining 'number' to be a different value is not allowed in F#. - F# 中不允许将 "number" 重定义为其他值。 - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 一个可变绑定。必须提供这种绑定才能改变 "otherNumber" 的值。 - - - - When mutating a value, use '<-' to assign a new value. - 若要改变值,请使用 "<-" 分配新值。 - - - - You could not use '=' here for this purpose since it is used for equality - 在这里不能将 "=" 用作此目的,因为该符号用于表示等式 - - - - or other contexts such as 'let' or 'module' - 或者 "let" 或 "module" 等其他上下文 - - - - Much of F# programming consists of defining functions that transform input data to produce - 大部分 F# 编程包括定义函数,该函数转换输入数据以生成 - - - - useful results. - 有用的结果。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 可使用 "let" 定义函数。它将接受整数参数,然后返回整数。 - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 括号对函数参数是可选的,但使用显示类型注释时除外。 - - - - Apply the function, naming the function return result using 'let'. - 应用函数,并使用“let”命名函数返回结果。 - - - - The variable type is inferred from the function return type. - 变量类型是从函数返回类型推导出来的。 - - - - This line uses '%d' to print the result as an integer. This is type-safe. - 该行用 "%d" 将结果作为整数进行打印。这属于类型安全。 - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 如果 "result1" 不是类型 "int",则将无法编译该行。 - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 如有需要,可使用 "(argument:type)" 批注参数名称类型。括号是必需的。 - - - - Conditionals use if/then/elid/elif/else. - 条件语句使用 if/then/elid/elif/else。 - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - 注意,F# 使用可识别空格缩进的语法,与 Python 等语言类似。 - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - 此行使用 "%f" 将结果作为浮点打印。与上述 "%d" 情况一样,属于类型安全。 - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - 布尔是 F# 中的基本数据类型。下面是一些布尔值和条件逻辑示例。 - - - - To learn more, see: - 有关详细信息,请参阅: - - - - and - - - - - Booleans values are 'true' and 'false'. - 布尔值为 "true" 和 "false"。 - - - - Operators on booleans are 'not', '&&' and '||'. - 布尔运算符为 "not"、"&&" 和 "||"。 - - - - This line uses '%b'to print a boolean value. This is type-safe. - 本行用 "%b" 打印布尔值。这属于类型安全。 - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 字符串是 F# 中的基本数据类型。下面是一些字符串和基本的字符串操作示例。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 字符串使用双引号。 - - - - Strings can also use @ to create a verbatim string literal. - 字符串也可使用 @ 创建逐字的字符串。 - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - 这将忽略转义字符,如 "\", "\n", "\t" 等。 - - - - String literals can also use triple-quotes. - 字符串文本也可使用三重引号。 - - - - String concatenation is normally done with the '+' operator. - 字符串串联通常是用 "+" 运算符完成的。 - - - - This line uses '%s' to print a string value. This is type-safe. - 本行用 "%s" 打印字符串值。这属于类型安全。 - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - 子字符串使用索引表示法。此行提取前 7 个字符作为子字符串。 - - - - Note that like many languages, Strings are zero-indexed in F#. - 注意,与许多语言相同,字符串在 F# 中从零开始编制索引。 - - - - Tuples are simple combinations of data values into a combined value. - 元组是组合成组合值的简单数据值组合。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 一个包含整数的简单元组。 - - - - A function that swaps the order of two values in a tuple. - 一个用于交换两个值在元组中的顺序的函数。 - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 类型推理可自动泛化函数,使其具有泛型类型, - - - - meaning that it will work with any type. - 意味着它可与任何类型兼容。 - - - - A tuple consisting of an integer, a string, - 一个整数,一个字符串以及 - - - - and a double-precision floating point number. - 一个双精度浮点数字组成的元组。 - - - - A simple tuple of integers with a type annotation. - 一个具有类型批注的简单的整数元组。 - - - - Type annotations for tuples use the * symbol to separate elements - 元组的类型批注使用 * 号来分隔元素 - - - - Tuples are normally objects, but they can also be represented as structs. - 元组通常为对象,但也可表示为结构。 - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - 这些可在 C# 和 Visual Basic.NET 中与结构完全进行交互操作;然而, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 结构元组不隐式转换为对象元组(通常称为引用元组)。 - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - 下面的第二行将因此无法编译。取消注释观察将发生什么。 - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 尽管不能在结构元组和引用元组之间进行隐式转换, - - - - you can explicitly convert via pattern matching, as demonstrated below. - 可通过模式匹配进行显式转换,如下所示。 - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# 管道运算符("|>"、"<|" 等 )和 F# 组合运算符(">>"、"<<") - - - - are used extensively when processing data. These operators are themselves functions - 广泛用于数据处理。这些运算符本身就是函数, - - - - which make use of Partial Application. - 它使用偏函数应用。 - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - 若要深入了解这些运算符,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 若要深入了解偏函数应用,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 计算值的平方。 - - - - Adds 1 to a value. - 将值加 1。 - - - - Tests if an integer value is odd via modulo. - 通过取模测试整数是否为奇数。 - - - - A list of 5 numbers. More on lists later. - 包含 5 个数字的列表。稍后列表上会有更多数字。 - - - - Given a list of integers, it filters out the even numbers, - 如果是整数列表,它会筛选出偶数, - - - - squares the resulting odds, and adds 1 to the squared odds. - 将产生的奇数平方,然后将奇数平方值加 1。 - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 编写 "squareOddValuesAndAddOne" 的简便方法是将每个 - - - - sub-result into the function calls themselves. - 子结果嵌入函数调用本身。 - - - - This makes the function much shorter, but it's difficult to see the - 这将使函数短得多,但难以查看 - - - - order in which the data is processed. - 处理数据的顺序。 - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 编写 "squareOddValuesAndAddOne" 的首选方法是使用 F# 管道运算符。 - - - - This allows you to avoid creating intermediate results, but is much more readable - 这可使你避免产生中间结果,而且可读性更好 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 嵌入式函数调用(如 "squareOddValuesAndAddOneNested")更具可读性 - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 使用 Lambda 函数,通过将第二个 "List.map" 调用移动到第一个, - - - - into the first, using a Lambda Function. - 可以缩短 "squareOddValuesAndAddOnePipeline"。 - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - 注意,管道也在 lambda 函数内使用。F# 管道运算符 - - - - can be used for single values as well. This makes them very powerful for processing data. - 还可用于单个值。这使它们处理数据的功能很强大。 - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 最后,无需再将 "value" 显式作为参数,你可使用 ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 以合成两个核心运算: 筛选出偶数,然后平方并加 1。 - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 同样,lambda 表达式的 "fun x -> ..." 也不需要了,因为 "x" 只是 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 在该范围内定义,以便可传递到功能管道。因此,也可将 ">>" - - - - there as well. - 用在该处。 - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - "squareOddValuesAndAddOneComposition" 的结果本身就是另一个函数,它 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 将整数列表作为其输入值。如果使用整数列表执行 "squareOddValuesAndAddOneComposition", - - - - of integers, you'll notice that it produces the same results as previous functions. - 你将发现它与上述函数产生的结果相同。 - - - - This is using what is known as function composition. This is possible because functions in F# - 这使用的就是所谓的函数组合。这是可能的,因为 F# 中的函数 - - - - use Partial Application and the input and output types of each data processing operation match - 使用偏函数应用,并且每个数据处理操作的输入和输出类型与 - - - - the signatures of the functions we're using. - 我们使用的函数签名。 - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - 列表属于有序、不可变、单向链接的列表。它们都采用主动求值方式。 - - - - This module shows various ways to generate lists and process lists with some functions - 本模块介绍使用某些函数生成列表和处理列表的各种方法 - - - - in the 'List' module in the F# Core Library. - 在 F# 核心库的 "List" 模块中。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - 使用 [ ... ] 定义列表。这是空列表。 - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - 这是一个包含 3 个元素的列表。";" 用于分隔同一行的元素。 - - - - You can also separate elements by placing them on their own lines. - 也可通过将各元素放在其自身行来分隔。 - - - - This is a list of integers from 1 to 1000 - 这是从 1 到 1000 的整数列表 - - - - Lists can also be generated by computations. This is a list containing - 也可通过计算来生成列表。此列表包含 - - - - all the days of the year. - 一年的所有天。 - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 使用 "List.take" 打印 "daysList" 的前 5 个元素。 - - - - Computations can include conditionals. This is a list containing the tuples - 计算可以包括条件。这是包含元组的列表 - - - - which are the coordinates of the black squares on a chess board. - 这是棋盘上黑色方格的坐标。 - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - 列表可使用 "List.map" 和其他函数编程连结符进行转换。 - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - 此定义通过使用管道将 numberList 中的数字进行平方运算来生成新列表 - - - - operator to pass an argument to List.map. - 将参数传递给 List.map 的运算符。 - - - - There are many other list combinations. The following computes the sum of the squares of the - 还有许多其他列表组合。下面计算以下内容的平方和: - - - - numbers divisible by 3. - 数字可被 3 整除。 - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 数组是固定大小,同类型元素的可变集合。 - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - 尽管它们与列表相同(支持枚举,且具有用于数据处理的类似连接符), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 它们通常速度更快,且支持快速随机访问。代价是因为可变而不太安全。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - 这是空数组。注意,语法与列表类似,但改用 `[| ... |]`。 - - - - Arrays are specified using the same range of constructs as lists. - 使用与列表相同的构造范围来指定数组。 - - - - This is an array of numbers from 1 to 1000. - 这是从 1 到 1000 的数字数组。 - - - - This is an array containing only the words "hello" and "world". - 这是只包含单词 "hello" 和 "world" 的数组。 - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - 这是由索引初始化的数组,包含从 0 到 2000 之间的偶数。 - - - - Sub-arrays are extracted using slicing notation. - 使用切片表示法提取子数组。 - - - - You can loop over arrays and lists using 'for' loops. - 可使用 "for" 循环循环数组和列表。 - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 可使用左箭头赋值运算符来修改数组元素的内容。 - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - 若要深入了解此运算符,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 可使用 "Array.map" 和其他功能性编程运算来转换数组。 - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 下面的函数计算以 "h" 开头的单词的总长度。 - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - 序列是类型相同的所有元素的逻辑系列。序列是比列表和数组更常规的类型。 - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - 将根据需要计算序列,并在每次循环访问它们时重新进行计算。 - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# 序列是 .NET System.Collections.Generic.IEnumerable<'T> 的别名。 - - - - Sequence processing functions can be applied to Lists and Arrays as well. - 序列处理函数也可以应用于列表和数组。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - 这是空序列。 - - - - This a sequence of values. - 这是一个值的序列。 - - - - This is an on-demand sequence from 1 to 1000. - 这是从 1 到 1000 的按需序列。 - - - - This is a sequence producing the words "hello" and "world" - 这是生成单词 "hello" 和 "world" 的序列 - - - - This sequence producing the even numbers up to 2000. - 此序列生成最大为 2000 的偶数。 - - - - This is an infinite sequence which is a random walk. - 这是可随机访问的无限序列。 - - - - This example uses yield! to return each element of a subsequence. - 此示例使用 yield! 返回子序列的每个元素。 - - - - This example shows the first 100 elements of the random walk. - 此示例演示随机访问的前 100 个元素。 - - - - Recursive functions can call themselves. In F#, functions are only recursive - 递归函数可调用其自身。在 F# 中,函数只递归 - - - - when declared using 'let rec'. - 使用 "let rec" 声明时。 - - - - Recursion is the preferred way to process sequences or collections in F#. - 递归是 F# 中处理序列或集合的首选方式。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - 此示例演示递归函数,计算以下内容的阶乘: - - - - integer. It uses 'let rec' to define a recursive function. - 整数。它使用 "let rec" 来定义递归函数。 - - - - Computes the greatest common factor of two integers. - 计算两个整数的最大公因数。 - - - - Since all of the recursive calls are tail calls, - 由于所有递归调用都是尾调用, - - - - the compiler will turn the function into a loop, - 因此编译器会将该函数转变成一个循环, - - - - which improves performance and reduces memory consumption. - 这可提高性能并减少内存消耗。 - - - - This example computes the sum of a list of integers using recursion. - 本示例使用递归计算整数列表的总和。 - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 通过将 Helper 函数与结果累加器一起使用,使 "sumList" 成为尾递归函数。 - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - 假如 "0" 作为种子累加器,这将调用尾递归 helper 函数。 - - - - An approach like this is common in F#. - 此类方法在 F# 中很常见。 - - - - Records are an aggregate of named values, with optional members (such as methods). - 记录是已命名值的聚合,同时具有可选成员(例如,方法)。 - - - - They are immutable and have structural equality semantics. - 它们不可变且具有结构相等性语义。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - 此示例演示如何定义新记录类型。 - - - - This example shows how to instantiate a record type. - 本示例演示如何实例化记录类型。 - - - - You can also do this on the same line with ';' separators. - 也可使用 ";" 分隔符在同一行上执行此操作。 - - - - This example shows how to use "copy-and-update" on record values. It creates - 此示例演示如何对记录值使用 "copy-and-update"。它创建了 - - - - a new record value that is a copy of contact1, but has different values for - 新的记录值,该值是 contact1 的副本,但对以下内容具有不同的值: - - - - the 'Phone' and 'Verified' fields. - “电话”和“已验证”字段。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - 此示例演示如何编写处理记录值的函数。 - - - - It converts a 'ContactCard' object to a string. - 它将 "ContactCard" 对象转换为字符串。 - - - - This is an example of a Record with a member. - 这是一个具有成员的记录示例。 - - - - Members can implement object-oriented members. - 成员可实现面向对象的成员。 - - - - Members are accessed via the '.' operator on an instantiated type. - 可通过实例化类型上的 "." 运算符访问成员。 - - - - Records can also be represented as structs via the 'Struct' attribute. - 记录也可通过 "Struct" 属性表示为结构。 - - - - This is helpful in situations where the performance of structs outweighs - 这在结构性能更重要的情况下很有用 - - - - the flexibility of reference types. - 引用类型的灵活性。 - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 可区分联合(简称 DU)的值可以是一系列已命名窗体或用例。 - - - - Data stored in DUs can be one of several distinct values. - DU 中存储的数据可以为多个不同值之一。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - 下面代表一套扑克牌。 - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 可区分联合还可用来表示纸牌的设置级别。 - - - - Represents the rank of cards 2 .. 10 - 表示扑克牌点数 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - 可区分联合还可实现面向对象的成员。 - - - - This is a record type that combines a Suit and a Rank. - 这是结合花色和牌面大小的记录类型。 - - - - It's common to use both Records and Disciminated Unions when representing data. - 表示数据时同时使用记录和可区分联合是很常见的。 - - - - This computes a list representing all the cards in the deck. - 它将计算代表牌组中所有扑克牌的列表。 - - - - This example converts a 'Card' object to a string. - 此示例将“纸牌”对象转换为字符串。 - - - - This example prints all the cards in a playing deck. - 此示例打印扑克牌中的所有牌。 - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 单用例 DU 常用于域建模。这可确保额外类型的安全 - - - - over primitive types such as strings and ints. - 字符串和整数等基元类型。 - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 单用例 DU 无法隐式转换为其包装的类型或从其包装的类型进行转换。 - - - - For example, a function which takes in an Address cannot accept a string as that input, - 例如,地址中采用的函数无法接受字符串作为输入, - - - - or vive/versa. - 反之亦然。 - - - - You can easily instantiate a single-case DU as follows. - 可轻松实例化单用例 DU,如下所示。 - - - - When you need the value, you can unwrap the underlying value with a simple function. - 需要值时,可使用单个函数解包基础值。 - - - - Printing single-case DUs is simple with unwrapping functions. - 打印单用例 DU 与解包函数一样简单。 - - - - Disciminated Unions also support recursive definitions. - 可区分联合还支持递归定义。 - - - - This represents a Binary Search Tree, with one case being the Empty tree, - 这代表一个二进制文件搜索树,且有一个用例为空树, - - - - and the other being a Node with a value and two subtrees. - 而另一个用例为具有一个值和两个子树的节点。 - - - - Check if an item exists in the binary search tree. - 检查项是否存在于二进制文件搜索树中。 - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - 使用模式匹配进行递归搜索。如果存在,则返回 true,否则返回 false。 - - - - Check the left subtree. - 检查左子树。 - - - - Check the right subtree. - 检查右子树。 - - - - Inserts an item in the Binary Search Tree. - 在二进制文件搜索树中插入项。 - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - 查找使用模式匹配递归插入的位置,然后插入新节点。 - - - - If the item is already present, it does not insert anything. - 如果项已存在,则不会插入任何内容。 - - - - No need to insert, it already exists; return the node. - 无需插入,该项已存在;返回节点。 - - - - Call into left subtree. - 调入左子树。 - - - - Call into right subtree. - 调入右子树。 - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 可区分联合也可通过 "Struct" 属性表示为结构。 - - - - This is helpful in situations where the performance of structs outweighs - 这在结构性能更重要的情况下很有用 - - - - the flexibility of reference types. - 引用类型的灵活性。 - - - - However, there are two important things to know when doing this: - 然而,执行此操作时需了解两个重要事项: - - - - 1. A struct DU cannot be recursively-defined. - 1. 无法以递归方式定义结构 DU。 - - - - 2. A struct DU must have unique names for each of its cases. - 2. 结构 DU 必须对其每个用例均有唯一名称。 - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - 模式匹配是 F# 的一个功能,使你能够利用模式, - - - - which are a way to compare data with a logical structure or structures, - 它们是将数据与逻辑结构或结构进行比较的方法, - - - - decompose data into constituent parts, or extract information from data in various ways. - 将数据分解为各个构成部分,或通过各种方式从数据中提取信息。 - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - 然后,你便可以在模式的“形状”上通过模式匹配进行派遣。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 人员的姓氏和名字的记录 - - - - A Discriminated Union of 3 different kinds of employees - 具有 3 种不同员工的可区分联合 - - - - Count everyone underneath the employee in the management hierarchy, - 在管理层次结构下对员工进行计数, - - - - including the employee. - 其中包括员工。 - - - - Find all managers/executives named "Dave" who do not have any reports. - 查找所有名为 "Dave" 且没有任何下属的经理/主管。 - - - - This uses the 'function' shorthand to as a lambda expression. - 这使用 "function" 简写为 lambda 表达式。 - - - - [] matches an empty list. - [] 匹配空列表。 - - - - '_' is a wildcard pattern that matches anything. - "_" 是与任何对象均匹配的通配符模式。 - - - - This handles the "or else" case. - 它处理 "or else" 情况。 - - - - You can also use the shorthand function construct for pattern matching, - 你也可将简写函数构造用于模式匹配, - - - - which is useful when you're writing functions which make use of Partial Application. - 这在编写使用偏函数应用的函数时很有用。 - - - - Define some more functions which parse with the helper function. - 定义更多使用 helper 函数分析的函数。 - - - - Active Patterns are another powerful construct to use with pattern matching. - 活动模式是另一个与模式匹配配合使用的强大构造。 - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - 它们使你能够将输入数据分区到自定义窗体,然后在模式匹配调用站点分解它们。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 通过 "function" 关键字的匹配模式和活动模式通常如下所示。 - - - - Call the printer with some different values to parse. - 使用一些其他值调用打印机进行分析。 - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - 选项值是用“Some”或“None”标记的任何类型的值。 - - - - They are used extensively in F# code to represent the cases where many other - 它们在 F# 代码中广泛用于表示许多其他 - - - - languages would use null references. - 语言使用 null 引用的用例。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - 首先,定义通过单用例可区分联合定义的邮政编码。 - - - - Next, define a type where the ZipCode is optional. - 接下来,定义一个类型,其中 ZipCode 是可选项。 - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 接下来,定义表示对象的接口类型,用于计算客户邮政编码的送货区域, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 假定提供了“getState”和“getShippingZone”抽象方法的实现。 - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 接下来,使用计算器实例计算客户的发货区域。 - - - - This uses combinators in the Option module to allow a functional pipeline for - 它在选项模块中使用连接符以允许功能管道 - - - - transforming data with Optionals. - 用于使用可选项转换数据。 - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 度量单位是一种以类型安全方式批注基元数值类型的方式。 - - - - You can then perform type-safe arithmetic on these values. - 然后,你便可以对这些值执行类型安全算术。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - 首先,打开常用单位名称集合 - - - - Define a unitized constant - 定义单元化常量 - - - - Next, define a new unit type - 接下来,定义新的单位类型 - - - - Conversion factor mile to meter. - 英里到米的换算系数。 - - - - Define a unitized constant - 定义单元化常量 - - - - Compute metric-system constant - 计算公制常量 - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 使用度量单位的值可像基元数值类型用于打印等操作一样直接使用。 - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - 类是 F# 中定义新对象类型的一种方式,且支持标准的面向对象的构造。 - - - - They can have a variety of members (methods, properties, events, etc.) - 它们可以有各种成员(如,方法、属性、事件等) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - 若要了解关于类的详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - 若要深入了解成员,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 简单的二维矢量类。 - - - - The class's constructor is on the first line, - 该类的构造函数位于第一行, - - - - and takes two arguments: dx and dy, both of type 'double'. - 并且采用两个参数: dx 和 dy,二者均属于类型 "double"。 - - - - This internal field stores the length of the vector, computed when the - 此内部字段存储矢量的长度,当发生以下情况时进行计算: - - - - object is constructed - 对象已构造 - - - - 'this' specifies a name for the object's self identifier. - “this”用于指定对象的自我标识符的名称。 - - - - In instance methods, it must appear before the member name. - 在实例方法中,它必须出现在成员名称之前。 - - - - This member is a method. The previous members were properties. - 该成员属于方法。以前的成员属于属性。 - - - - This is how you instantiate the Vector2D class. - 这就是你实例化 Vector2D 类的方式。 - - - - Get a new scaled vector object, without modifying the original object. - 获取新的缩放矢量对象而不修改原始对象。 - - - - Generic classes allow types to be defined with respect to a set of type parameters. - 通用类允许考虑使用一组类型参数来定义类型。 - - - - In the following, 'T is the type parameter for the class. - 以下示例中,"T" 表示类的类型参数。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - 此内部字段将状态存储在列表中。 - - - - Add a new element to the list of states. - 将新元素添加到状态列表中。 - - - - use the '<-' operator to mutate the value. - 使用 "<-" 运算符改变值。 - - - - Get the entire list of historical states. - 获取历史状态的完整列表。 - - - - Get the latest state. - 获取最新状态。 - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 状态跟踪程序类的一个“int”实例。请注意,已推断类型参数。 - - - - Add a state - 添加状态 - - - - Interfaces are object types with only 'abstract' members. - 接口是只有“抽象”成员的对象类型。 - - - - Object types and object expressions can implement interfaces. - 对象类型和对象表达式可以实现接口。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - 它是实现 IDisposable 的类型。 - - - - This is the implementation of IDisposable members. - 它是 IDisposable 成员的实现。 - - - - This is an object that implements IDisposable via an Object Expression - 该对象可通过对象表达式实现 IDisposable - - - - Unlike other languages such as C# or Java, a new type definition is not needed - 与 C# 或 Java 等其他语言不同,无需新的类型定义 - - - - to implement an interface. - 以实现接口。 - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core 库定义了一系列并行处理函数。此处 - - - - you use some functions for parallel processing over arrays. - 可使用某些函数对数组进行并行处理。 - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 有关详细信息,请参阅: https://msdn.microsoft.com/zh-cn/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - 首先,输入一个数组。 - - - - Next, define a functions that does some CPU intensive computation. - 接下来,定义执行某些 CPU 密集型计算的函数。 - - - - Next, do a parallel map over a large input array. - 接下来,对大型输入数组执行并行映射。 - - - - Next, print the results. - 接下来,打印结果。 - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - 事件是 .NET 编程的常见习惯用语,尤其是使用 WinForms 或 WPF 应用程序编程时。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - 首先,创建包含订阅点(event.Publish)和事件触发器(event.Trigger)的事件对象实例。 - - - - Next, add handler to the event. - 接下来,将处理程序添加到事件。 - - - - Next, trigger the event. - 接下来,触发该事件。 - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 接下来,创建遵循标准 .NET 约定的事件的实例: (sender, EventArgs)。 - - - - Next, add a handler for this new event. - 接下来,为此新事件添加处理程序。 - - - - Next, trigger this event (note that sender argument should be set). - 接下来,触发此事件(请注意,应设置 sender 参数)。 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf deleted file mode 100644 index fd33d17fa3..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - 此範例將引導您了解 F# 語言的項目。 - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - 若要執行 F# 互動中的程式碼,請反白顯示某個程式碼區段並按下 Alt-Enter,或者以滑鼠右鍵按一下 - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - 並選取 [以互動方式執行]。您可以從 [檢視] 功能表開啟 F# 互動式視窗。 - - - - For more about F#, see: - 如需有關 F# 的詳細資訊,請參閱: - - - - To see this tutorial in documentation form, see: - 若要參閱文件表單中的此教學課程,請參閱: - - - - To learn more about applied F# programming, use - 如需深入了解套用的 F# 程式設計,請使用 - - - - To install the Visual F# Power Tools, use - 若要安裝 Visual F# Power Tools,請使用 - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - [工具]5D; --> [延伸模組和更新]5D; --> [連線]5D; 並搜尋 - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - 如需有關搭配 F# 一起使用的其他範本,請參閱 Visual Studio 中的 [線上範本]5D;, - - - - 'New Project' --> 'Online Templates' - [新增專案]5D; --> [線上範本]5D; - - - - F# supports three kinds of comments: - F# 支援三種註解: - - - - 1. Double-slash comments. These are used in most situations. - 1. 將註解加上雙斜線。適用於大部分的情況。 - - - - 2. ML-style Block comments. These aren't used that often. - 2. 將註解加上 ML 樣式區塊。較不常使用。 - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. 將註解加上三斜線。適用於記錄函式、類型等。 - - - - They will appear as text when you hover over something which is decorated with these comments. - 當您暫留在以這些註解為裝飾的項目上時,這些註解會顯示為文字。 - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - 這些註解也支援 .NET 樣式的 XML 註解,讓您可以產生參考文件, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - 也讓編輯者 (像是 Visual Studio) 可以從註解中擷取資訊。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 使用 'open' 關鍵字開啟命名空間。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - 模組是 F# 程式碼的分組,例如值、類型及函式值。 - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - 將程式碼分組為模組有助於將相關的程式碼整合在一塊,且能避免程式發生名稱衝突。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - 此為範例整數。 - - - - This is a sample floating point number. - 此為範例浮點數。 - - - - This computed a new number by some arithmetic. Numeric types are converted using - 這使用了一些算數來計算新數字。使用函式 'int'、'double' 等 - - - - functions 'int', 'double' and so on. - 來轉換數字類型。 - - - - This is a list of the numbers from 0 to 99. - 此為從 0 到 99 的數字清單。 - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - 此為所有 Tuple 的清單,內含從 0 到 99 的所有數字及其平方。 - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 下一行會使用 '%A' 執行一般列印,來列印包含 Tuple 的清單。 - - - - This is a sample integer with a type annotation - 此為具有型別註解的範例整數 - - - - Values in F# are immutable by default. They cannot be changed - 根據預設,F# 中的值是不可變的。於程式執行過程中,除非明確標示為可變的 - - - - in the course of a program's execution unless explicitly marked as mutable. - 否則無法對其進行變更。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 透過 'let' 將值繫結到名稱,即可將它設為不可變動。 - - - - The second line of code fails to compile because 'number' is immutable and bound. - 因為 'number' 無法變動並已繫結,所以無法編譯第二行程式碼。 - - - - Re-defining 'number' to be a different value is not allowed in F#. - 在 F# 中,不得將 'number' 重新定義為不同的值。 - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 可變動的繫結。需要此項目才可變更 'otherNumber' 的值。 - - - - When mutating a value, use '<-' to assign a new value. - 變動值時,請使用 '<-' 指派新的值。 - - - - You could not use '=' here for this purpose since it is used for equality - '=' 在此表示等於,所以無法用於此用途 - - - - or other contexts such as 'let' or 'module' - 或其他內容,例如 'let' 或 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - F# 程式設計時常需要定義函式來轉換輸入資料,從而產生 - - - - useful results. - 實用的結果。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 您可以使用 'let' 來定義函式。此接受整數引數,並會傳回整數。 - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 對函式引數來說不一定要使用括號,但使用明確的型別註解時例外。 - - - - Apply the function, naming the function return result using 'let'. - 套用函式,使用 'let' 命名函數會傳回結果。 - - - - The variable type is inferred from the function return type. - 變數型別是從函式傳回型別推斷出來。 - - - - This line uses '%d' to print the result as an integer. This is type-safe. - 此行使用 '%d' 以整數形式列印結果。這是型別安全。 - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 如果 'result1' 的類型不是 'int',則無法編譯該行。 - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 需要時,請使用 '(argument:type)' 為參數名稱的類型加上標註。需要使用括號。 - - - - Conditionals use if/then/elid/elif/else. - 條件使用 if/then/elid/elif/else。 - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - 請注意,F# 使用空白縮排感知語法,其與 Python 這類語言類似。 - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - 此行使用 '%f' 以浮點形式列印結果。與上述 '%d' 相同,這是型別安全。 - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - 布林值是 F# 中的基本資料類型。以下是一些布林值與條件式邏輯的範例。 - - - - To learn more, see: - 若要深入了解,請參閱: - - - - and - - - - - Booleans values are 'true' and 'false'. - 布林值為 'true' 和 'false'。 - - - - Operators on booleans are 'not', '&&' and '||'. - 布林值上的運算子為 'not'、'&&' 和 '||'。 - - - - This line uses '%b'to print a boolean value. This is type-safe. - 此行使用 '%b' 列印布林值。這是型別安全。 - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 字串在 F# 中是基本的資料類型。以下是一些字串與基本字串操作的範例。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 字串使用雙引號。 - - - - Strings can also use @ to create a verbatim string literal. - 字串也可使用 @ 來建立逐字字串常值。 - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - 這將會忽略逸出字元,例如 '\'、'\n'、'\t' 等等。 - - - - String literals can also use triple-quotes. - 字串常值也可使用三引號。 - - - - String concatenation is normally done with the '+' operator. - 串連字串通常使用 '+' 運算子進行。 - - - - This line uses '%s' to print a string value. This is type-safe. - 此行使用 '%s' 列印字串值。這是型別安全。 - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - 子字串使用索引子標記法。此行會擷取前 7 個字元作為子字串。 - - - - Note that like many languages, Strings are zero-indexed in F#. - 請注意,就像許多語言一樣,字串在 F# 中會以零為基底編製索引。 - - - - Tuples are simple combinations of data values into a combined value. - 元組是簡單的資料值合併為合併值。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 簡式整數元組。 - - - - A function that swaps the order of two values in a tuple. - 將元組中兩個值的順序互換的函式。 - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 型別推斷會自動將函式一般化成泛型類型, - - - - meaning that it will work with any type. - 表示其可與任何類型搭配運作。 - - - - A tuple consisting of an integer, a string, - 元組,包含整數、字串、 - - - - and a double-precision floating point number. - 和雙精確度浮點數。 - - - - A simple tuple of integers with a type annotation. - 具有類型註釋之整數的簡單元組。 - - - - Type annotations for tuples use the * symbol to separate elements - 元組的類型註釋會使用 * 符號分隔項目 - - - - Tuples are normally objects, but they can also be represented as structs. - 元組一般是物件,但也可以用結構形式呈現。 - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - 這些會與 C# 和 Visual Basic .NET 中的結構完全相互操作; 不過, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 結構元組無法利用物件元組 (通常稱為參考元組) 進行隱含轉換。 - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - 因此,將無法編譯以下的第二行。請取消它的註解,看看會如何。 - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 雖然您不能隱含地在結構元組及參考元組間進行轉換, - - - - you can explicitly convert via pattern matching, as demonstrated below. - 但您可透過模式比對明確地轉換,如下所示。 - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# 管道運算子 ('|>'、'<|' 等) 與 F# 組合運算子 ('>>'、'<<') - - - - are used extensively when processing data. These operators are themselves functions - 廣泛用於處理資料時。這些運算子本身就是函式 - - - - which make use of Partial Application. - 其會利用局部應用程式。 - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - 若要深入了解這些運算子,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 若要深入了解局部應用程式,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 產生值的平方。 - - - - Adds 1 to a value. - 將值加 1。 - - - - Tests if an integer value is odd via modulo. - 測試整數值是否為經過模數的奇數。 - - - - A list of 5 numbers. More on lists later. - 5 個數字的清單。清單上稍後會有更多項目。 - - - - Given a list of integers, it filters out the even numbers, - 提供整數清單,它會篩選出偶數, - - - - squares the resulting odds, and adds 1 to the squared odds. - 取結果奇數的平方值,並對平方後的奇數加 1。 - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 撰寫 'squareOddValuesAndAddOne' 較簡短的方式是巢狀每個項目 - - - - sub-result into the function calls themselves. - 子結果進入函式呼叫本身。 - - - - This makes the function much shorter, but it's difficult to see the - 這會將函式設成更短,但較難查看 - - - - order in which the data is processed. - 資料的處理順序。 - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 撰寫 'squareOddValuesAndAddOne' 的慣用方式是使用 F# 管道運算子。 - - - - This allows you to avoid creating intermediate results, but is much more readable - 這可讓您避免建立中繼結果,但比較容易閱讀 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - ,相較於 'squareOddValuesAndAddOneNested' 這類的巢狀函式呼叫 - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 您可以移動第二個 'List.map' 呼叫來縮短 'squareOddValuesAndAddOnePipeline' - - - - into the first, using a Lambda Function. - 到第一個項目,使用 Lambda 函式。 - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - 請注意,管線也會用於 lambda 函式內。F# 管道運算子 - - - - can be used for single values as well. This makes them very powerful for processing data. - 也可以用於單一值。如此可讓它們在處理資料時功能極為強大。 - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 最後,您不需要使用 '>>' 來明確接受 'values' 作為參數 - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 以撰寫兩個核心作業: 篩選出偶數,然後取其平方值再加一。 - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 同樣地,也不需要 lambda 運算式的 'fun x -> ...' 位元,因為 'x' 只是 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 定義於該範圍內,以將它傳遞至功能管線。因此,可以使用 '>>' - - - - there as well. - 也會在該處。 - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition' 的結果本身是另一個函式,且該函式接受 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 作為輸入的整數清單。如果您執行 'squareOddValuesAndAddOneComposition' 時搭配清單 - - - - of integers, you'll notice that it produces the same results as previous functions. - (整數),您將注意到它會產生與先前函式相同的結果。 - - - - This is using what is known as function composition. This is possible because functions in F# - 這將使用所謂的函式組合。原因可能是 F# 中的函式 - - - - use Partial Application and the input and output types of each data processing operation match - 使用局部應用程式,以及每個資料處理作業相符的輸入與輸出類型 - - - - the signatures of the functions we're using. - 所使用之函式的簽章。 - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - 清單是已排序且不可變動的單向連結清單。它們於評估時會即刻進行運算。 - - - - This module shows various ways to generate lists and process lists with some functions - 此模組示範產生清單及利用某些函式處理清單的各種方法 - - - - in the 'List' module in the F# Core Library. - 在 F# 核心程式庫的 'List' 模組中。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - 清單使用 [ ... ] 定義。這是空白清單。 - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - 這是內含 3 個項目的清單。使用 ';' 分隔同一行的項目。 - - - - You can also separate elements by placing them on their own lines. - 您也可以將項目放在各自的行上加以分隔。 - - - - This is a list of integers from 1 to 1000 - 此為從 1 到 1000 的整數清單 - - - - Lists can also be generated by computations. This is a list containing - 計算也可產生清單。此清單內含 - - - - all the days of the year. - 當年每一天。 - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 使用 'List.take' 列印 'daysList' 的前 5 個項目。 - - - - Computations can include conditionals. This is a list containing the tuples - 計算可包含條件。此為內含元組的清單 - - - - which are the coordinates of the black squares on a chess board. - 其為棋盤上黑方格的座標。 - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - 可以使用 'List.map' 及其他函式程式設計結合器轉換清單。 - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - 此定義會產生新的清單,方法是使用管線使 numberList 中的數字成平方 - - - - operator to pass an argument to List.map. - 運算子以將引數傳遞到 List.map。 - - - - There are many other list combinations. The following computes the sum of the squares of the - 還有許多其他清單組合。以下會計算下項的平方總和: - - - - numbers divisible by 3. - 可由 3 整除的數字。 - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 陣列是固定大小且類型相同的可變動項目集合。 - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - 陣列雖與清單 (支援列舉,並具有類似的結合器可用於資料處理) 相似,但 - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 陣列通常比較快,而且支援快速隨機存取。但可變動的代價是安全性變低。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - 此為空白的陣列。請注意與清單前置詞相似的前置詞,請改用 `[| ... |]`。 - - - - Arrays are specified using the same range of constructs as lists. - 使用與所列相同的建構範圍指定陣列。 - - - - This is an array of numbers from 1 to 1000. - 這是從 1 到 1000 的數字陣列。 - - - - This is an array containing only the words "hello" and "world". - 這是僅包含 "hello" 與 "world" 字詞的陣列。 - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - 這是由索引初始化的陣列,內含從 0 到 2000 之間的偶數。 - - - - Sub-arrays are extracted using slicing notation. - 使用了切割標記法來擷取子陣列。 - - - - You can loop over arrays and lists using 'for' loops. - 您可以使用 'for' 迴圈逐一反覆執行陣列與清單。 - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 您可以使用向左鍵指派運算子來修改陣列元素的內容。 - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - 若要深入了解此運算子,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 您可以使用 'Array.map' 及其他功能程式設計作業來轉換陣列。 - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 以下會計算 'h' 開頭的字組之長度總和。 - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - 序列是一系列的邏輯項目,全部皆為相同的類型。它是比清單及陣列更常見的類型。 - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - 序列是視需要評估,並在每次反覆執行時重新評估。 - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# 序列是 .NET System.Collections.Generic.IEnumerable<'T> 的別名。 - - - - Sequence processing functions can be applied to Lists and Arrays as well. - 序列處理函式也可以套用到清單和陣列。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - 此為空白序列。 - - - - This a sequence of values. - 這是值的序列。 - - - - This is an on-demand sequence from 1 to 1000. - 此為從 1 到 1000 的隨選序列。 - - - - This is a sequence producing the words "hello" and "world" - 此為產生 "hello" 及 "world" 的序列 - - - - This sequence producing the even numbers up to 2000. - 此序列產生 2000 以下的偶數。 - - - - This is an infinite sequence which is a random walk. - 這是屬於隨機漫步的無限序列。 - - - - This example uses yield! to return each element of a subsequence. - 此範例使用 yield! 傳回序列的每個元素。 - - - - This example shows the first 100 elements of the random walk. - 此範例顯示了隨機漫步的前 100 個項目。 - - - - Recursive functions can call themselves. In F#, functions are only recursive - 遞迴函式可以呼叫其本身。在 F# 中,函式均為遞迴 - - - - when declared using 'let rec'. - (於使用 'let rec' 宣告時)。 - - - - Recursion is the preferred way to process sequences or collections in F#. - 遞迴是處理 F# 中序列或集合的慣用方法。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - 此範例顯示遞迴函式,其可計算下項的階乘: - - - - integer. It uses 'let rec' to define a recursive function. - 整數。其使用 'let rec' 來定義遞迴函式。 - - - - Computes the greatest common factor of two integers. - 計算兩個整數的最大公因數。 - - - - Since all of the recursive calls are tail calls, - 因為所有遞迴呼叫都是先計算細項的呼叫 (tail call),所以 - - - - the compiler will turn the function into a loop, - 編譯器會將函式轉換為迴圈, - - - - which improves performance and reduces memory consumption. - 以改善效能並降低記憶體耗用。 - - - - This example computes the sum of a list of integers using recursion. - 此範例會計算使用遞迴之整數清單的總和。 - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 這會將 'sumList' 設成尾遞迴,使用內含結果累加器的 Helper 函式。 - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - 這會叫用尾遞迴 helper 函式,提供 '0' 作為種子累加器。 - - - - An approach like this is common in F#. - 在 F# 中,這類方式十分常見。 - - - - Records are an aggregate of named values, with optional members (such as methods). - 記錄是具有選擇性成員 (例如方法) 之具名值的彙總。 - - - - They are immutable and have structural equality semantics. - 它們不可變動,且具有結構相等的語意。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - 此範例示範如何定義新記錄類型。 - - - - This example shows how to instantiate a record type. - 此範例示範如何具現化記錄類型。 - - - - You can also do this on the same line with ';' separators. - 您也可以使用 ';' 分隔符號,在同一行執行此作業。 - - - - This example shows how to use "copy-and-update" on record values. It creates - 此範例顯示如何在記錄值上使用 "copy-and-update"。其會建立 - - - - a new record value that is a copy of contact1, but has different values for - 新記錄值,其為 contact1 的複本,但對於下項有不同的值: - - - - the 'Phone' and 'Verified' fields. - [Phone]5D; 與 [Verified]5D; 欄位。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - 此範例示範如何寫入會處理記錄值的函式。 - - - - It converts a 'ContactCard' object to a string. - 其會將 'ContactCard' 物件轉換為字串。 - - - - This is an example of a Record with a member. - 這是內含成員之記錄的範例。 - - - - Members can implement object-oriented members. - 成員可以實作物件導向成員。 - - - - Members are accessed via the '.' operator on an instantiated type. - 成員透過在具現化類型上的 '.' 運算子加以存取。 - - - - Records can also be represented as structs via the 'Struct' attribute. - 記錄也可透過 'Struct' 屬性以結構形式呈現。 - - - - This is helpful in situations where the performance of structs outweighs - 它在結構效能較優的情況下很有用 - - - - the flexibility of reference types. - 參考類型的彈性。 - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 差異聯集 (簡寫為 DU) 是可能為數個具名表單或案例的值。 - - - - Data stored in DUs can be one of several distinct values. - DU 中所儲存的資料可以是數個相異值中的一個。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - 以下代表一副撲克牌。 - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 差異聯集也可用以代表一張撲克牌的順位。 - - - - Represents the rank of cards 2 .. 10 - 代表 2 .. 10 這幾張牌的順位 - - - - Discriminated Unions can also implement object-oriented members. - 差異聯集也可以實作物件導向成員。 - - - - This is a record type that combines a Suit and a Rank. - 這是合併了 Suit 和 Rank 的記錄類型。 - - - - It's common to use both Records and Disciminated Unions when representing data. - 代表資料時,通常會使用記錄與差異聯集。 - - - - This computes a list representing all the cards in the deck. - 這會計算代表一疊牌中所有牌的清單。 - - - - This example converts a 'Card' object to a string. - 此範例將 'Card' 物件轉換為字串。 - - - - This example prints all the cards in a playing deck. - 此範例會列印牌局的所有紙牌。 - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 單一案例 DU 通常用於網域模型。這讓使用類型變得更加安全 - - - - over primitive types such as strings and ints. - 針對基本類型,例如 strings 和 ints。 - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 單一案例 DU 無法隱含地轉換成它們所包裝的類型,反之亦然。 - - - - For example, a function which takes in an Address cannot accept a string as that input, - 例如,接受位址的函式無法接受字串作為輸入, - - - - or vive/versa. - 反之亦然。 - - - - You can easily instantiate a single-case DU as follows. - 您可以輕鬆地具現化單一案例 DU,如下所示。 - - - - When you need the value, you can unwrap the underlying value with a simple function. - 當您需要值時,可以使用簡單的函式來展開基礎值。 - - - - Printing single-case DUs is simple with unwrapping functions. - 使用展開 (unwrap) 函式來列印單一案例的 DU 十分簡單。 - - - - Disciminated Unions also support recursive definitions. - 差異聯集也支援遞迴定義。 - - - - This represents a Binary Search Tree, with one case being the Empty tree, - 這代表二進位搜尋樹狀結構,其中有一個案例是空的樹狀結構, - - - - and the other being a Node with a value and two subtrees. - 而另一個是具有一個值和兩個子樹狀結構的節點。 - - - - Check if an item exists in the binary search tree. - 請確認二進位搜尋樹狀結構中是否已有項目存在。 - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - 使用模式比對進行遞迴搜尋。若存在即傳回 true; 否則傳回 false。 - - - - Check the left subtree. - 請檢查左樹狀子結構。 - - - - Check the right subtree. - 請檢查右樹狀子結構。 - - - - Inserts an item in the Binary Search Tree. - 在二進位搜尋樹狀結構中插入項目。 - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - 尋找要使用模式比對遞迴插入的位置,然後插入新節點。 - - - - If the item is already present, it does not insert anything. - 如果該項目已經存在,就不會插入任何內容。 - - - - No need to insert, it already exists; return the node. - 其已存在,所以無須插入; 傳回該節點。 - - - - Call into left subtree. - 呼叫左樹狀子結構。 - - - - Call into right subtree. - 呼叫右樹狀子結構。 - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 差異聯集也可透過 'Struct' 屬性以結構形式呈現。 - - - - This is helpful in situations where the performance of structs outweighs - 它在結構效能較優的情況下很有用 - - - - the flexibility of reference types. - 參考類型的彈性。 - - - - However, there are two important things to know when doing this: - 但執行這項作業時,需要知道兩件重要的事情: - - - - 1. A struct DU cannot be recursively-defined. - 1. 不可遞迴定義結構 DU。 - - - - 2. A struct DU must have unique names for each of its cases. - 2. 結構 DU 的每個案例都必須要有唯一的名稱。 - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - 模式比對是讓您能利用模式的一項 F# 功能, - - - - which are a way to compare data with a logical structure or structures, - 這是使用一或多個邏輯結構來比對資料的方式, - - - - decompose data into constituent parts, or extract information from data in various ways. - 將資料分解為構成組件,或透過各種方式來擷取資料中的資訊。 - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - 接著可根據透過比對模式之模式的「形狀」加以分派。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 人員姓名的記錄 - - - - A Discriminated Union of 3 different kinds of employees - 3 種不同種類員工的差異聯集 - - - - Count everyone underneath the employee in the management hierarchy, - 計算管理階層中該員工下的每位人員, - - - - including the employee. - 包括員工。 - - - - Find all managers/executives named "Dave" who do not have any reports. - 尋找沒有任何報表且名為 "Dave" 的所有經理/主管。 - - - - This uses the 'function' shorthand to as a lambda expression. - 這會使用 'function' 速記作為 lambda 運算式。 - - - - [] matches an empty list. - [] 代表空的清單。 - - - - '_' is a wildcard pattern that matches anything. - '_' 是符合所有項目的萬用字元模式。 - - - - This handles the "or else" case. - 這會處理 "or else" 案例。 - - - - You can also use the shorthand function construct for pattern matching, - 您也可以使用速記函式建構來進行模式比對, - - - - which is useful when you're writing functions which make use of Partial Application. - 適用於撰寫可利用局部應用程式的函式時。 - - - - Define some more functions which parse with the helper function. - 再額外定義一些使用 Helper 函式進行剖析的函式。 - - - - Active Patterns are another powerful construct to use with pattern matching. - 現用模式是另一項功能強大之建構,可與模式比對搭配使用。 - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - 它們可讓您將輸入資料分割到多個自訂表單,於模式比對呼叫網站進行分解。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 透過 'function' 關鍵字與現用模式進行模式比對,通常看來如下。 - - - - Call the printer with some different values to parse. - 透過解析一些不同的值來呼叫印表機。 - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - 選項值是以 'Some' 或 'None' 標記的任何一種值。 - - - - They are used extensively in F# code to represent the cases where many other - 它們廣泛用於 F# 程式碼中,來代表許多其他語言會 - - - - languages would use null references. - 使用 null 參考的狀況。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - 首先,定義透過單一案例差異聯集所定義的郵遞區號。 - - - - Next, define a type where the ZipCode is optional. - 接著,定義不一定需要 ZipCode 的類型。 - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 然後,定義代表物件的介面類型,以計算客戶郵遞區號的郵寄區域, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 'getState' 和 'getShippingZone' 抽象方法的指定實作。 - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 接下來,為使用計算機執行個體的客戶計算出貨區。 - - - - This uses combinators in the Option module to allow a functional pipeline for - 這會在 Option 模組中使用結合器,以允許在執行下列功能時使用功能管線: - - - - transforming data with Optionals. - 使用選用項目來轉換資料。 - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 測量單位是以型別安全方式為基本數值類型加上註釋的方法。 - - - - You can then perform type-safe arithmetic on these values. - 接著可以在這些值上執行型別安全算術。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - 首先,開啟常用單位名稱的集合 - - - - Define a unitized constant - 定義 unitized 常數 - - - - Next, define a new unit type - 接著,定義新單位類型 - - - - Conversion factor mile to meter. - 英哩到公尺的轉換因數。 - - - - Define a unitized constant - 定義 unitized 常數 - - - - Compute metric-system constant - 計算計量系統常數 - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 使用測量單位之值的用法,就像是列印這類作業的基本數字類型一樣。 - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - 類別是在 F# 中定義新物件類型的一種方式,且支援標準物件導向建構。 - - - - They can have a variety of members (methods, properties, events, etc.) - 它們可以有各式不同的成員 (方法、屬性、事件等等) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - 若要深入了解類別,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - 若要深入了解成員,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 簡式二維向量類別。 - - - - The class's constructor is on the first line, - 類別的建構函式位於第一行, - - - - and takes two arguments: dx and dy, both of type 'double'. - 並接受兩種引數: dx 與 dy,兩者的類型都是 'double'。 - - - - This internal field stores the length of the vector, computed when the - 這個內部欄位會儲存向量長度,計算時機為 - - - - object is constructed - 物件已建構 - - - - 'this' specifies a name for the object's self identifier. - 'this' 會為物件的自我識別碼指定名稱。 - - - - In instance methods, it must appear before the member name. - 在執行個體方法中,它必須出現在成員名稱前面。 - - - - This member is a method. The previous members were properties. - 此成員是方法。先前的成員是屬性。 - - - - This is how you instantiate the Vector2D class. - 這是 Vector2D 類別的具現化方式。 - - - - Get a new scaled vector object, without modifying the original object. - 取得全新且可調整大小的向量物件,但不修改原始物件。 - - - - Generic classes allow types to be defined with respect to a set of type parameters. - 泛型類別可定義關乎一組類型參數的類型。 - - - - In the following, 'T is the type parameter for the class. - 在下列範例中,'T 是類別的型別參數。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - 此內部欄位會以清單形式儲存狀態。 - - - - Add a new element to the list of states. - 新增項目至狀態清單。 - - - - use the '<-' operator to mutate the value. - 使用 '<-' 運算子可變動值。 - - - - Get the entire list of historical states. - 取得完整的歷程狀態清單。 - - - - Get the latest state. - 取得最新狀態。 - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 狀態追蹤器類別的 'int' 執行個體。請注意,型別參數是推斷出來的。 - - - - Add a state - 加入狀態 - - - - Interfaces are object types with only 'abstract' members. - 介面為只有 'abstract' 成員的物件類型。 - - - - Object types and object expressions can implement interfaces. - 物件類型與物件運算式可以實作介面。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - 這是實作 IDisposable 的類型。 - - - - This is the implementation of IDisposable members. - 這是 IDisposable 成員的實作。 - - - - This is an object that implements IDisposable via an Object Expression - 這是透過物件運算式實作 IDisposable 的物件 - - - - Unlike other languages such as C# or Java, a new type definition is not needed - 與 C# 或 Java 等其他這類語言不同,不需要新的類型定義 - - - - to implement an interface. - 以實作介面。 - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core 程式庫定義一個範圍內的平行處理函式。這裡 - - - - you use some functions for parallel processing over arrays. - 您可以使用一些函式對陣列進行平行處理。 - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 若要深入了解,請參閱: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - 首先,輸入的陣列。 - - - - Next, define a functions that does some CPU intensive computation. - 接下來,定義執行某些 CPU 密集型計算的函式。 - - - - Next, do a parallel map over a large input array. - 接下來,對大型輸入陣列執行平行對應。 - - - - Next, print the results. - 接下來,列印結果。 - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - 事件是 .NET 程式設計的常見慣用語,特別是使用 WinForms 或 WPF 應用程式時。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - 首先,建立由訂閱點 (event.Publish) 與事件觸發程序 (event.Trigger) 所組成之事件物件的執行個體。 - - - - Next, add handler to the event. - 接下來,將處理常式新增到事件。 - - - - Next, trigger the event. - 接下來,觸發該事件。 - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 接下來,為遵循標準 .NET 慣例的事件建立執行個體: (sender, EventArgs)。 - - - - Next, add a handler for this new event. - 接下來,為此新事件新增處理常式。 - - - - Next, trigger this event (note that sender argument should be set). - 接下來,觸發此事件 (請注意,應該設定 sender 引數)。 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj b/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj deleted file mode 100644 index 72afa7b760..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - TutorialProject - - - - - - Template\Tutorial.fsx - - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest deleted file mode 100644 index 39bac985bc..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest +++ /dev/null @@ -1,25 +0,0 @@ - - - - - F# .NETCore Project Templates - F# project templates for .NETCore. - - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest deleted file mode 100644 index 4b0a45a6e9..0000000000 --- a/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - Visual F# Templates - Deploy Visual F# Tools Desktop Project Templates to Visual Studio - Microsoft.FSharp.VSIX.Templates - https://docs.microsoft.com/en-us/dotnet/articles/fsharp/ - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj deleted file mode 100644 index cfab3f5dfa..0000000000 --- a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - Library - Microsoft\FSharpTemplates - net472 - true - - - - - PreserveNewest - packages\System.ValueTuple.4.4.0.nupkg - true - - - PreserveNewest - packages\FSharp.Core.$(FSharpCoreShippedPackageVersion).nupkg - true - - - Designer - - - - - - - - - - - {604f0daa-2d33-48dd-b162-edf0b672803d} - ConsoleProject - ProjectTemplates - TemplateProjectOutputGroup%3b - false - True - - - {01678cda-a11f-4dee-9344-2edf91cf1ae7} - LibraryProject - ProjectTemplates - TemplateProjectOutputGroup%3b - false - True - - - {2facee44-48bd-40b5-a2ee-b54a0c9bb7c4} - TutorialProject - ProjectTemplates - TemplateProjectOutputGroup%3b - false - True - - - - diff --git a/vsintegration/readme.md b/vsintegration/readme.md index 4f929238bd..ae582cbdf9 100644 --- a/vsintegration/readme.md +++ b/vsintegration/readme.md @@ -51,7 +51,3 @@ A skeleton command line tool which exercises the F# Compiler Service. # ItemTemplates Visual Studio item templates for F# projects. - -# ProjectTemplates - -Visual Studio project templates for .NET Framework projects. From d70636d6eec2fd6b821961f8eaeafa4011959de3 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 3 Sep 2019 14:20:13 -0700 Subject: [PATCH 004/214] Prepare for F# 5.0 (#7372) * Create F# 5.0 * FSI langversion * Update Versions.props --- eng/Versions.props | 6 +++--- src/fsharp/LanguageFeatures.fs | 13 ++++++++----- src/fsharp/LanguageFeatures.fsi | 5 +++-- .../fsc/langversion/langversionhelp.437.1033.bsl | 3 ++- .../fsi/langversion/langversionhelp.437.1033.bsl | 3 ++- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index b6bf235c98..b631912fec 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -12,9 +12,9 @@ beta - 4.8 + 5.0 $(FSLanguageVersion) - $(FSCoreMajorVersion).1 + $(FSCoreMajorVersion).0 $(FSCoreMajorVersion).0 $(FSCoreVersionPrefix).0 @@ -23,7 +23,7 @@ $(FSCorePackageVersion)-$(PreReleaseVersionLabel).* - 10.7 + 11.0 $(FSPackageMajorVersion).0 $(FSPackageVersion) $(FSPackageVersion).0 diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 4f55325311..fa35a465dc 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -20,14 +20,15 @@ open System [] type LanguageFeature = | PreviewVersion = 0 - | LanguageVersion46 = 1 - | LanguageVersion47 = 2 | SingleUnderscorePattern = 3 | WildCardInForLoop = 4 | RelaxWhitespace = 5 | NameOf = 6 | ImplicitYield = 7 | OpenStaticClasses = 8 + | LanguageVersion46 = 0x10046 + | LanguageVersion47 = 0x10047 + | LanguageVersion50 = 0x10050 /// LanguageVersion management @@ -36,18 +37,20 @@ type LanguageVersion (specifiedVersion) = // When we increment language versions here preview is higher than current RTM version static let languageVersion46 = 4.6m static let languageVersion47 = 4.7m + static let languageVersion50 = 5.0m static let previewVersion = 9999m // Language version when preview specified - static let defaultVersion = languageVersion47 // Language version when default specified + static let defaultVersion = languageVersion50 // Language version when default specified static let latestVersion = defaultVersion // Language version when latest specified - static let latestMajorVersion = languageVersion46 // Language version when latestmajor specified + static let latestMajorVersion = languageVersion47 // Language version when latestmajor specified static let validOptions = [| "preview"; "default"; "latest"; "latestmajor" |] - static let languageVersions = set [| languageVersion46; languageVersion47 |] + static let languageVersions = set [| languageVersion46; languageVersion47; languageVersion50 |] static let features = dict [| // Add new LanguageVersions here ... LanguageFeature.LanguageVersion46, languageVersion46 LanguageFeature.LanguageVersion47, languageVersion47 + LanguageFeature.LanguageVersion50, languageVersion50 LanguageFeature.PreviewVersion, previewVersion LanguageFeature.SingleUnderscorePattern, languageVersion47 LanguageFeature.WildCardInForLoop, languageVersion47 diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index d1d190d3f9..1610f1af18 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -7,14 +7,15 @@ module internal FSharp.Compiler.Features [] type LanguageFeature = | PreviewVersion = 0 - | LanguageVersion46 = 1 - | LanguageVersion47 = 2 | SingleUnderscorePattern = 3 | WildCardInForLoop = 4 | RelaxWhitespace = 5 | NameOf = 6 | ImplicitYield = 7 | OpenStaticClasses = 8 + | LanguageVersion46 = 0x10046 + | LanguageVersion47 = 0x10047 + | LanguageVersion50 = 0x10050 /// LanguageVersion management diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/langversionhelp.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/langversionhelp.437.1033.bsl index 83fd0bfa99..b7f6805220 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/langversionhelp.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/langversion/langversionhelp.437.1033.bsl @@ -4,4 +4,5 @@ default latest latestmajor 4.6 -4.7 (Default) \ No newline at end of file +4.7 +5.0 (Default) \ No newline at end of file diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/langversionhelp.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/langversionhelp.437.1033.bsl index 83fd0bfa99..b7f6805220 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/langversionhelp.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/langversion/langversionhelp.437.1033.bsl @@ -4,4 +4,5 @@ default latest latestmajor 4.6 -4.7 (Default) \ No newline at end of file +4.7 +5.0 (Default) \ No newline at end of file From 544a6e14b268b9909fad9cb393d9396582a7fd3e Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 5 Sep 2019 09:50:11 -0700 Subject: [PATCH 005/214] typo --- tests/FSharp.Core.UnitTests/LibraryTestFx.fs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs index c584d1996d..890c36c64c 100644 --- a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs +++ b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs @@ -143,4 +143,3 @@ module SurfaceArea = sb.ToString () Assert.Fail msg -#endif \ No newline at end of file From 8006e7be4dc82a5337673f0a6b910f3474cd4a2e Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 5 Sep 2019 12:54:49 -0700 Subject: [PATCH 006/214] surfaceareagit status --- tests/FSharp.Core.UnitTests/LibraryTestFx.fs | 6 +- .../SurfaceArea.coreclr.fs | 925 +++++++++++++++- .../SurfaceArea.net40.fs | 987 +++++++++++++++++- 3 files changed, 1877 insertions(+), 41 deletions(-) diff --git a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs index 890c36c64c..5bf33055a6 100644 --- a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs +++ b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs @@ -72,7 +72,6 @@ module SurfaceArea = let types = asm.GetExportedTypes() - let typenames = new System.Collections.Generic.List() // extract canonical string form for every public member of every type let getTypeMemberStrings (t : Type) = // for System.Runtime-based profiles, need to do lots of manual work @@ -83,7 +82,7 @@ module SurfaceArea = types |> Array.collect getTypeMemberStrings asm,actual - + // verify public surface area matches expected let verify expected platform (fileName : string) = let normalize (s:string) = @@ -91,7 +90,7 @@ module SurfaceArea = let asm, actualNotNormalized = getActual () let actual = actualNotNormalized |> Seq.map normalize |> Seq.filter (String.IsNullOrWhiteSpace >> not) |> set - + let expected = // Split the "expected" string into individual lines, then normalize it. (normalize expected).Split([|"\r\n"; "\n"; "\r"|], StringSplitOptions.RemoveEmptyEntries) @@ -143,3 +142,4 @@ module SurfaceArea = sb.ToString () Assert.Fail msg + () \ No newline at end of file diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index 2151c47fbf..e9af0746a8 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -7,12 +7,16 @@ open FSharp.Core.UnitTests.LibraryTestFx type SurfaceAreaTest() = [] - member this.VerifyArea(): unit = + member this.VerifyArea() = let expected = @" +Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: System.String ToString() +Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -28,9 +32,13 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: System.String ToString() +Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -40,16 +48,24 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: System.String ToString() +Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -58,6 +74,7 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -66,6 +83,7 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) @@ -79,6 +97,7 @@ Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -92,6 +111,7 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) +Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) @@ -168,11 +188,19 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) +Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -199,6 +227,7 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -218,6 +247,7 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -237,17 +267,23 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.String ToString() +Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -256,6 +292,7 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -314,12 +351,14 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) +Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -348,10 +387,12 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -365,8 +406,10 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -374,6 +417,7 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -382,6 +426,7 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -445,8 +490,10 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -475,6 +522,7 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -483,6 +531,7 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -499,38 +548,62 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() +Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) +Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() +Microsoft.FSharp.Control.AsyncActivation`1[T]: System.Type GetType() Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() +Microsoft.FSharp.Control.AsyncPrimitives: Boolean Equals(System.Object) +Microsoft.FSharp.Control.AsyncPrimitives: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Bind[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[TResult], Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn CallThenInvoke[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], TResult, Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Invoke[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Control.AsyncActivation`1[T]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) +Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() +Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() +Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) +Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() +Microsoft.FSharp.Control.AsyncReturn: System.String ToString() +Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() +Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.CommonExtensions: System.String ToString() +Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) +Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -557,16 +630,20 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -578,25 +655,61 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -608,6 +721,8 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -617,9 +732,15 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) +Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Control.LazyExtensions: System.String ToString() +Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) +Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -627,8 +748,10 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() @@ -647,44 +770,144 @@ Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path +Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() +Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() +Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() +Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() +Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() +Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() +Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out +Microsoft.FSharp.Core.ByRefKinds: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() +Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ClassAttribute: System.String ToString() +Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -692,27 +915,61 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName +Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -732,29 +989,65 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -765,41 +1058,99 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() +Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name +Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -808,22 +1159,68 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() +Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId +Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() +Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message +Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -834,6 +1231,8 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -860,6 +1259,8 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -876,10 +1277,16 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -899,6 +1306,8 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -915,6 +1324,8 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -933,6 +1344,8 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -951,11 +1364,17 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -979,6 +1398,8 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -997,6 +1418,8 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1017,6 +1440,8 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1037,6 +1462,8 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1057,12 +1484,18 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1090,6 +1523,8 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1110,6 +1545,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1132,6 +1569,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1154,6 +1593,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1176,6 +1617,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1198,13 +1641,19 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1236,6 +1685,8 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1258,6 +1709,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1282,6 +1735,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1306,6 +1761,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1330,6 +1787,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1354,6 +1813,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1378,14 +1839,20 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1421,6 +1888,8 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1445,6 +1914,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1471,6 +1942,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1497,6 +1970,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1523,6 +1998,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1549,6 +2026,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1575,6 +2054,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1601,8 +2082,11 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -1610,6 +2094,9 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1665,15 +2152,27 @@ Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1693,6 +2192,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -1704,6 +2204,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -1712,8 +2214,12 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1731,14 +2237,24 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() +Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() +Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() +Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome +Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1765,6 +2281,7 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() @@ -1789,18 +2306,41 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) +Microsoft.FSharp.Core.FuncConvert: System.String ToString() +Microsoft.FSharp.Core.FuncConvert: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId +Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() +Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -1825,12 +2365,19 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -1846,12 +2393,17 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -1867,6 +2419,7 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -1890,6 +2443,8 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) +Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -1906,6 +2461,14 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) +Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1913,35 +2476,108 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() +Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() +Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException +Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 +Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message +Microsoft.FSharp.Core.MatchFailureException: System.String Source +Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace +Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() +Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() +Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) +Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Core.MatchFailureException: Void set_HResult(Int32) +Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) +Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() +Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI +Microsoft.FSharp.Core.NumericLiterals: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: System.String ToString() +Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -1950,6 +2586,7 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -1957,12 +2594,17 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -1986,6 +2628,8 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2023,11 +2667,16 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() +Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2045,6 +2694,7 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2088,6 +2738,7 @@ Microsoft.FSharp.Core.Operators: System.String ToString() Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) +Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2158,32 +2809,54 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] +Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2196,6 +2869,8 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: System.String ToString() +Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2213,14 +2888,24 @@ Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfModule: System.String ToString() +Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2234,21 +2919,77 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() +Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() +Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId +Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.SealedAttribute: System.String ToString() +Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -2262,8 +3003,16 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() +Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -2272,16 +3021,60 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) +Microsoft.FSharp.Core.StringModule: System.String ToString() +Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) +Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructAttribute: System.String ToString() +Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() +Microsoft.FSharp.Core.Unit: System.String ToString() +Microsoft.FSharp.Core.Unit: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) @@ -2322,6 +3115,36 @@ Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() +Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -2342,6 +3165,9 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) +Microsoft.FSharp.Linq.NullableModule: System.String ToString() +Microsoft.FSharp.Linq.NullableModule: System.Type GetType() +Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -2360,6 +3186,7 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -2375,10 +3202,14 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.String ToString() +Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -2411,6 +3242,8 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() +Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -2424,19 +3257,43 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -2444,6 +3301,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -2453,6 +3314,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -2464,6 +3329,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -2477,6 +3346,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -2492,6 +3365,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -2509,26 +3386,40 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) +Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() +Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -2552,8 +3443,14 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() +Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() +Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -2612,6 +3509,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -2626,6 +3524,7 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -2636,9 +3535,12 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() +Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -2675,9 +3577,13 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -2693,22 +3599,30 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) +Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) +Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -2729,9 +3643,11 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) +Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -2744,6 +3660,7 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" - SurfaceArea.verify expected "coreclr" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) - () \ No newline at end of file +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() +" + SurfaceArea.verify expected "coreclr" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) \ No newline at end of file diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index 7fecdb800c..dd4274a51d 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -7,12 +7,16 @@ open FSharp.Core.UnitTests.LibraryTestFx type SurfaceAreaTest() = [] - member this.VerifyArea(): unit = + member this.VerifyArea() = let expected = @" +Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: System.String ToString() +Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -28,9 +32,13 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: System.String ToString() +Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -40,16 +48,24 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: System.String ToString() +Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -58,6 +74,7 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -66,6 +83,7 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) @@ -79,6 +97,7 @@ Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -92,6 +111,7 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) +Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) @@ -168,11 +188,19 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) +Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -199,6 +227,7 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -218,6 +247,7 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -237,17 +267,23 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.String ToString() +Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -256,6 +292,7 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -314,12 +351,14 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) +Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -348,10 +387,12 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -365,8 +406,10 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -374,6 +417,7 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -382,6 +426,7 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -445,8 +490,10 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -475,6 +522,7 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -483,6 +531,7 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -499,15 +548,19 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() +Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() @@ -521,20 +574,36 @@ Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn I Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) +Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() +Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() +Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) +Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() +Microsoft.FSharp.Control.AsyncReturn: System.String ToString() +Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() +Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.CommonExtensions: System.String ToString() +Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) +Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -561,16 +630,20 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -582,25 +655,61 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -612,6 +721,8 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -621,9 +732,15 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) +Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Control.LazyExtensions: System.String ToString() +Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) +Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -631,52 +748,166 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) +Microsoft.FSharp.Control.WebExtensions: System.String ToString() +Microsoft.FSharp.Control.WebExtensions: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path +Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() +Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() +Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() +Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() +Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() +Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() +Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out +Microsoft.FSharp.Core.ByRefKinds: System.String ToString() +Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() +Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ClassAttribute: System.String ToString() +Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -684,27 +915,61 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName +Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -724,29 +989,65 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -757,41 +1058,99 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() +Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name +Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -800,22 +1159,68 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() +Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId +Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() +Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message +Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -826,6 +1231,8 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -852,6 +1259,8 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -868,10 +1277,16 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -891,6 +1306,8 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -907,6 +1324,8 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -925,6 +1344,8 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -943,11 +1364,17 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -971,6 +1398,8 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -989,6 +1418,8 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1009,6 +1440,8 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1029,6 +1462,8 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1049,12 +1484,18 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1082,6 +1523,8 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1102,6 +1545,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1124,6 +1569,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1146,6 +1593,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1168,6 +1617,8 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1190,13 +1641,19 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1228,6 +1685,8 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1250,6 +1709,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1274,6 +1735,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1298,6 +1761,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1322,6 +1787,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1346,6 +1813,8 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1370,14 +1839,20 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1413,6 +1888,8 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1437,6 +1914,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1463,6 +1942,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1489,6 +1970,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1515,6 +1998,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1541,6 +2026,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1567,6 +2054,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1593,8 +2082,11 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -1602,6 +2094,9 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1641,25 +2136,43 @@ Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Cor Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1679,6 +2192,7 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -1690,6 +2204,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -1698,8 +2214,12 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1717,6 +2237,8 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() +Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue @@ -1731,6 +2253,8 @@ Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome +Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1757,6 +2281,7 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() @@ -1781,18 +2306,41 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) +Microsoft.FSharp.Core.FuncConvert: System.String ToString() +Microsoft.FSharp.Core.FuncConvert: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId +Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() +Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -1817,12 +2365,19 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -1838,12 +2393,17 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -1859,6 +2419,7 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -1882,6 +2443,8 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) +Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -1898,6 +2461,14 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) +Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1905,38 +2476,107 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() +Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() +Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException +Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 +Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message +Microsoft.FSharp.Core.MatchFailureException: System.String Source +Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace +Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() +Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) +Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) +Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() +Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI +Microsoft.FSharp.Core.NumericLiterals: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: System.String ToString() +Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -1945,6 +2585,7 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -1952,12 +2593,17 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -1981,6 +2627,8 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2018,11 +2666,16 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() +Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2040,6 +2693,7 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2078,10 +2732,12 @@ Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + #endif @" +Microsoft.FSharp.Core.Operators: System.String NameOf[T](T) Microsoft.FSharp.Core.Operators: System.String ToString() Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) +Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2152,32 +2808,54 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] +Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2190,6 +2868,8 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: System.String ToString() +Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2198,36 +2878,6 @@ Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.C Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 GetHashCode() -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2], Microsoft.FSharp.Core.FSharpValueOption`1[T3]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Flatten[T](Microsoft.FSharp.Core.FSharpValueOption`1[Microsoft.FSharp.Core.FSharpValueOption`1[T]]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfNullable[T](System.Nullable`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfObj[T](T) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.String ToString() -Microsoft.FSharp.Core.ValueOption: System.Type GetType() -Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T ToObj[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpValueOption`1[T], TState) -Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) @@ -2237,14 +2887,24 @@ Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfModule: System.String ToString() +Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2258,21 +2918,77 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) +Microsoft.FSharp.Core.ResultModule: System.String ToString() +Microsoft.FSharp.Core.ResultModule: System.Type GetType() +Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() +Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId +Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.SealedAttribute: System.String ToString() +Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -2286,8 +3002,16 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() +Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -2296,17 +3020,91 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) +Microsoft.FSharp.Core.StringModule: System.String ToString() +Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) +Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructAttribute: System.String ToString() +Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() +Microsoft.FSharp.Core.Unit: System.String ToString() +Microsoft.FSharp.Core.Unit: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() +Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Int32 GetHashCode() +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2], Microsoft.FSharp.Core.FSharpValueOption`1[T3]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Flatten[T](Microsoft.FSharp.Core.FSharpValueOption`1[Microsoft.FSharp.Core.FSharpValueOption`1[T]]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: System.String ToString() +Microsoft.FSharp.Core.ValueOption: System.Type GetType() +Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T ToObj[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpValueOption`1[T], TState) +Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) @@ -2316,6 +3114,36 @@ Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() +Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -2336,6 +3164,9 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) +Microsoft.FSharp.Linq.NullableModule: System.String ToString() +Microsoft.FSharp.Linq.NullableModule: System.Type GetType() +Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -2354,6 +3185,7 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -2369,10 +3201,14 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.String ToString() +Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -2405,6 +3241,8 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() +Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -2418,19 +3256,43 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -2438,6 +3300,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -2447,6 +3313,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -2458,6 +3328,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -2471,6 +3345,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -2486,6 +3364,10 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -2503,16 +3385,23 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) -Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) @@ -2520,12 +3409,16 @@ Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](Int Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() +Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -2549,8 +3442,14 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() +Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() +Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -2609,6 +3508,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -2623,6 +3523,7 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -2633,9 +3534,12 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() +Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -2672,9 +3576,13 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -2690,22 +3598,30 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) +Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) +Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -2726,9 +3642,11 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) +Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -2741,10 +3659,11 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" #if CROSS_PLATFORM_COMPILER - // disabled because of slight order and GetMember discrepencies () + // disabled because of slight order and GetMember discrepencies #else SurfaceArea.verify expected "net40" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) -#endif +#endif \ No newline at end of file From 2290a1405a93f939ed5aad56a9bdd9410bf86f6b Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Fri, 6 Sep 2019 13:52:36 -0700 Subject: [PATCH 007/214] testcases --- tests/fsharp/Compiler/Language/OpenStaticClasses.fs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/fsharp/Compiler/Language/OpenStaticClasses.fs b/tests/fsharp/Compiler/Language/OpenStaticClasses.fs index 5dcc962db3..f4f955b0d5 100644 --- a/tests/fsharp/Compiler/Language/OpenStaticClasses.fs +++ b/tests/fsharp/Compiler/Language/OpenStaticClasses.fs @@ -45,7 +45,7 @@ module OpenSystemMathOnce = let x = Min(1.0, 2.0)""") [| (FSharpErrorSeverity.Error, 39, (22,28,22,32), "The namespace 'Math' is not defined."); - (FSharpErrorSeverity.Error, 39, (23,24,23,27), "The value or constructor 'Min' is not defined.") + (FSharpErrorSeverity.Error, 39, (23,24,23,27), "The value or constructor 'Min' is not defined. Maybe you want one of the following:\r\n min\r\n sin") |] [] @@ -73,9 +73,9 @@ module OpenSystemMathTwice = let x2 = Min(2.0, 1.0)""") [| (FSharpErrorSeverity.Error, 39, (22,17,22,21), "The namespace 'Math' is not defined."); - (FSharpErrorSeverity.Error, 39, (23,13,23,16), "The value or constructor 'Min' is not defined.") + (FSharpErrorSeverity.Error, 39, (23,13,23,16), "The value or constructor 'Min' is not defined. Maybe you want one of the following:\r\n min\r\n sin") (FSharpErrorSeverity.Error, 39, (25,17,25,21), "The namespace 'Math' is not defined."); - (FSharpErrorSeverity.Error, 39, (26,14,26,17), "The value or constructor 'Min' is not defined.") + (FSharpErrorSeverity.Error, 39, (26,14,26,17), "The value or constructor 'Min' is not defined. Maybe you want one of the following:\r\n min\r\n sin") |] [] @@ -100,9 +100,9 @@ module OpenMyMathOnce = let x = Min(1.0, 2.0) let x2 = Min(1, 2)""") [| - (FSharpErrorSeverity.Error, 39, (22,10,22,16), "The namespace or module 'MyMath' is not defined."); - (FSharpErrorSeverity.Error, 39, (23,13,23,16), "The value or constructor 'Min' is not defined.") - (FSharpErrorSeverity.Error, 39, (24,14,24,17), "The value or constructor 'Min' is not defined.") + (FSharpErrorSeverity.Error, 39, (22,10,22,16), "The namespace or module 'MyMath' is not defined. Maybe you want one of the following:\r\n Math"); + (FSharpErrorSeverity.Error, 39, (23,13,23,16), "The value or constructor 'Min' is not defined. Maybe you want one of the following:\r\n min\r\n sin") + (FSharpErrorSeverity.Error, 39, (24,14,24,17), "The value or constructor 'Min' is not defined. Maybe you want one of the following:\r\n min\r\n sin") |] [] From a4b7a1f3162d7de0b70f56f2e0a296c474653ad7 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Fri, 6 Sep 2019 20:18:30 -0700 Subject: [PATCH 008/214] warn5 --- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 6f6743acd7..47bc93f32f 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -143,7 +143,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] #if !NETCOREAPP - OtherOptions = [|"--preferreduilang:en-US"|] + OtherOptions = [|"--preferreduilang:en-US";"--warn:5"|] #else OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) From 3ac733684db6ba8e0e253816102d1fe6eb2b152e Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Sat, 7 Sep 2019 14:59:45 -0700 Subject: [PATCH 009/214] surface area --- tests/FSharp.Core.UnitTests/LibraryTestFx.fs | 6 +- .../SurfaceArea.coreclr.fs | 923 +----------------- .../SurfaceArea.net40.fs | 919 ----------------- 3 files changed, 7 insertions(+), 1841 deletions(-) diff --git a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs index 1a23e72e51..1182375d14 100644 --- a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs +++ b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs @@ -96,15 +96,16 @@ module SurfaceArea = types |> Array.collect getTypeMemberStrings asm,actual - + // verify public surface area matches expected let verify expected platform (fileName : string) = + printfn "Verify" let normalize (s:string) = Regex.Replace(s, "(\\r\\n|\\n|\\r)+", "\r\n").Trim() let asm, actualNotNormalized = getActual () let actual = actualNotNormalized |> Seq.map normalize |> Seq.filter (String.IsNullOrWhiteSpace >> not) |> set - + let expected = // Split the "expected" string into individual lines, then normalize it. (normalize expected).Split([|"\r\n"; "\n"; "\r"|], StringSplitOptions.RemoveEmptyEntries) @@ -128,6 +129,7 @@ module SurfaceArea = let logFile = let workDir = TestContext.CurrentContext.WorkDirectory sprintf "%s\\FSharp.Core.SurfaceArea.%s.txt" workDir platform + printfn "logFile: %s" logFile System.IO.File.WriteAllText(logFile, String.Join("\r\n", actual)) // The surface areas don't match; prepare an easily-readable output message. diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index 149cc14823..6294e178a9 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -9,14 +9,10 @@ type SurfaceAreaTest() = [] member this.VerifyArea() = let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -32,13 +28,9 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -48,24 +40,16 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -74,7 +58,6 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -83,7 +66,6 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) @@ -97,7 +79,6 @@ Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -111,7 +92,6 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) @@ -188,19 +168,11 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -227,7 +199,6 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -247,7 +218,6 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -267,23 +237,17 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -292,7 +256,6 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -351,14 +314,12 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -387,12 +348,10 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -406,10 +365,8 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -417,7 +374,6 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -426,7 +382,6 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -490,10 +445,8 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -522,7 +475,6 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -531,7 +483,6 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -548,62 +499,38 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.Type GetType() Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() -Microsoft.FSharp.Control.AsyncPrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncPrimitives: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Bind[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[TResult], Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn CallThenInvoke[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], TResult, Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Invoke[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Control.AsyncActivation`1[T]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) -Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() -Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() -Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() -Microsoft.FSharp.Control.AsyncReturn: System.String ToString() -Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -630,20 +557,16 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -655,61 +578,25 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -721,8 +608,6 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -732,15 +617,9 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -748,154 +627,52 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out -Microsoft.FSharp.Core.ByRefKinds: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -903,61 +680,27 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -977,65 +720,29 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -1046,99 +753,41 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() -Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name -Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -1147,68 +796,22 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -1219,8 +822,6 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -1247,8 +848,6 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -1265,16 +864,10 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1294,8 +887,6 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1312,8 +903,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1332,8 +921,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1352,17 +939,11 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1386,8 +967,6 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1406,8 +985,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1428,8 +1005,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1450,8 +1025,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1472,18 +1045,12 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1511,8 +1078,6 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1533,8 +1098,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1557,8 +1120,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1581,8 +1142,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1605,8 +1164,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1629,19 +1186,13 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1673,8 +1224,6 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1697,8 +1246,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1723,8 +1270,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1749,8 +1294,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1775,8 +1318,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1801,8 +1342,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1827,20 +1366,14 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1876,8 +1409,6 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1902,8 +1433,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1930,8 +1459,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1958,8 +1485,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1986,8 +1511,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2014,8 +1537,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2042,8 +1563,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2070,11 +1589,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -2082,9 +1598,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2134,27 +1647,15 @@ Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2174,7 +1675,6 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -2186,8 +1686,6 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -2196,12 +1694,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2219,24 +1713,14 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2263,7 +1747,6 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() @@ -2286,41 +1769,18 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -2345,19 +1805,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -2373,17 +1826,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -2399,7 +1847,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -2423,8 +1870,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -2441,14 +1886,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2456,108 +1893,35 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HResult(Int32) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -2566,7 +1930,6 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -2574,17 +1937,12 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -2608,8 +1966,6 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2647,16 +2003,11 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2674,7 +2025,6 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2712,7 +2062,6 @@ Microsoft.FSharp.Core.Operators: System.String NameOf[T](T) Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2783,54 +2132,32 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2843,8 +2170,6 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2854,24 +2179,14 @@ Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core. Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2885,77 +2200,21 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -2969,16 +2228,8 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -2987,60 +2238,16 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) @@ -3069,36 +2276,6 @@ Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.F Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() -Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -3119,9 +2296,6 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) -Microsoft.FSharp.Linq.NullableModule: System.String ToString() -Microsoft.FSharp.Linq.NullableModule: System.Type GetType() -Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -3140,7 +2314,6 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) -Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -3156,14 +2329,10 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) -Microsoft.FSharp.Linq.NullableOperators: System.String ToString() -Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) -Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) -Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -3196,8 +2365,6 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) -Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() -Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -3211,43 +2378,19 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -3255,10 +2398,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -3268,10 +2407,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -3283,10 +2418,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -3300,10 +2431,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -3319,10 +2446,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -3340,40 +2463,26 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -3397,14 +2506,8 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3463,7 +2566,6 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -3478,7 +2580,6 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -3489,12 +2590,9 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3531,13 +2629,9 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -3553,30 +2647,22 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -3597,11 +2683,9 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -3614,7 +2698,6 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() -" - SurfaceArea.verify expected "coreclr" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) \ No newline at end of file +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" + SurfaceArea.verify expected "coreclr" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) + () diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index 06be0fc3b3..3dba9bad96 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -9,14 +9,10 @@ type SurfaceAreaTest() = [] member this.VerifyArea() = let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -32,13 +28,9 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -48,24 +40,16 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -74,7 +58,6 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -83,7 +66,6 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) @@ -97,7 +79,6 @@ Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -111,7 +92,6 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) @@ -188,19 +168,11 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -227,7 +199,6 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -247,7 +218,6 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -267,23 +237,17 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -292,7 +256,6 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -351,14 +314,12 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -387,12 +348,10 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -406,10 +365,8 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -417,7 +374,6 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -426,7 +382,6 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -490,10 +445,8 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -522,7 +475,6 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -531,7 +483,6 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -548,19 +499,15 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() @@ -570,36 +517,20 @@ Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn I Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) -Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() -Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() -Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() -Microsoft.FSharp.Control.AsyncReturn: System.String ToString() -Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -626,20 +557,16 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -651,61 +578,25 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -717,8 +608,6 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -728,15 +617,9 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -744,166 +627,52 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out -Microsoft.FSharp.Core.ByRefKinds: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -911,61 +680,27 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -985,65 +720,29 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -1054,99 +753,41 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() -Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name -Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -1155,68 +796,22 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -1227,8 +822,6 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -1255,8 +848,6 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -1273,16 +864,10 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1302,8 +887,6 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1320,8 +903,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1340,8 +921,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1360,17 +939,11 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1394,8 +967,6 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1414,8 +985,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1436,8 +1005,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1458,8 +1025,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1480,18 +1045,12 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1519,8 +1078,6 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1541,8 +1098,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1565,8 +1120,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1589,8 +1142,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1613,8 +1164,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1637,19 +1186,13 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1681,8 +1224,6 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1705,8 +1246,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1731,8 +1270,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1757,8 +1294,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1783,8 +1318,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1809,8 +1342,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1835,20 +1366,14 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1884,8 +1409,6 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1910,8 +1433,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1938,8 +1459,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1966,8 +1485,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1994,8 +1511,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2022,8 +1537,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2050,8 +1563,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2078,11 +1589,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -2090,9 +1598,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2132,43 +1637,25 @@ Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Cor Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2188,7 +1675,6 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -2200,8 +1686,6 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -2210,12 +1694,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2233,8 +1713,6 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue @@ -2243,8 +1721,6 @@ Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2271,7 +1747,6 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() @@ -2294,41 +1769,18 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -2353,19 +1805,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -2381,17 +1826,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -2407,7 +1847,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -2431,8 +1870,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -2449,14 +1886,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2464,104 +1893,35 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -2570,7 +1930,6 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -2578,17 +1937,12 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -2612,8 +1966,6 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2651,16 +2003,11 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2678,7 +2025,6 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2716,7 +2062,6 @@ Microsoft.FSharp.Core.Operators: System.String NameOf[T](T) Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2787,54 +2132,32 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2847,8 +2170,6 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2858,24 +2179,14 @@ Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core. Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2889,77 +2200,21 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -2973,16 +2228,8 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -2991,60 +2238,16 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) @@ -3073,36 +2276,6 @@ Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.F Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() -Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -3123,9 +2296,6 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) -Microsoft.FSharp.Linq.NullableModule: System.String ToString() -Microsoft.FSharp.Linq.NullableModule: System.Type GetType() -Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -3144,7 +2314,6 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) -Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -3160,14 +2329,10 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) -Microsoft.FSharp.Linq.NullableOperators: System.String ToString() -Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) -Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) -Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -3200,8 +2365,6 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) -Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() -Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -3215,43 +2378,19 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -3259,10 +2398,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -3272,10 +2407,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -3287,10 +2418,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -3304,10 +2431,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -3323,10 +2446,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -3344,21 +2463,13 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) @@ -3366,16 +2477,12 @@ Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](Int Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -3399,14 +2506,8 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3465,7 +2566,6 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -3480,7 +2580,6 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -3491,12 +2590,9 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3533,13 +2629,9 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -3555,30 +2647,22 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -3599,11 +2683,9 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -3616,7 +2698,6 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" #if CROSS_PLATFORM_COMPILER () From 0cf4a9a1bbd68d0b0fe4191b039660b8d7bc18ef Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Sat, 7 Sep 2019 15:00:01 -0700 Subject: [PATCH 010/214] xlf --- src/fsharp/xlf/FSComp.txt.es.xlf | 2 +- .../xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf | 3 ++- .../xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf | 3 ++- 14 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 3c43675bdf..b8e8064a8d 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -159,7 +159,7 @@ All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devolvió un valor de tipo "{0}", pero esta rama devolvió un valor de tipo "\{1 \}". + All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf index b071e0c5f7..5340031907 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 4184f3edc5..2ca4bd450e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf index 4b1a5e0d90..394481ad69 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf index 99d3469919..821545638e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf index 8902030751..dd58cb9a11 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf index de4d65e71f..c0221174d9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf index e7191ac3c4..6f540b5425 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf index 6936b8e97f..f912b6b4c7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf index fefd197867..5a2b75dce0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf index 355d363084..2b5303d91d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf index 86ac32f4b3..73a72b806a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf index 0537632d5f..474f99a3dc 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf index 17c64ffefb..16b7339b2a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" From d520c2972657b63518917a95b521704bee396142 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 9 Sep 2019 09:09:27 -0700 Subject: [PATCH 011/214] Fix merge issue (#7518) --- tests/FSharp.Core.UnitTests/LibraryTestFx.fs | 33 +- .../SurfaceArea.coreclr.fs | 961 +----------------- .../SurfaceArea.net40.fs | 957 ----------------- 3 files changed, 25 insertions(+), 1926 deletions(-) diff --git a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs index 5bf33055a6..9e014b2a01 100644 --- a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs +++ b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs @@ -64,25 +64,40 @@ module SurfaceArea = // gets string form of public surface area for the currently-loaded FSharp.Core let private getActual () = + // get current FSharp.Core - let asm = - typeof.Assembly + let asm = typeof.Assembly + let fsCoreFullName = asm.FullName // public types only - let types = - asm.GetExportedTypes() + let types = asm.ExportedTypes |> Seq.filter (fun ty -> let ti = ty.GetTypeInfo() in ti.IsPublic || ti.IsNestedPublic) |> Array.ofSeq + let typenames = new System.Collections.Generic.List() // extract canonical string form for every public member of every type let getTypeMemberStrings (t : Type) = // for System.Runtime-based profiles, need to do lots of manual work - t.GetMembers() - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) - + let getMembers (t : Type) = + let ti = t.GetTypeInfo() + let cast (info: #MemberInfo) = (t, info :> MemberInfo) + let isDeclaredInFSharpCore (m:MemberInfo) = m.DeclaringType.Assembly.FullName = fsCoreFullName + seq { + yield! t.GetRuntimeEvents() |> Seq.filter (fun m -> m.AddMethod.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! t.GetRuntimeProperties() |> Seq.filter (fun m -> m.GetMethod.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! t.GetRuntimeMethods() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! t.GetRuntimeFields() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! ti.DeclaredConstructors |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast + yield! ti.DeclaredNestedTypes |> Seq.filter (fun ty -> ty.IsNestedPublic) |> Seq.map cast + } |> Array.ofSeq + + + getMembers t + |> Array.map (fun (ty, m) -> sprintf "%s: %s" (ty.ToString()) (m.ToString())) + let actual = types |> Array.collect getTypeMemberStrings - asm,actual - + asm, actual + // verify public surface area matches expected let verify expected platform (fileName : string) = let normalize (s:string) = diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index e9af0746a8..48ec51f65d 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -9,14 +9,10 @@ type SurfaceAreaTest() = [] member this.VerifyArea() = let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -32,13 +28,9 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -48,24 +40,16 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -74,7 +58,6 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -83,7 +66,6 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) @@ -97,7 +79,6 @@ Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -111,7 +92,6 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) @@ -188,19 +168,11 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -227,7 +199,6 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -247,7 +218,6 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -267,23 +237,17 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -292,7 +256,6 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -351,14 +314,12 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -387,12 +348,10 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -406,10 +365,8 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -417,7 +374,6 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -426,7 +382,6 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -490,10 +445,8 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -522,7 +475,6 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -531,7 +483,6 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -548,62 +499,38 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.Type GetType() Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() -Microsoft.FSharp.Control.AsyncPrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncPrimitives: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Bind[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[TResult], Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn CallThenInvoke[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], TResult, Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Invoke[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Control.AsyncActivation`1[T]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) -Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() -Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() -Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() -Microsoft.FSharp.Control.AsyncReturn: System.String ToString() -Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -630,20 +557,16 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -655,61 +578,25 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -721,8 +608,6 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -732,15 +617,9 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -748,166 +627,52 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out -Microsoft.FSharp.Core.ByRefKinds: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -915,61 +680,27 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -989,65 +720,29 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -1058,99 +753,41 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() -Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name -Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -1159,68 +796,22 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -1231,8 +822,6 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -1259,8 +848,6 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -1277,16 +864,10 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1306,8 +887,6 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1324,8 +903,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1344,8 +921,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1364,17 +939,11 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1398,8 +967,6 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1418,8 +985,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1440,8 +1005,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1462,8 +1025,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1484,18 +1045,12 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1523,8 +1078,6 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1545,8 +1098,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1569,8 +1120,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1593,8 +1142,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1617,8 +1164,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1641,19 +1186,13 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1685,8 +1224,6 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1709,8 +1246,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1735,8 +1270,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1761,8 +1294,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1787,8 +1318,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1813,8 +1342,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1839,20 +1366,14 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1888,8 +1409,6 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1914,8 +1433,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1942,8 +1459,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1970,8 +1485,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1998,8 +1511,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2026,8 +1537,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2054,8 +1563,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2082,11 +1589,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -2094,9 +1598,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2136,43 +1637,25 @@ Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Cor Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2192,7 +1675,6 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -2204,8 +1686,6 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -2214,12 +1694,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2237,24 +1713,14 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2281,13 +1747,10 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Value() -Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit] FromAction(System.Action) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T] FromFunc[T](System.Func`1[T]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] FromAction[T](System.Action`1[T]) @@ -2306,41 +1769,18 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -2365,19 +1805,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -2393,17 +1826,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -2419,7 +1847,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -2443,8 +1870,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -2461,14 +1886,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2476,108 +1893,35 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HResult(Int32) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -2586,7 +1930,6 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -2594,17 +1937,12 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -2628,8 +1966,6 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2667,16 +2003,11 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2694,7 +2025,6 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2734,11 +2064,9 @@ Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TRe #endif @" Microsoft.FSharp.Core.Operators: System.String NameOf[T](T) -Microsoft.FSharp.Core.Operators: System.String ToString() Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2809,54 +2137,32 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2869,8 +2175,6 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2879,33 +2183,15 @@ Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.C Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2919,77 +2205,21 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -3003,16 +2233,8 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -3021,69 +2243,23 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 GetHashCode() Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) @@ -3096,8 +2272,6 @@ Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.String ToString() -Microsoft.FSharp.Core.ValueOption: System.Type GetType() Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) @@ -3106,45 +2280,7 @@ Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Co Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() -Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -3165,9 +2301,6 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) -Microsoft.FSharp.Linq.NullableModule: System.String ToString() -Microsoft.FSharp.Linq.NullableModule: System.Type GetType() -Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -3186,7 +2319,6 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) -Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -3202,14 +2334,10 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) -Microsoft.FSharp.Linq.NullableOperators: System.String ToString() -Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) -Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) -Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -3242,8 +2370,6 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) -Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() -Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -3257,43 +2383,19 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -3301,10 +2403,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -3314,10 +2412,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -3329,10 +2423,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -3346,10 +2436,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -3365,10 +2451,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -3386,40 +2468,26 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -3443,14 +2511,8 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3509,7 +2571,6 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -3524,7 +2585,6 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -3535,12 +2595,9 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3577,13 +2634,9 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -3599,30 +2652,22 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -3643,11 +2688,9 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -3660,7 +2703,5 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() -" +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" SurfaceArea.verify expected "coreclr" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) \ No newline at end of file diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index dd4274a51d..3771fd3392 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -9,14 +9,10 @@ type SurfaceAreaTest() = [] member this.VerifyArea() = let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -32,13 +28,9 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -48,24 +40,16 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -74,7 +58,6 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -83,7 +66,6 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) @@ -97,7 +79,6 @@ Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -111,7 +92,6 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) @@ -188,19 +168,11 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -227,7 +199,6 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -247,7 +218,6 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -267,23 +237,17 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -292,7 +256,6 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -351,14 +314,12 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -387,12 +348,10 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -406,10 +365,8 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -417,7 +374,6 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -426,7 +382,6 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -490,10 +445,8 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -522,7 +475,6 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -531,7 +483,6 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -548,62 +499,38 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.Type GetType() Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() -Microsoft.FSharp.Control.AsyncPrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncPrimitives: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Bind[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[TResult], Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn CallThenInvoke[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], TResult, Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Invoke[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Control.AsyncActivation`1[T]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) -Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() -Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() -Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() -Microsoft.FSharp.Control.AsyncReturn: System.String ToString() -Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -630,20 +557,16 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -655,61 +578,25 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -721,8 +608,6 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -732,15 +617,9 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -748,166 +627,52 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out -Microsoft.FSharp.Core.ByRefKinds: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -915,61 +680,27 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -989,65 +720,29 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -1058,99 +753,41 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() -Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name -Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -1159,68 +796,22 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -1231,8 +822,6 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -1259,8 +848,6 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -1277,16 +864,10 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1306,8 +887,6 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1324,8 +903,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1344,8 +921,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1364,17 +939,11 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1398,8 +967,6 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1418,8 +985,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1440,8 +1005,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1462,8 +1025,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1484,18 +1045,12 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1523,8 +1078,6 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1545,8 +1098,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1569,8 +1120,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1593,8 +1142,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1617,8 +1164,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1641,19 +1186,13 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1685,8 +1224,6 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1709,8 +1246,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1735,8 +1270,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1761,8 +1294,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1787,8 +1318,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1813,8 +1342,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1839,20 +1366,14 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1888,8 +1409,6 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1914,8 +1433,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1942,8 +1459,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1970,8 +1485,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1998,8 +1511,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2026,8 +1537,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2054,8 +1563,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2082,11 +1589,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -2094,9 +1598,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2136,43 +1637,25 @@ Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Cor Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2192,7 +1675,6 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -2204,8 +1686,6 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -2214,12 +1694,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2237,24 +1713,14 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2281,13 +1747,10 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Value() -Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit] FromAction(System.Action) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T] FromFunc[T](System.Func`1[T]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] FromAction[T](System.Action`1[T]) @@ -2306,41 +1769,18 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -2365,19 +1805,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -2393,17 +1826,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -2419,7 +1847,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -2443,8 +1870,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -2461,14 +1886,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2476,107 +1893,35 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -2585,7 +1930,6 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -2593,17 +1937,12 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -2627,8 +1966,6 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2666,16 +2003,11 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2693,7 +2025,6 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2733,11 +2064,9 @@ Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TRe #endif @" Microsoft.FSharp.Core.Operators: System.String NameOf[T](T) -Microsoft.FSharp.Core.Operators: System.String ToString() Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2808,54 +2137,32 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2868,8 +2175,6 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2878,33 +2183,15 @@ Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.C Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2918,77 +2205,21 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -3002,16 +2233,8 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -3020,69 +2243,23 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 GetHashCode() Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) @@ -3095,8 +2272,6 @@ Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.String ToString() -Microsoft.FSharp.Core.ValueOption: System.Type GetType() Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) @@ -3105,45 +2280,7 @@ Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Co Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() -Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -3164,9 +2301,6 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) -Microsoft.FSharp.Linq.NullableModule: System.String ToString() -Microsoft.FSharp.Linq.NullableModule: System.Type GetType() -Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -3185,7 +2319,6 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) -Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -3201,14 +2334,10 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) -Microsoft.FSharp.Linq.NullableOperators: System.String ToString() -Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) -Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) -Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -3241,8 +2370,6 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) -Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() -Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -3256,43 +2383,19 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -3300,10 +2403,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -3313,10 +2412,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -3328,10 +2423,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -3345,10 +2436,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -3364,10 +2451,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -3385,40 +2468,26 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -3442,14 +2511,8 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3508,7 +2571,6 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -3523,7 +2585,6 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -3534,12 +2595,9 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3576,13 +2634,9 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -3598,30 +2652,22 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -3642,11 +2688,9 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -3659,7 +2703,6 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" #if CROSS_PLATFORM_COMPILER () From 140375108c93a6cd525dd9dfb45909d0e01bcdd8 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 12 Sep 2018 01:17:54 -0700 Subject: [PATCH 012/214] CompilerTools switch initial implementation --- src/fsharp/CompileOps.fs | 13 ++++++++++-- src/fsharp/CompileOps.fsi | 4 +++- src/fsharp/CompileOptions.fs | 13 +++++++++--- src/fsharp/CompileOptions.fsi | 4 ++-- src/fsharp/ExtensionTyping.fs | 21 ++++++++++++++----- src/fsharp/ExtensionTyping.fsi | 1 + src/fsharp/FSComp.txt | 1 + src/fsharp/FSharp.Build/Fsc.fs | 12 +++++++++++ .../FSharp.Build/Microsoft.FSharp.Targets | 2 ++ .../fsc/help/help40.437.1033.bsl | 5 +++-- .../fsi/exename/help40.437.1033.bsl | 10 ++++----- .../fsi/help/help40-nologo.437.1033.bsl | 10 ++++----- .../fsi/help/help40.437.1033.bsl | 10 ++++----- 13 files changed, 76 insertions(+), 30 deletions(-) mode change 100755 => 100644 src/fsharp/ExtensionTyping.fs diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 0548fd1269..a873b8f2f1 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2029,6 +2029,7 @@ type TcConfigBuilder = mutable light: bool option mutable conditionalCompilationDefines: string list mutable loadedSources: (range * string) list + mutable compilerToolPaths: string list mutable referencedDLLs: AssemblyReference list mutable projectReferences: IProjectReference list mutable knownUnresolvedReferences: UnresolvedAssemblyReference list @@ -2193,6 +2194,7 @@ type TcConfigBuilder = resolutionEnvironment = ResolutionEnvironment.EditingOrCompilation false framework = true implicitlyResolveAssemblies = true + compilerToolPaths = [] referencedDLLs = [] projectReferences = [] knownUnresolvedReferences = [] @@ -2424,6 +2426,13 @@ type TcConfigBuilder = member tcConfigB.AddEmbeddedResource filename = tcConfigB.embedResources <- tcConfigB.embedResources ++ filename + member tcConfigB.AddCompilerToolsByPath (m:range, path) = + if FileSystem.IsInvalidPathShim(path) then + warning(Error(FSComp.SR.buildInvalidAssemblyName(path), m)) + elif not (tcConfigB.compilerToolPaths |> List.exists (fun text -> path = text)) then // NOTE: We keep same paths if range is different. + let compilerToolPath = tcConfigB.compilerToolPaths |> List.tryPick (fun text -> if text = path then Some text else None) + tcConfigB.compilerToolPaths <- tcConfigB.compilerToolPaths ++ (Option.defaultValue "" compilerToolPath) //AssemblyReference(m, path, projectReference) + member tcConfigB.AddReferencedAssemblyByPath (m, path) = if FileSystem.IsInvalidPathShim path then warning(Error(FSComp.SR.buildInvalidAssemblyName(path), m)) @@ -2682,6 +2691,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.light = data.light member x.conditionalCompilationDefines = data.conditionalCompilationDefines member x.loadedSources = data.loadedSources + member x.compilerToolPaths = data.compilerToolPaths member x.referencedDLLs = data.referencedDLLs member x.knownUnresolvedReferences = data.knownUnresolvedReferences member x.clrRoot = clrRootValue @@ -4261,7 +4271,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let providers = [ for designTimeAssemblyName in designTimeAssemblyNames do yield! ExtensionTyping.GetTypeProvidersOfAssembly(fileNameOfRuntimeAssembly, ilScopeRefOfRuntimeAssembly, designTimeAssemblyName, typeProviderEnvironment, - tcConfig.isInvalidationSupported, tcConfig.isInteractive, systemRuntimeContainsType, primaryAssemblyVersion, m) ] + tcConfig.isInvalidationSupported, tcConfig.isInteractive, systemRuntimeContainsType, primaryAssemblyVersion, tcConfig.compilerToolPaths, m) ] // Note, type providers are disposable objects. The TcImports owns the provider objects - when/if it is disposed, the providers are disposed. // We ignore all exceptions from provider disposal. @@ -4545,7 +4555,6 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse member tcImports.RegisterAndImportReferencedAssemblies (ctok, nms: AssemblyResolution list) = cancellable { CheckDisposed() - let! results = nms |> Cancellable.each (fun nm -> cancellable { diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 0b5f9cb083..cadaa56d43 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -272,7 +272,7 @@ type TcConfigBuilder = mutable conditionalCompilationDefines: string list /// Sources added into the build with #load mutable loadedSources: (range * string) list - + mutable compilerToolPaths: string list mutable referencedDLLs: AssemblyReference list mutable projectReferences: IProjectReference list mutable knownUnresolvedReferences: UnresolvedAssemblyReference list @@ -408,6 +408,7 @@ type TcConfigBuilder = member TurnWarningOff: range * string -> unit member TurnWarningOn: range * string -> unit member AddIncludePath: range * string * string -> unit + member AddCompilerToolsByPath: range * string -> unit member AddReferencedAssemblyByPath: range * string -> unit member RemoveReferencedAssemblyByPath: range * string -> unit member AddEmbeddedSourceFile: string -> unit @@ -441,6 +442,7 @@ type TcConfig = member conditionalCompilationDefines: string list member subsystemVersion: int * int member useHighEntropyVA: bool + member compilerToolPaths: string list member referencedDLLs: AssemblyReference list member reduceMemoryUsage: ReduceMemoryFlag member inputCodePage: int option diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index 67e7b8568d..8b81abee0b 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -559,11 +559,18 @@ let PrintOptionInfo (tcConfigB:TcConfigBuilder) = // OptionBlock: Input files //------------------------- -let inputFileFlagsBoth (tcConfigB: TcConfigBuilder) = +let inputFileFlagsBoth (tcConfigB : TcConfigBuilder) = [ [ CompilerOption("reference", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some (FSComp.SR.optsReference())) - ] + CompilerOption("compilertool", tagFile, OptionString (fun s -> tcConfigB.AddCompilerToolsByPath (rangeStartup, s)), None, Some (FSComp.SR.optsCompilerTool())) + +let referenceFlagAbbrev (tcConfigB : TcConfigBuilder) = + CompilerOption("r", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some(FSComp.SR.optsShortFormOf("--reference"))) + +let compilerToolFlagAbbrev (tcConfigB : TcConfigBuilder) = + CompilerOption("t", tagFile, OptionString (fun s -> tcConfigB.AddCompilerToolsByPath (rangeStartup, s)), None, Some(FSComp.SR.optsShortFormOf("--compilertool"))) -let inputFileFlagsFsc tcConfigB = inputFileFlagsBoth tcConfigB +let inputFileFlagsFsi tcConfigB = inputFileFlagsBoth tcConfigB +let inputFileFlagsFsc tcConfigB = inputFileFlagsBoth tcConfigB let inputFileFlagsFsiBase (_tcConfigB: TcConfigBuilder) = #if NETSTANDARD diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi index e6e010bff2..5c3e4047b1 100644 --- a/src/fsharp/CompileOptions.fsi +++ b/src/fsharp/CompileOptions.fsi @@ -12,7 +12,7 @@ open FSharp.Compiler.TcGlobals //---------------------------------------------------------------------------- // Compiler Option Parser -//-------------------------------------------------------------------------- +//---------------------------------------------------------------------------- // For command-line options that can be suffixed with +/- [] @@ -89,7 +89,7 @@ val NormalizeAssemblyRefs : CompilationThreadToken * TcImports -> (AbstractIL.IL // Miscellany val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit val mutable enableConsoleColoring : bool -val DoWithColor : System.ConsoleColor -> (unit -> 'a) -> 'a +val DoWithColor : ConsoleColor -> (unit -> 'a) -> 'a val DoWithErrorColor : bool -> (unit -> 'a) -> 'a val ReportTime : TcConfig -> string -> unit val GetAbbrevFlagSet : TcConfigBuilder -> bool -> Set diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs old mode 100755 new mode 100644 index c075e0dbe9..3d40b36bbe --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -62,7 +62,7 @@ module internal ExtensionTyping = /// Load a the design-time part of a type-provider into the host process, and look for types /// marked with the TypeProviderAttribute attribute. - let GetTypeProviderImplementationTypes (runTimeAssemblyFileName, designTimeAssemblyNameString, m: range) = + let GetTypeProviderImplementationTypes (runTimeAssemblyFileName, designTimeAssemblyNameString, m:range, compilerToolPaths:string list) = // Report an error, blaming the particular type provider component let raiseError (e: exn) = @@ -102,6 +102,17 @@ module internal ExtensionTyping = let designTimeAssemblyOpt = + // If we've found a design-time assembly, look for the public types with TypeProviderAttribute + + // =========================================================================================== + // CompilerTools can also TypeProvider design time tools + // TODO: Search xompilerToolPaths for designtime type provider + // =========================================================================================== + + ignore (compilerToolPaths) + + // =========================================================================================== + if designTimeAssemblyNameString.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) then loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeAssemblyNameString else @@ -123,7 +134,6 @@ module internal ExtensionTyping = with e -> raiseError e - // If we've find a design-time assembly, look for the public types with TypeProviderAttribute match designTimeAssemblyOpt with | Some loadedDesignTimeAssembly -> try @@ -194,7 +204,8 @@ module internal ExtensionTyping = isInteractive: bool, systemRuntimeContainsType : string -> bool, systemRuntimeAssemblyVersion : System.Version, - m: range) = + compilerToolPaths: string list, + m:range) = let providerSpecs = try @@ -214,7 +225,7 @@ module internal ExtensionTyping = | Some designTimeAssemblyName, Some path when String.Compare(designTimeAssemblyName.Name, Path.GetFileNameWithoutExtension path, StringComparison.OrdinalIgnoreCase) = 0 -> () | Some _, _ -> - for t in GetTypeProviderImplementationTypes (runTimeAssemblyFileName, designTimeAssemblyNameString, m) do + for t in GetTypeProviderImplementationTypes (runTimeAssemblyFileName, designTimeAssemblyNameString, m, compilerToolPaths) do let resolver = CreateTypeProvider (t, runTimeAssemblyFileName, resolutionEnvironment, isInvalidationSupported, isInteractive, systemRuntimeContainsType, systemRuntimeAssemblyVersion, m) match box resolver with | null -> () @@ -223,7 +234,7 @@ module internal ExtensionTyping = () ] with :? TypeProviderError as tpe -> - tpe.Iter(fun e -> errorR(NumberedError((e.Number, e.ContextualErrorMessage), m)) ) + tpe.Iter(fun e -> errorR(NumberedError((e.Number, e.ContextualErrorMessage), m)) ) [] let providers = Tainted<_>.CreateAll providerSpecs diff --git a/src/fsharp/ExtensionTyping.fsi b/src/fsharp/ExtensionTyping.fsi index 5c679fe69e..d6584d4188 100755 --- a/src/fsharp/ExtensionTyping.fsi +++ b/src/fsharp/ExtensionTyping.fsi @@ -54,6 +54,7 @@ module internal ExtensionTyping = * isInteractive: bool * systemRuntimeContainsType : (string -> bool) * systemRuntimeAssemblyVersion : System.Version + * compilerToolsPath : string list * range -> Tainted list /// Given an extension type resolver, supply a human-readable name suitable for error messages. diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index a5559cf424..820ff4d47e 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -846,6 +846,7 @@ optsNoOpt,"Only include optimization information essential for implementing inli optsNoInterface,"Don't add a resource to the generated assembly containing F#-specific metadata" optsSig,"Print the inferred interface of the assembly to a file" optsReference,"Reference an assembly (Short form: -r)" +optsCompilerTool,"Reference an assembly or diretory containing a design time tool (Short form: -t)" optsWin32res,"Specify a Win32 resource file (.res)" optsWin32manifest,"Specify a Win32 manifest file" optsNowin32manifest,"Do not include the default Win32 manifest" diff --git a/src/fsharp/FSharp.Build/Fsc.fs b/src/fsharp/FSharp.Build/Fsc.fs index 25bdfa38d3..a6e262089b 100644 --- a/src/fsharp/FSharp.Build/Fsc.fs +++ b/src/fsharp/FSharp.Build/Fsc.fs @@ -27,6 +27,7 @@ type public Fsc () as this = let mutable checksumAlgorithm: string = null let mutable codePage : string = null let mutable commandLineArgs : ITaskItem list = [] + let mutable compilerTools: ITaskItem [] = [||] let mutable debugSymbols = false let mutable debugType : string = null let mutable defineConstants : ITaskItem[] = [||] @@ -162,6 +163,12 @@ type public Fsc () as this = // VersionFile builder.AppendSwitchIfNotNull("--versionfile:", versionFile) + + // CompilerTools + if compilerTools <> null then + for item in compilerTools do + builder.AppendSwitchIfNotNull("--compilertool:", item.ItemSpec) + // References if references <> null then for item in references do @@ -276,6 +283,11 @@ type public Fsc () as this = with get() = codePage and set(s) = codePage <- s + // -r : Reference an F# or .NET assembly. + member fsc.CompilerTools + with get() = compilerTools + and set(a) = compilerTools <- a + // -g: Produce debug file. Disables optimizations if a -O flag is not given. member fsc.DebugSymbols with get() = debugSymbols diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets index 8421c8ea50..3c6cf662b9 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets @@ -210,6 +210,7 @@ this file. @(CompileBefore); @(Compile); @(CompileAfter); + @(CompilerToolsFscCompilerTools); @(_CoreCompileResourceInputs); @(ManifestNonResxWithNoCultureOnDisk); $(ApplicationIcon); @@ -278,6 +279,7 @@ this file. BaseAddress="$(BaseAddress)" ChecksumAlgorithm="$(PdbChecksumAlgorithm)" CodePage="$(CodePage)" + CompilerTools="$(FscCompilerTools)" DebugSymbols="$(DebugSymbols)" DebugType="$(DebugType)" DefineConstants="$(DefineConstants)" diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl index 5c4045831d..10c8c7f82c 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -40,8 +40,9 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - INPUT FILES - ---reference: Reference an assembly (Short form: - -r) +--reference: Reference an assembly (Short form: -r) +--compilertool: Reference an assembly or diretory containing a + design time tool (Short form: -t) - RESOURCES - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl index 8a9d6d418a..6ef6b0dce9 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl @@ -6,11 +6,11 @@ Usage: fsharpi [script.fsx []] --use: Use the given file on startup as initial input --load: #load the given file on startup ---reference: Reference an assembly (Short form: - -r) --- ... Treat remaining arguments as command - line arguments, accessed using - fsi.CommandLineArgs +--reference: Reference an assembly (Short form: -r) +--compilertool: Reference an assembly or diretory containing a + design time tool (Short form: -t) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl index 041e86b828..1634f470cb 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl @@ -6,11 +6,11 @@ Usage: fsi.exe [script.fsx []] --use: Use the given file on startup as initial input --load: #load the given file on startup ---reference: Reference an assembly (Short form: - -r) --- ... Treat remaining arguments as command - line arguments, accessed using - fsi.CommandLineArgs +--reference: Reference an assembly (Short form: -r) +--compilertool: Reference an assembly or diretory containing a + design time tool (Short form: -t) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl index 24fbfc4de4..eadbc4755f 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl @@ -8,11 +8,11 @@ Usage: fsi.exe [script.fsx []] --use: Use the given file on startup as initial input --load: #load the given file on startup ---reference: Reference an assembly (Short form: - -r) --- ... Treat remaining arguments as command - line arguments, accessed using - fsi.CommandLineArgs +--reference: Reference an assembly (Short form: -r) +--compilertool: Reference an assembly or diretory containing a + design time tool (Short form: -t) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - From c47c3674a946dc52afe763e15f5b90f7612130c1 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Tue, 23 Jul 2019 17:13:05 -0700 Subject: [PATCH 013/214] Dependency Manager --- .gitignore | 1 - FSharp.sln | 51 ++- FSharpTests.Directory.Build.targets | 10 +- VisualFSharp.sln | 14 + eng/Versions.props | 4 + .../FSharp.Compiler.Service.fsproj | 11 + fcs/samples/FscExe/FscMain.fs | 4 - scripts/dotnet-install.ps1 | 2 +- src/fsharp/CompileOps.fs | 255 +++++++---- src/fsharp/CompileOps.fsi | 14 +- src/fsharp/CompileOptions.fs | 19 +- src/fsharp/CompileOptions.fsi | 1 + src/fsharp/DependencyManager.Integration.fs | 183 ++++++++ src/fsharp/DependencyManager.Integration.fsi | 24 ++ src/fsharp/ExtensionTyping.fs | 104 +---- src/fsharp/FSComp.txt | 3 + src/fsharp/FSharp.Build/FSharp.Build.fsproj | 10 +- .../Microsoft.FSharp.NetSdk.props | 6 + .../Microsoft.FSharp.NetSdk.targets | 57 ++- .../FSharp.Build/Microsoft.FSharp.Targets | 6 +- .../FSharp.Compiler.Private.fsproj | 20 +- .../FSharp.Compiler.Private.netcore.nuspec | 1 + .../Microsoft.FSharp.Compiler.nuspec | 13 +- .../FSharp.DependencyManager/.gitignore | 1 + .../FSDependencyManager.txt | 2 + .../FSharp.DependencyManager.Utilities.fs | 403 ++++++++++++++++++ .../FSharp.DependencyManager.fs | 152 +++++++ .../FSharp.DependencyManager.fsproj | 84 ++++ .../xlf/FSDependencyManager.txt.cs.xlf | 12 + .../xlf/FSDependencyManager.txt.de.xlf | 12 + .../xlf/FSDependencyManager.txt.en.xlf | 12 + .../xlf/FSDependencyManager.txt.es.xlf | 12 + .../xlf/FSDependencyManager.txt.fr.xlf | 12 + .../xlf/FSDependencyManager.txt.it.xlf | 12 + .../xlf/FSDependencyManager.txt.ja.xlf | 12 + .../xlf/FSDependencyManager.txt.ko.xlf | 12 + .../xlf/FSDependencyManager.txt.pl.xlf | 12 + .../xlf/FSDependencyManager.txt.pt-BR.xlf | 12 + .../xlf/FSDependencyManager.txt.ru.xlf | 12 + .../xlf/FSDependencyManager.txt.tr.xlf | 12 + .../xlf/FSDependencyManager.txt.zh-Hans.xlf | 12 + .../xlf/FSDependencyManager.txt.zh-Hant.xlf | 12 + src/fsharp/fsc/App.config | 12 +- src/fsharp/fsc/fsc.fsproj | 8 + src/fsharp/fsi/App.config | 2 +- src/fsharp/fsi/fsi.fs | 104 ++++- src/fsharp/fsi/fsi.fsproj | 15 + src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj | 1 + src/fsharp/service/service.fs | 2 +- src/fsharp/service/service.fsi | 2 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 20 + src/fsharp/xlf/FSComp.txt.de.xlf | 20 + src/fsharp/xlf/FSComp.txt.es.xlf | 20 + src/fsharp/xlf/FSComp.txt.fr.xlf | 20 + src/fsharp/xlf/FSComp.txt.it.xlf | 20 + src/fsharp/xlf/FSComp.txt.ja.xlf | 20 + src/fsharp/xlf/FSComp.txt.ko.xlf | 20 + src/fsharp/xlf/FSComp.txt.pl.xlf | 20 + src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 20 + src/fsharp/xlf/FSComp.txt.ru.xlf | 20 + src/fsharp/xlf/FSComp.txt.tr.xlf | 20 + src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 20 + src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 20 + src/utils/CompilerLocationUtils.fs | 138 +++++- .../Misc/UnknownDependencyManager/script1.fsx | 6 + .../Source/InteractiveSession/Misc/env.lst | 3 + vsintegration/Directory.Build.targets | 2 + .../Utils/LanguageServiceProfiling/Options.fs | 1 - .../VisualFSharpFull/VisualFSharpFull.csproj | 11 +- .../Tests.LanguageService.ErrorList.fs | 16 +- 70 files changed, 1927 insertions(+), 279 deletions(-) create mode 100644 src/fsharp/DependencyManager.Integration.fs create mode 100644 src/fsharp/DependencyManager.Integration.fsi create mode 100644 src/fsharp/FSharp.DependencyManager/.gitignore create mode 100644 src/fsharp/FSharp.DependencyManager/FSDependencyManager.txt create mode 100644 src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs create mode 100644 src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs create mode 100644 src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.cs.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.de.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.en.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.es.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.fr.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.it.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ja.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ko.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pl.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pt-BR.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ru.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.tr.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hans.xlf create mode 100644 src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hant.xlf create mode 100644 tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx diff --git a/.gitignore b/.gitignore index ec2166b3fc..f75c0e414f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ artifacts/ # Patches that may have been generated by scripts. # (These aren't generally useful to commit directly; if anything, they should be applied.) scripts/*.patch - /fcs/FSharp.Compiler.Service/illex.fs /fcs/FSharp.Compiler.Service/ilpars.fs /fcs/FSharp.Compiler.Service/ilpars.fsi diff --git a/FSharp.sln b/FSharp.sln index 9b650e008c..afa7434153 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -5,22 +5,32 @@ VisualStudioVersion = 16.0.28729.10 MinimumVisualStudioVersion = 10.0.40219.1 Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CFE3259A-2D30-4EB0-80D5-E8B5F3D01449}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Build", "src\fsharp\FSharp.Build\FSharp.Build.fsproj", "{702A7979-BCF9-4C41-853E-3ADFC9897890}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsc", "src\fsharp\fsc\fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fsc", "src\fsharp\Fsc\Fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Interactive.Settings", "src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsi", "src\fsharp\fsi\fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fsi", "src\fsharp\fsi\Fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FsiAnyCPU", "src\fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" + ProjectSection(ProjectDependencies) = postProject + {649FA588-F02E-457C-9FCF-87E46407481E} = {649FA588-F02E-457C-9FCF-87E46407481E} + EndProjectSection EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharpSuite.Tests", "tests\fsharp\FSharpSuite.Tests.fsproj", "{C163E892-5BF7-4B59-AA99-B0E8079C67C4}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.UnitTests", "tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj", "{A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Tests.FSharpSuite", "tests\fsharp\FSharp.Tests.FSharpSuite.fsproj", "{4E7B9500-6DEF-4C33-BF18-246F7E2C0BC6}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core.UnitTests", "tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj", "{88E2D422-6852-46E3-A740-83E391DC7973}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compiler", "Compiler", "{3881429D-A97A-49EB-B7AE-A82BA5FE9C77}" @@ -38,6 +48,7 @@ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer", "src\fsharp\FSharp.Compiler.LanguageServer\FSharp.Compiler.LanguageServer.fsproj", "{99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{C97819B0-B428-4B96-9CD7-497D2D1C738C}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{8B7BF62E-7D8C-4928-BE40-4E392A9EE851}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{6771860A-614D-4FDD-A655-4C70EBCC91B0}" EndProject @@ -65,6 +76,18 @@ Global {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.Build.0 = Release|Any CPU {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.ActiveCfg = Release|Any CPU {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.Build.0 = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|x86.ActiveCfg = Debug|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|x86.Build.0 = Debug|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|Any CPU.Build.0 = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|x86.ActiveCfg = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|x86.Build.0 = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|Any CPU.Build.0 = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|x86.ActiveCfg = Release|Any CPU + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|x86.Build.0 = Release|Any CPU {DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|Any CPU.Build.0 = Debug|Any CPU {DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -125,6 +148,18 @@ Global {D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|Any CPU.Build.0 = Release|Any CPU {D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|x86.ActiveCfg = Release|Any CPU {D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|x86.Build.0 = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|x86.Build.0 = Debug|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|Any CPU.Build.0 = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|x86.ActiveCfg = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|x86.Build.0 = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|Any CPU.Build.0 = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|x86.ActiveCfg = Release|Any CPU + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|x86.Build.0 = Release|Any CPU {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|Any CPU.Build.0 = Debug|Any CPU {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -233,6 +268,18 @@ Global {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|Any CPU.Build.0 = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.ActiveCfg = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.Build.0 = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|Any CPU.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|x86.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|x86.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -244,6 +291,7 @@ Global {C94C257C-3C0A-4858-B5D8-D746498D1F08} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {649FA588-F02E-457C-9FCF-87E46407481E} = {B8DDA694-7939-42E3-95E5-265C2217C142} {D0E98C0D-490B-4C61-9329-0862F6E87645} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B} = {B8DDA694-7939-42E3-95E5-265C2217C142} {C163E892-5BF7-4B59-AA99-B0E8079C67C4} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {88E2D422-6852-46E3-A740-83E391DC7973} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} @@ -253,6 +301,7 @@ Global {C97819B0-B428-4B96-9CD7-497D2D1C738C} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {6771860A-614D-4FDD-A655-4C70EBCC91B0} = {B8DDA694-7939-42E3-95E5-265C2217C142} {4FEDF286-0252-4EBC-9E75-879CCA3B85DC} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BD5177C7-1380-40E7-94D2-7768E1A8B1B8} diff --git a/FSharpTests.Directory.Build.targets b/FSharpTests.Directory.Build.targets index 8ae8c56255..3768b5c726 100644 --- a/FSharpTests.Directory.Build.targets +++ b/FSharpTests.Directory.Build.targets @@ -1,6 +1,6 @@ - + - - <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> - - + + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + + diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 2c0ef9ad73..01ab8ed78a 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -153,6 +153,7 @@ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{20B7BC36-CF51-4D75-9E13-66681C07977F}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{09F56540-AFA5-4694-B7A6-0DBF6D4618C2}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -896,6 +897,18 @@ Global {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|Any CPU.Build.0 = Release|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|x86.ActiveCfg = Release|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|x86.Build.0 = Release|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|x86.ActiveCfg = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|x86.Build.0 = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|Any CPU.Build.0 = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|x86.ActiveCfg = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|x86.Build.0 = Debug|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|Any CPU.Build.0 = Release|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|x86.ActiveCfg = Release|Any CPU + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -968,6 +981,7 @@ Global {79255A92-ED00-40BA-9D64-12FCC664A976} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48EDBBBE-C8EE-4E3C-8B19-97184A487B37} diff --git a/eng/Versions.props b/eng/Versions.props index b631912fec..f4bfd42cbd 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -68,6 +68,7 @@ 1.5.0 4.3.0 + 4.3.0 4.0.0 4.3.0 4.3.0 @@ -88,6 +89,7 @@ 4.3.0 4.3.0 4.3.0 + 4.6.0 4.3.0 4.3.0 4.3.0 @@ -107,6 +109,8 @@ $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) + 2.1.0 + 2.1.0 8.0.1 14.0.25420 diff --git a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index 04389899a2..8bd7cf8f50 100644 --- a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -1,4 +1,6 @@  + + @@ -517,6 +519,15 @@ Driver\DotNetFrameworkDependencies.fs + + + Driver\DependencyManager.Integration.fsi + + Driver/DependencyManager.Integration.fsi + + + Driver/DependencyManager.Integration.fs + Driver/CompileOps.fsi diff --git a/fcs/samples/FscExe/FscMain.fs b/fcs/samples/FscExe/FscMain.fs index 26f26be63d..7531ae9f3b 100644 --- a/fcs/samples/FscExe/FscMain.fs +++ b/fcs/samples/FscExe/FscMain.fs @@ -266,10 +266,6 @@ module Driver = if runningOnMono && hasArgument "resident" argv then let argv = stripArgument "resident" argv - //if not (hasArgument "nologo" argv) then - // printfn "%s" (FSComp.SR.buildProductName(FSharpEnvironment.FSharpTeamVersionNumber)) - // printfn "%s" (FSComp.SR.optsCopyright()) - let fscServerExe = typeof.Assembly.Location let exitCodeOpt = FSharpResidentCompiler.FSharpCompilationServer.TryCompileUsingServer (fscServerExe, argv) match exitCodeOpt with diff --git a/scripts/dotnet-install.ps1 b/scripts/dotnet-install.ps1 index 9da0947d95..3dc9652054 100644 --- a/scripts/dotnet-install.ps1 +++ b/scripts/dotnet-install.ps1 @@ -188,7 +188,7 @@ function GetHTTPResponse([Uri] $Uri) } # Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out # 10 minutes allows it to work over much slower connections. - $HttpClient.Timeout = New-TimeSpan -Minutes 20 + $HttpClient.Timeout = New-TimeSpan -Minutes 40 $Response = $HttpClient.GetAsync($Uri).Result if (($Response -eq $null) -or (-not ($Response.IsSuccessStatusCode))) { diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index a873b8f2f1..be0c451398 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -73,7 +73,6 @@ let FSharpScriptFileSuffixes = [".fsscript";".fsx"] let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ FSharpScriptFileSuffixes let FSharpLightSyntaxFileSuffixes: string list = [ ".fs";".fsscript";".fsx";".fsi" ] - //---------------------------------------------------------------------------- // ERROR REPORTING //-------------------------------------------------------------------------- @@ -2028,9 +2027,10 @@ type TcConfigBuilder = mutable implicitlyResolveAssemblies: bool mutable light: bool option mutable conditionalCompilationDefines: string list - mutable loadedSources: (range * string) list + mutable loadedSources: (range * string * string) list mutable compilerToolPaths: string list mutable referencedDLLs: AssemblyReference list + mutable packageManagerLines: Map mutable projectReferences: IProjectReference list mutable knownUnresolvedReferences: UnresolvedAssemblyReference list reduceMemoryUsage: ReduceMemoryFlag @@ -2042,6 +2042,7 @@ type TcConfigBuilder = mutable mlCompatibility: bool mutable checkOverflow: bool mutable showReferenceResolutions: bool + mutable outputDir : string option mutable outputFile: string option mutable platform: ILPlatform option mutable prefer32Bit: bool @@ -2196,6 +2197,7 @@ type TcConfigBuilder = implicitlyResolveAssemblies = true compilerToolPaths = [] referencedDLLs = [] + packageManagerLines = Map.empty projectReferences = [] knownUnresolvedReferences = [] loadedSources = [] @@ -2208,6 +2210,7 @@ type TcConfigBuilder = mlCompatibility = false checkOverflow = false showReferenceResolutions = false + outputDir = None outputFile = None platform = None prefer32Bit = false @@ -2407,18 +2410,19 @@ type TcConfigBuilder = if ok && not (List.contains absolutePath tcConfigB.includes) then tcConfigB.includes <- tcConfigB.includes ++ absolutePath - member tcConfigB.AddLoadedSource(m, path, pathLoadedFrom) = - if FileSystem.IsInvalidPathShim path then - warning(Error(FSComp.SR.buildInvalidFilename path, m)) + member tcConfigB.AddLoadedSource(m, originalPath, pathLoadedFrom) = + if FileSystem.IsInvalidPathShim originalPath then + warning(Error(FSComp.SR.buildInvalidFilename originalPath, m)) else let path = - match TryResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, path) with + match TryResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, originalPath) with | Some path -> path | None -> - // File doesn't exist in the paths. Assume it will be in the load-ed from directory. - ComputeMakePathAbsolute pathLoadedFrom path - if not (List.contains path (List.map snd tcConfigB.loadedSources)) then - tcConfigB.loadedSources <- tcConfigB.loadedSources ++ (m, path) + // File doesn't exist in the paths. Assume it will be in the load-ed from directory. + ComputeMakePathAbsolute pathLoadedFrom originalPath + if not (List.contains path (List.map (fun (_, _, path) -> path) tcConfigB.loadedSources)) then + tcConfigB.loadedSources <- tcConfigB.loadedSources ++ (m, originalPath, path) + member tcConfigB.AddEmbeddedSourceFile (file) = tcConfigB.embedSourceList <- tcConfigB.embedSourceList ++ file @@ -2426,12 +2430,11 @@ type TcConfigBuilder = member tcConfigB.AddEmbeddedResource filename = tcConfigB.embedResources <- tcConfigB.embedResources ++ filename - member tcConfigB.AddCompilerToolsByPath (m:range, path) = - if FileSystem.IsInvalidPathShim(path) then - warning(Error(FSComp.SR.buildInvalidAssemblyName(path), m)) - elif not (tcConfigB.compilerToolPaths |> List.exists (fun text -> path = text)) then // NOTE: We keep same paths if range is different. + member tcConfigB.AddCompilerToolsByPath (path) = + if not (tcConfigB.compilerToolPaths |> List.exists (fun text -> path = text)) then // NOTE: We keep same paths if range is different. let compilerToolPath = tcConfigB.compilerToolPaths |> List.tryPick (fun text -> if text = path then Some text else None) - tcConfigB.compilerToolPaths <- tcConfigB.compilerToolPaths ++ (Option.defaultValue "" compilerToolPath) //AssemblyReference(m, path, projectReference) + if compilerToolPath.IsNone then + tcConfigB.compilerToolPaths <- tcConfigB.compilerToolPaths ++ path member tcConfigB.AddReferencedAssemblyByPath (m, path) = if FileSystem.IsInvalidPathShim path then @@ -2440,6 +2443,13 @@ type TcConfigBuilder = let projectReference = tcConfigB.projectReferences |> List.tryPick (fun pr -> if pr.FileName = path then Some pr else None) tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs ++ AssemblyReference(m, path, projectReference) + member tcConfigB.AddDependencyManagerText (packageManager:DependencyManagerIntegration.IDependencyManagerProvider, m, path:string) = + let path = DependencyManagerIntegration.removeDependencyManagerKey packageManager.Key path + + match tcConfigB.packageManagerLines |> Map.tryFind packageManager.Key with + | Some lines -> tcConfigB.packageManagerLines <- Map.add packageManager.Key (lines ++ (false, path, m)) tcConfigB.packageManagerLines + | _ -> tcConfigB.packageManagerLines <- Map.add packageManager.Key [false, path, m] tcConfigB.packageManagerLines + member tcConfigB.RemoveReferencedAssemblyByPath (m, path) = tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs |> List.filter (fun ar -> not (Range.equals ar.Range m) || ar.Text <> path) @@ -2704,6 +2714,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.mlCompatibility = data.mlCompatibility member x.checkOverflow = data.checkOverflow member x.showReferenceResolutions = data.showReferenceResolutions + member x.outputDir = data.outputDir member x.outputFile = data.outputFile member x.platform = data.platform member x.prefer32Bit = data.prefer32Bit @@ -2744,6 +2755,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.embedAllSource = data.embedAllSource member x.embedSourceList = data.embedSourceList member x.sourceLink = data.sourceLink + member x.packageManagerLines = data.packageManagerLines member x.ignoreSymbolStoreSequencePoints = data.ignoreSymbolStoreSequencePoints member x.internConstantStrings = data.internConstantStrings member x.extraOptimizationIterations = data.extraOptimizationIterations @@ -2887,13 +2899,23 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member tcConfig.GetAvailableLoadedSources() = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - let resolveLoadedSource (m, path) = + let resolveLoadedSource (m, originalPath, path) = try - if not(FileSystem.SafeExists path) then - error(LoadedSourceNotFoundIgnoring(path, m)) - None - else Some(m, path) + if not(FileSystem.SafeExists(path)) then + let secondTrial = + tcConfig.includes + |> List.tryPick (fun root -> + let path = ComputeMakePathAbsolute root originalPath + if FileSystem.SafeExists(path) then Some path else None) + + match secondTrial with + | Some path -> Some(m,path) + | None -> + error(LoadedSourceNotFoundIgnoring(path,m)) + None + else Some(m,path) with e -> errorRecovery e m; None + tcConfig.loadedSources |> List.choose resolveLoadedSource |> List.distinct @@ -4268,11 +4290,18 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> systemRuntimeContainsTypeRef := (fun _ -> raise (System.ObjectDisposedException("The type provider has been disposed")))) fun arg -> systemRuntimeContainsTypeRef.Value arg - let providers = - [ for designTimeAssemblyName in designTimeAssemblyNames do - yield! ExtensionTyping.GetTypeProvidersOfAssembly(fileNameOfRuntimeAssembly, ilScopeRefOfRuntimeAssembly, designTimeAssemblyName, typeProviderEnvironment, - tcConfig.isInvalidationSupported, tcConfig.isInteractive, systemRuntimeContainsType, primaryAssemblyVersion, tcConfig.compilerToolPaths, m) ] - + let providers = [ + for designTimeAssemblyName in designTimeAssemblyNames do + yield! ExtensionTyping.GetTypeProvidersOfAssembly(fileNameOfRuntimeAssembly, + ilScopeRefOfRuntimeAssembly, + designTimeAssemblyName, + typeProviderEnvironment, + tcConfig.isInvalidationSupported, + tcConfig.isInteractive, + systemRuntimeContainsType, + primaryAssemblyVersion, + tcConfig.compilerToolPaths, + m) ] // Note, type providers are disposable objects. The TcImports owns the provider objects - when/if it is disposed, the providers are disposed. // We ignore all exceptions from provider disposal. for provider in providers do @@ -4812,14 +4841,13 @@ let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file) = let tcEnv = (tcEnv, asms) ||> List.fold (fun tcEnv asm -> AddCcuToTcEnv(g, amap, m, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes)) tcEnv, (dllinfos, asms) - - let ProcessMetaCommandsFromInput - (nowarnF: 'state -> range * string -> 'state, - dllRequireF: 'state -> range * string -> 'state, - loadSourceF: 'state -> range * string -> unit) - (tcConfig: TcConfigBuilder, inp, pathOfMetaCommandSource, state0) = - + (nowarnF: 'state -> range * string -> 'state, + dllRequireF: 'state -> range * string -> 'state, + packageRequireF: 'state -> DependencyManagerIntegration.IDependencyManagerProvider * range * string -> 'state, + loadSourceF: 'state -> range * string -> unit) + (tcConfig:TcConfigBuilder, inp, pathOfMetaCommandSource, state0) = + use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse let canHaveScriptMetaCommands = @@ -4842,15 +4870,22 @@ let ProcessMetaCommandsFromInput | _ -> errorR(Error(FSComp.SR.buildInvalidHashIDirective(), m)) state - | ParsedHashDirective("nowarn", numbers, m) -> - List.fold (fun state d -> nowarnF state (m, d)) state numbers - | ParsedHashDirective(("reference" | "r"), args, m) -> + | ParsedHashDirective("nowarn",numbers,m) -> + List.fold (fun state d -> nowarnF state (m,d)) state numbers + + | ParsedHashDirective(("reference" | "r"),args,m) -> if not canHaveScriptMetaCommands then errorR(HashReferenceNotAllowedInNonScript m) match args with | [path] -> matchedm<-m - dllRequireF state (m, path) + match DependencyManagerIntegration.tryFindDependencyManagerInPath tcConfig.compilerToolPaths tcConfig.outputDir m (path:string) with + | DependencyManagerIntegration.ReferenceType.RegisteredDependencyManager packageManager -> + packageRequireF state (packageManager,m,path) + | DependencyManagerIntegration.ReferenceType.Library path -> + dllRequireF state (m,path) + | DependencyManagerIntegration.ReferenceType.UnknownType -> + state // error already reported | _ -> errorR(Error(FSComp.SR.buildInvalidHashrDirective(), m)) state @@ -4927,19 +4962,21 @@ let ProcessMetaCommandsFromInput let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = // Clone let tcConfigB = tcConfig.CloneOfOriginalBuilder - let addNoWarn = fun () (m, s) -> tcConfigB.TurnWarningOff(m, s) - let addReferencedAssemblyByPath = fun () (_m, _s) -> () - let addLoadedSource = fun () (_m, _s) -> () - ProcessMetaCommandsFromInput (addNoWarn, addReferencedAssemblyByPath, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) + let addNoWarn = fun () (m,s) -> tcConfigB.TurnWarningOff(m, s) + let addReferencedAssemblyByPath = fun () (_m,_s) -> () + let addDependencyManagerText = fun () (_prefix,_m,_s) -> () + let addLoadedSource = fun () (_m,_s) -> () + ProcessMetaCommandsFromInput (addNoWarn, addReferencedAssemblyByPath, addDependencyManagerText, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) TcConfig.Create(tcConfigB, validate=false) let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = // Clone let tcConfigB = tcConfig.CloneOfOriginalBuilder let getWarningNumber = fun () _ -> () - let addReferencedAssemblyByPath = fun () (m, s) -> tcConfigB.AddReferencedAssemblyByPath(m, s) - let addLoadedSource = fun () (m, s) -> tcConfigB.AddLoadedSource(m, s, pathOfMetaCommandSource) - ProcessMetaCommandsFromInput (getWarningNumber, addReferencedAssemblyByPath, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) + let addReferencedAssemblyByPath = fun () (m,s) -> tcConfigB.AddReferencedAssemblyByPath(m,s) + let addDependencyManagerText = fun () (packageManager, m,s) -> tcConfigB.AddDependencyManagerText(packageManager,m,s) + let addLoadedSource = fun () (m,s) -> tcConfigB.AddLoadedSource(m,s,pathOfMetaCommandSource) + ProcessMetaCommandsFromInput (getWarningNumber, addReferencedAssemblyByPath, addDependencyManagerText, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) TcConfig.Create(tcConfigB, validate=false) //---------------------------------------------------------------------------- @@ -4951,7 +4988,6 @@ let GetAssemblyResolutionInformation(ctok, tcConfig: TcConfig) = let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, []) resolutions.GetAssemblyResolutions(), resolutions.GetUnresolvedReferences() - [] type LoadClosureInput = @@ -4971,7 +5007,7 @@ type LoadClosure = /// The list of all sources in the closure with inputs when available Inputs: LoadClosureInput list /// The #load, including those that didn't resolve - OriginalLoadReferences: (range * string) list + OriginalLoadReferences: (range * string * string) list /// The #nowarns NoWarns: (string * range list) list /// Diagnostics seen while processing resolutions @@ -4987,9 +5023,9 @@ type CodeContext = | CompilationAndEvaluation // in fsi.exe | Compilation // in fsc.exe | Editing // in VS - -module private ScriptPreprocessClosure = + +module ScriptPreprocessClosure = open Internal.Utilities.Text.Lexing /// Represents an input to the closure finding process @@ -5087,11 +5123,12 @@ module private ScriptPreprocessClosure = let tcConfigB = tcConfig.CloneOfOriginalBuilder let nowarns = ref [] - let getWarningNumber = fun () (m, s) -> nowarns := (s, m) :: !nowarns - let addReferencedAssemblyByPath = fun () (m, s) -> tcConfigB.AddReferencedAssemblyByPath(m, s) - let addLoadedSource = fun () (m, s) -> tcConfigB.AddLoadedSource(m, s, pathOfMetaCommandSource) + let getWarningNumber = fun () (m,s) -> nowarns := (s,m) :: !nowarns + let addReferencedAssemblyByPath = fun () (m,s) -> tcConfigB.AddReferencedAssemblyByPath(m,s) + let addDependencyManagerText = fun () (packageManagerPrefix,m,s) -> tcConfigB.AddDependencyManagerText(packageManagerPrefix,m,s) + let addLoadedSource = fun () (m,s) -> tcConfigB.AddLoadedSource(m,s,pathOfMetaCommandSource) try - ProcessMetaCommandsFromInput (getWarningNumber, addReferencedAssemblyByPath, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) + ProcessMetaCommandsFromInput (getWarningNumber, addReferencedAssemblyByPath, addDependencyManagerText, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) with ReportedError _ -> // Recover by using whatever did end up in the tcConfig () @@ -5103,40 +5140,89 @@ module private ScriptPreprocessClosure = let tcConfigB = tcConfig.CloneOfOriginalBuilder TcConfig.Create(tcConfigB, validate=false), nowarns - let FindClosureFiles - (closureSources, tcConfig: TcConfig, codeContext, - lexResourceManager: Lexhelp.LexResourceManager) = - - let tcConfig = ref tcConfig + let FindClosureFiles(mainFile, _m, closureSources, origTcConfig:TcConfig, codeContext, lexResourceManager: Lexhelp.LexResourceManager) = + let tcConfig = ref origTcConfig let observedSources = Observed() - let rec loop (ClosureSource(filename, m, sourceText, parseRequired)) = - [ if not (observedSources.HaveSeen(filename)) then + let loadScripts = HashSet<_>() + + // Resolve the packages + let rec resolveDependencyManagerSources scriptName = + if not (loadScripts.Contains scriptName) then + [ for kv in tcConfig.Value.packageManagerLines do + let packageManagerKey, packageManagerLines = kv.Key, kv.Value + match packageManagerLines with + | [] -> () + | (_, _, m)::_ -> + match origTcConfig.packageManagerLines |> Map.tryFind packageManagerKey with + | Some oldDependencyManagerLines when oldDependencyManagerLines = packageManagerLines -> () + | _ -> + match DependencyManagerIntegration.tryFindDependencyManagerByKey tcConfig.Value.compilerToolPaths tcConfig.Value.outputDir m packageManagerKey with + | None -> + errorR(DependencyManagerIntegration.createPackageManagerUnknownError tcConfig.Value.compilerToolPaths tcConfig.Value.outputDir packageManagerKey m) + | Some packageManager -> + let inline snd3 (_, b, _) = b + let packageManagerTextLines = packageManagerLines |> List.map snd3 + + match DependencyManagerIntegration.resolve packageManager tcConfig.Value.implicitIncludeDir mainFile scriptName m packageManagerTextLines with + | None -> () // error already reported + | Some (succeeded, generatedScripts, additionalIncludeFolders) -> //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + // This may incrementally update tcConfig too with new #r references + // New package text is ignored on this second phase + match succeeded with + | true -> + // Resolution produced no errors + if not (isNil additionalIncludeFolders) then + let tcConfigB = tcConfig.Value.CloneOfOriginalBuilder + for folder in additionalIncludeFolders do + tcConfigB.AddIncludePath(m, folder, "") + tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map(fun _ l -> l |> List.map(fun (_, p, m) -> true, p, m)) + tcConfig := TcConfig.Create(tcConfigB, validate=false) + for script in generatedScripts do + let scriptText = File.ReadAllText script + loadScripts.Add script |> ignore + let iSourceText = SourceText.ofString scriptText + yield! loop (ClosureSource(script, m, iSourceText, true)) + | false -> + // Resolution produced errors update packagerManagerLines entries to note these failure + // failed resolutions will no longer be considered + let tcConfigB = tcConfig.Value.CloneOfOriginalBuilder + tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map(fun _ l -> l |> List.filter(fun (tried, _, _) -> tried)) + tcConfig := TcConfig.Create(tcConfigB, validate=false)] + else [] + + and loop (ClosureSource(filename, m, sourceText, parseRequired)) = + [ if not (observedSources.HaveSeen(filename)) then observedSources.SetSeen(filename) //printfn "visiting %s" filename if IsScript filename || parseRequired then let parseResult, parseDiagnostics = - let errorLogger = CapturingErrorLogger("FindClosureParse") + let errorLogger = CapturingErrorLogger("FindClosureParse") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) let result = ParseScriptText (filename, sourceText, !tcConfig, codeContext, lexResourceManager, errorLogger) result, errorLogger.Diagnostics match parseResult with - | Some parsedScriptAst -> - let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") + | Some parsedScriptAst -> + let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let pathOfMetaCommandSource = Path.GetDirectoryName filename + let pathOfMetaCommandSource = Path.GetDirectoryName(filename) + let preSources = (!tcConfig).GetAvailableLoadedSources() let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (!tcConfig, parsedScriptAst, pathOfMetaCommandSource) tcConfig := tcConfigResult // We accumulate the tcConfig in order to collect assembly references - + + yield! resolveDependencyManagerSources filename + let postSources = (!tcConfig).GetAvailableLoadedSources() let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] - //for (_, subFile) in sources do - // printfn "visiting %s - has subsource of %s " filename subFile - + yield! resolveDependencyManagerSources filename +#if DEBUG + for (_,subFile) in sources do + printfn "visiting %s - has subsource of %s " filename subFile +#endif for (m, subFile) in sources do if IsScript subFile then for subSource in ClosureSourceOfFilename(subFile, m, tcConfigResult.inputCodePage, false) do @@ -5144,18 +5230,22 @@ module private ScriptPreprocessClosure = else yield ClosureFile(subFile, m, None, [], [], []) - //printfn "yielding source %s" filename +#if DEBUG + printfn "yielding source %s" filename +#endif yield ClosureFile(filename, m, Some parsedScriptAst, parseDiagnostics, errorLogger.Diagnostics, !noWarns) | None -> - //printfn "yielding source %s (failed parse)" filename + printfn "yielding source %s (failed parse)" filename yield ClosureFile(filename, m, None, parseDiagnostics, [], []) else // Don't traverse into .fs leafs. - //printfn "yielding non-script source %s" filename + printfn "yielding non-script source %s" filename yield ClosureFile(filename, m, None, [], [], []) ] - closureSources |> List.collect loop, !tcConfig + let sources = closureSources |> List.collect loop + + sources, !tcConfig /// Reduce the full directive closure into LoadClosure let GetLoadClosure(ctok, rootFilename, closureFiles, tcConfig: TcConfig, codeContext) = @@ -5216,11 +5306,11 @@ module private ScriptPreprocessClosure = let isThisFileName = (0 = String.Compare(rootFilename, m.FileName, StringComparison.OrdinalIgnoreCase)) isArgParameterWhileNotEditing || isThisFileName | None -> true - + // Filter out non-root errors and warnings let allRootDiagnostics = allRootDiagnostics |> List.filter (fst >> isRootRange) - let result: LoadClosure = + let result: LoadClosure = { SourceFiles = List.groupBy fst sourceFiles |> List.map (map2Of2 (List.map snd)) References = List.groupBy fst references |> List.map (map2Of2 (List.map snd)) UnresolvedReferences = unresolvedReferences @@ -5229,7 +5319,7 @@ module private ScriptPreprocessClosure = OriginalLoadReferences = tcConfig.loadedSources ResolutionDiagnostics = resolutionDiagnostics AllRootFileDiagnostics = allRootDiagnostics - LoadClosureRootFileDiagnostics = loadClosureRootDiagnostics } + LoadClosureRootFileDiagnostics = loadClosureRootDiagnostics } result @@ -5264,20 +5354,15 @@ module private ScriptPreprocessClosure = tryGetMetadataSnapshot, reduceMemoryUsage) let closureSources = [ClosureSource(filename, range0, sourceText, true)] - let closureFiles, tcConfig = FindClosureFiles(closureSources, tcConfig, codeContext, lexResourceManager) + let closureFiles, tcConfig = FindClosureFiles(filename, range0, closureSources, tcConfig, codeContext, lexResourceManager) GetLoadClosure(ctok, filename, closureFiles, tcConfig, codeContext) - + /// Given source filename, find the full load closure /// Used from fsi.fs and fsc.fs, for #load and command line - let GetFullClosureOfScriptFiles - (ctok, tcConfig: TcConfig, - files:(string*range) list, - codeContext, - lexResourceManager: Lexhelp.LexResourceManager) = - - let mainFile = fst (List.last files) - let closureSources = files |> List.collect (fun (filename, m) -> ClosureSourceOfFilename(filename, m, tcConfig.inputCodePage, true)) - let closureFiles, tcConfig = FindClosureFiles(closureSources, tcConfig, codeContext, lexResourceManager) + let GetFullClosureOfScriptFiles(ctok, tcConfig:TcConfig, files:(string*range) list,codeContext,lexResourceManager: Lexhelp.LexResourceManager) = + let mainFile, mainFileRange = List.last files + let closureSources = files |> List.collect (fun (filename, m) -> ClosureSourceOfFilename(filename, m,tcConfig.inputCodePage,true)) + let closureFiles,tcConfig = FindClosureFiles(mainFile, mainFileRange, closureSources, tcConfig, codeContext, lexResourceManager) GetLoadClosure(ctok, mainFile, closureFiles, tcConfig, codeContext) type LoadClosure with @@ -5304,8 +5389,6 @@ type LoadClosure with lexResourceManager: Lexhelp.LexResourceManager) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse ScriptPreprocessClosure.GetFullClosureOfScriptFiles (ctok, tcConfig, files, codeContext, lexResourceManager) - - //---------------------------------------------------------------------------- // Initial type checking environment diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index cadaa56d43..80e40f5219 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -271,9 +271,11 @@ type TcConfigBuilder = mutable light: bool option mutable conditionalCompilationDefines: string list /// Sources added into the build with #load - mutable loadedSources: (range * string) list + mutable loadedSources: (range * string * string) list mutable compilerToolPaths: string list mutable referencedDLLs: AssemblyReference list + mutable packageManagerLines: Map + mutable projectReferences: IProjectReference list mutable knownUnresolvedReferences: UnresolvedAssemblyReference list reduceMemoryUsage: ReduceMemoryFlag @@ -285,6 +287,7 @@ type TcConfigBuilder = mutable mlCompatibility:bool mutable checkOverflow:bool mutable showReferenceResolutions:bool + mutable outputDir: string option mutable outputFile: string option mutable platform: ILPlatform option mutable prefer32Bit: bool @@ -408,7 +411,7 @@ type TcConfigBuilder = member TurnWarningOff: range * string -> unit member TurnWarningOn: range * string -> unit member AddIncludePath: range * string * string -> unit - member AddCompilerToolsByPath: range * string -> unit + member AddCompilerToolsByPath: string -> unit member AddReferencedAssemblyByPath: range * string -> unit member RemoveReferencedAssemblyByPath: range * string -> unit member AddEmbeddedSourceFile: string -> unit @@ -451,6 +454,7 @@ type TcConfig = member mlCompatibility:bool member checkOverflow:bool member showReferenceResolutions:bool + member outputDir: string option member outputFile: string option member platform: ILPlatform option member prefer32Bit: bool @@ -687,8 +691,8 @@ val WriteOptimizationData: TcGlobals * filename: string * inMem: bool * CcuThunk val RequireDLL: CompilationThreadToken * TcImports * TcEnv * thisAssemblyName: string * referenceRange: range * file: string -> TcEnv * (ImportedBinary list * ImportedAssembly list) /// Processing # commands -val ProcessMetaCommandsFromInput: - (('T -> range * string -> 'T) * ('T -> range * string -> 'T) * ('T -> range * string -> unit)) +val ProcessMetaCommandsFromInput : + (('T -> range * string -> 'T) * ('T -> range * string -> 'T) * ('T -> DependencyManagerIntegration.IDependencyManagerProvider * range * string -> 'T) * ('T -> range * string -> unit)) -> TcConfigBuilder * Ast.ParsedInput * string * 'T -> 'T @@ -809,7 +813,7 @@ type LoadClosure = Inputs: LoadClosureInput list /// The original #load references, including those that didn't resolve - OriginalLoadReferences: (range * string) list + OriginalLoadReferences: (range * string * string) list /// The #nowarns NoWarns: (string * range list) list diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index 8b81abee0b..2d94bd78f9 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -6,6 +6,7 @@ module internal FSharp.Compiler.CompileOptions open Internal.Utilities open System +open System.IO open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL @@ -502,8 +503,10 @@ let SetDebugSwitch (tcConfigB: TcConfigBuilder) (dtype: string option) (s: Optio let SetEmbedAllSourceSwitch (tcConfigB: TcConfigBuilder) switch = if (switch = OptionSwitch.On) then tcConfigB.embedAllSource <- true else tcConfigB.embedAllSource <- false -let setOutFileName tcConfigB s = - tcConfigB.outputFile <- Some s +let setOutFileName tcConfigB path = + let outputDir = Path.GetDirectoryName(path) + tcConfigB.outputDir <- Some outputDir + tcConfigB.outputFile <- Some path let setSignatureFile tcConfigB s = tcConfigB.printSignature <- true @@ -560,23 +563,23 @@ let PrintOptionInfo (tcConfigB:TcConfigBuilder) = //------------------------- let inputFileFlagsBoth (tcConfigB : TcConfigBuilder) = [ - [ CompilerOption("reference", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some (FSComp.SR.optsReference())) - CompilerOption("compilertool", tagFile, OptionString (fun s -> tcConfigB.AddCompilerToolsByPath (rangeStartup, s)), None, Some (FSComp.SR.optsCompilerTool())) + CompilerOption("reference", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some (FSComp.SR.optsReference())) + CompilerOption("compilertool", tagFile, OptionString (fun s -> tcConfigB.AddCompilerToolsByPath s), None, Some (FSComp.SR.optsCompilerTool())) + ] let referenceFlagAbbrev (tcConfigB : TcConfigBuilder) = CompilerOption("r", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some(FSComp.SR.optsShortFormOf("--reference"))) let compilerToolFlagAbbrev (tcConfigB : TcConfigBuilder) = - CompilerOption("t", tagFile, OptionString (fun s -> tcConfigB.AddCompilerToolsByPath (rangeStartup, s)), None, Some(FSComp.SR.optsShortFormOf("--compilertool"))) + CompilerOption("t", tagFile, OptionString (fun s -> tcConfigB.AddCompilerToolsByPath s), None, Some(FSComp.SR.optsShortFormOf("--compilertool"))) -let inputFileFlagsFsi tcConfigB = inputFileFlagsBoth tcConfigB let inputFileFlagsFsc tcConfigB = inputFileFlagsBoth tcConfigB let inputFileFlagsFsiBase (_tcConfigB: TcConfigBuilder) = #if NETSTANDARD - [ CompilerOption("usesdkrefs", tagNone, OptionSwitch (SetUseSdkSwitch _tcConfigB), None, Some (FSComp.SR.useSdkRefs())) ] + [ CompilerOption("usesdkrefs", tagNone, OptionSwitch (SetUseSdkSwitch _tcConfigB), None, Some (FSComp.SR.useSdkRefs())) ] #else - List.empty + List.empty #endif let inputFileFlagsFsi (tcConfigB: TcConfigBuilder) = diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi index 5c3e4047b1..0b6a4c8489 100644 --- a/src/fsharp/CompileOptions.fsi +++ b/src/fsharp/CompileOptions.fsi @@ -2,6 +2,7 @@ module internal FSharp.Compiler.CompileOptions +open System open FSharp.Compiler open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompileOps diff --git a/src/fsharp/DependencyManager.Integration.fs b/src/fsharp/DependencyManager.Integration.fs new file mode 100644 index 0000000000..e899bc7bcf --- /dev/null +++ b/src/fsharp/DependencyManager.Integration.fs @@ -0,0 +1,183 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Helper members to integrate DependencyManagers into F# codebase +module internal FSharp.Compiler.DependencyManagerIntegration + +open System +open System.Reflection +open System.IO +open FSharp.Compiler.ErrorLogger +open Internal.Utilities.FSharpEnvironment + +// Contract strings +let dependencyManagerPattern = "*DependencyManager*.dll" +let dependencyManagerAttributeName= "DependencyManagerAttribute" +let resolveDependenciesMethodName = "ResolveDependencies" +let namePropertyName = "Name" +let keyPropertyName = "Key" + +module ReflectionHelper = + let assemblyHasAttribute (theAssembly: Assembly) attributeName = + try + CustomAttributeExtensions.GetCustomAttributes(theAssembly) + |> Seq.exists (fun a -> a.GetType().Name = attributeName) + with | _ -> false + + let getAttributeNamed (theType: Type) attributeName = + try + theType.GetTypeInfo().GetCustomAttributes false + |> Seq.tryFind (fun a -> a.GetType().Name = attributeName) + with | _ -> None + + let getInstanceProperty<'treturn> (theType: Type) propertyName = + try + let property = theType.GetProperty(propertyName, typeof<'treturn>) + if isNull property then + None + elif not (property.GetGetMethod().IsStatic) + && property.GetIndexParameters() = Array.empty + then + Some property + else + None + with | _ -> None + + let getInstanceMethod<'treturn> (theType: Type) (parameterTypes: Type array) methodName = + try + let theMethod = theType.GetMethod(methodName, parameterTypes) + if isNull theMethod then + None + else + Some theMethod + with | _ -> None + + let stripTieWrapper (e:Exception) = + match e with + | :? TargetInvocationException as e-> + e.InnerException + | _ -> e + +(* Shape of Dependency Manager contract, resolved using reflection *) +type internal IDependencyManagerProvider = + abstract Name : string + abstract Key: string + abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq -> bool * string list * string list + +[] +type ReferenceType = +| RegisteredDependencyManager of IDependencyManagerProvider +| Library of string +| UnknownType + +type ReflectionDependencyManagerProvider(theType: Type, nameProperty: PropertyInfo, keyProperty: PropertyInfo, resolveDeps: MethodInfo, outputDir: string option) = + let instance = Activator.CreateInstance(theType, [|outputDir :> obj|]) + let nameProperty = nameProperty.GetValue >> string + let keyProperty = keyProperty.GetValue >> string + + static member InstanceMaker (theType: System.Type, outputDir: string option) = + match ReflectionHelper.getAttributeNamed theType dependencyManagerAttributeName, + ReflectionHelper.getInstanceProperty theType namePropertyName, + ReflectionHelper.getInstanceProperty theType keyPropertyName, + ReflectionHelper.getInstanceMethod theType [|typeof;typeof;typeof;typeof;|] resolveDependenciesMethodName + with + | None, _, _, _ -> None + | _, None, _, _ -> None + | _, _, None, _ -> None + | _, _, _, None -> None + | Some _, Some nameProperty, Some keyProperty, Some resolveDependenciesMethod -> + Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, resolveDependenciesMethod, outputDir) :> IDependencyManagerProvider) + + interface IDependencyManagerProvider with + member __.Name = instance |> nameProperty + member __.Key = instance |> keyProperty + member __.ResolveDependencies(scriptDir, mainScriptName, scriptName, packageManagerTextLines) = + let arguments = [| box scriptDir; box mainScriptName; box scriptName; box packageManagerTextLines |] + resolveDeps.Invoke(instance, arguments) :?> _ + +// Resolution Path = Location of FSharp.Compiler.Private.dll +let assemblySearchPaths = lazy ( + [ + let assemblyLocation = typeof.GetTypeInfo().Assembly.Location + yield Path.GetDirectoryName assemblyLocation + yield AppDomain.CurrentDomain.BaseDirectory + ]) + +let enumerateDependencyManagerAssemblies compilerTools m = + getCompilerToolsDesignTimeAssemblyPaths compilerTools + |> Seq.append (assemblySearchPaths.Force()) + |> Seq.collect (fun path -> + try + if Directory.Exists(path) then Directory.EnumerateFiles(path, dependencyManagerPattern) + else Seq.empty + with _ -> Seq.empty) + |> Seq.choose (fun path -> + try + Some(AbstractIL.Internal.Library.Shim.FileSystem.AssemblyLoadFrom path) + with + | e -> + let e = ReflectionHelper.stripTieWrapper e + warning(Error(FSComp.SR.couldNotLoadDependencyManagerExtension(path,e.Message),m)) + None) + |> Seq.filter (fun a -> ReflectionHelper.assemblyHasAttribute a dependencyManagerAttributeName) + +let registeredDependencyManagers = ref None + +let RegisteredDependencyManagers (compilerTools: string list) (outputDir: string option) m = + match !registeredDependencyManagers with + | Some managers -> managers + | None -> + let defaultProviders =[] + + let loadedProviders = + enumerateDependencyManagerAssemblies compilerTools m + |> Seq.collect (fun a -> a.GetTypes()) + |> Seq.choose (fun t -> ReflectionDependencyManagerProvider.InstanceMaker(t, outputDir)) + |> Seq.map (fun maker -> maker ()) + + defaultProviders + |> Seq.append loadedProviders + |> Seq.map (fun pm -> pm.Key, pm) + |> Map.ofSeq + +let createPackageManagerUnknownError (compilerTools: string list) (outputDir:string option) packageManagerKey m = + let registeredKeys = String.Join(", ", RegisteredDependencyManagers compilerTools outputDir m |> Seq.map (fun kv -> kv.Value.Key)) + let searchPaths = assemblySearchPaths.Force() + Error(FSComp.SR.packageManagerUnknown(packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys),m) + +let tryFindDependencyManagerInPath (compilerTools:string list) (outputDir:string option) m (path:string) : ReferenceType = + try + if path.Contains ":" && not (System.IO.Path.IsPathRooted path) then + let managers = RegisteredDependencyManagers compilerTools outputDir m + match managers |> Seq.tryFind (fun kv -> path.StartsWith(kv.Value.Key + ":" )) with + | None -> + errorR(createPackageManagerUnknownError compilerTools outputDir (path.Split(':').[0]) m) + ReferenceType.UnknownType + | Some kv -> ReferenceType.RegisteredDependencyManager kv.Value + else + ReferenceType.Library path + with + | e -> + let e = ReflectionHelper.stripTieWrapper e + errorR(Error(FSComp.SR.packageManagerError(e.Message),m)) + ReferenceType.UnknownType + +let removeDependencyManagerKey (packageManagerKey:string) (path:string) = path.Substring(packageManagerKey.Length + 1).Trim() + +let tryFindDependencyManagerByKey (compilerTools: string list) (outputDir:string option) m (key:string) : IDependencyManagerProvider option = + try + RegisteredDependencyManagers compilerTools outputDir m |> Map.tryFind key + with + | e -> + let e = ReflectionHelper.stripTieWrapper e + errorR(Error(FSComp.SR.packageManagerError(e.Message), m)) + None + +let resolve (packageManager:IDependencyManagerProvider) implicitIncludeDir mainScriptName fileName m packageManagerTextLines = + try + let result, loadScripts, additionalIncludeFolders = + packageManager.ResolveDependencies(implicitIncludeDir, mainScriptName, fileName, packageManagerTextLines) + Some(result, loadScripts, additionalIncludeFolders) + with e -> + let e = ReflectionHelper.stripTieWrapper e + errorR(Error(FSComp.SR.packageManagerError(e.Message), m)) + None diff --git a/src/fsharp/DependencyManager.Integration.fsi b/src/fsharp/DependencyManager.Integration.fsi new file mode 100644 index 0000000000..e61d37064c --- /dev/null +++ b/src/fsharp/DependencyManager.Integration.fsi @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Helper members to integrate DependencyManagers into F# codebase +module internal FSharp.Compiler.DependencyManagerIntegration + +open FSharp.Compiler.Range +open System + +type IDependencyManagerProvider = + abstract Name : string + abstract Key: string + abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq -> bool * string list * string list + +[] +type ReferenceType = +| RegisteredDependencyManager of IDependencyManagerProvider +| Library of string +| UnknownType + +val tryFindDependencyManagerInPath: string list -> string option -> range -> string -> ReferenceType +val tryFindDependencyManagerByKey: string list -> string option -> range -> string -> IDependencyManagerProvider option +val removeDependencyManagerKey: string -> string -> string +val createPackageManagerUnknownError: string list -> string option -> string -> range -> exn +val resolve: IDependencyManagerProvider -> string -> string -> string -> range -> string seq -> (bool * string list * string list) option diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs index 3d40b36bbe..9ffe6aa817 100644 --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -17,11 +17,14 @@ module internal ExtensionTyping = open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Diagnostics // dprintfn open FSharp.Compiler.AbstractIL.Internal.Library // frontAndBack + open Internal.Utilities.FSharpEnvironment type TypeProviderDesignation = TypeProviderDesignation of string - exception ProvidedTypeResolution of range * System.Exception - exception ProvidedTypeResolutionNoRange of System.Exception + exception ProvidedTypeResolution of range * System.Exception + exception ProvidedTypeResolutionNoRange of System.Exception + + let toolingCompatiblePaths() = toolingCompatiblePaths () /// Represents some of the configuration parameters passed to type provider components type ResolutionEnvironment = @@ -29,36 +32,7 @@ module internal ExtensionTyping = outputFile : string option showResolutionMessages : bool referencedAssemblies : string[] - temporaryFolder : string } - - - // Specify the tooling-compatible fragments of a path such as: - // typeproviders/fsharp41/net461/MyProvider.DesignTime.dll - // tools/fsharp41/net461/MyProvider.DesignTime.dll - // See https://github.com/Microsoft/visualfsharp/issues/3736 - - // Represents the FF#-compiler <-> type provider protocol. - // When the API or protocol updates, add a new version moniker to the front of the list here. - let toolingCompatibleTypeProviderProtocolMonikers() = - [ "fsharp41" ] - - // Detect the host tooling context - let toolingCompatibleVersions() = - if typeof.Assembly.GetName().Name = "mscorlib" then - [ "net461"; "net452"; "net451"; "net45"; "netstandard2.0"] - elif typeof.Assembly.GetName().Name = "System.Private.CoreLib" then - [ "netcoreapp2.0"; "netstandard2.0"] - else - System.Diagnostics.Debug.Assert(false, "Couldn't determine runtime tooling context, assuming it supports at least .NET Standard 2.0") - [ "netstandard2.0"] - - - let toolingCompatiblePaths() = - [ for protocol in toolingCompatibleTypeProviderProtocolMonikers() do - for netRuntime in toolingCompatibleVersions() do - yield Path.Combine("typeproviders", protocol, netRuntime) - yield Path.Combine("tools", protocol, netRuntime) - ] + temporaryFolder : string } /// Load a the design-time part of a type-provider into the host process, and look for types /// marked with the TypeProviderAttribute attribute. @@ -68,71 +42,7 @@ module internal ExtensionTyping = let raiseError (e: exn) = raise (TypeProviderError(FSComp.SR.etProviderHasWrongDesignerAssembly(typeof.Name, designTimeAssemblyNameString, e.Message), runTimeAssemblyFileName, m)) - // Find and load the designer assembly for the type provider component. - // - // We look in the directories stepping up from the location of the runtime assembly. - - let loadFromLocation designTimeAssemblyPath = - try - Some (FileSystem.AssemblyLoadFrom designTimeAssemblyPath) - with e -> - raiseError e - - let rec searchParentDirChain dir designTimeAssemblyName = - seq { - for subdir in toolingCompatiblePaths() do - let designTimeAssemblyPath = Path.Combine (dir, subdir, designTimeAssemblyName) - if FileSystem.SafeExists designTimeAssemblyPath then - yield loadFromLocation designTimeAssemblyPath - match Path.GetDirectoryName dir with - | s when s = "" || s = null || Path.GetFileName dir = "packages" || s = dir -> () - | parentDir -> yield! searchParentDirChain parentDir designTimeAssemblyName - } - - let loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeAssemblyName = - let runTimeAssemblyPath = Path.GetDirectoryName runTimeAssemblyFileName - searchParentDirChain runTimeAssemblyPath designTimeAssemblyName - |> Seq.tryHead - |> function - | Some res -> res - | None -> - // The search failed, just load from the first location and report an error - let runTimeAssemblyPath = Path.GetDirectoryName runTimeAssemblyFileName - loadFromLocation (Path.Combine (runTimeAssemblyPath, designTimeAssemblyName)) - - let designTimeAssemblyOpt = - - // If we've found a design-time assembly, look for the public types with TypeProviderAttribute - - // =========================================================================================== - // CompilerTools can also TypeProvider design time tools - // TODO: Search xompilerToolPaths for designtime type provider - // =========================================================================================== - - ignore (compilerToolPaths) - - // =========================================================================================== - - if designTimeAssemblyNameString.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) then - loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeAssemblyNameString - else - // Cover the case where the ".dll" extension has been left off and no version etc. has been used in the assembly - // string specification. The Name=FullName comparison is particularly strange, and was there to support - // design-time DLLs specified using "x.DesignTIme, Version= ..." long assembly names and GAC loads. - // These kind of design-time assembly specifications are no longer used to our knowledge so that comparison is basically legacy - // and will always succeed. - let name = System.Reflection.AssemblyName (Path.GetFileNameWithoutExtension designTimeAssemblyNameString) - if name.Name.Equals(name.FullName, StringComparison.OrdinalIgnoreCase) then - let designTimeAssemblyName = designTimeAssemblyNameString+".dll" - loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeAssemblyName - else - // Load from the GAC using Assembly.Load. This is legacy since type provider design-time components are - // never in the GAC these days and "x.DesignTIme, Version= ..." specifications are never used. - try - let asmName = System.Reflection.AssemblyName designTimeAssemblyNameString - Some (FileSystem.AssemblyLoad asmName) - with e -> - raiseError e + let designTimeAssemblyOpt = getTypeProviderAssembly (runTimeAssemblyFileName, designTimeAssemblyNameString, compilerToolPaths, raiseError) match designTimeAssemblyOpt with | Some loadedDesignTimeAssembly -> diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 820ff4d47e..3831657afe 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1354,6 +1354,8 @@ tcGlobalsSystemTypeNotFound,"The system type '%s' was required but no referenced 3213,typrelMemberHasMultiplePossibleDispatchSlots,"The member '%s' matches multiple overloads of the same method.\nPlease restrict it to one of the following:%s." 3214,methodIsNotStatic,"Method or object constructor '%s' is not static" 3215,parsUnexpectedSymbolEqualsInsteadOfIn,"Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead?" +3216,packageManagerUnknown,"Package manager key '%s' was not registered in %s. Currently registered: %s" +3217,packageManagerError,"%s" tcAnonRecdCcuMismatch,"Two anonymous record types are from different assemblies '%s' and '%s'" tcAnonRecdFieldNameMismatch,"Two anonymous record types have mismatched sets of field names '%s' and '%s'" keywordDescriptionAbstract,"Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation." @@ -1464,6 +1466,7 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3243,parsInvalidAnonRecdExpr,"Invalid anonymous record expression" 3244,parsInvalidAnonRecdType,"Invalid anonymous record type" 3245,tcCopyAndUpdateNeedsRecordType,"The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record" +3246,couldNotLoadDependencyManagerExtension,"The dependency manager extension %s could not be loaded. Message: %s" 3250,expressionHasNoName,"Expression does not have a name." 3251,chkNoFirstClassNameOf,"Using the 'nameof' operator as a first-class function value is not permitted." 3246,tcAugmentationsCannotHaveAttributes,"Attributes cannot be applied to type extensions." diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 76b9c7043e..0a9d7e9e07 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -31,10 +31,10 @@ Microsoft.FSharp.NetSdk.props - {{FSharpCoreShippedPackageVersion}} - $(FSharpCoreShippedPackageVersion) - {{FSharpCorePreviewPackageVersion}} - $(FSharpCorePreviewPackageVersion) + {{FSharpCoreShippedVersion}} + $(FSharpCoreShippedVersion) + {{FSharpCorePreviewVersion}} + $(FSharpCorePreviewVersion) @@ -48,6 +48,8 @@ + + diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props index 1b40e6675e..f8bae0ab9a 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props @@ -98,4 +98,10 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and + + + true + + + diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets index 282166c98d..a6923d4c17 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets @@ -58,6 +58,25 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and $(RestoreSources); https://dotnet.myget.org/F/fsharp/api/v3/index.json + + + + + + + + + + + + Pkg$([System.String]::Copy('%(ResolvedCompileFileDefinitions.NugetPackageId)').Replace('.','_')) + $(%(EnhancedResolvedFile.PackageRootProperty))\content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx + + + + fsharp41 @@ -68,17 +87,43 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and - <_ResolvedProjectOutputFiles - Include="%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/*" - Exclude="%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/FSharp.Core.dll;%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/System.ValueTuple.dll" + <_ResolvedOutputFiles + Include="%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/*" + Exclude="%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/FSharp.Core.dll;%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/System.ValueTuple.dll" Condition="'%(_ResolvedProjectReferencePaths.IsFSharpDesignTimeProvider)' == 'true'"> %(_ResolvedProjectReferencePaths.NearestTargetFramework) - + + + <_ResolvedOutputFiles + Include="@(BuiltProjectOutputGroupKeyOutput)" + Condition=" '$(IsFSharpDesignTimeProvider)' == 'true' and '%(BuiltProjectOutputGroupKeyOutput->Filename)%(BuiltProjectOutputGroupKeyOutput->Extension)' != 'FSharp.Core.dll' and '%(BuiltProjectOutputGroupKeyOutput->Filename)%(BuiltProjectOutputGroupKeyOutput->Extension)' != 'System.ValueTuple.dll' "> + $(TargetFramework) + - - $(FSharpToolsDirectory)/$(FSharpDesignTimeProtocol)/%(_ResolvedProjectOutputFiles.NearestTargetFramework)/%(_ResolvedProjectOutputFiles.FileName)%(_ResolvedProjectOutputFiles.Extension) + + $(FSharpToolsDirectory)/$(FSharpDesignTimeProtocol)/%(_ResolvedOutputFiles.NearestTargetFramework)/%(_ResolvedOutputFiles.FileName)%(_ResolvedOutputFiles.Extension) + + + + + + + + + + + + + Pkg$([System.String]::Copy('%(ResolvedCompileFileDefinitions.NugetPackageId)').Replace('.','_')) + $(%(FsxResolvedFile.PackageRootProperty)) + $(%(FsxResolvedFile.PackageRootProperty))\content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx + + + diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets index 3c6cf662b9..e0c253f491 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets @@ -19,7 +19,7 @@ this file. $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - FSharp.Build.dll + $(MSBuildThisFileDirectory)FSharp.Build.dll @@ -210,7 +210,7 @@ this file. @(CompileBefore); @(Compile); @(CompileAfter); - @(CompilerToolsFscCompilerTools); + @(FscCompilerTools); @(_CoreCompileResourceInputs); @(ManifestNonResxWithNoCultureOnDisk); $(ApplicationIcon); @@ -279,7 +279,7 @@ this file. BaseAddress="$(BaseAddress)" ChecksumAlgorithm="$(PdbChecksumAlgorithm)" CodePage="$(CodePage)" - CompilerTools="$(FscCompilerTools)" + CompilerTools="@(FscCompilerTools)" DebugSymbols="$(DebugSymbols)" DebugType="$(DebugType)" DefineConstants="$(DefineConstants)" diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj index d8f5341a8a..3e74a2d936 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj @@ -16,14 +16,6 @@ true - - true - - - - true - - $(BaseOutputPath)\$(Configuration)\$(TargetFramework) @@ -224,7 +216,7 @@ AbsIL\ilmorph.fs - + AbsIL\ilsign.fs @@ -524,6 +516,12 @@ CodeGen\IlxGen.fs + + Driver\DependencyManager.Integration.fsi + + + Driver\DependencyManager.Integration.fs + @@ -641,6 +639,9 @@ Service/ServiceXmlDocParser.fs + + Service/SimulatedMSBuildReferenceResolver.fs + Service/ExternalSymbol.fsi @@ -706,6 +707,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.netcore.nuspec b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.netcore.nuspec index e8af5ff0e4..9fb4c25cf4 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.netcore.nuspec +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.netcore.nuspec @@ -23,6 +23,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec index dd9293cd88..53918b8020 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec @@ -5,6 +5,8 @@ en-US + + @@ -48,8 +50,16 @@ + + target="lib\netcoreapp2.1" /> + + + + + + + @@ -65,5 +75,6 @@ + diff --git a/src/fsharp/FSharp.DependencyManager/.gitignore b/src/fsharp/FSharp.DependencyManager/.gitignore new file mode 100644 index 0000000000..b6f8be6985 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/.gitignore @@ -0,0 +1 @@ +FSharp.DependencyManager.nuget.props \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/FSDependencyManager.txt b/src/fsharp/FSharp.DependencyManager/FSDependencyManager.txt new file mode 100644 index 0000000000..a163aafc0f --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/FSDependencyManager.txt @@ -0,0 +1,2 @@ +# FSharp.Build resource strings +notUsed,"Not used." \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs new file mode 100644 index 0000000000..5353ff1be2 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -0,0 +1,403 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +namespace FSharp.DependencyManager + +open System +open System.Collections +open System.Collections.Generic +open System.Diagnostics +open System.IO +open System.Reflection +open System.Runtime.CompilerServices +open System.Runtime.Versioning + +open Internal.Utilities.FSharpEnvironment + +open Microsoft.DotNet.PlatformAbstractions +open Microsoft.Extensions.DependencyModel + +#if !(NETSTANDARD || NETCOREAPP) +open Microsoft.Build.Evaluation +open Microsoft.Build.Framework +#endif + +[] +type DependencyManagerAttribute() = inherit System.Attribute() + +module Utilities = + + let private context = + try + match (Assembly.GetEntryAssembly()) with + | null -> + // No entry assembly therefore look for fsi.exe/fsc.exe alongside this assembly + let loadAssembly path = + let asm = Assembly.LoadFrom(path) + DependencyContext.Load(asm) + // If there is no entry assembly then we assume try fsi.exe, then fsc.exe` + let location = typeof.GetTypeInfo().Assembly.Location + let pathToFsiExe = Path.Combine(Path.GetDirectoryName(location), "fsi.exe") + if File.Exists(pathToFsiExe) then + loadAssembly pathToFsiExe |> Option.ofObj + else + let pathToFscExe = Path.Combine(Path.GetDirectoryName(location), "fsc.exe") + if File.Exists(pathToFscExe) then + loadAssembly pathToFscExe |> Option.ofObj + else + None + | asm -> DependencyContext.Load(asm) |> Option.ofObj + with _ -> None + + // Latest documentation about nuget tfms is here: https://docs.microsoft.com/en-us/nuget/schema/target-frameworks + let netCoreAppTFM = [| + 2.2m, ".NETCoreApp,Version=v2.2"; + 2.2m, ".NETStandard,Version=v2.2"; + 2.1m, ".NETCoreApp,Version=v2.1"; + 2.0m, ".NETStandard,Version=v2.0"; + 2.0m, ".NETCoreApp,Version=v2.0"; + 1.0m, ".NETStandard,Version=v1.6"; + 1.0m, ".NETStandard,Version=v1.5"; + 1.0m, ".NETStandard,Version=v1.4"; + 1.0m, ".NETStandard,Version=v1.3"; + 1.0m, ".NETStandard,Version=v1.2"; + 1.0m, ".NETStandard,Version=v1.1"; + 1.0m, ".NETStandard,Version=v1.0"; + |] + + let netDesktopTFM = [| + 0.472m, ".NETFramework,Version=v4.7.2"; + 0.471m, ".NETFramework,Version=v4.7.1"; + 0.47m, ".NETFramework,Version=v4.7"; + 0.47m, ".NETStandard,Version=v2.0"; + 0.462m, ".NETFramework,Version=v4.6.2"; + 0.462m, ".NETStandard,Version=v1.6"; + 0.461m, ".NETFramework,Version=v4.6.1"; + 0.461m, ".NETStandard,Version=v1.5"; + 0.46m, ".NETFramework,Version=v4.6"; + 0.46m, ".NETStandard,Version=v1.4"; + 0.452m, ".NETFramework,Version=v4.5.2"; + 0.452m, ".NETStandard,Version=v1.3"; + 0.451m, ".NETFramework,Version=v4.51"; + 0.451m, ".NETStandard,Version=v1.2"; + 0.45m, ".NETFramework,Version=v4.5"; + 0.45m, ".NETStandard,Version=v1.1"; + 0.45m, ".NETStandard,Version=v1.0"; + 0.40m, ".NETFramework,Version=v4"; + |] + + let desktopProductVersionMonikers = [| + // major, minor, build, revision, moniker + 4, 7, 3190, 0, 0.472m; + 4, 7, 2600, 0, 0.471m; + 4, 7, 2053, 0, 0.47m; + 4, 6, 1590, 0, 0.462m; + 4, 6, 1055, 0, 0.461m; + 4, 6 , 81, 0, 0.46m; + 4, 0, 30319, 34209, 0.452m; + 4, 0, 30319, 18408, 0.451m; + 4, 0, 30319, 17929, 0.45m; + 4, 0, 30319, 1, 0.40m; + |] + + let defaultMscorlibVersion = 4, 6, 1055, 0 // Probably needs configuring + let defaultFrameworkName = ".NETFramework,Version=v4.6.1" + let netCoreAppPrefix = ".NETCoreApp,Version=v" + let netStandardPrefix = ".NETStandard,Version=v" + + // Algorithm: + // This returns a prioritized the list of supported tfms for the executing application + // the first entry is the most appropriate. + // On windows desktop the windows tfm that matches the installed dotnet framework version is the best match, followed by the highest supported netstandard dll + // E.g. + // Priority search for net471 looks like: + // net471;netstandard2.0;net47;net462;netstandard1.6;net461;netstandard1.5;net46;netstandard1.4;net452;netstandard1.3;net451;netstandard1.2;net45;netstandard1.1;net40;netstandard1.0 + // Priority for .NetCoreApp 2.1 looks like: + // netstandard2.0;netstandard1.6;netstandard1.5;netstandard1.4;netstandard1.3;netstandard1.2;netstandard1.1;netstandard1.0 + let executionTFMs = + seq { + let netStandardsFromVersion version = + netCoreAppTFM |> Seq.filter(fun (ver,_) -> version >= ver) |> Seq.map(fun (_,moniker) -> moniker) |> Seq.toArray + + let netDesktopsFromVersion version = + netDesktopTFM |> Seq.filter(fun (ver,_) -> version >= ver) |> Seq.map(fun (_,moniker) -> moniker) |> Seq.toArray + + match context with + | Some ctxt -> + let target = ctxt.Target.Framework.ToString() + if target.StartsWith(netCoreAppPrefix) then + yield! (netStandardsFromVersion (Decimal.Parse(target.Substring(netCoreAppPrefix.Length)))) + elif target.StartsWith(netStandardPrefix) then + yield! (netStandardsFromVersion (Decimal.Parse(target.Substring(netStandardPrefix.Length)))) + | None -> + let fileMajorPart, fileMinorPart, fileBuildPart, filePrivatePart = + try + let attrOpt = typeof.GetTypeInfo().Assembly.GetCustomAttributes(typeof) |> Seq.tryHead + match attrOpt with + | Some attr -> + let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) + fv.[0], fv.[1], fv.[2], fv.[3] + | _ -> defaultMscorlibVersion + with _ -> defaultMscorlibVersion + + // Get the ProductVersion of this framework compare with table yield compatible monikers + for majorPart, minorPart, buildPart, privatePart, version in desktopProductVersionMonikers do + if fileMajorPart < majorPart then () + elif fileMajorPart > majorPart then + yield! (netDesktopsFromVersion version) + elif fileMinorPart < minorPart then () + elif fileMinorPart > minorPart then + yield! (netDesktopsFromVersion version) + elif fileBuildPart < buildPart then () + elif fileBuildPart = 30319 && filePrivatePart < privatePart then () + elif fileBuildPart = 30319 && filePrivatePart > privatePart then + yield! (netDesktopsFromVersion version) + elif fileBuildPart < buildPart then () + else + yield! (netDesktopsFromVersion version) + } |> Seq.distinct |> Seq.toArray + + let frameworkIdentifier, frameworkVersion = + let frameworkName = + match executionTFMs |> Array.tryHead with + | Some tfm -> new FrameworkName(tfm) + | None -> new FrameworkName(defaultFrameworkName) + frameworkName.Identifier, frameworkName.Version + + /// Return a string array delimited by commas + /// Note that a quoted string is not going to be mangled into pieces. + let trimChars = [| ' '; '\t'; '\''; '\"' |] + let inline private isNotQuotedQuotation (text: string) n = n > 0 && text.[n-1] <> '\\' + let getOptions text = + let split (option:string) = + let pos = option.IndexOf('=') + let stringAsOpt text = + if String.IsNullOrEmpty(text) then None + else Some text + let nameOpt = + if pos <= 0 then None + else stringAsOpt (option.Substring(0, pos).Trim(trimChars).ToLowerInvariant()) + let valueOpt = + let valueText = + if pos < 0 then option + else if pos < option.Length then + option.Substring(pos + 1) + else "" + stringAsOpt (valueText.Trim(trimChars)) + nameOpt,valueOpt + + let last = String.length text - 1 + let result = ResizeArray() + let mutable insideSQ = false + let mutable start = 0 + let isSeperator c = c = ',' + for i = 0 to last do + match text.[i], insideSQ with + | c, false when isSeperator c -> // split when seeing a separator + result.Add(text.Substring(start, i - start)) + insideSQ <- false + start <- i + 1 + | _, _ when i = last -> + result.Add(text.Substring(start, i - start + 1)) + | c, true when isSeperator c -> // keep reading if a separator is inside quotation + insideSQ <- true + | '\'', _ when isNotQuotedQuotation text i -> // open or close quotation + insideSQ <- not insideSQ // keep reading + | _ -> () + + result |> Seq.map(fun option -> split option) + + // Path to the directory containing the fsharp compilers + let fsharpCompilerPath = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) + + let isRunningOnCoreClr = + // We are running on dotnet core if the executing application has .runtimeconfig.json + let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") + File.Exists(depsJsonPath) + + let isWindows = + match Environment.OSVersion.Platform with + | PlatformID.Unix -> false + | PlatformID.MacOSX -> false + | _ -> true + + let dotnet = + if isWindows then "dotnet.exe" else "dotnet" + + let sdks = "Sdks" + +#if !(NETSTANDARD || NETCOREAPP) + let msbuildExePath = + // Find msbuild.exe when invoked from desktop compiler. + // 1. Look relative to F# compiler location Normal retail build + // 2. Use VSAPPDIR Nightly when started from VS, or F5 + // 3. Use VSINSTALLDIR -- When app is run outside of VS, and + // is not copied relative to a vs install. + let vsRootFromVSAPPIDDIR = + let vsappiddir = Environment.GetEnvironmentVariable("VSAPPIDDIR") + if not (String.IsNullOrEmpty(vsappiddir)) then + Path.GetFullPath(Path.Combine(vsappiddir, "../..")) + else + null + + let roots = [| + Path.GetFullPath(Path.Combine(fsharpCompilerPath, "../../../../..")) + vsRootFromVSAPPIDDIR + Environment.GetEnvironmentVariable("VSINSTALLDIR") + |] + + let msbuildPath root = Path.GetFullPath(Path.Combine(root, "MSBuild/Current/Bin/MSBuild.exe")) + + let msbuildPathExists root = + if String.IsNullOrEmpty(root) then + false + else + File.Exists(msbuildPath root) + + let msbuildOption rootOpt = + match rootOpt with + | Some root -> Some (msbuildPath root) + | _ -> None + + roots |> Array.tryFind(fun root -> msbuildPathExists root) |> msbuildOption +#else + let dotnetHostPath = + if isRunningOnCoreClr then + match (Environment.GetEnvironmentVariable("DOTNET_HOST_PATH")) with + | value when not (String.IsNullOrEmpty(value)) -> Some value // Value set externally + | _ -> + let main = Process.GetCurrentProcess().MainModule + if main.ModuleName.StartsWith("dotnet") then + Some main.FileName + else + None + else + None +#endif + let executeBuild pathToExe arguments = + match pathToExe with + | Some path -> + let psi = ProcessStartInfo() + psi.FileName <- path + psi.RedirectStandardOutput <- false + psi.RedirectStandardError <- false + psi.Arguments <- arguments + psi.CreateNoWindow <- true + psi.UseShellExecute <- false + + use p = new Process() + p.StartInfo <- psi + p.Start() |> ignore + p.WaitForExit() + p.ExitCode = 0 + + | None -> false + + let buildProject projectPath binLogging = + + let binLoggingArguments = + match binLogging with + | true -> "-bl" + | _ -> "" + + let arguments prefix = + sprintf "%s -restore %s %c%s%c /t:FSI-PackageManagement" prefix binLoggingArguments '\"' projectPath '\"' + + let succeeded = +#if !(NETSTANDARD || NETCOREAPP) + // The Desktop build uses "msbuild" to build + executeBuild msbuildExePath (arguments "") +#else + // The coreclr uses "dotnet msbuild" to build + executeBuild dotnetHostPath (arguments "msbuild") +#endif + let outputFile = projectPath + ".fsx" + let resultOutFile = if succeeded && File.Exists(outputFile) then Some outputFile else None + succeeded, resultOutFile + + // Generate a project files for dependencymanager projects + let generateLibrarySource = @"// Generated dependencymanager library +namespace lib" + + let generateProjectBody = @" + + + $(TARGETFRAMEWORKIDENTIFIER) + v$(TARGETFRAMEWORKVERSION) + false + + + + +$(PACKAGEREFERENCES) + + + + + + + + + + + + fsharp41 + tools + + + + + + + <_ResolvedOutputFiles + Include=""%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/*"" + Exclude=""%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/FSharp.Core.dll;%(_ResolvedProjectReferencePaths.RootDir)%(_ResolvedProjectReferencePaths.Directory)/**/System.ValueTuple.dll"" + Condition=""'%(_ResolvedProjectReferencePaths.IsFSharpDesignTimeProvider)' == 'true'""> + %(_ResolvedProjectReferencePaths.NearestTargetFramework) + + + <_ResolvedOutputFiles + Include=""@(BuiltProjectOutputGroupKeyOutput)"" + Condition=""'$(IsFSharpDesignTimeProvider)' == 'true' and '%(BuiltProjectOutputGroupKeyOutput->Filename)%(BuiltProjectOutputGroupKeyOutput->Extension)' != 'FSharp.Core.dll' and '%(BuiltProjectOutputGroupKeyOutput->Filename)%(BuiltProjectOutputGroupKeyOutput->Extension)' != 'System.ValueTuple.dll'""> + $(TargetFramework) + + + + $(FSharpToolsDirectory)/$(FSharpDesignTimeProtocol)/%(_ResolvedOutputFiles.NearestTargetFramework)/%(_ResolvedOutputFiles.FileName)%(_ResolvedOutputFiles.Extension) + + + + + + + + + Pkg$([System.String]::Copy('%(ResolvedCompileFileDefinitions.NugetPackageId)').Replace('.','_')) + $(%(FsxResolvedFile.PackageRootProperty)) + $(%(FsxResolvedFile.PackageRootProperty))\content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx + + + + + + + + + + + + + + + + + + + + + + + + + +" diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs new file mode 100644 index 0000000000..9d83f61cb4 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs @@ -0,0 +1,152 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.DependencyManager + +open System +open System.Collections.Concurrent +open System.Diagnostics +open System.IO +open System.Reflection + +open FSharp.DependencyManager +open FSharp.DependencyManager.Utilities + +module Attributes = + [] + do () + + +type PackageReference = { Include:string; Version:string; RestoreSources:string; Script:string } + +type [] FSharpDependencyManager (outputDir:string option) = + + let key = "nuget" + let name = "MsBuild Nuget DependencyManager" + let scriptsPath = + let path = Path.Combine(Path.GetTempPath(), key, Process.GetCurrentProcess().Id.ToString()) + match outputDir with + | None -> path + | Some v -> Path.Combine(path, v) + let generatedScripts = new ConcurrentDictionary() + let deleteScripts () = + try + if Directory.Exists(scriptsPath) then + () //Directory.Delete(scriptsPath, true) + with | _ -> () + + let deleteAtExit = + try + if not (File.Exists(scriptsPath)) then + Directory.CreateDirectory(scriptsPath) |> ignore + true + with | _ -> false + + let emitFile filename (body:string) = + try + // Create a file to write to + use sw = File.CreateText(filename) + sw.WriteLine(body) + with | _ -> () + + let concat (s:string) (v:string) : string = + match String.IsNullOrEmpty(s), String.IsNullOrEmpty(v) with + | false, false -> s + ";" + v + | false, true -> s + | true, false -> v + | _ -> "" + + do if deleteAtExit then AppDomain.CurrentDomain.ProcessExit |> Event.add(fun _ -> deleteScripts () ) + + let formatPackageReference p = + let { Include=inc; Version=ver; RestoreSources=src; Script=script } = p + seq { + match not (String.IsNullOrEmpty(inc)), not (String.IsNullOrEmpty(ver)), not (String.IsNullOrEmpty(script)) with + | true, true, false -> yield sprintf @" true" inc ver + | true, true, true -> yield sprintf @" true" inc ver script + | true, false, false -> yield sprintf @" true" inc + | true, false, true -> yield sprintf @" true" inc script + | _ -> () + match not (String.IsNullOrEmpty(src)) with + | true -> yield sprintf @" %s" (concat "$(RestoreAdditionalProjectSources)" src) + | _ -> () + } + + member __.Name = name + + member __.Key = key + + member __.ResolveDependencies(_scriptDir:string, _mainScriptName:string, _scriptName:string, packageManagerTextLines:string seq) : bool * string list * string list = + + let packageReferences, binLogging = + let validatePackageName package packageName = + if String.Compare(packageName, package, StringComparison.OrdinalIgnoreCase) = 0 then + raise (ArgumentException(sprintf "PackageManager can not reference the System Package '%s'" packageName)) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + + let mutable binLogging = false + let references = [ + for line in packageManagerTextLines do + let options = getOptions line + let mutable found = false + let mutable packageReference = { Include = ""; Version = "*"; RestoreSources = ""; Script = "" } + for opt in options do + let addInclude v = + // TODO: Consider a comprehensive list of dotnet framework packages that are disallowed + validatePackageName v "mscorlib" + validatePackageName v "FSharp.Core" + validatePackageName v "System.ValueTuple" + validatePackageName v "NETStandard.Library" + found <- true + packageReference <- { packageReference with Include = v } + + let addScript v = packageReference <- { packageReference with Script = v } + match opt with + | Some "version", Some v -> + found <- true + packageReference <- { packageReference with Version = v } + | Some "restoresources", Some v -> + found <- true + packageReference <- { packageReference with RestoreSources = concat packageReference.RestoreSources v } + | Some "bl", Some v -> + binLogging <- + match v.ToLowerInvariant() with + | "true" -> true + | _ -> false + | Some "include", None -> + raise (ArgumentException(sprintf "%s requires a value" "Include")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + | Some "version", None -> + raise (ArgumentException(sprintf "%s requires a value" "Version")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + | Some "restoresources", None -> + raise (ArgumentException(sprintf "%s requires a value" "RestoreSources")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + | Some "include", Some v -> addInclude v + | Some "script", Some v -> addScript v + | None, Some v -> addInclude v + | _ -> () + if found then yield! formatPackageReference packageReference + ] + references |> List.distinct |>String.concat Environment.NewLine, binLogging + + // Generate a project files + let generateAndBuildProjectArtifacts = + let writeFile path body = + if not (generatedScripts.ContainsKey(body.GetHashCode().ToString())) then + emitFile path body + + let fsProjectPath = Path.Combine(scriptsPath, "Project.fsproj") + + let generateProjBody = + generateProjectBody.Replace("$(TARGETFRAMEWORKIDENTIFIER)", frameworkIdentifier) + .Replace("$(TARGETFRAMEWORKVERSION)", frameworkVersion.ToString()) + .Replace("$(PACKAGEREFERENCES)", packageReferences) + + writeFile (Path.Combine(scriptsPath, "Library.fs")) generateLibrarySource + writeFile fsProjectPath generateProjBody + + let succeeded, resultingFsx = buildProject fsProjectPath binLogging + let fsx = + match resultingFsx with + | Some fsx -> [fsx] + | None -> [] + + succeeded, fsx, List.empty + + generateAndBuildProjectArtifacts \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj new file mode 100644 index 0000000000..733367a775 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj @@ -0,0 +1,84 @@ + + + + + + Library + net472;netstandard2.0 + netstandard2.0 + FSharp.DependencyManager + $(NoWarn);45;55;62;75;1204 + true + $(DefineConstants);COMPILER + $(DefineConstants);MSBUILD_AT_LEAST_15 + $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 + true + + + + + $(BaseOutputPath)\$(Configuration)\$(TargetFramework) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.cs.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.cs.xlf new file mode 100644 index 0000000000..1b2b789124 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.cs.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.de.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.de.xlf new file mode 100644 index 0000000000..fad4a92c19 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.de.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.en.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.en.xlf new file mode 100644 index 0000000000..486faaceb8 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.en.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.es.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.es.xlf new file mode 100644 index 0000000000..af7ece6ad9 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.es.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.fr.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.fr.xlf new file mode 100644 index 0000000000..42aa351aa0 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.fr.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.it.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.it.xlf new file mode 100644 index 0000000000..da872e4f39 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.it.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ja.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ja.xlf new file mode 100644 index 0000000000..e9e3444fcf --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ja.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ko.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ko.xlf new file mode 100644 index 0000000000..13f0865b93 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ko.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pl.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pl.xlf new file mode 100644 index 0000000000..e9718434a1 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pl.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pt-BR.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pt-BR.xlf new file mode 100644 index 0000000000..6fb3374c22 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.pt-BR.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ru.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ru.xlf new file mode 100644 index 0000000000..98624d7996 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.ru.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.tr.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.tr.xlf new file mode 100644 index 0000000000..a94d8e068e --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.tr.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hans.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hans.xlf new file mode 100644 index 0000000000..44e599a414 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hans.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hant.xlf b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hant.xlf new file mode 100644 index 0000000000..83fa3521e6 --- /dev/null +++ b/src/fsharp/FSharp.DependencyManager/xlf/FSDependencyManager.txt.zh-Hant.xlf @@ -0,0 +1,12 @@ + + + + + + Not used. + Not used. + + + + + \ No newline at end of file diff --git a/src/fsharp/fsc/App.config b/src/fsharp/fsc/App.config index 3e0f05bbf9..c5ee96a129 100644 --- a/src/fsharp/fsc/App.config +++ b/src/fsharp/fsc/App.config @@ -8,10 +8,10 @@ - - - - - + + + + + - + \ No newline at end of file diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj index 7bddcb9dfd..85559a81d0 100644 --- a/src/fsharp/fsc/fsc.fsproj +++ b/src/fsharp/fsc/fsc.fsproj @@ -36,6 +36,7 @@ + @@ -44,6 +45,13 @@ + + + + + + + diff --git a/src/fsharp/fsi/App.config b/src/fsharp/fsi/App.config index 43f1fdd57e..94ab5a37ac 100644 --- a/src/fsharp/fsi/App.config +++ b/src/fsharp/fsi/App.config @@ -11,6 +11,6 @@ - + diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 1b8ad8ee31..23f0a790ac 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -962,6 +962,8 @@ type internal FsiDynamicCompiler let mutable fragmentId = 0 let mutable prevIt : ValRef option = None + let mutable needsPackageResolution = false + let generateDebugInfo = tcConfigB.debuginfo let valuePrinter = FsiValuePrinter(fsi, tcGlobals, generateDebugInfo, resolveAssemblyRef, outWriter) @@ -1251,6 +1253,53 @@ type internal FsiDynamicCompiler resolutions, { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnv); optEnv = optEnv } + + member __.EvalDependencyManagerTextFragment (packageManager:DependencyManagerIntegration.IDependencyManagerProvider,m,path: string) = + let path = DependencyManagerIntegration.removeDependencyManagerKey packageManager.Key path + + match tcConfigB.packageManagerLines |> Map.tryFind packageManager.Key with + | Some lines -> tcConfigB.packageManagerLines <- Map.add packageManager.Key (lines @ [false, path, m]) tcConfigB.packageManagerLines + | _ -> tcConfigB.packageManagerLines <- Map.add packageManager.Key [false, path, m] tcConfigB.packageManagerLines + + needsPackageResolution <- true + + member fsiDynamicCompiler.CommitDependencyManagerText (ctok, istate: FsiDynamicCompilerState, lexResourceManager, errorLogger) = + if not needsPackageResolution then istate else + needsPackageResolution <- false + + tcConfigB.packageManagerLines |> Seq.fold(fun istate kv -> + let inline snd3 (_, b, _) = b + let packageManagerKey, packageManagerLines = kv.Key, kv.Value + match packageManagerLines with + | [] -> istate + | (_, _, m)::_ -> + match DependencyManagerIntegration.tryFindDependencyManagerByKey tcConfigB.compilerToolPaths tcConfigB.outputDir m packageManagerKey with + | None -> + errorR(DependencyManagerIntegration.createPackageManagerUnknownError tcConfigB.compilerToolPaths tcConfigB.outputDir packageManagerKey m) + istate + | Some packageManager -> + let packageManagerTextLines = packageManagerLines |> List.map snd3 + let removeErrorLinesFromScript () = + tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map(fun _ l -> l |> List.filter(fun (tried, _, _) -> tried)) + try + match DependencyManagerIntegration.resolve packageManager tcConfigB.implicitIncludeDir "stdin.fsx" "stdin.fsx" m packageManagerTextLines with + | None -> istate // error already reported + | Some (succeeded, generatedScripts, additionalIncludeFolders) -> //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + if succeeded then + tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map(fun _ l -> l |> List.map(fun (_, p, m) -> true, p, m)) + else + removeErrorLinesFromScript () + for folder in additionalIncludeFolders do + tcConfigB.AddIncludePath(m, folder, "") + if generatedScripts.Length > 0 then + fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, generatedScripts, lexResourceManager, errorLogger) + else istate + with _ -> + // An exception occured during processing, so remove the lines causing the error from the package manager list. + removeErrorLinesFromScript () + reraise () + ) istate + member fsiDynamicCompiler.ProcessMetaCommandsFromInputAsInteractiveCommands(ctok, istate, sourceFile, inp) = WithImplicitHome (tcConfigB, directoryName sourceFile) @@ -1258,6 +1307,7 @@ type internal FsiDynamicCompiler ProcessMetaCommandsFromInput ((fun st (m,nm) -> tcConfigB.TurnWarningOff(m,nm); st), (fun st (m,nm) -> snd (fsiDynamicCompiler.EvalRequireReference (ctok, st, m, nm))), + (fun st (packageManagerPrefix,m,nm) -> fsiDynamicCompiler.EvalDependencyManagerTextFragment (packageManagerPrefix,m,nm); st), (fun _ _ -> ())) (tcConfigB, inp, Path.GetDirectoryName sourceFile, istate)) @@ -1788,34 +1838,48 @@ type internal FsiInteractionProcessor istate |> InteractiveCatch errorLogger (fun istate -> match action with | IDefns ([ ],_) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) istate,Completed None + | IDefns ([ SynModuleDecl.DoExpr(_,expr,_)],_) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) + | IDefns (defs,_) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs),Completed None | IHash (ParsedHashDirective("load",sourceFiles,m),_) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalSourceFiles (ctok, istate, m, sourceFiles, lexResourceManager, errorLogger),Completed None - | IHash (ParsedHashDirective(("reference" | "r"),[path],m),_) -> - let resolutions,istate = fsiDynamicCompiler.EvalRequireReference(ctok, istate, m, path) - resolutions |> List.iter (fun ar -> - let format = - if tcConfig.shadowCopyReferences then - let resolvedPath = ar.resolvedPath.ToUpperInvariant() - let fileTime = File.GetLastWriteTimeUtc(resolvedPath) - match referencedAssemblies.TryGetValue resolvedPath with - | false, _ -> - referencedAssemblies.Add(resolvedPath, fileTime) - FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) - | true, time when time <> fileTime -> - FSIstrings.SR.fsiDidAHashrWithStaleWarning(ar.resolvedPath) - | _ -> - FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) - else - FSIstrings.SR.fsiDidAHashrWithLockWarning(ar.resolvedPath) - fsiConsoleOutput.uprintnfnn "%s" format) - istate,Completed None + | IHash (ParsedHashDirective(("reference" | "r"), [path], m), _) -> + match DependencyManagerIntegration.tryFindDependencyManagerInPath tcConfigB.compilerToolPaths tcConfigB.outputDir m (path:string) with + | DependencyManagerIntegration.ReferenceType.RegisteredDependencyManager packageManager -> + fsiDynamicCompiler.EvalDependencyManagerTextFragment(packageManager, m, path) + istate,Completed None + | DependencyManagerIntegration.ReferenceType.UnknownType -> + // error already reported + istate,Completed None + | DependencyManagerIntegration.ReferenceType.Library path -> + let resolutions,istate = fsiDynamicCompiler.EvalRequireReference(ctok, istate, m, path) + resolutions |> List.iter (fun ar -> + let format = + if tcConfig.shadowCopyReferences then + let resolvedPath = ar.resolvedPath.ToUpperInvariant() + let fileTime = File.GetLastWriteTimeUtc(resolvedPath) + match referencedAssemblies.TryGetValue resolvedPath with + | false, _ -> + referencedAssemblies.Add(resolvedPath, fileTime) + FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) + | true, time when time <> fileTime -> + FSIstrings.SR.fsiDidAHashrWithStaleWarning(ar.resolvedPath) + | _ -> + FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) + else + FSIstrings.SR.fsiDidAHashrWithLockWarning(ar.resolvedPath) + fsiConsoleOutput.uprintnfnn "%s" format) + istate,Completed None | IHash (ParsedHashDirective("I",[path],m),_) -> tcConfigB.AddIncludePath (m,path, tcConfig.implicitIncludeDir) @@ -2430,7 +2494,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let fsiDynamicCompiler = FsiDynamicCompiler(fsi, timeReporter, tcConfigB, tcLockObject, outWriter, tcImports, tcGlobals, fsiOptions, fsiConsoleOutput, fsiCollectible, niceNameGen, resolveAssemblyRef) - let fsiInterruptController = FsiInterruptController(fsiOptions, fsiConsoleOutput) + let fsiInterruptController = FsiInterruptController(fsiOptions, fsiConsoleOutput) let uninstallMagicAssemblyResolution = MagicAssemblyResolution.Install(tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput) diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj index 5b4978679b..f6fb546249 100644 --- a/src/fsharp/fsi/fsi.fsproj +++ b/src/fsharp/fsi/fsi.fsproj @@ -33,6 +33,10 @@ + + + + @@ -47,6 +51,17 @@ + + + + + + + + + + + diff --git a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj index 92503aaea0..3bf0d326d3 100644 --- a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj +++ b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj @@ -31,6 +31,7 @@ + diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 7eac7390c2..faa4895619 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -55,7 +55,7 @@ type FSharpProjectOptions = UseScriptResolutionRules : bool LoadTime : System.DateTime UnresolvedReferences : UnresolvedReferencesSet option - OriginalLoadReferences: (range * string) list + OriginalLoadReferences: (range * string * string) list ExtraProjectInfo : obj option Stamp : int64 option } diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi index 9f81f8fccd..182714e8d6 100755 --- a/src/fsharp/service/service.fsi +++ b/src/fsharp/service/service.fsi @@ -54,7 +54,7 @@ type public FSharpProjectOptions = UnresolvedReferences : UnresolvedReferencesSet option /// Unused in this API and should be '[]' when used as user-specified input - OriginalLoadReferences: (range * string) list + OriginalLoadReferences: (range * string * string) list /// Extra information passed back on event trigger ExtraProjectInfo : obj option diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 6504c33e5d..40e47daac0 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -7232,6 +7232,26 @@ Neplatná mapa cest. Mapování musí být oddělená čárkami a používat formát cesta=zdrojováCesta. + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 1a062596c6..8f6f10ef07 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -7232,6 +7232,26 @@ Ungültige Pfadzuordnung. Zuordnungen müssen durch Kommas getrennt werden und das Format 'path=sourcePath' aufweisen + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 3c43675bdf..ace695efe2 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -7232,6 +7232,26 @@ Mapa de ruta no válido. Las asignaciones deben estar separadas por comas y tener el formato "path=rutaOrigen" + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index b31bb3230f..d277428f94 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -7232,6 +7232,26 @@ Mappage de chemin non valide. Les mappages doivent être séparés par des virgules et au format 'path=sourcePath' + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index bfa82141e5..a8d164ef75 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -7232,6 +7232,26 @@ Mapping di percorso non valido. I mapping devono essere delimitati da virgole e specificati in formato 'percorso=percorsoOrigine' + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 41c714765e..9e123e4fbb 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -7232,6 +7232,26 @@ 無効なパス マップです。マッピングはコンマ区切りの 'path=sourcePath' 形式である必要があります + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index d5e39b707f..c4352b737f 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -7232,6 +7232,26 @@ 잘못된 경로 맵입니다. 매핑은 쉼표로 구분되어야 하며 'path=sourcePath' 형식이어야 합니다. + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index f6adb36605..e72b419562 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -7232,6 +7232,26 @@ Nieprawidłowe mapowanie ścieżek. Mapowania muszą być rozdzielone przecinkami i mieć format „path=sourcePath” + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index fb7ecf72ed..79962f4b69 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -7232,6 +7232,26 @@ Mapa de caminho inválido. Os mapeamentos devem ser separados por vírgulas e do formato 'path=sourcePath' + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 9e23c9d63d..c58bc13972 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -7232,6 +7232,26 @@ Недействительная карта путей. Сопоставления должны быть разделены запятыми и должны иметь формат "path=исходный_путь" + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 7a1b995890..7b42b3b34d 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -7232,6 +7232,26 @@ Geçersiz yol eşlemesi. Eşlemeler virgülle ayrılmış ve 'path=sourcePath' biçiminde olmalıdır + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 6b9a080dcc..67acd81a6c 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -7232,6 +7232,26 @@ 路径映射无效。映射必须以逗号分隔,且采用 "path=sourcePath" 格式 + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index f9dd3cc6dd..c8481cb4b5 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -7232,6 +7232,26 @@ 路徑對應無效。對應必須以逗號分隔,且格式應為 'path=sourcePath' + + Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or diretory containing a design time tool (Short form: -t) + + + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + + + + {0} + {0} + + + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} + + \ No newline at end of file diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 95aa5c5a31..e1c7ad85e0 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -1,11 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace Internal.Utilities + open System +open System.Diagnostics open System.IO open System.Reflection -open Microsoft.Win32 open System.Runtime.InteropServices +open Microsoft.Win32 +open Microsoft.FSharp.Core #nowarn "44" // ConfigurationSettings is obsolete but the new stuff is horribly complicated. @@ -25,7 +28,7 @@ module internal FSharpEnvironment = let versionOf<'t> = typeof<'t>.Assembly.GetName().Version.ToString() - let FSharpCoreLibRunningVersion = + let FSharpCoreLibRunningVersion = try match versionOf with | null -> None | "" -> None @@ -163,7 +166,7 @@ module internal FSharpEnvironment = if String.IsNullOrEmpty(locationFromAppConfig) then None else - let exeAssemblyFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + let exeAssemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) let locationFromAppConfig = locationFromAppConfig.Replace("{exepath}", exeAssemblyFolder) System.Diagnostics.Debug.Print(sprintf "Using path %s" locationFromAppConfig) Some locationFromAppConfig @@ -176,9 +179,10 @@ module internal FSharpEnvironment = // - default F# binaries directory in service.fs (REVIEW: check this) // - default location of fsi.exe in FSharp.VS.FSI.dll (REVIEW: check this) // - default F# binaries directory in (project system) Project.fs - let BinFolderOfDefaultFSharpCompiler(probePoint:string option) = + let BinFolderOfDefaultFSharpCompiler(probePoint:string option) = #if FX_NO_WIN_REGISTRY ignore probePoint + #if FX_NO_APP_DOMAINS Some System.AppContext.BaseDirectory #else @@ -190,15 +194,17 @@ module internal FSharpEnvironment = try // FSharp.Compiler support setting an appkey for compiler location. I've never seen this used. let result = tryAppConfig "fsharp-compiler-location" - match result with - | Some _ -> result + match result with + | Some _ -> result | None -> let safeExists f = (try File.Exists(f) with _ -> false) + // Look in the probePoint if given, e.g. look for a compiler alongside of FSharp.Build.dll match probePoint with | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p | _ -> + // We let you set FSHARP_COMPILER_BIN. I've rarely seen this used and its not documented in the install instructions. let result = System.Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN") if not (String.IsNullOrEmpty(result)) then @@ -206,18 +212,17 @@ module internal FSharpEnvironment = else // For the prototype compiler, we can just use the current domain tryCurrentDomain() - with e -> - None + with e -> None // Apply the given function to the registry entry corresponding to the subkey. // The reg key is disposed at the end of the scope. let useKey subkey f = let key = Registry.LocalMachine.OpenSubKey subkey - try f key - finally - match key with - | null -> () + try f key + finally + match key with + | null -> () | _ -> key.Dispose() // Check if the framework version 4.5 or above is installed at the given key entry @@ -243,3 +248,112 @@ module internal FSharpEnvironment = major > 4 || (major = 4 && IsNetFx45OrAboveInstalled) #endif + + // Specify the tooling-compatible fragments of a path such as: + // typeproviders/fsharp41/net461/MyProvider.DesignTime.dll + // tools/fsharp41/net461/MyProvider.DesignTime.dll + // See https://github.com/Microsoft/visualfsharp/issues/3736 + + // Represents the F#-compiler <-> type provider protocol. + // When the API or protocol updates, add a new version moniker to the front of the list here. + let toolingCompatibleTypeProviderProtocolMonikers() = + [ "fsharp41" ] + + // Detect the host tooling context + let toolingCompatibleVersions = + if typeof.Assembly.GetName().Name = "mscorlib" then + [| "net48"; "net472"; "net471";"net47";"net462";"net461"; "net452"; "net451"; "net45"; "netstandard2.0" |] + elif typeof.Assembly.GetName().Name = "System.Private.CoreLib" then + [| "netcoreapp3.0"; "netstandard2.1"; "netcoreapp2.2"; "netcoreapp2.1"; "netstandard2.0" |] + else + System.Diagnostics.Debug.Assert(false, "Couldn't determine runtime tooling context, assuming it supports at least .NET Standard 2.0") + [| "netstandard2.0" |] + + let toolPaths = [| "tools"; "typeproviders" |] + + let toolingCompatiblePaths() = [ + for toolPath in toolPaths do + for protocol in toolingCompatibleTypeProviderProtocolMonikers() do + for netRuntime in toolingCompatibleVersions do + yield Path.Combine(toolPath, protocol, netRuntime) + ] + + let rec searchToolPaths path compilerToolPaths = + seq { + let searchToolPath path = + seq { + yield path + for toolPath in toolingCompatiblePaths() do + yield Path.Combine (path, toolPath) + } + + for toolPath in compilerToolPaths do + yield! searchToolPath toolPath + + match path with + | None -> () + | Some path -> yield! searchToolPath path + } + + let getTypeProviderAssembly (runTimeAssemblyFileName: string, designTimeAssemblyName: string, compilerToolPaths: string list, raiseError) = + // Find and load the designer assembly for the type provider component. + // We look in the directories stepping up from the location of the runtime assembly. + let loadFromLocation designTimeAssemblyPath = + try + printfn "Using: %s" designTimeAssemblyPath + Some (Assembly.UnsafeLoadFrom designTimeAssemblyPath) + with e -> + raiseError e + + let rec searchParentDirChain path assemblyName = + seq { + match path with + | None -> () + | Some (p:string) -> + match Path.GetDirectoryName(p) with + | s when s = "" || s = null || Path.GetFileName(p) = "packages" || s = p -> () + | parentDir -> yield! searchParentDirChain (Some parentDir) assemblyName + + for p in searchToolPaths path compilerToolPaths do + let fileName = Path.Combine (p, assemblyName) + if File.Exists fileName then yield fileName + } + + let loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeAssemblyName = + let runTimeAssemblyPath = Path.GetDirectoryName runTimeAssemblyFileName + let paths = searchParentDirChain (Some runTimeAssemblyPath) designTimeAssemblyName + paths + |> Seq.iter(function res -> printfn ">>>> %s" res) + paths + |> Seq.tryHead + |> function + | Some res -> loadFromLocation res + | None -> + // The search failed, just load from the first location and report an error + let runTimeAssemblyPath = Path.GetDirectoryName runTimeAssemblyFileName + loadFromLocation (Path.Combine (runTimeAssemblyPath, designTimeAssemblyName)) + + printfn "=============== S T A R T ==========================================" + if designTimeAssemblyName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) then + loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeAssemblyName + else + // Cover the case where the ".dll" extension has been left off and no version etc. has been used in the assembly + // string specification. The Name=FullName comparison is particularly strange, and was there to support + // design-time DLLs specified using "x.DesignTIme, Version= ..." long assembly names and GAC loads. + // These kind of design-time assembly specifications are no longer used to our knowledge so that comparison is basically legacy + // and will always succeed. + let name = AssemblyName (Path.GetFileNameWithoutExtension designTimeAssemblyName) + if name.Name.Equals(name.FullName, StringComparison.OrdinalIgnoreCase) then + let designTimeFileName = designTimeAssemblyName + ".dll" + loadFromParentDirRelativeToRuntimeAssemblyLocation designTimeFileName + else + // Load from the GAC using Assembly.Load. This is legacy since type provider design-time components are + // never in the GAC these days and "x.DesignTIme, Version= ..." specifications are never used. + try + let name = AssemblyName designTimeAssemblyName + Some (Assembly.Load (name)) + with e -> + raiseError e + + let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths = + searchToolPaths None compilerToolPaths diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx new file mode 100644 index 0000000000..2c30ed8ff1 --- /dev/null +++ b/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx @@ -0,0 +1,6 @@ +//Package manager key 'unk' was not registered +//Processing of a script fragment has stopped because an exception has been raised + +#r "unk: blubblub" + +let x = 1 \ No newline at end of file diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst b/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst index 1380330716..f18e59e67d 100644 --- a/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst +++ b/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst @@ -165,3 +165,6 @@ NOMONO SOURCE=Regressions01.fs COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo" SOURCE=..\\Misc\\ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\"" # RelativeHashRResolution03_fscrelativesimple SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\"" # RelativeHashRResolution04_fscrelativesimple SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\"" # RelativeHashRResolution05_fscrelativesimple + +# dependency managers +SOURCE="UnknownDependencyManager\\script1.fsx" COMPILE_ONLY=1 FSIMODE=FEED SCFLAGS="--nologo" # with unknown manager \ No newline at end of file diff --git a/vsintegration/Directory.Build.targets b/vsintegration/Directory.Build.targets index bc5c6d7195..3b8426ebd2 100644 --- a/vsintegration/Directory.Build.targets +++ b/vsintegration/Directory.Build.targets @@ -7,6 +7,8 @@ + + diff --git a/vsintegration/Utils/LanguageServiceProfiling/Options.fs b/vsintegration/Utils/LanguageServiceProfiling/Options.fs index b3f8c1633f..8777ce42fc 100644 --- a/vsintegration/Utils/LanguageServiceProfiling/Options.fs +++ b/vsintegration/Utils/LanguageServiceProfiling/Options.fs @@ -189,7 +189,6 @@ let FCS (repositoryDir: string) : Options = @"src\fsharp\service\ServiceParamInfoLocations.fs" @"src\fsharp\service\ServiceUntypedParse.fsi" @"src\fsharp\service\ServiceUntypedParse.fs" - @"src\utils\reshapedmsbuild.fs" @"src\fsharp\SimulatedMSBuildReferenceResolver.fs" @"src\fsharp\service\FSharpCheckerResults.fsi" @"src\fsharp\service\FSharpCheckerResults.fs" diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index 68b8b5e112..1d2074f907 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -84,6 +84,16 @@ True TargetFramework=$(DependencyTargetFramework) + + FSharp.DependencyManager + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=net472 + {DED3BBD7-53F4-428A-8C9F-27968E768605} FSharp.Core @@ -282,5 +292,4 @@ - diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs index 8c22810bb0..be8401a613 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs @@ -62,13 +62,19 @@ type UsingMSBuild() as this = member private this.VerifyErrorListCountAtOpenProject(fileContents : string, num : int) = let (solution, project, file) = this.CreateSingleFileProject(fileContents) let errorList = GetErrors(project) + let errorTexts = new System.Text.StringBuilder() for error in errorList do printfn "%A" error.Severity - printf "%s\n" (error.ToString()) - if (num = errorList.Length) then - () - else - failwithf "The error list number is not the expected %d" num + let s = error.ToString() + errorTexts.AppendLine s |> ignore + printf "%s\n" s + + if num <> errorList.Length then + failwithf "The error list number is not the expected %d but %d%s%s" + num + errorList.Length + System.Environment.NewLine + (errorTexts.ToString()) //Verify the warning list Count member private this.VerifyWarningListCountAtOpenProject(fileContents : string, expectedNum : int, ?addtlRefAssy : list) = From 5801a62f1b48a4807f118699ed912868b4fd40df Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 24 Jul 2019 00:42:15 -0700 Subject: [PATCH 014/214] Dependency Manager --- src/fsharp/FSComp.txt | 2 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.de.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.es.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.fr.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.it.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.ja.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.ko.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.pl.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.ru.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.tr.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 4 ++-- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 4 ++-- .../CompilerOptions/fsc/help/help40.437.1033.bsl | 10 ++++++---- .../CompilerOptions/fsi/exename/help40.437.1033.bsl | 13 ++++++++----- .../fsi/help/help40-nologo.437.1033.bsl | 13 ++++++++----- .../CompilerOptions/fsi/help/help40.437.1033.bsl | 13 ++++++++----- tests/fsharpqa/Source/comparer.fsx | 9 ++++++++- 19 files changed, 65 insertions(+), 47 deletions(-) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 3831657afe..da326dff52 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -846,7 +846,7 @@ optsNoOpt,"Only include optimization information essential for implementing inli optsNoInterface,"Don't add a resource to the generated assembly containing F#-specific metadata" optsSig,"Print the inferred interface of the assembly to a file" optsReference,"Reference an assembly (Short form: -r)" -optsCompilerTool,"Reference an assembly or diretory containing a design time tool (Short form: -t)" +optsCompilerTool,"Reference an assembly or directory containing a design time tool (Short form: -t)" optsWin32res,"Specify a Win32 resource file (.res)" optsWin32manifest,"Specify a Win32 manifest file" optsNowin32manifest,"Do not include the default Win32 manifest" diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 40e47daac0..6554ebd205 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 8f6f10ef07..e9811413eb 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index ace695efe2..bc8b093014 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index d277428f94..1aef9280a6 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index a8d164ef75..fcf355bab6 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 9e123e4fbb..67dfb69d2c 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index c4352b737f..b544d13575 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index e72b419562..af587422d8 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 79962f4b69..e0ff35d651 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index c58bc13972..2ef69e6668 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 7b42b3b34d..6d8f68511a 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 67acd81a6c..46782990b1 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index c8481cb4b5..33316c6a13 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -7233,8 +7233,8 @@ - Reference an assembly or diretory containing a design time tool (Short form: -t) - Reference an assembly or diretory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl index 10c8c7f82c..2ef3abcd84 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -1,4 +1,4 @@ -Microsoft (R) F# Compiler version 10.2.3 for F# 4.5 +Microsoft (R) F# Compiler version 10.6.0.0 for F# 4.7 Copyright (c) Microsoft Corporation. All Rights Reserved. @@ -40,9 +40,11 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - INPUT FILES - ---reference: Reference an assembly (Short form: -r) ---compilertool: Reference an assembly or diretory containing a - design time tool (Short form: -t) +--reference: Reference an assembly (Short form: + -r) +--compilertool: Reference an assembly or directory + containing a design time tool (Short + form: -t) - RESOURCES - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl index 6ef6b0dce9..cf97598d92 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl @@ -6,11 +6,14 @@ Usage: fsharpi [script.fsx []] --use: Use the given file on startup as initial input --load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) ---compilertool: Reference an assembly or diretory containing a - design time tool (Short form: -t) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--reference: Reference an assembly (Short form: + -r) +--compilertool: Reference an assembly or directory + containing a design time tool (Short + form: -t) +-- ... Treat remaining arguments as command + line arguments, accessed using + fsi.CommandLineArgs - CODE GENERATION - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl index 1634f470cb..230f23f0f9 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl @@ -6,11 +6,14 @@ Usage: fsi.exe [script.fsx []] --use: Use the given file on startup as initial input --load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) ---compilertool: Reference an assembly or diretory containing a - design time tool (Short form: -t) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--reference: Reference an assembly (Short form: + -r) +--compilertool: Reference an assembly or directory + containing a design time tool (Short + form: -t) +-- ... Treat remaining arguments as command + line arguments, accessed using + fsi.CommandLineArgs - CODE GENERATION - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl index eadbc4755f..9e8af92856 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl @@ -8,11 +8,14 @@ Usage: fsi.exe [script.fsx []] --use: Use the given file on startup as initial input --load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) ---compilertool: Reference an assembly or diretory containing a - design time tool (Short form: -t) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--reference: Reference an assembly (Short form: + -r) +--compilertool: Reference an assembly or directory + containing a design time tool (Short + form: -t) +-- ... Treat remaining arguments as command + line arguments, accessed using + fsi.CommandLineArgs - CODE GENERATION - diff --git a/tests/fsharpqa/Source/comparer.fsx b/tests/fsharpqa/Source/comparer.fsx index 26bff8cb78..3832c61c73 100644 --- a/tests/fsharpqa/Source/comparer.fsx +++ b/tests/fsharpqa/Source/comparer.fsx @@ -17,7 +17,14 @@ let f2 = File2List fn2 let mutable i = 0 let compare (f1:string[]) (f2:string[]) = - if f1.Length <> f2.Length then failwithf "Help text did not match. f1.Length = %d, f2.Length = %d, Check you have right fsi on path. fsi = %s, PATH=%s" f1.Length f2.Length arg0 path + if f1.Length <> f2.Length then + printfn "First" + f1 |> Array.iter (fun a -> printfn "%s" a) + printfn "Second" + f2 |> Array.iter (fun a -> printfn "%s" a) + + printfn "Files different lengths" + failwithf "Help text did not match.\nf1.Length = %d, f2.Length = %d, Check you have right fsi on path.\nfsi = %s,\nPATH=%s" f1.Length f2.Length arg0 path (f1, f2) ||> Array.forall2 (fun (a:string) (b:string) -> let replace (sourcepattern:string) (replacement:string) (str:string) : string = From e56960677aa2f6c0a5562bf7e0226891f7f3b84e Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 24 Jul 2019 13:12:28 -0700 Subject: [PATCH 015/214] back to almost working -- needs a ton of work --- .../FSharp.DependencyManager.Utilities.fs | 83 ++++++++++--------- .../FSharp.DependencyManager.fs | 3 +- 2 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 5353ff1be2..729933c254 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -48,40 +48,42 @@ module Utilities = with _ -> None // Latest documentation about nuget tfms is here: https://docs.microsoft.com/en-us/nuget/schema/target-frameworks + // Todo: now that .net472 is the minimum supported version we should consider revisiting this table let netCoreAppTFM = [| - 2.2m, ".NETCoreApp,Version=v2.2"; - 2.2m, ".NETStandard,Version=v2.2"; - 2.1m, ".NETCoreApp,Version=v2.1"; - 2.0m, ".NETStandard,Version=v2.0"; - 2.0m, ".NETCoreApp,Version=v2.0"; - 1.0m, ".NETStandard,Version=v1.6"; - 1.0m, ".NETStandard,Version=v1.5"; - 1.0m, ".NETStandard,Version=v1.4"; - 1.0m, ".NETStandard,Version=v1.3"; - 1.0m, ".NETStandard,Version=v1.2"; - 1.0m, ".NETStandard,Version=v1.1"; - 1.0m, ".NETStandard,Version=v1.0"; + 3.0m, ".NETCoreApp,Version=v3.0", "netcoreapp3.0"; + 2.2m, ".NETCoreApp,Version=v2.2", "netcoreapp2.2"; + 2.2m, ".NETStandard,Version=v2.1", "netstandard2.1"; + 2.1m, ".NETCoreApp,Version=v2.1", "netstandard2.1"; + 2.0m, ".NETStandard,Version=v2.0", "netstandard2.0"; + 2.0m, ".NETCoreApp,Version=v2.0", "netstandard2.0"; + 1.0m, ".NETStandard,Version=v1.6", "netstandard1.6"; + 1.0m, ".NETStandard,Version=v1.5", "netstandard1.5"; + 1.0m, ".NETStandard,Version=v1.4", "netstandard1.4"; + 1.0m, ".NETStandard,Version=v1.3", "netstandard1.3"; + 1.0m, ".NETStandard,Version=v1.2", "netstandard1.2"; + 1.0m, ".NETStandard,Version=v1.1", "netstandard1.1"; + 1.0m, ".NETStandard,Version=v1.0", "netstandard1.0"; |] let netDesktopTFM = [| - 0.472m, ".NETFramework,Version=v4.7.2"; - 0.471m, ".NETFramework,Version=v4.7.1"; - 0.47m, ".NETFramework,Version=v4.7"; - 0.47m, ".NETStandard,Version=v2.0"; - 0.462m, ".NETFramework,Version=v4.6.2"; - 0.462m, ".NETStandard,Version=v1.6"; - 0.461m, ".NETFramework,Version=v4.6.1"; - 0.461m, ".NETStandard,Version=v1.5"; - 0.46m, ".NETFramework,Version=v4.6"; - 0.46m, ".NETStandard,Version=v1.4"; - 0.452m, ".NETFramework,Version=v4.5.2"; - 0.452m, ".NETStandard,Version=v1.3"; - 0.451m, ".NETFramework,Version=v4.51"; - 0.451m, ".NETStandard,Version=v1.2"; - 0.45m, ".NETFramework,Version=v4.5"; - 0.45m, ".NETStandard,Version=v1.1"; - 0.45m, ".NETStandard,Version=v1.0"; - 0.40m, ".NETFramework,Version=v4"; + 0.472m, ".NETFramework,Version=v4.7.2", "net472"; + 0.471m, ".NETFramework,Version=v4.7.1", "net471"; + 0.47m, ".NETFramework,Version=v4.7", "net47"; + 0.47m, ".NETStandard,Version=v2.0", "netstandard2.0"; + 0.462m, ".NETFramework,Version=v4.6.2", "net462"; + 0.462m, ".NETStandard,Version=v1.6", "netstandard1.6"; + 0.461m, ".NETFramework,Version=v4.6.1", "net461"; + 0.461m, ".NETStandard,Version=v1.5", "netstandard1.5"; + 0.46m, ".NETFramework,Version=v4.6", "net46"; + 0.46m, ".NETStandard,Version=v1.4", "netstandard1.4"; + 0.452m, ".NETFramework,Version=v4.5.2", "net452"; + 0.452m, ".NETStandard,Version=v1.3", "netstandard1.3"; + 0.451m, ".NETFramework,Version=v4.51", "net451"; + 0.451m, ".NETStandard,Version=v1.2", "netstandard1.2"; + 0.45m, ".NETFramework,Version=v4.5", "net45"; + 0.45m, ".NETStandard,Version=v1.1", "netstandard1.1"; + 0.45m, ".NETStandard,Version=v1.0", "netstandard1.0"; + 0.40m, ".NETFramework,Version=v4", "net4"; |] let desktopProductVersionMonikers = [| @@ -99,7 +101,8 @@ module Utilities = |] let defaultMscorlibVersion = 4, 6, 1055, 0 // Probably needs configuring - let defaultFrameworkName = ".NETFramework,Version=v4.6.1" + let defaultFrameworkName = ".NETFramework,Version=v4.7.2" + let defaultTargetFramework = "net472" let netCoreAppPrefix = ".NETCoreApp,Version=v" let netStandardPrefix = ".NETStandard,Version=v" @@ -115,10 +118,10 @@ module Utilities = let executionTFMs = seq { let netStandardsFromVersion version = - netCoreAppTFM |> Seq.filter(fun (ver,_) -> version >= ver) |> Seq.map(fun (_,moniker) -> moniker) |> Seq.toArray + netCoreAppTFM |> Seq.filter(fun (ver,_,_) -> version >= ver) |> Seq.map(fun (_,moniker, targetFramework) -> moniker, targetFramework) |> Seq.toArray let netDesktopsFromVersion version = - netDesktopTFM |> Seq.filter(fun (ver,_) -> version >= ver) |> Seq.map(fun (_,moniker) -> moniker) |> Seq.toArray + netDesktopTFM |> Seq.filter(fun (ver,_,_) -> version >= ver) |> Seq.map(fun (_,moniker, targetFramework) -> moniker, targetFramework) |> Seq.toArray match context with | Some ctxt -> @@ -128,6 +131,7 @@ module Utilities = elif target.StartsWith(netStandardPrefix) then yield! (netStandardsFromVersion (Decimal.Parse(target.Substring(netStandardPrefix.Length)))) | None -> + // Todo: needs looking at let fileMajorPart, fileMinorPart, fileBuildPart, filePrivatePart = try let attrOpt = typeof.GetTypeInfo().Assembly.GetCustomAttributes(typeof) |> Seq.tryHead @@ -155,12 +159,12 @@ module Utilities = yield! (netDesktopsFromVersion version) } |> Seq.distinct |> Seq.toArray - let frameworkIdentifier, frameworkVersion = - let frameworkName = + let frameworkIdentifier, frameworkVersion, targetFramework = + let frameworkName, targetFramework = match executionTFMs |> Array.tryHead with - | Some tfm -> new FrameworkName(tfm) - | None -> new FrameworkName(defaultFrameworkName) - frameworkName.Identifier, frameworkName.Version + | Some (tfm, targetFramework) -> new FrameworkName(tfm), targetFramework + | None -> new FrameworkName(defaultFrameworkName), defaultTargetFramework + frameworkName.Identifier, frameworkName.Version, targetFramework /// Return a string array delimited by commas /// Note that a quoted string is not going to be mangled into pieces. @@ -320,8 +324,7 @@ namespace lib" let generateProjectBody = @" - $(TARGETFRAMEWORKIDENTIFIER) - v$(TARGETFRAMEWORKVERSION) + $(TARGETFRAMEWORK) false diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs index 9d83f61cb4..cbfb3fc855 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs @@ -134,8 +134,7 @@ type [] FSharpDependencyManager (outputDir:string op let fsProjectPath = Path.Combine(scriptsPath, "Project.fsproj") let generateProjBody = - generateProjectBody.Replace("$(TARGETFRAMEWORKIDENTIFIER)", frameworkIdentifier) - .Replace("$(TARGETFRAMEWORKVERSION)", frameworkVersion.ToString()) + generateProjectBody.Replace("$(TARGETFRAMEWORK)", targetFramework) .Replace("$(PACKAGEREFERENCES)", packageReferences) writeFile (Path.Combine(scriptsPath, "Library.fs")) generateLibrarySource From fe6c1a06f5c989beaa779985991255137fcf5cc0 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 24 Jul 2019 21:32:10 -0700 Subject: [PATCH 016/214] Use target framework from host --- src/fsharp/DependencyManager.Integration.fs | 13 +- src/fsharp/DependencyManager.Integration.fsi | 2 +- src/fsharp/DotNetFrameworkDependencies.fs | 54 ++++++- .../FSharp.Compiler.Private.fsproj | 9 +- .../FSharp.DependencyManager.Utilities.fs | 143 +----------------- .../FSharp.DependencyManager.fs | 6 +- 6 files changed, 65 insertions(+), 162 deletions(-) diff --git a/src/fsharp/DependencyManager.Integration.fs b/src/fsharp/DependencyManager.Integration.fs index e899bc7bcf..07b2c323ea 100644 --- a/src/fsharp/DependencyManager.Integration.fs +++ b/src/fsharp/DependencyManager.Integration.fs @@ -8,6 +8,7 @@ open System.Reflection open System.IO open FSharp.Compiler.ErrorLogger open Internal.Utilities.FSharpEnvironment +open FSharp.Compiler.DotNetFrameworkDependencies // Contract strings let dependencyManagerPattern = "*DependencyManager*.dll" @@ -61,7 +62,7 @@ module ReflectionHelper = type internal IDependencyManagerProvider = abstract Name : string abstract Key: string - abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq -> bool * string list * string list + abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq * tfm: string -> bool * string list * string list [] type ReferenceType = @@ -78,7 +79,7 @@ type ReflectionDependencyManagerProvider(theType: Type, nameProperty: PropertyIn match ReflectionHelper.getAttributeNamed theType dependencyManagerAttributeName, ReflectionHelper.getInstanceProperty theType namePropertyName, ReflectionHelper.getInstanceProperty theType keyPropertyName, - ReflectionHelper.getInstanceMethod theType [|typeof;typeof;typeof;typeof;|] resolveDependenciesMethodName + ReflectionHelper.getInstanceMethod theType [| typeof; typeof; typeof; typeof; typeof |] resolveDependenciesMethodName with | None, _, _, _ -> None | _, None, _, _ -> None @@ -90,8 +91,8 @@ type ReflectionDependencyManagerProvider(theType: Type, nameProperty: PropertyIn interface IDependencyManagerProvider with member __.Name = instance |> nameProperty member __.Key = instance |> keyProperty - member __.ResolveDependencies(scriptDir, mainScriptName, scriptName, packageManagerTextLines) = - let arguments = [| box scriptDir; box mainScriptName; box scriptName; box packageManagerTextLines |] + member __.ResolveDependencies(scriptDir, mainScriptName, scriptName, packageManagerTextLines, tfm) = + let arguments = [| box scriptDir; box mainScriptName; box scriptName; box packageManagerTextLines; box tfm |] resolveDeps.Invoke(instance, arguments) :?> _ // Resolution Path = Location of FSharp.Compiler.Private.dll @@ -174,9 +175,7 @@ let tryFindDependencyManagerByKey (compilerTools: string list) (outputDir:string let resolve (packageManager:IDependencyManagerProvider) implicitIncludeDir mainScriptName fileName m packageManagerTextLines = try - let result, loadScripts, additionalIncludeFolders = - packageManager.ResolveDependencies(implicitIncludeDir, mainScriptName, fileName, packageManagerTextLines) - Some(result, loadScripts, additionalIncludeFolders) + Some(packageManager.ResolveDependencies(implicitIncludeDir, mainScriptName, fileName, packageManagerTextLines, executionTfm)) with e -> let e = ReflectionHelper.stripTieWrapper e errorR(Error(FSComp.SR.packageManagerError(e.Message), m)) diff --git a/src/fsharp/DependencyManager.Integration.fsi b/src/fsharp/DependencyManager.Integration.fsi index e61d37064c..fa68ac8840 100644 --- a/src/fsharp/DependencyManager.Integration.fsi +++ b/src/fsharp/DependencyManager.Integration.fsi @@ -9,7 +9,7 @@ open System type IDependencyManagerProvider = abstract Name : string abstract Key: string - abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq -> bool * string list * string list + abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq * tfm: string -> bool * string list * string list [] type ReferenceType = diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 3d8e33082c..a24f093c34 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -78,7 +78,9 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies | false, false -> String.Compare(suffix1, suffix2, StringComparison.InvariantCultureIgnoreCase) with _ -> 0 - let executionTfm = + // Tries to figure out the tfm for the compiler instance. + // On coreclr it uses the deps.json file + let netcoreTfm = let file = try let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") @@ -104,9 +106,53 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies | _, -1 -> None | pos, length -> Some ("netcoreapp" + file.Substring(pos, length)) + // Tries to figure out the tfm for the compiler instance on the Windows desktop. + // On full clr it uses the mscorlib version number + let getWindowsDesktopTfm () = + let defaultMscorlibVersion = 4,8,3815,0 + let desktopProductVersionMonikers = [| + // major, minor, build, revision, moniker + 4, 8, 3815, 0, "net48" + 4, 7, 3190, 0, "net472" + 4, 7, 2600, 0, "net471" + 4, 7, 2053, 0, "net47" + 4, 6, 1590, 0, "net462" + 4, 6, 1055, 0, "net461" + 4, 6, 81, 0, "net46" + 4, 0, 30319, 34209, "net452" + 4, 0, 30319, 18408, "net451" + 4, 0, 30319, 17929, "net45" + 4, 0, 30319, 1, "net4" + |] + + let majorPart, minorPart, buildPart, privatePart= + try + let attrOpt = typeof.Assembly.GetCustomAttributes(typeof) |> Seq.tryHead + match attrOpt with + | Some attr -> + let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) + fv.[0], fv.[1], fv.[2], fv.[3] + | _ -> defaultMscorlibVersion + with _ -> defaultMscorlibVersion + + // Get the ProductVersion of this framework compare with table yield compatible monikers + let _, _, _, _, moniker = + desktopProductVersionMonikers + |> Array.find (fun (major, minor, build, revision, _) -> + (majorPart >= major) && + (minorPart >= minor) && + (buildPart >= build) && + (privatePart >= revision)) + moniker + + /// Gets the tfm E.g netcore3.0, net472 + let executionTfm = + match netcoreTfm with + | Some tfm -> tfm + | _ -> getWindowsDesktopTfm () let getFrameworkRefsPackDirectoryPath = - match executionTfm with + match netcoreTfm with | Some _ -> let appRefDir = Path.Combine(getFSharpCompilerLocation, "../../../packs/Microsoft.NETCore.App.Ref") if Directory.Exists(appRefDir) then @@ -123,7 +169,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies | _ -> false let getFrameworkRefsPackDirectory = - match executionTfm, getFrameworkRefsPackDirectoryPath with + match netcoreTfm, getFrameworkRefsPackDirectoryPath with | Some tfm, Some appRefDir -> try let refDirs = Directory.GetDirectories(appRefDir) @@ -132,8 +178,6 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies with | _ -> None | _ -> None - - let getDependenciesOf assemblyReferences = let assemblies = new Dictionary() diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj index 3e74a2d936..8710d929be 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj @@ -516,17 +516,16 @@ CodeGen\IlxGen.fs + + + Driver\DotNetFrameworkDependencies.fs + Driver\DependencyManager.Integration.fsi Driver\DependencyManager.Integration.fs - - - - Driver\DotNetFrameworkDependencies.fs - Driver\CompileOps.fsi diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 729933c254..0e1cfd90d3 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -25,151 +25,12 @@ type DependencyManagerAttribute() = inherit System.Attribute() module Utilities = - let private context = - try - match (Assembly.GetEntryAssembly()) with - | null -> - // No entry assembly therefore look for fsi.exe/fsc.exe alongside this assembly - let loadAssembly path = - let asm = Assembly.LoadFrom(path) - DependencyContext.Load(asm) - // If there is no entry assembly then we assume try fsi.exe, then fsc.exe` - let location = typeof.GetTypeInfo().Assembly.Location - let pathToFsiExe = Path.Combine(Path.GetDirectoryName(location), "fsi.exe") - if File.Exists(pathToFsiExe) then - loadAssembly pathToFsiExe |> Option.ofObj - else - let pathToFscExe = Path.Combine(Path.GetDirectoryName(location), "fsc.exe") - if File.Exists(pathToFscExe) then - loadAssembly pathToFscExe |> Option.ofObj - else - None - | asm -> DependencyContext.Load(asm) |> Option.ofObj - with _ -> None - - // Latest documentation about nuget tfms is here: https://docs.microsoft.com/en-us/nuget/schema/target-frameworks - // Todo: now that .net472 is the minimum supported version we should consider revisiting this table - let netCoreAppTFM = [| - 3.0m, ".NETCoreApp,Version=v3.0", "netcoreapp3.0"; - 2.2m, ".NETCoreApp,Version=v2.2", "netcoreapp2.2"; - 2.2m, ".NETStandard,Version=v2.1", "netstandard2.1"; - 2.1m, ".NETCoreApp,Version=v2.1", "netstandard2.1"; - 2.0m, ".NETStandard,Version=v2.0", "netstandard2.0"; - 2.0m, ".NETCoreApp,Version=v2.0", "netstandard2.0"; - 1.0m, ".NETStandard,Version=v1.6", "netstandard1.6"; - 1.0m, ".NETStandard,Version=v1.5", "netstandard1.5"; - 1.0m, ".NETStandard,Version=v1.4", "netstandard1.4"; - 1.0m, ".NETStandard,Version=v1.3", "netstandard1.3"; - 1.0m, ".NETStandard,Version=v1.2", "netstandard1.2"; - 1.0m, ".NETStandard,Version=v1.1", "netstandard1.1"; - 1.0m, ".NETStandard,Version=v1.0", "netstandard1.0"; - |] - - let netDesktopTFM = [| - 0.472m, ".NETFramework,Version=v4.7.2", "net472"; - 0.471m, ".NETFramework,Version=v4.7.1", "net471"; - 0.47m, ".NETFramework,Version=v4.7", "net47"; - 0.47m, ".NETStandard,Version=v2.0", "netstandard2.0"; - 0.462m, ".NETFramework,Version=v4.6.2", "net462"; - 0.462m, ".NETStandard,Version=v1.6", "netstandard1.6"; - 0.461m, ".NETFramework,Version=v4.6.1", "net461"; - 0.461m, ".NETStandard,Version=v1.5", "netstandard1.5"; - 0.46m, ".NETFramework,Version=v4.6", "net46"; - 0.46m, ".NETStandard,Version=v1.4", "netstandard1.4"; - 0.452m, ".NETFramework,Version=v4.5.2", "net452"; - 0.452m, ".NETStandard,Version=v1.3", "netstandard1.3"; - 0.451m, ".NETFramework,Version=v4.51", "net451"; - 0.451m, ".NETStandard,Version=v1.2", "netstandard1.2"; - 0.45m, ".NETFramework,Version=v4.5", "net45"; - 0.45m, ".NETStandard,Version=v1.1", "netstandard1.1"; - 0.45m, ".NETStandard,Version=v1.0", "netstandard1.0"; - 0.40m, ".NETFramework,Version=v4", "net4"; - |] - - let desktopProductVersionMonikers = [| - // major, minor, build, revision, moniker - 4, 7, 3190, 0, 0.472m; - 4, 7, 2600, 0, 0.471m; - 4, 7, 2053, 0, 0.47m; - 4, 6, 1590, 0, 0.462m; - 4, 6, 1055, 0, 0.461m; - 4, 6 , 81, 0, 0.46m; - 4, 0, 30319, 34209, 0.452m; - 4, 0, 30319, 18408, 0.451m; - 4, 0, 30319, 17929, 0.45m; - 4, 0, 30319, 1, 0.40m; - |] - - let defaultMscorlibVersion = 4, 6, 1055, 0 // Probably needs configuring - let defaultFrameworkName = ".NETFramework,Version=v4.7.2" - let defaultTargetFramework = "net472" - let netCoreAppPrefix = ".NETCoreApp,Version=v" - let netStandardPrefix = ".NETStandard,Version=v" - - // Algorithm: - // This returns a prioritized the list of supported tfms for the executing application - // the first entry is the most appropriate. - // On windows desktop the windows tfm that matches the installed dotnet framework version is the best match, followed by the highest supported netstandard dll - // E.g. - // Priority search for net471 looks like: - // net471;netstandard2.0;net47;net462;netstandard1.6;net461;netstandard1.5;net46;netstandard1.4;net452;netstandard1.3;net451;netstandard1.2;net45;netstandard1.1;net40;netstandard1.0 - // Priority for .NetCoreApp 2.1 looks like: - // netstandard2.0;netstandard1.6;netstandard1.5;netstandard1.4;netstandard1.3;netstandard1.2;netstandard1.1;netstandard1.0 - let executionTFMs = - seq { - let netStandardsFromVersion version = - netCoreAppTFM |> Seq.filter(fun (ver,_,_) -> version >= ver) |> Seq.map(fun (_,moniker, targetFramework) -> moniker, targetFramework) |> Seq.toArray - - let netDesktopsFromVersion version = - netDesktopTFM |> Seq.filter(fun (ver,_,_) -> version >= ver) |> Seq.map(fun (_,moniker, targetFramework) -> moniker, targetFramework) |> Seq.toArray - - match context with - | Some ctxt -> - let target = ctxt.Target.Framework.ToString() - if target.StartsWith(netCoreAppPrefix) then - yield! (netStandardsFromVersion (Decimal.Parse(target.Substring(netCoreAppPrefix.Length)))) - elif target.StartsWith(netStandardPrefix) then - yield! (netStandardsFromVersion (Decimal.Parse(target.Substring(netStandardPrefix.Length)))) - | None -> - // Todo: needs looking at - let fileMajorPart, fileMinorPart, fileBuildPart, filePrivatePart = - try - let attrOpt = typeof.GetTypeInfo().Assembly.GetCustomAttributes(typeof) |> Seq.tryHead - match attrOpt with - | Some attr -> - let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) - fv.[0], fv.[1], fv.[2], fv.[3] - | _ -> defaultMscorlibVersion - with _ -> defaultMscorlibVersion - - // Get the ProductVersion of this framework compare with table yield compatible monikers - for majorPart, minorPart, buildPart, privatePart, version in desktopProductVersionMonikers do - if fileMajorPart < majorPart then () - elif fileMajorPart > majorPart then - yield! (netDesktopsFromVersion version) - elif fileMinorPart < minorPart then () - elif fileMinorPart > minorPart then - yield! (netDesktopsFromVersion version) - elif fileBuildPart < buildPart then () - elif fileBuildPart = 30319 && filePrivatePart < privatePart then () - elif fileBuildPart = 30319 && filePrivatePart > privatePart then - yield! (netDesktopsFromVersion version) - elif fileBuildPart < buildPart then () - else - yield! (netDesktopsFromVersion version) - } |> Seq.distinct |> Seq.toArray - - let frameworkIdentifier, frameworkVersion, targetFramework = - let frameworkName, targetFramework = - match executionTFMs |> Array.tryHead with - | Some (tfm, targetFramework) -> new FrameworkName(tfm), targetFramework - | None -> new FrameworkName(defaultFrameworkName), defaultTargetFramework - frameworkName.Identifier, frameworkName.Version, targetFramework - /// Return a string array delimited by commas /// Note that a quoted string is not going to be mangled into pieces. let trimChars = [| ' '; '\t'; '\''; '\"' |] + let inline private isNotQuotedQuotation (text: string) n = n > 0 && text.[n-1] <> '\\' + let getOptions text = let split (option:string) = let pos = option.IndexOf('=') diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs index cbfb3fc855..3318487f9a 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs @@ -75,7 +75,7 @@ type [] FSharpDependencyManager (outputDir:string op member __.Key = key - member __.ResolveDependencies(_scriptDir:string, _mainScriptName:string, _scriptName:string, packageManagerTextLines:string seq) : bool * string list * string list = + member __.ResolveDependencies(_scriptDir:string, _mainScriptName:string, _scriptName:string, packageManagerTextLines:string seq, tfm: string) : bool * string list * string list = let packageReferences, binLogging = let validatePackageName package packageName = @@ -134,7 +134,7 @@ type [] FSharpDependencyManager (outputDir:string op let fsProjectPath = Path.Combine(scriptsPath, "Project.fsproj") let generateProjBody = - generateProjectBody.Replace("$(TARGETFRAMEWORK)", targetFramework) + generateProjectBody.Replace("$(TARGETFRAMEWORK)", tfm) .Replace("$(PACKAGEREFERENCES)", packageReferences) writeFile (Path.Combine(scriptsPath, "Library.fs")) generateLibrarySource @@ -148,4 +148,4 @@ type [] FSharpDependencyManager (outputDir:string op succeeded, fsx, List.empty - generateAndBuildProjectArtifacts \ No newline at end of file + generateAndBuildProjectArtifacts From 0bfe4ca1ea6d5d61859c7559160bb3636ff494c8 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 24 Jul 2019 23:01:12 -0700 Subject: [PATCH 017/214] Support Language Version switch --- src/fsharp/CompileOps.fs | 27 ++++++++++++++++++--------- src/fsharp/FSComp.txt | 3 ++- src/fsharp/LanguageFeatures.fs | 2 ++ src/fsharp/LanguageFeatures.fsi | 1 + src/fsharp/fsi/fsi.fs | 14 ++++++++++---- src/fsharp/xlf/FSComp.txt.cs.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.de.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.es.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.fr.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.it.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.ja.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.ko.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.pl.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.ru.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.tr.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 5 +++++ src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 5 +++++ 18 files changed, 98 insertions(+), 14 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index be0c451398..3b36764683 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -3167,8 +3167,8 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = else resultingResolutions, unresolvedReferences |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference - member tcConfig.PrimaryAssemblyDllReference() = primaryAssemblyReference + member tcConfig.CoreLibraryDllReference() = fslibReference @@ -4841,7 +4841,7 @@ let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file) = let tcEnv = (tcEnv, asms) ||> List.fold (fun tcEnv asm -> AddCcuToTcEnv(g, amap, m, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes)) tcEnv, (dllinfos, asms) -let ProcessMetaCommandsFromInput +let ProcessMetaCommandsFromInput (nowarnF: 'state -> range * string -> 'state, dllRequireF: 'state -> range * string -> 'state, packageRequireF: 'state -> DependencyManagerIntegration.IDependencyManagerProvider * range * string -> 'state, @@ -4874,21 +4874,30 @@ let ProcessMetaCommandsFromInput List.fold (fun state d -> nowarnF state (m,d)) state numbers | ParsedHashDirective(("reference" | "r"),args,m) -> - if not canHaveScriptMetaCommands then + if not canHaveScriptMetaCommands then errorR(HashReferenceNotAllowedInNonScript m) - match args with - | [path] -> - matchedm<-m + + match args with + | [path] -> + matchedm <- m match DependencyManagerIntegration.tryFindDependencyManagerInPath tcConfig.compilerToolPaths tcConfig.outputDir m (path:string) with - | DependencyManagerIntegration.ReferenceType.RegisteredDependencyManager packageManager -> - packageRequireF state (packageManager,m,path) + | DependencyManagerIntegration.ReferenceType.RegisteredDependencyManager packageManager -> + if tcConfig.langVersion.SupportsFeature(LanguageFeature.PackageManagement) then + packageRequireF state (packageManager,m,path) + else + errorR(Error(FSComp.SR.packageManagementRequiresVFive(), m)) + state + + // #r "Assembly" | DependencyManagerIntegration.ReferenceType.Library path -> dllRequireF state (m,path) + | DependencyManagerIntegration.ReferenceType.UnknownType -> state // error already reported - | _ -> + | _ -> errorR(Error(FSComp.SR.buildInvalidHashrDirective(), m)) state + | ParsedHashDirective("load", args, m) -> if not canHaveScriptMetaCommands then errorR(HashDirectiveNotAllowedInNonScript m) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index da326dff52..d63334f7ce 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1477,4 +1477,5 @@ fSharpBannerVersion,"%s for F# %s" optsLangVersion,"Display the allowed values for language version, specify language version such as 'latest' or 'preview'" optsSupportedLangVersions,"Supported language versions:" nativeResourceFormatError,"Stream does not begin with a null resource and is not in '.RES' format." -nativeResourceHeaderMalformed,"Resource header beginning at offset %s is malformed." \ No newline at end of file +nativeResourceHeaderMalformed,"Resource header beginning at offset %s is malformed." +3302,packageManagementRequiresVFive,"The package management feature requires language version 5.0 use /langversion:preview" diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index fa35a465dc..b387b6b7f1 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -26,6 +26,7 @@ type LanguageFeature = | NameOf = 6 | ImplicitYield = 7 | OpenStaticClasses = 8 + | PackageManagement = 9 | LanguageVersion46 = 0x10046 | LanguageVersion47 = 0x10047 | LanguageVersion50 = 0x10050 @@ -58,6 +59,7 @@ type LanguageVersion (specifiedVersion) = LanguageFeature.NameOf, previewVersion LanguageFeature.ImplicitYield, languageVersion47 LanguageFeature.OpenStaticClasses, previewVersion + LanguageFeature.PackageManagement, previewVersion |] let specified = diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index 1610f1af18..a55d084976 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -13,6 +13,7 @@ type LanguageFeature = | NameOf = 6 | ImplicitYield = 7 | OpenStaticClasses = 8 + | PackageManagement = 9 | LanguageVersion46 = 0x10046 | LanguageVersion47 = 0x10047 | LanguageVersion50 = 0x10050 diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 23f0a790ac..034037c66c 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1835,7 +1835,7 @@ type internal FsiInteractionProcessor /// Execute a single parsed interaction. Called on the GUI/execute/main thread. let ExecInteraction (ctok, tcConfig:TcConfig, istate, action:ParsedFsiInteraction, errorLogger: ErrorLogger) = - istate |> InteractiveCatch errorLogger (fun istate -> + istate |> InteractiveCatch errorLogger (fun istate -> match action with | IDefns ([ ],_) -> let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) @@ -1855,12 +1855,18 @@ type internal FsiInteractionProcessor | IHash (ParsedHashDirective(("reference" | "r"), [path], m), _) -> match DependencyManagerIntegration.tryFindDependencyManagerInPath tcConfigB.compilerToolPaths tcConfigB.outputDir m (path:string) with - | DependencyManagerIntegration.ReferenceType.RegisteredDependencyManager packageManager -> - fsiDynamicCompiler.EvalDependencyManagerTextFragment(packageManager, m, path) - istate,Completed None + | DependencyManagerIntegration.ReferenceType.RegisteredDependencyManager packageManager -> + if tcConfig.langVersion.SupportsFeature(LanguageFeature.PackageManagement) then + fsiDynamicCompiler.EvalDependencyManagerTextFragment(packageManager, m, path) + istate,Completed None + else + errorR(Error(FSComp.SR.packageManagementRequiresVFive(), m)) + istate, Completed None + | DependencyManagerIntegration.ReferenceType.UnknownType -> // error already reported istate,Completed None + | DependencyManagerIntegration.ReferenceType.Library path -> let resolutions,istate = fsiDynamicCompiler.EvalRequireReference(ctok, istate, m, path) resolutions |> List.iter (fun ar -> diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 6554ebd205..acaa95f576 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -22,6 +22,11 @@ Nerozpoznaná hodnota {0} pro parametr --langversion; seznam možností zobrazíte zadáním --langversion:? + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Neočekávaný symbol . v definici členu. Očekávalo se with, = nebo jiný token. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index e9811413eb..bd0dd57d5e 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -22,6 +22,11 @@ Unbekannter Wert "{0}" für "--langversion". Verwenden Sie "--langversion:?", um die vollständige Liste anzuzeigen. + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Unerwartetes Symbol "." in der Memberdefinition. Erwartet wurde "with", "=" oder ein anderes Token. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index bc8b093014..300c2033d3 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -22,6 +22,11 @@ Valor no reconocido "{0}" para --langversion, use --langversion:? para una lista completa + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Símbolo inesperado "." en la definición de miembro. Se esperaba "with", "=" u otro token. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 1aef9280a6..a6b1dfb42d 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -22,6 +22,11 @@ Valeur non reconnue '{0}' pour --langversion use --langversion:? pour la liste complète + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Symbole '.' inattendu dans la définition du membre. 'with','=' ou autre jeton attendu. diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index fcf355bab6..3cba5dd8a9 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -22,6 +22,11 @@ Valore '{0}' non riconosciuto per --langversion. Per l'elenco completo usare --langversion:? + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Simbolo '.' imprevisto nella definizione di membro. È previsto 'with', '=' o un altro token. diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 67dfb69d2c..52a0775c44 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -22,6 +22,11 @@ --langversion の値 '{0}' が認識されません。完全なリストについては、--langversion:? を使用してください + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. メンバー定義に予期しない記号 '.' があります。'with'、'=' またはその他のトークンが必要です。 diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index b544d13575..85d54c8612 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -22,6 +22,11 @@ 전체 목록에 대한 --langversion use --langversion:?의 인식할 수 없는 값 '{0}'입니다. + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. 멤버 정의의 예기치 않은 기호 '.'입니다. 'with', '=' 또는 기타 토큰이 필요합니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index af587422d8..f8baf0166a 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -22,6 +22,11 @@ Nierozpoznana wartość „{0}” dla parametru –langversion; podaj parametr –langversion:?, aby uzyskać pełną listę + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Nieoczekiwany symbol „.” w definicji składowej. Oczekiwano ciągu „with”, znaku „=” lub innego tokenu. diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index e0ff35d651..e32cf949c6 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -22,6 +22,11 @@ Valor não reconhecido '{0}' para --langversion use --langversion:? para a lista completa + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Símbolo inesperado '.' na definição de membro. Esperado 'com', '=' ou outro token. diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 2ef69e6668..90106eda12 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -22,6 +22,11 @@ Не удалось распознать значение "{0}" для параметра --langversion. Для получения полного списка допустимых значений выполните команду use --langversion:? + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Неожиданный символ "." в определении члена. Ожидаемые инструкции: "with", "=" или другие токены. diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 6d8f68511a..77b4d7bfdb 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -22,6 +22,11 @@ --langversion için '{0}' değeri tanınmıyor. Tam liste için --langversion:? kullanın + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. Üye tanımında '.' sembolü beklenmiyordu. 'with', '=' veya başka bir belirteç bekleniyordu. diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 46782990b1..b3a9e8e354 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -22,6 +22,11 @@ --langversion 的值“{0}”无法识别,使用 --langversion:? 获取完整列表。 + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. 成员定义中有意外的符号 "."。预期 "with"、"+" 或其他标记。 diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 33316c6a13..71aef5083e 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -22,6 +22,11 @@ 對 --langversion 為無法識別的值 '{0}',對完整清單使用 --langversion:? + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. 成員定義中的非預期符號 '.'。預期為 'with'、'=' 或其他語彙基元。 From 78bfdacb2f9e4b97dfa038cdc136ac1ce5858fa0 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 25 Jul 2019 17:36:22 -0700 Subject: [PATCH 018/214] remove extra fsi --- FSharp.sln | 1 - 1 file changed, 1 deletion(-) diff --git a/FSharp.sln b/FSharp.sln index afa7434153..f37e21fbe0 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -18,7 +18,6 @@ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Interactive.Settings", "src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsi", "src\fsharp\fsi\fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fsi", "src\fsharp\fsi\Fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FsiAnyCPU", "src\fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" ProjectSection(ProjectDependencies) = postProject From 0fcfe1507649cc02874a635555edfe9063fa540d Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 25 Jul 2019 23:32:49 -0700 Subject: [PATCH 019/214] Fix build --- FSharp.sln | 7 ++--- .../FSharp.Compiler.Service.fsproj | 6 +--- src/fsharp/DotNetFrameworkDependencies.fs | 14 ++++++---- .../ProductVersion.fs | 28 ------------------- 4 files changed, 13 insertions(+), 42 deletions(-) diff --git a/FSharp.sln b/FSharp.sln index f37e21fbe0..1f83d5a639 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -13,13 +13,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CFE3259A EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Build", "src\fsharp\FSharp.Build\FSharp.Build.fsproj", "{702A7979-BCF9-4C41-853E-3ADFC9897890}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fsc", "src\fsharp\Fsc\Fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fsc", "src\fsharp\fsc\fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Interactive.Settings", "src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsi", "src\fsharp\fsi\fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FsiAnyCPU", "src\fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FsiAnyCpu", "src\fsharp\fsiAnyCpu\fsiAnyCpu.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" ProjectSection(ProjectDependencies) = postProject {649FA588-F02E-457C-9FCF-87E46407481E} = {649FA588-F02E-457C-9FCF-87E46407481E} EndProjectSection @@ -28,8 +28,6 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharpSuite.Tests", "tests\ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.UnitTests", "tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj", "{A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Tests.FSharpSuite", "tests\fsharp\FSharp.Tests.FSharpSuite.fsproj", "{4E7B9500-6DEF-4C33-BF18-246F7E2C0BC6}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core.UnitTests", "tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj", "{88E2D422-6852-46E3-A740-83E391DC7973}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compiler", "Compiler", "{3881429D-A97A-49EB-B7AE-A82BA5FE9C77}" @@ -47,6 +45,7 @@ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer", "src\fsharp\FSharp.Compiler.LanguageServer\FSharp.Compiler.LanguageServer.fsproj", "{99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{C97819B0-B428-4B96-9CD7-497D2D1C738C}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{8B7BF62E-7D8C-4928-BE40-4E392A9EE851}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{6771860A-614D-4FDD-A655-4C70EBCC91B0}" diff --git a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index 8bd7cf8f50..50a3077291 100644 --- a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -1,5 +1,4 @@ - - + @@ -519,9 +518,6 @@ Driver\DotNetFrameworkDependencies.fs - - - Driver\DependencyManager.Integration.fsi Driver/DependencyManager.Integration.fsi diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index a24f093c34..fb59fd6bc6 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -83,11 +83,15 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let netcoreTfm = let file = try - let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") - if File.Exists(depsJsonPath) then - File.ReadAllText(depsJsonPath) - else - "" + let asm = Assembly.GetEntryAssembly() + match asm with + | null -> "" + | asm -> + let depsJsonPath = Path.ChangeExtension(asm.Location, "deps.json") + if File.Exists(depsJsonPath) then + File.ReadAllText(depsJsonPath) + else + "" with _ -> "" let tfmPrefix=".NETCoreApp,Version=v" diff --git a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs index 84d05f43e3..1da55436d2 100644 --- a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs +++ b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs @@ -85,31 +85,3 @@ module ProductVersionTest = let ``should zero starting from first invalid version part`` () = for (v, expected) in invalidValues() do v |> productVersionToILVersionInfo |> Assert.areEqual expected - -module TypeProviderDesignTimeComponentLoading = - - - [] - let ``check tooling paths for type provider design time component loading`` () = - let expected = - [ -#if NET472 // only available on net472 - Path.Combine("typeproviders", "fsharp41", "net461") - Path.Combine("tools", "fsharp41", "net461") - Path.Combine("typeproviders", "fsharp41", "net452") - Path.Combine("tools", "fsharp41", "net452") - Path.Combine("typeproviders", "fsharp41", "net451") - Path.Combine("tools", "fsharp41", "net451") - Path.Combine("typeproviders", "fsharp41", "net45") - Path.Combine("tools", "fsharp41", "net45") -#else // only available on netcoreapp2.0 - Path.Combine("typeproviders", "fsharp41", "netcoreapp2.0") - Path.Combine("tools", "fsharp41", "netcoreapp2.0") -#endif // available in both - Path.Combine("typeproviders", "fsharp41", "netstandard2.0") - Path.Combine("tools", "fsharp41", "netstandard2.0") - ] - let actual = FSharp.Compiler.ExtensionTyping.toolingCompatiblePaths() - printfn "actual = %A" actual - printfn "expected = %A" expected - Assert.True((expected=actual)) From c3763d3e9f811e97c90d77acfc115880b315a174 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Mon, 9 Sep 2019 15:38:36 -0700 Subject: [PATCH 020/214] Redo solution --- VisualFSharp.sln | 29 ++++++++++--------- src/fsharp/xlf/FSComp.txt.es.xlf | 2 +- ...osoft.VisualStudio.Editors.Designer.cs.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.de.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.es.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.fr.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.it.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.ja.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.ko.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.pl.xlf | 3 +- ...ft.VisualStudio.Editors.Designer.pt-BR.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.ru.xlf | 3 +- ...osoft.VisualStudio.Editors.Designer.tr.xlf | 3 +- ....VisualStudio.Editors.Designer.zh-Hans.xlf | 3 +- ....VisualStudio.Editors.Designer.zh-Hant.xlf | 3 +- 15 files changed, 42 insertions(+), 28 deletions(-) diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 01ab8ed78a..f2e9539283 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -153,7 +153,8 @@ EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{20B7BC36-CF51-4D75-9E13-66681C07977F}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{09F56540-AFA5-4694-B7A6-0DBF6D4618C2}" -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{DFA30881-C0B1-4813-B087-C21B5AF9B77F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -897,18 +898,18 @@ Global {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|Any CPU.Build.0 = Release|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|x86.ActiveCfg = Release|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|x86.Build.0 = Release|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|x86.ActiveCfg = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Debug|x86.Build.0 = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|Any CPU.Build.0 = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|x86.ActiveCfg = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Proto|x86.Build.0 = Debug|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|Any CPU.Build.0 = Release|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|x86.ActiveCfg = Release|Any CPU - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E}.Release|x86.Build.0 = Release|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Debug|x86.ActiveCfg = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Debug|x86.Build.0 = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Proto|Any CPU.Build.0 = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Proto|x86.ActiveCfg = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Proto|x86.Build.0 = Debug|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|Any CPU.Build.0 = Release|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|x86.ActiveCfg = Release|Any CPU + {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -981,7 +982,7 @@ Global {79255A92-ED00-40BA-9D64-12FCC664A976} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {F0CB2C0F-4EBF-4E9C-A484-D9C30441757E} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {DFA30881-C0B1-4813-B087-C21B5AF9B77F} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48EDBBBE-C8EE-4E3C-8B19-97184A487B37} diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 300c2033d3..5764280f15 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -164,7 +164,7 @@ All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devolvió un valor de tipo "{0}", pero esta rama devolvió un valor de tipo "\{1 \}". + All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf index b071e0c5f7..5340031907 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 4184f3edc5..2ca4bd450e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf index 4b1a5e0d90..394481ad69 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf index 99d3469919..821545638e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf index 8902030751..dd58cb9a11 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf index de4d65e71f..c0221174d9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf index e7191ac3c4..6f540b5425 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf index 6936b8e97f..f912b6b4c7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf index fefd197867..5a2b75dce0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf index 355d363084..2b5303d91d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf index 86ac32f4b3..73a72b806a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf index 0537632d5f..474f99a3dc 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf index 17c64ffefb..16b7339b2a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" From 5167f6420a81f2fbe475ba7033d889306bff6f14 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Mon, 9 Sep 2019 16:48:51 -0700 Subject: [PATCH 021/214] remove pdb from nuget package. --- .../Microsoft.FSharp.Compiler.nuspec | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec index 53918b8020..6a9e32442c 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec @@ -50,16 +50,9 @@ - + - - - - - - - + target="lib\netcoreapp2.1" /> @@ -75,6 +68,7 @@ - + From f1341a2eb2e89b8e36228cef968db7a425136be8 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 10 Sep 2019 10:53:07 -0700 Subject: [PATCH 022/214] return the last-computed value when evaluating script code (#7524) * return the last-computed value when evaluating script code * manually track last produced value * set last value on all branches --- src/fsharp/fsi/fsi.fs | 16 +++++++++------- .../FSharpScriptTests.fs | 8 ++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 56e5a51ce4..e362431dd0 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1137,6 +1137,7 @@ type internal FsiDynamicCompiler let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } // Find all new declarations the EvaluationListener + let mutable lastValue = None try let contents = FSharpAssemblyContents(tcGlobals, tcState.Ccu, Some tcState.CcuSig, tcImports, declaredImpls) let contentFile = contents.ImplementationFiles.[0] @@ -1161,20 +1162,21 @@ type internal FsiDynamicCompiler let symbol = FSharpSymbol.Create(cenv, v.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) + lastValue <- fsiValueOpt | FSharpImplementationFileDeclaration.Entity (e,_) -> // Report a top-level module or namespace definition let symbol = FSharpSymbol.Create(cenv, e.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, e.DeclarationLocation) fsi.TriggerEvaluation (None, symbolUse, decl) + lastValue <- None | FSharpImplementationFileDeclaration.InitAction _ -> // Top level 'do' bindings are not reported as incremental declarations - () + lastValue <- None | _ -> () with _ -> () - newState - - + newState, Completed lastValue + /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = let tcConfig = TcConfig.Create (tcConfigB, validate=false) @@ -1184,7 +1186,7 @@ type internal FsiDynamicCompiler let defs = fsiDynamicCompiler.BuildItBinding expr // Evaluate the overall definitions. - let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) + let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) |> fst // Snarf the type for 'it' via the binding match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with | NameResolution.Item.Value vref -> @@ -1791,7 +1793,7 @@ type internal FsiInteractionProcessor | IDefns ([ SynModuleDecl.DoExpr(_,expr,_)],_) -> fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) | IDefns (defs,_) -> - fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs),Completed None + fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs) | IHash (ParsedHashDirective("load",sourceFiles,m),_) -> fsiDynamicCompiler.EvalSourceFiles (ctok, istate, m, sourceFiles, lexResourceManager, errorLogger),Completed None @@ -2089,7 +2091,7 @@ type internal FsiInteractionProcessor /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are /// JIT'ed and ready for use. member __.LoadDummyInteraction(ctok, errorLogger) = - setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []), Completed None) |> fst) + setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index bd37650d33..c73add4775 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -29,6 +29,14 @@ type InteractiveTests() = Assert.AreEqual(typeof, value.ReflectionType) Assert.AreEqual(2, value.ReflectionValue :?> int) + [] + member __.``Declare and eval object value``() = + use script = new FSharpScript() + let opt = script.Eval("let x = 1 + 2\r\nx") |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual(3, value.ReflectionValue :?> int) + [] member __.``Capture console input``() = use script = new FSharpScript(captureInput=true) From d48fb59bcf1f6f39089206d42f61ad140558e33b Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 11 Sep 2019 12:57:00 -0700 Subject: [PATCH 023/214] Fix for missing deps.json --- src/fsharp/DotNetFrameworkDependencies.fs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index fb59fd6bc6..d040a2b744 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -17,6 +17,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let frameworkDir = Path.GetDirectoryName(typeof.Assembly.Location) let getDefaultFSharpCoreReference = typeof.Assembly.Location let getFSharpCompilerLocation = Path.GetDirectoryName(typeof.Assembly.Location) + let isRunningOnCoreClr = (typeof.Assembly).FullName = "System.Private.CoreLib" // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) @@ -107,8 +108,16 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies else -1 match startPos, length with | -1, _ - | _, -1 -> None - | pos, length -> Some ("netcoreapp" + file.Substring(pos, length)) + | _, -1 -> + if isRunningOnCoreClr then + // Running on coreclr but no deps.json was deployed with the host so default to 3.0 + Some "netcoreapp3.0" + else + // Running on desktop + None + | pos, length -> + // use value from the deps.json file + Some ("netcoreapp" + file.Substring(pos, length)) // Tries to figure out the tfm for the compiler instance on the Windows desktop. // On full clr it uses the mscorlib version number From f1a8f7beca63bb4cb82a00fc9f89e4219726c31a Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 11 Sep 2019 15:40:44 -0700 Subject: [PATCH 024/214] add event every time `#r` is invoked (#7537) add event every time `#r` is invoked --- .../FSharpScript.fs | 2 ++ src/fsharp/fsi/fsi.fs | 8 ++++++ src/fsharp/fsi/fsi.fsi | 3 +++ .../FSharpScriptTests.fs | 25 +++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 4f9bce020a..d09c1bb6b0 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -32,6 +32,8 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) + member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + member __.ProvideInput = stdin.ProvideInput member __.OutputProduced = outputProduced.Publish diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index e362431dd0..94081a4f11 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1713,6 +1713,8 @@ type internal FsiInteractionProcessor let referencedAssemblies = Dictionary() + let assemblyReferencedEvent = Control.Event() + let mutable currState = initialInteractiveState let event = Control.Event() let setCurrState s = currState <- s; event.Trigger() @@ -1815,6 +1817,7 @@ type internal FsiInteractionProcessor FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) else FSIstrings.SR.fsiDidAHashrWithLockWarning(ar.resolvedPath) + assemblyReferencedEvent.Trigger(ar.resolvedPath) fsiConsoleOutput.uprintnfnn "%s" format) istate,Completed None @@ -2230,6 +2233,8 @@ type internal FsiInteractionProcessor let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, checker, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState) fsiInteractiveChecker.ParseAndCheckInteraction(ctok, SourceText.ofString text) + member __.AssemblyReferenceAdded = assemblyReferencedEvent.Publish + //---------------------------------------------------------------------------- // Server mode: @@ -2628,6 +2633,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i fsiInteractionProcessor.EvalScript(ctok, scriptPath, errorLogger) |> commitResultNonThrowing errorOptions scriptPath errorLogger |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs + + /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. + member __.AssemblyReferenceAdded = fsiInteractionProcessor.AssemblyReferenceAdded /// Performs these steps: /// - Load the dummy interaction, if any diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 918afe85f9..2897e36484 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -227,6 +227,9 @@ type FsiEvaluationSession = /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr member ReportUnhandledException : exn: exn -> unit + /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. + member AssemblyReferenceAdded : IEvent + /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. /// diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index c73add4775..82c9c1f329 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -3,6 +3,7 @@ namespace FSharp.Compiler.Scripting.UnitTests open System +open System.IO open System.Threading open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.Scripting @@ -65,3 +66,27 @@ type InteractiveTests() = let value = opt.Value Assert.AreEqual(typeof, value.ReflectionType) Assert.AreEqual(5, value.ReflectionValue :?> int) + + [] + member __.``Assembly reference event successful``() = + use script = new FSharpScript() + let testAssembly = "System.dll" + let mutable assemblyResolveEventCount = 0 + let mutable foundAssemblyReference = false + Event.add (fun (assembly: string) -> + assemblyResolveEventCount <- assemblyResolveEventCount + 1 + foundAssemblyReference <- String.Compare(testAssembly, Path.GetFileName(assembly), StringComparison.OrdinalIgnoreCase) = 0) + script.AssemblyReferenceAdded + script.Eval(sprintf "#r \"%s\"" testAssembly) |> ignoreValue + Assert.AreEqual(1, assemblyResolveEventCount) + Assert.True(foundAssemblyReference) + + [] + member __.``Assembly reference event unsuccessful``() = + use script = new FSharpScript() + let testAssembly = "not-an-assembly-that-can-be-found.dll" + let mutable foundAssemblyReference = false + Event.add (fun _ -> foundAssemblyReference <- true) script.AssemblyReferenceAdded + let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) + Assert.AreEqual(1, errors.Length) + Assert.False(foundAssemblyReference) From 05329e3c6544767477424eefc36b6ada0f852d90 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 11 Sep 2019 20:34:21 -0700 Subject: [PATCH 025/214] assembly name --- src/fsharp/DotNetFrameworkDependencies.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index d040a2b744..a85f58bbf4 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -17,7 +17,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let frameworkDir = Path.GetDirectoryName(typeof.Assembly.Location) let getDefaultFSharpCoreReference = typeof.Assembly.Location let getFSharpCompilerLocation = Path.GetDirectoryName(typeof.Assembly.Location) - let isRunningOnCoreClr = (typeof.Assembly).FullName = "System.Private.CoreLib" + let isRunningOnCoreClr = (typeof.Assembly).FullName.StartsWith("System.Private.CoreLib", StringComparison.InvariantCultureIgnoreCase) // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) From 43da1d7a500044ead05203f9faf462bb8706756b Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 12 Sep 2019 13:25:41 -0700 Subject: [PATCH 026/214] oops --- src/fsharp/fsi/fsi.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 609bec7fe3..6a781002ab 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1850,7 +1850,7 @@ type internal FsiInteractionProcessor | IDefns (defs,_) -> let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) - fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs),Completed None + fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs) | IHash (ParsedHashDirective("load",sourceFiles,m),_) -> let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) @@ -1887,8 +1887,8 @@ type internal FsiInteractionProcessor FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) else FSIstrings.SR.fsiDidAHashrWithLockWarning(ar.resolvedPath) - assemblyReferencedEvent.Trigger(ar.resolvedPath) - fsiConsoleOutput.uprintnfnn "%s" format) + assemblyReferencedEvent.Trigger(ar.resolvedPath) + fsiConsoleOutput.uprintnfnn "%s" format) istate,Completed None | IHash (ParsedHashDirective("I",[path],m),_) -> From 171948e107a9b004e5dbc87e0f2a9d3e7299599b Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 13 Sep 2019 15:33:11 -0700 Subject: [PATCH 027/214] move fsi assembly reference event to fsharp5 (#7556) * add event every time `#r` is invoked * move assembly reference event source to occur in all cases --- src/fsharp/CompileOps.fs | 10 ++++++-- src/fsharp/CompileOps.fsi | 2 +- .../FSharpScript.fs | 2 ++ .../FSharp.DependencyManager.Utilities.fs | 5 +--- src/fsharp/fsi/fsi.fs | 9 ++++++- src/fsharp/fsi/fsi.fsi | 3 +++ .../FSharpScriptTests.fs | 25 +++++++++++++++++++ 7 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index fb7d4ad428..973ded04dd 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -4818,7 +4818,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. -let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file) = +let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file, assemblyReferenceAdded: string -> unit) = let resolutions = CommitOperationResult(tcImports.TryResolveAssemblyReference(ctok, AssemblyReference(m, file, None), ResolveAssemblyReferenceMode.ReportErrors)) let dllinfos, ccuinfos = tcImports.RegisterAndImportReferencedAssemblies(ctok, resolutions) |> Cancellable.runWithoutCancellation @@ -4829,7 +4829,13 @@ let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file) = let g = tcImports.GetTcGlobals() let amap = tcImports.GetImportMap() - let tcEnv = (tcEnv, asms) ||> List.fold (fun tcEnv asm -> AddCcuToTcEnv(g, amap, m, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes)) + let buildTcEnv tcEnv asm = + let tcEnv = AddCcuToTcEnv(g, amap, m, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) + match asm.FSharpViewOfMetadata.FileName with + | Some asmPath -> assemblyReferenceAdded asmPath + | None -> () + tcEnv + let tcEnv = (tcEnv, asms) ||> List.fold buildTcEnv tcEnv, (dllinfos, asms) let ProcessMetaCommandsFromInput diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 7e5f2b4a1d..6e8af5f26a 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -682,7 +682,7 @@ val WriteOptimizationData: TcGlobals * filename: string * inMem: bool * CcuThunk /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. -val RequireDLL: CompilationThreadToken * TcImports * TcEnv * thisAssemblyName: string * referenceRange: range * file: string -> TcEnv * (ImportedBinary list * ImportedAssembly list) +val RequireDLL: CompilationThreadToken * TcImports * TcEnv * thisAssemblyName: string * referenceRange: range * file: string * assemblyReferenceAdded: (string -> unit) -> TcEnv * (ImportedBinary list * ImportedAssembly list) /// Processing # commands val ProcessMetaCommandsFromInput : diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 4f9bce020a..d09c1bb6b0 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -32,6 +32,8 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) + member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + member __.ProvideInput = stdin.ProvideInput member __.OutputProduced = outputProduced.Publish diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 0e1cfd90d3..8b05633d7d 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -73,10 +73,7 @@ module Utilities = // Path to the directory containing the fsharp compilers let fsharpCompilerPath = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) - let isRunningOnCoreClr = - // We are running on dotnet core if the executing application has .runtimeconfig.json - let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") - File.Exists(depsJsonPath) + let isRunningOnCoreClr = (typeof.Assembly).FullName.StartsWith("System.Private.CoreLib", StringComparison.InvariantCultureIgnoreCase) let isWindows = match Environment.OSVersion.Platform with diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 034037c66c..43b7c6a40e 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -959,6 +959,8 @@ type internal FsiDynamicCompiler let outfile = "TMPFSCI.exe" let assemblyName = "FSI-ASSEMBLY" + let assemblyReferenceAddedEvent = Control.Event() + let mutable fragmentId = 0 let mutable prevIt : ValRef option = None @@ -1244,7 +1246,7 @@ type internal FsiDynamicCompiler let tcState = istate.tcState let tcEnv,(_dllinfos,ccuinfos) = try - RequireDLL (ctok, tcImports, tcState.TcEnvFromImpls, assemblyName, m, path) + RequireDLL (ctok, tcImports, tcState.TcEnvFromImpls, assemblyName, m, path, assemblyReferenceAddedEvent.Trigger) with e -> tcConfigB.RemoveReferencedAssemblyByPath(m,path) reraise() @@ -1381,6 +1383,8 @@ type internal FsiDynamicCompiler member __.FormatValue(obj:obj, objTy) = valuePrinter.FormatValue(obj, objTy) + member __.AssemblyReferenceAdded = assemblyReferenceAddedEvent.Publish + //---------------------------------------------------------------------------- // ctrl-c handling //---------------------------------------------------------------------------- @@ -2697,6 +2701,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i fsiInteractionProcessor.EvalScript(ctok, scriptPath, errorLogger) |> commitResultNonThrowing errorOptions scriptPath errorLogger |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs + + /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. + member __.AssemblyReferenceAdded = fsiDynamicCompiler.AssemblyReferenceAdded /// Performs these steps: /// - Load the dummy interaction, if any diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 918afe85f9..2897e36484 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -227,6 +227,9 @@ type FsiEvaluationSession = /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr member ReportUnhandledException : exn: exn -> unit + /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. + member AssemblyReferenceAdded : IEvent + /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. /// diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index bd37650d33..dfd66473f0 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -3,6 +3,7 @@ namespace FSharp.Compiler.Scripting.UnitTests open System +open System.IO open System.Threading open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.Scripting @@ -57,3 +58,27 @@ type InteractiveTests() = let value = opt.Value Assert.AreEqual(typeof, value.ReflectionType) Assert.AreEqual(5, value.ReflectionValue :?> int) + + [] + member __.``Assembly reference event successful``() = + use script = new FSharpScript() + let testAssembly = "System.dll" + let mutable assemblyResolveEventCount = 0 + let mutable foundAssemblyReference = false + Event.add (fun (assembly: string) -> + assemblyResolveEventCount <- assemblyResolveEventCount + 1 + foundAssemblyReference <- String.Compare(testAssembly, Path.GetFileName(assembly), StringComparison.OrdinalIgnoreCase) = 0) + script.AssemblyReferenceAdded + script.Eval(sprintf "#r \"%s\"" testAssembly) |> ignoreValue + Assert.AreEqual(1, assemblyResolveEventCount) + Assert.True(foundAssemblyReference) + + [] + member __.``Assembly reference event unsuccessful``() = + use script = new FSharpScript() + let testAssembly = "not-an-assembly-that-can-be-found.dll" + let mutable foundAssemblyReference = false + Event.add (fun _ -> foundAssemblyReference <- true) script.AssemblyReferenceAdded + let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) + Assert.AreEqual(1, errors.Length) + Assert.False(foundAssemblyReference) From b7b25e62e768292c68d3771da5a2c64d003b2dc1 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 13 Sep 2019 19:05:27 -0700 Subject: [PATCH 028/214] allow nuget references from script host (#7561) --- .../FSharp.Compiler.Private.Scripting.fsproj | 1 + .../FSharp.Compiler.Private.Scripting.nuspec | 2 ++ .../FSharp.Compiler.Private.Scripting/FSharpScript.fs | 6 ++++-- .../FSharp.Compiler.Private.Scripting.UnitTests.fsproj | 1 + .../FSharpScriptTests.fs | 9 +++++++++ 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj index 710cf8a8e5..381f63d27b 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj @@ -21,6 +21,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec index dac8f0c240..72ef7d95e9 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -14,5 +14,7 @@ + + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index d09c1bb6b0..a7d24b3c9c 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.Scripting open System open FSharp.Compiler.Interactive.Shell -type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = +type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: string[]) as this = let outputProduced = Event() let errorProduced = Event() @@ -17,6 +17,7 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = do stderr.LineWritten.Add errorProduced.Trigger let captureInput = defaultArg captureInput false let captureOutput = defaultArg captureOutput false + let additionalArgs = defaultArg additionalArgs [||] let savedInput = Console.In let savedOutput = Console.Out let savedError = Console.Error @@ -29,7 +30,8 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = ())() let config = FsiEvaluationSession.GetDefaultConfiguration() - let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] + let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] + let argv = Array.append baseArgs additionalArgs let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj index 51beecf2af..0f4e92e5df 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -17,6 +17,7 @@ + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 82c9c1f329..5fd0cfd622 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -90,3 +90,12 @@ type InteractiveTests() = let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) Assert.AreEqual(1, errors.Length) Assert.False(foundAssemblyReference) + + [] + member __.``Nuget reference fires multiple events``() = + use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) + let mutable assemblyRefCount = 0; + Event.add (fun _ -> assemblyRefCount <- assemblyRefCount + 1) script.AssemblyReferenceAdded + script.Eval("#r \"nuget:include=NUnitLite, version=3.11.0\"") |> ignoreValue + script.Eval("0") |> ignoreValue + Assert.GreaterOrEqual(assemblyRefCount, 2) From 78ea25415020b95eeb3fdfc8af98abb0927499c1 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 17 Sep 2019 12:35:13 -0700 Subject: [PATCH 029/214] Update FSComp.txt --- src/fsharp/FSComp.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 538edcdc6f..b542b898d3 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1466,9 +1466,6 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3243,parsInvalidAnonRecdExpr,"Invalid anonymous record expression" 3244,parsInvalidAnonRecdType,"Invalid anonymous record type" 3245,tcCopyAndUpdateNeedsRecordType,"The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record" -3246,couldNotLoadDependencyManagerExtension,"The dependency manager extension %s could not be loaded. Message: %s" -3250,expressionHasNoName,"Expression does not have a name." -3251,chkNoFirstClassNameOf,"Using the 'nameof' operator as a first-class function value is not permitted." 3246,tcAugmentationsCannotHaveAttributes,"Attributes cannot be applied to type extensions." 3247,couldNotLoadDependencyManagerExtension,"The dependency manager extension %s could not be loaded. Message: %s" 3250,expressionHasNoName,"Expression does not have a name." From 95504ba57f2d6ae4b1d50f1d41e34582e6424f95 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 18 Sep 2019 14:47:19 -0700 Subject: [PATCH 030/214] Add test harness for nuget test cases (#7585) * Add test harness for nuget test cases * Fix script * enable test for unix --- FSharp.sln | 45 +++++++++----- VisualFSharp.sln | 15 +++++ eng/Build.ps1 | 12 ++++ eng/build.sh | 1 + .../FSharp.DependencyManager.Utilities.fs | 1 + .../Directory.Build.props | 9 +++ .../FSharp.DependencyManager.UnitTests.fs | 58 +++++++++++++++++++ .../FSharp.DependencyManager.UnitTests.fsproj | 25 ++++++++ .../FSharpScript.fs | 58 +++++++++++++++++++ .../TextHelpers.fs | 36 ++++++++++++ 10 files changed, 245 insertions(+), 15 deletions(-) create mode 100644 tests/FSharp.DependencyManager.UnitTests/Directory.Build.props create mode 100644 tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fs create mode 100644 tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj create mode 100644 tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs create mode 100644 tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs diff --git a/FSharp.sln b/FSharp.sln index 1f83d5a639..23375be628 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -13,13 +13,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CFE3259A EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Build", "src\fsharp\FSharp.Build\FSharp.Build.fsproj", "{702A7979-BCF9-4C41-853E-3ADFC9897890}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fsc", "src\fsharp\fsc\fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsc", "src\fsharp\fsc\fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Interactive.Settings", "src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsi", "src\fsharp\fsi\fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FsiAnyCpu", "src\fsharp\fsiAnyCpu\fsiAnyCpu.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "fsiAnyCpu", "src\fsharp\fsiAnyCpu\fsiAnyCpu.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" ProjectSection(ProjectDependencies) = postProject {649FA588-F02E-457C-9FCF-87E46407481E} = {649FA588-F02E-457C-9FCF-87E46407481E} EndProjectSection @@ -52,6 +52,8 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scr EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{4FEDF286-0252-4EBC-9E75-879CCA3B85DC}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager.UnitTests", "tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj", "{388FFDAE-A659-422E-9407-6A9062E1986E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -242,6 +244,18 @@ Global {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|Any CPU.Build.0 = Release|Any CPU {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|x86.ActiveCfg = Release|Any CPU {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|x86.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.Build.0 = Debug|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|Any CPU.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|x86.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|x86.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.Build.0 = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.ActiveCfg = Release|Any CPU + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.Build.0 = Release|Any CPU {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -266,18 +280,18 @@ Global {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|Any CPU.Build.0 = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.ActiveCfg = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.Build.0 = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.Build.0 = Debug|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|Any CPU.ActiveCfg = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|Any CPU.Build.0 = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|x86.ActiveCfg = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Proto|x86.Build.0 = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.Build.0 = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.ActiveCfg = Release|Any CPU - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.Build.0 = Release|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Debug|x86.ActiveCfg = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Debug|x86.Build.0 = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Proto|Any CPU.Build.0 = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Proto|x86.ActiveCfg = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Proto|x86.Build.0 = Debug|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Release|Any CPU.Build.0 = Release|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Release|x86.ActiveCfg = Release|Any CPU + {388FFDAE-A659-422E-9407-6A9062E1986E}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -297,9 +311,10 @@ Global {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7} = {3840F2E7-3898-45F7-8CF7-1E6829E56DB8} {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA} = {B8DDA694-7939-42E3-95E5-265C2217C142} {C97819B0-B428-4B96-9CD7-497D2D1C738C} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {8B7BF62E-7D8C-4928-BE40-4E392A9EE851} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {6771860A-614D-4FDD-A655-4C70EBCC91B0} = {B8DDA694-7939-42E3-95E5-265C2217C142} {4FEDF286-0252-4EBC-9E75-879CCA3B85DC} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {8B7BF62E-7D8C-4928-BE40-4E392A9EE851} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {388FFDAE-A659-422E-9407-6A9062E1986E} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BD5177C7-1380-40E7-94D2-7768E1A8B1B8} diff --git a/VisualFSharp.sln b/VisualFSharp.sln index f2e9539283..37ea6f1aef 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -156,6 +156,8 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scr EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{DFA30881-C0B1-4813-B087-C21B5AF9B77F}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager.UnitTests", "tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj", "{AF7AE565-E1C4-4A24-BD4B-D7983FC84768}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -910,6 +912,18 @@ Global {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|Any CPU.Build.0 = Release|Any CPU {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|x86.ActiveCfg = Release|Any CPU {DFA30881-C0B1-4813-B087-C21B5AF9B77F}.Release|x86.Build.0 = Release|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Debug|x86.Build.0 = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Proto|Any CPU.Build.0 = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Proto|x86.ActiveCfg = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Proto|x86.Build.0 = Debug|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Release|Any CPU.Build.0 = Release|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Release|x86.ActiveCfg = Release|Any CPU + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -983,6 +997,7 @@ Global {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {DFA30881-C0B1-4813-B087-C21B5AF9B77F} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {AF7AE565-E1C4-4A24-BD4B-D7983FC84768} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48EDBBBE-C8EE-4E3C-8B19-97184A487B37} diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 4d503dbeda..45035bb41e 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -48,6 +48,7 @@ param ( [switch]$testCoreClr, [switch]$testCambridge, [switch]$testCompiler, + [switch]$testDependencyManager, [switch]$testFSharpCore, [switch]$testFSharpQA, [switch]$testVs, @@ -82,6 +83,7 @@ function Print-Usage() { Write-Host " -testAll Run all tests" Write-Host " -testCambridge Run Cambridge tests" Write-Host " -testCompiler Run FSharpCompiler unit tests" + Write-Host " -testDependencyManager Run FSharp.DependencyManager.UnitTests" Write-Host " -testDesktop Run tests against full .NET Framework" Write-Host " -testCoreClr Run tests against CoreCLR" Write-Host " -testFSharpCore Run FSharpCore unit tests" @@ -122,6 +124,7 @@ function Process-Arguments() { $script:testAll = $False $script:testCambridge = $False $script:testCompiler = $False + $script:testDependencyManager = $False $script:testDesktop = $False $script:testCoreClr = $False $script:testFSharpCore = $False @@ -339,6 +342,7 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $desktopTargetFramework @@ -348,6 +352,7 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $coreclrTargetFramework @@ -385,6 +390,13 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework } + if ($testDependencyManager) { + if (-not $noVisualStudio) { + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $desktopTargetFramework + } + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $coreclrTargetFramework + } + if ($testCambridge) { if (-not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $desktopTargetFramework diff --git a/eng/build.sh b/eng/build.sh index cda4795f87..183b202324 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -274,6 +274,7 @@ if [[ "$test_core_clr" == true ]]; then TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj" --targetframework $coreclrtestframework + TestUsingNUnit --testproject "$repo_root/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj" --targetframework $coreclrtestframework fi diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 8b05633d7d..63acbba859 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -73,6 +73,7 @@ module Utilities = // Path to the directory containing the fsharp compilers let fsharpCompilerPath = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) + // We are running on dotnet core if the executing mscorlib is System.Private.CoreLib let isRunningOnCoreClr = (typeof.Assembly).FullName.StartsWith("System.Private.CoreLib", StringComparison.InvariantCultureIgnoreCase) let isWindows = diff --git a/tests/FSharp.DependencyManager.UnitTests/Directory.Build.props b/tests/FSharp.DependencyManager.UnitTests/Directory.Build.props new file mode 100644 index 0000000000..7cd41381b5 --- /dev/null +++ b/tests/FSharp.DependencyManager.UnitTests/Directory.Build.props @@ -0,0 +1,9 @@ + + + + true + + + + + diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fs b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fs new file mode 100644 index 0000000000..94dafec5b3 --- /dev/null +++ b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.DependencyManager.UnitTests + +open System +open System.IO +open System.Threading +open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.SourceCodeServices + +open NUnit.Framework + +[] +type DependencyManagerInteractiveTests() = + + let getValue ((value: Result), (errors: FSharpErrorInfo[])) = + if errors.Length > 0 then + failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) + match value with + | Ok(value) -> value + | Error ex -> raise ex + + let ignoreValue = getValue >> ignore + + [] + member __.``SmokeTest - #r nuget``() = + let text = """ +#r @"nuget:System.Collections.Immutable, version=1.5.0" +0""" + use script = new FSharpScript() + let mutable assemblyResolveEventCount = 0 + let mutable foundAssemblyReference = false + Event.add (fun (assembly: string) -> + assemblyResolveEventCount <- assemblyResolveEventCount + 1 + foundAssemblyReference <- String.Compare("System.Collections.Immutable.dll", Path.GetFileName(assembly), StringComparison.OrdinalIgnoreCase) = 0) + script.AssemblyReferenceAdded + let opt = script.Eval(text) |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual(0, value.ReflectionValue :?> int) + Assert.AreEqual(1, assemblyResolveEventCount) + Assert.AreEqual(true, foundAssemblyReference) + + [] + member __.``SmokeTest - #r nuget package not found``() = + let text = """ +#r @"nuget:System.Collections.Immutable.DoesNotExist, version=1.5.0" +0""" + use script = new FSharpScript() + let mutable assemblyResolveEventCount = 0 + Event.add (fun (assembly: string) -> + assemblyResolveEventCount <- assemblyResolveEventCount + 1) + script.AssemblyReferenceAdded + let opt = script.Eval(text) |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual(0, value.ReflectionValue :?> int) + Assert.AreEqual(0, assemblyResolveEventCount) diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj new file mode 100644 index 0000000000..ce60ee1a23 --- /dev/null +++ b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj @@ -0,0 +1,25 @@ + + + + + net472;netcoreapp3.0 + netcoreapp3.0 + Library + true + nunit + true + + + + + + + + + + + + + + + diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs b/tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs new file mode 100644 index 0000000000..9b726af1c9 --- /dev/null +++ b/tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.DependencyManager.UnitTests + +open System +open FSharp.Compiler.Interactive.Shell + +type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = + let outputProduced = Event() + let errorProduced = Event() + + // handle stdin/stdout + let stdin = new CapturedTextReader() + let stdout = new EventedTextWriter() + let stderr = new EventedTextWriter() + do stdout.LineWritten.Add outputProduced.Trigger + do stderr.LineWritten.Add errorProduced.Trigger + let captureInput = defaultArg captureInput false + let captureOutput = defaultArg captureOutput false + let savedInput = Console.In + let savedOutput = Console.Out + let savedError = Console.Error + do (fun () -> + if captureInput then + Console.SetIn(stdin) + if captureOutput then + Console.SetOut(stdout) + Console.SetError(stderr) + ())() + + let config = FsiEvaluationSession.GetDefaultConfiguration() + let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet"; "--langversion:preview" |] + let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) + + member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + + member __.ProvideInput = stdin.ProvideInput + + member __.OutputProduced = outputProduced.Publish + + member __.ErrorProduced = errorProduced.Publish + + member __.Eval(code: string) = + let ch, errors = fsi.EvalInteractionNonThrowing code + match ch with + | Choice1Of2 v -> Ok(v), errors + | Choice2Of2 ex -> Error(ex), errors + + interface IDisposable with + member __.Dispose() = + if captureInput then + Console.SetIn(savedInput) + if captureOutput then + Console.SetOut(savedOutput) + Console.SetError(savedError) + stdin.Dispose() + stdout.Dispose() + stderr.Dispose() \ No newline at end of file diff --git a/tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs b/tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs new file mode 100644 index 0000000000..503be87b7b --- /dev/null +++ b/tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.DependencyManager.UnitTests + +open System.Collections.Generic +open System.IO +open System.Text + +type internal CapturedTextReader() = + inherit TextReader() + let queue = Queue() + member __.ProvideInput(text: string) = + for c in text.ToCharArray() do + queue.Enqueue(c) + override __.Peek() = + if queue.Count > 0 then queue.Peek() |> int + else -1 + override __.Read() = + if queue.Count > 0 then queue.Dequeue() |> int + else -1 + +type internal EventedTextWriter() = + inherit TextWriter() + let sb = StringBuilder() + let lineWritten = Event() + member __.LineWritten = lineWritten.Publish + override __.Encoding = Encoding.UTF8 + override __.Write(c: char) = + if c = '\n' then + let line = + let v = sb.ToString() + if v.EndsWith("\r") then v.Substring(0, v.Length - 1) + else v + sb.Clear() |> ignore + lineWritten.Trigger(line) + else sb.Append(c) |> ignore From ac86c492b7653a916edd4b08907e63260bd7f6d1 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 18 Sep 2019 16:25:46 -0700 Subject: [PATCH 031/214] place binary log next to generated project (#7588) --- .../FSharp.DependencyManager.Utilities.fs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 63acbba859..4ea77afa31 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -135,11 +135,12 @@ module Utilities = else None #endif - let executeBuild pathToExe arguments = + let executeBuild pathToExe arguments workingDir = match pathToExe with | Some path -> let psi = ProcessStartInfo() psi.FileName <- path + psi.WorkingDirectory <- workingDir psi.RedirectStandardOutput <- false psi.RedirectStandardError <- false psi.Arguments <- arguments @@ -158,19 +159,21 @@ module Utilities = let binLoggingArguments = match binLogging with - | true -> "-bl" + | true -> "/bl" | _ -> "" let arguments prefix = sprintf "%s -restore %s %c%s%c /t:FSI-PackageManagement" prefix binLoggingArguments '\"' projectPath '\"' + let workingDir = Path.GetDirectoryName projectPath + let succeeded = #if !(NETSTANDARD || NETCOREAPP) // The Desktop build uses "msbuild" to build - executeBuild msbuildExePath (arguments "") + executeBuild msbuildExePath (arguments "") workingDir #else // The coreclr uses "dotnet msbuild" to build - executeBuild dotnetHostPath (arguments "msbuild") + executeBuild dotnetHostPath (arguments "msbuild") workingDir #endif let outputFile = projectPath + ".fsx" let resultOutFile = if succeeded && File.Exists(outputFile) then Some outputFile else None From 4894db52b45697856b11506c185ea3dc6d6b3e34 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 19 Sep 2019 12:18:17 -0700 Subject: [PATCH 032/214] Remove unnecessary dependencies from build (#7590) --- eng/Versions.props | 2 -- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 2 -- .../FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec | 2 -- .../FSharp.DependencyManager.Utilities.fs | 3 --- .../FSharp.DependencyManager/FSharp.DependencyManager.fsproj | 4 ---- src/fsharp/fsc/fsc.fsproj | 2 -- src/fsharp/fsi/fsi.fsproj | 3 --- vsintegration/Directory.Build.targets | 2 -- 8 files changed, 20 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 9737ac95da..85184e9885 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -109,8 +109,6 @@ $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) - 2.1.0 - 2.1.0 8.0.1 14.0.25420 diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 0a9d7e9e07..de9e9ebfdd 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -48,8 +48,6 @@ - - diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec index 6a9e32442c..1e7d0fe478 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec @@ -5,8 +5,6 @@ en-US - - diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 4ea77afa31..fad326787f 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -12,9 +12,6 @@ open System.Runtime.Versioning open Internal.Utilities.FSharpEnvironment -open Microsoft.DotNet.PlatformAbstractions -open Microsoft.Extensions.DependencyModel - #if !(NETSTANDARD || NETCOREAPP) open Microsoft.Build.Evaluation open Microsoft.Build.Framework diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj index 733367a775..7faf2884f4 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fsproj @@ -25,8 +25,6 @@ - - @@ -59,8 +57,6 @@ - - diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj index 85559a81d0..4b45e75318 100644 --- a/src/fsharp/fsc/fsc.fsproj +++ b/src/fsharp/fsc/fsc.fsproj @@ -50,8 +50,6 @@ - - diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj index f6fb546249..12dff94ebc 100644 --- a/src/fsharp/fsi/fsi.fsproj +++ b/src/fsharp/fsi/fsi.fsproj @@ -51,9 +51,6 @@ - - - diff --git a/vsintegration/Directory.Build.targets b/vsintegration/Directory.Build.targets index 3b8426ebd2..bc5c6d7195 100644 --- a/vsintegration/Directory.Build.targets +++ b/vsintegration/Directory.Build.targets @@ -7,8 +7,6 @@ - - From 9c631c3749df6eb57694c89a04b6bf8c18875945 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 19 Sep 2019 15:41:24 -0700 Subject: [PATCH 033/214] Fix #7582 (#7587) * ammend dotnet.exe probing, fixes #7582 * feedback --- .../FSharp.DependencyManager.Utilities.fs | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index fad326787f..bb5a60178c 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -120,18 +120,42 @@ module Utilities = roots |> Array.tryFind(fun root -> msbuildPathExists root) |> msbuildOption #else let dotnetHostPath = + // How to find dotnet.exe --- woe is me; probing rules make me sad. + // Algorithm: + // 1. Look for DOTNET_HOST_PATH environment variable + // this is the main user programable override .. provided by user to find a specific dotnet.exe + // 2. Probe for are we part of an .NetSDK install + // In an sdk install we are always installed in: sdk\3.0.100-rc2-014234\FSharp + // dotnet or dotnet.exe will be found in the directory that contains the sdk directory + // 3. We are loaded in-process to some other application ... Eg. try .net + // See if the host is dotnet.exe ... from netcoreapp3.0 on this is fairly unlikely + // 4. If it's none of the above we are going to have to rely on the path containing the way to find dotnet.exe + // if isRunningOnCoreClr then match (Environment.GetEnvironmentVariable("DOTNET_HOST_PATH")) with - | value when not (String.IsNullOrEmpty(value)) -> Some value // Value set externally + | value when not (String.IsNullOrEmpty(value)) -> + Some value // Value set externally | _ -> - let main = Process.GetCurrentProcess().MainModule - if main.ModuleName.StartsWith("dotnet") then - Some main.FileName + // Probe for netsdk install + let dotnetLocation = + let dotnetApp = + let platform = Environment.OSVersion.Platform + if platform = PlatformID.Unix then "dotnet" else "dotnet.exe" + let assemblyLocation = typeof.GetTypeInfo().Assembly.Location + Path.Combine(assemblyLocation, "../../..", dotnetApp) + + if File.Exists(dotnetLocation) then + Some dotnetLocation else - None - else - None + let main = Process.GetCurrentProcess().MainModule + if main.ModuleName ="dotnet" then + Some main.FileName + else + Some dotnet + else + None #endif + let executeBuild pathToExe arguments workingDir = match pathToExe with | Some path -> @@ -149,11 +173,9 @@ module Utilities = p.Start() |> ignore p.WaitForExit() p.ExitCode = 0 - | None -> false let buildProject projectPath binLogging = - let binLoggingArguments = match binLogging with | true -> "/bl" From 3dd1dc6e03e9565ff433fd653415fdc065d65afa Mon Sep 17 00:00:00 2001 From: Nelson Wu Date: Thu, 26 Sep 2019 17:33:24 -0700 Subject: [PATCH 034/214] Consistent slicing for list, array(2d), string (#7541) * consistent list slicing * fix on list slicing * array slicing * string slicing * slice 2d arrays * cleanup ; * migrate tests * address comments2 * revert to previous empty behavior --- src/fsharp/FSharp.Core/prim-types.fs | 35 +- .../Array2Module.fs | 102 +++++ .../Array3Module.fs | 78 ++++ .../Array4Module.fs | 124 +++++- .../ArrayModule.fs | 86 +++++ .../Microsoft.FSharp.Collections/ListType.fs | 63 ++- .../StringModule.fs | 84 ++++ .../Microsoft.FSharp.Collections/Utils.fs | 6 +- tests/fsharp/core/array/test.fsx | 364 ------------------ 9 files changed, 537 insertions(+), 405 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 542852e5da..bfab4a8ff4 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -380,6 +380,7 @@ namespace Microsoft.FSharp.Core let inline not (b:bool) = (# "ceq" b false : bool #) let inline (=) (x:int) (y:int) = (# "ceq" x y : bool #) let inline (<>) (x:int) (y:int) = not(# "ceq" x y : bool #) + let inline (<=) (x:int) (y:int) = not(# "cgt" x y : bool #) let inline (>=) (x:int) (y:int) = not(# "clt" x y : bool #) let inline (>=.) (x:int64) (y:int64) = not(# "clt" x y : bool #) let inline (>=...) (x:char) (y:char) = not(# "clt" x y : bool #) @@ -652,6 +653,7 @@ namespace Microsoft.FSharp.Core let inline GetArray2DLength2 (arr: 'T[,]) = (# "ldlen.multi 2 1" arr : int #) let inline Array2DZeroCreate (n:int) (m:int) = (# "newarr.multi 2 !0" type ('T) n m : 'T[,] #) + let GetArray2DSub (src: 'T[,]) src1 src2 len1 len2 = let len1 = (if len1 < 0 then 0 else len1) let len2 = (if len2 < 0 then 0 else len2) @@ -3088,36 +3090,32 @@ namespace Microsoft.FSharp.Collections elif n = 0 then h else nth t (n - 1) - // similar to 'takeFreshConsTail' but with exceptions same as array slicing let rec sliceFreshConsTail cons n l = if n = 0 then setFreshConsTail cons [] else match l with - | [] -> outOfRange() + | [] -> setFreshConsTail cons [] | x :: xs -> let cons2 = freshConsNoTail x setFreshConsTail cons cons2 sliceFreshConsTail cons2 (n - 1) xs - // similar to 'take' but with n representing an index, not a number of elements - // and with exceptions matching array slicing let sliceTake n l = if n < 0 then [] else match l with - | [] -> outOfRange() + | [] -> [] | x :: xs -> let cons = freshConsNoTail x sliceFreshConsTail cons n xs cons - // similar to 'skip' but with exceptions same as array slicing let sliceSkip n l = - if n < 0 then outOfRange() + let n2 = if n < 0 then 0 else n let rec loop i lst = match lst with | _ when i = 0 -> lst | _ :: t -> loop (i-1) t - | [] -> outOfRange() - loop n l + | [] -> [] + loop n2 l type List<'T> with [] @@ -3157,7 +3155,8 @@ namespace Microsoft.FSharp.Collections | None, Some(j) -> PrivateListHelpers.sliceTake j l | Some(i), Some(j) -> if i > j then [] else - PrivateListHelpers.sliceTake (j-i) (PrivateListHelpers.sliceSkip i l) + let start = if i < 0 then 0 else i + PrivateListHelpers.sliceTake (j - start) (PrivateListHelpers.sliceSkip start l) interface IEnumerable<'T> with member l.GetEnumerator() = PrivateListHelpers.mkListEnumerator l @@ -4869,12 +4868,16 @@ namespace Microsoft.FSharp.Core let PowGeneric (one, mul, value: 'T, exponent) = ComputePowerGenericInlined one mul value exponent let inline ComputeSlice bound start finish length = - match start, finish with - | None, None -> bound, bound + length - 1 - | None, Some n when n >= bound -> bound, n - | Some m, None when m <= bound + length -> m, bound + length - 1 - | Some m, Some n -> m, n - | _ -> raise (System.IndexOutOfRangeException()) + let low = + match start with + | Some n when n >= bound -> n + | _ -> bound + let high = + match finish with + | Some m when m < bound + length -> m + | _ -> bound + length - 1 + + low, high let inline GetArraySlice (source: _[]) start finish = let start, finish = ComputeSlice 0 start finish source.Length diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs index b8fb043157..24d51fe6e0 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs @@ -8,6 +8,7 @@ namespace FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections open System open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework +open Utils (* [Test Strategy] @@ -20,6 +21,12 @@ Make sure each method works on: [][][] type Array2Module() = + + let shouldBeEmpty arr = + if Array2D.length2 arr <> 0 + && Array2D.length1 arr <> 0 then + Assert.Fail("Array2D is not empty.") + [] member this.Base1() = // integer array @@ -573,3 +580,98 @@ type Array2Module() = if m16.[0,0] <> null then Assert.Fail() + [] + member this.SlicingBoundedStartEnd() = + let m1 = array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |] + + shouldEqual m1.[*,*] m1 + shouldEqual m1.[0..,*] (array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) + shouldEqual m1.[1..,*] (array2D [| + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) + shouldEqual m1.[..0,*] (array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + |]) + shouldEqual m1.[*,0..] (array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] + |]) + shouldEqual m1.[*,1..] (array2D [| [| 2.0;3.0;4.0;5.0;6.0 |]; + [| 20.0;30.0;40.0;50.0;60.0 |] + |]) + shouldEqual m1.[*,2..] (array2D [| [| 3.0;4.0;5.0;6.0 |]; + [| 30.0;40.0;50.0;60.0 |] + |]) + shouldEqual m1.[*,3..] (array2D [| [| 4.0;5.0;6.0 |]; + [| 40.0;50.0;60.0 |] + |]) + shouldEqual m1.[*,4..] (array2D [| [| 5.0;6.0 |]; + [| 50.0;60.0 |] + |]) + shouldEqual m1.[*,5..] (array2D [| [| 6.0 |]; + [| 60.0 |] + |]) + shouldEqual m1.[*, 0] [| 1.0; 10.0 |] + shouldEqual m1.[1.., 3] [| 40.0 |] + shouldEqual m1.[1, *] [| 10.0;20.0;30.0;40.0;50.0;60.0 |] + shouldEqual m1.[0, ..3] [| 1.0;2.0;3.0;4.0 |] + + + [] + member this.SlicingUnboundedEnd() = + let arr = array2D [ [1;2;3;4;5;6]; [6;5;4;3;2;1]] + + shouldEqual arr.[(-1).., *] arr + shouldEqual arr.[0.., 1..] (array2D [ [2;3;4;5;6]; [5;4;3;2;1] ]) + shouldEqual arr.[1.., ..3] (array2D [ [6;5;4;3] ]) + shouldBeEmpty arr.[2.., 6..] + + + [] + member this.SlicingUnboundedStart() = + let arr = array2D [ [1;2;3;4;5;6]; [6;5;4;3;2;1]] + + shouldBeEmpty arr.[..(-1), *] + shouldEqual arr.[..0, ..4] (array2D [ [1;2;3;4;5] ]) + shouldEqual arr.[..1, ..3] (array2D [ [1;2;3;4]; [6;5;4;3] ]) + shouldEqual arr.[..2, ..6] arr + + + [] + member this.SlicingOutOfBounds() = + let arr = array2D [ [1;2;3;4;5;6]; [6;5;4;3;2;1]] + + shouldEqual arr.[*, ..6] arr + shouldBeEmpty arr.[*, 6..] + shouldEqual arr.[..2, *] arr + shouldBeEmpty arr.[2.., *] + + shouldBeEmpty arr.[1..0, *] + shouldBeEmpty arr.[1..0, (-1)..0] + + shouldBeEmpty arr.[0..(-1), *] + shouldBeEmpty arr.[1..(-1), *] + shouldBeEmpty arr.[1..0, *] + shouldEqual arr.[0..6, (-1)..9] arr + shouldEqual arr.[*, 1..6] (array2D [ [2;3;4;5;6]; [5;4;3;2;1] ]) + + shouldEqual arr.[1, 3..1] [| |] + shouldEqual arr.[3..1, 1] [| |] + shouldEqual arr.[10.., 1] [| |] + shouldEqual arr.[1, 10..] [| |] + shouldEqual arr.[1, .. -1] [| |] + shouldEqual arr.[.. -1, 1] [| |] + + [] + member this.SlicingMutation() = + let arr2D1 = array2D [| [| 1.; 2.; 3.; 4. |]; + [| 5.; 6.; 7.; 8. |]; + [| 9.; 10.; 11.; 12. |] |] + + arr2D1.[0, *] <- [|0.; 0.; 0.; 0.|] + shouldEqual arr2D1.[0,*] [|0.; 0.; 0.; 0.|] + arr2D1.[*, 1] <- [|100.; 100.; 100.|] + shouldEqual arr2D1.[*,1] [|100.; 100.; 100.|] + shouldEqual arr2D1.[*,*] (array2D [| [| 0.; 100.; 0.; 0. |]; + [| 5.; 100.; 7.; 8. |]; + [| 9.; 100.; 11.; 12. |] |]) + diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs index bb6c5a0846..3e5440fd72 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs @@ -8,6 +8,7 @@ namespace FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections open System open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework +open Utils (* [Test Strategy] @@ -21,6 +22,8 @@ Make sure each method works on: [][][] type Array3Module() = + let array3d (arrs: 'a array array array ) = Array3D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length (fun i j k -> arrs.[i].[j].[k]) + let VerifyDimensions arr x y z = if Array3D.length1 arr <> x then Assert.Fail("Array3D does not have expected dimensions.") @@ -28,6 +31,18 @@ type Array3Module() = if Array3D.length3 arr <> z then Assert.Fail("Array3D does not have expected dimensions.") () + let shouldBeEmpty arr = + if Array3D.length3 arr <> 0 + && Array3D.length2 arr <> 0 + && Array3D.length1 arr <> 0 then + Assert.Fail("Array3D is not empty.") + + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + [] member this.Create() = // integer array @@ -330,3 +345,66 @@ type Array3Module() = CheckThrowsArgumentException(fun () -> Array3D.zeroCreate 1 1 -1 |> ignore) () + + [] + member this.SlicingBoundedStartEnd() = + shouldEqual m1.[*,*,*] m1 + shouldEqual m1.[0..,*,*] + (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + shouldEqual m1.[0..0,*,*] + (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] |]) + shouldEqual m1.[1..1,*,*] + (array3d [| + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + + shouldEqual m1.[*,1..1,*] + (array3d [| + [| [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + shouldEqual m1.[..1,*,*] + (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + shouldEqual m1.[*,0..0,*] + (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] |] ) + shouldEqual m1.[*,0..1,*] + (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + shouldEqual m1.[*,*,0..0] + (array3d [| + [| [| 1.0|]; + [| 11.0|] |] + [| [| 10.0|]; + [| 100.0 |] |] |] ) + shouldEqual m1.[*,*,0..5] + (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + + [] + member this.SlicingOutOfBounds() = + shouldBeEmpty m1.[*,*,7..] + shouldBeEmpty m1.[*,*,.. -1] + + shouldBeEmpty m1.[*,3..,*] + shouldBeEmpty m1.[*,.. -1,*] + + shouldBeEmpty m1.[3..,*,*] + shouldBeEmpty m1.[.. -1,*,*] + diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs index d67fb17cd8..a53286b3c0 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs @@ -8,6 +8,7 @@ namespace FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections open System open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework +open Utils (* [Test Strategy] @@ -23,12 +24,35 @@ Make sure each method works on: type Array4Module() = let VerifyDimensions arr x y z u = - if Array4D.length1 arr <> x then Assert.Fail("Array3D does not have expected dimensions.") - if Array4D.length2 arr <> y then Assert.Fail("Array3D does not have expected dimensions.") - if Array4D.length3 arr <> z then Assert.Fail("Array3D does not have expected dimensions.") + if Array4D.length1 arr <> x then Assert.Fail("Array4D does not have expected dimensions.") + if Array4D.length2 arr <> y then Assert.Fail("Array4D does not have expected dimensions.") + if Array4D.length3 arr <> z then Assert.Fail("Array4D does not have expected dimensions.") if Array4D.length4 arr <> u then Assert.Fail("Array4D does not have expected dimensions.") () + let array4d (arrs: 'a array array array array) = Array4D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length arrs.[0].[0].[0].Length (fun i j k m -> arrs.[i].[j].[k].[m]) + + let shouldBeEmpty arr = + if Array4D.length4 arr <> 0 + && Array4D.length3 arr <> 0 + && Array4D.length2 arr <> 0 + && Array4D.length1 arr <> 0 then + Assert.Fail("Array3D is not empty.") + + let m1 = array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + [] member this.Create() = // integer array @@ -244,3 +268,97 @@ type Array4Module() = CheckThrowsArgumentException(fun () -> Array4D.zeroCreate 1 1 1 -1 |> ignore) () + + [] + member this.SlicingBoundedStartEnd() = + shouldEqual m1.[*,*,*,*] m1 + shouldEqual m1.[0..,*,*,*] m1 + shouldEqual m1.[0..0,*,*,*] + (array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + |]) + shouldEqual m1.[1..1,*,*,*] + (array4d + [| + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |]) + + shouldEqual m1.[*,0..0,*,*] + (array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + |]; + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + |] + |]) + shouldEqual m1.[..1,*,*,*] m1 + shouldEqual m1.[*,1..,*,*] + (array4d + [| + [| + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] + |]; + [| + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] + |] + |]) + shouldEqual m1.[*,0..1,*,*] m1 + shouldEqual m1.[*,*,0..0,*] + (array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] + |]; + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; |] |] + |]) + shouldEqual m1.[*,*,*,0..5] m1 + + shouldEqual m1.[*,*,*,0..4] + (array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0 |]; + [| 11.0;21.0;31.0;41.0;51.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0 |]; + [| 100.0;200.0;300.0;400.0;500.0 |] |] + |]; + [| + [| [| 19.0;29.0;39.0;49.0;59.0 |]; + [| 119.0;219.0;319.0;419.0;519.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0 |] |] + |] + |]) + + + [] + member this.SlicingOutOfBounds() = + shouldBeEmpty m1.[*,*,*,7..] + shouldBeEmpty m1.[*,*,*,.. -1] + + shouldBeEmpty m1.[*,*,3..,*] + shouldBeEmpty m1.[*,*,.. -1,*] + + shouldBeEmpty m1.[*,3..,*,*] + shouldBeEmpty m1.[*,.. -1,*,*] + + shouldBeEmpty m1.[3..,*,*,*] + shouldBeEmpty m1.[.. -1,*,*,*] diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs index ef82fde276..412b0d3a39 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs @@ -1677,3 +1677,89 @@ type ArrayModule() = // null array let nullArr = null:string[] CheckThrowsArgumentNullException (fun () -> Array.contains "empty" nullArr |> ignore) + + + [] + member this.SlicingUnboundedEnd() = + let arr = [|1;2;3;4;5;6|] + + Assert.AreEqual(arr.[-1..], arr) + Assert.AreEqual(arr.[0..], arr) + Assert.AreEqual(arr.[1..], [2;3;4;5;6]) + Assert.AreEqual(arr.[2..], [3;4;5;6]) + Assert.AreEqual(arr.[5..], [6]) + Assert.AreEqual(arr.[6..], ([||]: int array)) + Assert.AreEqual(arr.[7..], ([||]: int array)) + + + [] + member this.SlicingUnboundedStart() = + let arr = [|1;2;3;4;5;6|] + + Assert.AreEqual(arr.[..(-1)], ([||]: int array)) + Assert.AreEqual(arr.[..0], [|1|]) + Assert.AreEqual(arr.[..1], [|1;2|]) + Assert.AreEqual(arr.[..2], [|1;2;3|]) + Assert.AreEqual(arr.[..3], [|1;2;3;4|]) + Assert.AreEqual(arr.[..4], [|1;2;3;4;5|]) + Assert.AreEqual(arr.[..5], [|1;2;3;4;5;6|]) + Assert.AreEqual(arr.[..6], [|1;2;3;4;5;6|]) + Assert.AreEqual(arr.[..7], [|1;2;3;4;5;6|]) + + + [] + member this.SlicingBoundedStartEnd() = + let arr = [|1;2;3;4;5;6|] + + Assert.AreEqual(arr.[*], arr) + + Assert.AreEqual(arr.[0..0], [|1|]) + Assert.AreEqual(arr.[0..1], [|1;2|]) + Assert.AreEqual(arr.[0..2], [|1;2;3|]) + Assert.AreEqual(arr.[0..3], [|1;2;3;4|]) + Assert.AreEqual(arr.[0..4], [|1;2;3;4;5|]) + Assert.AreEqual(arr.[0..5], [|1;2;3;4;5;6|]) + + Assert.AreEqual(arr.[1..1], [|2|]) + Assert.AreEqual(arr.[1..2], [|2;3|]) + Assert.AreEqual(arr.[1..3], [|2;3;4|]) + Assert.AreEqual(arr.[1..4], [|2;3;4;5|]) + Assert.AreEqual(arr.[1..5], [|2;3;4;5;6|]) + + Assert.AreEqual(arr.[0..1], [|1;2|]) + Assert.AreEqual(arr.[1..1], [|2|]) + Assert.AreEqual(arr.[2..1], ([||]: int array)) + Assert.AreEqual(arr.[3..1], ([||]: int array)) + Assert.AreEqual(arr.[4..1], ([||]: int array)) + + + [] + member this.SlicingEmptyArray() = + + let empty : obj array = Array.empty + Assert.AreEqual(empty.[*], ([||]: obj array)) + Assert.AreEqual(empty.[5..3], ([||]: obj array)) + Assert.AreEqual(empty.[0..], ([||]: obj array)) + Assert.AreEqual(empty.[0..0], ([||]: obj array)) + Assert.AreEqual(empty.[0..1], ([||]: obj array)) + Assert.AreEqual(empty.[3..5], ([||]: obj array)) + + + [] + member this.SlicingOutOfBounds() = + let arr = [|1;2;3;4;5;6|] + + Assert.AreEqual(arr.[..6], [|1;2;3;4;5;6|]) + Assert.AreEqual(arr.[6..], ([||]: int array)) + + Assert.AreEqual(arr.[0..(-1)], ([||]: int array)) + Assert.AreEqual(arr.[1..(-1)], ([||]: int array)) + Assert.AreEqual(arr.[1..0], ([||]: int array)) + Assert.AreEqual(arr.[0..6], [|1;2;3;4;5;6|]) + Assert.AreEqual(arr.[1..6], [|2;3;4;5;6|]) + + Assert.AreEqual(arr.[-1..1], [|1;2|]) + Assert.AreEqual(arr.[-3..(-4)], ([||]: int array)) + Assert.AreEqual(arr.[-4..(-3)], ([||]: int array)) + + diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs index 80c13757f6..bf70a8b423 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs @@ -244,21 +244,23 @@ type ListType() = if emptyList <> [2] then Assert.Fail() () - [] - member this.Slicing() = - let lst = [1;2;3;4;5;6] - Assert.AreEqual(lst.[*], lst) + [] + member this.SlicingUnboundedEnd() = + let lst = [1;2;3;4;5;6] - CheckThrowsIndexOutRangException((fun _ -> lst.[-1 ..] |> ignore)) + Assert.AreEqual(lst.[-1..], lst) Assert.AreEqual(lst.[0..], lst) Assert.AreEqual(lst.[1..], [2;3;4;5;6]) Assert.AreEqual(lst.[2..], [3;4;5;6]) Assert.AreEqual(lst.[5..], [6]) Assert.AreEqual(lst.[6..], ([]: int list)) - CheckThrowsIndexOutRangException((fun _ -> lst.[7..] |> ignore)) - + + [] + member this.SlicingUnboundedStart() = + let lst = [1;2;3;4;5;6] + Assert.AreEqual(lst.[..(-1)], ([]: int list)) Assert.AreEqual(lst.[..0], [1]) Assert.AreEqual(lst.[..1], [1;2]) @@ -266,41 +268,60 @@ type ListType() = Assert.AreEqual(lst.[..3], [1;2;3;4]) Assert.AreEqual(lst.[..4], [1;2;3;4;5]) Assert.AreEqual(lst.[..5], [1;2;3;4;5;6]) - CheckThrowsIndexOutRangException((fun _ -> lst.[..6] |> ignore)) - - Assert.AreEqual(lst.[0..(-1)], ([]: int list)) + + + [] + member this.SlicingBoundedStartEnd() = + let lst = [1;2;3;4;5;6] + + Assert.AreEqual(lst.[*], lst) + Assert.AreEqual(lst.[0..0], [1]) Assert.AreEqual(lst.[0..1], [1;2]) Assert.AreEqual(lst.[0..2], [1;2;3]) Assert.AreEqual(lst.[0..3], [1;2;3;4]) Assert.AreEqual(lst.[0..4], [1;2;3;4;5]) Assert.AreEqual(lst.[0..5], [1;2;3;4;5;6]) - CheckThrowsIndexOutRangException((fun _ -> lst.[0..6] |> ignore)) - Assert.AreEqual(lst.[1..(-1)], ([]: int list)) - Assert.AreEqual(lst.[1..0], ([]: int list)) Assert.AreEqual(lst.[1..1], [2]) Assert.AreEqual(lst.[1..2], [2;3]) Assert.AreEqual(lst.[1..3], [2;3;4]) Assert.AreEqual(lst.[1..4], [2;3;4;5]) Assert.AreEqual(lst.[1..5], [2;3;4;5;6]) - CheckThrowsIndexOutRangException((fun _ -> lst.[1..6] |> ignore)) - CheckThrowsIndexOutRangException((fun _ -> lst.[-1..1] |> ignore)) Assert.AreEqual(lst.[0..1], [1;2]) Assert.AreEqual(lst.[1..1], [2]) Assert.AreEqual(lst.[2..1], ([]: int list)) Assert.AreEqual(lst.[3..1], ([]: int list)) Assert.AreEqual(lst.[4..1], ([]: int list)) - Assert.AreEqual(lst.[-3..(-4)], ([]: int list)) - CheckThrowsIndexOutRangException((fun _ -> lst.[-4..(-3)] |> ignore)) + + [] + member this.SlicingEmptyList() = let empty : obj list = List.empty Assert.AreEqual(empty.[*], ([]: obj list)) Assert.AreEqual(empty.[5..3], ([]: obj list)) Assert.AreEqual(empty.[0..], ([]: obj list)) - CheckThrowsIndexOutRangException((fun _ -> empty.[..0] |> ignore)) - CheckThrowsIndexOutRangException((fun _ -> empty.[0..0] |> ignore)) - CheckThrowsIndexOutRangException((fun _ -> empty.[0..1] |> ignore)) - CheckThrowsIndexOutRangException((fun _ -> empty.[3..5] |> ignore)) + Assert.AreEqual(empty.[0..0], ([]: obj list)) + Assert.AreEqual(empty.[0..1], ([]: obj list)) + Assert.AreEqual(empty.[3..5], ([]: obj list)) + + + [] + member this.SlicingOutOfBounds() = + let lst = [1;2;3;4;5;6] + + Assert.AreEqual(lst.[..6], [1;2;3;4;5;6]) + Assert.AreEqual(lst.[6..], ([]: int list)) + + Assert.AreEqual(lst.[0..(-1)], ([]: int list)) + Assert.AreEqual(lst.[1..(-1)], ([]: int list)) + Assert.AreEqual(lst.[1..0], ([]: int list)) + Assert.AreEqual(lst.[0..6], [1;2;3;4;5;6]) + Assert.AreEqual(lst.[1..6], [2;3;4;5;6]) + + Assert.AreEqual(lst.[-1..1], [1;2]) + Assert.AreEqual(lst.[-3..(-4)], ([]: int list)) + Assert.AreEqual(lst.[-4..(-3)], ([]: int list)) + diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs index a74fcba301..48ea1df31e 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs @@ -183,3 +183,87 @@ type StringModule() = let e3 = String.length null Assert.AreEqual(0, e3) + + [] + member this.SlicingUnboundedEnd() = + let str = "123456" + + Assert.AreEqual(str.[-1..], str) + Assert.AreEqual(str.[0..], str) + Assert.AreEqual(str.[1..], "23456") + Assert.AreEqual(str.[2..], "3456") + Assert.AreEqual(str.[5..], "6") + Assert.AreEqual(str.[6..], ("")) + Assert.AreEqual(str.[7..], ("")) + + + [] + member this.SlicingUnboundedStart() = + let str = "123456" + + Assert.AreEqual(str.[..(-1)], ("")) + Assert.AreEqual(str.[..0], "1") + Assert.AreEqual(str.[..1], "12") + Assert.AreEqual(str.[..2], "123") + Assert.AreEqual(str.[..3], "1234") + Assert.AreEqual(str.[..4], "12345") + Assert.AreEqual(str.[..5], "123456") + Assert.AreEqual(str.[..6], "123456") + Assert.AreEqual(str.[..7], "123456") + + + [] + member this.SlicingBoundedStartEnd() = + let str = "123456" + + Assert.AreEqual(str.[*], str) + + Assert.AreEqual(str.[0..0], "1") + Assert.AreEqual(str.[0..1], "12") + Assert.AreEqual(str.[0..2], "123") + Assert.AreEqual(str.[0..3], "1234") + Assert.AreEqual(str.[0..4], "12345") + Assert.AreEqual(str.[0..5], "123456") + + Assert.AreEqual(str.[1..1], "2") + Assert.AreEqual(str.[1..2], "23") + Assert.AreEqual(str.[1..3], "234") + Assert.AreEqual(str.[1..4], "2345") + Assert.AreEqual(str.[1..5], "23456") + + Assert.AreEqual(str.[0..1], "12") + Assert.AreEqual(str.[1..1], "2") + Assert.AreEqual(str.[2..1], ("")) + Assert.AreEqual(str.[3..1], ("")) + Assert.AreEqual(str.[4..1], ("")) + + + [] + member this.SlicingEmptyString() = + + let empty = "" + Assert.AreEqual(empty.[*], ("")) + Assert.AreEqual(empty.[5..3], ("")) + Assert.AreEqual(empty.[0..], ("")) + Assert.AreEqual(empty.[0..0], ("")) + Assert.AreEqual(empty.[0..1], ("")) + Assert.AreEqual(empty.[3..5], ("")) + + + [] + member this.SlicingOutOfBounds() = + let str = "123456" + + Assert.AreEqual(str.[..6], "123456") + Assert.AreEqual(str.[6..], ("")) + + Assert.AreEqual(str.[0..(-1)], ("")) + Assert.AreEqual(str.[1..(-1)], ("")) + Assert.AreEqual(str.[1..0], ("")) + Assert.AreEqual(str.[0..6], "123456") + Assert.AreEqual(str.[1..6], "23456") + + Assert.AreEqual(str.[-1..1], "12") + Assert.AreEqual(str.[-3..(-4)], ("")) + Assert.AreEqual(str.[-4..(-3)], ("")) + diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs index b446e15ab7..57ab6f5876 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs @@ -2,6 +2,8 @@ module FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections.Utils +open NUnit.Framework + type Result<'a> = | Success of 'a | Error of string @@ -32,4 +34,6 @@ let isSorted sorted = sorted |> Seq.pairwise |> Seq.forall (fun (a,b) -> a <= b) let haveSameElements (xs:seq<_>) (ys:seq<_>) = let xsHashSet = new System.Collections.Generic.HashSet<_>(xs) let ysHashSet = new System.Collections.Generic.HashSet<_>(ys) - xsHashSet.SetEquals(ysHashSet) \ No newline at end of file + xsHashSet.SetEquals(ysHashSet) + +let shouldEqual arr1 arr2 = if arr1 <> arr2 then Assert.Fail() \ No newline at end of file diff --git a/tests/fsharp/core/array/test.fsx b/tests/fsharp/core/array/test.fsx index ee3c540782..b187984577 100644 --- a/tests/fsharp/core/array/test.fsx +++ b/tests/fsharp/core/array/test.fsx @@ -747,370 +747,6 @@ module SeqCacheAllTest = test "test8" test8 test "test9" test9 -module StringSlicingTest = - let s1 = "abcdef" - test "slice1922" (s1.[*] = s1) - test "slice1923" (s1.[0..] = s1) - test "slice1924" (s1.[1..] = "bcdef") - test "slice1925" (s1.[2..] = "cdef") - test "slice1926" (s1.[5..] = "f") - test "slice1927" (s1.[6..] = "") - test "slice1928" (try s1.[7..] |> ignore; false with _ -> true) - test "slice1929" (try s1.[-1 ..] |> ignore; false with _ -> true) - test "slice1917" (s1.[..0] = "a") - test "slice1911" (s1.[..1] = "ab") - test "slice1912" (s1.[..2] = "abc") - test "slice1913" (s1.[..3] = "abcd") - test "slice1914" (s1.[..4] = "abcde") - test "slice1915" (s1.[..5] = "abcdef") - test "slice1918" (try s1.[..6] |> ignore; false with _ -> true) - test "slice1919" (try s1.[.. -1] |> ignore; false with _ -> true) - test "slice1816" (s1.[1..-1] = "") - test "slice1817" (s1.[1..0] = "") - test "slice1811" (s1.[1..1] = "b") - test "slice1812" (s1.[1..2] = "bc") - test "slice1813" (s1.[1..3] = "bcd") - test "slice1814" (s1.[1..4] = "bcde") - test "slice1815" (s1.[1 ..5] = "bcdef") - test "slice1818" (try s1.[1..6] |> ignore; false with _ -> true) - test "slice1819" (try s1.[-1..1] |> ignore; false with _ -> true) - test "slice1940" (s1.[0..1] = "ab") - test "slice1941" (s1.[1..1] = "b") - test "slice1942" (s1.[2..1] = "") -#if MONO - test "slice1943" (s1.[3..1] = "") - test "slice1944" (s1.[4..1] = "") -#endif - - test "slice1950" (s1.[-3..-4] = "") - test "slice1951" (try s1.[-4..-3] |> ignore; false with _ -> true) - - let empty = "" - test "slice1961" (empty.[*] = "") - test "slice1962" (empty.[5..3] = "") - test "slice1963" (empty.[0..] = "") - test "slice1964" (try empty.[..0] |> ignore; false with _ -> true) - test "slice1965" (try empty.[0..0] |> ignore; false with _ -> true) - test "slice1966" (try empty.[0..1] |> ignore; false with _ -> true) - test "slice1967" (try empty.[3..5] |> ignore; false with _ -> true) - -module ArraySlicingTestBytes = - - let s1 = "abcdef"B - test "bslice1922" (s1.[*] = s1) - test "bslice1923" (s1.[0..] = s1) - test "bslice1924" (s1.[1..] = "bcdef"B) - test "bslice1925" (s1.[2..] = "cdef"B) - test "bslice1926" (s1.[5..] = "f"B) - test "bslice1927" (s1.[6..] = ""B) - test "bslice1928" (try s1.[7..] |> ignore; false with _ -> true) - test "bslice1929" (try s1.[-1 ..] |> ignore; false with _ -> true) - test "bslice1917" (s1.[..0] = "a"B) - test "bslice1911" (s1.[..1] = "ab"B) - test "bslice1912" (s1.[..2] = "abc"B) - test "bslice1913" (s1.[..3] = "abcd"B) - test "bslice1914" (s1.[..4] = "abcde"B) - test "bslice1915" (s1.[..5] = "abcdef"B) - test "bslice1918" (try s1.[..6] |> ignore; false with _ -> true) - test "bslice1919" (try s1.[.. -1] |> ignore; false with _ -> true) - test "bslice1816" (s1.[1..-1] = ""B) - test "bslice1817" (s1.[1..0] = ""B) - test "bslice1811" (s1.[1..1] = "b"B) - test "bslice1812" (s1.[1..2] = "bc"B) - test "bslice1813" (s1.[1..3] = "bcd"B) - test "bslice1814" (s1.[1..4] = "bcde"B) - test "bslice1815" (s1.[1 ..5] = "bcdef"B) - test "bslice1818" (try s1.[1..6] |> ignore; false with _ -> true) - test "bslice1819" (try s1.[-1..1] |> ignore; false with _ -> true) - test "bslice1940" (s1.[0..1] = "ab"B) - test "bslice1941" (s1.[1..1] = "b"B) - test "bslice1942" (s1.[2..1] = ""B) - test "bslice1943" (s1.[3..1] = ""B) - test "bslice1944" (s1.[4..1] = ""B) - test "bslice1950" (s1.[-3..-4] = ""B) - test "bslice1951" (try s1.[-4..-3] |> ignore; false with _ -> true) - - let empty = ""B - test "bslice1961" (empty.[*] = ""B) - test "bslice1962" (empty.[5..3] = ""B) - test "bslice1963" (empty.[0..] = ""B) - test "bslice1964" (try empty.[..0] |> ignore; false with _ -> true) - test "bslice1965" (try empty.[0..0] |> ignore; false with _ -> true) - test "bslice1966" (try empty.[0..1] |> ignore; false with _ -> true) - test "bslice1967" (try empty.[3..5] |> ignore; false with _ -> true) - -module ArraySlicingTestInts = - - let s1 = [| 1;2;3;4;5;6 |] - test "aslice1922" (s1.[*] = s1) - test "aslice1923" (s1.[0..] = s1) - test "aslice1924" (s1.[1..] = [| 2;3;4;5;6 |]) - test "aslice1925" (s1.[2..] = [| 3;4;5;6 |]) - test "aslice1926" (s1.[5..] = [| 6 |]) - test "aslice1927" (s1.[6..] = [| |]) - test "aslice1928" (try s1.[7..] |> ignore; false with _ -> true) - test "aslice1929" (try s1.[-1 ..] |> ignore; false with _ -> true) - test "aslice1917" (s1.[..0] = [| 1 |]) - test "aslice1911" (s1.[..1] = [| 1;2|]) - test "aslice1912" (s1.[..2] = [| 1;2;3 |]) - test "aslice1913" (s1.[..3] = [| 1;2;3;4|]) - test "aslice1914" (s1.[..4] = [| 1;2;3;4;5 |]) - test "aslice1915" (s1.[..5] = [| 1;2;3;4;5;6 |]) - test "aslice1918" (try s1.[..6] |> ignore; false with _ -> true) - test "aslice1919" (try s1.[.. -1] |> ignore; false with _ -> true) - test "aslice1816" (s1.[1..-1] = [| |]) - test "aslice1817" (s1.[1..0] = [| |]) - test "aslice1811" (s1.[1..1] = [| 2 |]) - test "aslice1812" (s1.[1..2] = [| 2;3 |]) - test "aslice1813" (s1.[1..3] = [| 2;3;4|]) - test "aslice1814" (s1.[1..4] = [| 2;3;4;5|]) - test "aslice1815" (s1.[1 ..5] = [| 2;3;4;5;6|]) - test "aslice1818" (try s1.[1..6] |> ignore; false with _ -> true) - test "aslice1819" (try s1.[-1..1] |> ignore; false with _ -> true) - test "aslice1940" (s1.[0..1] = [| 1;2|]) - test "aslice1941" (s1.[1..1] = [| 2 |]) - test "aslice1942" (s1.[2..1] = [| |]) - test "aslice1943" (s1.[3..1] = [| |]) - test "aslice1944" (s1.[4..1] = [| |]) - test "aslice1950" (s1.[-3..-4] = [| |]) - test "aslice1951" (try s1.[-4..-3] |> ignore; false with _ -> true) - - let empty : int array = [| |] - test "aslice1961" (empty.[*] = [| |]) - test "aslice1962" (empty.[5..3] = [| |]) - test "aslice1963" (empty.[0..] = [| |]) - test "aslice1964" (try empty.[..0] |> ignore; false with _ -> true) - test "aslice1965" (try empty.[0..0] |> ignore; false with _ -> true) - test "aslice1966" (try empty.[0..1] |> ignore; false with _ -> true) - test "aslice1967" (try empty.[3..5] |> ignore; false with _ -> true) - - -module Array2DSlicingTests = - - let array2d (arrs: 'a array array) = Array2D.init arrs.Length arrs.[0].Length (fun i j -> arrs.[i].[j]) - - let m1 = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |] - test "a2slice1923" (m1.[*,*] = m1) - test "a2slice1924" (m1.[0..,*] = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) - test "a2slice1925" (m1.[1..,*] = array2d [| //[| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) - test "a2slice1926" (m1.[..0,*] = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - //[| 10.0;20.0;30.0;40.0;50.0;60.0 |] - |]) - test "a2slice1927" (m1.[*,0..] = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] - |]) - test "a2slice1928" (m1.[*,1..] = array2d [| [| 2.0;3.0;4.0;5.0;6.0 |]; - [| 20.0;30.0;40.0;50.0;60.0 |] - |]) - test "a2slice1929" (m1.[*,2..] = array2d [| [| 3.0;4.0;5.0;6.0 |]; - [| 30.0;40.0;50.0;60.0 |] - |]) - test "a2slice192a" (m1.[*,3..] = array2d [| [| 4.0;5.0;6.0 |]; - [| 40.0;50.0;60.0 |] - |]) - test "a2slice192b" (m1.[*,4..] = array2d [| [| 5.0;6.0 |]; - [| 50.0;60.0 |] - |]) - test "a2slice192c" (m1.[*,5..] = array2d [| [| 6.0 |]; - [| 60.0 |] - |]) - test "a2slice1930" (m1.[*, 0] = [| 1.0; 10.0 |]) - test "a2slice1931" (m1.[1.., 3] = [| 40.0 |]) - test "a2slice1932" (m1.[1, *] = [| 10.0;20.0;30.0;40.0;50.0;60.0 |]) - test "a2slice1933" (m1.[0, ..3] = [| 1.0;2.0;3.0;4.0 |]) - test "a2slice1940" (m1.[1, 3..1] = [| |]) - test "a2slice1941" (m1.[3..1, 1] = [| |]) - test "a2slice1942" (try m1.[1, 10..] |> ignore; false with _ -> true) - test "a2slice1943" (try m1.[10.., 1] |> ignore; false with _ -> true) - test "a2slice1944" (try m1.[1, .. -1] |> ignore; false with _ -> true) - test "a2slice1945" (try m1.[.. -1, 1] |> ignore; false with _ -> true) - - let arr2D1 = array2d [| [| 1.; 2.; 3.; 4. |]; - [| 5.; 6.; 7.; 8. |]; - [| 9.; 10.; 11.; 12. |] |] - arr2D1.[0, *] <- [|0.; 0.; 0.; 0.|] - test "a2slice1934" (arr2D1.[0,*] = [|0.; 0.; 0.; 0.|]) - arr2D1.[*, 1] <- [|100.; 100.; 100.|] - test "a2slice1935" (arr2D1.[*,1] = [|100.; 100.; 100.|]) - test "a2slice1936" (arr2D1.[*,*] = array2d [| [| 0.; 100.; 0.; 0. |]; - [| 5.; 100.; 7.; 8. |]; - [| 9.; 100.; 11.; 12. |] |]) - -module Array3DSlicingTests = - - let array3d (arrs: 'a array array array ) = Array3D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length (fun i j k -> arrs.[i].[j].[k]) - - let m1 = array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] - test "a3slice1923" (m1.[*,*,*] = m1) - test "a3slice1924" (m1.[0..,*,*] = - array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) - test "a3slice1925" (m1.[0..0,*,*] = - array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] |]) - test "a3slice1926" (m1.[1..1,*,*] = - array3d [| - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - - test "a3slice1927" (m1.[*,1..1,*] = - array3d [| - [| [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - test "a3slice1928" (m1.[..1,*,*] = - array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - test "a3slice1929" (m1.[*,0..0,*] = - array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] |] ) - test "a3slice1930" (m1.[*,0..1,*] = - array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - test "a3slice1931" (m1.[*,*,0..0] = - array3d [| - [| [| 1.0|]; - [| 11.0|] |] - [| [| 10.0|]; - [| 100.0 |] |] |] ) - test "a3slice1932" (m1.[*,*,0..5] = - array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - - test "a3slice1933" (try m1.[*,*,7..] |> ignore; false with _ -> true) - test "a3slice1934" (try m1.[*,*,.. -1] |> ignore; false with _ -> true) - - test "a3slice1935" (try m1.[*,3..,*] |> ignore; false with _ -> true) - test "a3slice1936" (try m1.[*,.. -1,*] |> ignore; false with _ -> true) - - test "a3slice1937" (try m1.[3..,*,*] |> ignore; false with _ -> true) - test "a3slice1938" (try m1.[.. -1,*,*] |> ignore; false with _ -> true) - -module Array4DSlicingTests = - - let array4d (arrs: 'a array array array array) = Array4D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length arrs.[0].[0].[0].Length (fun i j k m -> arrs.[i].[j].[k].[m]) - - let m1 = array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; - [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] - |] - test "a4slice1923" (m1.[*,*,*,*] = m1) - test "a4slice1924" (m1.[0..,*,*,*] = m1) - test "a4slice1925" (m1.[0..0,*,*,*] = - array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] - |]) - test "a4slice1926" (m1.[1..1,*,*,*] = - array4d - [| - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; - [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] - |]) - - test "a4slice1927" (m1.[*,0..0,*,*] = - array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - |]; - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; - [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] - |] - |]) - test "a4slice1928" (m1.[..1,*,*,*] = m1) - test "a4slice1929" (m1.[*,1..,*,*] = - array4d - [| - [| - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] - |]; - [| - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] - |] - |]) - test "a4slice1930" (m1.[*,0..1,*,*] = m1) - test "a4slice1931" (m1.[*,*,0..0,*] = - array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] - |]; - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; |] - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; |] |] - |]) - test "a4slice1932" (m1.[*,*,*,0..5] = m1) - - test "a4slice1931" (m1.[*,*,*,0..4] = - array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0 |]; - [| 11.0;21.0;31.0;41.0;51.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0 |]; - [| 100.0;200.0;300.0;400.0;500.0 |] |] - |]; - [| - [| [| 19.0;29.0;39.0;49.0;59.0 |]; - [| 119.0;219.0;319.0;419.0;519.0 |] |] - [| [| 109.0;209.0;309.0;409.0;509.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0 |] |] - |] - |]) - - test "a4slice1931" (try m1.[*,*,*,7..] |> ignore; false with _ -> true) - test "a4slice1932" (try m1.[*,*,*,.. -1] |> ignore; false with _ -> true) - - test "a4slice1933" (try m1.[*,*,3..,*] |> ignore; false with _ -> true) - test "a4slice1934" (try m1.[*,*,.. -1,*] |> ignore; false with _ -> true) - - test "a4slice1935" (try m1.[*,3..,*,*] |> ignore; false with _ -> true) - test "a4slice1936" (try m1.[*,.. -1,*,*] |> ignore; false with _ -> true) - - test "a4slice1937" (try m1.[3..,*,*,*] |> ignore; false with _ -> true) - test "a4slice1938" (try m1.[.. -1,*,*,*] |> ignore; false with _ -> true) module ArrayStructMutation = module Array1D = From c971fd668a2a8bbba6fe82d71567ec1aca08e230 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 28 Sep 2019 12:18:57 +0000 Subject: [PATCH 035/214] Update dependencies from https://github.com/dotnet/arcade build 20190927.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19477.2 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index aef250643d..a52eaa2a46 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - b449f372df1a3374ebdc85f42ff137dcda08776b + 14abaee3dba41fbe608431fb6a4f4b2435dcac33 diff --git a/global.json b/global.json index e8c93c341d..761120bf4a 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19476.6", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19477.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From ef71b540db5f60b5c7a7ee711e38e3a9fd95f79a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 1 Oct 2019 12:20:31 +0000 Subject: [PATCH 036/214] Update dependencies from https://github.com/dotnet/arcade build 20190930.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19480.3 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a52eaa2a46..dcc02cf458 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 14abaee3dba41fbe608431fb6a4f4b2435dcac33 + 238f1bbb23ba67616818d0b242c5b55a18edec55 diff --git a/global.json b/global.json index 761120bf4a..03abf24d3b 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19477.2", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19480.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From cb32e96f5652c70e5d220c6868d234df71df4b51 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 1 Oct 2019 09:19:55 -0700 Subject: [PATCH 037/214] Revert "Consistent slicing for list, array(2d), string (#7541)" (#7653) This reverts commit 3dd1dc6e03e9565ff433fd653415fdc065d65afa. --- src/fsharp/FSharp.Core/prim-types.fs | 35 +- .../Array2Module.fs | 102 ----- .../Array3Module.fs | 78 ---- .../Array4Module.fs | 124 +----- .../ArrayModule.fs | 86 ----- .../Microsoft.FSharp.Collections/ListType.fs | 63 +-- .../StringModule.fs | 84 ---- .../Microsoft.FSharp.Collections/Utils.fs | 6 +- tests/fsharp/core/array/test.fsx | 364 ++++++++++++++++++ 9 files changed, 405 insertions(+), 537 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index bfab4a8ff4..542852e5da 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -380,7 +380,6 @@ namespace Microsoft.FSharp.Core let inline not (b:bool) = (# "ceq" b false : bool #) let inline (=) (x:int) (y:int) = (# "ceq" x y : bool #) let inline (<>) (x:int) (y:int) = not(# "ceq" x y : bool #) - let inline (<=) (x:int) (y:int) = not(# "cgt" x y : bool #) let inline (>=) (x:int) (y:int) = not(# "clt" x y : bool #) let inline (>=.) (x:int64) (y:int64) = not(# "clt" x y : bool #) let inline (>=...) (x:char) (y:char) = not(# "clt" x y : bool #) @@ -653,7 +652,6 @@ namespace Microsoft.FSharp.Core let inline GetArray2DLength2 (arr: 'T[,]) = (# "ldlen.multi 2 1" arr : int #) let inline Array2DZeroCreate (n:int) (m:int) = (# "newarr.multi 2 !0" type ('T) n m : 'T[,] #) - let GetArray2DSub (src: 'T[,]) src1 src2 len1 len2 = let len1 = (if len1 < 0 then 0 else len1) let len2 = (if len2 < 0 then 0 else len2) @@ -3090,32 +3088,36 @@ namespace Microsoft.FSharp.Collections elif n = 0 then h else nth t (n - 1) + // similar to 'takeFreshConsTail' but with exceptions same as array slicing let rec sliceFreshConsTail cons n l = if n = 0 then setFreshConsTail cons [] else match l with - | [] -> setFreshConsTail cons [] + | [] -> outOfRange() | x :: xs -> let cons2 = freshConsNoTail x setFreshConsTail cons cons2 sliceFreshConsTail cons2 (n - 1) xs + // similar to 'take' but with n representing an index, not a number of elements + // and with exceptions matching array slicing let sliceTake n l = if n < 0 then [] else match l with - | [] -> [] + | [] -> outOfRange() | x :: xs -> let cons = freshConsNoTail x sliceFreshConsTail cons n xs cons + // similar to 'skip' but with exceptions same as array slicing let sliceSkip n l = - let n2 = if n < 0 then 0 else n + if n < 0 then outOfRange() let rec loop i lst = match lst with | _ when i = 0 -> lst | _ :: t -> loop (i-1) t - | [] -> [] - loop n2 l + | [] -> outOfRange() + loop n l type List<'T> with [] @@ -3155,8 +3157,7 @@ namespace Microsoft.FSharp.Collections | None, Some(j) -> PrivateListHelpers.sliceTake j l | Some(i), Some(j) -> if i > j then [] else - let start = if i < 0 then 0 else i - PrivateListHelpers.sliceTake (j - start) (PrivateListHelpers.sliceSkip start l) + PrivateListHelpers.sliceTake (j-i) (PrivateListHelpers.sliceSkip i l) interface IEnumerable<'T> with member l.GetEnumerator() = PrivateListHelpers.mkListEnumerator l @@ -4868,16 +4869,12 @@ namespace Microsoft.FSharp.Core let PowGeneric (one, mul, value: 'T, exponent) = ComputePowerGenericInlined one mul value exponent let inline ComputeSlice bound start finish length = - let low = - match start with - | Some n when n >= bound -> n - | _ -> bound - let high = - match finish with - | Some m when m < bound + length -> m - | _ -> bound + length - 1 - - low, high + match start, finish with + | None, None -> bound, bound + length - 1 + | None, Some n when n >= bound -> bound, n + | Some m, None when m <= bound + length -> m, bound + length - 1 + | Some m, Some n -> m, n + | _ -> raise (System.IndexOutOfRangeException()) let inline GetArraySlice (source: _[]) start finish = let start, finish = ComputeSlice 0 start finish source.Length diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs index 24d51fe6e0..b8fb043157 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs @@ -8,7 +8,6 @@ namespace FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections open System open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework -open Utils (* [Test Strategy] @@ -21,12 +20,6 @@ Make sure each method works on: [][][] type Array2Module() = - - let shouldBeEmpty arr = - if Array2D.length2 arr <> 0 - && Array2D.length1 arr <> 0 then - Assert.Fail("Array2D is not empty.") - [] member this.Base1() = // integer array @@ -580,98 +573,3 @@ type Array2Module() = if m16.[0,0] <> null then Assert.Fail() - [] - member this.SlicingBoundedStartEnd() = - let m1 = array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |] - - shouldEqual m1.[*,*] m1 - shouldEqual m1.[0..,*] (array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) - shouldEqual m1.[1..,*] (array2D [| - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) - shouldEqual m1.[..0,*] (array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - |]) - shouldEqual m1.[*,0..] (array2D [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 10.0;20.0;30.0;40.0;50.0;60.0 |] - |]) - shouldEqual m1.[*,1..] (array2D [| [| 2.0;3.0;4.0;5.0;6.0 |]; - [| 20.0;30.0;40.0;50.0;60.0 |] - |]) - shouldEqual m1.[*,2..] (array2D [| [| 3.0;4.0;5.0;6.0 |]; - [| 30.0;40.0;50.0;60.0 |] - |]) - shouldEqual m1.[*,3..] (array2D [| [| 4.0;5.0;6.0 |]; - [| 40.0;50.0;60.0 |] - |]) - shouldEqual m1.[*,4..] (array2D [| [| 5.0;6.0 |]; - [| 50.0;60.0 |] - |]) - shouldEqual m1.[*,5..] (array2D [| [| 6.0 |]; - [| 60.0 |] - |]) - shouldEqual m1.[*, 0] [| 1.0; 10.0 |] - shouldEqual m1.[1.., 3] [| 40.0 |] - shouldEqual m1.[1, *] [| 10.0;20.0;30.0;40.0;50.0;60.0 |] - shouldEqual m1.[0, ..3] [| 1.0;2.0;3.0;4.0 |] - - - [] - member this.SlicingUnboundedEnd() = - let arr = array2D [ [1;2;3;4;5;6]; [6;5;4;3;2;1]] - - shouldEqual arr.[(-1).., *] arr - shouldEqual arr.[0.., 1..] (array2D [ [2;3;4;5;6]; [5;4;3;2;1] ]) - shouldEqual arr.[1.., ..3] (array2D [ [6;5;4;3] ]) - shouldBeEmpty arr.[2.., 6..] - - - [] - member this.SlicingUnboundedStart() = - let arr = array2D [ [1;2;3;4;5;6]; [6;5;4;3;2;1]] - - shouldBeEmpty arr.[..(-1), *] - shouldEqual arr.[..0, ..4] (array2D [ [1;2;3;4;5] ]) - shouldEqual arr.[..1, ..3] (array2D [ [1;2;3;4]; [6;5;4;3] ]) - shouldEqual arr.[..2, ..6] arr - - - [] - member this.SlicingOutOfBounds() = - let arr = array2D [ [1;2;3;4;5;6]; [6;5;4;3;2;1]] - - shouldEqual arr.[*, ..6] arr - shouldBeEmpty arr.[*, 6..] - shouldEqual arr.[..2, *] arr - shouldBeEmpty arr.[2.., *] - - shouldBeEmpty arr.[1..0, *] - shouldBeEmpty arr.[1..0, (-1)..0] - - shouldBeEmpty arr.[0..(-1), *] - shouldBeEmpty arr.[1..(-1), *] - shouldBeEmpty arr.[1..0, *] - shouldEqual arr.[0..6, (-1)..9] arr - shouldEqual arr.[*, 1..6] (array2D [ [2;3;4;5;6]; [5;4;3;2;1] ]) - - shouldEqual arr.[1, 3..1] [| |] - shouldEqual arr.[3..1, 1] [| |] - shouldEqual arr.[10.., 1] [| |] - shouldEqual arr.[1, 10..] [| |] - shouldEqual arr.[1, .. -1] [| |] - shouldEqual arr.[.. -1, 1] [| |] - - [] - member this.SlicingMutation() = - let arr2D1 = array2D [| [| 1.; 2.; 3.; 4. |]; - [| 5.; 6.; 7.; 8. |]; - [| 9.; 10.; 11.; 12. |] |] - - arr2D1.[0, *] <- [|0.; 0.; 0.; 0.|] - shouldEqual arr2D1.[0,*] [|0.; 0.; 0.; 0.|] - arr2D1.[*, 1] <- [|100.; 100.; 100.|] - shouldEqual arr2D1.[*,1] [|100.; 100.; 100.|] - shouldEqual arr2D1.[*,*] (array2D [| [| 0.; 100.; 0.; 0. |]; - [| 5.; 100.; 7.; 8. |]; - [| 9.; 100.; 11.; 12. |] |]) - diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs index 3e5440fd72..bb6c5a0846 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs @@ -8,7 +8,6 @@ namespace FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections open System open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework -open Utils (* [Test Strategy] @@ -22,8 +21,6 @@ Make sure each method works on: [][][] type Array3Module() = - let array3d (arrs: 'a array array array ) = Array3D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length (fun i j k -> arrs.[i].[j].[k]) - let VerifyDimensions arr x y z = if Array3D.length1 arr <> x then Assert.Fail("Array3D does not have expected dimensions.") @@ -31,18 +28,6 @@ type Array3Module() = if Array3D.length3 arr <> z then Assert.Fail("Array3D does not have expected dimensions.") () - let shouldBeEmpty arr = - if Array3D.length3 arr <> 0 - && Array3D.length2 arr <> 0 - && Array3D.length1 arr <> 0 then - Assert.Fail("Array3D is not empty.") - - let m1 = (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) - [] member this.Create() = // integer array @@ -345,66 +330,3 @@ type Array3Module() = CheckThrowsArgumentException(fun () -> Array3D.zeroCreate 1 1 -1 |> ignore) () - - [] - member this.SlicingBoundedStartEnd() = - shouldEqual m1.[*,*,*] m1 - shouldEqual m1.[0..,*,*] - (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) - shouldEqual m1.[0..0,*,*] - (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] |]) - shouldEqual m1.[1..1,*,*] - (array3d [| - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - - shouldEqual m1.[*,1..1,*] - (array3d [| - [| [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - shouldEqual m1.[..1,*,*] - (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - shouldEqual m1.[*,0..0,*] - (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] |] ) - shouldEqual m1.[*,0..1,*] - (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - shouldEqual m1.[*,*,0..0] - (array3d [| - [| [| 1.0|]; - [| 11.0|] |] - [| [| 10.0|]; - [| 100.0 |] |] |] ) - shouldEqual m1.[*,*,0..5] - (array3d [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) - - [] - member this.SlicingOutOfBounds() = - shouldBeEmpty m1.[*,*,7..] - shouldBeEmpty m1.[*,*,.. -1] - - shouldBeEmpty m1.[*,3..,*] - shouldBeEmpty m1.[*,.. -1,*] - - shouldBeEmpty m1.[3..,*,*] - shouldBeEmpty m1.[.. -1,*,*] - diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs index a53286b3c0..d67fb17cd8 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs @@ -8,7 +8,6 @@ namespace FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections open System open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework -open Utils (* [Test Strategy] @@ -24,35 +23,12 @@ Make sure each method works on: type Array4Module() = let VerifyDimensions arr x y z u = - if Array4D.length1 arr <> x then Assert.Fail("Array4D does not have expected dimensions.") - if Array4D.length2 arr <> y then Assert.Fail("Array4D does not have expected dimensions.") - if Array4D.length3 arr <> z then Assert.Fail("Array4D does not have expected dimensions.") + if Array4D.length1 arr <> x then Assert.Fail("Array3D does not have expected dimensions.") + if Array4D.length2 arr <> y then Assert.Fail("Array3D does not have expected dimensions.") + if Array4D.length3 arr <> z then Assert.Fail("Array3D does not have expected dimensions.") if Array4D.length4 arr <> u then Assert.Fail("Array4D does not have expected dimensions.") () - let array4d (arrs: 'a array array array array) = Array4D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length arrs.[0].[0].[0].Length (fun i j k m -> arrs.[i].[j].[k].[m]) - - let shouldBeEmpty arr = - if Array4D.length4 arr <> 0 - && Array4D.length3 arr <> 0 - && Array4D.length2 arr <> 0 - && Array4D.length1 arr <> 0 then - Assert.Fail("Array3D is not empty.") - - let m1 = array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; - [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] - |] - [] member this.Create() = // integer array @@ -268,97 +244,3 @@ type Array4Module() = CheckThrowsArgumentException(fun () -> Array4D.zeroCreate 1 1 1 -1 |> ignore) () - - [] - member this.SlicingBoundedStartEnd() = - shouldEqual m1.[*,*,*,*] m1 - shouldEqual m1.[0..,*,*,*] m1 - shouldEqual m1.[0..0,*,*,*] - (array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] - |]) - shouldEqual m1.[1..1,*,*,*] - (array4d - [| - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; - [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] - |]) - - shouldEqual m1.[*,0..0,*,*] - (array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; - [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] - |]; - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; - [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] - |] - |]) - shouldEqual m1.[..1,*,*,*] m1 - shouldEqual m1.[*,1..,*,*] - (array4d - [| - [| - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; - [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] - |]; - [| - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] - |] - |]) - shouldEqual m1.[*,0..1,*,*] m1 - shouldEqual m1.[*,*,0..0,*] - (array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] - [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] - |]; - [| - [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; |] - [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; |] |] - |]) - shouldEqual m1.[*,*,*,0..5] m1 - - shouldEqual m1.[*,*,*,0..4] - (array4d - [| - [| - [| [| 1.0;2.0;3.0;4.0;5.0 |]; - [| 11.0;21.0;31.0;41.0;51.0 |] |] - [| [| 10.0;20.0;30.0;40.0;50.0 |]; - [| 100.0;200.0;300.0;400.0;500.0 |] |] - |]; - [| - [| [| 19.0;29.0;39.0;49.0;59.0 |]; - [| 119.0;219.0;319.0;419.0;519.0 |] |] - [| [| 109.0;209.0;309.0;409.0;509.0 |]; - [| 1009.0;2009.0;3009.0;4009.0;5009.0 |] |] - |] - |]) - - - [] - member this.SlicingOutOfBounds() = - shouldBeEmpty m1.[*,*,*,7..] - shouldBeEmpty m1.[*,*,*,.. -1] - - shouldBeEmpty m1.[*,*,3..,*] - shouldBeEmpty m1.[*,*,.. -1,*] - - shouldBeEmpty m1.[*,3..,*,*] - shouldBeEmpty m1.[*,.. -1,*,*] - - shouldBeEmpty m1.[3..,*,*,*] - shouldBeEmpty m1.[.. -1,*,*,*] diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs index 412b0d3a39..ef82fde276 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs @@ -1677,89 +1677,3 @@ type ArrayModule() = // null array let nullArr = null:string[] CheckThrowsArgumentNullException (fun () -> Array.contains "empty" nullArr |> ignore) - - - [] - member this.SlicingUnboundedEnd() = - let arr = [|1;2;3;4;5;6|] - - Assert.AreEqual(arr.[-1..], arr) - Assert.AreEqual(arr.[0..], arr) - Assert.AreEqual(arr.[1..], [2;3;4;5;6]) - Assert.AreEqual(arr.[2..], [3;4;5;6]) - Assert.AreEqual(arr.[5..], [6]) - Assert.AreEqual(arr.[6..], ([||]: int array)) - Assert.AreEqual(arr.[7..], ([||]: int array)) - - - [] - member this.SlicingUnboundedStart() = - let arr = [|1;2;3;4;5;6|] - - Assert.AreEqual(arr.[..(-1)], ([||]: int array)) - Assert.AreEqual(arr.[..0], [|1|]) - Assert.AreEqual(arr.[..1], [|1;2|]) - Assert.AreEqual(arr.[..2], [|1;2;3|]) - Assert.AreEqual(arr.[..3], [|1;2;3;4|]) - Assert.AreEqual(arr.[..4], [|1;2;3;4;5|]) - Assert.AreEqual(arr.[..5], [|1;2;3;4;5;6|]) - Assert.AreEqual(arr.[..6], [|1;2;3;4;5;6|]) - Assert.AreEqual(arr.[..7], [|1;2;3;4;5;6|]) - - - [] - member this.SlicingBoundedStartEnd() = - let arr = [|1;2;3;4;5;6|] - - Assert.AreEqual(arr.[*], arr) - - Assert.AreEqual(arr.[0..0], [|1|]) - Assert.AreEqual(arr.[0..1], [|1;2|]) - Assert.AreEqual(arr.[0..2], [|1;2;3|]) - Assert.AreEqual(arr.[0..3], [|1;2;3;4|]) - Assert.AreEqual(arr.[0..4], [|1;2;3;4;5|]) - Assert.AreEqual(arr.[0..5], [|1;2;3;4;5;6|]) - - Assert.AreEqual(arr.[1..1], [|2|]) - Assert.AreEqual(arr.[1..2], [|2;3|]) - Assert.AreEqual(arr.[1..3], [|2;3;4|]) - Assert.AreEqual(arr.[1..4], [|2;3;4;5|]) - Assert.AreEqual(arr.[1..5], [|2;3;4;5;6|]) - - Assert.AreEqual(arr.[0..1], [|1;2|]) - Assert.AreEqual(arr.[1..1], [|2|]) - Assert.AreEqual(arr.[2..1], ([||]: int array)) - Assert.AreEqual(arr.[3..1], ([||]: int array)) - Assert.AreEqual(arr.[4..1], ([||]: int array)) - - - [] - member this.SlicingEmptyArray() = - - let empty : obj array = Array.empty - Assert.AreEqual(empty.[*], ([||]: obj array)) - Assert.AreEqual(empty.[5..3], ([||]: obj array)) - Assert.AreEqual(empty.[0..], ([||]: obj array)) - Assert.AreEqual(empty.[0..0], ([||]: obj array)) - Assert.AreEqual(empty.[0..1], ([||]: obj array)) - Assert.AreEqual(empty.[3..5], ([||]: obj array)) - - - [] - member this.SlicingOutOfBounds() = - let arr = [|1;2;3;4;5;6|] - - Assert.AreEqual(arr.[..6], [|1;2;3;4;5;6|]) - Assert.AreEqual(arr.[6..], ([||]: int array)) - - Assert.AreEqual(arr.[0..(-1)], ([||]: int array)) - Assert.AreEqual(arr.[1..(-1)], ([||]: int array)) - Assert.AreEqual(arr.[1..0], ([||]: int array)) - Assert.AreEqual(arr.[0..6], [|1;2;3;4;5;6|]) - Assert.AreEqual(arr.[1..6], [|2;3;4;5;6|]) - - Assert.AreEqual(arr.[-1..1], [|1;2|]) - Assert.AreEqual(arr.[-3..(-4)], ([||]: int array)) - Assert.AreEqual(arr.[-4..(-3)], ([||]: int array)) - - diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs index bf70a8b423..80c13757f6 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs @@ -244,23 +244,21 @@ type ListType() = if emptyList <> [2] then Assert.Fail() () - - [] - member this.SlicingUnboundedEnd() = + [] + member this.Slicing() = let lst = [1;2;3;4;5;6] - Assert.AreEqual(lst.[-1..], lst) + Assert.AreEqual(lst.[*], lst) + + CheckThrowsIndexOutRangException((fun _ -> lst.[-1 ..] |> ignore)) Assert.AreEqual(lst.[0..], lst) Assert.AreEqual(lst.[1..], [2;3;4;5;6]) Assert.AreEqual(lst.[2..], [3;4;5;6]) Assert.AreEqual(lst.[5..], [6]) Assert.AreEqual(lst.[6..], ([]: int list)) + CheckThrowsIndexOutRangException((fun _ -> lst.[7..] |> ignore)) - - [] - member this.SlicingUnboundedStart() = - let lst = [1;2;3;4;5;6] - + Assert.AreEqual(lst.[..(-1)], ([]: int list)) Assert.AreEqual(lst.[..0], [1]) Assert.AreEqual(lst.[..1], [1;2]) @@ -268,60 +266,41 @@ type ListType() = Assert.AreEqual(lst.[..3], [1;2;3;4]) Assert.AreEqual(lst.[..4], [1;2;3;4;5]) Assert.AreEqual(lst.[..5], [1;2;3;4;5;6]) - - - [] - member this.SlicingBoundedStartEnd() = - let lst = [1;2;3;4;5;6] - - Assert.AreEqual(lst.[*], lst) - + CheckThrowsIndexOutRangException((fun _ -> lst.[..6] |> ignore)) + + Assert.AreEqual(lst.[0..(-1)], ([]: int list)) Assert.AreEqual(lst.[0..0], [1]) Assert.AreEqual(lst.[0..1], [1;2]) Assert.AreEqual(lst.[0..2], [1;2;3]) Assert.AreEqual(lst.[0..3], [1;2;3;4]) Assert.AreEqual(lst.[0..4], [1;2;3;4;5]) Assert.AreEqual(lst.[0..5], [1;2;3;4;5;6]) + CheckThrowsIndexOutRangException((fun _ -> lst.[0..6] |> ignore)) + Assert.AreEqual(lst.[1..(-1)], ([]: int list)) + Assert.AreEqual(lst.[1..0], ([]: int list)) Assert.AreEqual(lst.[1..1], [2]) Assert.AreEqual(lst.[1..2], [2;3]) Assert.AreEqual(lst.[1..3], [2;3;4]) Assert.AreEqual(lst.[1..4], [2;3;4;5]) Assert.AreEqual(lst.[1..5], [2;3;4;5;6]) + CheckThrowsIndexOutRangException((fun _ -> lst.[1..6] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> lst.[-1..1] |> ignore)) Assert.AreEqual(lst.[0..1], [1;2]) Assert.AreEqual(lst.[1..1], [2]) Assert.AreEqual(lst.[2..1], ([]: int list)) Assert.AreEqual(lst.[3..1], ([]: int list)) Assert.AreEqual(lst.[4..1], ([]: int list)) - - [] - member this.SlicingEmptyList() = + Assert.AreEqual(lst.[-3..(-4)], ([]: int list)) + CheckThrowsIndexOutRangException((fun _ -> lst.[-4..(-3)] |> ignore)) let empty : obj list = List.empty Assert.AreEqual(empty.[*], ([]: obj list)) Assert.AreEqual(empty.[5..3], ([]: obj list)) Assert.AreEqual(empty.[0..], ([]: obj list)) - Assert.AreEqual(empty.[0..0], ([]: obj list)) - Assert.AreEqual(empty.[0..1], ([]: obj list)) - Assert.AreEqual(empty.[3..5], ([]: obj list)) - - - [] - member this.SlicingOutOfBounds() = - let lst = [1;2;3;4;5;6] - - Assert.AreEqual(lst.[..6], [1;2;3;4;5;6]) - Assert.AreEqual(lst.[6..], ([]: int list)) - - Assert.AreEqual(lst.[0..(-1)], ([]: int list)) - Assert.AreEqual(lst.[1..(-1)], ([]: int list)) - Assert.AreEqual(lst.[1..0], ([]: int list)) - Assert.AreEqual(lst.[0..6], [1;2;3;4;5;6]) - Assert.AreEqual(lst.[1..6], [2;3;4;5;6]) - - Assert.AreEqual(lst.[-1..1], [1;2]) - Assert.AreEqual(lst.[-3..(-4)], ([]: int list)) - Assert.AreEqual(lst.[-4..(-3)], ([]: int list)) - + CheckThrowsIndexOutRangException((fun _ -> empty.[..0] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> empty.[0..0] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> empty.[0..1] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> empty.[3..5] |> ignore)) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs index 48ea1df31e..a74fcba301 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs @@ -183,87 +183,3 @@ type StringModule() = let e3 = String.length null Assert.AreEqual(0, e3) - - [] - member this.SlicingUnboundedEnd() = - let str = "123456" - - Assert.AreEqual(str.[-1..], str) - Assert.AreEqual(str.[0..], str) - Assert.AreEqual(str.[1..], "23456") - Assert.AreEqual(str.[2..], "3456") - Assert.AreEqual(str.[5..], "6") - Assert.AreEqual(str.[6..], ("")) - Assert.AreEqual(str.[7..], ("")) - - - [] - member this.SlicingUnboundedStart() = - let str = "123456" - - Assert.AreEqual(str.[..(-1)], ("")) - Assert.AreEqual(str.[..0], "1") - Assert.AreEqual(str.[..1], "12") - Assert.AreEqual(str.[..2], "123") - Assert.AreEqual(str.[..3], "1234") - Assert.AreEqual(str.[..4], "12345") - Assert.AreEqual(str.[..5], "123456") - Assert.AreEqual(str.[..6], "123456") - Assert.AreEqual(str.[..7], "123456") - - - [] - member this.SlicingBoundedStartEnd() = - let str = "123456" - - Assert.AreEqual(str.[*], str) - - Assert.AreEqual(str.[0..0], "1") - Assert.AreEqual(str.[0..1], "12") - Assert.AreEqual(str.[0..2], "123") - Assert.AreEqual(str.[0..3], "1234") - Assert.AreEqual(str.[0..4], "12345") - Assert.AreEqual(str.[0..5], "123456") - - Assert.AreEqual(str.[1..1], "2") - Assert.AreEqual(str.[1..2], "23") - Assert.AreEqual(str.[1..3], "234") - Assert.AreEqual(str.[1..4], "2345") - Assert.AreEqual(str.[1..5], "23456") - - Assert.AreEqual(str.[0..1], "12") - Assert.AreEqual(str.[1..1], "2") - Assert.AreEqual(str.[2..1], ("")) - Assert.AreEqual(str.[3..1], ("")) - Assert.AreEqual(str.[4..1], ("")) - - - [] - member this.SlicingEmptyString() = - - let empty = "" - Assert.AreEqual(empty.[*], ("")) - Assert.AreEqual(empty.[5..3], ("")) - Assert.AreEqual(empty.[0..], ("")) - Assert.AreEqual(empty.[0..0], ("")) - Assert.AreEqual(empty.[0..1], ("")) - Assert.AreEqual(empty.[3..5], ("")) - - - [] - member this.SlicingOutOfBounds() = - let str = "123456" - - Assert.AreEqual(str.[..6], "123456") - Assert.AreEqual(str.[6..], ("")) - - Assert.AreEqual(str.[0..(-1)], ("")) - Assert.AreEqual(str.[1..(-1)], ("")) - Assert.AreEqual(str.[1..0], ("")) - Assert.AreEqual(str.[0..6], "123456") - Assert.AreEqual(str.[1..6], "23456") - - Assert.AreEqual(str.[-1..1], "12") - Assert.AreEqual(str.[-3..(-4)], ("")) - Assert.AreEqual(str.[-4..(-3)], ("")) - diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs index 57ab6f5876..b446e15ab7 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs @@ -2,8 +2,6 @@ module FSharp.Core.UnitTests.FSharp_Core.Microsoft_FSharp_Collections.Utils -open NUnit.Framework - type Result<'a> = | Success of 'a | Error of string @@ -34,6 +32,4 @@ let isSorted sorted = sorted |> Seq.pairwise |> Seq.forall (fun (a,b) -> a <= b) let haveSameElements (xs:seq<_>) (ys:seq<_>) = let xsHashSet = new System.Collections.Generic.HashSet<_>(xs) let ysHashSet = new System.Collections.Generic.HashSet<_>(ys) - xsHashSet.SetEquals(ysHashSet) - -let shouldEqual arr1 arr2 = if arr1 <> arr2 then Assert.Fail() \ No newline at end of file + xsHashSet.SetEquals(ysHashSet) \ No newline at end of file diff --git a/tests/fsharp/core/array/test.fsx b/tests/fsharp/core/array/test.fsx index b187984577..ee3c540782 100644 --- a/tests/fsharp/core/array/test.fsx +++ b/tests/fsharp/core/array/test.fsx @@ -747,6 +747,370 @@ module SeqCacheAllTest = test "test8" test8 test "test9" test9 +module StringSlicingTest = + let s1 = "abcdef" + test "slice1922" (s1.[*] = s1) + test "slice1923" (s1.[0..] = s1) + test "slice1924" (s1.[1..] = "bcdef") + test "slice1925" (s1.[2..] = "cdef") + test "slice1926" (s1.[5..] = "f") + test "slice1927" (s1.[6..] = "") + test "slice1928" (try s1.[7..] |> ignore; false with _ -> true) + test "slice1929" (try s1.[-1 ..] |> ignore; false with _ -> true) + test "slice1917" (s1.[..0] = "a") + test "slice1911" (s1.[..1] = "ab") + test "slice1912" (s1.[..2] = "abc") + test "slice1913" (s1.[..3] = "abcd") + test "slice1914" (s1.[..4] = "abcde") + test "slice1915" (s1.[..5] = "abcdef") + test "slice1918" (try s1.[..6] |> ignore; false with _ -> true) + test "slice1919" (try s1.[.. -1] |> ignore; false with _ -> true) + test "slice1816" (s1.[1..-1] = "") + test "slice1817" (s1.[1..0] = "") + test "slice1811" (s1.[1..1] = "b") + test "slice1812" (s1.[1..2] = "bc") + test "slice1813" (s1.[1..3] = "bcd") + test "slice1814" (s1.[1..4] = "bcde") + test "slice1815" (s1.[1 ..5] = "bcdef") + test "slice1818" (try s1.[1..6] |> ignore; false with _ -> true) + test "slice1819" (try s1.[-1..1] |> ignore; false with _ -> true) + test "slice1940" (s1.[0..1] = "ab") + test "slice1941" (s1.[1..1] = "b") + test "slice1942" (s1.[2..1] = "") +#if MONO + test "slice1943" (s1.[3..1] = "") + test "slice1944" (s1.[4..1] = "") +#endif + + test "slice1950" (s1.[-3..-4] = "") + test "slice1951" (try s1.[-4..-3] |> ignore; false with _ -> true) + + let empty = "" + test "slice1961" (empty.[*] = "") + test "slice1962" (empty.[5..3] = "") + test "slice1963" (empty.[0..] = "") + test "slice1964" (try empty.[..0] |> ignore; false with _ -> true) + test "slice1965" (try empty.[0..0] |> ignore; false with _ -> true) + test "slice1966" (try empty.[0..1] |> ignore; false with _ -> true) + test "slice1967" (try empty.[3..5] |> ignore; false with _ -> true) + +module ArraySlicingTestBytes = + + let s1 = "abcdef"B + test "bslice1922" (s1.[*] = s1) + test "bslice1923" (s1.[0..] = s1) + test "bslice1924" (s1.[1..] = "bcdef"B) + test "bslice1925" (s1.[2..] = "cdef"B) + test "bslice1926" (s1.[5..] = "f"B) + test "bslice1927" (s1.[6..] = ""B) + test "bslice1928" (try s1.[7..] |> ignore; false with _ -> true) + test "bslice1929" (try s1.[-1 ..] |> ignore; false with _ -> true) + test "bslice1917" (s1.[..0] = "a"B) + test "bslice1911" (s1.[..1] = "ab"B) + test "bslice1912" (s1.[..2] = "abc"B) + test "bslice1913" (s1.[..3] = "abcd"B) + test "bslice1914" (s1.[..4] = "abcde"B) + test "bslice1915" (s1.[..5] = "abcdef"B) + test "bslice1918" (try s1.[..6] |> ignore; false with _ -> true) + test "bslice1919" (try s1.[.. -1] |> ignore; false with _ -> true) + test "bslice1816" (s1.[1..-1] = ""B) + test "bslice1817" (s1.[1..0] = ""B) + test "bslice1811" (s1.[1..1] = "b"B) + test "bslice1812" (s1.[1..2] = "bc"B) + test "bslice1813" (s1.[1..3] = "bcd"B) + test "bslice1814" (s1.[1..4] = "bcde"B) + test "bslice1815" (s1.[1 ..5] = "bcdef"B) + test "bslice1818" (try s1.[1..6] |> ignore; false with _ -> true) + test "bslice1819" (try s1.[-1..1] |> ignore; false with _ -> true) + test "bslice1940" (s1.[0..1] = "ab"B) + test "bslice1941" (s1.[1..1] = "b"B) + test "bslice1942" (s1.[2..1] = ""B) + test "bslice1943" (s1.[3..1] = ""B) + test "bslice1944" (s1.[4..1] = ""B) + test "bslice1950" (s1.[-3..-4] = ""B) + test "bslice1951" (try s1.[-4..-3] |> ignore; false with _ -> true) + + let empty = ""B + test "bslice1961" (empty.[*] = ""B) + test "bslice1962" (empty.[5..3] = ""B) + test "bslice1963" (empty.[0..] = ""B) + test "bslice1964" (try empty.[..0] |> ignore; false with _ -> true) + test "bslice1965" (try empty.[0..0] |> ignore; false with _ -> true) + test "bslice1966" (try empty.[0..1] |> ignore; false with _ -> true) + test "bslice1967" (try empty.[3..5] |> ignore; false with _ -> true) + +module ArraySlicingTestInts = + + let s1 = [| 1;2;3;4;5;6 |] + test "aslice1922" (s1.[*] = s1) + test "aslice1923" (s1.[0..] = s1) + test "aslice1924" (s1.[1..] = [| 2;3;4;5;6 |]) + test "aslice1925" (s1.[2..] = [| 3;4;5;6 |]) + test "aslice1926" (s1.[5..] = [| 6 |]) + test "aslice1927" (s1.[6..] = [| |]) + test "aslice1928" (try s1.[7..] |> ignore; false with _ -> true) + test "aslice1929" (try s1.[-1 ..] |> ignore; false with _ -> true) + test "aslice1917" (s1.[..0] = [| 1 |]) + test "aslice1911" (s1.[..1] = [| 1;2|]) + test "aslice1912" (s1.[..2] = [| 1;2;3 |]) + test "aslice1913" (s1.[..3] = [| 1;2;3;4|]) + test "aslice1914" (s1.[..4] = [| 1;2;3;4;5 |]) + test "aslice1915" (s1.[..5] = [| 1;2;3;4;5;6 |]) + test "aslice1918" (try s1.[..6] |> ignore; false with _ -> true) + test "aslice1919" (try s1.[.. -1] |> ignore; false with _ -> true) + test "aslice1816" (s1.[1..-1] = [| |]) + test "aslice1817" (s1.[1..0] = [| |]) + test "aslice1811" (s1.[1..1] = [| 2 |]) + test "aslice1812" (s1.[1..2] = [| 2;3 |]) + test "aslice1813" (s1.[1..3] = [| 2;3;4|]) + test "aslice1814" (s1.[1..4] = [| 2;3;4;5|]) + test "aslice1815" (s1.[1 ..5] = [| 2;3;4;5;6|]) + test "aslice1818" (try s1.[1..6] |> ignore; false with _ -> true) + test "aslice1819" (try s1.[-1..1] |> ignore; false with _ -> true) + test "aslice1940" (s1.[0..1] = [| 1;2|]) + test "aslice1941" (s1.[1..1] = [| 2 |]) + test "aslice1942" (s1.[2..1] = [| |]) + test "aslice1943" (s1.[3..1] = [| |]) + test "aslice1944" (s1.[4..1] = [| |]) + test "aslice1950" (s1.[-3..-4] = [| |]) + test "aslice1951" (try s1.[-4..-3] |> ignore; false with _ -> true) + + let empty : int array = [| |] + test "aslice1961" (empty.[*] = [| |]) + test "aslice1962" (empty.[5..3] = [| |]) + test "aslice1963" (empty.[0..] = [| |]) + test "aslice1964" (try empty.[..0] |> ignore; false with _ -> true) + test "aslice1965" (try empty.[0..0] |> ignore; false with _ -> true) + test "aslice1966" (try empty.[0..1] |> ignore; false with _ -> true) + test "aslice1967" (try empty.[3..5] |> ignore; false with _ -> true) + + +module Array2DSlicingTests = + + let array2d (arrs: 'a array array) = Array2D.init arrs.Length arrs.[0].Length (fun i j -> arrs.[i].[j]) + + let m1 = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |] + test "a2slice1923" (m1.[*,*] = m1) + test "a2slice1924" (m1.[0..,*] = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) + test "a2slice1925" (m1.[1..,*] = array2d [| //[| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] |]) + test "a2slice1926" (m1.[..0,*] = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + //[| 10.0;20.0;30.0;40.0;50.0;60.0 |] + |]) + test "a2slice1927" (m1.[*,0..] = array2d [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 10.0;20.0;30.0;40.0;50.0;60.0 |] + |]) + test "a2slice1928" (m1.[*,1..] = array2d [| [| 2.0;3.0;4.0;5.0;6.0 |]; + [| 20.0;30.0;40.0;50.0;60.0 |] + |]) + test "a2slice1929" (m1.[*,2..] = array2d [| [| 3.0;4.0;5.0;6.0 |]; + [| 30.0;40.0;50.0;60.0 |] + |]) + test "a2slice192a" (m1.[*,3..] = array2d [| [| 4.0;5.0;6.0 |]; + [| 40.0;50.0;60.0 |] + |]) + test "a2slice192b" (m1.[*,4..] = array2d [| [| 5.0;6.0 |]; + [| 50.0;60.0 |] + |]) + test "a2slice192c" (m1.[*,5..] = array2d [| [| 6.0 |]; + [| 60.0 |] + |]) + test "a2slice1930" (m1.[*, 0] = [| 1.0; 10.0 |]) + test "a2slice1931" (m1.[1.., 3] = [| 40.0 |]) + test "a2slice1932" (m1.[1, *] = [| 10.0;20.0;30.0;40.0;50.0;60.0 |]) + test "a2slice1933" (m1.[0, ..3] = [| 1.0;2.0;3.0;4.0 |]) + test "a2slice1940" (m1.[1, 3..1] = [| |]) + test "a2slice1941" (m1.[3..1, 1] = [| |]) + test "a2slice1942" (try m1.[1, 10..] |> ignore; false with _ -> true) + test "a2slice1943" (try m1.[10.., 1] |> ignore; false with _ -> true) + test "a2slice1944" (try m1.[1, .. -1] |> ignore; false with _ -> true) + test "a2slice1945" (try m1.[.. -1, 1] |> ignore; false with _ -> true) + + let arr2D1 = array2d [| [| 1.; 2.; 3.; 4. |]; + [| 5.; 6.; 7.; 8. |]; + [| 9.; 10.; 11.; 12. |] |] + arr2D1.[0, *] <- [|0.; 0.; 0.; 0.|] + test "a2slice1934" (arr2D1.[0,*] = [|0.; 0.; 0.; 0.|]) + arr2D1.[*, 1] <- [|100.; 100.; 100.|] + test "a2slice1935" (arr2D1.[*,1] = [|100.; 100.; 100.|]) + test "a2slice1936" (arr2D1.[*,*] = array2d [| [| 0.; 100.; 0.; 0. |]; + [| 5.; 100.; 7.; 8. |]; + [| 9.; 100.; 11.; 12. |] |]) + +module Array3DSlicingTests = + + let array3d (arrs: 'a array array array ) = Array3D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length (fun i j k -> arrs.[i].[j].[k]) + + let m1 = array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + test "a3slice1923" (m1.[*,*,*] = m1) + test "a3slice1924" (m1.[0..,*,*] = + array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + test "a3slice1925" (m1.[0..0,*,*] = + array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] |]) + test "a3slice1926" (m1.[1..1,*,*] = + array3d [| + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + + test "a3slice1927" (m1.[*,1..1,*] = + array3d [| + [| [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + test "a3slice1928" (m1.[..1,*,*] = + array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + test "a3slice1929" (m1.[*,0..0,*] = + array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] |] ) + test "a3slice1930" (m1.[*,0..1,*] = + array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + test "a3slice1931" (m1.[*,*,0..0] = + array3d [| + [| [| 1.0|]; + [| 11.0|] |] + [| [| 10.0|]; + [| 100.0 |] |] |] ) + test "a3slice1932" (m1.[*,*,0..5] = + array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] ) + + test "a3slice1933" (try m1.[*,*,7..] |> ignore; false with _ -> true) + test "a3slice1934" (try m1.[*,*,.. -1] |> ignore; false with _ -> true) + + test "a3slice1935" (try m1.[*,3..,*] |> ignore; false with _ -> true) + test "a3slice1936" (try m1.[*,.. -1,*] |> ignore; false with _ -> true) + + test "a3slice1937" (try m1.[3..,*,*] |> ignore; false with _ -> true) + test "a3slice1938" (try m1.[.. -1,*,*] |> ignore; false with _ -> true) + +module Array4DSlicingTests = + + let array4d (arrs: 'a array array array array) = Array4D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length arrs.[0].[0].[0].Length (fun i j k m -> arrs.[i].[j].[k].[m]) + + let m1 = array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + test "a4slice1923" (m1.[*,*,*,*] = m1) + test "a4slice1924" (m1.[0..,*,*,*] = m1) + test "a4slice1925" (m1.[0..0,*,*,*] = + array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + |]) + test "a4slice1926" (m1.[1..1,*,*,*] = + array4d + [| + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |]) + + test "a4slice1927" (m1.[*,0..0,*,*] = + array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + |]; + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + |] + |]) + test "a4slice1928" (m1.[..1,*,*,*] = m1) + test "a4slice1929" (m1.[*,1..,*,*] = + array4d + [| + [| + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] + |]; + [| + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] + |] + |]) + test "a4slice1930" (m1.[*,0..1,*,*] = m1) + test "a4slice1931" (m1.[*,*,0..0,*] = + array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; |] + |]; + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; |] |] + |]) + test "a4slice1932" (m1.[*,*,*,0..5] = m1) + + test "a4slice1931" (m1.[*,*,*,0..4] = + array4d + [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0 |]; + [| 11.0;21.0;31.0;41.0;51.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0 |]; + [| 100.0;200.0;300.0;400.0;500.0 |] |] + |]; + [| + [| [| 19.0;29.0;39.0;49.0;59.0 |]; + [| 119.0;219.0;319.0;419.0;519.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0 |] |] + |] + |]) + + test "a4slice1931" (try m1.[*,*,*,7..] |> ignore; false with _ -> true) + test "a4slice1932" (try m1.[*,*,*,.. -1] |> ignore; false with _ -> true) + + test "a4slice1933" (try m1.[*,*,3..,*] |> ignore; false with _ -> true) + test "a4slice1934" (try m1.[*,*,.. -1,*] |> ignore; false with _ -> true) + + test "a4slice1935" (try m1.[*,3..,*,*] |> ignore; false with _ -> true) + test "a4slice1936" (try m1.[*,.. -1,*,*] |> ignore; false with _ -> true) + + test "a4slice1937" (try m1.[3..,*,*,*] |> ignore; false with _ -> true) + test "a4slice1938" (try m1.[.. -1,*,*,*] |> ignore; false with _ -> true) module ArrayStructMutation = module Array1D = From c22b95b5cfb84ae4bdb4b62ac7383ac0b021a458 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 1 Oct 2019 10:15:57 -0700 Subject: [PATCH 038/214] Add dependency manager project to FSharp.Compiler.Private.Scripting.fsproj (#7672) --- .../FSharp.Compiler.Private.Scripting.fsproj | 1 + .../FSharp.Compiler.Private.Scripting.nuspec | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj index 710cf8a8e5..381f63d27b 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj @@ -21,6 +21,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec index dac8f0c240..72ef7d95e9 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -14,5 +14,7 @@ + + From f7055f53193554190f82ea2ef245891cd8dd6dc4 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 2 Oct 2019 12:21:12 +0000 Subject: [PATCH 039/214] Update dependencies from https://github.com/dotnet/arcade build 20191001.4 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19501.4 --- eng/Version.Details.xml | 4 ++-- eng/common/tools.sh | 2 +- global.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index dcc02cf458..11764cfb7e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 238f1bbb23ba67616818d0b242c5b55a18edec55 + c21a409f11386d22c6083198176868d3974de832 diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 93ee4d67e3..895ad2442b 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -332,7 +332,7 @@ function MSBuild { # Work around issues with Azure Artifacts credential provider # https://github.com/dotnet/arcade/issues/3932 if [[ "$ci" == true ]]; then - dotnet nuget locals http-cache -c + "$_InitializeBuildTool" nuget locals http-cache -c export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 diff --git a/global.json b/global.json index 03abf24d3b..e01fc8710f 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19480.3", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19501.4", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 59ba480b389695990ff083b86ce08473c1f7b352 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 3 Oct 2019 12:20:28 +0000 Subject: [PATCH 040/214] Update dependencies from https://github.com/dotnet/arcade build 20191002.11 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19502.11 --- eng/Version.Details.xml | 4 ++-- eng/common/darc-init.ps1 | 2 +- eng/common/darc-init.sh | 2 +- global.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 11764cfb7e..f10ba74c20 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - c21a409f11386d22c6083198176868d3974de832 + da75c6547c64a91eb8a9cecf8c503331c2cc394a diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1 index 46d175fdfd..1bf15f435d 100644 --- a/eng/common/darc-init.ps1 +++ b/eng/common/darc-init.ps1 @@ -23,7 +23,7 @@ function InstallDarcCli ($darcVersion) { $darcVersion = $(Invoke-WebRequest -Uri $versionEndpoint -UseBasicParsing).Content } - $arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json' + $arcadeServicesSource = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' Write-Host "Installing Darc CLI version $darcVersion..." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 242429bca6..6c37281b83 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -58,7 +58,7 @@ function InstallDarcCli { echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g) fi - local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/global.json b/global.json index e01fc8710f..4b22f60d75 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19501.4", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19502.11", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 20c7b0ea707c5a28682391ee8c2bb91ff326c0ca Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Fri, 4 Oct 2019 10:37:18 -0700 Subject: [PATCH 041/214] Return correct value with multi-line F# submissions (#7699) --- src/fsharp/fsi/fsi.fs | 50 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 6b67624bc3..a2e3ee96b3 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1141,45 +1141,49 @@ type internal FsiDynamicCompiler let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } // Find all new declarations the EvaluationListener - let mutable lastValue = None + let mutable itValue = None try let contents = FSharpAssemblyContents(tcGlobals, tcState.Ccu, Some tcState.CcuSig, tcImports, declaredImpls) let contentFile = contents.ImplementationFiles.[0] + // Skip the "FSI_NNNN" - match contentFile.Declarations with - | [FSharpImplementationFileDeclaration.Entity (_eFakeModule,modDecls) ] -> + match contentFile.Declarations with + | [FSharpImplementationFileDeclaration.Entity (_eFakeModule,modDecls) ] -> let cenv = SymbolEnv(newState.tcGlobals, newState.tcState.Ccu, Some newState.tcState.CcuSig, newState.tcImports) - for decl in modDecls do - match decl with + for decl in modDecls do + match decl with | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue (v,_,_) -> // Report a top-level function or value definition - if v.IsModuleValueOrMember && not v.IsMember then - let fsiValueOpt = - match v.Item with - | Item.Value vref -> - let optValue = newState.ilxGenerator.LookupGeneratedValue(valuePrinter.GetEvaluationContext(newState.emEnv), vref.Deref) - match optValue with - | Some (res, ty) -> Some(FsiValue(res, ty, FSharpType(cenv, vref.Type))) - | None -> None - | _ -> None - - let symbol = FSharpSymbol.Create(cenv, v.Item) - let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) - fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) - lastValue <- fsiValueOpt + if v.IsModuleValueOrMember && not v.IsMember then + let fsiValueOpt = + match v.Item with + | Item.Value vref -> + let optValue = newState.ilxGenerator.LookupGeneratedValue(valuePrinter.GetEvaluationContext(newState.emEnv), vref.Deref) + match optValue with + | Some (res, ty) -> Some(FsiValue(res, ty, FSharpType(cenv, vref.Type))) + | None -> None + | _ -> None + + if v.CompiledName = "it" then + itValue <- fsiValueOpt + + let symbol = FSharpSymbol.Create(cenv, v.Item) + let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) + fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) + | FSharpImplementationFileDeclaration.Entity (e,_) -> // Report a top-level module or namespace definition let symbol = FSharpSymbol.Create(cenv, e.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, e.DeclarationLocation) fsi.TriggerEvaluation (None, symbolUse, decl) - lastValue <- None + | FSharpImplementationFileDeclaration.InitAction _ -> // Top level 'do' bindings are not reported as incremental declarations - lastValue <- None + () | _ -> () with _ -> () - newState, Completed lastValue + newState, Completed itValue /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = @@ -1196,7 +1200,7 @@ type internal FsiDynamicCompiler | NameResolution.Item.Value vref -> if not tcConfig.noFeedback then valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, istate.emEnv, istate.ilxGenerator, vref.Deref) - + /// Clear the value held in the previous "it" binding, if any, as long as it has never been referenced. match prevIt with | Some prevVal when not prevVal.Deref.HasBeenReferenced -> From a7d2fd99564fc1611e7a2b6ee703e348d2873f2f Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 10 Sep 2019 10:53:07 -0700 Subject: [PATCH 042/214] return the last-computed value when evaluating script code (#7524) * return the last-computed value when evaluating script code * manually track last produced value * set last value on all branches --- src/fsharp/fsi/fsi.fs | 16 +++++++++------- .../FSharpScriptTests.fs | 8 ++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 99bffe0b73..c3d17c9270 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1139,6 +1139,7 @@ type internal FsiDynamicCompiler let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } // Find all new declarations the EvaluationListener + let mutable lastValue = None try let contents = FSharpAssemblyContents(tcGlobals, tcState.Ccu, Some tcState.CcuSig, tcImports, declaredImpls) let contentFile = contents.ImplementationFiles.[0] @@ -1163,20 +1164,21 @@ type internal FsiDynamicCompiler let symbol = FSharpSymbol.Create(cenv, v.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) + lastValue <- fsiValueOpt | FSharpImplementationFileDeclaration.Entity (e,_) -> // Report a top-level module or namespace definition let symbol = FSharpSymbol.Create(cenv, e.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, e.DeclarationLocation) fsi.TriggerEvaluation (None, symbolUse, decl) + lastValue <- None | FSharpImplementationFileDeclaration.InitAction _ -> // Top level 'do' bindings are not reported as incremental declarations - () + lastValue <- None | _ -> () with _ -> () - newState - - + newState, Completed lastValue + /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = let tcConfig = TcConfig.Create (tcConfigB, validate=false) @@ -1186,7 +1188,7 @@ type internal FsiDynamicCompiler let defs = fsiDynamicCompiler.BuildItBinding expr // Evaluate the overall definitions. - let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) + let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) |> fst // Snarf the type for 'it' via the binding match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with | NameResolution.Item.Value vref -> @@ -1787,7 +1789,7 @@ type internal FsiInteractionProcessor | IDefns ([ SynModuleDecl.DoExpr(_,expr,_)],_) -> fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) | IDefns (defs,_) -> - fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs),Completed None + fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs) | IHash (ParsedHashDirective("load",sourceFiles,m),_) -> fsiDynamicCompiler.EvalSourceFiles (ctok, istate, m, sourceFiles, lexResourceManager, errorLogger),Completed None @@ -2085,7 +2087,7 @@ type internal FsiInteractionProcessor /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are /// JIT'ed and ready for use. member __.LoadDummyInteraction(ctok, errorLogger) = - setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []), Completed None) |> fst) + setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index dfd66473f0..82c9c1f329 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -30,6 +30,14 @@ type InteractiveTests() = Assert.AreEqual(typeof, value.ReflectionType) Assert.AreEqual(2, value.ReflectionValue :?> int) + [] + member __.``Declare and eval object value``() = + use script = new FSharpScript() + let opt = script.Eval("let x = 1 + 2\r\nx") |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual(3, value.ReflectionValue :?> int) + [] member __.``Capture console input``() = use script = new FSharpScript(captureInput=true) From ffe6a5616d5e46cbe2b0c6e0ea1ddde54cfe7645 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Fri, 4 Oct 2019 10:37:18 -0700 Subject: [PATCH 043/214] Return correct value with multi-line F# submissions (#7699) --- src/fsharp/fsi/fsi.fs | 50 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index c3d17c9270..cf9f02286c 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1139,45 +1139,49 @@ type internal FsiDynamicCompiler let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } // Find all new declarations the EvaluationListener - let mutable lastValue = None + let mutable itValue = None try let contents = FSharpAssemblyContents(tcGlobals, tcState.Ccu, Some tcState.CcuSig, tcImports, declaredImpls) let contentFile = contents.ImplementationFiles.[0] + // Skip the "FSI_NNNN" - match contentFile.Declarations with - | [FSharpImplementationFileDeclaration.Entity (_eFakeModule,modDecls) ] -> + match contentFile.Declarations with + | [FSharpImplementationFileDeclaration.Entity (_eFakeModule,modDecls) ] -> let cenv = SymbolEnv(newState.tcGlobals, newState.tcState.Ccu, Some newState.tcState.CcuSig, newState.tcImports) - for decl in modDecls do - match decl with + for decl in modDecls do + match decl with | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue (v,_,_) -> // Report a top-level function or value definition - if v.IsModuleValueOrMember && not v.IsMember then - let fsiValueOpt = - match v.Item with - | Item.Value vref -> - let optValue = newState.ilxGenerator.LookupGeneratedValue(valuePrinter.GetEvaluationContext(newState.emEnv), vref.Deref) - match optValue with - | Some (res, ty) -> Some(FsiValue(res, ty, FSharpType(cenv, vref.Type))) - | None -> None - | _ -> None - - let symbol = FSharpSymbol.Create(cenv, v.Item) - let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) - fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) - lastValue <- fsiValueOpt + if v.IsModuleValueOrMember && not v.IsMember then + let fsiValueOpt = + match v.Item with + | Item.Value vref -> + let optValue = newState.ilxGenerator.LookupGeneratedValue(valuePrinter.GetEvaluationContext(newState.emEnv), vref.Deref) + match optValue with + | Some (res, ty) -> Some(FsiValue(res, ty, FSharpType(cenv, vref.Type))) + | None -> None + | _ -> None + + if v.CompiledName = "it" then + itValue <- fsiValueOpt + + let symbol = FSharpSymbol.Create(cenv, v.Item) + let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) + fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) + | FSharpImplementationFileDeclaration.Entity (e,_) -> // Report a top-level module or namespace definition let symbol = FSharpSymbol.Create(cenv, e.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, e.DeclarationLocation) fsi.TriggerEvaluation (None, symbolUse, decl) - lastValue <- None + | FSharpImplementationFileDeclaration.InitAction _ -> // Top level 'do' bindings are not reported as incremental declarations - lastValue <- None + () | _ -> () with _ -> () - newState, Completed lastValue + newState, Completed itValue /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = @@ -1194,7 +1198,7 @@ type internal FsiDynamicCompiler | NameResolution.Item.Value vref -> if not tcConfig.noFeedback then valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, istate.emEnv, istate.ilxGenerator, vref.Deref) - + /// Clear the value held in the previous "it" binding, if any, as long as it has never been referenced. match prevIt with | Some prevVal when not prevVal.Deref.HasBeenReferenced -> From 10373fd7eec0f987c3ee294e3c338016054a4de2 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 4 Oct 2019 15:09:24 -0700 Subject: [PATCH 044/214] only install 2.1 SDK in non source build scenarios (#7703) --- eng/build.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/eng/build.sh b/eng/build.sh index 81363af5db..e4f3b056ea 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -60,6 +60,7 @@ force_bootstrap=false ci=false skip_analyzers=false prepare_machine=false +source_build=false properties="" docker=false @@ -131,6 +132,9 @@ while [[ $# > 0 ]]; do ;; /p:*) properties="$properties $1" + if [[ "$1" == "/p:dotnetbuildfromsource=true" ]]; then + source_build=true + fi ;; *) echo "Invalid argument: $1" @@ -277,7 +281,9 @@ function BuildSolution { InitializeDotNetCli $restore # enable us to build netcoreapp2.1 binaries -InstallDotNetSdk $_InitializeDotNetCli 2.1.503 +if [[ "$source_build" != true ]]; then + InstallDotNetSdk $_InitializeDotNetCli 2.1.503 +fi BuildSolution From 0dc21fae8a120b8a6554929999becf9b82f33061 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 8 Oct 2019 12:46:23 -0700 Subject: [PATCH 045/214] create a specific exception type to represent FSI compilation errors (#7713) --- src/fsharp/fsi/FSIstrings.txt | 2 ++ src/fsharp/fsi/fsi.fs | 20 ++++++++++++------- src/fsharp/fsi/fsi.fsi | 8 +++++++- src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf | 10 ++++++++++ src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf | 10 ++++++++++ .../FSharpScriptTests.fs | 17 ++++++++++++++++ 17 files changed, 169 insertions(+), 8 deletions(-) diff --git a/src/fsharp/fsi/FSIstrings.txt b/src/fsharp/fsi/FSIstrings.txt index d02cfeb79c..c151f7b30e 100644 --- a/src/fsharp/fsi/FSIstrings.txt +++ b/src/fsharp/fsi/FSIstrings.txt @@ -52,3 +52,5 @@ fsiBindingSessionTo,"Binding session to '%s'..." fsiProductName,"Microsoft (R) F# Interactive version %s" fsiProductNameCommunity,"F# Interactive for F# %s" shadowCopyReferences,"Prevents references from being locked by the F# Interactive process" +fsiOperationCouldNotBeCompleted,"Operation could not be completed due to earlier error" +fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index cf9f02286c..6a90958b6a 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -2280,6 +2280,11 @@ let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleO runLoop(); +/// Thrown when there was an error compiling the given code in FSI. +type FsiCompilationException(message: string, errorInfos: FSharpErrorInfo[] option) = + inherit System.Exception(message) + member __.ErrorInfos = errorInfos + /// The primary type, representing a full F# Interactive session, reading from the given /// text input, writing to the given text output and error writers. type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], inReader:TextReader, outWriter:TextWriter, errorWriter: TextWriter, fsiCollectible: bool, legacyReferenceResolver: ReferenceResolver.Resolver option) = @@ -2443,21 +2448,22 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let fsiInteractionProcessor = FsiInteractionProcessor(fsi, tcConfigB, fsiOptions, fsiDynamicCompiler, fsiConsolePrompt, fsiConsoleOutput, fsiInterruptController, fsiStdinLexerProvider, lexResourceManager, initialInteractiveState) let commitResult res = - match res with + match res with | Choice1Of2 r -> r - | Choice2Of2 None -> failwith "Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" + | Choice2Of2 None -> raise (FsiCompilationException(FSIstrings.SR.fsiOperationFailed(), None)) | Choice2Of2 (Some userExn) -> raise userExn - let commitResultNonThrowing errorOptions scriptFile (errorLogger: CompilationErrorLogger) res = + let commitResultNonThrowing errorOptions scriptFile (errorLogger: CompilationErrorLogger) res = let errs = errorLogger.GetErrors() - let userRes = - match res with + let errorInfos = ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true) + let userRes = + match res with | Choice1Of2 r -> Choice1Of2 r - | Choice2Of2 None -> Choice2Of2 (System.Exception "Operation could not be completed due to earlier error") + | Choice2Of2 None -> Choice2Of2 (FsiCompilationException(FSIstrings.SR.fsiOperationCouldNotBeCompleted(), Some errorInfos) :> exn) | Choice2Of2 (Some userExn) -> Choice2Of2 userExn // 'true' is passed for "suggestNames" because we want the FSI session to suggest names for misspellings and it won't affect IDE perf much - userRes, ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true) + userRes, errorInfos let dummyScriptFileName = "input.fsx" diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 2897e36484..8809c213a3 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -106,6 +106,12 @@ type public FsiEvaluationSessionHostConfig = /// Implicitly reference FSharp.Compiler.Interactive.Settings.dll abstract UseFsiAuxLib : bool +/// Thrown when there was an error compiling the given code in FSI. +[] +type FsiCompilationException = + inherit System.Exception + new : string * FSharpErrorInfo[] option -> FsiCompilationException + member ErrorInfos : FSharpErrorInfo[] option /// Represents an F# Interactive evaluation session. [] @@ -184,7 +190,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalExpressionNonThrowing : code: string -> Choice * FSharpErrorInfo[] + member EvalExpressionNonThrowing : code: string -> Choice * FSharpErrorInfo[] /// Format a value to a string using the current PrintDepth, PrintLength etc settings provided by the active fsi configuration object member FormatValue : reflectionValue: obj * reflectionType: System.Type -> string diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf index c43178fe80..453d98e749 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Zastavilo se kvůli chybě.\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf index 0e7145c703..9d11e8cf70 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Aufgrund eines Fehlers beendet\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf index 0ba7ef163b..de2f164e3a 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Detenido debido a un error.\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf index 57ed7d784e..040a8021fc 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Arrêt en raison d'une erreur\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf index d7f05d6aa9..9468b8aa2a 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Interruzione a causa di un errore\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf index c70b2e1dd3..81ab0861dc 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n エラーのため停止しました\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf index b6af609a2a..f476d85f8e 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n 오류 때문에 중지되었습니다.\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf index 82960cad8f..24115c1fa3 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Zatrzymano ze względu na błąd\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf index 41c3148c35..ceaea230ad 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Interrompido devido a erro\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf index 0de5c8a527..25c322aa90 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Остановлено из-за ошибки\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf index 61fb0cee68..b061a19e37 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n Hata nedeniyle durduruldu\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf index 4a8085973e..6f28ddc77d 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n 已因出错而停止\n diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf index 4ba5fc71b7..a8d771d1c3 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf @@ -2,6 +2,16 @@ + + Operation could not be completed due to earlier error + Operation could not be completed due to earlier error + + + + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + + Stopped due to error\n 已因錯誤而停止\n diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 82c9c1f329..7452ab5bb7 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -90,3 +90,20 @@ type InteractiveTests() = let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) Assert.AreEqual(1, errors.Length) Assert.False(foundAssemblyReference) + + [] + member _.``Compilation errors report a specific exception``() = + use script = new FSharpScript() + let result, _errors = script.Eval("abc") + match result with + | Ok(_) -> Assert.Fail("expected a failure") + | Error(ex) -> Assert.IsInstanceOf(ex) + + [] + member _.``Runtime exceptions are propagated``() = + use script = new FSharpScript() + let result, errors = script.Eval("System.IO.File.ReadAllText(\"not-a-file-path-that-can-be-found-on-disk.txt\")") + Assert.IsEmpty(errors) + match result with + | Ok(_) -> Assert.Fail("expected a failure") + | Error(ex) -> Assert.IsInstanceOf(ex) From 67bae89b7a93e5b0c2216df0aff4e259c176e07f Mon Sep 17 00:00:00 2001 From: Nelson Wu Date: Thu, 10 Oct 2019 12:50:20 -0700 Subject: [PATCH 046/214] Fixed-index slicing overloads for 3D arrays (#7630) * changes * fix tests * address comments --- src/fsharp/FSharp.Core/prim-types.fs | 173 ++++++++++++++---- src/fsharp/FSharp.Core/prim-types.fsi | 120 ++++++++++++ src/fsharp/TypeChecker.fs | 12 ++ .../Array3Module.fs | 82 +++++++++ .../SurfaceArea.coreclr.fs | 12 ++ .../SurfaceArea.net40.fs | 12 ++ 6 files changed, 375 insertions(+), 36 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 542852e5da..51a5db320e 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -651,6 +651,12 @@ namespace Microsoft.FSharp.Core let inline GetArray2DLength1 (arr: 'T[,]) = (# "ldlen.multi 2 0" arr : int #) let inline GetArray2DLength2 (arr: 'T[,]) = (# "ldlen.multi 2 1" arr : int #) + let inline GetArray2DLength (arr: 'T[,]) (dim: int) = + match dim with + | 0 -> GetArray2DLength1 arr + | 1 -> GetArray2DLength2 arr + | _ -> raise (System.IndexOutOfRangeException()) + let inline Array2DZeroCreate (n:int) (m:int) = (# "newarr.multi 2 !0" type ('T) n m : 'T[,] #) let GetArray2DSub (src: 'T[,]) src1 src2 len1 len2 = let len1 = (if len1 < 0 then 0 else len1) @@ -679,6 +685,13 @@ namespace Microsoft.FSharp.Core let inline GetArray3DLength3 (arr: 'T[,,]) = (# "ldlen.multi 3 2" arr : int #) + let inline GetArray3DLength (arr: 'T[,,]) (dim: int) = + match dim with + | 0 -> GetArray3DLength1 arr + | 1 -> GetArray3DLength2 arr + | 2 -> GetArray3DLength3 arr + | _ -> raise (System.IndexOutOfRangeException()) + let inline Array3DZeroCreate (n1:int) (n2:int) (n3:int) = (# "newarr.multi 3 !0" type ('T) n1 n2 n3 : 'T[,,] #) let GetArray3DSub (src: 'T[,,]) src1 src2 src3 len1 len2 len3 = @@ -4894,39 +4907,39 @@ namespace Microsoft.FSharp.Core let len2 = (finish2 - start2 + 1) GetArray2DSub source start1 start2 len1 len2 - let inline GetArraySlice2DFixed1 (source: _[,]) index1 start2 finish2 = - let bound2 = source.GetLowerBound(1) - let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray2DLength2 source) - let len2 = (finish2 - start2 + 1) - let dst = zeroCreate (if len2 < 0 then 0 else len2) - for j = 0 to len2 - 1 do - SetArray dst j (GetArray2D source index1 (start2+j)) + let inline GetArraySlice2DFixed (source: _[,]) start finish index nonFixedDim = + let bound = source.GetLowerBound(nonFixedDim) + let start, finish = ComputeSlice bound start finish (GetArray2DLength source nonFixedDim) + let len = (finish - start + 1) + let dst = zeroCreate (if len < 0 then 0 else len) + let getArrayElem = + match nonFixedDim with + | 1 -> (fun i -> GetArray2D source index (start+i)) + | 0 -> (fun i -> GetArray2D source (start+i) index) + | _ -> raise (System.IndexOutOfRangeException()) + for j = 0 to len - 1 do + SetArray dst j (getArrayElem j) dst - let inline GetArraySlice2DFixed2 (source: _[,]) start1 finish1 index2 = - let bound1 = source.GetLowerBound(0) - let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray2DLength1 source) - let len1 = (finish1 - start1 + 1) - let dst = zeroCreate (if len1 < 0 then 0 else len1) - for i = 0 to len1 - 1 do - SetArray dst i (GetArray2D source (start1+i) index2) - dst + let inline GetArraySlice2DFixed1 (source: _[,]) index1 start2 finish2 = GetArraySlice2DFixed source start2 finish2 index1 1 - let inline SetArraySlice2DFixed1 (target: _[,]) index1 start2 finish2 (source: _[]) = - let bound2 = target.GetLowerBound(1) - let start2 = (match start2 with None -> bound2 | Some n -> n) - let finish2 = (match finish2 with None -> bound2 + GetArray2DLength2 target - 1 | Some n -> n) - let len2 = (finish2 - start2 + 1) - for j = 0 to len2 - 1 do - SetArray2D target index1 (bound2+start2+j) (GetArray source j) + let inline GetArraySlice2DFixed2 (source: _[,]) start1 finish1 index2 = GetArraySlice2DFixed source start1 finish1 index2 0 - let inline SetArraySlice2DFixed2 (target: _[,]) start1 finish1 index2 (source:_[]) = - let bound1 = target.GetLowerBound(0) - let start1 = (match start1 with None -> bound1 | Some n -> n) - let finish1 = (match finish1 with None -> bound1 + GetArray2DLength1 target - 1 | Some n -> n) - let len1 = (finish1 - start1 + 1) - for i = 0 to len1 - 1 do - SetArray2D target (bound1+start1+i) index2 (GetArray source i) + let inline SetArraySlice2DFixed (target: _[,]) (source: _[]) index start finish nonFixedDim = + let bound = target.GetLowerBound(nonFixedDim) + let start, finish = ComputeSlice bound start finish (GetArray2DLength target nonFixedDim) + let len = (finish - start + 1) + let setArrayElem = + match nonFixedDim with + | 1 -> (fun j -> SetArray2D target index (bound + start + j) (GetArray source j)) + | 0 -> (fun i -> SetArray2D target (bound + start + i) index (GetArray source i)) + | _ -> raise (System.IndexOutOfRangeException()) + for j = 0 to len - 1 do + setArrayElem j + + let inline SetArraySlice2DFixed1 (target: _[,]) index1 start2 finish2 (source: _[]) = SetArraySlice2DFixed target source index1 start2 finish2 1 + + let inline SetArraySlice2DFixed2 (target: _[,]) start1 finish1 index2 (source:_[]) = SetArraySlice2DFixed target source index2 start1 finish1 0 let SetArraySlice2D (target: _[,]) start1 finish1 start2 finish2 (source: _[,]) = let bound1 = target.GetLowerBound(0) @@ -4949,6 +4962,55 @@ namespace Microsoft.FSharp.Core let len3 = (finish3 - start3 + 1) GetArray3DSub source start1 start2 start3 len1 len2 len3 + let inline GetArraySlice3DFixedSingle (source: _[,,]) start1 finish1 start2 finish2 index nonFixedDim1 nonFixedDim2 = + let bound1 = source.GetLowerBound(nonFixedDim1) + let bound2 = source.GetLowerBound(nonFixedDim2) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray3DLength source nonFixedDim1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray3DLength source nonFixedDim2) + let len1 = (finish1 - start1 + 1) + let len2 = (finish2 - start2 + 1) + + let dst = Array2DZeroCreate (max 0 len1) (max 0 len2) + let getArrayElem = + match nonFixedDim1, nonFixedDim2 with + | 1, 2 -> (fun i j -> GetArray3D source index (start1 + i) (start2 + j)) + | 0, 2 -> (fun i j -> GetArray3D source (start1 + i) index (start2 + j)) + | 0, 1 -> (fun i j -> GetArray3D source (start1 + i) (start2 + j) index) + | _ -> raise (System.IndexOutOfRangeException()) + + for i = 0 to len1 - 1 do + for j = 0 to len2 - 1 do + SetArray2D dst i j (getArrayElem i j) + + dst + + let inline GetArraySlice3DFixedSingle1 (source: _[,,]) index1 start2 finish2 start3 finish3 = GetArraySlice3DFixedSingle source start2 finish2 start3 finish3 index1 1 2 + + let inline GetArraySlice3DFixedSingle2 (source: _[,,]) start1 finish1 index2 start3 finish3 = GetArraySlice3DFixedSingle source start1 finish1 start3 finish3 index2 0 2 + + let inline GetArraySlice3DFixedSingle3 (source: _[,,]) start1 finish1 start2 finish2 index3 = GetArraySlice3DFixedSingle source start1 finish1 start2 finish2 index3 0 1 + + let inline GetArraySlice3DFixedDouble (source: _[,,]) start finish index1 index2 nonFixedDim = + let bound = source.GetLowerBound(nonFixedDim) + let start, finish = ComputeSlice bound start finish (GetArray3DLength source nonFixedDim) + let len = (finish - start + 1) + let dst = zeroCreate (if len < 0 then 0 else len) + let getArrayElem = + match nonFixedDim with + | 2 -> (fun i -> GetArray3D source index1 index2 i) + | 1 -> (fun i -> GetArray3D source index1 (start + i) index2) + | 0 -> (fun i -> GetArray3D source (start+i) index1 index2) + | _ -> raise (System.IndexOutOfRangeException()) + for j = 0 to len - 1 do + SetArray dst j (getArrayElem j) + dst + + let inline GetArraySlice3DFixedDouble1 (source: _[,,]) index1 index2 start3 finish3 = GetArraySlice3DFixedDouble source start3 finish3 index1 index2 2 + + let inline GetArraySlice3DFixedDouble2 (source: _[,,]) index1 start2 finish2 index3 = GetArraySlice3DFixedDouble source start2 finish2 index1 index3 1 + + let inline GetArraySlice3DFixedDouble3 (source: _[,,]) start1 finish1 index2 index3 = GetArraySlice3DFixedDouble source start1 finish1 index2 index3 0 + let SetArraySlice3D (target: _[,,]) start1 finish1 start2 finish2 start3 finish3 (source:_[,,]) = let bound1 = target.GetLowerBound(0) let bound2 = target.GetLowerBound(1) @@ -4961,6 +5023,52 @@ namespace Microsoft.FSharp.Core let finish3 = (match finish3 with None -> bound3 + GetArray3DLength3 target - 1 | Some n -> n) SetArray3DSub target start1 start2 start3 (finish1 - start1 + 1) (finish2 - start2 + 1) (finish3 - start3 + 1) source + let inline SetArraySlice3DFixedSingle (target: _[,,]) (source: _[,]) index start1 finish1 start2 finish2 nonFixedDim1 nonFixedDim2 = + let bound1 = target.GetLowerBound(nonFixedDim1) + let bound2 = target.GetLowerBound(nonFixedDim2) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray3DLength target nonFixedDim1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray3DLength target nonFixedDim2) + let len1 = (finish1 - start1 + 1) + let len2 = (finish2 - start2 + 1) + let setArrayElem = + match nonFixedDim1, nonFixedDim2 with + | 1, 2 -> (fun i j -> SetArray3D target index (bound1 + start1 + i) (bound2 + start2 + j) (GetArray2D source i j)) + | 0, 2 -> (fun i j -> SetArray3D target (bound1 + start1 + i) index (bound2+ start2 + j) (GetArray2D source i j)) + | 0, 1 -> (fun i j -> SetArray3D target (bound1 + start1 + i) (bound2+ start2 + j) index (GetArray2D source i j)) + | _ -> raise (System.IndexOutOfRangeException()) + + for i = 0 to len1 - 1 do + for j = 0 to len2 - 1 do + setArrayElem i j + + let inline SetArraySlice3DFixedSingle1 (target: _[,,]) index start2 finish2 start3 finish3 (source: _[,]) = + SetArraySlice3DFixedSingle target source index start2 finish2 start3 finish3 1 2 + + let inline SetArraySlice3DFixedSingle2 (target: _[,,]) start1 finish1 index start3 finish3 (source: _[,]) = + SetArraySlice3DFixedSingle target source index start1 finish1 start3 finish3 0 2 + + let inline SetArraySlice3DFixedSingle3 (target: _[,,]) start1 finish1 start2 finish2 index (source: _[,]) = + SetArraySlice3DFixedSingle target source index start1 finish1 start2 finish2 0 1 + + let inline SetArraySlice3DFixedDouble (target: _[,,]) (source: _[]) index1 index2 start finish nonFixedDim = + let bound = target.GetLowerBound(nonFixedDim) + let start, finish = ComputeSlice bound start finish (GetArray3DLength target nonFixedDim) + let len = (finish - start + 1) + let setArrayElem = + match nonFixedDim with + | 2 -> (fun k -> SetArray3D target index1 index2 (bound + start + k) (GetArray source k)) + | 1 -> (fun j -> SetArray3D target index1 (bound + start + j) index2 (GetArray source j)) + | 0 -> (fun i -> SetArray3D target (bound + start + i) index1 index2 (GetArray source i)) + | _ -> raise (System.IndexOutOfRangeException()) + for j = 0 to len - 1 do + setArrayElem j + + let inline SetArraySlice3DFixedDouble1 (target: _[,,]) index1 index2 start3 finish3 (source: _[]) = SetArraySlice3DFixedDouble target source index1 index2 start3 finish3 2 + + let inline SetArraySlice3DFixedDouble2 (target: _[,,]) index1 start2 finish2 index3 (source: _[]) = SetArraySlice3DFixedDouble target source index1 index3 start2 finish2 1 + + let inline SetArraySlice3DFixedDouble3 (target: _[,,]) start1 finish1 index2 index3 (source: _[]) = SetArraySlice3DFixedDouble target source index2 index3 start1 finish1 0 + let GetArraySlice4D (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 = let bound1 = source.GetLowerBound(0) let bound2 = source.GetLowerBound(1) @@ -5409,13 +5517,6 @@ namespace Microsoft.FSharp.Core when ^T : byte = RangeByte (retype start) (retype step) (retype finish) - type ``[,]``<'T> with - member arr.GetSlice(x : int, y1 : int option, y2 : int option) = GetArraySlice2DFixed1 arr x y1 y2 - member arr.GetSlice(x1 : int option, x2 : int option, y : int) = GetArraySlice2DFixed2 arr x1 x2 y - - member arr.SetSlice(x : int, y1 : int option, y2 : int option, source:'T[]) = SetArraySlice2DFixed1 arr x y1 y2 source - member arr.SetSlice(x1 : int option, x2 : int option, y : int, source:'T[]) = SetArraySlice2DFixed2 arr x1 x2 y source - [] let inline abs (value: ^T) : ^T = AbsDynamic value diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 7ba3b3ae4d..5aeba8e037 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -2814,6 +2814,63 @@ namespace Microsoft.FSharp.Core /// The three dimensional sub array from the given indices. val GetArraySlice3D : source:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> 'T[,,] + /// Gets a 2D slice of a 3D array. + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice3DFixedSingle1 : source:'T[,,] -> index1:int -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> 'T[,] + + /// Gets a 2D slice of a 3D array. + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice3DFixedSingle2 : source:'T[,,] -> start1:int option -> finish1:int option -> index2: int -> start3:int option -> finish3:int option -> 'T[,] + + /// Gets a 2D slice of a 3D array. + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice3DFixedSingle3 : source:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> index3: int -> 'T[,] + + /// Gets a 1D slice of a 3D array. + /// The source array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice3DFixedDouble1 : source:'T[,,] -> index1:int -> index2:int -> start3:int option -> finish3:int option -> 'T[] + + /// Gets a 1D slice of a 3D array. + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice3DFixedDouble2 : source:'T[,,] -> index1:int -> start2:int option -> finish2:int option -> index3:int -> 'T[] + + /// Gets a 1D slice of a 3D array. + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice3DFixedDouble3 : source:'T[,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> 'T[] + /// Sets a slice of an array /// The target array. /// The start index of the first dimension. @@ -2825,6 +2882,69 @@ namespace Microsoft.FSharp.Core /// The source array. val SetArraySlice3D : target:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> source:'T[,,] -> unit + /// Sets a 2D slice of a 3D array + /// The target array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The source array. + /// The two dimensional sub array from the given indices. + val inline SetArraySlice3DFixedSingle1 : target: 'T[,,] -> index1: int -> start2: int option -> finish2: int option -> start3: int option -> finish3: int option -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 3D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The source array. + /// The two dimensional sub array from the given indices. + val inline SetArraySlice3DFixedSingle2 : target: 'T[,,] -> start1: int option -> finish1: int option -> index2: int -> start3: int option -> finish3: int option -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 3D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The source array. + /// The two dimensional sub array from the given indices. + val inline SetArraySlice3DFixedSingle3 : target: 'T[,,] -> start1: int option -> finish1: int option -> start2: int option -> finish2: int option -> index3: int -> source: 'T[,] -> unit + + /// Sets a 1D slice of a 3D array. + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The source array. + /// The one dimensional sub array from the given indices. + val inline SetArraySlice3DFixedDouble1 : target: 'T[,,] -> index1: int -> index2: int -> start3: int option -> finish3: int option -> source: 'T[] -> unit + + /// Sets a 1D slice of a 3D array. + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The source array. + /// The one dimensional sub array from the given indices. + val inline SetArraySlice3DFixedDouble2 : target: 'T[,,] -> index1: int -> start2: int option -> finish2: int option -> index3: int -> source: 'T[] -> unit + + /// Sets a 1D slice of a 3D array. + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The source array. + /// The one dimensional sub array from the given indices. + val inline SetArraySlice3DFixedDouble3 : target: 'T[,,] -> start1: int option -> finish1: int option -> index2: int -> index3: int -> source: 'T[] -> unit + /// Gets a slice of an array /// The source array. /// The start index of the first dimension. diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 5cc848e5ab..34981b721d 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -6356,12 +6356,24 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice2DFixed2", GetIndexArgs indexArgs) | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice2D", GetIndexArgs indexArgs) | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3D", GetIndexArgs indexArgs) + | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle1", GetIndexArgs indexArgs) + | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle2", GetIndexArgs indexArgs) + | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle3", GetIndexArgs indexArgs) + | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble1", GetIndexArgs indexArgs) + | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble2", GetIndexArgs indexArgs) + | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble3", GetIndexArgs indexArgs) | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4D", GetIndexArgs indexArgs) | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice", (GetIndexArgs indexArgs @ [e3])) | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2D", (GetIndexArgs indexArgs @ [e3])) | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2DFixed1", (GetIndexArgs indexArgs @ [e3])) | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2DFixed2", (GetIndexArgs indexArgs @ [e3])) | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3D", (GetIndexArgs indexArgs @ [e3])) + | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle1", (GetIndexArgs indexArgs @ [e3])) + | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle2", (GetIndexArgs indexArgs @ [e3])) + | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle3", (GetIndexArgs indexArgs @ [e3])) + | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble1", (GetIndexArgs indexArgs @ [e3])) + | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble2", (GetIndexArgs indexArgs @ [e3])) + | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble3", (GetIndexArgs indexArgs @ [e3])) | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4D", (GetIndexArgs indexArgs @ [e3])) | _ -> None // error(Error(FSComp.SR.tcInvalidIndexerExpression(), mWholeExpr)) match info with diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs index bb6c5a0846..0c68daf3b1 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs @@ -28,6 +28,10 @@ type Array3Module() = if Array3D.length3 arr <> z then Assert.Fail("Array3D does not have expected dimensions.") () + let array3d (arrs: 'a array array array ) = Array3D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length (fun i j k -> arrs.[i].[j].[k]) + + + [] member this.Create() = // integer array @@ -330,3 +334,81 @@ type Array3Module() = CheckThrowsArgumentException(fun () -> Array3D.zeroCreate 1 1 -1 |> ignore) () + + [] + member this.SlicingSingleFixed1() = + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + + let newSlice = [|0.; 0.; 0.; 0.; 0. ; 0.;|] + m1.[0,0,*] <- newSlice + Assert.AreEqual(m1.[1,0,0], 10.0) + Assert.AreEqual(m1.[0,0,*], newSlice) + + [] + member this.SlicingSingleFixed2() = + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + + let newSlice = [|0.; 0.;|] + m1.[0,*,0] <- newSlice + Assert.AreEqual(m1.[0,0,1], 2.0) + Assert.AreEqual(m1.[0,*,0], newSlice) + + [] + member this.SlicingSingleFixed3() = + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + + let newSlice = [|0.; 0.|] + m1.[*,0,0] <- newSlice + Assert.AreEqual(m1.[0,0,1], 2.0) + Assert.AreEqual(m1.[*,0,0], newSlice) + + [] + member this.SlicingDoubleFixed1() = + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + + let newSlice = array2D [| [|0.; 0.; 0.; 0.; 0. ; 0.;|]; [|0.; 0.; 0.; 0.; 0. ; 0.;|] |] + m1.[0,*,*] <- newSlice + Assert.AreEqual(m1.[1,0,0], 10.0) + if m1.[0,*,*] <> newSlice then Assert.Fail() + + [] + member this.SlicingDoubleFixed2() = + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + + let newSlice = array2D [| [|0.; 0.;|]; [|0.; 0.;|] |] + m1.[*,*,0] <- newSlice + Assert.AreEqual(m1.[0,0,1], 2.0) + if m1.[*,*,0] <> newSlice then Assert.Fail() + + [] + member this.SlicingDoubleFixed3() = + let m1 = (array3d [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |]) + + let newSlice = array2D [| [|0.; 0.; 0.; 0.; 0. ; 0.;|]; [|0.; 0.; 0.; 0.; 0. ; 0.;|] |] + m1.[*,0,*] <- newSlice + Assert.AreEqual(m1.[0,1,0], 11.0) + if m1.[*,0,*] <> newSlice then Assert.Fail() diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index d85ea6a6bc..aa23bfa021 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -1989,6 +1989,12 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice3DFixedSingle1[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice3DFixedSingle2[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice3DFixedSingle3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice3DFixedDouble1[T](T[,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice3DFixedDouble2[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice3DFixedDouble3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) @@ -2001,6 +2007,12 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed1[T Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedDouble1[T](T[,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedDouble2[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedDouble3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle1[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle2[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index 93d633bd4a..a8f6953909 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -1989,6 +1989,12 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice3DFixedSingle1[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice3DFixedSingle2[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice3DFixedSingle3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice3DFixedDouble1[T](T[,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice3DFixedDouble2[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice3DFixedDouble3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) @@ -2001,6 +2007,12 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed1[T Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedDouble1[T](T[,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedDouble2[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedDouble3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle1[T](T[,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle2[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) From 0397825c73accda0ad87a80a1246ac35fc80b19c Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Sat, 12 Oct 2019 00:54:40 +0300 Subject: [PATCH 047/214] Fix parsing default language version (#7721) --- src/fsharp/LanguageFeatures.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 4f55325311..2f4e44940c 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -61,7 +61,7 @@ type LanguageVersion (specifiedVersion) = match specifiedVersion with | "?" -> 0m | "preview" -> previewVersion - | "default" -> latestVersion + | "default" -> defaultVersion | "latest" -> latestVersion | "latestmajor" -> latestMajorVersion | _ -> From ab93b14b94e8f8cbed81395fc8b30e46cf8dc041 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 14 Oct 2019 14:18:01 -0700 Subject: [PATCH 048/214] Ref assemblies for non sdk apps (#7725) * Ref assemblies for non sdk apps * Use NumberStyles.AllowDecimalPoint with Parse * Correctly this time * Improved Assembly search --- src/fsharp/CompileOps.fs | 2 +- src/fsharp/DotNetFrameworkDependencies.fs | 166 +++++++----------- .../FSharp.Compiler.UnitTests.fsproj | 1 - .../VersionCompare.fs | 66 ------- 4 files changed, 67 insertions(+), 168 deletions(-) delete mode 100644 tests/FSharp.Compiler.UnitTests/VersionCompare.fs diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 239015820a..5ab8928598 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2784,7 +2784,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = if Directory.Exists runtimeRootWPF then yield runtimeRootWPF // PresentationCore.dll is in C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF - match getFrameworkRefsPackDirectory with + match frameworkRefsPackDirectory with | Some path when Directory.Exists(path) -> yield path | _ -> () diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 2e96dcd367..faae31ba35 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -7,6 +7,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies open System open System.Collections.Generic open System.Diagnostics + open System.Globalization open System.IO open System.Reflection @@ -14,7 +15,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let getFSharpCoreLibraryName = "FSharp.Core" let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" - let frameworkDir = Path.GetDirectoryName(typeof.Assembly.Location) + let implementationAssemblyDir = Path.GetDirectoryName(typeof.Assembly.Location) let getDefaultFSharpCoreReference = typeof.Assembly.Location let getFSharpCompilerLocation = Path.GetDirectoryName(typeof.Assembly.Location) @@ -34,120 +35,85 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies None with _ -> None - // Compare nuget version strings + + // Algorithm: + // use implementation location of obj type, on shared frameworks it will always be in: // - // Format: - // ======= - // $(Major).$(Minor).$(Build) [-SomeSuffix] - // Major, Minor, Build collates normally - // Strings without -SomeSuffix collate higher than SomeSuffix, - // SomeSuffix collates using normal alphanumeric rules + // dotnet\shared\Microsoft.NETCore.App\sdk-version\System.Private.CoreLib.dll // - let deconstructVersion (version:string) = - let version, suffix = - let pos = version.IndexOf("-") - if pos >= 0 then - version.Substring(0, pos), version.Substring(pos + 1) - else version, "" - - let elements = version.Split('.') - if elements.Length < 3 then - struct (0, 0, 0, suffix) - else - struct (Int32.Parse(elements.[0]), Int32.Parse(elements.[1]), Int32.Parse(elements.[2]), suffix) - - let versionCompare c1 c2 = - if c1 = c2 then 0 - else - try - let struct (major1, minor1, build1, suffix1 ) = deconstructVersion c1 - let struct (major2, minor2, build2, suffix2 ) = deconstructVersion c2 - let v = major1 - major2 - if v <> 0 then v - else - let v = minor1 - minor2 - if v <> 0 then v - else - let v = build1 - build2 - if v <> 0 then v - else - match String.IsNullOrEmpty(suffix1), String.IsNullOrEmpty(suffix2) with - | true, true -> 0 - | true, false -> 1 - | false, true -> -1 - | false, false -> String.Compare(suffix1, suffix2, StringComparison.InvariantCultureIgnoreCase) - with _ -> 0 - - let executionTfm = - let file = - try - let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") - if File.Exists(depsJsonPath) then - File.ReadAllText(depsJsonPath) - else - "" - with _ -> "" - - let tfmPrefix=".NETCoreApp,Version=v" - let pattern = "\"name\": \"" + tfmPrefix - let startPos = - let startPos = file.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) - if startPos >= 0 then startPos + (pattern.Length) else startPos - - let length = - if startPos >= 0 then - let ep = file.IndexOf("\"", startPos) - if ep >= 0 then ep - startPos else ep - else -1 - match startPos, length with - | -1, _ - | _, -1 -> None - | pos, length -> Some ("netcoreapp" + file.Substring(pos, length)) - - - let getFrameworkRefsPackDirectoryPath = - match executionTfm with - | Some _ -> - let appRefDir = Path.Combine(getFSharpCompilerLocation, "../../../packs/Microsoft.NETCore.App.Ref") - if Directory.Exists(appRefDir) then - Some appRefDir + // if that changes we will need to find another way to do this. Hopefully the sdk will eventually provide an API + // use the well know location for obj to traverse the file system towards the + // + // packs\Microsoft.NETCore.App.Ref\sdk-version\netcoreappn.n + // we will rely on the sdk-version match on the two paths to ensure that we get the product that ships with the + // version of the runtime we are executing on + // Use the reference assemblies for the highest netcoreapp tfm that we find in that location. + let version, frameworkRefsPackDirectoryRoot = + try + let version = DirectoryInfo(implementationAssemblyDir).Name + let microsoftNETCoreAppRef = Path.Combine(implementationAssemblyDir, "../../../packs/Microsoft.NETCore.App.Ref") + if Directory.Exists(microsoftNETCoreAppRef) then + Some version, Some microsoftNETCoreAppRef else - None - | _ -> None + Some version, None + with | _ -> None, None let isInReferenceAssemblyPackDirectory filename = - match getFrameworkRefsPackDirectoryPath with - | Some appRefDir -> + match frameworkRefsPackDirectoryRoot with + | Some root -> let path = Path.GetDirectoryName(filename) - path.StartsWith(appRefDir, StringComparison.OrdinalIgnoreCase) + path.StartsWith(root, StringComparison.OrdinalIgnoreCase) | _ -> false - let getFrameworkRefsPackDirectory = - match executionTfm, getFrameworkRefsPackDirectoryPath with - | Some tfm, Some appRefDir -> + let frameworkRefsPackDirectory = + let tfmPrefix = "netcoreapp" + let tfmCompare c1 c2 = + let deconstructTfmApp (netcoreApp: DirectoryInfo) = + let name = netcoreApp.Name + try + if name.StartsWith(tfmPrefix, StringComparison.InvariantCultureIgnoreCase) then + Some (Double.Parse(name.Substring(tfmPrefix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)) + else + None + with _ -> None + + if c1 = c2 then 0 + else + match (deconstructTfmApp c1), (deconstructTfmApp c2) with + | Some c1, Some c2 -> int(c1 - c2) + | None, Some _ -> -1 + | Some _, None -> 1 + | _ -> 0 + + match version, frameworkRefsPackDirectoryRoot with + | Some version, Some root -> try - let refDirs = Directory.GetDirectories(appRefDir) - let versionPath = refDirs |> Array.sortWith (versionCompare) |> Array.last - Some(Path.Combine(versionPath, "ref", tfm)) + let ref = Path.Combine(root, version, "ref") + let highestTfm = DirectoryInfo(ref).GetDirectories() + |> Array.sortWith tfmCompare + |> Array.tryLast + + match highestTfm with + | Some tfm -> Some (Path.Combine(ref, tfm.Name)) + | None -> None with | _ -> None | _ -> None - - let getDependenciesOf assemblyReferences = let assemblies = new Dictionary() // Identify path to a dll in the framework directory from a simple name let frameworkPathFromSimpleName simpleName = - let pathDll = Path.Combine(frameworkDir, simpleName + ".dll") - if not (File.Exists(pathDll)) then - let pathExe = Path.Combine(frameworkDir, simpleName + ".exe") - if not (File.Exists(pathExe)) then - pathDll - else - pathExe - else - pathDll + let root = Path.Combine(implementationAssemblyDir, simpleName) + let pathOpt = + [| ""; ".dll"; ".exe" |] + |> Seq.tryPick(fun ext -> + let path = root + ext + if File.Exists(path) then Some path + else None) + match pathOpt with + | Some path -> path + | None -> root // Collect all assembly dependencies into assemblies dictionary let rec traverseDependencies reference = @@ -228,14 +194,14 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let getImplementationReferences () = // Coreclr supports netstandard assemblies only for now (getDependenciesOf [ - yield Path.Combine(frameworkDir, "netstandard.dll") + yield Path.Combine(implementationAssemblyDir, "netstandard.dll") yield getDefaultFSharpCoreReference if useFsiAuxLib then yield getFsiLibraryName ]).Values |> Seq.toList if useSdkRefs then // Go fetch references - match getFrameworkRefsPackDirectory with + match frameworkRefsPackDirectory with | Some path -> try [ yield! Directory.GetFiles(path, "*.dll") yield getDefaultFSharpCoreReference diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj index be4e9125a2..790fdc6431 100644 --- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj +++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj @@ -18,7 +18,6 @@ - diff --git a/tests/FSharp.Compiler.UnitTests/VersionCompare.fs b/tests/FSharp.Compiler.UnitTests/VersionCompare.fs deleted file mode 100644 index f5d5f709b5..0000000000 --- a/tests/FSharp.Compiler.UnitTests/VersionCompare.fs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.UnitTests - -open System -open System.Globalization -open System.Text -open NUnit.Framework -open FSharp.Compiler - -[] -module VersionCompare = - open FSharp.Compiler.DotNetFrameworkDependencies - - [] // 1.0.0 < 1.0.1 - [] // 1.0.0 = 1.0.0 - [] // 1.0.1 > 1.0.1 - [] // 0.0.9 < 1.0.0-Suffix1 - [] // 1.0.0 > 1.0.0-Suffix1 - [] // 1.0.0-Suffix1 < 1.0.0 - [] // 1.0.0-Suffix1 < 1.0.0-Suffix2 - [] // 1.0.0-Suffix2 > 1.0.0-Suffix1 - [] // 1.0.0-Suffix1 > 1.0.0-Suffix2 - [] // 1.0.1 > 1.0.0-Suffix1 - [] // 1.0.0-Suffix1 < 1.0.1 - let VersionCompareTest (str1: string, str2: string) : int = - versionCompare str1 str2 - - - [] - [] - let VersionCompareSortArrayHighestPreview _: string = - let versions = [| - "1.0.0-preview4-20000-01" - "3.0.0-preview4-27610-06" - "1.0.0-preview4-20000-02" - "3.0.0-preview4-27610-05" - "3.0.0-preview4-27609-10" - |] - versions |> Array.sortWith (versionCompare) |> Array.last - - [] - [] - let VersionCompareSortArrayHighestRelease _: string = - let versions = [| - "1.0.0-preview4-20000-01" - "3.0.0" - "3.0.0-preview4-27610-06" - "1.0.0-preview4-20000-02" - "3.0.0-preview4-27610-05" - "3.0.0-preview4-27609-10" - |] - versions |> Array.sortWith (versionCompare) |> Array.last - - [] - [] - let VersionCompareSortArrayEvenHighestRelease _: string = - let versions = [| - "3.0.1" - "1.0.0-preview4-20000-01" - "3.0.0" - "3.0.0-preview4-27610-06" - "1.0.0-preview4-20000-02" - "3.0.0-preview4-27610-05" - "3.0.0-preview4-27609-10" - |] - versions |> Array.sortWith (versionCompare) |> Array.last From e6309b0b9a62af9aa7f44bff65c46a100d7e0934 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Tue, 15 Oct 2019 03:08:03 +0300 Subject: [PATCH 049/214] Ignore Mac trash (#7729) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ec2166b3fc..6b2fefccd4 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,4 @@ msbuild.binlog /fcs/FSharp.Compiler.Service.netstandard/*.fs /fcs/FSharp.Compiler.Service.netstandard/*.fsi /.ionide/ +**/.DS_Store From 8c84b14fe58043f7b1b177ed5fc9895f84ab17f1 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Tue, 15 Oct 2019 13:36:28 -0700 Subject: [PATCH 050/214] Disable slices05 test case due to: https://github.com/dotnet/fsharp/issues/7735 --- .../Source/Conformance/Expressions/SyntacticSugar/env.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/env.lst b/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/env.lst index c858fb1637..306d1afce9 100644 --- a/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/env.lst +++ b/tests/fsharpqa/Source/Conformance/Expressions/SyntacticSugar/env.lst @@ -9,7 +9,7 @@ NoMT SOURCE=Slices03.fs # Slices03.fs SOURCE=Slices03.fs PEVER=/MD # Slices03.fs /MD SOURCE=Slices04.fs # Slices04.fs - SOURCE=Slices05.fs # Slices05.fs +# SOURCE=Slices05.fs # Slices05.fs #To be Re-enabled: --- https://github.com/dotnet/fsharp/issues/7735 SOURCE=Slices06.fs # Slices06.fs SOURCE=Slices07.fs # Slices07.fs From 4cc8ca3f42a3bc69dc4ff13125f8d9675d413455 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 18 Oct 2019 13:19:10 -0700 Subject: [PATCH 051/214] allow fsi evaluations to be cancelled (#7736) --- .../FSharpScript.fs | 6 ++-- src/fsharp/fsi/fsi.fs | 31 ++++++++++--------- src/fsharp/fsi/fsi.fsi | 5 +-- .../FSharpScriptTests.fs | 25 +++++++++++++++ 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index a7d24b3c9c..c0ce545e07 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -3,6 +3,7 @@ namespace FSharp.Compiler.Scripting open System +open System.Threading open FSharp.Compiler.Interactive.Shell type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: string[]) as this = @@ -42,8 +43,9 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st member __.ErrorProduced = errorProduced.Publish - member __.Eval(code: string) = - let ch, errors = fsi.EvalInteractionNonThrowing code + member __.Eval(code: string, ?cancellationToken: CancellationToken) = + let cancellationToken = defaultArg cancellationToken CancellationToken.None + let ch, errors = fsi.EvalInteractionNonThrowing(code, cancellationToken) match ch with | Choice1Of2 v -> Ok(v), errors | Choice2Of2 ex -> Error(ex), errors diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 6a90958b6a..bfecea2a16 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1888,7 +1888,8 @@ type internal FsiInteractionProcessor /// /// #directive comes through with other definitions as a SynModuleDecl.HashDirective. /// We split these out for individual processing. - let rec execParsedInteractions (ctok, tcConfig, istate, action, errorLogger: ErrorLogger, lastResult:option) = + let rec execParsedInteractions (ctok, tcConfig, istate, action, errorLogger: ErrorLogger, lastResult:option, cancellationToken: CancellationToken) = + cancellationToken.ThrowIfCancellationRequested() let action,nextAction,istate = match action with | None -> None,None,istate @@ -1935,7 +1936,7 @@ type internal FsiInteractionProcessor | Some action, _ -> let istate,cont = ExecInteraction (ctok, tcConfig, istate, action, errorLogger) match cont with - | Completed _ -> execParsedInteractions (ctok, tcConfig, istate, nextAction, errorLogger, Some cont) + | Completed _ -> execParsedInteractions (ctok, tcConfig, istate, nextAction, errorLogger, Some cont, cancellationToken) | CompletedWithReportedError e -> istate,CompletedWithReportedError e (* drop nextAction on error *) | EndOfFile -> istate,defaultArg lastResult (Completed None) (* drop nextAction on EOF *) | CtrlC -> istate,CtrlC (* drop nextAction on CtrlC *) @@ -1962,9 +1963,9 @@ type internal FsiInteractionProcessor stopProcessingRecovery e range0; istate, CompletedWithReportedError e - let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) = + let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken = istate |> mainThreadProcessAction ctok (fun ctok tcConfig istate -> - execParsedInteractions (ctok, tcConfig, istate, action, errorLogger, None)) + execParsedInteractions (ctok, tcConfig, istate, action, errorLogger, None, cancellationToken)) let parseExpression (tokenizer:LexFilter.LexFilter) = reusingLexbufForParsing tokenizer.LexBuffer (fun () -> @@ -1997,8 +1998,8 @@ type internal FsiInteractionProcessor /// During processing of startup scripts, this runs on the main thread. /// /// This is blocking: it reads until one chunk of input have been received, unless IsPastEndOfStream is true - member __.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger) = - + member __.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger, ?cancellationToken: CancellationToken) = + let cancellationToken = defaultArg cancellationToken CancellationToken.None if tokenizer.LexBuffer.IsPastEndOfStream then let stepStatus = if fsiInterruptController.FsiInterruptStdinState = StdinEOFPermittedBecauseCtrlCRecentlyPressed then @@ -2022,7 +2023,7 @@ type internal FsiInteractionProcessor // After we've unblocked and got something to run we switch // over to the run-thread (e.g. the GUI thread) - let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate)) + let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken) if !progress then fprintfn fsiConsoleOutput.Out "Just called runCodeOnMainThread, res = %O..." res; res) @@ -2093,7 +2094,8 @@ type internal FsiInteractionProcessor member __.LoadDummyInteraction(ctok, errorLogger) = setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) - member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger) = + member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger, ?cancellationToken) = + let cancellationToken = defaultArg cancellationToken CancellationToken.None use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID @@ -2102,7 +2104,7 @@ type internal FsiInteractionProcessor currState |> InteractiveCatch errorLogger (fun istate -> let expr = ParseInteraction tokenizer - mainThreadProcessParsedInteractions ctok errorLogger (expr, istate) ) + mainThreadProcessParsedInteractions ctok errorLogger (expr, istate) cancellationToken) |> commitResult member this.EvalScript (ctok, scriptPath, errorLogger) = @@ -2592,25 +2594,26 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i fsiInteractionProcessor.EvalExpression(ctok, sourceText, dummyScriptFileName, errorLogger) |> commitResultNonThrowing errorOptions dummyScriptFileName errorLogger - member x.EvalInteraction(sourceText) : unit = + member x.EvalInteraction(sourceText, ?cancellationToken) : unit = // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() - - fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger) + let cancellationToken = defaultArg cancellationToken CancellationToken.None + fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger, cancellationToken) |> commitResult |> ignore - member x.EvalInteractionNonThrowing(sourceText) = + member x.EvalInteractionNonThrowing(sourceText, ?cancellationToken) = // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() + let cancellationToken = defaultArg cancellationToken CancellationToken.None let errorOptions = TcConfig.Create(tcConfigB,validate = false).errorSeverityOptions let errorLogger = CompilationErrorLogger("EvalInteraction", errorOptions) - fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger) + fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger, cancellationToken) |> commitResultNonThrowing errorOptions "input.fsx" errorLogger member x.EvalScript(scriptPath) : unit = diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 8809c213a3..8cc0b23fed 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -4,6 +4,7 @@ module public FSharp.Compiler.Interactive.Shell open System.IO +open System.Threading open FSharp.Compiler open FSharp.Compiler.SourceCodeServices @@ -146,7 +147,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteraction : code: string -> unit + member EvalInteraction : code: string * ?cancellationToken: CancellationToken -> unit /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -155,7 +156,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteractionNonThrowing : code: string -> Choice * FSharpErrorInfo[] + member EvalInteractionNonThrowing : code: string * ?cancellationToken: CancellationToken -> Choice * FSharpErrorInfo[] /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors are sent to the output writer, a 'true' return value indicates there diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 7452ab5bb7..1de9c9beaf 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -3,8 +3,10 @@ namespace FSharp.Compiler.Scripting.UnitTests open System +open System.Diagnostics open System.IO open System.Threading +open System.Threading.Tasks open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.Scripting open FSharp.Compiler.SourceCodeServices @@ -107,3 +109,26 @@ type InteractiveTests() = match result with | Ok(_) -> Assert.Fail("expected a failure") | Error(ex) -> Assert.IsInstanceOf(ex) + + [] + member _.``Evaluation can be cancelled``() = + use script = new FSharpScript() + let sleepTime = 10000 + let mutable result = None + let mutable wasCancelled = false + use tokenSource = new CancellationTokenSource() + let eval () = + try + result <- Some(script.Eval(sprintf "System.Threading.Thread.Sleep(%d)\n2" sleepTime, tokenSource.Token)) + // if execution gets here (which it shouldn't), the value `2` will be returned + with + | :? OperationCanceledException -> wasCancelled <- true + let sw = Stopwatch.StartNew() + let evalTask = Task.Run(eval) + // cancel and wait for finish + tokenSource.Cancel() + evalTask.GetAwaiter().GetResult() + // ensure we cancelled and didn't complete the sleep or evaluation + Assert.True(wasCancelled) + Assert.LessOrEqual(sw.ElapsedMilliseconds, sleepTime) + Assert.AreEqual(None, result) From c18e1780b3f3f345364cb1ad8e510ea9f4590d3a Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 21 Oct 2019 21:50:30 -0700 Subject: [PATCH 052/214] Remove dead code (#7755) --- src/fsharp/CompileOps.fs | 3 --- src/fsharp/CompileOps.fsi | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 5ab8928598..5979861c1f 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2009,7 +2009,6 @@ type CcuLoadFailureAction = [] type TcConfigBuilder = { mutable primaryAssembly: PrimaryAssembly - mutable autoResolveOpenDirectivesToDlls: bool mutable noFeedback: bool mutable stackReserveSize: int32 option mutable implicitIncludeDir: string (* normally "." *) @@ -2176,7 +2175,6 @@ type TcConfigBuilder = stackReserveSize = None conditionalCompilationDefines = [] implicitIncludeDir = String.Empty - autoResolveOpenDirectivesToDlls = false openDebugInformationForLaterStaticLinking = false defaultFSharpBinariesDir = String.Empty compilingFslib = false @@ -2619,7 +2617,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let systemAssemblies = systemAssemblies member x.primaryAssembly = data.primaryAssembly - member x.autoResolveOpenDirectivesToDlls = data.autoResolveOpenDirectivesToDlls member x.noFeedback = data.noFeedback member x.stackReserveSize = data.stackReserveSize member x.implicitIncludeDir = data.implicitIncludeDir diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 34e25a21f1..364336f32d 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -250,7 +250,6 @@ type VersionFlag = [] type TcConfigBuilder = { mutable primaryAssembly: PrimaryAssembly - mutable autoResolveOpenDirectivesToDlls: bool mutable noFeedback: bool mutable stackReserveSize: int32 option mutable implicitIncludeDir: string @@ -417,7 +416,6 @@ type TcConfigBuilder = // Immutable TcConfig type TcConfig = member primaryAssembly: PrimaryAssembly - member autoResolveOpenDirectivesToDlls: bool member noFeedback: bool member stackReserveSize: int32 option member implicitIncludeDir: string From fdcddec093dd73d2e711536be0051ad3e495ccf2 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 22 Oct 2019 16:48:51 -0700 Subject: [PATCH 053/214] migrate all `netcoreapp2.x` to `netcoreapp3.0` --- FSharpTests.Directory.Build.props | 6 +-- Makefile | 14 +++---- eng/Build.ps1 | 15 +++----- eng/build-utils.ps1 | 6 +-- eng/build.sh | 11 ++---- .../Program.fs | 4 +- .../ProjectCrackerTool.fs | 6 +-- .../FSharp.Compiler.Service.Tests.fsproj | 6 +-- fcs/build.fsx | 6 +-- .../EditorService/EditorService.fsproj | 2 +- global.json | 1 - proto.proj | 6 +-- .../AssemblyCheck/AssemblyCheck.fsproj | 2 +- src/buildtools/fslex/fslex.fsproj | 2 +- src/buildtools/fsyacc/fsyacc.fsproj | 2 +- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 4 +- .../Microsoft.FSharp.Compiler.csproj | 8 ++-- .../Microsoft.FSharp.Compiler.nuspec | 38 +++++++++---------- src/fsharp/fsc/fsc.fsproj | 9 +---- src/fsharp/fsi/fsi.fsproj | 6 +-- .../BasicProvider.DesignTime.fsproj | 2 +- .../BasicProvider.Tests.fsproj | 2 +- .../BasicProvider/BasicProvider.fsproj | 2 +- .../BasicProvider/TestBasicProvider.cmd | 8 ++-- .../ComboProvider.Tests.fsproj | 2 +- .../ComboProvider/ComboProvider.fsproj | 2 +- .../ComboProvider/TestComboProvider.cmd | 8 ++-- .../ProtocolTests.fs | 2 +- tests/fsharp/test-framework.fs | 6 +-- tests/service/CSharpProjectAnalysis.fs | 10 ++--- tests/service/Common.fs | 12 +++--- tests/service/EditorTests.fs | 6 +-- tests/service/ExprTests.fs | 4 +- tests/service/FileSystemTests.fs | 2 +- tests/service/FscTests.fs | 4 +- tests/service/FsiTests.fs | 2 +- tests/service/MultiProjectAnalysisTests.fs | 8 ++-- tests/service/ProjectAnalysisTests.fs | 20 +++++----- tests/service/ProjectOptionsTests.fs | 2 +- 39 files changed, 121 insertions(+), 137 deletions(-) diff --git a/FSharpTests.Directory.Build.props b/FSharpTests.Directory.Build.props index 8a7a832a43..8a4730f8dd 100644 --- a/FSharpTests.Directory.Build.props +++ b/FSharpTests.Directory.Build.props @@ -22,18 +22,18 @@ $([System.IO.Path]::GetDirectoryName('$(DOTNET_HOST_PATH)')) dotnet.exe dotnet - $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\netcoreapp2.1\fsc.exe + $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\netcoreapp3.0\fsc.exe $([System.IO.Path]::GetDirectoryName('$(DOTNET_HOST_PATH)')) dotnet.exe dotnet - $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\netcoreapp2.1\fsi.exe + $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\netcoreapp3.0\fsi.exe <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'!='Core'">net472 - <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">netcoreapp2.1 + <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">netcoreapp3.0 <_FSharpBuildBinPath>$(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\$(_FSharpBuildTargetFramework) $(_FSharpBuildBinPath)\FSharp.Build.dll diff --git a/Makefile b/Makefile index a002620f23..51a47f4ff9 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ proto: tools $(DotNetExe) restore src/fsharp/fsc/fsc.fsproj $(DotNetExe) build src/buildtools/buildtools.proj -c Proto $(DotNetExe) build src/fsharp/FSharp.Build/FSharp.Build.fsproj -f netstandard2.0 -c Proto - $(DotNetExe) build src/fsharp/fsc/fsc.fsproj -f netcoreapp2.1 -c Proto + $(DotNetExe) build src/fsharp/fsc/fsc.fsproj -f netcoreapp3.0 -c Proto restore: $(DotNetExe) restore src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -32,15 +32,15 @@ build: proto restore $(DotNetExe) build -c $(Configuration) -f netstandard2.0 src/fsharp/FSharp.Core/FSharp.Core.fsproj $(DotNetExe) build -c $(Configuration) -f netstandard2.0 src/fsharp/FSharp.Build/FSharp.Build.fsproj $(DotNetExe) build -c $(Configuration) -f netstandard2.0 src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj - $(DotNetExe) build -c $(Configuration) -f netcoreapp2.1 src/fsharp/fsc/fsc.fsproj + $(DotNetExe) build -c $(Configuration) -f netcoreapp3.0 src/fsharp/fsc/fsc.fsproj $(DotNetExe) build -c $(Configuration) -f netstandard2.0 src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj - $(DotNetExe) build -c $(Configuration) -f netcoreapp2.1 src/fsharp/fsi/fsi.fsproj - $(DotNetExe) build -c $(Configuration) -f netcoreapp2.0 tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj - $(DotNetExe) build -c $(Configuration) -f netcoreapp2.0 tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj + $(DotNetExe) build -c $(Configuration) -f netcoreapp3.0 src/fsharp/fsi/fsi.fsproj + $(DotNetExe) build -c $(Configuration) -f netcoreapp3.0 tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj + $(DotNetExe) build -c $(Configuration) -f netcoreapp3.0 tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj test: build - $(DotNetExe) test -f netcoreapp2.0 -c $(Configuration) --no-restore --no-build tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj -l "trx;LogFileName=$(CURDIR)/tests/TestResults/FSharp.Core.UnitTests.coreclr.trx" - $(DotNetExe) test -f netcoreapp2.0 -c $(Configuration) --no-restore --no-build tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj -l "trx;LogFileName=$(CURDIR)/tests/TestResults/FSharp.Build.UnitTests.coreclr.trx" + $(DotNetExe) test -f netcoreapp3.0 -c $(Configuration) --no-restore --no-build tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj -l "trx;LogFileName=$(CURDIR)/tests/TestResults/FSharp.Core.UnitTests.coreclr.trx" + $(DotNetExe) test -f netcoreapp3.0 -c $(Configuration) --no-restore --no-build tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj -l "trx;LogFileName=$(CURDIR)/tests/TestResults/FSharp.Build.UnitTests.coreclr.trx" clean: rm -rf $(CURDIR)/artifacts diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 45035bb41e..bd2419be66 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -151,11 +151,11 @@ function Process-Arguments() { function Update-Arguments() { if ($script:noVisualStudio) { - $script:bootstrapTfm = "netcoreapp2.1" + $script:bootstrapTfm = "netcoreapp3.0" $script:msbuildEngine = "dotnet" } - if ($bootstrapTfm -eq "netcoreapp2.1") { + if ($bootstrapTfm -eq "netcoreapp3.0") { if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.runtimeconfig.json")) { $script:bootstrap = $True } @@ -259,7 +259,7 @@ function TestUsingNUnit([string] $testProject, [string] $targetFramework) { } function BuildCompiler() { - if ($bootstrapTfm -eq "netcoreapp2.1") { + if ($bootstrapTfm -eq "netcoreapp3.0") { $dotnetPath = InitializeDotNetCli $dotnetExe = Join-Path $dotnetPath "dotnet.exe" $fscProject = "$RepoRoot\src\fsharp\fsc\fsc.fsproj" @@ -268,10 +268,10 @@ function BuildCompiler() { $argNoRestore = if ($norestore) { " --no-restore" } else { "" } $argNoIncremental = if ($rebuild) { " --no-incremental" } else { "" } - $args = "build $fscProject -c $configuration -v $verbosity -f netcoreapp2.1" + $argNoRestore + $argNoIncremental + $args = "build $fscProject -c $configuration -v $verbosity -f netcoreapp3.0" + $argNoRestore + $argNoIncremental Exec-Console $dotnetExe $args - $args = "build $fsiProject -c $configuration -v $verbosity -f netcoreapp2.1" + $argNoRestore + $argNoIncremental + $args = "build $fsiProject -c $configuration -v $verbosity -f netcoreapp3.0" + $argNoRestore + $argNoIncremental Exec-Console $dotnetExe $args } } @@ -312,11 +312,6 @@ try { if ($ci) { Prepare-TempDir EnablePreviewSdks - - # enable us to build netcoreapp2.1 product binaries - $global:_DotNetInstallDir = Join-Path $RepoRoot ".dotnet" - InstallDotNetSdk $global:_DotNetInstallDir $GlobalJson.tools.dotnet - InstallDotNetSdk $global:_DotNetInstallDir "2.1.503" } if ($bootstrap) { diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1 index 772de110ca..08e11e9395 100644 --- a/eng/build-utils.ps1 +++ b/eng/build-utils.ps1 @@ -238,9 +238,9 @@ function Make-BootstrapBuild() { # prepare FsLex and Fsyacc and AssemblyCheck Run-MSBuild "$RepoRoot\src\buildtools\buildtools.proj" "/restore /t:Publish" -logFileName "BuildTools" -configuration $bootstrapConfiguration - Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\netcoreapp2.1\publish" -Destination "$dir\fslex" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\netcoreapp2.1\publish" -Destination "$dir\fsyacc" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\netcoreapp2.1\publish" -Destination "$dir\AssemblyCheck" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\netcoreapp3.0\publish" -Destination "$dir\fslex" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\netcoreapp3.0\publish" -Destination "$dir\fsyacc" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\netcoreapp3.0\publish" -Destination "$dir\AssemblyCheck" -Force -Recurse # prepare compiler $projectPath = "$RepoRoot\proto.proj" diff --git a/eng/build.sh b/eng/build.sh index ca54f98e47..a53fce7914 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -239,8 +239,8 @@ function BuildSolution { } mkdir -p "$bootstrap_dir" - cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fslex - cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fsyacc + cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp3.0/publish $bootstrap_dir/fslex + cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp3.0/publish $bootstrap_dir/fsyacc fi if [ ! -f "$bootstrap_dir/fsc.exe" ]; then MSBuild "$repo_root/proto.proj" \ @@ -252,7 +252,7 @@ function BuildSolution { ExitWithExitCode $exit_code } - cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fsc + cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp3.0/publish $bootstrap_dir/fsc fi # do real build @@ -280,11 +280,6 @@ function BuildSolution { InitializeDotNetCli $restore -# enable us to build netcoreapp2.1 binaries -if [[ "$source_build" != true ]]; then - InstallDotNetSdk $_InitializeDotNetCli 2.1.503 -fi - BuildSolution if [[ "$test_core_clr" == true ]]; then diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs index 8379737c93..5cc3fc8b1e 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs @@ -6,7 +6,7 @@ open System.Runtime.Serialization.Json module Program = -#if !NETCOREAPP2_0 +#if !NETCOREAPP let addMSBuildv14BackupResolution () = let onResolveEvent = new ResolveEventHandler(fun sender evArgs -> let requestedAssembly = AssemblyName(evArgs.Name) @@ -40,7 +40,7 @@ module Program = let asText = Array.exists (fun (s: string) -> s = "--text") argv let argv = Array.filter (fun (s: string) -> s <> "--text") argv -#if !NETCOREAPP2_0 +#if !NETCOREAPP addMSBuildv14BackupResolution () #endif crackAndSendOutput asText argv diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs index 7cf970f7a7..e159cd3760 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs @@ -11,7 +11,7 @@ module internal ProjectCrackerTool = open Microsoft.Build.Evaluation let runningOnMono = -#if NETCOREAPP2_0 +#if NETCOREAPP false #else try match System.Type.GetType("Mono.Runtime") with null -> false | _ -> true @@ -128,7 +128,7 @@ module internal ProjectCrackerTool = outFileOpt, directory, getItems, references, projectReferences, getprop project, project.FullPath -#if !NETCOREAPP2_0 +#if !NETCOREAPP let CrackProjectUsingOldBuildAPI (fsprojFile:string) properties logOpt = let engine = new Microsoft.Build.BuildEngine.Engine() Option.iter (fun l -> engine.RegisterLogger(l)) logOpt @@ -201,7 +201,7 @@ module internal ProjectCrackerTool = let outFileOpt, directory, getItems, references, projectReferences, getProp, fsprojFullPath = try -#if NETCOREAPP2_0 +#if NETCOREAPP CrackProjectUsingNewBuildAPI fsprojFileName properties logOpt with #else diff --git a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index d6c71b5545..0c32c068af 100644 --- a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -1,7 +1,7 @@ - $(FcsTargetNetFxFramework);netcoreapp2.0 + $(FcsTargetNetFxFramework);netcoreapp3.0 true 4.1.19 $(NoWarn);44;75; @@ -11,7 +11,7 @@ true true - + $(DefineConstants);NO_PROJECTCRACKER @@ -66,7 +66,7 @@ TreeVisitorTests.fs - + Program.fs diff --git a/fcs/build.fsx b/fcs/build.fsx index cf0e0d8ded..660d7f3f6e 100644 --- a/fcs/build.fsx +++ b/fcs/build.fsx @@ -31,7 +31,7 @@ let dotnetExePath = if File.Exists(pathToCli) then pathToCli else - DotNetCli.InstallDotNetSDK "2.2.105" + DotNetCli.InstallDotNetSDK "3.0.100" let runDotnet workingDir args = let result = @@ -92,8 +92,8 @@ Target "BuildVersion" (fun _ -> Target "Build" (fun _ -> runDotnet __SOURCE_DIRECTORY__ "build ../src/buildtools/buildtools.proj -v n -c Proto" - let fslexPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fslex/Proto/netcoreapp2.1/fslex.dll" - let fsyaccPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fsyacc/Proto/netcoreapp2.1/fsyacc.dll" + let fslexPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fslex/Proto/netcoreapp3.0/fslex.dll" + let fsyaccPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fsyacc/Proto/netcoreapp3.0/fsyacc.dll" runDotnet __SOURCE_DIRECTORY__ (sprintf "build FSharp.Compiler.Service.sln -v n -c Release /p:FsLexPath=%s /p:FsYaccPath=%s" fslexPath fsyaccPath) ) diff --git a/fcs/samples/EditorService/EditorService.fsproj b/fcs/samples/EditorService/EditorService.fsproj index d71d6dc291..2fdc22b6c8 100644 --- a/fcs/samples/EditorService/EditorService.fsproj +++ b/fcs/samples/EditorService/EditorService.fsproj @@ -1,7 +1,7 @@  - $(FcsTargetNetFxFramework);netcoreapp2.0 + $(FcsTargetNetFxFramework);netcoreapp3.0 true Exe false diff --git a/global.json b/global.json index d506e56546..4acd6d2219 100644 --- a/global.json +++ b/global.json @@ -4,7 +4,6 @@ "vs": { "version": "16.3", "components": [ - "Microsoft.Net.Core.Component.SDK.2.1", "Microsoft.VisualStudio.Component.FSharp" ] } diff --git a/proto.proj b/proto.proj index 23d7525d13..3a9793b4be 100644 --- a/proto.proj +++ b/proto.proj @@ -7,13 +7,13 @@ - TargetFramework=netcoreapp2.1 + TargetFramework=netcoreapp3.0 - TargetFramework=netcoreapp2.1 + TargetFramework=netcoreapp3.0 - TargetFramework=netcoreapp2.1 + TargetFramework=netcoreapp3.0 diff --git a/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj b/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj index 72f79d02f9..cde9cb37a7 100644 --- a/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj +++ b/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.1 + netcoreapp3.0 true diff --git a/src/buildtools/fslex/fslex.fsproj b/src/buildtools/fslex/fslex.fsproj index 2766098c25..e9c7bb0c55 100644 --- a/src/buildtools/fslex/fslex.fsproj +++ b/src/buildtools/fslex/fslex.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.1 + netcoreapp3.0 INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstant) true diff --git a/src/buildtools/fsyacc/fsyacc.fsproj b/src/buildtools/fsyacc/fsyacc.fsproj index dc5a4f67f3..fad9941bdc 100644 --- a/src/buildtools/fsyacc/fsyacc.fsproj +++ b/src/buildtools/fsyacc/fsyacc.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.1 + netcoreapp3.0 INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstant) true diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index de9e9ebfdd..a05d5d4f6f 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -5,8 +5,8 @@ Library $(ProtoTargetFramework) - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 FSharp.Build $(NoWarn);45;55;62;75;1204 true diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.csproj b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.csproj index 21c76c5808..6c0d52fd84 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.csproj +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.csproj @@ -2,7 +2,7 @@ true - netcoreapp2.1 + netcoreapp3.0 Microsoft.FSharp.Compiler.nuspec true .NET Core compatible version of the F# compiler fsc.exe. @@ -10,13 +10,13 @@ - TargetFramework=netcoreapp2.1 + TargetFramework=netcoreapp3.0 - TargetFramework=netcoreapp2.1 + TargetFramework=netcoreapp3.0 - TargetFramework=netcoreapp2.1 + TargetFramework=netcoreapp3.0 TargetFramework=netstandard2.0 diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec index 1e7d0fe478..4d5d7d5e6f 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec @@ -4,7 +4,7 @@ $CommonMetadataElements$ en-US - + @@ -43,30 +43,30 @@ this approach gives a very small deployment. Which is kind of necessary. --> - - - - - - + + + + + + + target="lib\netcoreapp3.0" /> - - - - - - + + + + + + - + + target="lib\netcoreapp3.0" /> - + target="lib\netcoreapp3.0" /> + + target="lib\netcoreapp3.0" /> diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj index 4b45e75318..2e5a405c6e 100644 --- a/src/fsharp/fsc/fsc.fsproj +++ b/src/fsharp/fsc/fsc.fsproj @@ -5,8 +5,8 @@ Exe $(ProtoTargetFramework) - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 .exe $(NoWarn);45;55;62;75;1204 true @@ -45,11 +45,6 @@ - - - - - diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj index 12dff94ebc..88b15449cd 100644 --- a/src/fsharp/fsi/fsi.fsproj +++ b/src/fsharp/fsi/fsi.fsproj @@ -5,8 +5,8 @@ Exe $(ProtoTargetFramework) - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 .exe $(NoWarn);45;55;62;75;1204 true @@ -50,7 +50,7 @@ - + diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj index 61c08733e8..6168ff5fec 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp2.0;net461 + netcoreapp3.0;net461 typeproviders NO_GENERATIVE IS_DESIGNTIME diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj index 02fa5ed48e..409bc2e064 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp2.0 + netcoreapp3.0 $(TestTargetFramework) false NO_GENERATIVE diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj index 9380a9ee3f..2e1f52d981 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp2.0;net461 + netcoreapp3.0;net461 typeproviders typeproviders diff --git a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd index 56af32e144..64e5613683 100644 --- a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd +++ b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd @@ -26,8 +26,8 @@ taskkill /F /IM dotnet.exe %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=net461 -p:FSharpTestCompilerVersion=net40 -nr=false @if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false -%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false @if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure rem @@ -44,8 +44,8 @@ if not '%NUGET_PACKAGES%' == '' rd %NUGET_PACKAGES%\BasicProvider /s /q %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=net461 -p:FSharpTestCompilerVersion=net40 -nr=false @if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false -%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test BasicProvider.Tests\BasicProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false @if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure :success diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj index 7101aa290b..7deab450f4 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp2.0 + 3.0 $(TestTargetFramework) false NO_GENERATIVE diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj index 31419a4b3f..35f42604b1 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp2.0;net461 + netcoreapp3.0;net461 diff --git a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd index 74035032e2..a08c72c1df 100644 --- a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd +++ b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd @@ -25,8 +25,8 @@ taskkill /F /IM dotnet.exe %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=net461 -p:FSharpTestCompilerVersion=net40 -nr=false @if ERRORLEVEL 1 echo Error: ComboProvider failed && goto :failure -@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false -%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false @if ERRORLEVEL 1 echo Error: ComboProviderProvider failed && goto :failure rem @@ -43,8 +43,8 @@ if not '%NUGET_PACKAGES%' == '' rd %NUGET_PACKAGES%\ComboProvider /s /q %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=net461 -p:FSharpTestCompilerVersion=net40 -nr=false @if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false -%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp2.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +@echo %__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false +%__scriptpath%..\..\..\artifacts\toolset\dotnet\dotnet.exe test ComboProvider\ComboProvider.Tests\ComboProvider.Tests.fsproj -c release -v minimal -p:TestTargetFramework=netcoreapp3.0 -p:FSharpTestCompilerVersion=coreclr -nr=false @if ERRORLEVEL 1 echo Error: ComboProvider failed && goto :failure :success diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs index e9de31049b..8b262e2ceb 100644 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs @@ -12,7 +12,7 @@ open StreamJsonRpc type ProtocolTests() = #if !NETCOREAPP - // The `netcoreapp2.1` version of `FSharp.Compiler.LanguageServer.exe` can't be run without a `publish` step so + // The `netcoreapp` version of `FSharp.Compiler.LanguageServer.exe` can't be run without a `publish` step so // we're artificially restricting this test to the full framework. [] #endif diff --git a/tests/fsharp/test-framework.fs b/tests/fsharp/test-framework.fs index cb2418f04c..d63bda8841 100644 --- a/tests/fsharp/test-framework.fs +++ b/tests/fsharp/test-framework.fs @@ -168,10 +168,10 @@ let config configurationName envVars = let fsharpBuildArchitecture = "net472" let fsharpCompilerInteractiveSettingsArchitecture = "net472" #else - let fscArchitecture = "netcoreapp2.1" - let fsiArchitecture = "netcoreapp2.1" + let fscArchitecture = "netcoreapp3.0" + let fsiArchitecture = "netcoreapp3.0" let fsharpCoreArchitecture = "netstandard2.0" - let fsharpBuildArchitecture = "netcoreapp2.1" + let fsharpBuildArchitecture = "netcoreapp3.0" let fsharpCompilerInteractiveSettingsArchitecture = "netstandard2.0" #endif let repoRoot = SCRIPT_ROOT ++ ".." ++ ".." diff --git a/tests/service/CSharpProjectAnalysis.fs b/tests/service/CSharpProjectAnalysis.fs index bac536c294..dd0b13945a 100644 --- a/tests/service/CSharpProjectAnalysis.fs +++ b/tests/service/CSharpProjectAnalysis.fs @@ -61,7 +61,7 @@ let internal getProjectReferences (content, dllFiles, libDirs, otherFlags) = results, assemblies [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test that csharp references are recognized as such`` () = @@ -99,7 +99,7 @@ let ``Test that csharp references are recognized as such`` () = members.["InterfaceEvent"].XmlDocSig |> shouldEqual "E:FSharp.Compiler.Service.Tests.CSharpClass.InterfaceEvent" [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test that symbols of csharp inner classes/enums are reported`` () = @@ -122,7 +122,7 @@ let _ = CSharpOuterClass.InnerClass.StaticMember() "member StaticMember"; "NestedEnumClass"|] [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Ctor test`` () = @@ -158,7 +158,7 @@ let getEntitiesUses source = |> List.ofSeq [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Different types with the same short name equality check`` () = @@ -178,7 +178,7 @@ let (s2: FSharp.Compiler.Service.Tests.String) = null | _ -> sprintf "Expecting two symbols, got %A" stringSymbols |> failwith [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Different namespaces with the same short name equality check`` () = diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 6920e682af..27505b8294 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -6,7 +6,7 @@ open System.Collections.Generic open FSharp.Compiler open FSharp.Compiler.SourceCodeServices -#if NETCOREAPP2_0 +#if NETCOREAPP let readRefs (folder : string) (projectFile: string) = let runProcess (workingDir: string) (exePath: string) (args: string) = let psi = System.Diagnostics.ProcessStartInfo() @@ -64,7 +64,7 @@ let getBackgroundCheckResultsForScriptText (input) = let sysLib nm = -#if !NETCOREAPP2_0 +#if !NETCOREAPP if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows let programFilesx86Folder = System.Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") programFilesx86Folder + @"\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\" + nm + ".dll" @@ -84,7 +84,7 @@ let fsCoreDefaultReference() = PathRelativeToTestAssembly "FSharp.Core.dll" let mkStandardProjectReferences () = -#if NETCOREAPP2_0 +#if NETCOREAPP let file = "Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj" let projDir = Path.Combine(__SOURCE_DIRECTORY__, "../projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0") readRefs projDir file @@ -124,7 +124,7 @@ let mkProjectCommandLineArgs (dllName, fileNames) = printfn "dllName = %A, args = %A" dllName args args -#if NETCOREAPP2_0 +#if NETCOREAPP let mkProjectCommandLineArgsForScript (dllName, fileNames) = [| yield "--simpleresolution" yield "--noframework" @@ -165,7 +165,7 @@ let parseAndCheckFile fileName source options = let parseAndCheckScript (file, input) = -#if NETCOREAPP2_0 +#if NETCOREAPP let dllName = Path.ChangeExtension(file, ".dll") let projName = Path.ChangeExtension(file, ".fsproj") let args = mkProjectCommandLineArgsForScript (dllName, [file]) @@ -299,7 +299,7 @@ let rec allSymbolsInEntities compGen (entities: IList) = let coreLibAssemblyName = -#if NETCOREAPP2_0 +#if NETCOREAPP "System.Runtime" #else "mscorlib" diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs index 69b9e40764..7cecfb730c 100644 --- a/tests/service/EditorTests.fs +++ b/tests/service/EditorTests.fs @@ -103,14 +103,14 @@ let ``Intro test`` () = ("Concat", ["str0: string"; "str1: string"]); ("Concat", ["arg0: obj"; "arg1: obj"; "arg2: obj"]); ("Concat", ["str0: string"; "str1: string"; "str2: string"]); -#if !NETCOREAPP2_0 // TODO: check why this is needed for .NET Core testing of FSharp.Compiler.Service +#if !NETCOREAPP // TODO: check why this is needed for .NET Core testing of FSharp.Compiler.Service ("Concat", ["arg0: obj"; "arg1: obj"; "arg2: obj"; "arg3: obj"]); #endif ("Concat", ["str0: string"; "str1: string"; "str2: string"; "str3: string"])] // TODO: check if this can be enabled in .NET Core testing of FSharp.Compiler.Service -#if !INTERACTIVE && !NETCOREAPP2_0 // InternalsVisibleTo on IncrementalBuild.LocallyInjectCancellationFault not working for some reason? +#if !INTERACTIVE && !NETCOREAPP // InternalsVisibleTo on IncrementalBuild.LocallyInjectCancellationFault not working for some reason? [] let ``Basic cancellation test`` () = try @@ -162,7 +162,7 @@ let ``GetMethodsAsSymbols should return all overloads of a method as FSharpSymbo ("Concat", [("str0", "string"); ("str1", "string")]); ("Concat", [("arg0", "obj"); ("arg1", "obj"); ("arg2", "obj")]); ("Concat", [("str0", "string"); ("str1", "string"); ("str2", "string")]); -#if !NETCOREAPP2_0 // TODO: check why this is needed for .NET Core testing of FSharp.Compiler.Service +#if !NETCOREAPP // TODO: check why this is needed for .NET Core testing of FSharp.Compiler.Service ("Concat", [("arg0", "obj"); ("arg1", "obj"); ("arg2", "obj"); ("arg3", "obj")]); #endif ("Concat", [("str0", "string"); ("str1", "string"); ("str2", "string"); ("str3", "string")])] diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index a92301bcef..1d18471c6e 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -784,7 +784,7 @@ let ``Test Unoptimized Declarations Project1`` () = [] -//#if NETCOREAPP2_0 +//#if NETCOREAPP //[] //#endif let ``Test Optimized Declarations Project1`` () = @@ -2897,7 +2897,7 @@ let ``Test expressions of optimized declarations stress big expressions`` () = #if NOT_YET_ENABLED -#if !NO_PROJECTCRACKER && !NETCOREAPP2_0 +#if !NO_PROJECTCRACKER && !NETCOREAPP [] let ``Check use of type provider that provides calls to F# code`` () = diff --git a/tests/service/FileSystemTests.fs b/tests/service/FileSystemTests.fs index 24b45414fd..275e037969 100644 --- a/tests/service/FileSystemTests.fs +++ b/tests/service/FileSystemTests.fs @@ -76,7 +76,7 @@ let UseMyFileSystem() = [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``FileSystem compilation test``() = diff --git a/tests/service/FscTests.fs b/tests/service/FscTests.fs index b7ff870675..bcd1cb2cba 100644 --- a/tests/service/FscTests.fs +++ b/tests/service/FscTests.fs @@ -37,7 +37,7 @@ type PEVerifier () = static let runsOnMono = try System.Type.GetType("Mono.Runtime") <> null with _ -> false let verifierInfo = -#if NETCOREAPP2_0 +#if NETCOREAPP None #else if runsOnMono then @@ -92,7 +92,7 @@ let checker = FSharpChecker.Create() /// Ensures the default FSharp.Core referenced by the F# compiler service (if none is /// provided explicitly) is available in the output directory. let ensureDefaultFSharpCoreAvailable tmpDir = -#if NETCOREAPP2_0 +#if NETCOREAPP ignore tmpDir #else // FSharp.Compiler.Service references FSharp.Core 4.3.0.0 by default. That's wrong? But the output won't verify diff --git a/tests/service/FsiTests.fs b/tests/service/FsiTests.fs index 54f7829f6a..39ff624fbf 100644 --- a/tests/service/FsiTests.fs +++ b/tests/service/FsiTests.fs @@ -27,7 +27,7 @@ let errStream = new CompilerOutputStream() let argv = [| "C:\\fsi.exe" |] let allArgs = Array.append argv [|"--noninteractive"|] -#if NETCOREAPP2_0 +#if NETCOREAPP let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration() #else let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration(fsi) diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index 04ba820da0..0cd112d526 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -129,7 +129,7 @@ let u = Case1 3 [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test multi project 1 whole project errors`` () = @@ -314,7 +314,7 @@ let p = (""" FSharpChecker.Create(projectCacheSize=size) [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test ManyProjectsStressTest whole project errors`` () = @@ -834,7 +834,7 @@ let ``Test max memory gets triggered`` () = [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Type provider project references should not throw exceptions`` () = @@ -924,7 +924,7 @@ let ``Type provider project references should not throw exceptions`` () = //------------------------------------------------------------------------------------ [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #else [] diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index c9635c7083..3987081298 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -3212,7 +3212,7 @@ let ``Test Project22 IList properties`` () = attribsOfSymbol ilistTypeDefn |> shouldEqual ["interface"] -#if !NETCOREAPP2_0 // TODO: check if this can be enabled in .NET Core testing of FSharp.Compiler.Service +#if !NETCOREAPP // TODO: check if this can be enabled in .NET Core testing of FSharp.Compiler.Service ilistTypeDefn.Assembly.SimpleName |> shouldEqual coreLibAssemblyName #endif @@ -3674,7 +3674,7 @@ let _ = XmlProvider<"13">.GetSample() let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test Project25 whole project errors`` () = @@ -3684,7 +3684,7 @@ let ``Test Project25 whole project errors`` () = wholeProjectResults.Errors.Length |> shouldEqual 0 [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test Project25 symbol uses of type-provided members`` () = @@ -3743,7 +3743,7 @@ let ``Test Project25 symbol uses of type-provided members`` () = usesOfGetSampleSymbol |> shouldEqual [|("file1", ((5, 8), (5, 25))); ("file1", ((10, 8), (10, 78)))|] [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test symbol uses of type-provided types`` () = @@ -4174,7 +4174,7 @@ let ``Test project31 whole project errors`` () = wholeProjectResults.Errors.Length |> shouldEqual 0 [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test project31 C# type attributes`` () = @@ -4217,13 +4217,13 @@ let ``Test project31 C# method attributes`` () = |> set |> shouldEqual (set [ -#if !NETCOREAPP2_0 +#if !NETCOREAPP "(SecuritySafeCriticalAttribute, [], [])"; #endif "(CLSCompliantAttribute, [(type Microsoft.FSharp.Core.bool, false)], [])"]) [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test project31 Format C# type attributes`` () = @@ -4258,7 +4258,7 @@ let ``Test project31 Format C# method attributes`` () = |> set |> shouldEqual (set ["[]"; -#if !NETCOREAPP2_0 +#if !NETCOREAPP "[]"; #endif ]) @@ -4413,7 +4413,7 @@ let ``Test Project34 whole project errors`` () = wholeProjectResults.Errors.Length |> shouldEqual 0 [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Test project34 should report correct accessibility for System.Data.Listeners`` () = @@ -4538,7 +4538,7 @@ module internal Project35b = let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] -#if NETCOREAPP2_0 +#if NETCOREAPP let projPath = Path.ChangeExtension(fileName1, ".fsproj") let dllPath = Path.ChangeExtension(fileName1, ".dll") let args = mkProjectCommandLineArgs(dllPath, fileNames) diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs index de7aed1675..9113b50243 100644 --- a/tests/service/ProjectOptionsTests.fs +++ b/tests/service/ProjectOptionsTests.fs @@ -520,7 +520,7 @@ let ``Test SourceFiles order for GetProjectOptionsFromScript`` () = // See #594 test "MainBad" [|"MainBad"|] [] -#if NETCOREAPP2_0 +#if NETCOREAPP [] #endif let ``Script load closure project`` () = From 6ca6dd556899814fc85423b83f2d045f53cf5713 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 24 Oct 2019 12:47:45 -0700 Subject: [PATCH 054/214] publish fcs build logs --- azure-pipelines.yml | 24 ++++++++++++++++++++++++ fcs/build.fsx | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7895b291d1..071c615a25 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -289,6 +289,14 @@ stages: clean: true - script: fcs\build.cmd TestAndNuget displayName: Build / Test + - task: PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\log' + ArtifactName: 'Windows FCS logs' + publishLocation: Container + continueOnError: true + condition: not(succeeded()) - task: PublishTestResults@2 displayName: Publish Test Results inputs: @@ -309,6 +317,14 @@ stages: # clean: true # - script: ./fcs/build.sh Build # displayName: Build + # - task: PublishBuildArtifacts@1 + # displayName: Publish Logs + # inputs: + # PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log' + # ArtifactName: 'Linux FCS logs' + # publishLocation: Container + # continueOnError: true + # condition: not(succeeded()) - job: MacOS_FCS pool: @@ -321,6 +337,14 @@ stages: clean: true - script: ./fcs/build.sh Build displayName: Build + - task: PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log' + ArtifactName: 'Mac FCS logs' + publishLocation: Container + continueOnError: true + condition: not(succeeded()) #---------------------------------------------------------------------------------------------------------------------# # Post Build # diff --git a/fcs/build.fsx b/fcs/build.fsx index 660d7f3f6e..2bf1fca71b 100644 --- a/fcs/build.fsx +++ b/fcs/build.fsx @@ -94,7 +94,8 @@ Target "Build" (fun _ -> runDotnet __SOURCE_DIRECTORY__ "build ../src/buildtools/buildtools.proj -v n -c Proto" let fslexPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fslex/Proto/netcoreapp3.0/fslex.dll" let fsyaccPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fsyacc/Proto/netcoreapp3.0/fsyacc.dll" - runDotnet __SOURCE_DIRECTORY__ (sprintf "build FSharp.Compiler.Service.sln -v n -c Release /p:FsLexPath=%s /p:FsYaccPath=%s" fslexPath fsyaccPath) + let binLogPath = __SOURCE_DIRECTORY__ + "/../artifacts/log/Release/fcs-build.binlog" + runDotnet __SOURCE_DIRECTORY__ (sprintf "build FSharp.Compiler.Service.sln -v n -c Release /p:FsLexPath=%s /p:FsYaccPath=%s /bl:%s" fslexPath fsyaccPath binLogPath) ) Target "Test" (fun _ -> From 99386c23c8dd40ef544bc60058946367a6e2d1b6 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 24 Oct 2019 14:22:29 -0700 Subject: [PATCH 055/214] update name of generated file to not collide with existing directory --- fcs/Directory.Build.targets | 11 ++++------- .../ComboProvider.Tests/ComboProvider.Tests.fsproj | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/fcs/Directory.Build.targets b/fcs/Directory.Build.targets index 3c45a52487..00f6e63aa8 100644 --- a/fcs/Directory.Build.targets +++ b/fcs/Directory.Build.targets @@ -29,7 +29,7 @@ @@ -44,15 +44,12 @@ <_BuildPropertyLines Include="let fsLanguageVersion = "$(FSLANGUAGEVERSION)"" /> - - + - - + + diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj index 7deab450f4..b39eb58e56 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - 3.0 + netcoreapp3.0 $(TestTargetFramework) false NO_GENERATIVE From b535506ec0720ee135b5932cf2b223f45c3c92e1 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 30 Oct 2019 12:21:30 -0700 Subject: [PATCH 056/214] [release/fsharp5] allow #r NuGet package version to be the second implicit argument (#7780) * refactor NuGet dependency manager By splitting it out this way, the parse method is now directly unit-testable. * allow package version to be the second implicit argument * handle potentially duplicate package reference lines --- .../FSharp.DependencyManager.Utilities.fs | 4 +- .../FSharp.DependencyManager.fs | 149 +++++++++--------- ...s => DependencyManagerInteractiveTests.fs} | 0 .../DependencyManagerLineParserTests.fs | 78 +++++++++ .../FSharp.DependencyManager.UnitTests.fsproj | 3 +- 5 files changed, 161 insertions(+), 73 deletions(-) rename tests/FSharp.DependencyManager.UnitTests/{FSharp.DependencyManager.UnitTests.fs => DependencyManagerInteractiveTests.fs} (100%) create mode 100644 tests/FSharp.DependencyManager.UnitTests/DependencyManagerLineParserTests.fs diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index bb5a60178c..b5b8d481e2 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -65,7 +65,9 @@ module Utilities = insideSQ <- not insideSQ // keep reading | _ -> () - result |> Seq.map(fun option -> split option) + result + |> List.ofSeq + |> List.map (fun option -> split option) // Path to the directory containing the fsharp compilers let fsharpCompilerPath = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs index 3318487f9a..62a4d6d5fe 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.fs @@ -6,8 +6,6 @@ open System open System.Collections.Concurrent open System.Diagnostics open System.IO -open System.Reflection - open FSharp.DependencyManager open FSharp.DependencyManager.Utilities @@ -15,9 +13,77 @@ module Attributes = [] do () - type PackageReference = { Include:string; Version:string; RestoreSources:string; Script:string } +module FSharpDependencyManager = + + let private concat (s:string) (v:string) : string = + match String.IsNullOrEmpty(s), String.IsNullOrEmpty(v) with + | false, false -> s + ";" + v + | false, true -> s + | true, false -> v + | _ -> "" + + let formatPackageReference p = + let { Include=inc; Version=ver; RestoreSources=src; Script=script } = p + seq { + match not (String.IsNullOrEmpty(inc)), not (String.IsNullOrEmpty(ver)), not (String.IsNullOrEmpty(script)) with + | true, true, false -> yield sprintf @" true" inc ver + | true, true, true -> yield sprintf @" true" inc ver script + | true, false, false -> yield sprintf @" true" inc + | true, false, true -> yield sprintf @" true" inc script + | _ -> () + match not (String.IsNullOrEmpty(src)) with + | true -> yield sprintf @" %s" (concat "$(RestoreAdditionalProjectSources)" src) + | _ -> () + } + + let parsePackageReference (lines: string list) = + let mutable binLogging = false + let parsePackageReferenceOption (line: string) = + let validatePackageName package packageName = + if String.Compare(packageName, package, StringComparison.OrdinalIgnoreCase) = 0 then + raise (ArgumentException(sprintf "PackageManager can not reference the System Package '%s'" packageName)) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + let rec parsePackageReferenceOption' (options: (string option * string option) list) (implicitArgumentCount: int) (packageReference: PackageReference option) = + let current = + match packageReference with + | Some p -> p + | None -> { Include = ""; Version = "*"; RestoreSources = ""; Script = "" } + match options with + | [] -> packageReference + | opt :: rest -> + let addInclude v = + validatePackageName v "mscorlib" + validatePackageName v "FSharp.Core" + validatePackageName v "System.ValueTuple" + validatePackageName v "NETStandard.Library" + Some { current with Include = v } + let setVersion v = Some { current with Version = v } + match opt with + | Some "include", Some v -> addInclude v |> parsePackageReferenceOption' rest implicitArgumentCount + | Some "include", None -> raise (ArgumentException(sprintf "%s requires a value" "Include")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + | Some "version", Some v -> setVersion v |> parsePackageReferenceOption' rest implicitArgumentCount + | Some "version", None -> raise (ArgumentException(sprintf "%s requires a value" "Version")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + | Some "restoresources", Some v -> Some { current with RestoreSources = concat current.RestoreSources v } |> parsePackageReferenceOption' rest implicitArgumentCount + | Some "restoresources", None -> raise (ArgumentException(sprintf "%s requires a value" "RestoreSources")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + | Some "script", Some v -> Some { current with Script = v } |> parsePackageReferenceOption' rest implicitArgumentCount + | Some "bl", Some v -> + binLogging <- v.ToLowerInvariant() = "true" + parsePackageReferenceOption' rest implicitArgumentCount packageReference + | None, Some v -> + match implicitArgumentCount with + | 0 -> addInclude v + | 1 -> setVersion v + | _ -> raise (ArgumentException(sprintf "Unable to apply implicit argument number %d" (implicitArgumentCount + 1))) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please + |> parsePackageReferenceOption' rest (implicitArgumentCount + 1) + | _ -> parsePackageReferenceOption' rest implicitArgumentCount packageReference + let options = getOptions line + parsePackageReferenceOption' options 0 None + lines + |> List.choose parsePackageReferenceOption + |> List.distinct + |> (fun l -> l, binLogging) + type [] FSharpDependencyManager (outputDir:string option) = let key = "nuget" @@ -48,29 +114,8 @@ type [] FSharpDependencyManager (outputDir:string op sw.WriteLine(body) with | _ -> () - let concat (s:string) (v:string) : string = - match String.IsNullOrEmpty(s), String.IsNullOrEmpty(v) with - | false, false -> s + ";" + v - | false, true -> s - | true, false -> v - | _ -> "" - do if deleteAtExit then AppDomain.CurrentDomain.ProcessExit |> Event.add(fun _ -> deleteScripts () ) - let formatPackageReference p = - let { Include=inc; Version=ver; RestoreSources=src; Script=script } = p - seq { - match not (String.IsNullOrEmpty(inc)), not (String.IsNullOrEmpty(ver)), not (String.IsNullOrEmpty(script)) with - | true, true, false -> yield sprintf @" true" inc ver - | true, true, true -> yield sprintf @" true" inc ver script - | true, false, false -> yield sprintf @" true" inc - | true, false, true -> yield sprintf @" true" inc script - | _ -> () - match not (String.IsNullOrEmpty(src)) with - | true -> yield sprintf @" %s" (concat "$(RestoreAdditionalProjectSources)" src) - | _ -> () - } - member __.Name = name member __.Key = key @@ -78,52 +123,14 @@ type [] FSharpDependencyManager (outputDir:string op member __.ResolveDependencies(_scriptDir:string, _mainScriptName:string, _scriptName:string, packageManagerTextLines:string seq, tfm: string) : bool * string list * string list = let packageReferences, binLogging = - let validatePackageName package packageName = - if String.Compare(packageName, package, StringComparison.OrdinalIgnoreCase) = 0 then - raise (ArgumentException(sprintf "PackageManager can not reference the System Package '%s'" packageName)) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please - - let mutable binLogging = false - let references = [ - for line in packageManagerTextLines do - let options = getOptions line - let mutable found = false - let mutable packageReference = { Include = ""; Version = "*"; RestoreSources = ""; Script = "" } - for opt in options do - let addInclude v = - // TODO: Consider a comprehensive list of dotnet framework packages that are disallowed - validatePackageName v "mscorlib" - validatePackageName v "FSharp.Core" - validatePackageName v "System.ValueTuple" - validatePackageName v "NETStandard.Library" - found <- true - packageReference <- { packageReference with Include = v } - - let addScript v = packageReference <- { packageReference with Script = v } - match opt with - | Some "version", Some v -> - found <- true - packageReference <- { packageReference with Version = v } - | Some "restoresources", Some v -> - found <- true - packageReference <- { packageReference with RestoreSources = concat packageReference.RestoreSources v } - | Some "bl", Some v -> - binLogging <- - match v.ToLowerInvariant() with - | "true" -> true - | _ -> false - | Some "include", None -> - raise (ArgumentException(sprintf "%s requires a value" "Include")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please - | Some "version", None -> - raise (ArgumentException(sprintf "%s requires a value" "Version")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please - | Some "restoresources", None -> - raise (ArgumentException(sprintf "%s requires a value" "RestoreSources")) // @@@@@@@@@@@@@@@@@@@@@@@ Globalize me please - | Some "include", Some v -> addInclude v - | Some "script", Some v -> addScript v - | None, Some v -> addInclude v - | _ -> () - if found then yield! formatPackageReference packageReference - ] - references |> List.distinct |>String.concat Environment.NewLine, binLogging + packageManagerTextLines + |> List.ofSeq + |> FSharpDependencyManager.parsePackageReference + let packageReferenceLines = + packageReferences + |> List.map FSharpDependencyManager.formatPackageReference + |> Seq.concat + let packageReferenceText = String.Join(Environment.NewLine, packageReferenceLines) // Generate a project files let generateAndBuildProjectArtifacts = @@ -135,7 +142,7 @@ type [] FSharpDependencyManager (outputDir:string op let generateProjBody = generateProjectBody.Replace("$(TARGETFRAMEWORK)", tfm) - .Replace("$(PACKAGEREFERENCES)", packageReferences) + .Replace("$(PACKAGEREFERENCES)", packageReferenceText) writeFile (Path.Combine(scriptsPath, "Library.fs")) generateLibrarySource writeFile fsProjectPath generateProjBody diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fs b/tests/FSharp.DependencyManager.UnitTests/DependencyManagerInteractiveTests.fs similarity index 100% rename from tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fs rename to tests/FSharp.DependencyManager.UnitTests/DependencyManagerInteractiveTests.fs diff --git a/tests/FSharp.DependencyManager.UnitTests/DependencyManagerLineParserTests.fs b/tests/FSharp.DependencyManager.UnitTests/DependencyManagerLineParserTests.fs new file mode 100644 index 0000000000..d9ad1f0e5b --- /dev/null +++ b/tests/FSharp.DependencyManager.UnitTests/DependencyManagerLineParserTests.fs @@ -0,0 +1,78 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.DependencyManager.UnitTests + +open System.Linq +open FSharp.DependencyManager +open NUnit.Framework + +[] +type DependencyManagerLineParserTests() = + + let parseBinLoggingFlag text = + let _, binLogging = FSharpDependencyManager.parsePackageReference [text] + binLogging + + let parseSingleReference text = + let packageReferences, _ = FSharpDependencyManager.parsePackageReference [text] + packageReferences.Single() + + [] + member __.``Binary logging defaults to false``() = + let _, binLogging = FSharpDependencyManager.parsePackageReference [] + Assert.False(binLogging) + + [] + member __.``Binary logging can be set to true``() = + let binLogging = parseBinLoggingFlag "bl=true" + Assert.True(binLogging) + + [] + member __.``Binary logging can be set to false``() = + let binLogging = parseBinLoggingFlag "bl=false" + Assert.False(binLogging) + + [] + member __.``Parse explicitly specified package name``() = + let pr = parseSingleReference "Include=MyPackage" + Assert.AreEqual("MyPackage", pr.Include) + + [] + member __.``Parse implicitly specified package name``() = + let pr = parseSingleReference "MyPackage" + Assert.AreEqual("MyPackage", pr.Include) + + [] + member __.``Parse version number``() = + let pr = parseSingleReference "MyPackage, Version=1.2.3.4" + Assert.AreEqual("1.2.3.4", pr.Version) + + [] + member __.``Parse implicitly specified package name and implicitly specified version number``() = + let pr = parseSingleReference "MyPackage, 1.2.3.4" + Assert.AreEqual("MyPackage", pr.Include) + Assert.AreEqual("1.2.3.4", pr.Version) + + [] + member __.``Parse single restore source``() = + let pr = parseSingleReference "MyPackage, RestoreSources=MyRestoreSource" + Assert.AreEqual("MyRestoreSource", pr.RestoreSources) + + [] + member __.``Parse multiple restore sources``() = + let pr = parseSingleReference "MyPackage, RestoreSources=MyRestoreSource1, RestoreSources=MyRestoreSource2" + Assert.AreEqual("MyRestoreSource1;MyRestoreSource2", pr.RestoreSources) + + [] + member __.``Parse script``() = + let pr = parseSingleReference "MyPackage, Script=SomeScript" + Assert.AreEqual("SomeScript", pr.Script) + + [] + member __.``Include strings that look different but parse the same are reduced to a single item``() = + let prs, _ = + [ "MyPackage, Version=1.2.3.4" + "Include=MyPackage, Version=1.2.3.4" ] + |> FSharpDependencyManager.parsePackageReference + let pr = prs.Single() + Assert.AreEqual("MyPackage", pr.Include) diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj index ce60ee1a23..5f402a492c 100644 --- a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj +++ b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj @@ -13,7 +13,8 @@ - + + From cdc391e4daeee4cd8dd469b08e72b14383e337b0 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 30 Oct 2019 15:26:33 -0700 Subject: [PATCH 057/214] update perl test runner (#7779) --- TESTGUIDE.md | 2 +- eng/Build.ps1 | 4 +++- eng/Versions.props | 2 +- tests/fsharp/FSharpSuite.Tests.fsproj | 3 +-- tests/fsharpqa/run.fsharpqa.test.fsx | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/TESTGUIDE.md b/TESTGUIDE.md index ef34e6f51b..f658b443c1 100644 --- a/TESTGUIDE.md +++ b/TESTGUIDE.md @@ -46,7 +46,7 @@ There are also negative tests checking code expected to fail compilation. See no ### FSharpQA Suite -The FSharpQA suite relies on [Perl](http://www.perl.org/get.html), StrawberryPerl64 package from nuget is used automatically by the test suite. +The FSharpQA suite relies on [Perl](http://www.perl.org/get.html), StrawberryPerl package from nuget is used automatically by the test suite. These tests use the `RunAll.pl` framework to execute, however the easiest way to run them is via the `build.cmd` script, see [usage examples](https://github.com/Microsoft/visualfsharp/blob/master/build.cmd#L31). diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 4d503dbeda..f9d7e1b5ac 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -359,7 +359,8 @@ try { $resultsLog = "test-net40-fsharpqa-results.log" $errorLog = "test-net40-fsharpqa-errors.log" $failLog = "test-net40-fsharpqa-errors" - $perlExe = "$env:USERPROFILE\.nuget\packages\StrawberryPerl64\5.22.2.1\Tools\perl\bin\perl.exe" + $perlPackageRoot = "$env:USERPROFILE\.nuget\packages\StrawberryPerl\5.28.0.1"; + $perlExe = "$perlPackageRoot\bin\perl.exe" Create-Directory $resultsRoot UpdatePath $env:HOSTED_COMPILER = 1 @@ -367,6 +368,7 @@ try { $env:FSCOREDLLPATH = "$ArtifactsDir\bin\fsc\$configuration\net472\FSharp.Core.dll" $env:LINK_EXE = "$RepoRoot\tests\fsharpqa\testenv\bin\link\link.exe" $env:OSARCH = $env:PROCESSOR_ARCHITECTURE + $env:PERL5LIB = "$perlPackageRoot\vendor\lib" Exec-Console $perlExe """$RepoRoot\tests\fsharpqa\testenv\bin\runall.pl"" -resultsroot ""$resultsRoot"" -results $resultsLog -log $errorLog -fail $failLog -cleanup:no -procs:$env:NUMBER_OF_PROCESSORS" Pop-Location } diff --git a/eng/Versions.props b/eng/Versions.props index 8efcedaa53..caa59fe65e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -182,7 +182,7 @@ 3.11.0 2.1.36 1.0.0-beta2-dev3 - 5.22.2.1 + 5.28.0.1 2.0.187 diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 66d44a523a..7d9b70ebe6 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -65,7 +65,6 @@ - @@ -82,7 +81,7 @@ - + diff --git a/tests/fsharpqa/run.fsharpqa.test.fsx b/tests/fsharpqa/run.fsharpqa.test.fsx index a29a242625..18a2e118b8 100644 --- a/tests/fsharpqa/run.fsharpqa.test.fsx +++ b/tests/fsharpqa/run.fsharpqa.test.fsx @@ -36,7 +36,7 @@ let runPerl arguments = use perlProcess = ProcessStartInfo( - FileName = Path.Combine(nugetCache, "StrawberryPerl64", "5.22.2.1", "Tools", "perl", "bin", "perl.exe"), + FileName = Path.Combine(nugetCache, "StrawberryPerl", "5.28.0.1", "bin", "perl.exe"), Arguments = (arguments |> Array.map(fun a -> @"""" + a + @"""") |> String.concat " "), WorkingDirectory = Path.Combine(rootFolder, "tests", "fsharpqa", "source"), RedirectStandardOutput = true, From 998493780a86460df157967351776aeafe39c677 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Wed, 30 Oct 2019 15:29:02 -0700 Subject: [PATCH 058/214] Voption tostring and other stuff (#7712) * Fix some issues in ValueNone implementation * More debug display * Some for options in debug display * Apply suggestions from code review Co-Authored-By: Eugene Auduchinok * Probably better stringing * Add them baselines * Add sprintfn tests * Update OptionModule.fs --- src/fsharp/FSharp.Core/prim-types.fs | 25 +++++++++++++------ src/fsharp/FSharp.Core/prim-types.fsi | 5 ++++ .../Microsoft.FSharp.Core/OptionModule.fs | 12 ++++++++- .../SurfaceArea.coreclr.fs | 1 + .../SurfaceArea.net40.fs | 1 + 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 542852e5da..664e1d4c02 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -2883,7 +2883,7 @@ namespace Microsoft.FSharp.Core //------------------------------------------------------------------------- [] - [] + [] [] [] [] @@ -2907,6 +2907,11 @@ namespace Microsoft.FSharp.Core static member Some (value) : 'T option = Some(value) static member op_Implicit (value) : 'T option = Some(value) + + member private x.DebugDisplay = + match x with + | None -> "None" + | Some _ -> String.Format("Some({0})", anyToStringShowingNull x.Value) override x.ToString() = // x is non-null, hence Some @@ -2924,7 +2929,7 @@ namespace Microsoft.FSharp.Core [] [] [] - [] + [] type ValueOption<'T> = | ValueNone : 'T voption | ValueSome : 'T -> 'T voption @@ -2942,11 +2947,17 @@ namespace Microsoft.FSharp.Core [] member x.IsSome = match x with ValueSome _ -> true | _ -> false - static member op_Implicit (value) : 'T option = Some(value) - - override x.ToString() = - // x is non-null, hence ValueSome - "ValueSome("^anyToStringShowingNull x.Value^")" + static member op_Implicit (value) : 'T voption = ValueSome(value) + + member private x.DebugDisplay = + match x with + | ValueNone -> "ValueNone" + | ValueSome _ -> String.Format("ValueSome({0})", anyToStringShowingNull x.Value) + + override x.ToString() = + match x with + | ValueNone -> "ValueNone" + | ValueSome _ -> anyToStringShowingNull x.Value and 'T voption = ValueOption<'T> diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 7ba3b3ae4d..cd28701e67 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -1860,6 +1860,11 @@ namespace Microsoft.FSharp.Core /// Return 'true' if the value option is a 'ValueNone' value. member IsNone : bool + + /// Implicitly converts a value into an optional that is a 'ValueSome' value. + /// The input value + /// A voption representing the value. + static member op_Implicit: value: 'T -> 'T voption /// The type of optional values, represented as structs. /// diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs index 3fb4395cd6..eaebc3df74 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs @@ -222,6 +222,16 @@ type ValueOptionTests() = let assertWasNotCalledThunk () = raise (exn "Thunk should not have been called.") + [] + member _.``ValueNone gives "ValueNone" when calling ToString`` () = + Assert.AreEqual("ValueNone", ValueNone.ToString()) + Assert.AreEqual("ValueNone", string ValueNone) + + [] + member _.``ValueNone with sprintf`` () = + Assert.AreEqual("ValueNone", sprintf "%O" (ValueNone.ToString())) + Assert.AreEqual("ValueNone", sprintf "%A" ValueNone) + [] member this.ValueOptionBasics () = Assert.AreEqual((ValueNone: int voption), (ValueNone: int voption)) @@ -444,4 +454,4 @@ type ValueOptionTests() = member this.MapBindEquivalenceProperties () = let fn x = x + 3 Assert.AreEqual(ValueOption.map fn ValueNone, ValueOption.bind (fn >> ValueSome) ValueNone) - Assert.AreEqual(ValueOption.map fn (ValueSome 5), ValueOption.bind (fn >> ValueSome) (ValueSome 5)) \ No newline at end of file + Assert.AreEqual(ValueOption.map fn (ValueSome 5), ValueOption.bind (fn >> ValueSome) (ValueSome 5)) diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index 561871089f..7e3d81efd2 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -1746,6 +1746,7 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] ValueNone Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index 7a6f7f9d33..8499ecc0eb 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -1746,6 +1746,7 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueO Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] ValueNone Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value From 515e15e0cb9e9ca7cc20447cfcabc226a70f1f04 Mon Sep 17 00:00:00 2001 From: Goswin Date: Wed, 30 Oct 2019 23:30:21 +0100 Subject: [PATCH 059/214] Optimize Seq.Last to behave like Seq.Length (incl. tests) (#7765) * Optimize Seq.Last like Seq.Length Add type check to Seq.Last and Seq.TryLast to avoid full iteration if not necessary. Like Seq.Length does it at https://github.com/dotnet/fsharp/blob/c18e1780b3f3f345364cb1ad8e510ea9f4590d3a/src/fsharp/FSharp.Core/seq.fs#L709 * Add test for Optimized Seq.Last and Seq.TryLast * style update * style update 2 * update comments and fix build error Github Build error was: Check failure on line 132 in tests\FSharp.Core.UnitTests\FSharp.Core\Microsoft.FSharp.Collections\SeqModule2.fs @azure-pipelines azure-pipelines / fsharp-ci (Build Windows vs_release) tests\FSharp.Core.UnitTests\FSharp.Core\Microsoft.FSharp.Collections\SeqModule2.fs#L132 tests\FSharp.Core.UnitTests\FSharp.Core\Microsoft.FSharp.Collections\SeqModule2.fs(132,58): error FS0064: This construct causes code to be less generic than indicated by the type annotations. The type variable 'a has been constrained to be type 'unit'. * include List.last case * include list in tests * ensure same exception is raised on empty list * typo * Added implementation of List.last since it is not available at this point due to compilation error The recursive function could also be defined inside but i guess then it would be reallocated on every call to Seq.Last (in case of list match). An alternative would be to add .Last member on list type (like .Length member) * inline List.last reverting my previous attempt https://github.com/dotnet/fsharp/pull/7765/commits/b329e23c543b41b36143fafc77187acc58585471 tail rec functions should be inlined * typo in tests(build failed) * typo2 in test (Build failed) * move implemnetation to internal module as suggested by dsyme * renamed internal tryLast to tryLastV --- src/fsharp/FSharp.Core/list.fs | 17 ++- src/fsharp/FSharp.Core/local.fs | 29 +++++ src/fsharp/FSharp.Core/local.fsi | 4 + src/fsharp/FSharp.Core/seq.fs | 26 ++--- .../SeqModule2.fs | 107 +++++++++++++++++- 5 files changed, 156 insertions(+), 27 deletions(-) diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index e7fd17ee52..87035fb3c6 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -9,6 +9,7 @@ namespace Microsoft.FSharp.Collections open Microsoft.FSharp.Collections open Microsoft.FSharp.Core.CompilerServices open System.Collections.Generic + [] [] @@ -24,18 +25,16 @@ namespace Microsoft.FSharp.Collections let length (list: 'T list) = list.Length [] - let rec last (list: 'T list) = - match list with - | [x] -> x - | _ :: tail -> last tail - | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) + let last (list: 'T list) = + match Microsoft.FSharp.Primitives.Basics.List.tryLastV list with + | ValueSome x -> x + | ValueNone -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) [] let rec tryLast (list: 'T list) = - match list with - | [x] -> Some x - | _ :: tail -> tryLast tail - | [] -> None + match Microsoft.FSharp.Primitives.Basics.List.tryLastV list with + | ValueSome x -> Some x + | ValueNone -> None [] let rev list = Microsoft.FSharp.Primitives.Basics.List.rev list diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 75dc2bb090..0e97166352 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -988,6 +988,12 @@ module internal List = takeWhileFreshConsTail cons p xs cons + let rec tryLastV (list: 'T list) = + match list with + | [] -> ValueNone + | [x] -> ValueSome x + | _ :: tail -> tryLastV tail + module internal Array = open System @@ -1187,3 +1193,26 @@ module internal Array = res.[i] <- subUnchecked !startIndex minChunkSize array startIndex := !startIndex + minChunkSize res + +module internal Seq = + let tryLastV (source : seq<_>) = + //checkNonNull "source" source //done in main Seq.tryLast + match source with + | :? ('T[]) as a -> + if a.Length = 0 then ValueNone + else ValueSome(a.[a.Length - 1]) + + | :? ('T IList) as a -> //ResizeArray and other collections + if a.Count = 0 then ValueNone + else ValueSome(a.[a.Count - 1]) + + | :? ('T list) as a -> List.tryLastV a + + | _ -> + use e = source.GetEnumerator() + if e.MoveNext() then + let mutable res = e.Current + while (e.MoveNext()) do res <- e.Current + ValueSome(res) + else + ValueNone \ No newline at end of file diff --git a/src/fsharp/FSharp.Core/local.fsi b/src/fsharp/FSharp.Core/local.fsi index 3181dcbc6e..b5bcec9e95 100644 --- a/src/fsharp/FSharp.Core/local.fsi +++ b/src/fsharp/FSharp.Core/local.fsi @@ -65,6 +65,7 @@ module internal List = val splitAt : int -> 'T list -> ('T list * 'T list) val transpose : 'T list list -> 'T list list val truncate : int -> 'T list -> 'T list + val tryLastV : 'T list -> 'T ValueOption module internal Array = // The input parameter should be checked by callers if necessary @@ -101,3 +102,6 @@ module internal Array = val stableSortInPlaceWith: comparer:('T -> 'T -> int) -> array:'T[] -> unit val stableSortInPlace: array:'T[] -> unit when 'T : comparison + +module internal Seq = + val tryLastV : 'T seq -> 'T ValueOption diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index 97326e7315..0b6e7ed2e5 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -1377,29 +1377,21 @@ namespace Microsoft.FSharp.Collections invalidArg "source" (SR.GetString(SR.notEnoughElements)) while e.MoveNext() do yield e.Current } - + [] let last (source : seq<_>) = checkNonNull "source" source - use e = source.GetEnumerator() - if e.MoveNext() then - let mutable res = e.Current - while (e.MoveNext()) do res <- e.Current - res - else - invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString - + match Microsoft.FSharp.Primitives.Basics.Seq.tryLastV source with + | ValueSome x -> x + | ValueNone -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + [] let tryLast (source : seq<_>) = checkNonNull "source" source - use e = source.GetEnumerator() - if e.MoveNext() then - let mutable res = e.Current - while (e.MoveNext()) do res <- e.Current - Some res - else - None - + match Microsoft.FSharp.Primitives.Basics.Seq.tryLastV source with + | ValueSome x -> Some x + | ValueNone -> None + [] let exactlyOne (source : seq<_>) = checkNonNull "source" source diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs index 700e458293..289062f8a1 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs @@ -99,7 +99,57 @@ type SeqModule2() = // null Seq let nullSeq:seq<'a> = null CheckThrowsArgumentNullException (fun () ->Seq.last nullSeq) + + + // ------ Test for Array ----- + let IntArr = Array.ofSeq IntSeq + if Seq.last IntArr <> 9 then Assert.Fail() + + // string Array + let strArr = Array.ofSeq strSeq + if Seq.last strArr <> "third" then Assert.Fail() + + // Empty Array + let emptyArr = [| |] + CheckThrowsArgumentException ( fun() -> Seq.last emptyArr) + + // null Array + let nullArr: array<'a> = null + CheckThrowsArgumentNullException (fun () ->Seq.last nullArr) + + // ---- Test for IList ----- + let IntRarr = ResizeArray(IntSeq) + if Seq.last IntRarr <> 9 then Assert.Fail() + + // string IList + let strRarr = ResizeArray(strSeq) + if Seq.last strRarr <> "third" then Assert.Fail() + + // Empty IList + let emptyRarr = ResizeArray() + CheckThrowsArgumentException ( fun() -> Seq.last emptyRarr) + + // null IList + let nullRarr: ResizeArray = null + CheckThrowsArgumentNullException (fun () ->Seq.last nullRarr) + + // ---- Test for list ----- + let Intlist = List.ofSeq(IntSeq) + if Seq.last Intlist <> 9 then Assert.Fail() + + // string list + let strlist = List.ofSeq(strSeq) + if Seq.last strlist <> "third" then Assert.Fail() + + // Empty list + let emptylist: list = [] + CheckThrowsArgumentException ( fun() -> Seq.last emptylist) + + // null list + let nullList: list = Unchecked.defaultof> + CheckThrowsArgumentNullException (fun () ->Seq.last nullList) () + [] member this.TryLast() = @@ -120,8 +170,63 @@ type SeqModule2() = // null Seq let nullSeq:seq<'a> = null - CheckThrowsArgumentNullException (fun () ->Seq.tryLast nullSeq |> ignore) + CheckThrowsArgumentNullException (fun () ->Seq.tryLast nullSeq |> ignore) + + // ------ Test for Array ----- + let IntArr = Array.ofSeq IntSeq + let intResult = Seq.tryLast IntArr + Assert.AreEqual(9, intResult.Value) + + // string Array + let strResult = Seq.tryLast (Array.ofSeq (["first"; "second"; "third"])) + Assert.AreEqual("third", strResult.Value) + + // Empty Array + let emptyResult = Seq.tryLast Array.empty + Assert.IsTrue(emptyResult.IsNone) + + // null Array + let nullArr:array = null + CheckThrowsArgumentNullException (fun () -> Seq.tryLast nullArr |> ignore) + + + // ------ Test for IList ----- + let IntRarr = ResizeArray( IntSeq ) + let intResult = Seq.tryLast IntRarr + Assert.AreEqual(9, intResult.Value) + + // string IList + let strResult = Seq.tryLast (ResizeArray (["first"; "second"; "third"])) + Assert.AreEqual("third", strResult.Value) + + // Empty IList + let emptyResult = Seq.tryLast (ResizeArray()) + Assert.IsTrue(emptyResult.IsNone) + + // null IList + let nullRarr:ResizeArray = null + CheckThrowsArgumentNullException (fun () ->Seq.tryLast nullRarr |> ignore) + + // ------ Test for list ----- + let Intlist= List.ofSeq( IntSeq ) + let intResult = Seq.tryLast Intlist + Assert.AreEqual(9, intResult.Value) + + // string list + let strResult = Seq.tryLast ["first"; "second"; "third"] + Assert.AreEqual("third", strResult.Value) + + // Empty list + let emptylist: list = [] + let emptyResult = Seq.tryLast emptylist + Assert.IsTrue(emptyResult.IsNone) + + // null list + let nullList: list = Unchecked.defaultof> + CheckThrowsArgumentNullException (fun () ->Seq.tryLast nullList |> ignore) () + + [] member this.ExactlyOne() = From 9be86c23a9540c41929ff3dbcd904d069ba34a34 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 31 Oct 2019 02:29:02 +0300 Subject: [PATCH 060/214] Fix some typos (#7665) --- fcs/FSharp.Compiler.Service.sln.DotSettings | 780 ++++++++++++++++++ src/absil/bytes.fs | 6 +- src/absil/il.fs | 4 +- src/absil/ilascii.fs | 2 +- src/absil/illib.fs | 10 +- src/absil/ilmorph.fs | 2 +- src/absil/ilreflect.fs | 8 +- src/absil/ilsupp.fs | 22 +- src/absil/ilwrite.fs | 42 +- src/fsharp/CompileOps.fs | 68 +- src/fsharp/CompileOps.fsi | 2 +- src/fsharp/CompileOptions.fs | 4 +- src/fsharp/CompileOptions.fsi | 2 +- src/fsharp/ConstraintSolver.fs | 14 +- src/fsharp/DetupleArgs.fs | 2 +- src/fsharp/DotNetFrameworkDependencies.fs | 2 +- src/fsharp/ErrorLogger.fs | 16 +- src/fsharp/ExtensionTyping.fs | 2 +- src/fsharp/IlxGen.fs | 46 +- src/fsharp/InfoReader.fs | 12 +- src/fsharp/InnerLambdasToTopLevelFuncs.fs | 4 +- src/fsharp/InternalCollections.fs | 30 +- src/fsharp/LanguageFeatures.fs | 2 +- src/fsharp/LanguageFeatures.fsi | 2 +- src/fsharp/LexFilter.fs | 28 +- src/fsharp/LowerCallsAndSeqs.fs | 14 +- src/fsharp/MethodCalls.fs | 12 +- src/fsharp/NameResolution.fs | 22 +- src/fsharp/NameResolution.fsi | 2 +- src/fsharp/NicePrint.fs | 24 +- src/fsharp/Optimizer.fs | 26 +- src/fsharp/PatternMatchCompilation.fs | 4 +- src/fsharp/PostInferenceChecks.fs | 10 +- src/fsharp/PrettyNaming.fs | 2 +- .../SimulatedMSBuildReferenceResolver.fs | 24 +- src/fsharp/TastOps.fs | 22 +- src/fsharp/TastOps.fsi | 18 +- src/fsharp/TastPickle.fs | 4 +- src/fsharp/TypeChecker.fs | 68 +- src/fsharp/ast.fs | 50 +- src/fsharp/fsi/fsi.fs | 14 +- src/fsharp/fsi/fsi.fsi | 12 +- src/fsharp/infos.fs | 4 +- src/fsharp/layout.fs | 2 +- src/fsharp/lib.fs | 32 +- src/fsharp/range.fs | 6 +- src/fsharp/service/FSharpCheckerResults.fs | 6 +- src/fsharp/service/FSharpCheckerResults.fsi | 2 +- src/fsharp/service/IncrementalBuild.fs | 130 +-- src/fsharp/service/IncrementalBuild.fsi | 6 +- src/fsharp/service/QuickParse.fs | 8 +- src/fsharp/service/QuickParse.fsi | 6 +- src/fsharp/service/Reactor.fs | 2 +- src/fsharp/service/ServiceAnalysis.fs | 2 +- src/fsharp/service/ServiceAssemblyContent.fs | 14 +- src/fsharp/service/ServiceAssemblyContent.fsi | 8 +- src/fsharp/service/ServiceLexing.fs | 18 +- src/fsharp/service/ServiceLexing.fsi | 4 +- src/fsharp/service/ServiceNavigation.fs | 8 +- src/fsharp/service/ServiceStructure.fs | 12 +- src/fsharp/service/ServiceStructure.fsi | 2 +- src/fsharp/service/ServiceUntypedParse.fs | 4 +- src/fsharp/service/service.fs | 14 +- src/fsharp/symbols/Exprs.fs | 56 +- src/fsharp/symbols/Exprs.fsi | 2 +- src/fsharp/symbols/SymbolHelpers.fs | 8 +- src/fsharp/symbols/SymbolHelpers.fsi | 2 +- src/fsharp/symbols/Symbols.fs | 10 +- src/fsharp/symbols/Symbols.fsi | 2 +- src/fsharp/tast.fs | 28 +- src/utils/CompilerLocationUtils.fs | 18 +- src/utils/HashMultiMap.fs | 12 +- src/utils/prim-lexing.fsi | 2 +- src/utils/prim-parsing.fs | 2 +- 74 files changed, 1326 insertions(+), 546 deletions(-) create mode 100644 fcs/FSharp.Compiler.Service.sln.DotSettings diff --git a/fcs/FSharp.Compiler.Service.sln.DotSettings b/fcs/FSharp.Compiler.Service.sln.DotSettings new file mode 100644 index 0000000000..59e0b85499 --- /dev/null +++ b/fcs/FSharp.Compiler.Service.sln.DotSettings @@ -0,0 +1,780 @@ + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True~ \ No newline at end of file diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index a272b99a45..e3996fe3bf 100644 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -87,10 +87,10 @@ type internal ByteBuffer = let n = arr.Length let newSize = buf.bbCurrent + n buf.Ensure newSize - let bbarr = buf.bbArray - let bbbase = buf.bbCurrent + let bbArr = buf.bbArray + let bbBase = buf.bbCurrent for i = 0 to n - 1 do - bbarr.[bbbase + i] <- byte arr.[i] + bbArr.[bbBase + i] <- byte arr.[i] buf.bbCurrent <- newSize member bb.FixupInt32 pos n = diff --git a/src/absil/il.fs b/src/absil/il.fs index 51b75e55fb..a199c6879e 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -2962,7 +2962,7 @@ let mkILNonGenericEmptyCtor tag superTy = mkILCtor (ILMemberAccess.Public, [], mkMethodBody (false, [], 8, nonBranchingInstrsToCode ctor, tag)) // -------------------------------------------------------------------- -// Make a static, top level monomophic method - very useful for +// Make a static, top level monomorphic method - very useful for // creating helper ILMethodDefs for internal use. // -------------------------------------------------------------------- @@ -3324,7 +3324,7 @@ let mkILSimpleModule assemblyName modname dll subsystemVersion useHighEntropyVA // [instructions_to_code] makes the basic block structure of code from // a primitive array of instructions. We // do this be iterating over the instructions, pushing new basic blocks -// everytime we encounter an address that has been recorded +// every time we encounter an address that has been recorded // [bbstartToCodeLabelMap]. //----------------------------------------------------------------------- diff --git a/src/absil/ilascii.fs b/src/absil/ilascii.fs index cf8cef0a63..6c89ca69b5 100644 --- a/src/absil/ilascii.fs +++ b/src/absil/ilascii.fs @@ -8,7 +8,7 @@ open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL // set to the proper value at CompileOps.fs (BuildFrameworkTcImports) -// Only reelvant when compiling FSharp.Core.dll +// Only relevant when compiling FSharp.Core.dll let parseILGlobals = ref EcmaMscorlibILGlobals /// Table of parsing and pretty printing data for instructions. diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 68b7c8d40a..70e67a0815 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -164,12 +164,12 @@ module Array = /// pass an array byref to reverse it in place let revInPlace (array: 'T []) = if Array.isEmpty array then () else - let arrlen, revlen = array.Length-1, array.Length/2 - 1 - for idx in 0 .. revlen do + let arrLen, revLen = array.Length-1, array.Length/2 - 1 + for idx in 0 .. revLen do let t1 = array.[idx] - let t2 = array.[arrlen-idx] + let t2 = array.[arrLen-idx] array.[idx] <- t2 - array.[arrlen-idx] <- t1 + array.[arrLen-idx] <- t1 /// Async implementation of Array.map. let mapAsync (mapping : 'T -> Async<'U>) (array : 'T[]) : Async<'U[]> = @@ -624,7 +624,7 @@ type CompilationThreadToken() = interface ExecutionToken let RequireCompilationThread (_ctok: CompilationThreadToken) = () /// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. -/// This reprents code that may potentially not need to be executed on the compilation thread. +/// This represents code that may potentially not need to be executed on the compilation thread. let DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent (_ctok: CompilationThreadToken) = () /// Represents a place in the compiler codebase where we assume we are executing on a compilation thread diff --git a/src/absil/ilmorph.fs b/src/absil/ilmorph.fs index ffd86aa504..997f6f4a0a 100644 --- a/src/absil/ilmorph.fs +++ b/src/absil/ilmorph.fs @@ -50,7 +50,7 @@ let code_instr2instr_ty2ty (finstr,fty) (c:ILCode) = Exceptions = c.Exceptions |> List.map (fun e -> { e with Clause = e.Clause |> (function ILExceptionClause.TypeCatch (ilty, b) -> ILExceptionClause.TypeCatch (fty ilty, b) | cl -> cl) }) } // -------------------------------------------------------------------- -// Standard morphisms - mapping tyes etc. +// Standard morphisms - mapping types etc. // -------------------------------------------------------------------- let rec ty_tref2tref f x = diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index cf43af269e..682b44c5ba 100644 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -1724,7 +1724,7 @@ let buildMethodImplsPass3 cenv _tref (typB: TypeBuilder) emEnv (mimpl: IL.ILMeth // typeAttributesOf* //---------------------------------------------------------------------------- -let typeAttrbutesOfTypeDefKind x = +let typeAttributesOfTypeDefKind x = match x with // required for a TypeBuilder | ILTypeDefKind.Class -> TypeAttributes.Class @@ -1733,14 +1733,14 @@ let typeAttrbutesOfTypeDefKind x = | ILTypeDefKind.Enum -> TypeAttributes.Class | ILTypeDefKind.Delegate -> TypeAttributes.Class -let typeAttrbutesOfTypeAccess x = +let typeAttributesOfTypeAccess x = match x with | ILTypeDefAccess.Public -> TypeAttributes.Public | ILTypeDefAccess.Private -> TypeAttributes.NotPublic | ILTypeDefAccess.Nested macc -> match macc with | ILMemberAccess.Assembly -> TypeAttributes.NestedAssembly - | ILMemberAccess.CompilerControlled -> failwith "Nested compiler controled." + | ILMemberAccess.CompilerControlled -> failwith "Nested compiler controlled." | ILMemberAccess.FamilyAndAssembly -> TypeAttributes.NestedFamANDAssem | ILMemberAccess.FamilyOrAssembly -> TypeAttributes.NestedFamORAssem | ILMemberAccess.Family -> TypeAttributes.NestedFamily @@ -1929,7 +1929,7 @@ let rec getTypeRefsInType (allTypes: CollectTypes) ty acc = | CollectTypes.ValueTypesOnly -> acc | CollectTypes.All -> getTypeRefsInType allTypes eltType acc | ILType.Value tspec -> - // We usee CollectTypes.All because the .NET type loader appears to always eagerly require all types + // We use CollectTypes.All because the .NET type loader appears to always eagerly require all types // referred to in an instantiation of a generic value type tspec.TypeRef :: List.foldBack (getTypeRefsInType CollectTypes.All) tspec.GenericArgs acc | ILType.Boxed tspec -> diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index fb8a98b349..5c3d108fbb 100644 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -757,7 +757,7 @@ type ISymUnmanagedWriter2 = abstract OpenScope: startOffset: int * pRetVal: int byref -> unit abstract CloseScope: endOffset: int -> unit abstract SetScopeRange: scopeID: int * startOffset: int * endOffset: int -> unit - abstract DefineLocalVariable: [] varname: string * + abstract DefineLocalVariable: [] varName: string * attributes: int * cSig: int * []signature: byte[] * @@ -767,7 +767,7 @@ type ISymUnmanagedWriter2 = addr3: int * startOffset: int * endOffset: int -> unit - abstract DefineParameter: [] paramname: string * + abstract DefineParameter: [] paramName: string * attributes: int * sequence: int * addressKind: int * @@ -775,7 +775,7 @@ type ISymUnmanagedWriter2 = addr2: int * addr3: int -> unit abstract DefineField: parent: int * - [] fieldname: string * + [] fieldName: string * attributes: int * cSig: int * []signature: byte[] * @@ -783,7 +783,7 @@ type ISymUnmanagedWriter2 = addr1: int * addr2: int * addr3: int -> unit - abstract DefineGlobalVariable: [] globalvarname: string * + abstract DefineGlobalVariable: [] globalVarName: string * attributes: int * cSig: int * []signature: byte[] * @@ -793,7 +793,7 @@ type ISymUnmanagedWriter2 = addr3: int -> unit abstract Close: unit -> unit abstract SetSymAttribute: parent: int * - [] attname: string * + [] attName: string * cData: int * []data: byte[] -> unit abstract OpenNamespace: [] nsname: string -> unit @@ -822,16 +822,16 @@ type ISymUnmanagedWriter2 = []endColumns: int [] -> unit abstract RemapToken: oldToken: int * newToken: int -> unit abstract Initialize2: emitter: nativeint * - [] tempfilename: string * + [] tempFileName: string * stream: IStream * fullBuild: bool * - [] finalfilename: string -> unit - abstract DefineConstant: [] constname: string * + [] finalFileName: string -> unit + abstract DefineConstant: [] constName: string * value: Object * cSig: int * []signature: byte[] -> unit abstract Abort: unit -> unit - abstract DefineLocalVariable2: [] localvarname2: string * + abstract DefineLocalVariable2: [] localVarName2: string * attributes: int * sigToken: int * addressKind: int * @@ -840,14 +840,14 @@ type ISymUnmanagedWriter2 = addr3: int * startOffset: int * endOffset: int -> unit - abstract DefineGlobalVariable2: [] globalvarname2: string * + abstract DefineGlobalVariable2: [] globalVarName2: string * attributes: int * sigToken: int * addressKind: int * addr1: int * addr2: int * addr3: int -> unit - abstract DefineConstant2: [] constantname2: string * + abstract DefineConstant2: [] constantName2: string * value: Object * sigToken: int -> unit abstract OpenMethod2: method2: int * diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index dbd8a28875..1a650e25bc 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -476,8 +476,8 @@ type MetadataTable<'T> = h.Clear() t |> Array.iteri (fun i x -> h.[x] <- (i+1)) - member tbl.AddUniqueEntry nm geterr x = - if tbl.dict.ContainsKey x then failwith ("duplicate entry '"+geterr x+"' in "+nm+" table") + member tbl.AddUniqueEntry nm getter x = + if tbl.dict.ContainsKey x then failwith ("duplicate entry '"+getter x+"' in "+nm+" table") else tbl.AddSharedEntry x member tbl.GetTableEntry x = tbl.dict.[x] @@ -806,7 +806,7 @@ let getTypeDefOrRefAsUncodedToken (tag, idx) = else failwith "getTypeDefOrRefAsUncodedToken" getUncodedToken tab idx -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = let sized = List.filter (function (_, Some _) -> true | _ -> false) shape let lobounded = List.filter (function (Some _, _) -> true | _ -> false) shape @@ -834,7 +834,7 @@ let callconvToByte ntypars (Callconv (hasthis, bcc)) = | ILArgConvention.VarArg -> e_IMAGE_CEE_CS_CALLCONV_VARARG) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et, tspec: ILTypeSpec) = if isNil tspec.GenericArgs then bb.EmitByte et @@ -944,7 +944,7 @@ and EmitCallsig cenv env bb (callconv, args: ILTypes, ret, varargs: ILVarArgs, g and GetCallsigAsBytes cenv env x = emitBytesViaBuffer (fun bb -> EmitCallsig cenv env bb x) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and EmitTypes cenv env bb (inst: ILTypes) = inst |> List.iter (EmitType cenv env bb) @@ -976,7 +976,7 @@ let rec GetNativeTypeAsBlobIdx cenv (ty: ILNativeType) = and GetNativeTypeAsBytes ty = emitBytesViaBuffer (fun bb -> EmitNativeType bb ty) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and EmitNativeType bb ty = if List.memAssoc ty (Lazy.force ILNativeTypeRevMap) then bb.EmitByte (List.assoc ty (Lazy.force ILNativeTypeRevMap)) @@ -1035,7 +1035,7 @@ and EmitNativeType bb ty = let rec GetFieldInitAsBlobIdx cenv (x: ILFieldInit) = GetBytesAsBlobIdx cenv (emitBytesViaBuffer (fun bb -> GetFieldInit bb x)) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and GetFieldInit (bb: ByteBuffer) x = match x with | ILFieldInit.String b -> bb.EmitBytes (System.Text.Encoding.Unicode.GetBytes b) @@ -1093,7 +1093,7 @@ let GetTypeAccessFlags access = | ILTypeDefAccess.Nested ILMemberAccess.Public -> 0x00000002 | ILTypeDefAccess.Nested ILMemberAccess.Private -> 0x00000003 | ILTypeDefAccess.Nested ILMemberAccess.Family -> 0x00000004 - | ILTypeDefAccess.Nested ILMemberAccess.CompilerControlled -> failwith "bad type acccess" + | ILTypeDefAccess.Nested ILMemberAccess.CompilerControlled -> failwith "bad type access" | ILTypeDefAccess.Nested ILMemberAccess.FamilyAndAssembly -> 0x00000006 | ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly -> 0x00000007 | ILTypeDefAccess.Nested ILMemberAccess.Assembly -> 0x00000005 @@ -1258,7 +1258,7 @@ and GetFieldDefAsFieldDefIdx cenv tidx fd = // -------------------------------------------------------------------- // ILMethodRef --> ILMethodDef. // -// Only successfuly converts ILMethodRef's referring to +// Only successfully converts ILMethodRef's referring to // methods in the module being emitted. // -------------------------------------------------------------------- @@ -1439,7 +1439,7 @@ and GetFieldSpecAsMemberRefIdx cenv env fspec = let fenv = envForFieldSpec fspec FindOrAddSharedRow cenv TableNames.MemberRef (GetFieldSpecAsMemberRefRow cenv env fenv fspec) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec: ILFieldSpec) = bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb fspec.FormalType @@ -1555,8 +1555,8 @@ type CodeBuffer = member codebuf.EmitUncodedToken u = codebuf.EmitInt32 u - member codebuf.RecordReqdStringFixup stringidx = - codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringidx) :: codebuf.reqdStringFixupsInMethod + member codebuf.RecordReqdStringFixup stringIdx = + codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringIdx) :: codebuf.reqdStringFixupsInMethod // Write a special value in that we check later when applying the fixup codebuf.EmitInt32 0xdeadbeef @@ -1592,7 +1592,7 @@ module Codebuf = go 0 (Array.length arr) let applyBrFixups (origCode : byte[]) origExnClauses origReqdStringFixups (origAvailBrFixups: Dictionary) origReqdBrFixups origSeqPoints origScopes = - let orderedOrigReqdBrFixups = origReqdBrFixups |> List.sortBy (fun (_, fixuploc, _) -> fixuploc) + let orderedOrigReqdBrFixups = origReqdBrFixups |> List.sortBy (fun (_, fixupLoc, _) -> fixupLoc) let newCode = ByteBuffer.Create origCode.Length @@ -1732,7 +1732,7 @@ module Codebuf = | true, n -> let relOffset = n - endOfInstr if small then - if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixupsanity check failed" + if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixup sanity check failed" newCode.[newFixupLoc] <- b0 relOffset else checkFixup32 newCode newFixupLoc 0xf00dd00fl @@ -2820,7 +2820,7 @@ and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = // manifest --> generate Assembly row // -------------------------------------------------------------------- -and GetManifsetAsAssemblyRow cenv m = +and GetManifestAsAssemblyRow cenv m = UnsharedRow [|ULong m.AuxModuleHashAlgorithm UShort (match m.Version with None -> 0us | Some version -> version.Major) @@ -2836,7 +2836,7 @@ and GetManifsetAsAssemblyRow cenv m = | ILAssemblyLongevity.PlatformSystem -> 0x0008) ||| (if m.Retargetable then 0x100 else 0x0) ||| // Setting these causes peverify errors. Hence both ilread and ilwrite ignore them and refuse to set them. - // Any debugging customattributes will automatically propagate + // Any debugging customAttributes will automatically propagate // REVIEW: No longer appears to be the case (if m.JitTracking then 0x8000 else 0x0) ||| (match m.PublicKey with None -> 0x0000 | Some _ -> 0x0001) ||| 0x0000) @@ -2845,7 +2845,7 @@ and GetManifsetAsAssemblyRow cenv m = (match m.Locale with None -> StringE 0 | Some x -> StringE (GetStringHeapIdx cenv x)) |] and GenManifestPass3 cenv m = - let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifsetAsAssemblyRow cenv m) + let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifestAsAssemblyRow cenv m) GenSecurityDeclsPass3 cenv (hds_Assembly, aidx) m.SecurityDecls.AsList GenCustomAttrsPass3Or4 cenv (hca_Assembly, aidx) m.CustomAttrs GenExportedTypesPass3 cenv m.ExportedTypes @@ -3033,7 +3033,7 @@ let nochunk next = ({addr= 0x0;size= 0x0; }, next) let count f arr = Array.fold (fun x y -> x + f y) 0x0 arr -module FileSystemUtilites = +module FileSystemUtilities = open System open System.Reflection open System.Globalization @@ -3630,7 +3630,7 @@ let writeBinaryAndReportMappings (outfile, match aref.Version with | Some version when version.Major = 2us -> parseILVersion "2.0.50727.0" | Some v -> v - | None -> failwith "Expected msorlib to have a version number" + | None -> failwith "Expected mscorlib to have a version number" let entryPointToken, code, codePadding, metadata, data, resources, requiredDataFixups, pdbData, mappings, guidStart = writeILMetadataAndCode ((pdbfile <> None), desiredMetadataVersion, ilg, emitTailcalls, deterministic, showTimes) modul next normalizeAssemblyRefs @@ -3859,7 +3859,7 @@ let writeBinaryAndReportMappings (outfile, writeInt32 os timestamp // Update pdbData with new guid and timestamp. Portable and embedded PDBs don't need the ModuleID - // Full and PdbOnly aren't supported under deterministic builds currently, they rely on non-determinsitic Windows native code + // Full and PdbOnly aren't supported under deterministic builds currently, they rely on non-deterministic Windows native code { pdbData with ModuleID = final.[0..15] ; Timestamp = timestamp } else writeInt32 os timestamp // date since 1970 @@ -4191,7 +4191,7 @@ let writeBinaryAndReportMappings (outfile, os.Dispose() try - FileSystemUtilites.setExecutablePermission outfile + FileSystemUtilities.setExecutablePermission outfile with _ -> () pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 5979861c1f..1cc0837d91 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -435,7 +435,7 @@ let SplitRelatedDiagnostics(err: PhasedDiagnostic) = SplitRelatedException err.Exception -let DeclareMesssage = FSharp.Compiler.DiagnosticMessage.DeclareResourceString +let DeclareMessage = FSharp.Compiler.DiagnosticMessage.DeclareResourceString do FSComp.SR.RunStartupValidation() let SeeAlsoE() = DeclareResourceString("SeeAlso", "%s") @@ -1493,15 +1493,15 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | IntfImplInExtrinsicAugmentation(_) -> os.Append(IntfImplInExtrinsicAugmentationE().Format) |> ignore - | UnresolvedReferenceError(assemblyname, _) + | UnresolvedReferenceError(assemblyName, _) - | UnresolvedReferenceNoRange assemblyname -> - os.Append(UnresolvedReferenceNoRangeE().Format assemblyname) |> ignore + | UnresolvedReferenceNoRange assemblyName -> + os.Append(UnresolvedReferenceNoRangeE().Format assemblyName) |> ignore - | UnresolvedPathReference(assemblyname, pathname, _) + | UnresolvedPathReference(assemblyName, pathname, _) - | UnresolvedPathReferenceNoRange(assemblyname, pathname) -> - os.Append(UnresolvedPathReferenceNoRangeE().Format pathname assemblyname) |> ignore + | UnresolvedPathReferenceNoRange(assemblyName, pathname) -> + os.Append(UnresolvedPathReferenceNoRangeE().Format pathname assemblyName) |> ignore | DeprecatedCommandLineOptionFull(fullText, _) -> os.Append fullText |> ignore @@ -2169,7 +2169,7 @@ type TcConfigBuilder = static member Initial = { - primaryAssembly = PrimaryAssembly.Mscorlib // defaut value, can be overridden using the command line switch + primaryAssembly = PrimaryAssembly.Mscorlib // default value, can be overridden using the command line switch light = None noFeedback = false stackReserveSize = None @@ -2581,7 +2581,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = // Look for an explicit reference to mscorlib/netstandard.dll or System.Runtime.dll and use that to compute clrRoot and targetFrameworkVersion let primaryAssemblyReference, primaryAssemblyExplicitFilenameOpt = computeKnownDllReference(data.primaryAssembly.Name) let fslibReference = - // Look for explict FSharp.Core reference otherwise use version that was referenced by compiler + // Look for explicit FSharp.Core reference otherwise use version that was referenced by compiler let dllReference, fileNameOpt = computeKnownDllReference getFSharpCoreLibraryName match fileNameOpt with | Some _ -> dllReference @@ -2926,7 +2926,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = | None -> None else None - member tcConfig.ResolveLibWithDirectories (ccuLoadFaulureAction, r: AssemblyReference) = + member tcConfig.ResolveLibWithDirectories (ccuLoadFailureAction, r: AssemblyReference) = let m, nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter // test for both libraries and executables @@ -2944,7 +2944,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = match rs |> List.tryPick (fun r -> tcConfig.TryResolveLibWithDirectories r) with | Some res -> Some res | None -> - match ccuLoadFaulureAction with + match ccuLoadFailureAction with | CcuLoadFailureAction.RaiseError -> let searchMessage = String.concat "\n " (tcConfig.GetSearchPathsForLibraryFiles()) raise (FileNameNotResolved(nm, searchMessage, m)) @@ -3189,14 +3189,14 @@ let QualFileNameOfImpls filename specs = | [SynModuleOrNamespace(_, _, kind, _, _, _, _, m)] when not kind.IsModule -> QualFileNameOfFilename m filename | _ -> QualFileNameOfFilename (mkRange filename pos0 pos0) filename -let PrepandPathToQualFileName x (QualifiedNameOfFile q) = ComputeQualifiedNameOfFileFromUniquePath (q.idRange, pathOfLid x@[q.idText]) -let PrepandPathToImpl x (SynModuleOrNamespace(p, b, c, d, e, f, g, h)) = SynModuleOrNamespace(x@p, b, c, d, e, f, g, h) -let PrepandPathToSpec x (SynModuleOrNamespaceSig(p, b, c, d, e, f, g, h)) = SynModuleOrNamespaceSig(x@p, b, c, d, e, f, g, h) +let PrependPathToQualFileName x (QualifiedNameOfFile q) = ComputeQualifiedNameOfFileFromUniquePath (q.idRange, pathOfLid x@[q.idText]) +let PrependPathToImpl x (SynModuleOrNamespace(p, b, c, d, e, f, g, h)) = SynModuleOrNamespace(x@p, b, c, d, e, f, g, h) +let PrependPathToSpec x (SynModuleOrNamespaceSig(p, b, c, d, e, f, g, h)) = SynModuleOrNamespaceSig(x@p, b, c, d, e, f, g, h) let PrependPathToInput x inp = match inp with - | ParsedInput.ImplFile (ParsedImplFileInput (b, c, q, d, hd, impls, e)) -> ParsedInput.ImplFile (ParsedImplFileInput (b, c, PrepandPathToQualFileName x q, d, hd, List.map (PrepandPathToImpl x) impls, e)) - | ParsedInput.SigFile (ParsedSigFileInput (b, q, d, hd, specs)) -> ParsedInput.SigFile (ParsedSigFileInput (b, PrepandPathToQualFileName x q, d, hd, List.map (PrepandPathToSpec x) specs)) + | ParsedInput.ImplFile (ParsedImplFileInput (b, c, q, d, hd, impls, e)) -> ParsedInput.ImplFile (ParsedImplFileInput (b, c, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToImpl x) impls, e)) + | ParsedInput.SigFile (ParsedSigFileInput (b, q, d, hd, specs)) -> ParsedInput.SigFile (ParsedSigFileInput (b, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToSpec x) specs)) let ComputeAnonModuleName check defaultNamespace filename (m: range) = let modname = CanonicalizeFilename filename @@ -3583,17 +3583,17 @@ let GetOptimizationDataResourceName (r: ILResource) = let IsReflectedDefinitionsResource (r: ILResource) = r.Name.StartsWithOrdinal(QuotationPickler.SerializedReflectedDefinitionsResourceNameBase) -let MakeILResource rname bytes = - { Name = rname +let MakeILResource rName bytes = + { Name = rName Location = ILResourceLocation.LocalOut bytes Access = ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } -let PickleToResource inMem file (g: TcGlobals) scope rname p x = +let PickleToResource inMem file (g: TcGlobals) scope rName p x = let file = PathMap.apply g.pathMap file - { Name = rname + { Name = rName Location = (let bytes = pickleObjWithDanglingCcus inMem file g scope p x in ILResourceLocation.LocalOut bytes) Access = ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs @@ -3607,7 +3607,7 @@ let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: Ccu let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. - let rname = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpSignatureDataResourceName2 else FSharpSignatureDataResourceName + let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpSignatureDataResourceName2 else FSharpSignatureDataResourceName let includeDir = if String.IsNullOrEmpty tcConfig.implicitIncludeDir then "" @@ -3616,7 +3616,7 @@ let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: Ccu |> System.IO.Path.GetFullPath |> PathMap.applyDir tcGlobals.pathMap - PickleToResource inMem file tcGlobals ccu (rname+ccu.AssemblyName) pickleCcuInfo + PickleToResource inMem file tcGlobals ccu (rName+ccu.AssemblyName) pickleCcuInfo { mspec=mspec compileTimeWorkingDir=includeDir usesQuotations = ccu.UsesFSharp20PlusQuotations } @@ -3627,8 +3627,8 @@ let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = let WriteOptimizationData (tcGlobals, file, inMem, ccu: CcuThunk, modulInfo) = // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. - let rname = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName - PickleToResource inMem file tcGlobals ccu (rname+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo + let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName + PickleToResource inMem file tcGlobals ccu (rName+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo //---------------------------------------------------------------------------- // Abstraction for project reference @@ -4118,7 +4118,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse (typeProviderEnvironment, tcConfig: TcConfig, m, entity: Entity, - injectedNamspace, remainingNamespace, + injectedNamespace, remainingNamespace, provider, st: Tainted option) = match remainingNamespace with @@ -4126,13 +4126,13 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // Inject the namespace entity match entity.ModuleOrNamespaceType.ModulesAndNamespacesByDemangledName.TryFind next with | Some childEntity -> - tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, childEntity, next :: injectedNamspace, rest, provider, st) + tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, childEntity, next :: injectedNamespace, rest, provider, st) | None -> // Build up the artificial namespace if there is not a real one. - let cpath = CompPath(ILScopeRef.Local, injectedNamspace |> List.rev |> List.map (fun n -> (n, ModuleOrNamespaceKind.Namespace)) ) + let cpath = CompPath(ILScopeRef.Local, injectedNamespace |> List.rev |> List.map (fun n -> (n, ModuleOrNamespaceKind.Namespace)) ) let newNamespace = NewModuleOrNamespace (Some cpath) taccessPublic (ident(next, rangeStartup)) XmlDoc.Empty [] (MaybeLazy.Strict (NewEmptyModuleOrNamespaceType Namespace)) entity.ModuleOrNamespaceType.AddModuleOrNamespaceByMutation newNamespace - tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, newNamespace, next :: injectedNamspace, rest, provider, st) + tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, newNamespace, next :: injectedNamespace, rest, provider, st) | [] -> match st with | Some st -> @@ -4584,7 +4584,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | None -> ErrorD(AssemblyNotResolved(assemblyReference.Text, assemblyReference.Range)) else - // This is a previously unencounterd assembly. Resolve it and add it to the list. + // This is a previously unencountered assembly. Resolve it and add it to the list. // But don't cache resolution failures because the assembly may appear on the disk later. let resolved, unresolved = TcConfig.TryResolveLibsUsingMSBuildRules(tcConfig, [ assemblyReference ], assemblyReference.Range, mode) match resolved, unresolved with @@ -5187,7 +5187,7 @@ module private ScriptPreprocessClosure = filename, sourceText, codeContext, useSimpleResolution, useFsiAuxLib, useSdkRefs, lexResourceManager: Lexhelp.LexResourceManager, - applyCommmandLineArgs, assumeDotNetFramework, + applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) = // Resolve the basic references such as FSharp.Core.dll first, before processing any #I directives in the script @@ -5198,7 +5198,7 @@ module private ScriptPreprocessClosure = let tcConfig = CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, codeContext, useSimpleResolution, - useFsiAuxLib, None, applyCommmandLineArgs, assumeDotNetFramework, + useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) let resolutions0, _unresolvedReferences = GetAssemblyResolutionInformation(ctok, tcConfig) @@ -5208,7 +5208,7 @@ module private ScriptPreprocessClosure = let tcConfig = CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, codeContext, useSimpleResolution, useFsiAuxLib, Some references0, - applyCommmandLineArgs, assumeDotNetFramework, useSdkRefs, + applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) let closureSources = [ClosureSource(filename, range0, sourceText, true)] @@ -5238,13 +5238,13 @@ type LoadClosure with (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename: string, sourceText: ISourceText, codeContext, useSimpleResolution: bool, useFsiAuxLib, useSdkRefs, lexResourceManager: Lexhelp.LexResourceManager, - applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) = + applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse ScriptPreprocessClosure.GetFullClosureOfScriptText (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, codeContext, useSimpleResolution, useFsiAuxLib, useSdkRefs, lexResourceManager, - applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) + applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) /// Analyze a set of script files and find the closure of their references. static member ComputeClosureOfScriptFiles diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 364336f32d..51b10bc028 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -63,7 +63,7 @@ val ComputeQualifiedNameOfFileFromUniquePath: range * string list -> Ast.Qualifi val PrependPathToInput: Ast.Ident list -> Ast.ParsedInput -> Ast.ParsedInput -/// State used to de-deuplicate module names along a list of file names +/// State used to de-deduplicate module names along a list of file names type ModuleNamesDict = Map> /// Checks if a ParsedInput is using a module name that was already given and deduplicates the name if needed. diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index c4595d2dc2..29e854a83f 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -1670,7 +1670,7 @@ let ReportTime (tcConfig:TcConfig) descr = // OPTIMIZATION - support - addDllToOptEnv //---------------------------------------------------------------------------- -let AddExternalCcuToOpimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = +let AddExternalCcuToOptimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = match ccuinfo.FSharpOptimizationData.Force() with | None -> optEnv | Some data -> Optimizer.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals @@ -1682,7 +1682,7 @@ let AddExternalCcuToOpimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let ccuinfos = tcImports.GetImportedAssemblies() let optEnv = Optimizer.IncrementalOptimizationEnv.Empty - let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) optEnv ccuinfos + let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) optEnv ccuinfos optEnv let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles) = diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi index e6e010bff2..f1ea7d44cd 100644 --- a/src/fsharp/CompileOptions.fsi +++ b/src/fsharp/CompileOptions.fsi @@ -76,7 +76,7 @@ val SetTargetProfile : TcConfigBuilder -> string -> unit val GetGeneratedILModuleName : CompilerTarget -> string -> string val GetInitialOptimizationEnv : TcImports * TcGlobals -> IncrementalOptimizationEnv -val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv +val AddExternalCcuToOptimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedImplFile list -> TypedAssemblyAfterOptimization * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxGen.IlxAssemblyGenerator diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index 1e59e05b52..f5aade8400 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -14,7 +14,7 @@ // The constraints are immediately processed into a normal form, in particular // - type equations on inference parameters: 'tp = ty // - type inequations on inference parameters: 'tp :> ty -// - other constraints on inference paramaters +// - other constraints on inference parameters // // The state of the inference engine is kept in imperative mutations to inference // type variables. @@ -257,7 +257,7 @@ let MakeConstraintSolverEnv contextInfo css m denv = { SolverState = css m = m eContextInfo = contextInfo - // Indicates that when unifiying ty1 = ty2, only type variables in ty1 may be solved + // Indicates that when unifying ty1 = ty2, only type variables in ty1 may be solved MatchingOnly = false EquivEnv = TypeEquivEnv.Empty DisplayEnv = denv } @@ -2110,7 +2110,7 @@ and CanMemberSigsMatchUpToCheck | Some calledArg -> if isArray1DTy g calledArg.CalledArgumentType then let paramArrayElemTy = destArrayTy g calledArg.CalledArgumentType - let reflArgInfo = calledArg.ReflArgInfo // propgate the reflected-arg info to each param array argument + let reflArgInfo = calledArg.ReflArgInfo // propagate the reflected-arg info to each param array argument match calledMeth.ParamArrayCallerArgs with | Some args -> for callerArg in args do @@ -2493,9 +2493,9 @@ and ResolveOverloading if c <> 0 then c else 0 - let better (candidate: CalledMeth<_>, candidateWarnings, _) (other: CalledMeth<_>, otherwarnings, _) = + let better (candidate: CalledMeth<_>, candidateWarnings, _) (other: CalledMeth<_>, otherWarnings, _) = let candidateWarnCount = List.length candidateWarnings - let otherWarnCount = List.length otherwarnings + let otherWarnCount = List.length otherWarnings // Prefer methods that don't give "this code is less generic" warnings // Note: Relies on 'compare' respecting true > false let c = compare (candidateWarnCount = 0) (otherWarnCount = 0) @@ -2862,10 +2862,10 @@ let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo: Tra | Choice1Of5(minfo, methArgTys) -> let argExprs = // FIX for #421894 - typechecker assumes that coercion can be applied for the trait calls arguments but codegen doesn't emit coercion operations - // result - generation of non-verifyable code + // result - generation of non-verifiable code // fix - apply coercion for the arguments (excluding 'receiver' argument in instance calls) - // flatten list of argument types (looks like trait calls with curried arguments are not supported so we can just convert argument list in straighforward way) + // flatten list of argument types (looks like trait calls with curried arguments are not supported so we can just convert argument list in straightforward way) let argTypes = minfo.GetParamTypes(amap, m, methArgTys) |> List.concat diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index b15bae8f24..309e358ff9 100644 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -199,7 +199,7 @@ module GlobalUsageAnalysis = TopLevelBindings = Zset.empty valOrder IterationIsAtTopLevel = true } - /// Log the use of a value with a particular tuple chape at a callsite + /// Log the use of a value with a particular tuple shape at a callsite /// Note: this routine is called very frequently let logUse (f: Val) tup z = {z with Uses = diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index faae31ba35..2032063334 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -166,7 +166,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies | Some v -> yield v // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed - // when an F# sript references an F# profile 7, 78, 259 or .NET Standard 1.6 component which in turn refers + // when an F# script references an F# profile 7, 78, 259 or .NET Standard 1.6 component which in turn refers // to FSharp.Core for profile 7, 78, 259 or .NET Standard. yield "netstandard" yield "System.Runtime" // lots of types diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs index 5760aef8a2..c37a339512 100755 --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -88,10 +88,10 @@ exception Deprecated of string * range exception Experimental of string * range exception PossibleUnverifiableCode of range -exception UnresolvedReferenceNoRange of (*assemblyname*) string -exception UnresolvedReferenceError of (*assemblyname*) string * range -exception UnresolvedPathReferenceNoRange of (*assemblyname*) string * (*path*) string -exception UnresolvedPathReference of (*assemblyname*) string * (*path*) string * range +exception UnresolvedReferenceNoRange of (*assemblyName*) string +exception UnresolvedReferenceError of (*assemblyName*) string * range +exception UnresolvedPathReferenceNoRange of (*assemblyName*) string * (*path*) string +exception UnresolvedPathReference of (*assemblyName*) string * (*path*) string * range @@ -197,7 +197,7 @@ type PhasedDiagnostic = /// Construct a phased error static member Create(exn:exn, phase:BuildPhase) : PhasedDiagnostic = - // FUTURE: renable this assert, which has historically triggered in some compiler service scenarios + // FUTURE: reenable this assert, which has historically triggered in some compiler service scenarios // System.Diagnostics.Debug.Assert(phase<>BuildPhase.DefaultPhase, sprintf "Compile error seen with no phase to attribute it to.%A %s %s" phase exn.Message exn.StackTrace ) {Exception = exn; Phase=phase} @@ -281,7 +281,7 @@ let DiscardErrorsLogger = let AssertFalseErrorLogger = { new ErrorLogger("AssertFalseErrorLogger") with - // TODO: renable these asserts in the compiler service + // TODO: reenable these asserts in the compiler service member x.DiagnosticSink(phasedError, isError) = (* assert false; *) () member x.ErrorCount = (* assert false; *) 0 } @@ -313,7 +313,7 @@ type internal CompileThreadStatic = static member BuildPhase with get() = match box CompileThreadStatic.buildPhase with - // FUTURE: renable these asserts, which have historically fired in some compiler service scernaios + // FUTURE: reenable these asserts, which have historically fired in some compiler service scenarios | null -> (* assert false; *) BuildPhase.DefaultPhase | _ -> CompileThreadStatic.buildPhase and set v = CompileThreadStatic.buildPhase <- v @@ -606,7 +606,7 @@ let TryD f g = } | res -> res -let rec RepeatWhileD ndeep body = body ndeep ++ (fun x -> if x then RepeatWhileD (ndeep+1) body else CompleteD) +let rec RepeatWhileD nDeep body = body nDeep ++ (fun x -> if x then RepeatWhileD (nDeep+1) body else CompleteD) let AtLeastOneD f l = MapD f l ++ (fun res -> ResultD (List.exists id res)) diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs index c075e0dbe9..077efaa939 100755 --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -904,7 +904,7 @@ module internal ExtensionTyping = let namespaceName = TryTypeMember(st, name, "Namespace", m, FSComp.SR.invalidNamespaceForProvidedType(), fun st -> st.Namespace) |> unmarshal let fullName = TryTypeMemberNonNull(st, name, "FullName", m, FSComp.SR.invalidFullNameForProvidedType(), fun st -> st.FullName) |> unmarshal ValidateExpectedName m expectedPath expectedName st - // Must be able to call (GetMethods|GetEvents|GetPropeties|GetNestedTypes|GetConstructors)(bindingFlags). + // Must be able to call (GetMethods|GetEvents|GetProperties|GetNestedTypes|GetConstructors)(bindingFlags). let usedMembers : Tainted[] = // These are the members the compiler will actually use [| for x in TryTypeMemberArray(st, fullName, "GetMethods", m, fun st -> st.GetMethods()) -> x.Coerce m diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 62300df676..bdf333314e 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -143,9 +143,9 @@ let NewCounter nm = let CountClosure = NewCounter "closures" -let CountMethodDef = NewCounter "IL method defintitions corresponding to values" +let CountMethodDef = NewCounter "IL method definitions corresponding to values" -let CountStaticFieldDef = NewCounter "IL field defintitions corresponding to values" +let CountStaticFieldDef = NewCounter "IL field definitions corresponding to values" let CountCallFuncInstructions = NewCounter "callfunc instructions (indirect calls)" @@ -225,7 +225,7 @@ type cenv = amap: ImportMap /// A callback for TcVal in the typechecker. Used to generalize values when finding witnesses. - /// It is unfortunate this is needed but it is until we supply witnesses through the compiation. + /// It is unfortunate this is needed but it is until we supply witnesses through the compilation. TcVal: ConstraintSolver.TcValF /// The TAST for the assembly being emitted @@ -397,7 +397,7 @@ type TypeReprEnv(reprs: Map, count: int) = uint16 666 /// Add an additional type parameter to the environment. If the parameter is a units-of-measure parameter - /// then it is ignored, since it doesn't corespond to a .NET type parameter. + /// then it is ignored, since it doesn't correspond to a .NET type parameter. member tyenv.AddOne (tp: Typar) = if IsNonErasedTypar tp then TypeReprEnv(reprs.Add (tp.Stamp, uint16 count), count + 1) @@ -1023,7 +1023,7 @@ let ComputeStorageForFSharpMember amap g topValInfo memberInfo (vref: ValRef) m let mspec, _, _, paramInfos, retInfo, methodArgTys = GetMethodSpecForMemberVal amap g memberInfo vref Method (topValInfo, vref, mspec, m, paramInfos, methodArgTys, retInfo) -/// Compute the representation information for an F#-declared function in a module or an F#-decalared extension member. +/// Compute the representation information for an F#-declared function in a module or an F#-declared extension member. /// Note, there is considerable overlap with ComputeStorageForFSharpMember/GetMethodSpecForMemberVal and these could be /// rationalized. let ComputeStorageForFSharpFunctionOrFSharpExtensionMember amap (g:TcGlobals) cloc topValInfo (vref: ValRef) m = @@ -1050,7 +1050,7 @@ let IsFSharpValCompiledAsMethod g (v: Val) = | _ -> true /// Determine how a top level value is represented, when it is being represented -/// as a method. This depends on its type and other representation inforrmation. +/// as a method. This depends on its type and other representation information. /// If it's a function or is polymorphic, then it gets represented as a /// method (possibly and instance method). Otherwise it gets represented as a /// static field and property. @@ -1102,7 +1102,7 @@ let ComputeStorageForNonLocalTopVal amap g cloc modref (v: Val) = | None -> error(InternalError("ComputeStorageForNonLocalTopVal, expected an arity for " + v.LogicalName, v.Range)) | Some _ -> ComputeStorageForTopVal (amap, g, None, false, NoShadowLocal, mkNestedValRef modref v, cloc) -/// Determine how all the F#-decalred top level values, functions and members are represented, for an external module or namespace. +/// Determine how all the F#-declared top level values, functions and members are represented, for an external module or namespace. let rec AddStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref: ModuleOrNamespaceRef) (modul: ModuleOrNamespace) = let acc = (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> @@ -1206,7 +1206,7 @@ let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap: ImportMap, isIncrement // Generate debugging marks //-------------------------------------------------------------------------- -/// Generate IL debuging information. +/// Generate IL debugging information. let GenILSourceMarker (g: TcGlobals) (m: range) = ILSourceMarker.Create(document=g.memoize_file m.FileIndex, line=m.StartLine, @@ -1215,7 +1215,7 @@ let GenILSourceMarker (g: TcGlobals) (m: range) = endLine= m.EndLine, endColumn=m.EndColumn+1) -/// Optionally generate IL debuging information. +/// Optionally generate IL debugging information. let GenPossibleILSourceMarker cenv m = if cenv.opts.generateDebugSymbols then Some (GenILSourceMarker cenv.g m ) @@ -1520,14 +1520,14 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu scriptInitFspecs <- (fieldSpec, range) :: scriptInitFspecs /// This initializes the script in #load and fsc command-line order causing their - /// sideeffects to be executed. + /// side effects to be executed. member mgbuf.AddInitializeScriptsInOrderToEntryPoint () = // Get the entry point and initialized any scripts in order. match explicitEntryPointInfo with | Some tref -> - let IntializeCompiledScript(fspec, m) = + let InitializeCompiledScript(fspec, m) = mgbuf.AddExplicitInitToSpecificMethodDef((fun (md: ILMethodDef) -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) - scriptInitFspecs |> List.iter IntializeCompiledScript + scriptInitFspecs |> List.iter InitializeCompiledScript | None -> () member __.GenerateRawDataValueType (cloc, size) = @@ -2227,7 +2227,7 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | ValStorage.Local _ -> true | _ -> false ) -> - // application of local type functions with type parameters = measure types and body = local value - inine the body + // application of local type functions with type parameters = measure types and body = local value - inline the body GenExpr cenv cgbuf eenv sp v sequel | Expr.App (f,fty, tyargs, args, m) -> GenApp cenv cgbuf eenv (f, fty, tyargs, args, m) sequel @@ -2736,7 +2736,7 @@ and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue let ilToTy = GenType cenv.amap m eenv.tyenv tgty // Section "III.1.8.1.3 Merging stack states" of ECMA-335 implies that no unboxing - // is required, but we still push the coerce'd type on to the code gen buffer. + // is required, but we still push the coerced type on to the code gen buffer. CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [] GenSequel cenv eenv.cloc cgbuf sequel ) else ( @@ -4636,7 +4636,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = and IsNamedLocalTypeFuncVal g (v: Val) expr = not v.IsCompiledAsTopLevel && - IsGenericValWithGenericContraints g v && + IsGenericValWithGenericConstraints g v && (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) /// Generate the information relevant to the contract portion of a named local type function @@ -6582,14 +6582,14 @@ and GenTopImpl cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (TImplFile (qname, | Some mainInfo -> // Generate an explicit main method. If necessary, make a class constructor as - // well for the bindings earlier in the file containing the entrypoint. + // well for the bindings earlier in the file containing the entry point. match mgbuf.GetExplicitEntryPointInfo() with // Final file, explicit entry point: place the code in a .cctor, and add code to main that forces the .cctor (if topCode has initialization effect). | Some tref -> if doesSomething then lazyInitInfo.Add (fun fspec feefee seqpt -> - // This adds the explicit init of the .cctor to the explicit entrypoint main method + // This adds the explicit init of the .cctor to the explicit entry point main method mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, feefee, seqpt)) let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) @@ -7119,7 +7119,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = //printfn "sprintf not found" () | _, None -> - //printfn "new formatnot found" + //printfn "new format not found" () | _ -> //printfn "neither found, or non-method" @@ -7433,7 +7433,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = // do not emit serialization related members if target framework lacks SerializationInfo or StreamingContext match g.iltyp_SerializationInfo, g.iltyp_StreamingContext with | Some serializationInfoType, Some streamingContextType -> - let ilCtorDefForSerialziation = + let ilCtorDefForSerialization = mkILCtor(ILMemberAccess.Family, [mkILParamNamed("info", serializationInfoType);mkILParamNamed("context", streamingContextType)], mkMethodBody @@ -7445,7 +7445,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = mkNormalCall (mkILCtorMethSpecForTy (g.iltyp_Exception, [serializationInfoType; streamingContextType])) ], None)) - [ilCtorDefForSerialziation] + [ilCtorDefForSerialization] (* let getObjectDataMethodForSerialization = let ilMethodDef = @@ -7469,7 +7469,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = { ilMethodDef with SecurityDecls=mkILSecurityDecls [ IL.mkPermissionSet g.ilg (ILSecurityAction.Demand, [(securityPermissionAttributeType, [("SerializationFormatter", g.ilg.typ_Bool, ILAttribElem.Bool true)])])] HasSecurity=true } - [ilCtorDefForSerialziation; getObjectDataMethodForSerialization] + [ilCtorDefForSerialization; getObjectDataMethodForSerialization] *) //#endif | _ -> [] @@ -7644,8 +7644,8 @@ let defaultOf = /// Top-level val bindings are stored (for example) in static fields. /// In the FSI case, these fields are be created and initialised, so we can recover the object. /// IlxGen knows how v was stored, and then ilreflect knows how this storage was generated. -/// IlxGen converts (v: Tast.Val) to AbsIL datastructures. -/// Ilreflect converts from AbsIL datastructures to emitted Type, FieldInfo, MethodInfo etc. +/// IlxGen converts (v: Tast.Val) to AbsIL data structures. +/// Ilreflect converts from AbsIL data structures to emitted Type, FieldInfo, MethodInfo etc. let LookupGeneratedValue (amap: ImportMap) (ctxt: ExecutionContext) eenv (v: Val) = try // Convert the v.Type into a System.Type according to ilxgen and ilreflect. diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index 7e9dffdd52..c36847d9e3 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -299,10 +299,10 @@ type InfoReader(g: TcGlobals, amap: Import.ImportMap) = let GetIntrinsicRecdOrClassFieldInfosUncached ((optFilter, ad), m, ty) = FoldPrimaryHierarchyOfType (fun ty acc -> GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter, ad) m ty @ acc) g amap m AllowMultiIntfInstantiations.Yes ty [] - let GetEntireTypeHierachyUncached (allowMultiIntfInst, m, ty) = + let GetEntireTypeHierarchyUncached (allowMultiIntfInst, m, ty) = FoldEntireHierarchyOfType (fun ty acc -> ty :: acc) g amap m allowMultiIntfInst ty [] - let GetPrimaryTypeHierachyUncached (allowMultiIntfInst, m, ty) = + let GetPrimaryTypeHierarchyUncached (allowMultiIntfInst, m, ty) = FoldPrimaryHierarchyOfType (fun ty acc -> ty :: acc) g amap m allowMultiIntfInst ty [] /// The primitive reader for the named items up a hierarchy @@ -385,8 +385,8 @@ type InfoReader(g: TcGlobals, amap: Import.ImportMap) = let eventInfoCache = MakeInfoCache GetIntrinsicEventInfosUncached hashFlags1 let namedItemsCache = MakeInfoCache GetIntrinsicNamedItemsUncached hashFlags2 - let entireTypeHierarchyCache = MakeInfoCache GetEntireTypeHierachyUncached HashIdentity.Structural - let primaryTypeHierarchyCache = MakeInfoCache GetPrimaryTypeHierachyUncached HashIdentity.Structural + let entireTypeHierarchyCache = MakeInfoCache GetEntireTypeHierarchyUncached HashIdentity.Structural + let primaryTypeHierarchyCache = MakeInfoCache GetPrimaryTypeHierarchyUncached HashIdentity.Structural member x.g = g member x.amap = amap @@ -434,11 +434,11 @@ type InfoReader(g: TcGlobals, amap: Import.ImportMap) = namedItemsCache.Apply(((nm, ad), m, ty)) /// Get the super-types of a type, including interface types. - member x.GetEntireTypeHierachy (allowMultiIntfInst, m, ty) = + member x.GetEntireTypeHierarchy (allowMultiIntfInst, m, ty) = entireTypeHierarchyCache.Apply((allowMultiIntfInst, m, ty)) /// Get the super-types of a type, excluding interface types. - member x.GetPrimaryTypeHierachy (allowMultiIntfInst, m, ty) = + member x.GetPrimaryTypeHierarchy (allowMultiIntfInst, m, ty) = primaryTypeHierarchyCache.Apply((allowMultiIntfInst, m, ty)) diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index fabd5583c2..5ced353f39 100644 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -743,7 +743,7 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap List.tryFind (IsGenericValWithGenericContraints g) with + match vals |> List.tryFind (IsGenericValWithGenericConstraints g) with | None -> () | Some v -> raise (AbortTLR v.Range) @@ -813,7 +813,7 @@ let DumpEnvPackM g envPackM = /// e.g. deciding whether to tuple up the environment or not. /// e.g. deciding whether to use known values for required sub environments. /// -/// Scope for optimisating env packing here. +/// Scope for optimization env packing here. /// For now, pass all environments via arguments since aiming to eliminate allocations. /// Later, package as tuples if arg lists get too long. let ChooseReqdItemPackings g fclassM topValS declist reqdItemsMap = diff --git a/src/fsharp/InternalCollections.fs b/src/fsharp/InternalCollections.fs index eda256e715..d2a15bd841 100755 --- a/src/fsharp/InternalCollections.fs +++ b/src/fsharp/InternalCollections.fs @@ -84,18 +84,18 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct>(keepStro | true, value -> yield key, value ] #endif - let AssignWithStrength(tok,newdata,discard1) = - let actualLength = List.length newdata + let AssignWithStrength(tok,newData,discard1) = + let actualLength = List.length newData let tossThreshold = max 0 (actualLength - keepMax) // Delete everything less than this threshold - let weakThreshhold = max 0 (actualLength - keepStrongly) // Weaken everything less than this threshold + let weakThreshold = max 0 (actualLength - keepStrongly) // Weaken everything less than this threshold - let newdata = newdata|> List.mapi( fun n kv -> n,kv ) // Place the index. - let newdata,discard2 = newdata |> List.partition (fun (n:int,v) -> n >= tossThreshold || requiredToKeep (snd v)) - let newdata = - newdata + let newData = newData|> List.mapi( fun n kv -> n,kv ) // Place the index. + let newData,discard2 = newData |> List.partition (fun (n:int,v) -> n >= tossThreshold || requiredToKeep (snd v)) + let newData = + newData |> List.map( fun (n:int,(k,v)) -> let handle = - if n(keepStro Strong(v) k,handle ) ignore tok // Updating refs requires tok - refs <- newdata + refs <- newData discard1 |> List.iter (snd >> strongDiscard) discard2 |> List.iter (snd >> snd >> strongDiscard) @@ -117,14 +117,14 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct>(keepStro member al.TryGetKeyValue(tok, key) = let data = FilterAndHold(tok) - let result,newdata = TryGetKeyValueImpl(data,key) - AssignWithStrength(tok,newdata,[]) + let result,newData = TryGetKeyValueImpl(data,key) + AssignWithStrength(tok,newData,[]) result member al.TryGet(tok, key) = let data = FilterAndHold(tok) - let result,newdata = TryGetKeyValueImpl(data,key) - AssignWithStrength(tok,newdata,[]) + let result,newData = TryGetKeyValueImpl(data,key) + AssignWithStrength(tok,newData,[]) match result with | Some(_,value) -> Some(value) | None -> None @@ -137,8 +137,8 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct>(keepStro member al.Remove(tok, key) = let data = FilterAndHold(tok) - let newdata,discard = RemoveImpl (data,key) - AssignWithStrength(tok,newdata,discard) + let newData,discard = RemoveImpl (data,key) + AssignWithStrength(tok,newData,discard) member al.Clear(tok) = let discards = FilterAndHold(tok) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 2f4e44940c..8f6a873e20 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -95,4 +95,4 @@ type LanguageVersion (specifiedVersion) = |] /// Get the specified LanguageVersion - member __.SpecifiedVerson = specified + member __.SpecifiedVersion = specified diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index d1d190d3f9..2b42698dd0 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -36,4 +36,4 @@ type LanguageVersion = member ValidOptions: string array /// Get the specified LanguageVersion - member SpecifiedVerson: decimal + member SpecifiedVersion: decimal diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index e37b0c35b1..22dd4c4936 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// LexFilter - process the token stream prior to parsing. -/// Implements the offside rule and a copule of other lexical transformations. +/// Implements the offside rule and a couple of other lexical transformations. module internal FSharp.Compiler.LexFilter open Internal.Utilities.Text.Lexing @@ -630,15 +630,15 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, //-------------------------------------------------------------------------- let pushCtxt tokenTup (newCtxt: Context) = - let rec unindentationLimit strict stack = + let rec undentationLimit strict stack = match newCtxt, stack with | _, [] -> PositionWithColumn(newCtxt.StartPos, -1) // ignore Vanilla because a SeqBlock is always coming - | _, (CtxtVanilla _ :: rest) -> unindentationLimit strict rest + | _, (CtxtVanilla _ :: rest) -> undentationLimit strict rest - | _, (CtxtSeqBlock _ :: rest) when not strict -> unindentationLimit strict rest - | _, (CtxtParen _ :: rest) when not strict -> unindentationLimit strict rest + | _, (CtxtSeqBlock _ :: rest) when not strict -> undentationLimit strict rest + | _, (CtxtParen _ :: rest) when not strict -> undentationLimit strict rest // 'begin match' limited by minimum of two // '(match' limited by minimum of two @@ -658,7 +658,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // Otherwise 'function ...' places no limit until we hit a CtxtLetDecl etc... (Recursive) | (CtxtMatchClauses _), (CtxtFunction _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // 'try ... with' limited by 'try' | _, (CtxtMatchClauses _ :: (CtxtTry _ as limitCtxt) :: _rest) @@ -666,7 +666,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // 'fun ->' places no limit until we hit a CtxtLetDecl etc... (Recursive) | _, (CtxtFun _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // 'f ...{' places no limit until we hit a CtxtLetDecl etc... // 'f ...[' places no limit until we hit a CtxtLetDecl etc... @@ -674,7 +674,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | _, (CtxtParen ((LBRACE | LBRACK | LBRACK_BAR), _) :: CtxtSeqBlock _ :: rest) | _, (CtxtParen ((LBRACE | LBRACK | LBRACK_BAR), _) :: CtxtVanilla _ :: CtxtSeqBlock _ :: rest) | _, (CtxtSeqBlock _ :: CtxtParen((LBRACE | LBRACK | LBRACK_BAR), _) :: CtxtVanilla _ :: CtxtSeqBlock _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // MAJOR PERMITTED UNDENTATION This is allowing: // if x then y else @@ -696,7 +696,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | CtxtWithAsAugment _, ((CtxtInterfaceHead _ | CtxtMemberHead _ | CtxtException _ | CtxtTypeDefns _) as limitCtxt :: _rest) -> PositionWithColumn(limitCtxt.StartPos, limitCtxt.StartCol) - // Permit unindentation via parentheses (or begin/end) following a 'then', 'else' or 'do': + // Permit undentation via parentheses (or begin/end) following a 'then', 'else' or 'do': // if nr > 0 then ( // nr <- nr - 1 // acc <- d @@ -719,7 +719,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // end | _, ((CtxtWithAsAugment _ | CtxtThen _ | CtxtElse _ | CtxtDo _ ) :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // '... (function ->' places no limit until we hit a CtxtLetDecl etc.... (Recursive) @@ -737,7 +737,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // 0 // | 2 -> ... <---- not allowed | _, (CtxtFunction _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // 'module ... : sig' limited by 'module' // 'module ... : struct' limited by 'module' @@ -811,7 +811,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // always already pushed a SeqBlock at this position. | CtxtVanilla _ -> () | _ -> - let p1 = unindentationLimit true offsideStack + let p1 = undentationLimit true offsideStack let c2 = newCtxt.StartCol if c2 < p1.Column then warn tokenTup @@ -2161,8 +2161,8 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // Split this token to allow "1..2" for range specification | INT32_DOT_DOT (i, v) -> - let dotdotPos = new LexbufState(tokenTup.EndPos.ShiftColumnBy(-2), tokenTup.EndPos, false) - delayToken(new TokenTup(DOT_DOT, dotdotPos, tokenTup.LastTokenPos)) + let dotDotPos = new LexbufState(tokenTup.EndPos.ShiftColumnBy(-2), tokenTup.EndPos, false) + delayToken(new TokenTup(DOT_DOT, dotDotPos, tokenTup.LastTokenPos)) delayToken(tokenTup.UseShiftedLocation(INT32(i, v), 0, -2)) true // Split @>. and @@>. into two diff --git a/src/fsharp/LowerCallsAndSeqs.fs b/src/fsharp/LowerCallsAndSeqs.fs index 6bc583faae..f40fcf8dec 100644 --- a/src/fsharp/LowerCallsAndSeqs.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -89,7 +89,7 @@ type LoweredSeqFirstPhaseResult = /// that holds the "goto" destination for a tailcalling sequence expression /// 'pcMap' is the mapping from code labels to values for 'pc' /// - /// The phase2 function returns the core of the generate, dipsose and checkDispose implementations. + /// The phase2 function returns the core of the generate, dispose and checkDispose implementations. phase2 : ((* pc: *) ValRef * (* current: *) ValRef * (* nextVar: *) ValRef * Map -> Expr * Expr * Expr) /// The labels allocated for one portion of the sequence expression @@ -434,7 +434,7 @@ let LowerSeqExpr g amap overallExpr = | Expr.Let (bind, bodyExpr, m, _) // Restriction: compilation of sequence expressions containing non-toplevel constrained generic functions is not supported - when bind.Var.IsCompiledAsTopLevel || not (IsGenericValWithGenericContraints g bind.Var) -> + when bind.Var.IsCompiledAsTopLevel || not (IsGenericValWithGenericConstraints g bind.Var) -> let resBody = Lower false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel bodyExpr match resBody with @@ -671,7 +671,7 @@ let LowerSeqExpr g amap overallExpr = // ``disposalExpr`` // with e -> exn <- e // if exn <> null then raise exn - let handleExeceptionsInDispose disposalExpr = + let handleExceptionsInDispose disposalExpr = let exnV, exnE = mkMutableCompGenLocal m "exn" g.exn_ty let exnVref = mkLocalValRef exnV let startLabel = IL.generateCodeLabel() @@ -738,11 +738,11 @@ let LowerSeqExpr g amap overallExpr = NoSequencePointAtLetBinding m exnV (Expr.Const (Const.Zero, m, g.exn_ty)) (mkCompGenSequential m whileLoop doRaise) - // Add the jumptable to the GenerateNext method + // Add the jump table to the GenerateNext method let generateExprWithJumpTable = addJumpTable false generateExprWithCleanup - // Add the jumptable to the Dispose method + // Add the jump table to the Dispose method let disposalExprWithJumpTable = if res.significantClose then let disposalExpr = @@ -757,11 +757,11 @@ let LowerSeqExpr g amap overallExpr = (mkValSet m currVarRef (mkDefault (m, currVarRef.Type))))) disposalExpr |> addJumpTable true - |> handleExeceptionsInDispose + |> handleExceptionsInDispose else mkValSet m pcVarRef (mkInt32 g m pcDone) - // Add the jumptable to the CheckDispose method + // Add the jump table to the CheckDispose method let checkDisposeExprWithJumpTable = addJumpTable true checkDisposeExprWithCleanup diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index cf590b69ee..fdae67c6ad 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -1139,7 +1139,7 @@ let BuildMethodCall tcVal g amap isMutable m isProp minfo valUseFlags minst objA if minfo.IsClassConstructor then error (InternalError (minfo.LogicalName + ": cannot call a class constructor", m)) let useCallvirt = not valu && not direct && minfo.IsVirtual - let isProtected = minfo.IsProtectedAccessiblity + let isProtected = minfo.IsProtectedAccessibility let exprTy = if isCtor then enclTy else minfo.GetFSharpReturnTy(amap, m, minst) match TryImportProvidedMethodBaseAsLibraryIntrinsic (amap, m, providedMeth) with | Some fsValRef -> @@ -1339,7 +1339,7 @@ module ProvidedMethodCalls = | None -> match ea.PApplyOption((function ProvidedNewTupleExpr x -> Some x | _ -> None), m) with | Some info -> - let elems = info.PApplyArray(id, "GetInvokerExpresson", m) + let elems = info.PApplyArray(id, "GetInvokerExpression", m) let elemsT = elems |> Array.map exprToExpr |> Array.toList let exprT = mkRefTupledNoTypes g m elemsT None, (exprT, tyOfExpr g exprT) @@ -1348,7 +1348,7 @@ module ProvidedMethodCalls = | Some info -> let ty, elems = info.PApply2(id, m) let tyT = Import.ImportProvidedType amap m ty - let elems = elems.PApplyArray(id, "GetInvokerExpresson", m) + let elems = elems.PApplyArray(id, "GetInvokerExpression", m) let elemsT = elems |> Array.map exprToExpr |> Array.toList let exprT = Expr.Op (TOp.Array, [tyT], elemsT, m) None, (exprT, tyOfExpr g exprT) @@ -1419,7 +1419,7 @@ module ProvidedMethodCalls = | Some info -> let delegateTy, boundVars, delegateBodyExpr = info.PApply3(id, m) let delegateTyT = Import.ImportProvidedType amap m delegateTy - let vs = boundVars.PApplyArray(id, "GetInvokerExpresson", m) |> Array.toList + let vs = boundVars.PApplyArray(id, "GetInvokerExpression", m) |> Array.toList let vsT = List.map addVar vs let delegateBodyExprT = exprToExpr delegateBodyExpr List.iter removeVar vs @@ -1489,7 +1489,7 @@ module ProvidedMethodCalls = let (ctor, args) = ne.PApply2(id, m) let targetMethInfo = ProvidedMeth(amap, ctor.PApply((fun ne -> upcast ne), m), None, m) let objArgs = [] - let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpresson", m) -> exprToExpr ea ] + let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpression", m) -> exprToExpr ea ] let callExpr = BuildMethodCall tcVal g amap Mutates.PossiblyMutates m false targetMethInfo isSuperInit [] objArgs arguments callExpr @@ -1514,7 +1514,7 @@ module ProvidedMethodCalls = | None -> [] | Some objExpr -> [exprToExpr objExpr] - let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpresson", m) -> exprToExpr ea ] + let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpression", m) -> exprToExpr ea ] let genericArguments = if meth.PUntaint((fun m -> m.IsGenericMethod), m) then meth.PApplyArray((fun m -> m.GetGenericArguments()), "GetGenericArguments", m) diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 9715905d3c..389c6e16b0 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -534,7 +534,7 @@ let ExtensionPropInfosOfTypeInScope collectionSettings (infoReader:InfoReader) ( extMemsDangling else let extMemsFromHierarchy = - infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.Yes, m, ty) + infoReader.GetEntireTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> if isAppTy g ty then let tcref = tcrefOfAppTy g ty @@ -598,7 +598,7 @@ let ExtensionMethInfosOfTypeInScope (collectionSettings:ResultCollectionSettings extMemsDangling else let extMemsFromHierarchy = - infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.Yes, m, ty) + infoReader.GetEntireTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> let g = infoReader.g if isAppTy g ty then @@ -654,11 +654,11 @@ let AddValRefToExtensionMembers pri (eIndexedExtensionMembers: TyconRefMultiMap< eIndexedExtensionMembers -/// This entrypoint is used to add some extra items to the environment for Visual Studio, e.g. static members +/// This entry point is used to add some extra items to the environment for Visual Studio, e.g. static members let AddFakeNamedValRefToNameEnv nm nenv vref = {nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.Add (nm, Item.Value vref) } -/// This entrypoint is used to add some extra items to the environment for Visual Studio, e.g. record members +/// This entry point is used to add some extra items to the environment for Visual Studio, e.g. record members let AddFakeNameToNameEnv nm nenv item = {nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.Add (nm, item) } @@ -1351,7 +1351,7 @@ let MakeNestedType (ncenv: NameResolver) (tinst: TType list) m (tcrefNested: Tyc /// Get all the accessible nested types of an existing type. let GetNestedTypesOfType (ad, ncenv: NameResolver, optFilter, staticResInfo, checkForGenerated, m) ty = let g = ncenv.g - ncenv.InfoReader.GetPrimaryTypeHierachy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> + ncenv.InfoReader.GetPrimaryTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> match ty with | AppTy g (tcref, tinst) -> let tycon = tcref.Deref @@ -1610,7 +1610,7 @@ let ItemsAreEffectivelyEqual g orig other = name1 = name2 && tyconRefDefnEq g tcref1 tcref2 | EventUse evt1, EventUse evt2 -> - EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 || + EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 || // Allow for equality up to signature matching match evt1.ArbitraryValRef, evt2.ArbitraryValRef with | Some vref1, Some vref2 -> valRefDefnEq g vref1 vref2 @@ -3282,8 +3282,8 @@ let FreshenRecdFieldRef (ncenv: NameResolver) m (rfref: RecdFieldRef) = // QUERY (instantiationGenerator cleanup): it would be really nice not to flow instantiationGenerator to here. let private ResolveExprDotLongIdent (ncenv: NameResolver) m ad nenv ty (id: Ident) rest findFlag = let typeNameResInfo = TypeNameResolutionInfo.Default - let adhoctDotSearchAccessible = AtMostOneResult m (ResolveLongIdentInTypePrim ncenv nenv LookupKind.Expr ResolutionInfo.Empty 1 m ad id rest findFlag typeNameResInfo ty) - match adhoctDotSearchAccessible with + let adhocDotSearchAccessible = AtMostOneResult m (ResolveLongIdentInTypePrim ncenv nenv LookupKind.Expr ResolutionInfo.Empty 1 m ad id rest findFlag typeNameResInfo ty) + match adhocDotSearchAccessible with | Exception _ -> // If the dot is not resolved by adhoc overloading then look for a record field // that can resolve the name. @@ -3306,7 +3306,7 @@ let private ResolveExprDotLongIdent (ncenv: NameResolver) m ad nenv ty (id: Iden |> AtMostOneResult m |> ForceRaise | _ -> - ForceRaise adhoctDotSearchAccessible + ForceRaise adhocDotSearchAccessible let ComputeItemRange wholem (lid: Ident list) rest = match rest with @@ -4103,7 +4103,7 @@ let rec ResolvePartialLongIdentPrim (ncenv: NameResolver) (nenv: NameResolutionE | _ -> [], false | _ -> [], false) - let staticSometingInType = + let staticSomethingInType = [ if not isItemVal then // type.lookup: lookup a static something in a type for tcref in LookupTypeNameInEnvNoArity OpenQualified id nenv do @@ -4111,7 +4111,7 @@ let rec ResolvePartialLongIdentPrim (ncenv: NameResolver) (nenv: NameResolutionE let ty = FreshenTycon ncenv m tcref yield! ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad true rest ty ] - namespaces @ values @ staticSometingInType + namespaces @ values @ staticSomethingInType /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions. let ResolvePartialLongIdent ncenv nenv isApplicableMeth m ad plid allowObsolete = diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index a1567ed43b..ea3bbd8aea 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -328,7 +328,7 @@ type internal TcSymbolUses = /// Represents open declaration statement. type internal OpenDeclaration = - { /// Long identifier as it's presented in soruce code. + { /// Long identifier as it's presented in source code. LongId: Ident list /// Full range of the open declaration. diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index 2d9ea197db..6479d6c672 100644 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -47,10 +47,10 @@ module internal PrintUtilities = isEnumTy g ty || isDelegateTy g ty || ExistsHeadTypeInEntireHierarchy g amap m ty g.exn_tcr || ExistsHeadTypeInEntireHierarchy g amap m ty g.tcref_System_Attribute - let applyMaxMembers maxMembers (alldecls: _ list) = + let applyMaxMembers maxMembers (allDecls: _ list) = match maxMembers with - | Some n when alldecls.Length > n -> (alldecls |> List.truncate n) @ [wordL (tagPunctuation "...")] - | _ -> alldecls + | Some n when allDecls.Length > n -> (allDecls |> List.truncate n) @ [wordL (tagPunctuation "...")] + | _ -> allDecls /// fix up a name coming from IL metadata by quoting "funny" names (keywords, otherwise invalid identifiers) let adjustILName n = @@ -185,12 +185,12 @@ module private PrintIL = | ILType.Modified (_, _, t) -> layoutILType denv ilTyparSubst t // Just recurse through them to the contained ILType /// Layout a function pointer signature using type-only-F#-style. No argument names are printed. - and private layoutILCallingSignature denv ilTyparSubst cons (signatur: ILCallingSignature) = + and private layoutILCallingSignature denv ilTyparSubst cons (signature: ILCallingSignature) = // We need a special case for // constructors (Their return types are reported as `void`, but this is // incorrect; so if we're dealing with a constructor we require that the // return type be passed along as the `cons` parameter.) - let args = signatur.ArgTypes |> List.map (layoutILType denv ilTyparSubst) + let args = signature.ArgTypes |> List.map (layoutILType denv ilTyparSubst) let res = match cons with | Some className -> @@ -198,7 +198,7 @@ module private PrintIL = // special case for constructor return-type (viz., the class itself) layoutILTypeRefName denv names ^^ (pruneParams className ilTyparSubst |> paramsL) | None -> - signatur.ReturnType |> layoutILType denv ilTyparSubst + signature.ReturnType |> layoutILType denv ilTyparSubst match args with | [] -> WordL.structUnit ^^ WordL.arrow ^^ res @@ -566,7 +566,7 @@ module private PrintTypes = | Const.String bs -> "\"" + bs + "\"" |> tagNumericLiteral | Const.Unit -> "()" |> tagPunctuation | Const.Decimal bs -> string bs + "M" |> tagNumericLiteral - // either "null" or "the defaut value for a struct" + // either "null" or "the default value for a struct" | Const.Zero -> tagKeyword(if isRefTy g ty then "null" else "default") wordL str @@ -1788,14 +1788,14 @@ module private TastDefinitionPrinting = tycon.TrueFieldsAsList |> List.filter (fun f -> not f.IsStatic) |> List.map (fun f -> WordL.keywordVal ^^ layoutRecdField true denv f) - let alldecls = inherits @ memberImplementLs @ memberCtorLs @ instanceValsLs @ vsprs @ memberInstanceLs @ staticValsLs @ memberStaticLs - if isNil alldecls then + let allDecls = inherits @ memberImplementLs @ memberCtorLs @ instanceValsLs @ vsprs @ memberInstanceLs @ staticValsLs @ memberStaticLs + if isNil allDecls then None else - let alldecls = applyMaxMembers denv.maxMembers alldecls - let emptyMeasure = match tycon.TypeOrMeasureKind with TyparKind.Measure -> isNil alldecls | _ -> false + let allDecls = applyMaxMembers denv.maxMembers allDecls + let emptyMeasure = match tycon.TypeOrMeasureKind with TyparKind.Measure -> isNil allDecls | _ -> false if emptyMeasure then None else - let declsL = aboveListL alldecls + let declsL = aboveListL allDecls let declsL = match start with Some s -> (wordL s @@-- declsL) @@ wordL (tagKeyword "end") | None -> declsL Some declsL | TUnionRepr _ -> diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index e89f3e4284..69b7d640a7 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -100,7 +100,7 @@ type ExprValueInfo = /// arities: The number of bunches of untupled args and type args, and /// the number of args in each bunch. NOTE: This include type arguments. /// expr: The value, a lambda term. - /// ty: The type of lamba term + /// ty: The type of lambda term | CurriedLambdaValue of Unique * int * int * Expr * TType /// ConstExprValue(size, value) @@ -350,14 +350,14 @@ type OptimizationSettings = member x.EliminateTupleFieldGet () = x.localOpt () - member x.EliminatUnionCaseFieldGet () = x.localOpt () + member x.EliminateUnionCaseFieldGet () = x.localOpt () /// eliminate non-compiler generated immediate bindings member x.EliminateImmediatelyConsumedLocals() = x.localOpt () /// expand "let x = (exp1, exp2, ...)" bindings as prior tmps /// expand "let x = Some exp1" bindings as prior tmps - member x.ExpandStructrualValues() = x.localOpt () + member x.ExpandStructuralValues() = x.localOpt () type cenv = { g: TcGlobals @@ -1132,7 +1132,7 @@ let AbstractOptimizationInfoToEssentials = /// Hide information because of a "let ... in ..." or "let rec ... in ... " let AbstractExprInfoByVars (boundVars: Val list, boundTyVars) ivalue = // Module and member bindings can be skipped when checking abstraction, since abstraction of these values has already been done when - // we hit the end of the module and called AbstractLazyModulInfoByHiding. If we don't skip these then we end up quadtratically retraversing + // we hit the end of the module and called AbstractLazyModulInfoByHiding. If we don't skip these then we end up quadratically retraversing // the inferred optimization data, i.e. at each binding all the way up a sequences of 'lets' in a module. let boundVars = boundVars |> List.filter (fun v -> not v.IsMemberOrModuleBinding) @@ -1524,7 +1524,7 @@ and RewriteBoolLogicCase data (TCase(test, tree)) = TCase(test, RewriteBoolLogicTree data tree) /// Repeatedly combine switch-over-match decision trees, see https://github.com/Microsoft/visualfsharp/issues/635. -/// The outer decision tree is doing a swithc over a boolean result, the inner match is producing only +/// The outer decision tree is doing a switch over a boolean result, the inner match is producing only /// constant boolean results in its targets. let rec CombineBoolLogic expr = @@ -1576,7 +1576,7 @@ let MakeStructuralBindingTemp (v: Val) i (arg: Expr) argTy = ve, mkCompGenBind v arg let ExpandStructuralBindingRaw cenv expr = - assert cenv.settings.ExpandStructrualValues() + assert cenv.settings.ExpandStructuralValues() match expr with | Expr.Let (TBind(v, rhs, tgtSeqPtOpt), body, m, _) when (isRefTupleExpr rhs && @@ -1611,7 +1611,7 @@ let rec RearrangeTupleBindings expr fin = | _ -> None let ExpandStructuralBinding cenv expr = - assert cenv.settings.ExpandStructrualValues() + assert cenv.settings.ExpandStructuralValues() match expr with | Expr.Let (TBind(v, rhs, tgtSeqPtOpt), body, m, _) when (isRefTupleTy cenv.g v.Type && @@ -1708,7 +1708,7 @@ let (|AnyQueryBuilderOpTrans|_|) g = function // | query.For(, ) --> IQueryable if qexprInner is IQueryable, otherwise seq { qexprInner' } // | query.Yield --> not IQueryable, seq { } // | query.YieldFrom --> not IQueryable, seq { yield! } -// | query.Op(, ) --> IQueryable if qexprOuter is IQueryable, otherwise query.Op(qexpOuter', ) +// | query.Op(, ) --> IQueryable if qexprOuter is IQueryable, otherwise query.Op(qexprOuter', ) let rec tryRewriteToSeqCombinators g (e: Expr) = let m = e.Range match e with @@ -2112,7 +2112,7 @@ and OptimizeExprOpReductionsAfter cenv env (op, tyargs, argsR, arginfos, m) = | None -> OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos UnknownValue and OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos valu = - // The generic case - we may collect information, but the construction/projection doesnRt disappear + // The generic case - we may collect information, but the construction/projection doesn't disappear let argsTSize = AddTotalSizes arginfos let argsFSize = AddFunctionSizes arginfos let argEffects = OrEffects arginfos @@ -2230,7 +2230,7 @@ and TryOptimizeTupleFieldGet cenv _env (_tupInfo, e1info, tys, n, m) = and TryOptimizeUnionCaseGet cenv _env (e1info, cspec, _tys, n, m) = match e1info.Info with - | StripUnionCaseValue(cspec2, args) when cenv.settings.EliminatUnionCaseFieldGet() && not e1info.HasEffect && cenv.g.unionCaseRefEq cspec cspec2 -> + | StripUnionCaseValue(cspec2, args) when cenv.settings.EliminateUnionCaseFieldGet() && not e1info.HasEffect && cenv.g.unionCaseRefEq cspec cspec2 -> if n >= args.Length then errorR(InternalError( "TryOptimizeUnionCaseGet: term argument out of range", m)) Some args.[n] | _ -> None @@ -2298,7 +2298,7 @@ and OptimizeLinearExpr cenv env expr contf = // Eliminate subsumption coercions for functions. This must be done post-typechecking because we need // complete inference types. let expr = DetectAndOptimizeForExpression cenv.g OptimizeAllForExpressions expr - let expr = if cenv.settings.ExpandStructrualValues() then ExpandStructuralBinding cenv expr else expr + let expr = if cenv.settings.ExpandStructuralValues() then ExpandStructuralBinding cenv expr else expr let expr = stripExpr expr match expr with @@ -2326,7 +2326,7 @@ and OptimizeLinearExpr cenv env expr contf = let (bindR, bindingInfo), env = OptimizeBinding cenv false env bind OptimizeLinearExpr cenv env body (contf << (fun (bodyR, bodyInfo) -> // PERF: This call to ValueIsUsedOrHasEffect/freeInExpr amounts to 9% of all optimization time. - // Is it quadratic or quasi-quadtratic? + // Is it quadratic or quasi-quadratic? if ValueIsUsedOrHasEffect cenv (fun () -> (freeInExpr CollectLocals bodyR).FreeLocals) (bindR, bindingInfo) then // Eliminate let bindings on the way back up let exprR, adjust = TryEliminateLet cenv env bindR bodyR m @@ -3027,7 +3027,7 @@ and ComputeSplitToMethodCondition flag threshold cenv env (e: Expr, einfo) = // None of them should be byrefs not (isByrefLikeTy cenv.g m v.Type) && // None of them should be local polymorphic constrained values - not (IsGenericValWithGenericContraints cenv.g v) && + not (IsGenericValWithGenericConstraints cenv.g v) && // None of them should be mutable not v.IsMutable)))) && not (isByrefLikeTy cenv.g m (tyOfExpr cenv.g e)) diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index 3b172de1e3..d3c49646c1 100644 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -596,7 +596,7 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = let testexpr = match discrim with | DecisionTreeTest.ArrayLength(n, _) -> - let _v, vExpr, bind = mkCompGenLocalAndInvisbleBind g "testExpr" m testexpr + let _v, vExpr, bind = mkCompGenLocalAndInvisibleBind g "testExpr" m testexpr mkLetBind m bind (mkLazyAnd g m (mkNonNullTest g m vExpr) (mkILAsmCeq g m (mkLdlen g m vExpr) (mkInt g m n))) | DecisionTreeTest.Const (Const.String _ as c) -> mkCallEqualsOperator g m g.string_ty testexpr (Expr.Const (c, m, g.string_ty)) @@ -952,7 +952,7 @@ let CompilePatternBasic Some vExpr, Some(mkInvisibleBind v appExpr) // Any match on a struct union must take the address of its input. - // We can shortcut the addrof when the original input is a deref of a byref value. + // We can shortcut the addrOf when the original input is a deref of a byref value. | EdgeDiscrim(_i', (DecisionTreeTest.UnionCase (ucref, _)), _) :: _rest when isNil origInputValTypars && ucref.Tycon.IsStructRecordOrUnionTycon -> diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 4d8f05b5a0..c718a94665 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -561,7 +561,7 @@ let mkArgsForAppliedVal isBaseCall (vref: ValRef) argsl = | Some topValInfo -> let argArities = topValInfo.AritiesOfArgs let argArities = if isBaseCall && argArities.Length >= 1 then List.tail argArities else argArities - // Check for partial applications: arguments to partial applciations don't get to use byrefs + // Check for partial applications: arguments to partial applications don't get to use byrefs if List.length argsl >= argArities.Length then List.map mkArgsPermit argArities else @@ -640,7 +640,7 @@ let CheckTypePermitSpanLike (cenv: cenv) env m ty = CheckType PermitByRefType.Sp /// Check types occurring in TAST but allow all byrefs. Only used on internally-generated types let CheckTypePermitAllByrefs (cenv: cenv) env m ty = CheckType PermitByRefType.All cenv env m ty -/// Check types ocurring in TAST but disallow inner types to be byref or byref-like types. +/// Check types occurring in TAST but disallow inner types to be byref or byref-like types. let CheckTypeNoInnerByrefs cenv env m ty = CheckType PermitByRefType.NoInnerByRefLike cenv env m ty let CheckTypeInstNoByrefs cenv env m tyargs = @@ -824,7 +824,7 @@ and CheckCallLimitArgs cenv env m returnTy limitArgs (context: PermitByRefExpr) errorR(Error(FSComp.SR.chkNoByrefAddressOfValueFromExpression(), m)) // You cannot call a function that takes a byref of a span-like (not stack referring) and - // either a stack referring spanlike or a local-byref of a stack referring span-like. + // either a stack referring span-like or a local-byref of a stack referring span-like. let isCallLimited = HasLimitFlag LimitFlags.ByRefOfSpanLike limitArgs && (HasLimitFlag LimitFlags.StackReferringSpanLike limitArgs || @@ -1139,7 +1139,7 @@ and CheckExprOp cenv env (op, tyargs, args, m) context expr = let ctorLimitedZoneCheck() = if env.ctorLimitedZone then errorR(Error(FSComp.SR.chkObjCtorsCantUseExceptionHandling(), m)) - // Ensure anonynous record type requirements are recorded + // Ensure anonymous record type requirements are recorded match op with | TOp.AnonRecdGet (anonInfo, _) | TOp.AnonRecd anonInfo -> @@ -1318,7 +1318,7 @@ and CheckExprOp cenv env (op, tyargs, args, m) context expr = // C# applies a rule where the APIs to struct types can't return the addresses of fields in that struct. // There seems no particular reason for this given that other protections in the language, though allowing - // it would mean "readonly" on a struct doesn't imply immutabality-of-contents - it only implies + // it would mean "readonly" on a struct doesn't imply immutability-of-contents - it only implies if context.PermitOnlyReturnable && (match obj with Expr.Val (vref, _, _) -> vref.BaseOrThisInfo = MemberThisVal | _ -> false) && isByrefTy g (tyOfExpr g obj) then errorR(Error(FSComp.SR.chkStructsMayNotReturnAddressesOfContents(), m)) diff --git a/src/fsharp/PrettyNaming.fs b/src/fsharp/PrettyNaming.fs index 4c11b9054d..13ca5e4fc7 100755 --- a/src/fsharp/PrettyNaming.fs +++ b/src/fsharp/PrettyNaming.fs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. //---------------------------------------------------------------------------- -// Some general F# utilities for mangling / unmangling / manipulating names. +// Some general F# utilities for mangling / demangling / manipulating names. //-------------------------------------------------------------------------- /// Anything to do with special names of identifiers and other lexical rules diff --git a/src/fsharp/SimulatedMSBuildReferenceResolver.fs b/src/fsharp/SimulatedMSBuildReferenceResolver.fs index 8b47ad9bff..bf5ffc092f 100644 --- a/src/fsharp/SimulatedMSBuildReferenceResolver.fs +++ b/src/fsharp/SimulatedMSBuildReferenceResolver.fs @@ -138,17 +138,17 @@ let private SimulatedMSBuildResolver = #if !FX_RESHAPED_MSBUILD try - // Seach the GAC on Windows + // Search the GAC on Windows if not found && not isFileName && Environment.OSVersion.Platform = PlatformID.Win32NT then let n = AssemblyName r - let netfx = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() - let gac = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(netfx.TrimEnd('\\'))), "assembly") + let netFx = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + let gac = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(netFx.TrimEnd('\\'))), "assembly") match n.Version, n.GetPublicKeyToken() with | null, _ | _, null -> let options = [ if Directory.Exists gac then - for gacdir in Directory.EnumerateDirectories gac do - let assemblyDir = Path.Combine(gacdir, n.Name) + for gacDir in Directory.EnumerateDirectories gac do + let assemblyDir = Path.Combine(gacDir, n.Name) if Directory.Exists assemblyDir then for tdir in Directory.EnumerateDirectories assemblyDir do let trialPath = Path.Combine(tdir, qual) @@ -162,18 +162,18 @@ let private SimulatedMSBuildResolver = | v, tok -> if Directory.Exists gac then - for gacdir in Directory.EnumerateDirectories gac do - //printfn "searching GAC directory: %s" gacdir - let assemblyDir = Path.Combine(gacdir, n.Name) + for gacDir in Directory.EnumerateDirectories gac do + //printfn "searching GAC directory: %s" gacDir + let assemblyDir = Path.Combine(gacDir, n.Name) if Directory.Exists assemblyDir then //printfn "searching GAC directory: %s" assemblyDir let tokText = String.concat "" [| for b in tok -> sprintf "%02x" b |] - let verdir = Path.Combine(assemblyDir, "v4.0_"+v.ToString()+"__"+tokText) - //printfn "searching GAC directory: %s" verdir + let verDir = Path.Combine(assemblyDir, "v4.0_"+v.ToString()+"__"+tokText) + //printfn "searching GAC directory: %s" verDir - if Directory.Exists verdir then - let trialPath = Path.Combine(verdir, qual) + if Directory.Exists verDir then + let trialPath = Path.Combine(verDir, qual) //printfn "searching GAC: %s" trialPath if FileSystem.SafeExists trialPath then success trialPath diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 91a63819da..5ea0d49b52 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -397,7 +397,7 @@ let mkTyconInst (tycon: Tycon) tinst = mkTyparInst tycon.TyparsNoRange tinst let mkTyconRefInst (tcref: TyconRef) tinst = mkTyconInst tcref.Deref tinst //--------------------------------------------------------------------------- -// Basic equalites +// Basic equalities //--------------------------------------------------------------------------- let tyconRefEq (g: TcGlobals) tcref1 tcref2 = primEntityRefEq g.compilingFslib g.fslibCcu tcref1 tcref2 @@ -721,7 +721,7 @@ let rec stripTyEqnsA g canShortcut ty = | Some abbrevTy -> stripTyEqnsA g canShortcut (applyTyconAbbrev abbrevTy tycon tinst) | None -> - // This is the point where we get to add additional coditional normalizing equations + // This is the point where we get to add additional conditional normalizing equations // into the type system. Such power! // // Add the equation byref<'T> = byref<'T, ByRefKinds.InOut> for when using sufficient FSharp.Core @@ -4282,14 +4282,14 @@ let isPublicTycon (tcref: Tycon) = (tcref.Accessibility = taccessPublic) let freeVarsAllPublic fvs = // Are any non-public items used in the expr (which corresponded to the fvs)? // Recall, taccess occurs in: - // EntityData has ReprAccessibility and Accessiblity + // EntityData has ReprAccessibility and Accessibility // UnionCase has Accessibility // RecdField has Accessibility // ValData has Accessibility // The freevars and FreeTyvars collect local constructs. // Here, we test that all those constructs are public. // - // CODEREVIEW: + // CODE REVIEW: // What about non-local vals. This fix assumes non-local vals must be public. OK? Zset.forall isPublicVal fvs.FreeLocals && Zset.forall isPublicUnionCase fvs.FreeUnionCases && @@ -5748,7 +5748,7 @@ let isExpansiveUnderInstantiation g fty0 tyargs pargs argsl = | _ :: t -> not (isFunTy g fty) || loop (rangeOfFunTy g fty) t loop fty1 argsl) -let rec mkExprApplAux g f fty argsl m = +let rec mkExprAppAux g f fty argsl m = match argsl with | [] -> f | _ -> @@ -5783,7 +5783,7 @@ let rec mkAppsAux g f fty tyargsl argsl m = let arfty = applyForallTy g fty tyargs mkAppsAux g (primMkApp (f, fty) tyargs [] m) arfty rest argsl m | [] -> - mkExprApplAux g f fty argsl m + mkExprAppAux g f fty argsl m let mkApps g ((f, fty), tyargsl, argl, m) = mkAppsAux g f fty tyargsl argl m @@ -6677,7 +6677,7 @@ let mkNil (g: TcGlobals) m ty = mkUnionCaseExpr (g.nil_ucref, [ty], [], m) let mkCons (g: TcGlobals) ty h t = mkUnionCaseExpr (g.cons_ucref, [ty], [h;t], unionRanges h.Range t.Range) -let mkCompGenLocalAndInvisbleBind g nm m e = +let mkCompGenLocalAndInvisibleBind g nm m e = let locv, loce = mkCompGenLocal m nm (tyOfExpr g e) locv, loce, mkInvisibleBind locv e @@ -7230,7 +7230,7 @@ let AdjustArityOfLambdaBody g arity (vs: Val list) body = let MultiLambdaToTupledLambda g vs body = match vs with - | [] -> failwith "MultiLambdaToTupledLambda: expected some argments" + | [] -> failwith "MultiLambdaToTupledLambda: expected some arguments" | [v] -> v, body | vs -> let tupledv, untupler = untupledToRefTupled g vs @@ -7243,7 +7243,7 @@ let (|RefTuple|_|) expr = let MultiLambdaToTupledLambdaIfNeeded g (vs, arg) body = match vs, arg with - | [], _ -> failwith "MultiLambdaToTupledLambda: expected some argments" + | [], _ -> failwith "MultiLambdaToTupledLambda: expected some arguments" | [v], _ -> [(v, arg)], body | vs, RefTuple args when args.Length = vs.Length -> List.zip vs args, body | vs, _ -> @@ -7304,7 +7304,7 @@ let rec MakeApplicationAndBetaReduceAux g (f, fty, tyargsl: TType list list, arg let argvs2, args2 = List.unzip (List.concat pairs) mkLetsBind m (mkCompGenBinds argvs2 args2) body | _ -> - mkExprApplAux g f fty argsl m + mkExprAppAux g f fty argsl m | [] -> f @@ -8526,7 +8526,7 @@ let isCompiledConstraint cx = // Is a value a first-class polymorphic value with .NET constraints? // Used to turn off TLR and method splitting -let IsGenericValWithGenericContraints g (v: Val) = +let IsGenericValWithGenericConstraints g (v: Val) = isForallTy g v.Type && v.Type |> destForallTy g |> fst |> List.exists (fun tp -> List.exists isCompiledConstraint tp.Constraints) diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index 6119007d52..5179b85239 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -31,7 +31,7 @@ val typeEquiv : TcGlobals -> TType -> TType - /// Check the equivalence of two units-of-measure val measureEquiv : TcGlobals -> Measure -> Measure -> bool -/// Reduce a type to its more anonical form subject to an erasure flag, inference equations and abbreviations +/// Reduce a type to its more canonical form subject to an erasure flag, inference equations and abbreviations val stripTyEqnsWrtErasure: Erasure -> TcGlobals -> TType -> TType /// Build a function type @@ -120,7 +120,7 @@ val mkMutableCompGenLocal : range -> string -> TType -> Val * Expr /// Make a new mutable compiler-generated local value, 'let' bind it to an expression /// 'invisibly' (no sequence point etc.), and build an expression to reference it -val mkCompGenLocalAndInvisbleBind : TcGlobals -> string -> range -> Expr -> Val * Expr * Binding +val mkCompGenLocalAndInvisibleBind : TcGlobals -> string -> range -> Expr -> Val * Expr * Binding /// Build a lambda expression taking multiple values val mkMultiLambda : range -> Val list -> Expr * TType -> Expr @@ -1150,7 +1150,7 @@ type SignatureRepackageInfo = { /// The list of corresponding values RepackagedVals: (ValRef * ValRef) list - /// The list of corresponding modules, namespacea and type definitions + /// The list of corresponding modules, namespaces and type definitions RepackagedEntities: (TyconRef * TyconRef) list } /// The empty table @@ -1219,7 +1219,7 @@ val IsHiddenVal : (Remap * SignatureHidingInfo) list -> Val -> bool /// Determine if a record field is hidden by a signature val IsHiddenRecdField : (Remap * SignatureHidingInfo) list -> RecdFieldRef -> bool -/// Adjust marks in expressions, replacing all marks by thegiven mark. +/// Adjust marks in expressions, replacing all marks by the given mark. /// Used when inlining. val remarkExpr : range -> Expr -> Expr @@ -1250,7 +1250,7 @@ val mkAddrGet : range -> ValRef -> Expr /// &localv val mkValAddr : range -> readonly: bool -> ValRef -> Expr -/// Build an exression representing the read of an instance class or record field. +/// Build an expression representing the read of an instance class or record field. /// First take the address of the record expression if it is a struct. val mkRecdFieldGet : TcGlobals -> Expr * RecdFieldRef * TypeInst * range -> Expr @@ -1280,7 +1280,7 @@ val AdjustArityOfLambdaBody : TcGlobals -> int -> Val list -> Expr -> Val list * /// Make an application expression, doing beta reduction by introducing let-bindings val MakeApplicationAndBetaReduce : TcGlobals -> Expr * TType * TypeInst list * Exprs * range -> Expr -/// COmbine two static-resolution requirements on a type parameter +/// Combine two static-resolution requirements on a type parameter val JoinTyparStaticReq : TyparStaticReq -> TyparStaticReq -> TyparStaticReq /// Layout for internal compiler debugging purposes @@ -1481,10 +1481,10 @@ val destListTy : TcGlobals -> TType -> TType /// Build an array type of the given rank val mkArrayTy : TcGlobals -> int -> TType -> range -> TType -/// Check if a type definition is one of the artifical type definitions used for array types of different ranks +/// Check if a type definition is one of the artificial type definitions used for array types of different ranks val isArrayTyconRef : TcGlobals -> TyconRef -> bool -/// Determine the rank of one of the artifical type definitions used for array types +/// Determine the rank of one of the artificial type definitions used for array types val rankOfArrayTyconRef : TcGlobals -> TyconRef -> int /// Determine if a type is the F# unit type @@ -2218,7 +2218,7 @@ val RewriteExpr : ExprRewritingEnv -> Expr -> Expr val RewriteImplFile : ExprRewritingEnv -> TypedImplFile -> TypedImplFile -val IsGenericValWithGenericContraints: TcGlobals -> Val -> bool +val IsGenericValWithGenericConstraints: TcGlobals -> Val -> bool type Entity with diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index da6906cf33..92f4f1a5b8 100644 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -1368,7 +1368,7 @@ let p_tys = (p_list p_ty) let fill_p_attribs, p_attribs = p_hole() // In F# 4.5, the type of the "this" pointer for structs is considered to be inref for the purposes of checking the implementation -// of the struct. However for backwards compat reaons we can't serialize this as the type. +// of the struct. However for backwards compat reasons we can't serialize this as the type. let checkForInRefStructThisArg st ty = let g = st.oglobals let _, tauTy = tryDestForallTy g ty @@ -2163,7 +2163,7 @@ and u_entity_spec_data st : Entity = entity_xmldoc= defaultArg x15 XmlDoc.Empty entity_xmldocsig = System.String.Empty entity_tycon_abbrev = x8 - entity_accessiblity = x4a + entity_accessibility = x4a entity_tycon_repr_accessibility = x4b entity_exn_info = x14 } } diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 5cc848e5ab..4181cb846c 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -286,7 +286,7 @@ let addFreeItemOfTy ty eUngeneralizableItems = if isEmptyFreeTyvars fvs then eUngeneralizableItems else UngeneralizableItem(fun () -> freeInType CollectAllNoCaching ty) :: eUngeneralizableItems -/// Add the contents of a module type to the TcEnv, i.e. register the contants as ungeneralizable. +/// Add the contents of a module type to the TcEnv, i.e. register the contents as ungeneralizable. /// Add a module type to the TcEnv, i.e. register it as ungeneralizable. let addFreeItemOfModuleTy mtyp eUngeneralizableItems = let fvs = freeInModuleTy mtyp @@ -410,7 +410,7 @@ let AddNonLocalCcu g amap scopem env assemblyName (ccu: CcuThunk, internalsVisib { env with eNameResEnv = AddTyconRefsToNameEnv BulkAdd.Yes false g amap env.eAccessRights scopem true env.eNameResEnv tcrefs } env -/// Adjust the TcEnv to account for a fully processed "namespace" declaration in thie file +/// Adjust the TcEnv to account for a fully processed "namespace" declaration in this file let AddLocalRootModuleOrNamespace tcSink g amap scopem env (mtyp: ModuleOrNamespaceType) = // Compute the top-rooted module or namespace references let modrefs = mtyp.ModuleAndNamespaceDefinitions |> List.map mkLocalModRef @@ -1278,7 +1278,7 @@ let GeneralizedTypeForTypeScheme typeScheme = let (TypeScheme(generalizedTypars, tau)) = typeScheme mkForallTyIfNeeded generalizedTypars tau -/// Create a type scheme for somthing that is not generic +/// Create a type scheme for something that is not generic let NonGenericTypeScheme ty = TypeScheme([], ty) //------------------------------------------------------------------------- @@ -2456,7 +2456,7 @@ type NormalizedBinding = | NormalizedBinding of SynAccess option * SynBindingKind * - bool * (* pesudo/mustinline value? *) + bool * (* pseudo/mustinline value? *) bool * (* mutable *) SynAttribute list * XmlDoc * @@ -3966,10 +3966,10 @@ let EliminateInitializationGraphs // Check the shape of an object constructor and rewrite calls //------------------------------------------------------------------------- -let CheckAndRewriteObjectCtor g env (ctorLambaExpr: Expr) = +let CheckAndRewriteObjectCtor g env (ctorLambdaExpr: Expr) = - let m = ctorLambaExpr.Range - let tps, vsl, body, returnTy = stripTopLambda (ctorLambaExpr, tyOfExpr g ctorLambaExpr) + let m = ctorLambdaExpr.Range + let tps, vsl, body, returnTy = stripTopLambda (ctorLambdaExpr, tyOfExpr g ctorLambdaExpr) // Rewrite legitimate self-construction calls to CtorValUsedAsSelfInit let error (expr: Expr) = @@ -4180,7 +4180,7 @@ type NewSlotsOK = | NoNewSlots -type ImplictlyBoundTyparsAllowed = +type ImplicitlyBoundTyparsAllowed = | NewTyparsOKButWarnIfNotRigid | NewTyparsOK | NoNewTypars @@ -5806,7 +5806,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // LanguageFeatures.ImplicitYield do not require this validation let implicitYieldEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield let validateObjectSequenceOrRecordExpression = not implicitYieldEnabled - let validateExpressionWithIfRequiresParenethesis = not implicitYieldEnabled + let validateExpressionWithIfRequiresParenthesis = not implicitYieldEnabled let acceptDeprecatedIfThenExpression = not implicitYieldEnabled match synExpr with @@ -6022,7 +6022,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.CompExpr (_, _, (SimpleSemicolonSequence cenv acceptDeprecatedIfThenExpression elems as body), _) -> match body with | SimpleSemicolonSequence cenv false _ -> () - | _ when validateExpressionWithIfRequiresParenethesis -> errorR(Deprecated(FSComp.SR.tcExpressionWithIfRequiresParenthesis(), m)) + | _ when validateExpressionWithIfRequiresParenthesis -> errorR(Deprecated(FSComp.SR.tcExpressionWithIfRequiresParenthesis(), m)) | _ -> () let replacementExpr = @@ -9314,7 +9314,7 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del -> false - // Propagte the known application structure into function types + // Propagate the known application structure into function types Propagate cenv overallTy env tpenv (MakeApplicableExprNoFlex cenv expr) (tyOfExpr g expr) delayed // Take all simple arguments and process them before applying the constraint. @@ -9700,7 +9700,7 @@ and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (ein | None -> f [] | Some (objExpr, objExprTy) -> mkCompGenLetIn mItem "eventTarget" objExprTy objExpr (fun (_, ve) -> f [ve]) - // Bind the object target expression to make sure we only run its sdie effects once, and to make + // Bind the object target expression to make sure we only run its side effects once, and to make // sure if it's a mutable reference then we dereference it - see FSharp 1.0 bug 942 let expr = bindObjArgs (fun objVars -> @@ -9849,7 +9849,7 @@ and TcMethodApplication // The arguments are passed as if they are curried with arity [numberOfIndexParameters;1], however in the TAST, indexed property setters // are uncurried and have arity [numberOfIndexParameters+1]. // - // Here we work around this mismatch by crunching all property argument lists to uncirred form. + // Here we work around this mismatch by crunching all property argument lists to uncurried form. // Ideally the problem needs to be solved at its root cause at the callsites to this function let unnamedCurriedCallerArgs, namedCurriedCallerArgs = if isProp then @@ -11173,7 +11173,7 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds /// RECAP: /// The LHS of let-bindings are patterns. /// These patterns could fail, e.g. "let Some x = ...". -/// So letbindings could contain a fork at a match construct, with one branch being the match failure. +/// So let bindings could contain a fork at a match construct, with one branch being the match failure. /// If bindings are linearised, then this fork is pushed to the RHS. /// In this case, the let bindings type check to a sequence of bindings. and TcLetBindings cenv env containerInfo declKind tpenv (binds, bindsm, scopem) = @@ -11416,7 +11416,7 @@ and AnalyzeRecursiveStaticMemberOrValDecl let vis = CombineVisibilityAttribs vis1 vis2 mBinding // Check if we're defining a member, in which case generate the internal unique - // name for the member and the information about which type it is agumenting + // name for the member and the information about which type it is augmenting match tcrefContainerInfo, memberFlagsOpt with | (Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags) -> @@ -11636,7 +11636,7 @@ and AnalyzeAndMakeAndPublishRecursiveValue overridesOK isGeneratedEventVal cenv let isComplete = ComputeIsComplete enclosingDeclaredTypars declaredTypars ty // NOTE: The type scheme here is normally not 'complete'!!!! The type is more or less just a type variable at this point. - // NOTE: toparity, type and typars get fixed-up after inference + // NOTE: top arity, type and typars get fixed-up after inference let prelimTyscheme = TypeScheme(enclosingDeclaredTypars@declaredTypars, ty) let partialValReprInfo = TranslateTopValSynInfo mBinding (TcAttributes cenv envinner) valSynInfo let topValInfo = UseSyntacticArity declKind prelimTyscheme partialValReprInfo @@ -11813,7 +11813,7 @@ and TcIncrementalLetRecGeneralization cenv scopem // - This table is usually much smaller than the number of remaining forward declarations ? e.g. in the pathological case you mentioned below this table is size 1. // - If a forward declaration does not have an entry in this table then its type can't involve any inference variables from the declarations we have already checked. // - So by scanning the domain of this table we can reduce the complexity down to something like O(n * average-number-of-forward-calls). - // - For a fully connected programs or programs where every forward declaration is subject to a forward call, this would be quadratic. However we do not expect callgraphs to be like this in practice + // - For a fully connected programs or programs where every forward declaration is subject to a forward call, this would be quadratic. However we do not expect call graphs to be like this in practice // // Hence we use the recursive-uses table to guide the process of scraping forward references for frozen types // If the is no entry in the recursive use table then a forward binding has never been used and @@ -12180,8 +12180,8 @@ and TcLetrec overridesOK cenv env tpenv (binds, bindsm, scopem) = let results = EliminateInitializationGraphs - (fun _ -> failwith "unreachable 2 - no type definitions in recursivve group") - (fun _ _ -> failwith "unreachable 3 - no type definitions in recursivve group") + (fun _ -> failwith "unreachable 2 - no type definitions in recursive group") + (fun _ _ -> failwith "unreachable 3 - no type definitions in recursive group") id (fun morpher oldBinds -> morpher oldBinds) cenv.g mustHaveArity env.DisplayEnv [MutRecShape.Lets bindsWithoutLaziness] bindsm @@ -12540,7 +12540,7 @@ module IncrClassChecking = TyconRef: TyconRef /// The type parameters allocated for the implicit instance constructor. - /// These may be equated with other (WillBeRigid) type parameters through equirecursive inference, and so + /// These may be equated with other (WillBeRigid) type parameters through equi-recursive inference, and so /// should always be renormalized/canonicalized when used. InstanceCtorDeclaredTypars: Typars @@ -12582,7 +12582,7 @@ module IncrClassChecking = /// Check and elaborate the "left hand side" of the implicit class construction /// syntax. - let TcImplictCtorLhs_Phase2A(cenv, env, tpenv, tcref: TyconRef, vis, attrs, spats, thisIdOpt, baseValOpt: Val option, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) = + let TcImplicitCtorLhs_Phase2A(cenv, env, tpenv, tcref: TyconRef, vis, attrs, spats, thisIdOpt, baseValOpt: Val option, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) = let baseValOpt = match GetSuperTypeOfType cenv.g cenv.amap m objTy with @@ -13164,12 +13164,12 @@ module IncrClassChecking = // Note: the recursive calls are made via members on the object // or via access to fields. This means the recursive loop is "broken", // and we can collapse to sequential bindings - let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // inscope before + let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // in scope before let actions, methodBinds = binds |> List.map (TransBind reps) |> List.unzip // since can occur in RHS of own defns actions, reps, methodBinds else let actions, methodBinds = binds |> List.map (TransBind reps) |> List.unzip - let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // inscope after + let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // in scope after actions, reps, methodBinds let methodBinds = List.concat methodBinds if isStatic then @@ -13439,16 +13439,16 @@ module MutRecBindingChecking = // Class members can access protected members of the implemented type // Class members can access private members in the ty let isExtrinsic = (declKind = ExtrinsicExtensionBinding) - let initalEnvForTycon = MakeInnerEnvForTyconRef envForDecls tcref isExtrinsic + let initialEnvForTycon = MakeInnerEnvForTyconRef envForDecls tcref isExtrinsic // Re-add the type constructor to make it take precedence for record label field resolutions // This does not apply to extension members: in those cases the relationship between the record labels // and the type is too extruded let envForTycon = if isExtrinsic then - initalEnvForTycon + initialEnvForTycon else - AddLocalTyconRefs true g cenv.amap tcref.Range [tcref] initalEnvForTycon + AddLocalTyconRefs true g cenv.amap tcref.Range [tcref] initialEnvForTycon // Make fresh version of the class type for type checking the members and lets * let _, copyOfTyconTypars, _, objTy, thisTy = FreshenObjectArgType cenv tcref.Range TyparRigidity.WillBeRigid tcref isExtrinsic declaredTyconTypars @@ -13477,7 +13477,7 @@ module MutRecBindingChecking = error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembers(), m)) // Phase2A: make incrClassCtorLhs - ctorv, thisVal etc, type depends on argty(s) - let incrClassCtorLhs = TcImplictCtorLhs_Phase2A(cenv, envForTycon, tpenv, tcref, vis, attrs, spats, thisIdOpt, baseValOpt, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) + let incrClassCtorLhs = TcImplicitCtorLhs_Phase2A(cenv, envForTycon, tpenv, tcref, vis, attrs, spats, thisIdOpt, baseValOpt, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) // Phase2A: Add copyOfTyconTypars from incrClassCtorLhs - or from tcref let envForTycon = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envForTycon let innerState = (Some incrClassCtorLhs, envForTycon, tpenv, recBindIdx, uncheckedBindsRev) @@ -14451,7 +14451,7 @@ module TyconConstraintInference = yield tycon.Stamp ] // Initially, don't assume that the equality relation is dependent on any type variables - let initialAsssumedTypars = Set.empty + let initialAssumedTypars = Set.empty // Repeatedly eliminate structural type definitions whose structural component types no longer support // comparison. On the way record type variables which are support the comparison relation. @@ -14557,7 +14557,7 @@ module TyconConstraintInference = else loop newSet !assumedTyparsAcc - let uneliminatedTycons, assumedTyparsActual = loop initialAssumedTycons initialAsssumedTypars + let uneliminatedTycons, assumedTyparsActual = loop initialAssumedTycons initialAssumedTypars // OK, we're done, Record the results for the type variable which provide the support for tyconStamp in uneliminatedTycons do @@ -14598,7 +14598,7 @@ module TyconConstraintInference = if tp.Constraints |> List.exists (function TyparConstraint.SupportsEquality _ -> true | _ -> false) then true - // Within structural types, type parameters can be optimistically assumed to have ewquality + // Within structural types, type parameters can be optimistically assumed to have equality // We record the ones for which we have made this assumption. elif tycon.Typars(tycon.Range) |> List.exists (fun tp2 -> typarRefEq tp tp2) then assumedTyparsAcc := (!assumedTyparsAcc).Add(tp.Stamp) @@ -15415,7 +15415,7 @@ module EstablishTypeDefinitionCores = with e -> errorRecovery e m - // Third phase: check and publish the supr types. Run twice, once before constraints are established + // Third phase: check and publish the super types. Run twice, once before constraints are established // and once after let private TcTyconDefnCore_Phase1D_Phase1F_EstablishSuperTypesAndInterfaceTypes cenv tpenv inSig pass (envMutRec, mutRecDefns: MutRecShape<(_ * (Tycon * (Attribs * _)) option), _, _, _, _> list) = let checkCxs = if (pass = SecondPass) then CheckCxs else NoCheckCxs @@ -15545,7 +15545,7 @@ module EstablishTypeDefinitionCores = let hasMeasureAttr = HasFSharpAttribute g g.attrib_MeasureAttribute attrs // REVIEW: for hasMeasureableAttr we need to be stricter about checking these - // are only used on exactly the right kinds of type definitions and not inconjunction with other attributes. + // are only used on exactly the right kinds of type definitions and not in conjunction with other attributes. let hasMeasureableAttr = HasFSharpAttribute g g.attrib_MeasureableAttribute attrs let hasCLIMutable = HasFSharpAttribute g g.attrib_CLIMutableAttribute attrs @@ -16433,7 +16433,7 @@ module TcDeclarations = | SynMemberDefn.Inherit _ | SynMemberDefn.AbstractSlot _ -> false) - // Convert autoproperties to let bindings in the pre-list + // Convert auto properties to let bindings in the pre-list let rec preAutoProps memb = match memb with | SynMemberDefn.AutoProperty(Attributes attribs, isStatic, id, tyOpt, propKind, _, xmlDoc, _access, synExpr, _mGetSet, mWholeAutoProp) -> @@ -16460,7 +16460,7 @@ module TcDeclarations = | SynMemberDefn.ImplicitInherit _ -> [memb] | _ -> [] - // Convert autoproperties to member bindings in the post-list + // Convert auto properties to member bindings in the post-list let rec postAutoProps memb = match memb with | SynMemberDefn.AutoProperty(Attributes attribs, isStatic, id, tyOpt, propKind, memberFlags, xmlDoc, access, _synExpr, mGetSetOpt, _mWholeAutoProp) -> diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 59e93205ce..0a00cd4434 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -1368,7 +1368,7 @@ and and [] SynExceptionDefnRepr = - | SynExceptionDefnRepr of SynAttributes * SynUnionCase * longId: LongIdent option * xmlDoc: PreXmlDoc * accessiblity: SynAccess option * range: range + | SynExceptionDefnRepr of SynAttributes * SynUnionCase * longId: LongIdent option * xmlDoc: PreXmlDoc * accessibility: SynAccess option * range: range member this.Range = match this with SynExceptionDefnRepr (range=m) -> m @@ -1416,7 +1416,7 @@ and | Member of memberDefn: SynBinding * range: range /// implicit ctor args as a defn line, 'as' specification - | ImplicitCtor of accessiblity: SynAccess option * attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * range: range + | ImplicitCtor of accessibility: SynAccess option * attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * range: range /// inherit (args...) as base | ImplicitInherit of inheritType: SynType * inheritArgs: SynExpr * inheritAlias: Ident option * range: range @@ -1448,7 +1448,7 @@ and propKind: MemberKind * memberFlags:(MemberKind -> MemberFlags) * xmlDoc: PreXmlDoc * - accessiblity: SynAccess option * + accessibility: SynAccess option * synExpr: SynExpr * getSetRange: range option * range: range @@ -1760,15 +1760,15 @@ let (|SynPatErrorSkip|) (p: SynPat) = let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = match p with | SynPat.Typed(p', ty, m) -> - let p2, laterf = SimplePatOfPat synArgNameGenerator p' + let p2, laterF = SimplePatOfPat synArgNameGenerator p' SynSimplePat.Typed(p2, ty, m), - laterf + laterF | SynPat.Attrib(p', attribs, m) -> - let p2, laterf = SimplePatOfPat synArgNameGenerator p' + let p2, laterF = SimplePatOfPat synArgNameGenerator p' SynSimplePat.Attrib(p2, attribs, m), - laterf - | SynPat.Named (SynPat.Wild _, v, thisv, _, m) -> - SynSimplePat.Id (v, None, false, thisv, false, m), + laterF + | SynPat.Named (SynPat.Wild _, v, thisV, _, m) -> + SynSimplePat.Id (v, None, false, thisV, false, m), None | SynPat.OptionalVal (v, m) -> SynSimplePat.Id (v, None, false, false, true, m), @@ -1803,13 +1803,13 @@ let rec SimplePatsOfPat synArgNameGenerator p = match p with | SynPat.FromParseError (p, _) -> SimplePatsOfPat synArgNameGenerator p | SynPat.Typed(p', ty, m) -> - let p2, laterf = SimplePatsOfPat synArgNameGenerator p' + let p2, laterF = SimplePatsOfPat synArgNameGenerator p' SynSimplePats.Typed(p2, ty, m), - laterf + laterF // | SynPat.Paren (p, m) -> SimplePatsOfPat synArgNameGenerator p | SynPat.Tuple (false, ps, m) | SynPat.Paren(SynPat.Tuple (false, ps, m), _) -> - let ps2, laterf = + let ps2, laterF = List.foldBack (fun (p', rhsf) (ps', rhsf') -> p':: ps', @@ -1817,23 +1817,23 @@ let rec SimplePatsOfPat synArgNameGenerator p = (List.map (SimplePatOfPat synArgNameGenerator) ps) ([], None) SynSimplePats.SimplePats (ps2, m), - laterf + laterF | SynPat.Paren(SynPat.Const (SynConst.Unit, m), _) | SynPat.Const (SynConst.Unit, m) -> SynSimplePats.SimplePats ([], m), None | _ -> let m = p.Range - let sp, laterf = SimplePatOfPat synArgNameGenerator p - SynSimplePats.SimplePats ([sp], m), laterf + let sp, laterF = SimplePatOfPat synArgNameGenerator p + SynSimplePats.SimplePats ([sp], m), laterF let PushPatternToExpr synArgNameGenerator isMember pat (rhs: SynExpr) = - let nowpats, laterf = SimplePatsOfPat synArgNameGenerator pat - nowpats, SynExpr.Lambda (isMember, false, nowpats, appFunOpt laterf rhs, rhs.Range) + let nowPats, laterF = SimplePatsOfPat synArgNameGenerator pat + nowPats, SynExpr.Lambda (isMember, false, nowPats, appFunOpt laterF rhs, rhs.Range) let private isSimplePattern pat = - let _nowpats, laterf = SimplePatsOfPat (SynArgNameGenerator()) pat - Option.isNone laterf + let _nowPats, laterF = SimplePatsOfPat (SynArgNameGenerator()) pat + Option.isNone laterF /// "fun (UnionCase x) (UnionCase y) -> body" /// ==> @@ -1950,15 +1950,15 @@ let mkSynDotBrackGet m mDot a b = SynExpr.DotIndexedGet (a, [SynIndexerArg.On let mkSynQMarkSet m a b c = mkSynTrifix m qmarkSet a b c let mkSynDotBrackSliceGet m mDot arr sliceArg = SynExpr.DotIndexedGet (arr, [sliceArg], mDot, m) -let mkSynDotBrackSeqSliceGet m mDot arr (argslist: list) = - let notsliced=[ for arg in argslist do +let mkSynDotBrackSeqSliceGet m mDot arr (argsList: list) = + let notSliced=[ for arg in argsList do match arg with | SynIndexerArg.One x -> yield x | _ -> () ] - if notsliced.Length = argslist.Length then - SynExpr.DotIndexedGet (arr, [SynIndexerArg.One (SynExpr.Tuple (false, notsliced, [], unionRanges (List.head notsliced).Range (List.last notsliced).Range))], mDot, m) + if notSliced.Length = argsList.Length then + SynExpr.DotIndexedGet (arr, [SynIndexerArg.One (SynExpr.Tuple (false, notSliced, [], unionRanges (List.head notSliced).Range (List.last notSliced).Range))], mDot, m) else - SynExpr.DotIndexedGet (arr, argslist, mDot, m) + SynExpr.DotIndexedGet (arr, argsList, mDot, m) let mkSynDotParenGet lhsm dotm a b = match b with @@ -2206,7 +2206,7 @@ let mkSynBindingRhs staticOptimizations rhsExpr mRhs retInfo = let rhsExpr = List.foldBack (fun (c, e1) e2 -> SynExpr.LibraryOnlyStaticOptimization (c, e1, e2, mRhs)) staticOptimizations rhsExpr let rhsExpr, retTyOpt = match retInfo with - | Some (SynReturnInfo((ty, SynArgInfo(rattribs, _, _)), tym)) -> SynExpr.Typed (rhsExpr, ty, rhsExpr.Range), Some(SynBindingReturnInfo(ty, tym, rattribs) ) + | Some (SynReturnInfo((ty, SynArgInfo(rAttribs, _, _)), tym)) -> SynExpr.Typed (rhsExpr, ty, rhsExpr.Range), Some(SynBindingReturnInfo(ty, tym, rAttribs) ) | None -> rhsExpr, None rhsExpr, retTyOpt diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index bfecea2a16..ff5263718f 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -405,7 +405,7 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, g: TcGlobals, // Note: The value may be (null:Object). // Note: A System.Type allows the value printer guide printing of nulls, e.g. as None or []. //------- - // IlxGen knows what the v:Val was converted to w.r.t. AbsIL datastructures. + // IlxGen knows what the v:Val was converted to w.r.t. AbsIL data structures. // Ilreflect knows what the AbsIL was generated to. // Combining these allows for obtaining the (obj,objTy) by reflection where possible. // This assumes the v:Val was given appropriate storage, e.g. StaticField. @@ -1254,7 +1254,7 @@ type internal FsiDynamicCompiler with e -> tcConfigB.RemoveReferencedAssemblyByPath(m,path) reraise() - let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) istate.optEnv ccuinfos + let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) istate.optEnv ccuinfos istate.ilxGenerator.AddExternalCcus (ccuinfos |> List.map (fun ccuinfo -> ccuinfo.FSharpViewOfMetadata)) resolutions, { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnv); optEnv = optEnv } @@ -1401,7 +1401,7 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = - // Fsi Interupt handler + // Fsi Interrupt handler let raiseCtrlC() = use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) @@ -1623,11 +1623,11 @@ type internal FsiStdinLexerProvider let isFeatureSupported featureId = tcConfigB.langVersion.SupportsFeature featureId - let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readf = + let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readF = UnicodeLexing.FunctionAsLexbuf (isFeatureSupported, (fun (buf: char[], start, len) -> //fprintf fsiConsoleOutput.Out "Calling ReadLine\n" - let inputOption = try Some(readf()) with :? EndOfStreamException -> None + let inputOption = try Some(readF()) with :? EndOfStreamException -> None inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) match inputOption with | Some(null) | None -> @@ -2699,7 +2699,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i DriveFsiEventLoop (fsi, fsiConsoleOutput ) else // not interact - if !progress then fprintfn fsiConsoleOutput.Out "Run: not interact, loading intitial files..." + if !progress then fprintfn fsiConsoleOutput.Out "Run: not interact, loading initial files..." fsiInteractionProcessor.LoadInitialFiles(ctokRun, errorLogger) if !progress then fprintfn fsiConsoleOutput.Out "Run: done..." @@ -2749,7 +2749,7 @@ module Settings = abstract Invoke : (unit -> 'T) -> 'T abstract ScheduleRestart : unit -> unit - // fsi.fs in FSHarp.Compiler.Sevice.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll + // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll // by providing an optional reimplementation of the functionality // An implementation of IEventLoop suitable for the command-line console diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 8cc0b23fed..bed1b74e61 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -125,10 +125,10 @@ type FsiEvaluationSession = /// Create an FsiEvaluationSession, reading from the given text input, writing to the given text output and error writers /// /// The dynamic configuration of the evaluation session - /// The commmand line arguments for the evaluation session + /// The command line arguments for the evaluation session /// Read input from the given reader /// Write output to the given writer - /// Optionally make the dynamic assmbly for the session collectible + /// Optionally make the dynamic assembly for the session collectible static member Create : fsiConfig: FsiEvaluationSessionHostConfig * argv:string[] * inReader:TextReader * outWriter:TextWriter * errorWriter: TextWriter * ?collectible: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver -> FsiEvaluationSession /// A host calls this to request an interrupt on the evaluation thread. @@ -177,7 +177,7 @@ type FsiEvaluationSession = /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest /// of the input. Errors are sent to the output writer. Parsing is performed on the current thread, and execution is performed - /// sycnhronously on the 'main' thread. + /// synchronously on the 'main' thread. /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. @@ -187,7 +187,7 @@ type FsiEvaluationSession = /// implicit termination at the end of the input. Stop on first error, discarding the rest /// of the input. Errors and warnings are collected apart from any exception arising from execution /// which is returned via a Choice. Parsing is performed on the current thread, and execution is performed - /// sycnhronously on the 'main' thread. + /// synchronously on the 'main' thread. /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. @@ -222,7 +222,7 @@ type FsiEvaluationSession = /// Get a handle to the resolved view of the current signature of the incrementally generated assembly. member CurrentPartialAssemblySignature : FSharpAssemblySignature - /// Get a handle to the dynamicly generated assembly + /// Get a handle to the dynamically generated assembly member DynamicAssembly : System.Reflection.Assembly /// A host calls this to determine if the --gui parameter is active @@ -320,7 +320,7 @@ module Settings = /// A default implementation of the 'fsi' object, used by GetDefaultConfiguration(). Note this /// is a different object to FSharp.Compiler.Interactive.Settings.fsi in FSharp.Compiler.Interactive.Settings.dll, - /// which can be used as an alternative implementation of the interactiev settings if passed as a parameter + /// which can be used as an alternative implementation of the interactive settings if passed as a parameter /// to GetDefaultConfiguration(fsiObj). val fsi : InteractiveSettings diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 4ca16f77cd..0231d5f2ab 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -1077,7 +1077,7 @@ type MethInfo = /// For an extension method this includes all type parameters, even if it is extending a generic type. member x.GenericArity = x.FormalMethodTypars.Length - member x.IsProtectedAccessiblity = + member x.IsProtectedAccessibility = match x with | ILMeth(_, ilmeth, _) -> ilmeth.IsProtectedAccessibility | FSMeth _ -> false @@ -2476,7 +2476,7 @@ type EventInfo = /// Test whether two event infos have the same underlying definition. /// Must be compatible with ItemsAreEffectivelyEqual relation. - static member EventInfosUseIdenticalDefintions x1 x2 = + static member EventInfosUseIdenticalDefinitions x1 x2 = match x1, x2 with | FSEvent(g, pi1, vrefa1, vrefb1), FSEvent(_, pi2, vrefa2, vrefb2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2 && valRefEq g vrefa1 vrefa2 && valRefEq g vrefb1 vrefb2 diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index d63a8f8f02..f6e35cfb61 100644 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -389,7 +389,7 @@ type LayoutRenderer<'a, 'b> = let renderL (rr: LayoutRenderer<_, _>) layout = let rec addL z pos i layout k = match layout with - | ObjLeaf _ -> failwith "ObjLeaf should never apper here" + | ObjLeaf _ -> failwith "ObjLeaf should never appear here" (* pos is tab level *) | Leaf (_, text, _) -> k(rr.AddText z text, i + text.Text.Length) diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 6c4599f8a1..f626cdd022 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -98,31 +98,31 @@ module Check = /// Throw System.InvalidOperationException() if argument is None. /// If there is a value (e.g. Some(value)) then value is returned. - let NotNone argname (arg:'T option) : 'T = + let NotNone argName (arg:'T option) : 'T = match arg with - | None -> raise (new System.InvalidOperationException(argname)) + | None -> raise (new System.InvalidOperationException(argName)) | Some x -> x /// Throw System.ArgumentNullException() if argument is null. - let ArgumentNotNull arg argname = + let ArgumentNotNull arg argName = match box(arg) with - | null -> raise (new System.ArgumentNullException(argname)) + | null -> raise (new System.ArgumentNullException(argName)) | _ -> () /// Throw System.ArgumentNullException() if array argument is null. /// Throw System.ArgumentOutOfRangeException() is array argument is empty. - let ArrayArgumentNotNullOrEmpty (arr:'T[]) argname = - ArgumentNotNull arr argname + let ArrayArgumentNotNullOrEmpty (arr:'T[]) argName = + ArgumentNotNull arr argName if (0 = arr.Length) then - raise (new System.ArgumentOutOfRangeException(argname)) + raise (new System.ArgumentOutOfRangeException(argName)) /// Throw System.ArgumentNullException() if string argument is null. /// Throw System.ArgumentOutOfRangeException() is string argument is empty. - let StringArgumentNotNullOrEmpty (s:string) argname = - ArgumentNotNull s argname + let StringArgumentNotNullOrEmpty (s:string) argName = + ArgumentNotNull s argName if s.Length = 0 then - raise (new System.ArgumentNullException(argname)) + raise (new System.ArgumentNullException(argName)) //------------------------------------------------------------------------- // Library @@ -378,10 +378,10 @@ let nullableSlotFull x = x type cache<'T> = { mutable cacheVal: 'T NonNullSlot } let newCache() = { cacheVal = nullableSlotEmpty() } -let inline cached cache resf = +let inline cached cache resF = match box cache.cacheVal with | null -> - let res = resf() + let res = resF() cache.cacheVal <- nullableSlotFull res res | _ -> @@ -419,11 +419,11 @@ module internal AsyncUtil = | AsyncCanceled of OperationCanceledException static member Commit(res:AsyncResult<'T>) = - Async.FromContinuations (fun (cont, econt, ccont) -> + Async.FromContinuations (fun (cont, eCont, cCont) -> match res with | AsyncOk v -> cont v - | AsyncException exn -> econt exn - | AsyncCanceled exn -> ccont exn) + | AsyncException exn -> eCont exn + | AsyncCanceled exn -> cCont exn) /// When using .NET 4.0 you can replace this type by [] @@ -446,7 +446,7 @@ module internal AsyncUtil = else result <- Some res // Invoke continuations in FIFO order - // Continuations that Async.FromContinuations provide do QUWI/SynchContext.Post, + // Continuations that Async.FromContinuations provide do QUWI/SyncContext.Post, // so the order is not overly relevant but still. List.rev savedConts) let postOrQueue (sc:SynchronizationContext, cont) = diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs index 0b6d7d3963..e9b44a6397 100755 --- a/src/fsharp/range.fs +++ b/src/fsharp/range.fs @@ -208,8 +208,8 @@ let mkPos l c = pos (l, c) #endif type range(code1:int64, code2: int64) = static member Zero = range(0L, 0L) - new (fidx, bl, bc, el, ec) = - let code1 = ((int64 fidx) &&& fileIndexMask) + new (fIdx, bl, bc, el, ec) = + let code1 = ((int64 fIdx) &&& fileIndexMask) ||| ((int64 bc <<< startColumnShift) &&& startColumnMask) ||| ((int64 ec <<< endColumnShift) &&& endColumnMask) let code2 = @@ -217,7 +217,7 @@ type range(code1:int64, code2: int64) = ||| ((int64 (el-bl) <<< heightShift) &&& heightMask) range(code1, code2) - new (fidx, b:pos, e:pos) = range(fidx, b.Line, b.Column, e.Line, e.Column) + new (fIdx, b:pos, e:pos) = range(fIdx, b.Line, b.Column, e.Line, e.Column) member r.StartLine = int32((code2 &&& startLineMask) >>> startLineShift) diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index d17b56c085..c3990eb132 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -1353,7 +1353,7 @@ type internal TypeCheckInfo | CNR(_, (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use, _, _, _, m) -> Some (m, SemanticClassificationType.ComputationExpression) // types get colored as types when they occur in syntactic types or custom attributes - // typevariables get colored as types when they occur in syntactic types custom builders, custom operations get colored as keywords + // type variables get colored as types when they occur in syntactic types custom builders, custom operations get colored as keywords | CNR(_, Item.Types (_, [OptionalArgumentAttribute]), LegitTypeOccurence, _, _, _, _) -> None | CNR(_, Item.CtorGroup(_, [MethInfo.FSMeth(_, OptionalArgumentAttribute, _, _)]), LegitTypeOccurence, _, _, _, _) -> None | CNR(_, Item.Types(_, types), LegitTypeOccurence, _, _, _, m) when types |> List.exists (isInterfaceTy g) -> @@ -1446,7 +1446,7 @@ type FSharpParsingOptions = CompilingFsLib = tcConfig.compilingFslib IsExe = tcConfig.target.IsExe } - static member FromTcConfigBuidler(tcConfigB: TcConfigBuilder, sourceFiles, isInteractive: bool) = + static member FromTcConfigBuilder(tcConfigB: TcConfigBuilder, sourceFiles, isInteractive: bool) = { SourceFiles = sourceFiles ConditionalCompilationDefines = tcConfigB.conditionalCompilationDefines @@ -2104,7 +2104,7 @@ type FSharpCheckProjectResults let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() FSharpAssemblySignature(tcGlobals, thisCcu, ccuSig, tcImports, topAttribs, ccuSig) - member __.TypedImplementionFiles = + member __.TypedImplementationFiles = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() let mimpls = diff --git a/src/fsharp/service/FSharpCheckerResults.fsi b/src/fsharp/service/FSharpCheckerResults.fsi index 4f7062d9ce..13496225bf 100644 --- a/src/fsharp/service/FSharpCheckerResults.fsi +++ b/src/fsharp/service/FSharpCheckerResults.fsi @@ -89,7 +89,7 @@ type public FSharpParsingOptions = static member internal FromTcConfig: tcConfig: TcConfig * sourceFiles: string[] * isInteractive: bool -> FSharpParsingOptions - static member internal FromTcConfigBuidler: tcConfigB: TcConfigBuilder * sourceFiles: string[] * isInteractive: bool -> FSharpParsingOptions + static member internal FromTcConfigBuilder: tcConfigB: TcConfigBuilder * sourceFiles: string[] * isInteractive: bool -> FSharpParsingOptions /// A handle to the results of CheckFileInProject. [] diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 96e81e3214..ce24bbcb16 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -253,9 +253,9 @@ module internal IncrementalBuild = static member OfSize size = ResultVector(size, DateTime.MinValue, Map.empty) member rv.Size = size member rv.Get slot = get slot - member rv.Resize newsize = - if size<>newsize then - ResultVector(newsize, zeroElementTimestamp, map |> Map.filter(fun s _ -> s < newsize)) + member rv.Resize newSize = + if size<>newSize then + ResultVector(newSize, zeroElementTimestamp, map |> Map.filter(fun s _ -> s < newSize)) else rv member rv.Set(slot, value) = @@ -266,7 +266,7 @@ module internal IncrementalBuild = ResultVector(size, zeroElementTimestamp, Map.add slot value map) member rv.MaxTimestamp() = - let maximize (lasttimestamp: DateTime) (_, result: Result) = max lasttimestamp result.Timestamp + let maximize (lastTimestamp: DateTime) (_, result: Result) = max lastTimestamp result.Timestamp List.fold maximize zeroElementTimestamp (asList.Force()) member rv.Signature() = @@ -416,16 +416,16 @@ module internal IncrementalBuild = /// Get the maximum build stamp for an output. let MaxTimestamp(bt: PartialBuild, id) = match bt.Results.TryFind id with - | Some resultset -> - match resultset with + | Some resultSet -> + match resultSet with | ScalarResult rs -> rs.Timestamp | VectorResult rv -> rv.MaxTimestamp() | None -> DateTime.MaxValue let Signature(bt: PartialBuild, id) = match bt.Results.TryFind id with - | Some resultset -> - match resultset with + | Some resultSet -> + match resultSet with | ScalarResult rs -> rs.InputSignature | VectorResult rv -> rv.Signature() | None -> UnevaluatedInput @@ -515,9 +515,9 @@ module internal IncrementalBuild = seen.[id] <- true false - let shouldEvaluate(bt, currentsig: InputSignature, id) = - if currentsig.IsEvaluated then - currentsig <> Signature(bt, id) + let shouldEvaluate(bt, currentSig: InputSignature, id) = + if currentSig.IsEvaluated then + currentSig <> Signature(bt, id) else false /// Make sure the result vector saved matches the size of expr @@ -555,20 +555,20 @@ module internal IncrementalBuild = let inputResult = GetVectorExprResult (bt, inputExpr, slot) match accumulatorResult, inputResult with - | Available (accumulator, accumulatortimesamp, _accumulatorInputSig), Available (input, inputtimestamp, _inputSig) -> - let inputtimestamp = max inputtimestamp accumulatortimesamp - let prevoutput = GetVectorExprResult (bt, ve, slot) - let outputtimestamp = prevoutput.Timestamp + | Available (accumulator, accumulatorTimestamp, _accumulatorInputSig), Available (input, inputTimestamp, _inputSig) -> + let inputTimestamp = max inputTimestamp accumulatorTimestamp + let prevOutput = GetVectorExprResult (bt, ve, slot) + let outputTimestamp = prevOutput.Timestamp let scanOpOpt = - if inputtimestamp <> outputtimestamp then + if inputTimestamp <> outputTimestamp then Some (fun ctok -> func ctok accumulator input) - elif prevoutput.ResultIsInProgress then - Some prevoutput.GetInProgressContinuation + elif prevOutput.ResultIsInProgress then + Some prevOutput.GetInProgressContinuation else // up-to-date and complete, no work required None match scanOpOpt with - | Some scanOp -> Some (actionFunc (IndexedAction(id, taskname, slot, cardinality, inputtimestamp, scanOp)) acc) + | Some scanOp -> Some (actionFunc (IndexedAction(id, taskname, slot, cardinality, inputTimestamp, scanOp)) acc) | None -> None | _ -> None @@ -584,19 +584,19 @@ module internal IncrementalBuild = | Some cardinality -> if cardinality=0 then // For vector length zero, just propagate the prior timestamp. - let inputtimestamp = MaxTimestamp(bt, inputExpr.Id) - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then - actionFunc (VectorAction(id, taskname, inputtimestamp, EmptyTimeStampedInput inputtimestamp, fun _ -> cancellable.Return [||])) acc + let inputTimestamp = MaxTimestamp(bt, inputExpr.Id) + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then + actionFunc (VectorAction(id, taskname, inputTimestamp, EmptyTimeStampedInput inputTimestamp, fun _ -> cancellable.Return [||])) acc else acc else let MapResults acc slot = - let inputtimestamp = GetVectorExprResult(bt, inputExpr, slot).Timestamp - let outputtimestamp = GetVectorExprResult(bt, ve, slot).Timestamp - if inputtimestamp <> outputtimestamp then + let inputTimestamp = GetVectorExprResult(bt, inputExpr, slot).Timestamp + let outputTimestamp = GetVectorExprResult(bt, ve, slot).Timestamp + if inputTimestamp <> outputTimestamp then let OneToOneOp ctok = Eventually.Done (func ctok (GetVectorExprResult(bt, inputExpr, slot).GetAvailable())) - actionFunc (IndexedAction(id, taskname, slot, cardinality, inputtimestamp, OneToOneOp)) acc + actionFunc (IndexedAction(id, taskname, slot, cardinality, inputTimestamp, OneToOneOp)) acc else acc match optSlot with | None -> @@ -615,20 +615,20 @@ module internal IncrementalBuild = | Some cardinality -> if cardinality=0 then // For vector length zero, just propagate the prior timestamp. - let inputtimestamp = MaxTimestamp(bt, inputExpr.Id) - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then - actionFunc (VectorAction(id, taskname, inputtimestamp, EmptyTimeStampedInput inputtimestamp, fun _ -> cancellable.Return [||])) acc + let inputTimestamp = MaxTimestamp(bt, inputExpr.Id) + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then + actionFunc (VectorAction(id, taskname, inputTimestamp, EmptyTimeStampedInput inputTimestamp, fun _ -> cancellable.Return [||])) acc else acc else let checkStamp acc slot = - let inputresult = GetVectorExprResult (bt, inputExpr, slot) - match inputresult with + let inputResult = GetVectorExprResult (bt, inputExpr, slot) + match inputResult with | Available (ires, _, _) -> - let oldtimestamp = GetVectorExprResult(bt, ve, slot).Timestamp - let newtimestamp = func cache ctok ires - if newtimestamp <> oldtimestamp then - actionFunc (IndexedAction(id, taskname, slot, cardinality, newtimestamp, fun _ -> Eventually.Done ires)) acc + let oldTimestamp = GetVectorExprResult(bt, ve, slot).Timestamp + let newTimestamp = func cache ctok ires + if newTimestamp <> oldTimestamp then + actionFunc (IndexedAction(id, taskname, slot, cardinality, newTimestamp, fun _ -> Eventually.Done ires)) acc else acc | _ -> acc match optSlot with @@ -642,11 +642,11 @@ module internal IncrementalBuild = | VectorMultiplex(id, taskname, inputExpr, func) -> let acc = match GetScalarExprResult (bt, inputExpr) with - | Available (inp, inputtimestamp, inputsig) -> - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then + | Available (inp, inputTimestamp, inputsig) -> + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then let MultiplexOp ctok = func ctok inp |> cancellable.Return - actionFunc (VectorAction(id, taskname, inputtimestamp, inputsig, MultiplexOp)) acc + actionFunc (VectorAction(id, taskname, inputTimestamp, inputsig, MultiplexOp)) acc else acc | _ -> acc visitScalar inputExpr acc @@ -659,16 +659,16 @@ module internal IncrementalBuild = | ScalarDemultiplex (id, taskname, inputExpr, func) -> let acc = match GetVectorExprResultVector (bt, inputExpr) with - | Some inputresult -> - let currentsig = inputresult.Signature() - if shouldEvaluate(bt, currentsig, id) then - let inputtimestamp = MaxTimestamp(bt, inputExpr.Id) + | Some inputResult -> + let currentSig = inputResult.Signature() + if shouldEvaluate(bt, currentSig, id) then + let inputTimestamp = MaxTimestamp(bt, inputExpr.Id) let DemultiplexOp ctok = cancellable { let input = AvailableAllResultsOfExpr bt inputExpr |> List.toArray return! func ctok input } - actionFunc (ScalarAction(id, taskname, inputtimestamp, currentsig, DemultiplexOp)) acc + actionFunc (ScalarAction(id, taskname, inputTimestamp, currentSig, DemultiplexOp)) acc else acc | None -> acc @@ -677,11 +677,11 @@ module internal IncrementalBuild = | ScalarMap (id, taskname, inputExpr, func) -> let acc = match GetScalarExprResult (bt, inputExpr) with - | Available (inp, inputtimestamp, inputsig) -> - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then + | Available (inp, inputTimestamp, inputsig) -> + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then let MapOp ctok = func ctok inp |> cancellable.Return - actionFunc (ScalarAction(id, taskname, inputtimestamp, inputsig, MapOp)) acc + actionFunc (ScalarAction(id, taskname, inputTimestamp, inputsig, MapOp)) acc else acc | _ -> acc @@ -782,10 +782,10 @@ module internal IncrementalBuild = if gen>5000 then failwith "Infinite loop in incremental builder?" #endif - let worklist = CollectActions cache target bt + let workList = CollectActions cache target bt let! newBt = - (bt, worklist) ||> Cancellable.fold (fun bt action -> + (bt, workList) ||> Cancellable.fold (fun bt action -> if injectCancellationFault then Cancellable.canceled() else @@ -800,9 +800,9 @@ module internal IncrementalBuild = cancellable { // REVIEW: we're building up the whole list of actions on the fringe of the work tree, // executing one thing and then throwing the list away. What about saving the list inside the Build instance? - let worklist = CollectActions cache target bt + let workList = CollectActions cache target bt - match worklist with + match workList with | action :: _ -> let! res = ExecuteApply ctok save action bt return Some res @@ -822,8 +822,8 @@ module internal IncrementalBuild = /// Check if an output is up-to-date and ready let IsReady cache target bt = - let worklist = CollectActions cache target bt - worklist.IsEmpty + let workList = CollectActions cache target bt + workList.IsEmpty /// Check if an output is up-to-date and ready let MaxTimeStampInDependencies cache ctok target bt = @@ -972,7 +972,7 @@ module internal IncrementalBuild = -// Record the most recent IncrementalBuilder events, so we can more easily unittest/debug the +// Record the most recent IncrementalBuilder events, so we can more easily unit test/debug the // 'incremental' behavior of the product. module IncrementalBuilderEventTesting = @@ -1054,7 +1054,7 @@ type TypeCheckAccumulator = /// Global service state type FrameworkImportsCacheKey = (*resolvedpath*)string list * string * (*TargetFrameworkDirectories*)string list * (*fsharpBinaries*)string * (*langVersion*)decimal -/// Represents a cache of 'framework' references that can be shared betweeen multiple incremental builds +/// Represents a cache of 'framework' references that can be shared between multiple incremental builds type FrameworkImportsCache(keepStrongly) = // Mutable collection protected via CompilationThreadToken @@ -1087,7 +1087,7 @@ type FrameworkImportsCache(keepStrongly) = tcConfig.primaryAssembly.Name, tcConfig.GetTargetFrameworkDirectories(), tcConfig.fsharpBinariesDir, - tcConfig.langVersion.SpecifiedVerson) + tcConfig.langVersion.SpecifiedVersion) match frameworkTcImportsCache.TryGet (ctok, key) with | Some res -> return res @@ -1141,7 +1141,7 @@ type PartialCheckResults = LatestImplementationFile: TypedImplFile option - LastestCcuSigForFile: ModuleOrNamespaceType option } + LatestCcuSigForFile: ModuleOrNamespaceType option } member x.TcErrors = Array.concat (List.rev x.TcErrorsRev) member x.TcSymbolUses = List.rev x.TcSymbolUsesRev @@ -1161,7 +1161,7 @@ type PartialCheckResults = ModuleNamesDict = tcAcc.tcModuleNamesDict TimeStamp = timestamp LatestImplementationFile = tcAcc.latestImplFile - LastestCcuSigForFile = tcAcc.latestCcuSigForFile } + LatestCcuSigForFile = tcAcc.latestCcuSigForFile } [] @@ -1722,9 +1722,9 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput /// Create a type-check configuration let tcConfigB, sourceFilesNew = - let getSwitchValue switchstring = - match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWithOrdinal switchstring) with - | Some idx -> Some(commandLineArgs.[idx].Substring(switchstring.Length)) + let getSwitchValue switchString = + match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWithOrdinal switchString) with + | Some idx -> Some(commandLineArgs.[idx].Substring(switchString.Length)) | _ -> None // see also fsc.fs: runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB @@ -1810,7 +1810,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput [ for r in nonFrameworkResolutions do let fileName = r.resolvedPath - yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) _ctokk -> cache.GetFileTimeStamp fileName)) + yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) _ctok -> cache.GetFileTimeStamp fileName)) for pr in projectReferences do yield Choice2Of2 pr, (fun (cache: TimeStampCache) ctok -> cache.GetProjectReferenceTimeStamp (pr, ctok)) ] diff --git a/src/fsharp/service/IncrementalBuild.fsi b/src/fsharp/service/IncrementalBuild.fsi index 96d0063688..fb60dbff69 100755 --- a/src/fsharp/service/IncrementalBuild.fsi +++ b/src/fsharp/service/IncrementalBuild.fsi @@ -60,7 +60,7 @@ type internal PartialCheckResults = TcDependencyFiles: string list - /// Represents the collected attributes to apply to the module of assuembly generates + /// Represents the collected attributes to apply to the module of assembly generates TopAttribs: TypeChecker.TopAttribs option TimeStamp: DateTime @@ -70,7 +70,7 @@ type internal PartialCheckResults = LatestImplementationFile: TypedImplFile option /// Represents latest inferred signature contents. - LastestCcuSigForFile: ModuleOrNamespaceType option} + LatestCcuSigForFile: ModuleOrNamespaceType option} member TcErrors: (PhasedDiagnostic * FSharpErrorSeverity)[] @@ -163,7 +163,7 @@ type internal IncrementalBuilder = static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool -> Cancellable -/// Generalized Incremental Builder. This is exposed only for unittesting purposes. +/// Generalized Incremental Builder. This is exposed only for unit testing purposes. module internal IncrementalBuild = type INode = abstract Name: string diff --git a/src/fsharp/service/QuickParse.fs b/src/fsharp/service/QuickParse.fs index b431f2557b..434a0312da 100644 --- a/src/fsharp/service/QuickParse.fs +++ b/src/fsharp/service/QuickParse.fs @@ -20,10 +20,10 @@ type PartialLongName = /// Position of the last dot. LastDotPos: int option } - /// Empty patial long name. + /// Empty partial long name. static member Empty(endColumn: int) = { QualifyingIdents = []; PartialIdent = ""; EndColumn = endColumn; LastDotPos = None } -/// Methods for cheaply and innacurately parsing F#. +/// Methods for cheaply and inaccurately parsing F#. /// /// These methods are very old and are mostly to do with extracting "long identifier islands" /// A.B.C @@ -58,7 +58,7 @@ module QuickParse = // Utility function that recognizes whether a name is valid active pattern name // Extracts the 'core' part without surrounding bars and checks whether it contains some identifier - // (Note, this doesn't have to be precise, because this is checked by backround compiler, + // (Note, this doesn't have to be precise, because this is checked by background compiler, // but it has to be good enough to distinguish operators and active pattern names) let private isValidActivePatternName (name: string) = @@ -152,7 +152,7 @@ module QuickParse = /// In general, only identifiers composed from upper/lower letters and '.' are supported, but there /// are a couple of explicitly handled exceptions to allow some common scenarios: /// - When the name contains only letters and '|' symbol, it may be an active pattern, so we - /// treat it as a valid identifier - e.g. let ( |Identitiy| ) a = a + /// treat it as a valid identifier - e.g. let ( |Identity| ) a = a /// (but other identifiers that include '|' are not allowed - e.g. '||' operator) /// - It searches for double tick (``) to see if the identifier could be something like ``a b`` /// diff --git a/src/fsharp/service/QuickParse.fsi b/src/fsharp/service/QuickParse.fsi index 5f78dbefd2..3c2adfd0df 100644 --- a/src/fsharp/service/QuickParse.fsi +++ b/src/fsharp/service/QuickParse.fsi @@ -19,10 +19,10 @@ type public PartialLongName = /// Position of the last dot. LastDotPos: int option } - /// Empty patial long name. + /// Empty partial long name. static member Empty: endColumn: int -> PartialLongName -/// Methods for cheaply and innacurately parsing F#. +/// Methods for cheaply and inaccurately parsing F#. /// /// These methods are very old and are mostly to do with extracting "long identifier islands" /// A.B.C @@ -57,7 +57,7 @@ module public QuickParse = /// In general, only identifiers composed from upper/lower letters and '.' are supported, but there /// are a couple of explicitly handled exceptions to allow some common scenarios: /// - When the name contains only letters and '|' symbol, it may be an active pattern, so we - /// treat it as a valid identifier - e.g. let ( |Identitiy| ) a = a + /// treat it as a valid identifier - e.g. let ( |Identity| ) a = a /// (but other identifiers that include '|' are not allowed - e.g. '||' operator) /// - It searches for double tick (``) to see if the identifier could be something like ``a b`` /// diff --git a/src/fsharp/service/Reactor.fs b/src/fsharp/service/Reactor.fs index f879e5133f..b4c487caeb 100755 --- a/src/fsharp/service/Reactor.fs +++ b/src/fsharp/service/Reactor.fs @@ -34,7 +34,7 @@ type Reactor() = let mutable pauseBeforeBackgroundWork = pauseBeforeBackgroundWorkDefault // We need to store the culture for the VS thread that is executing now, - // so that when the reactor picks up a thread from the threadpool we can set the culture + // so that when the reactor picks up a thread from the thread pool we can set the culture let mutable culture = CultureInfo(CultureInfo.CurrentUICulture.Name) let mutable bgOpCts = new CancellationTokenSource() diff --git a/src/fsharp/service/ServiceAnalysis.fs b/src/fsharp/service/ServiceAnalysis.fs index e4f942b657..d9630ab77a 100644 --- a/src/fsharp/service/ServiceAnalysis.fs +++ b/src/fsharp/service/ServiceAnalysis.fs @@ -203,7 +203,7 @@ module UnusedOpens = let filterOpenStatements (symbolUses1: FSharpSymbolUse[], symbolUses2: FSharpSymbolUse[]) openStatements = async { // the key is a namespace or module, the value is a list of FSharpSymbolUse range of symbols defined in the - // namespace or module. So, it's just symbol uses ranges groupped by namespace or module where they are _defined_. + // namespace or module. So, it's just symbol uses ranges grouped by namespace or module where they are _defined_. let symbolUsesRangesByDeclaringEntity = Dictionary(entityHash) for symbolUse in symbolUses1 do match symbolUse.Symbol with diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index 8ceb381225..4fc27df4ad 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -238,16 +238,16 @@ module AssemblyContentProvider = |> Seq.filter (fun x -> not x.IsInstanceMember && not x.IsPropertyGetterMethod && not x.IsPropertySetterMethod) |> Seq.collect (fun func -> let processIdents fullName idents = - let cleanedIdentes = parent.FixParentModuleSuffix idents + let cleanedIdents = parent.FixParentModuleSuffix idents { FullName = fullName - CleanedIdents = cleanedIdentes + CleanedIdents = cleanedIdents Namespace = ns NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix TopRequireQualifiedAccessParent = topRequireQualifiedAccessParent AutoOpenParent = autoOpenParent Symbol = func Kind = fun _ -> EntityKind.FunctionOrValue func.IsActivePattern - UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanedIdentes fullName } + UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanedIdents fullName } [ yield! func.TryGetFullDisplayName() |> Option.map (fun fullDisplayName -> processIdents func.FullName (fullDisplayName.Split '.')) @@ -948,8 +948,8 @@ module ParsedInput = let fullIdent = parent @ ident addModule (fullIdent, range) if range.EndLine >= currentLine then - let moduleBodyIdentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) - doRange NestedModule fullIdent range.StartLine moduleBodyIdentation + let moduleBodyIndentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) + doRange NestedModule fullIdent range.StartLine moduleBodyIndentation List.iter (walkSynModuleDecl fullIdent) decls | SynModuleDecl.Open (_, range) -> doRange OpenDeclaration [] range.EndLine (range.StartColumn - 5) | SynModuleDecl.HashDirective (_, range) -> doRange HashDirective [] range.EndLine range.StartColumn @@ -1008,9 +1008,9 @@ module ParsedInput = if ctx.Pos.Line > 1 then // it's an implicit module without any open declarations let line = getLineStr (ctx.Pos.Line - 2) - let isImpliciteTopLevelModule = + let isImplicitTopLevelModule = not (line.StartsWithOrdinal("module") && not (line.EndsWithOrdinal("="))) - if isImpliciteTopLevelModule then 1 else ctx.Pos.Line + if isImplicitTopLevelModule then 1 else ctx.Pos.Line else 1 | ScopeKind.Namespace -> // for namespaces the start line is start line of the first nested entity diff --git a/src/fsharp/service/ServiceAssemblyContent.fsi b/src/fsharp/service/ServiceAssemblyContent.fsi index 0fe14c1144..f9e9699cb7 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fsi +++ b/src/fsharp/service/ServiceAssemblyContent.fsi @@ -44,7 +44,7 @@ type public AssemblySymbol = { /// Full entity name as it's seen in compiled code (raw FSharpEntity.FullName, FSharpValueOrFunction.FullName). FullName: string /// Entity name parts with removed module suffixes (Ns.M1Module.M2Module.M3.entity -> Ns.M1.M2.M3.entity) - /// and replaced compiled names with display names (FSharpEntity.DisplayName, FSharpValueOrFucntion.DisplayName). + /// and replaced compiled names with display names (FSharpEntity.DisplayName, FSharpValueOrFunction.DisplayName). /// Note: *all* parts are cleaned, not the last one. CleanedIdents: Idents /// `FSharpEntity.Namespace`. @@ -87,10 +87,10 @@ type public EntityCache = /// Performs an operation on the cache in thread safe manner. member Locking : (IAssemblyContentCache -> 'T) -> 'T -/// Lond identifier (i.e. it may contain dots). +/// Long identifier (i.e. it may contain dots). type public StringLongIdent = string -/// Helper data structure representing a symbol, sutable for implementing unresolved identifiers resolution code fixes. +/// Helper data structure representing a symbol, suitable for implementing unresolved identifiers resolution code fixes. type public Entity = { /// Full name, relative to the current scope. FullRelativeName: StringLongIdent @@ -149,7 +149,7 @@ module public ParsedInput = /// Returns `InsertContext` based on current position and symbol idents. val findNearestPointToInsertOpenDeclaration : currentLine: int -> ast: Ast.ParsedInput -> entity: Idents -> insertionPoint: OpenStatementInsertionPoint -> InsertContext - /// Returns lond identifier at position. + /// Returns long identifier at position. val getLongIdentAt : ast: Ast.ParsedInput -> pos: Range.pos -> Ast.LongIdent option /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs index 2deb007359..c37ea56d90 100644 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -454,7 +454,7 @@ module internal LexerStateEncoding = let decodeLexInt (state: FSharpTokenizerLexState) = - let tag, n1, p1, ifd, lightSyntaxStatusInital = decodeLexCont state + let tag, n1, p1, ifd, lightSyntaxStatusInitial = decodeLexCont state let lexcont = match tag with | FSharpTokenizerColorState.Token -> LexCont.Token ifd @@ -471,7 +471,7 @@ module internal LexerStateEncoding = | FSharpTokenizerColorState.EndLineThenSkip -> LexCont.EndLine(LexerEndlineContinuation.Skip(ifd, n1, mkRange "file" p1 p1)) | FSharpTokenizerColorState.EndLineThenToken -> LexCont.EndLine(LexerEndlineContinuation.Token ifd) | _ -> LexCont.Token [] - lightSyntaxStatusInital, lexcont + lightSyntaxStatusInitial, lexcont let callLexCont lexcont args skip lexbuf = let argsWithIfDefs ifd = @@ -500,7 +500,7 @@ module internal LexerStateEncoding = //---------------------------------------------------------------------------- // Information beyond just tokens that can be derived by looking at just a single line. -// For example metacommands like #load. +// For example meta commands like #load. type SingleLineTokenState = | BeforeHash = 0 | NoFurtherMatchPossible = 1 @@ -595,11 +595,11 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> DiscardErrorsLogger) - let lightSyntaxStatusInital, lexcontInitial = LexerStateEncoding.decodeLexInt lexintInitial - let lightSyntaxStatus = LightSyntaxStatus(lightSyntaxStatusInital, false) + let lightSyntaxStatusInitial, lexcontInitial = LexerStateEncoding.decodeLexInt lexintInitial + let lightSyntaxStatus = LightSyntaxStatus(lightSyntaxStatusInitial, false) // Build the arguments to the lexer function - let lexargs = if lightSyntaxStatusInital then lexArgsLightOn else lexArgsLightOff + let lexargs = if lightSyntaxStatusInitial then lexArgsLightOn else lexArgsLightOff let GetTokenWithPosition lexcontInitial = // Column of token @@ -618,7 +618,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, try if (tokenStack.Count > 0) then true, tokenStack.Pop() else - // Choose which lexer entrypoint to call and call it + // Choose which lexer entry point to call and call it let token = LexerStateEncoding.callLexCont lexcontInitial lexargs skip lexbuf let leftc, rightc = ColumnsOfCurrentToken() @@ -722,8 +722,8 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, // Peek at the next token let isCached, (nextToken, _, rightc) = GetTokenWithPosition lexcontInitial match nextToken with - | IDENT possibleMetacommand -> - match fsx, possibleMetacommand with + | IDENT possibleMetaCommand -> + match fsx, possibleMetaCommand with // These are for script (.fsx and .fsscript) files. | true, "r" | true, "reference" diff --git a/src/fsharp/service/ServiceLexing.fsi b/src/fsharp/service/ServiceLexing.fsi index 85e18f171c..2ee5dfacaa 100755 --- a/src/fsharp/service/ServiceLexing.fsi +++ b/src/fsharp/service/ServiceLexing.fsi @@ -15,7 +15,7 @@ type FSharpTokenizerLexState = static member Initial : FSharpTokenizerLexState member Equals : FSharpTokenizerLexState -> bool -/// Represents stable information for the state of the laxing engine at the end of a line +/// Represents stable information for the state of the lexing engine at the end of a line type FSharpTokenizerColorState = | Token = 1 | IfDefSkip = 3 @@ -32,7 +32,7 @@ type FSharpTokenizerColorState = | TripleQuoteStringInComment = 14 | InitialState = 0 -/// Gives an indicattion of the color class to assign to the token an IDE +/// Gives an indication of the color class to assign to the token an IDE type FSharpTokenColorKind = | Default = 0 | Text = 0 diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs index 0640e9ef06..3578543b65 100755 --- a/src/fsharp/service/ServiceNavigation.fs +++ b/src/fsharp/service/ServiceNavigation.fs @@ -127,13 +127,13 @@ module NavigationImpl = FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) // Process let-binding - let processBinding isMember enclosingEntityKind isAbstract (Binding(_, _, _, _, _, _, SynValData(memebrOpt, _, _), synPat, _, synExpr, _, _)) = + let processBinding isMember enclosingEntityKind isAbstract (Binding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = let m = match synExpr with | SynExpr.Typed (e, _, _) -> e.Range // fix range for properties with type annotations | _ -> synExpr.Range - match synPat, memebrOpt with + match synPat, memberOpt with | SynPat.LongIdent(longDotId=LongIdentWithDots(lid,_); accessibility=access), Some(flags) when isMember -> let icon, kind = match flags.MemberKind with @@ -632,7 +632,7 @@ module NavigateTo = | SynMemberSig.Inherit _ | SynMemberSig.Interface _ -> () - and walkImplFileInpit (ParsedImplFileInput (fileName = fileName; modules = moduleOrNamespaceList)) = + and walkImplFileInput (ParsedImplFileInput (fileName = fileName; modules = moduleOrNamespaceList)) = let container = { Type = ContainerType.File; Name = fileName } for item in moduleOrNamespaceList do walkSynModuleOrNamespace item container @@ -732,7 +732,7 @@ module NavigateTo = match parsedInput with | ParsedInput.SigFile input -> walkSigFileInput input - | ParsedInput.ImplFile input -> walkImplFileInpit input + | ParsedInput.ImplFile input -> walkImplFileInput input result.ToArray() diff --git a/src/fsharp/service/ServiceStructure.fs b/src/fsharp/service/ServiceStructure.fs index 1bf31e27cf..56f2312da4 100644 --- a/src/fsharp/service/ServiceStructure.fs +++ b/src/fsharp/service/ServiceStructure.fs @@ -47,7 +47,7 @@ module Structure = | [] -> range0 | head :: _ -> Range.startToEnd head.idRange (List.last longId).idRange - /// Caclulate the range of the provided type arguments (<'a, ..., 'z>) + /// Calculate the range of the provided type arguments (<'a, ..., 'z>) /// or return the range `other` when `typeArgs` = [] let rangeOfTypeArgsElse other (typeArgs:SynTyparDecl list) = match typeArgs with @@ -77,7 +77,7 @@ module Structure = | Below | Same - /// Tag to identify the constuct that can be stored alongside its associated ranges + /// Tag to identify the construct that can be stored alongside its associated ranges [] type Scope = | Open @@ -177,7 +177,7 @@ module Structure = | Comment -> "Comment" | XmlDocComment -> "XmlDocComment" - /// Stores the range for a construct, the sub-range that should be collapsed for outlinging, + /// Stores the range for a construct, the sub-range that should be collapsed for outlining, /// a tag for the construct type, and a tag for the collapse style [] type ScopeRange = @@ -204,7 +204,7 @@ module Structure = let getOutliningRanges (sourceLines: string[]) (parsedInput: ParsedInput) = let acc = ResizeArray() - /// Validation function to ensure that ranges yielded for outlinging span 2 or more lines + /// Validation function to ensure that ranges yielded for outlining span 2 or more lines let inline rcheck scope collapse (fullRange: range) (collapseRange: range) = if fullRange.StartLine <> fullRange.EndLine then acc.Add { Scope = scope @@ -281,7 +281,7 @@ module Structure = if ExprAtomicFlag.NonAtomic=atomicFlag && (not isInfix) && (function SynExpr.Ident _ -> true | _ -> false) funcExpr && (function SynExpr.CompExpr _ -> false | _ -> true ) argExpr then - // if the argExrp is a computation expression another match will handle the outlining + // if the argExpr is a computation expression another match will handle the outlining // these cases must be removed to prevent creating unnecessary tags for the same scope let collapse = Range.endToEnd funcExpr.Range r rcheck Scope.SpecialFunc Collapse.Below r collapse @@ -624,7 +624,7 @@ module Structure = collectOpens decls List.iter parseDeclaration decls - /// Determine if a line is a single line or xml docummentation comment + /// Determine if a line is a single line or xml documentation comment let (|Comment|_|) (line: string) = if line.StartsWithOrdinal("///") then Some XmlDoc elif line.StartsWithOrdinal("//") then Some SingleLine diff --git a/src/fsharp/service/ServiceStructure.fsi b/src/fsharp/service/ServiceStructure.fsi index ef90f4627e..4eeefe529f 100644 --- a/src/fsharp/service/ServiceStructure.fsi +++ b/src/fsharp/service/ServiceStructure.fsi @@ -15,7 +15,7 @@ module public Structure = | Below | Same - /// Tag to identify the constuct that can be stored alongside its associated ranges + /// Tag to identify the construct that can be stored alongside its associated ranges [] type Scope = | Open diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceUntypedParse.fs index 84c8947d13..c087fe48a8 100755 --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -596,10 +596,10 @@ module UntypedParseImpl = AstTraversal.Traverse(pos, parseTree, walker) // Given a cursor position here: - // f(x) . iden + // f(x) . ident // ^ // walk the AST to find the position here: - // f(x) . iden + // f(x) . ident // ^ // On success, return Some (thatPos, boolTrueIfCursorIsAfterTheDotButBeforeTheIdentifier) // If there's no dot, return None, so for example diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 7eac7390c2..97a35f135b 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -131,7 +131,7 @@ module Helpers = && FSharpProjectOptions.UseSameProject(o1,o2) module CompileHelpers = - let mkCompilationErorHandlers() = + let mkCompilationErrorHandlers() = let errors = ResizeArray<_>() let errorSink isError exn = @@ -164,7 +164,7 @@ module CompileHelpers = /// Compile using the given flags. Source files names are resolved via the FileSystem API. The output file must be given by a -o flag. let compileFromArgs (ctok, argv: string[], legacyReferenceResolver, tcImportsCapture, dynamicAssemblyCreator) = - let errors, errorLogger, loggerProvider = mkCompilationErorHandlers() + let errors, errorLogger, loggerProvider = mkCompilationErrorHandlers() let result = tryCompile errorLogger (fun exiter -> mainCompile (ctok, argv, legacyReferenceResolver, (*bannerAlreadyPrinted*)true, ReduceMemoryFlag.Yes, CopyFSharpCoreFlag.No, exiter, loggerProvider, tcImportsCapture, dynamicAssemblyCreator) ) @@ -173,7 +173,7 @@ module CompileHelpers = let compileFromAsts (ctok, legacyReferenceResolver, asts, assemblyName, outFile, dependencies, noframework, pdbFile, executable, tcImportsCapture, dynamicAssemblyCreator) = - let errors, errorLogger, loggerProvider = mkCompilationErorHandlers() + let errors, errorLogger, loggerProvider = mkCompilationErrorHandlers() let executable = defaultArg executable true let target = if executable then CompilerTarget.ConsoleExe else CompilerTarget.Dll @@ -205,7 +205,7 @@ module CompileHelpers = TypeDefs = ilxMainModule.TypeDefs.AsList |> List.filter (fun td -> not (isTypeNameForGlobalFunctions td.Name)) |> mkILTypeDefs Resources=mkILResources [] } - // The function used to resolve typees while emitting the code + // The function used to resolve types while emitting the code let assemblyResolver s = match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathByExactAssemblyRef (ctok, s) with | Some res -> Some (Choice1Of2 res) @@ -385,7 +385,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC areSame=AreSameForChecking3, areSimilar=AreSubsumable3) - /// Holds keys for files being currently checked. It's used to prevent checking same file in parallel (interleaving chunck queued to Reactor). + /// Holds keys for files being currently checked. It's used to prevent checking same file in parallel (interleaving chunk queued to Reactor). let beingCheckedFileTable = ConcurrentDictionary (HashIdentity.FromFunctions @@ -687,7 +687,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC tcErrors, reactorOps, keepAssemblyContents, - Option.get tcProj.LastestCcuSigForFile, + Option.get tcProj.LatestCcuSigForFile, tcProj.TcState.Ccu, tcProj.TcImports, tcProj.TcEnvAtEnd.AccessRights, @@ -1167,7 +1167,7 @@ type FSharpChecker(legacyReferenceResolver, // Apply command-line arguments and collect more source files if they are in the arguments let sourceFilesNew = ApplyCommandLineArgs(tcConfigBuilder, initialSourceFiles, argv) - FSharpParsingOptions.FromTcConfigBuidler(tcConfigBuilder, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics + FSharpParsingOptions.FromTcConfigBuilder(tcConfigBuilder, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics member ic.GetParsingOptionsFromCommandLineArgs(argv, ?isInteractive: bool) = ic.GetParsingOptionsFromCommandLineArgs([], argv, ?isInteractive=isInteractive) diff --git a/src/fsharp/symbols/Exprs.fs b/src/fsharp/symbols/Exprs.fs index 7941a6be57..16ada4ec57 100644 --- a/src/fsharp/symbols/Exprs.fs +++ b/src/fsharp/symbols/Exprs.fs @@ -339,11 +339,11 @@ module FSharpExprConvert = and ConvExpr cenv env expr = Mk2 cenv expr (ConvExprPrim cenv env expr) - and ConvExprLinear cenv env expr contf = - ConvExprPrimLinear cenv env expr (fun exprR -> contf (Mk2 cenv expr exprR)) + and ConvExprLinear cenv env expr contF = + ConvExprPrimLinear cenv env expr (fun exprR -> contF (Mk2 cenv expr exprR)) // Tail recursive function to process the subset of expressions considered "linear" - and ConvExprPrimLinear cenv env expr contf = + and ConvExprPrimLinear cenv env expr contF = match expr with // Large lists @@ -352,15 +352,15 @@ module FSharpExprConvert = let typR = ConvType cenv (mkAppTy ucref.TyconRef tyargs) let e1R = ConvExpr cenv env e1 // tail recursive - ConvExprLinear cenv env e2 (contf << (fun e2R -> E.NewUnionCase(typR, mkR, [e1R; e2R]) )) + ConvExprLinear cenv env e2 (contF << (fun e2R -> E.NewUnionCase(typR, mkR, [e1R; e2R]) )) // Large sequences of let bindings | Expr.Let (bind, body, _, _) -> match ConvLetBind cenv env bind with - | None, env -> ConvExprPrimLinear cenv env body contf + | None, env -> ConvExprPrimLinear cenv env body contF | Some bindR, env -> // tail recursive - ConvExprLinear cenv env body (contf << (fun bodyR -> E.Let(bindR, bodyR))) + ConvExprLinear cenv env body (contF << (fun bodyR -> E.Let(bindR, bodyR))) // Remove initialization checks // Remove static initialization counter updates @@ -372,23 +372,23 @@ module FSharpExprConvert = | Expr.Sequential (ObjectInitializationCheck cenv.g, x1, NormalSeq, _, _) | Expr.Sequential (StaticInitializationCount, x1, NormalSeq, _, _) | Expr.Sequential (StaticInitializationCheck, x1, NormalSeq, _, _) -> - ConvExprPrim cenv env x1 |> contf + ConvExprPrim cenv env x1 |> contF // Large sequences of sequential code | Expr.Sequential (e1, e2, NormalSeq, _, _) -> let e1R = ConvExpr cenv env e1 // tail recursive - ConvExprLinear cenv env e2 (contf << (fun e2R -> E.Sequential(e1R, e2R))) + ConvExprLinear cenv env e2 (contF << (fun e2R -> E.Sequential(e1R, e2R))) | Expr.Sequential (x0, x1, ThenDoSeq, _, _) -> E.Sequential(ConvExpr cenv env x0, ConvExpr cenv env x1) | ModuleValueOrMemberUse cenv.g (vref, vFlags, _f, _fty, tyargs, curriedArgs) when (nonNil tyargs || nonNil curriedArgs) && vref.IsMemberOrModuleBinding -> - ConvModuleValueOrMemberUseLinear cenv env (expr, vref, vFlags, tyargs, curriedArgs) contf + ConvModuleValueOrMemberUseLinear cenv env (expr, vref, vFlags, tyargs, curriedArgs) contF | Expr.Match (_spBind, m, dtree, tgs, _, retTy) -> let dtreeR = ConvDecisionTree cenv env retTy dtree m // tailcall - ConvTargetsLinear cenv env (List.ofArray tgs) (contf << fun (targetsR: _ list) -> + ConvTargetsLinear cenv env (List.ofArray tgs) (contF << fun (targetsR: _ list) -> let (|E|) (x: FSharpExpr) = x.E // If the match is really an "if-then-else" then return it as such. @@ -397,11 +397,11 @@ module FSharpExprConvert = | _ -> E.DecisionTree(dtreeR, targetsR)) | _ -> - ConvExprPrim cenv env expr |> contf + ConvExprPrim cenv env expr |> contF /// A nasty function copied from creflect.fs. Made nastier by taking a continuation to process the /// arguments to the call in a tail-recursive fashion. - and ConvModuleValueOrMemberUseLinear (cenv: SymbolEnv) env (expr: Expr, vref, vFlags, tyargs, curriedArgs) contf = + and ConvModuleValueOrMemberUseLinear (cenv: SymbolEnv) env (expr: Expr, vref, vFlags, tyargs, curriedArgs) contF = let m = expr.Range let (numEnclTypeArgs, _, isNewObj, _valUseFlags, _isSelfInit, takesInstanceArg, _isPropGet, _isPropSet) = @@ -444,7 +444,7 @@ module FSharpExprConvert = let expr, exprty = AdjustValForExpectedArity cenv.g m vref vFlags topValInfo let splitCallExpr = MakeApplicationAndBetaReduce cenv.g (expr, exprty, [tyargs], curriedArgs, m) // tailcall - ConvExprPrimLinear cenv env splitCallExpr contf + ConvExprPrimLinear cenv env splitCallExpr contF else let curriedArgs, laterArgs = List.splitAt curriedArgInfos.Length curriedArgs @@ -459,8 +459,8 @@ module FSharpExprConvert = let contf2 = match laterArgs with - | [] -> contf - | _ -> (fun subCallR -> (subCallR, laterArgs) ||> List.fold (fun fR arg -> E.Application (Mk2 cenv arg fR, [], [ConvExpr cenv env arg])) |> contf) + | [] -> contF + | _ -> (fun subCallR -> (subCallR, laterArgs) ||> List.fold (fun fR arg -> E.Application (Mk2 cenv arg fR, [], [ConvExpr cenv env arg])) |> contF) if isMember then let callArgs = (objArgs :: untupledCurriedArgs) |> List.concat @@ -827,7 +827,7 @@ module FSharpExprConvert = let typR = ConvType cenv (mkAppTy tycr tyargs) E.UnionCaseTag(ConvExpr cenv env arg1, typR) - | TOp.TraitCall (TTrait(tys, nm, memFlags, argtys, _rty, _colution)), _, _ -> + | TOp.TraitCall (TTrait(tys, nm, memFlags, argtys, _rty, _solution)), _, _ -> let tysR = ConvTypes cenv tys let tyargsR = ConvTypes cenv tyargs let argtysR = ConvTypes cenv argtys @@ -849,7 +849,7 @@ module FSharpExprConvert = // 'let v = isinst e in .... if nonnull v then ...v .... ' // construct arising out the compilation of pattern matching. We decode these back to the form // 'if istype e then ...unbox e .... ' - // It's bit annoying that pattern matching does this tranformation. Like all premature optimization we pay a + // It's bit annoying that pattern matching does this transformation. Like all premature optimization we pay a // cost here to undo it. | Expr.Op (TOp.ILAsm ([ I_isinst _ ], _), [ty], [e], _) -> None, env.BindIsInstVal bind.Var (ty, e) @@ -951,7 +951,7 @@ module FSharpExprConvert = else let valR = ConvExpr cenv env callArgs.Head E.ValueSet (m, valR) - | _ -> failwith "Failed to resolve module value unambigously" + | _ -> failwith "Failed to resolve module value unambiguously" else failwith "Failed to resolve module member" | _ -> @@ -1077,7 +1077,7 @@ module FSharpExprConvert = with e -> failwithf "An IL call to '%s' could not be resolved: %s" (ilMethRef.ToString()) e.Message - and ConvObjectModelCallLinear cenv env (isNewObj, v: FSharpMemberOrFunctionOrValue, enclTyArgs, methTyArgs, callArgs) contf = + and ConvObjectModelCallLinear cenv env (isNewObj, v: FSharpMemberOrFunctionOrValue, enclTyArgs, methTyArgs, callArgs) contF = let enclTyArgsR = ConvTypes cenv enclTyArgs let methTyArgsR = ConvTypes cenv methTyArgs let obj, callArgs = @@ -1089,7 +1089,7 @@ module FSharpExprConvert = None, callArgs let objR = Option.map (ConvLValueExpr cenv env) obj // tailcall - ConvExprsLinear cenv env callArgs (contf << fun callArgsR -> + ConvExprsLinear cenv env callArgs (contF << fun callArgsR -> if isNewObj then E.NewObject(v, enclTyArgsR, callArgsR) else @@ -1098,21 +1098,21 @@ module FSharpExprConvert = and ConvExprs cenv env args = List.map (ConvExpr cenv env) args - // Process a list of expressions in a tail-recursive way. Identical to "ConvExprs" but the result is eventually passed to contf. - and ConvExprsLinear cenv env args contf = + // Process a list of expressions in a tail-recursive way. Identical to "ConvExprs" but the result is eventually passed to contF. + and ConvExprsLinear cenv env args contF = match args with - | [] -> contf [] - | [arg] -> ConvExprLinear cenv env arg (fun argR -> contf [argR]) - | arg :: rest -> ConvExprLinear cenv env arg (fun argR -> ConvExprsLinear cenv env rest (fun restR -> contf (argR :: restR))) + | [] -> contF [] + | [arg] -> ConvExprLinear cenv env arg (fun argR -> contF [argR]) + | arg :: rest -> ConvExprLinear cenv env arg (fun argR -> ConvExprsLinear cenv env rest (fun restR -> contF (argR :: restR))) - and ConvTargetsLinear cenv env tgs contf = + and ConvTargetsLinear cenv env tgs contF = match tgs with - | [] -> contf [] + | [] -> contF [] | TTarget(vars, rhs, _) :: rest -> let varsR = (List.rev vars) |> List.map (ConvVal cenv) ConvExprLinear cenv env rhs (fun targetR -> ConvTargetsLinear cenv env rest (fun restR -> - contf ((varsR, targetR) :: restR))) + contF ((varsR, targetR) :: restR))) and ConvValRef cenv env m (vref: ValRef) = let v = vref.Deref diff --git a/src/fsharp/symbols/Exprs.fsi b/src/fsharp/symbols/Exprs.fsi index fd5d88c022..96c12024cc 100644 --- a/src/fsharp/symbols/Exprs.fsi +++ b/src/fsharp/symbols/Exprs.fsi @@ -89,7 +89,7 @@ module public BasicPatterns = /// Matches expressions which are type abstractions val (|TypeLambda|_|) : FSharpExpr -> (FSharpGenericParameter list * FSharpExpr) option - /// Matches expressions with a decision expression, each branch of which ends in DecisionTreeSuccess pasing control and values to one of the targets. + /// Matches expressions with a decision expression, each branch of which ends in DecisionTreeSuccess passing control and values to one of the targets. val (|DecisionTree|_|) : FSharpExpr -> (FSharpExpr * (FSharpMemberOrFunctionOrValue list * FSharpExpr) list) option /// Special expressions at the end of a conditional decision structure in the decision expression node of a DecisionTree . diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index b1c46d9bd7..cf87b0b8f7 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -117,7 +117,7 @@ type ErrorScope() = /// may hit internal compiler failures. /// /// In some calling cases, we get a chance to report the error as part of user text. For example - /// if there is a "msising assembly" error while formatting the text of the description of an + /// if there is a "missing assembly" error while formatting the text of the description of an /// autocomplete, then the error message is shown in replacement of the text (rather than crashing Visual /// Studio, or swallowing the exception completely) static member Protect<'a> (m: range) (f: unit->'a) (err: string->'a): 'a = @@ -212,7 +212,7 @@ type FSharpXmlDoc = type FSharpToolTipElementData<'T> = { MainDescription: 'T XmlDoc: FSharpXmlDoc - /// typar insantiation text, to go after xml + /// typar instantiation text, to go after xml TypeMapping: 'T list Remarks: 'T option ParamName : string option } @@ -762,7 +762,7 @@ module internal SymbolHelpers = | Item.Property(_, pi1s), Item.Property(_, pi2s) -> List.zip pi1s pi2s |> List.forall(fun (pi1, pi2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) | Item.Event evt1, Item.Event evt2 -> - EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 + EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 | Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> Tastops.anonInfoEquiv anon1 anon2 && i1 = i2 | Item.CtorGroup(_, meths1), Item.CtorGroup(_, meths2) -> @@ -1301,7 +1301,7 @@ module internal SymbolHelpers = #endif - /// Get the "F1 Keyword" associated with an item, for looking up documentatio help indexes on the web + /// Get the "F1 Keyword" associated with an item, for looking up documentation help indexes on the web let rec GetF1Keyword (g: TcGlobals) item = let getKeywordForMethInfo (minfo : MethInfo) = diff --git a/src/fsharp/symbols/SymbolHelpers.fsi b/src/fsharp/symbols/SymbolHelpers.fsi index 984654c461..e6ece6fa2c 100755 --- a/src/fsharp/symbols/SymbolHelpers.fsi +++ b/src/fsharp/symbols/SymbolHelpers.fsi @@ -64,7 +64,7 @@ type public Layout = Internal.Utilities.StructuredFormat.Layout type public FSharpToolTipElementData<'T> = { MainDescription: 'T XmlDoc: FSharpXmlDoc - /// typar insantiation text, to go after xml + /// typar instantiation text, to go after xml TypeMapping: 'T list /// Extra text, goes at the end Remarks: 'T option diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index fcfe2c085f..add09769d6 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -1954,7 +1954,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = // Note, returning "public" is wrong for IL members that are private match d with | E e -> - // For IL events, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private" + // For IL events, we get an approximate accessibility that at least reports "internal" as "internal" and "private" as "private" let access = match e with | ILEvent ileinfo -> @@ -1965,7 +1965,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = FSharpAccessibility access | P p -> - // For IL properties, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private" + // For IL properties, we get an approximate accessibility that at least reports "internal" as "internal" and "private" as "private" let access = match p with | ILProp ilpinfo -> @@ -1977,13 +1977,13 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | M m | C m -> - // For IL methods, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private" + // For IL methods, we get an approximate accessibility that at least reports "internal" as "internal" and "private" as "private" let access = match m with | ILMeth (_, x, _) -> getApproxFSharpAccessibilityOfMember x.DeclaringTyconRef x.RawMetadata.Access | _ -> taccessPublic - FSharpAccessibility(access, isProtected=m.IsProtectedAccessiblity) + FSharpAccessibility(access, isProtected=m.IsProtectedAccessibility) | V v -> FSharpAccessibility(v.Accessibility) @@ -2010,7 +2010,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match other with | :? FSharpMemberOrFunctionOrValue as other -> match d, other.Data with - | E evt1, E evt2 -> EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 + | E evt1, E evt2 -> EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 | P p1, P p2 -> PropInfo.PropInfosUseIdenticalDefinitions p1 p2 | M m1, M m2 | C m1, C m2 -> MethInfo.MethInfosUseIdenticalDefinitions m1 m2 diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index 60c3cecedd..19df3cd26a 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -87,7 +87,7 @@ type [] public FSharpSymbol = /// Return true if two symbols are effectively the same when referred to in F# source code text. /// This sees through signatures (a symbol in a signature will be considered effectively the same as - /// the matching symbol in an implementation). In addition, other equivalances are applied + /// the matching symbol in an implementation). In addition, other equivalences are applied /// when the same F# source text implies the same declaration name - for example, constructors /// are considered to be effectively the same symbol as the corresponding type definition. /// diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 6e063cd831..a122bfe146 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -600,7 +600,7 @@ type EntityOptionalData = /// Indicates how visible is the entity is. // MUTABILITY: only for unpickle linkage - mutable entity_accessiblity: Accessibility + mutable entity_accessibility: Accessibility /// Field used when the 'tycon' is really an exception definition // @@ -678,7 +678,7 @@ and /// Represents a type definition, exception definition, module definition or entity_xmldocsig = "" entity_tycon_abbrev = None entity_tycon_repr_accessibility = TAccess [] - entity_accessiblity = TAccess [] + entity_accessibility = TAccess [] entity_exn_info = TExnNone } /// The name of the namespace, module or type, possibly with mangling, e.g. List`1, List or FailureException @@ -884,7 +884,7 @@ and /// Represents a type definition, exception definition, module definition or /// Get the value representing the accessibility of an F# type definition or module. member x.Accessibility = match x.entity_opt_data with - | Some optData -> optData.entity_accessiblity + | Some optData -> optData.entity_accessibility | _ -> TAccess [] /// Indicates the type prefers the "tycon" syntax for display etc. @@ -1049,7 +1049,7 @@ and /// Represents a type definition, exception definition, module definition or entity_xmldocsig = tg.entity_xmldocsig entity_tycon_abbrev = tg.entity_tycon_abbrev entity_tycon_repr_accessibility = tg.entity_tycon_repr_accessibility - entity_accessiblity = tg.entity_accessiblity + entity_accessibility = tg.entity_accessibility entity_exn_info = tg.entity_exn_info } | None -> () @@ -1235,8 +1235,8 @@ and /// Represents a type definition, exception definition, module definition or let rec top racc p = match p with | [] -> ILTypeRef.Create(sref, [], textOfPath (List.rev (item :: racc))) - | (h, istype) :: t -> - match istype with + | (h, isType) :: t -> + match isType with | FSharpModuleWithSuffix | ModuleOrType -> let outerTypeName = (textOfPath (List.rev (h :: racc))) ILTypeRef.Create(sref, (outerTypeName :: List.map (fun (nm, _) -> nm) t), item) @@ -1910,7 +1910,7 @@ and [] cacheOptRef tyconsByAccessNamesCache (fun () -> LayeredMultiMap.Empty.AddAndMarkAsCollapsible (mtyp.TypeAndExceptionDefinitions |> List.toArray |> Array.collect (fun (tc: Tycon) -> KeyTyconByAccessNames tc.LogicalName tc))) - // REVIEW: we can remove this lookup and use AllEntitiedByMangledName instead? + // REVIEW: we can remove this lookup and use AllEntitiesByMangledName instead? member mtyp.TypesByMangledName = let addTyconByMangledName (x: Tycon) tab = NameMap.add x.LogicalName x tab cacheOptRef tyconsByMangledNameCache (fun () -> @@ -2090,7 +2090,7 @@ and Construct = entity_opt_data = match kind, access with | TyparKind.Type, TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_accessiblity = access } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_accessibility = access } } #endif static member NewModuleOrNamespace cpath access (id: Ident) xml attribs mtype = @@ -2112,7 +2112,7 @@ and Construct = entity_opt_data = match xml, access with | XmlDoc [||], TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = xml; entity_tycon_repr_accessibility = access; entity_accessiblity = access } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = xml; entity_tycon_repr_accessibility = access; entity_accessibility = access } } and [] @@ -2398,7 +2398,7 @@ and [] TraitConstraintInfo = - /// TTrait(tys, nm, memFlags, argtys, rty, colution) + /// TTrait(tys, nm, memFlags, argtys, rty, solution) /// /// Indicates the signature of a member constraint. Contains a mutable solution cell /// to store the inferred solution of the constraint. @@ -5733,7 +5733,7 @@ let NewExn cpath (id: Ident) access repr attribs doc = entity_opt_data = match doc, access, repr with | XmlDoc [||], TAccess [], TExnNone -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = doc; entity_accessiblity = access; entity_tycon_repr_accessibility = access; entity_exn_info = repr } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = doc; entity_accessibility = access; entity_tycon_repr_accessibility = access; entity_exn_info = repr } } /// Create a new TAST RecdField node for an F# class, struct or record field let NewRecdField stat konst id nameGenerated ty isMutable isVolatile pattribs fattribs docOption access secret = @@ -5771,7 +5771,7 @@ let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPre entity_opt_data = match kind, docOption, reprAccess, access with | TyparKind.Type, XmlDoc [||], TAccess [], TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_xmldoc = docOption; entity_tycon_repr_accessibility = reprAccess; entity_accessiblity=access } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_xmldoc = docOption; entity_tycon_repr_accessibility = reprAccess; entity_accessibility=access } } let NewILTycon nlpath (nm, m) tps (scoref: ILScopeRef, enc, tdef: ILTypeDef) mtyp = @@ -5871,7 +5871,7 @@ let CombineCcuContentFragments m l = let entities = [ for e1 in mty1.AllEntities do match tab2.TryGetValue e1.LogicalName with - | true, e2 -> yield CombineEntites path e1 e2 + | true, e2 -> yield CombineEntities path e1 e2 | _ -> yield e1 for e2 in mty2.AllEntities do match tab1.TryGetValue e2.LogicalName with @@ -5888,7 +5888,7 @@ let CombineCcuContentFragments m l = | _-> error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path), m)) - and CombineEntites path (entity1: Entity) (entity2: Entity) = + and CombineEntities path (entity1: Entity) (entity2: Entity) = match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with | true, true -> diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 95aa5c5a31..097b8d92e6 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -124,7 +124,7 @@ module internal FSharpEnvironment = let tryRegKey(subKey:string) = - //if we are runing on mono simply return None + //if we are running on mono simply return None // GetDefaultRegistryStringValueViaDotNet will result in an access denied by default, // and Get32BitRegistryStringValueViaPInvoke will fail due to Advapi32.dll not existing if runningOnMono then None else @@ -188,7 +188,7 @@ module internal FSharpEnvironment = // Check for an app.config setting to redirect the default compiler location // Like fsharp-compiler-location try - // FSharp.Compiler support setting an appkey for compiler location. I've never seen this used. + // FSharp.Compiler support setting an appKey for compiler location. I've never seen this used. let result = tryAppConfig "fsharp-compiler-location" match result with | Some _ -> result @@ -210,10 +210,10 @@ module internal FSharpEnvironment = None - // Apply the given function to the registry entry corresponding to the subkey. + // Apply the given function to the registry entry corresponding to the subKey. // The reg key is disposed at the end of the scope. - let useKey subkey f = - let key = Registry.LocalMachine.OpenSubKey subkey + let useKey subKey f = + let key = Registry.LocalMachine.OpenSubKey subKey try f key finally match key with @@ -221,12 +221,12 @@ module internal FSharpEnvironment = | _ -> key.Dispose() // Check if the framework version 4.5 or above is installed at the given key entry - let IsNetFx45OrAboveInstalledAt subkey = + let IsNetFx45OrAboveInstalledAt subKey = try - useKey subkey (fun regkey -> - match regkey with + useKey subKey (fun regKey -> + match regKey with | null -> false - | _ -> regkey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0 + | _ -> regKey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0 with _ -> false // Check if the framework version 4.5 or above is installed diff --git a/src/utils/HashMultiMap.fs b/src/utils/HashMultiMap.fs index 7f571c232d..e3765ced86 100644 --- a/src/utils/HashMultiMap.fs +++ b/src/utils/HashMultiMap.fs @@ -9,16 +9,16 @@ open Microsoft.FSharp.Collections // Each entry in the HashMultiMap dictionary has at least one entry. Under normal usage each entry has _only_ // one entry. So use two hash tables: one for the main entries and one for the overflow. [] -type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) = +type internal HashMultiMap<'Key,'Value>(n: int, hashEq: IEqualityComparer<'Key>) = - let firstEntries = Dictionary<_,_>(n,hasheq) + let firstEntries = Dictionary<_,_>(n,hashEq) - let rest = Dictionary<_,_>(3,hasheq) + let rest = Dictionary<_,_>(3,hashEq) - new (hasheq : IEqualityComparer<'Key>) = HashMultiMap<'Key,'Value>(11, hasheq) + new (hashEq : IEqualityComparer<'Key>) = HashMultiMap<'Key,'Value>(11, hashEq) - new (seq : seq<'Key * 'Value>, hasheq : IEqualityComparer<'Key>) as x = - new HashMultiMap<'Key,'Value>(11, hasheq) + new (seq : seq<'Key * 'Value>, hashEq : IEqualityComparer<'Key>) as x = + new HashMultiMap<'Key,'Value>(11, hashEq) then seq |> Seq.iter (fun (k,v) -> x.Add(k,v)) member x.GetRest(k) = diff --git a/src/utils/prim-lexing.fsi b/src/utils/prim-lexing.fsi index bf9eb3171c..b0579d71e2 100644 --- a/src/utils/prim-lexing.fsi +++ b/src/utils/prim-lexing.fsi @@ -32,7 +32,7 @@ module SourceText = // // NOTE: the code in this file is a drop-in replacement runtime for Lexing.fsi from the FsLexYacc repository // and is referenced by generated code for the three FsLex generated lexers in the F# compiler. -// The underlying table format intepreted must precisely match the format generated by FsLex. +// The underlying table format interpreted must precisely match the format generated by FsLex. namespace Internal.Utilities.Text.Lexing open System.Collections.Generic diff --git a/src/utils/prim-parsing.fs b/src/utils/prim-parsing.fs index 9ce01bff90..c247161e9c 100644 --- a/src/utils/prim-parsing.fs +++ b/src/utils/prim-parsing.fs @@ -341,7 +341,7 @@ module internal Implementation = if errorSuppressionCountDown > 0 then errorSuppressionCountDown <- errorSuppressionCountDown - 1 #if DEBUG - if Flags.debug then Console.WriteLine("shifting, reduced errorRecoverylevel to {0}\n", errorSuppressionCountDown) + if Flags.debug then Console.WriteLine("shifting, reduced errorRecoveryLevel to {0}\n", errorSuppressionCountDown) #endif let nextState = actionValue action if not haveLookahead then failwith "shift on end of input!" From 2ce2c9e7fc9c49fc43fef51c9c07effb935908f6 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 31 Oct 2019 03:10:18 +0300 Subject: [PATCH 061/214] Fix member declaration ranges (#7676) * Fix member declaration ranges * Fix member declaration ranges * Update baseline * Update baseline --- src/fsharp/pars.fsy | 113 +++++++------ tests/fsharp/typecheck/sigs/neg10.bsl | 8 +- tests/fsharp/typecheck/sigs/neg62.bsl | 8 +- tests/fsharp/typecheck/sigs/neg91.bsl | 2 +- .../EnumTypes/E_NoMethodsOnEnums01.fs | 2 +- .../basic/E_CantExtendTypeAbrev.fs | 2 +- .../WithOOP/E_NoInstanceOnMeasure01.fs | 2 +- tests/service/Common.fs | 8 +- tests/service/ServiceUntypedParseTests.fs | 158 +++++++++++++++--- tests/service/StructureTests.fs | 8 +- 10 files changed, 223 insertions(+), 88 deletions(-) diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index 64011e2c40..8a4988935c 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -1623,21 +1623,23 @@ classDefnMemberGetSetElement: /* The core of a member definition */ memberCore: /* Methods and simple getter properties */ - | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedSeqExprBlock - { let mRhs = $5.Range - let mWhole = unionRanges (rhs2 parseState 3 4) mRhs - let optReturnType = $3 - let bindingBuilder,mBindLhs = $2 - (fun vis memFlagsBuilder attrs -> - [ SynMemberDefn.Member (bindingBuilder (vis,$1,false,mBindLhs,NoSequencePointAtInvisibleBinding,optReturnType,$5,mRhs,[],attrs,Some(memFlagsBuilder MemberKind.Member)),unionRanges mWhole mBindLhs) ]) } + | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedSeqExprBlock + { let mRhs = $5.Range + let optReturnType = $3 + let bindingBuilder, mBindLhs = $2 + (fun vis memFlagsBuilder attrs rangeStart -> + let memberFlags = Some (memFlagsBuilder MemberKind.Member) + let binding = bindingBuilder (vis, $1, false, mBindLhs, NoSequencePointAtInvisibleBinding, optReturnType, $5, mRhs, [], attrs, memberFlags) + let memberRange = unionRanges rangeStart mRhs + [ SynMemberDefn.Member (binding, memberRange) ]) } /* Properties with explicit get/set, also indexer properties */ - | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet + | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet { let mWhole = (rhs parseState 2, $4) ||> unionRangeWithListBy (fun (_,_,_,_,_,m2) -> m2) - let propertyNameBindingBuilder,_ = $2 + let propertyNameBindingBuilder, _ = $2 let optPropertyType = $3 let isMutable = false - (fun visNoLongerUsed memFlagsBuilder attrs -> + (fun visNoLongerUsed memFlagsBuilder attrs rangeStart -> let hasGet = ref false let hasSet = ref false @@ -1665,21 +1667,21 @@ memberCore: | SynPat.Attrib (p,_,_) -> go p | _ -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) go pv - if getset = "get" then ( + if getset = "get" then if !hasGet then reportParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) None else hasGet := true Some MemberKind.PropertyGet - ) else if getset = "set" then ( + else if getset = "set" then if !hasSet then reportParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) None else hasSet := true Some MemberKind.PropertySet - ) else + else raiseParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) match memberKind with @@ -1697,7 +1699,7 @@ memberCore: let optReturnType = match (memberKind, optReturnType) with - | MemberKind.PropertySet,_ -> optReturnType + | MemberKind.PropertySet, _ -> optReturnType | _, None -> optPropertyType | _ -> optReturnType @@ -1719,35 +1721,39 @@ memberCore: | _ -> SynInfo.unnamedTopArg match memberKind, valSynInfo, memFlags.IsInstance with - | MemberKind.PropertyGet,SynValInfo ([],_ret), false - | MemberKind.PropertyGet,SynValInfo ([_],_ret), true -> + | MemberKind.PropertyGet, SynValInfo ([], _ret), false + | MemberKind.PropertyGet, SynValInfo ([_], _ret), true -> raiseParseErrorAt mBindLhs (FSComp.SR.parsGetterMustHaveAtLeastOneArgument()) - | MemberKind.PropertyGet,SynValInfo (thisArg :: indexOrUnitArgs :: rest,ret), true -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument()) - SynValInfo ([thisArg; indexOrUnitArgs],ret) + | MemberKind.PropertyGet, SynValInfo (thisArg :: indexOrUnitArgs :: rest, ret), true -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + SynValInfo ([thisArg; indexOrUnitArgs], ret) - | MemberKind.PropertyGet,SynValInfo (indexOrUnitArgs :: rest,ret), false -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument()) - SynValInfo ([indexOrUnitArgs],ret) + | MemberKind.PropertyGet, SynValInfo (indexOrUnitArgs :: rest,ret), false -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + SynValInfo ([indexOrUnitArgs], ret) - | MemberKind.PropertySet,SynValInfo ([thisArg;valueArg],ret), true -> - SynValInfo ([thisArg; adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo ([thisArg;valueArg], ret), true -> + SynValInfo ([thisArg; adjustValueArg valueArg], ret) - | MemberKind.PropertySet,SynValInfo (thisArg :: indexArgs :: valueArg :: rest,ret), true -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments()) - SynValInfo ([thisArg; indexArgs @ adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo (thisArg :: indexArgs :: valueArg :: rest, ret), true -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + SynValInfo ([thisArg; indexArgs @ adjustValueArg valueArg], ret) - | MemberKind.PropertySet,SynValInfo ([valueArg],ret), false -> - SynValInfo ([adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo ([valueArg], ret), false -> + SynValInfo ([adjustValueArg valueArg], ret) - | MemberKind.PropertySet,SynValInfo (indexArgs :: valueArg :: rest,ret), _ -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments()) - SynValInfo ([indexArgs @ adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo (indexArgs :: valueArg :: rest,ret), _ -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + SynValInfo ([indexArgs @ adjustValueArg valueArg], ret) | _ -> // should be unreachable, cover just in case - raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidProperty()) + raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidProperty ()) let valSynData = SynValData(Some(memFlags), valSynInfo,None) @@ -1808,7 +1814,9 @@ memberCore: go pv,PreXmlDoc.Merge doc2 doc - Some <| SynMemberDefn.Member (Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mBindLhs, spBind),mWhole))) + let binding = Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mBindLhs, spBind) + let memberRange = unionRanges rangeStart mWhole + Some (SynMemberDefn.Member (binding, memberRange)))) } @@ -1827,10 +1835,12 @@ classDefnMember: { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) [mkClassMemberLocalBindings(true,Some (rhs parseState 3),$1,$2,$4)] } - | opt_attributes opt_declVisibility memberFlags memberCore opt_ODECLEND - { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) - let _,flags = $3 - $4 $2 flags $1 } + | opt_attributes opt_declVisibility memberFlags memberCore opt_ODECLEND + { let rangeStart = rhs parseState 1 + if Option.isSome $2 then + errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) + let _, flags = $3 + $4 $2 flags $1 rangeStart } | opt_attributes opt_declVisibility interfaceMember appType opt_interfaceImplDefn { if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(),rhs parseState 1)) @@ -1869,9 +1879,11 @@ classDefnMember: $4 (Some (rhs parseState 3)) $1 true } | opt_attributes opt_declVisibility memberFlags autoPropsDefnDecl opt_ODECLEND - { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) - let isStatic, flags = $3 - $4 $1 isStatic flags } + { let rangeStart = rhs parseState 1 + if Option.isSome $2 then + errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) + let isStatic, flags = $3 + $4 $1 isStatic flags rangeStart } | opt_attributes opt_declVisibility NEW atomicPattern optAsSpec EQUALS typedSeqExprBlock opt_ODECLEND { let m = unionRanges (rhs2 parseState 3 6) $7.Range @@ -1903,12 +1915,13 @@ valDefnDecl: /* An auto-property definition in an object type definition */ autoPropsDefnDecl: | VAL opt_mutable opt_access ident opt_typ EQUALS typedSeqExprBlock classMemberSpfnGetSet - { let doc = grabXmlDoc(parseState,5) - let mValDecl = unionRanges (rhs parseState 1) $7.Range - let mGetSetOpt, getSet = $8 - if $2 then errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet(),rhs parseState 3)) - (fun attribs isStatic flags -> - [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, flags, doc, $3, $7, mGetSetOpt, mValDecl) ]) } + { let doc = grabXmlDoc(parseState, 5) + let mGetSetOpt, getSet = $8 + if $2 then + errorR (Error (FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet (), rhs parseState 3)) + (fun attribs isStatic flags rangeStart -> + let memberRange = unionRanges rangeStart $7.Range + [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, flags, doc, $3, $7, mGetSetOpt, memberRange) ]) } /* An optional type on an auto-property definition */ @@ -2022,10 +2035,12 @@ objectImplementationMembers: /* One member in an object expression or interface implementation */ objectImplementationMember: | opt_attributes memberOrOverride memberCore opt_ODECLEND - { $3 None OverrideMemberFlags $1 } + { let rangeStart = rhs parseState 1 + $3 None OverrideMemberFlags $1 rangeStart } | opt_attributes memberOrOverride autoPropsDefnDecl opt_ODECLEND - { $3 $1 false OverrideMemberFlags } + { let rangeStart = rhs parseState 1 + $3 $1 false OverrideMemberFlags rangeStart } | opt_attributes memberOrOverride error { [] } diff --git a/tests/fsharp/typecheck/sigs/neg10.bsl b/tests/fsharp/typecheck/sigs/neg10.bsl index 64088e1e9e..c31220273d 100644 --- a/tests/fsharp/typecheck/sigs/neg10.bsl +++ b/tests/fsharp/typecheck/sigs/neg10.bsl @@ -35,9 +35,9 @@ neg10.fs(54,17,54,20): typecheck error FS0060: Override implementations in augme neg10.fs(66,19,66,21): typecheck error FS0069: Interface implementations in augmentations are now deprecated. Interface implementations should be given on the initial declaration of a type. -neg10.fs(77,27,77,34): typecheck error FS0896: Enumerations cannot have members +neg10.fs(77,13,77,34): typecheck error FS0896: Enumerations cannot have members -neg10.fs(84,20,84,29): typecheck error FS0896: Enumerations cannot have members +neg10.fs(84,13,84,29): typecheck error FS0896: Enumerations cannot have members neg10.fs(90,23,90,41): typecheck error FS0907: Enumerations cannot have interface declarations @@ -45,11 +45,11 @@ neg10.fs(99,23,99,29): typecheck error FS0907: Enumerations cannot have interfac neg10.fs(107,10,107,17): typecheck error FS0964: Type abbreviations cannot have augmentations -neg10.fs(109,27,109,34): typecheck error FS0895: Type abbreviations cannot have members +neg10.fs(109,13,109,34): typecheck error FS0895: Type abbreviations cannot have members neg10.fs(114,10,114,17): typecheck error FS0964: Type abbreviations cannot have augmentations -neg10.fs(116,20,116,29): typecheck error FS0895: Type abbreviations cannot have members +neg10.fs(116,13,116,29): typecheck error FS0895: Type abbreviations cannot have members neg10.fs(120,10,120,17): typecheck error FS0964: Type abbreviations cannot have augmentations diff --git a/tests/fsharp/typecheck/sigs/neg62.bsl b/tests/fsharp/typecheck/sigs/neg62.bsl index d2bbd52d88..de4ae9d68a 100644 --- a/tests/fsharp/typecheck/sigs/neg62.bsl +++ b/tests/fsharp/typecheck/sigs/neg62.bsl @@ -15,15 +15,15 @@ neg62.fs(22,5,22,14): typecheck error FS0960: 'let' and 'do' bindings must come neg62.fs(28,5,28,18): typecheck error FS0960: 'let' and 'do' bindings must come before member and interface definitions in type definitions -neg62.fs(31,19,31,32): typecheck error FS3133: 'member val' definitions are only permitted in types with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. +neg62.fs(31,5,31,32): typecheck error FS3133: 'member val' definitions are only permitted in types with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. -neg62.fs(31,19,31,32): typecheck error FS0902: Static value definitions may only be used in types with a primary constructor. Consider adding arguments to the type definition, e.g. 'type X(args) = ...'. +neg62.fs(31,5,31,32): typecheck error FS0902: Static value definitions may only be used in types with a primary constructor. Consider adding arguments to the type definition, e.g. 'type X(args) = ...'. -neg62.fs(34,12,34,25): typecheck error FS3133: 'member val' definitions are only permitted in types with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. +neg62.fs(34,5,34,25): typecheck error FS3133: 'member val' definitions are only permitted in types with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. neg62.fs(49,6,49,26): typecheck error FS0081: Implicit object constructors for structs must take at least one argument -neg62.fs(50,12,50,21): typecheck error FS0901: Structs cannot contain value definitions because the default constructor for structs will not execute these bindings. Consider adding additional arguments to the primary constructor for the type. +neg62.fs(50,5,50,21): typecheck error FS0901: Structs cannot contain value definitions because the default constructor for structs will not execute these bindings. Consider adding additional arguments to the primary constructor for the type. neg62.fs(54,26,54,34): typecheck error FS3135: To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. diff --git a/tests/fsharp/typecheck/sigs/neg91.bsl b/tests/fsharp/typecheck/sigs/neg91.bsl index 7021297a7f..559a4871f9 100644 --- a/tests/fsharp/typecheck/sigs/neg91.bsl +++ b/tests/fsharp/typecheck/sigs/neg91.bsl @@ -1,5 +1,5 @@ -neg91.fs(7,16,7,30): typecheck error FS0896: Enumerations cannot have members +neg91.fs(7,9,7,30): typecheck error FS0896: Enumerations cannot have members neg91.fs(10,10,10,15): typecheck error FS0956: Members that extend interface, delegate or enum types must be placed in a module separate to the definition of the type. This module must either have the AutoOpen attribute or be opened explicitly by client code to bring the extension members into scope. diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/EnumTypes/E_NoMethodsOnEnums01.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/EnumTypes/E_NoMethodsOnEnums01.fs index 4458338c77..b4e0566169 100644 --- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/EnumTypes/E_NoMethodsOnEnums01.fs +++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/EnumTypes/E_NoMethodsOnEnums01.fs @@ -1,5 +1,5 @@ // #Regression #Conformance #ObjectOrientedTypes #Enums -//Enumerations cannot have members$ +//Enumerations cannot have members$ //The type 'Season' does not support the operator 'get_One'$ type Season = Spring=0 | Summer=1 | Autumn=2 | Winter=3 diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_CantExtendTypeAbrev.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_CantExtendTypeAbrev.fs index beeac13d7e..2883306a70 100644 --- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_CantExtendTypeAbrev.fs +++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/TypeExtensions/basic/E_CantExtendTypeAbrev.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #ObjectOrientedTypes #TypeExtensions // Verify you can't add type extensions to a type abbreviation //Type abbreviations cannot have augmentations$ -//Type abbreviations cannot have members$ +//Type abbreviations cannot have members$ type string with member this.ReturnFive() = 5 diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/WithOOP/E_NoInstanceOnMeasure01.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/WithOOP/E_NoInstanceOnMeasure01.fs index e80950ee9e..4ff94cf868 100644 --- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/WithOOP/E_NoInstanceOnMeasure01.fs +++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/WithOOP/E_NoInstanceOnMeasure01.fs @@ -2,7 +2,7 @@ // Test error when adding instance methods to Measure types. -//Measure declarations may have only static members$ +//Measure declarations may have only static members$ [] type kg = diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 6920e682af..946995e4c1 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -190,7 +190,6 @@ let parseAndCheckScript (file, input) = let parseSourceCode (name: string, code: string) = let location = Path.Combine(Path.GetTempPath(),"test"+string(hash (name, code))) try Directory.CreateDirectory(location) |> ignore with _ -> () - let projPath = Path.Combine(location, name + ".fsproj") let filePath = Path.Combine(location, name + ".fs") let dllPath = Path.Combine(location, name + ".dll") let args = mkProjectCommandLineArgs(dllPath, [filePath]) @@ -198,6 +197,13 @@ let parseSourceCode (name: string, code: string) = let parseResults = checker.ParseFile(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously parseResults.ParseTree +open FSharp.Compiler.Ast + +let parseSourceCodeAndGetModule (source: string) = + match parseSourceCode ("test", source) with + | Some (ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, _, [ moduleOrNamespace ], _))) -> moduleOrNamespace + | _ -> failwith "Could not get module decls" + /// Extract range info let tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) diff --git a/tests/service/ServiceUntypedParseTests.fs b/tests/service/ServiceUntypedParseTests.fs index ac4e156561..ecf91ee4ca 100644 --- a/tests/service/ServiceUntypedParseTests.fs +++ b/tests/service/ServiceUntypedParseTests.fs @@ -127,25 +127,139 @@ let foo6 = () [<>] let foo7 = () """ - match parseSourceCode ("test", source) with - | Some (ParsedInput.ImplFile (ParsedImplFileInput (_,_,_,_,_,[SynModuleOrNamespace (_,_,_,decls,_,_,_,_)],_))) -> - decls |> List.map (fun decl -> - match decl with - | SynModuleDecl.Let (_,[Binding(_,_,_,_,attributeLists,_,_,_,_,_,_,_)],_) -> - attributeLists |> List.map (fun list -> - let r = list.Range - - list.Attributes.Length, - ((r.StartLine, r.StartColumn), (r.EndLine, r.EndColumn))) - - | _ -> failwith "Could not get binding") - |> shouldEqual - [ [ (1, ((2, 0), (2, 5))) ] - [ (1, ((5, 0), (5, 5))); (2, ((6, 0), (6, 7))) ] - [ (1, ((9, 0), (9, 5))); (2, ((9, 6), (9, 13))) ] - [ (1, ((12, 0), (13, 0))) ] - [ (1, ((15, 0), (15, 4))) ] - [ (0, ((18, 0), (18, 2))) ] - [ (0, ((21, 0), (21, 4))) ] ] - - | _ -> failwith "Could not get module decls" + let (SynModuleOrNamespace (_, _, _, decls, _, _, _, _)) = parseSourceCodeAndGetModule source + decls |> List.map (fun decl -> + match decl with + | SynModuleDecl.Let (_,[Binding(_,_,_,_,attributeLists,_,_,_,_,_,_,_)],_) -> + attributeLists |> List.map (fun list -> + let r = list.Range + + list.Attributes.Length, + ((r.StartLine, r.StartColumn), (r.EndLine, r.EndColumn))) + + | _ -> failwith "Could not get binding") + |> shouldEqual + [ [ (1, ((2, 0), (2, 5))) ] + [ (1, ((5, 0), (5, 5))); (2, ((6, 0), (6, 7))) ] + [ (1, ((9, 0), (9, 5))); (2, ((9, 6), (9, 13))) ] + [ (1, ((12, 0), (13, 0))) ] + [ (1, ((15, 0), (15, 4))) ] + [ (0, ((18, 0), (18, 2))) ] + [ (0, ((21, 0), (21, 4))) ] ] + + +module TypeMemberRanges = + + let getTypeMemberRange source = + let (SynModuleOrNamespace (_, _, _, decls, _, _, _, _)) = parseSourceCodeAndGetModule source + match decls with + | [ SynModuleDecl.Types ([ TypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _) ], _) ] -> + memberDecls |> List.map (fun memberDecl -> + let range = memberDecl.Range + (range.StartLine, range.StartColumn), (range.EndLine, range.EndColumn)) + + | _ -> failwith "Could not get member" + + + [] + let ``Member range 01 - Simple``() = + let source = """ +type T = + member x.Foo() = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 23) ] + + + [] + let ``Member range 02 - Static``() = + let source = """ +type T = + static member Foo() = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 28) ] + + + [] + let ``Member range 03 - Attribute``() = + let source = """ +type T = + [] + static member Foo() = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (4, 28) ] + + + [] + let ``Member range 04 - Property``() = + let source = """ +type T = + member x.P = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 19) ] + + + [] + let ``Member range 05 - Setter only property``() = + let source = """ +type T = + member x.P with set (value) = v <- value +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 44) ] + + + [] + let ``Member range 06 - Read-write property``() = + let source = """ +type T = + member this.MyReadWriteProperty + with get () = x + and set (value) = x <- value +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (5, 36) + (3, 4), (5, 36) ] + + + [] + let ``Member range 07 - Auto property``() = + let source = """ +type T = + member val Property1 = "" +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 29) ] + + + [] + let ``Member range 08 - Auto property with setter``() = + let source = """ +type T = + member val Property1 = "" with get, set +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 29) ] + + + [] + let ``Member range 09 - Abstract slot``() = + let source = """ +type T = + abstract P: int + abstract M: unit -> unit +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 19) + (4, 4), (4, 28) ] + + [] + let ``Member range 10 - Val field``() = + let source = """ +type T = + val x: int +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 14) ] + + + [] + let ``Member range 11 - Ctor``() = + let source = """ +type T = + new (x:int) = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 20) ] diff --git a/tests/service/StructureTests.fs b/tests/service/StructureTests.fs index e3f7b7fe9b..c3583fe5ab 100644 --- a/tests/service/StructureTests.fs +++ b/tests/service/StructureTests.fs @@ -106,7 +106,7 @@ type Color = => [ (2, 5, 9, 55), (2, 11, 9, 55) (3, 4, 5, 10), (3, 4, 5, 10) (7, 4, 9, 55), (7, 25, 9, 55) - (8, 15, 9, 55), (8, 27, 9, 55) + (8, 8, 9, 55), (8, 27, 9, 55) (8, 15, 9, 55), (8, 27, 9, 55) ] [] @@ -127,7 +127,7 @@ type Color = (3, 4, 4, 14), (3, 4, 4, 14) (3, 6, 4, 13), (3, 6, 4, 13) (8, 4, 10, 55), (8, 25, 10, 55) - (9, 15, 10, 55), (9, 27, 10, 55) + (9, 8, 10, 55), (9, 27, 10, 55) (9, 15, 10, 55), (9, 27, 10, 55) ] [] @@ -181,13 +181,13 @@ module MyModule = // 2 (7, 9, 15, 59), (7, 15, 15, 59) (8, 8, 11, 9), (8, 8, 11, 9) (13, 8, 15, 59), (13, 29, 15, 59) - (14, 19, 15, 59), (14, 31, 15, 59) + (14, 12, 15, 59), (14, 31, 15, 59) (14, 19, 15, 59), (14, 31, 15, 59) (17, 4, 27, 63), (17, 24, 27, 63) (19, 13, 27, 63), (19, 25, 27, 63) (20, 12, 23, 13), (20, 12, 23, 13) (25, 12, 27, 63), (25, 33, 27, 63) - (26, 23, 27, 63), (26, 35, 27, 63) + (26, 16, 27, 63), (26, 35, 27, 63) (26, 23, 27, 63), (26, 35, 27, 63) ] From 6230834b2180ef0a0c0ca821d97972c5362bf321 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Wed, 30 Oct 2019 17:31:31 -0700 Subject: [PATCH 062/214] Use framework Queue (#7709) --- src/fsharp/FSharp.Core/mailbox.fs | 45 ++----------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/src/fsharp/FSharp.Core/mailbox.fs b/src/fsharp/FSharp.Core/mailbox.fs index b5c91fe49e..b2bec12971 100644 --- a/src/fsharp/FSharp.Core/mailbox.fs +++ b/src/fsharp/FSharp.Core/mailbox.fs @@ -4,6 +4,7 @@ namespace Microsoft.FSharp.Control open System open System.Threading + open System.Collections.Generic open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Control @@ -11,48 +12,6 @@ namespace Microsoft.FSharp.Control open Microsoft.FSharp.Control.AsyncPrimitives open Microsoft.FSharp.Collections - /// We use our own internal implementation of queues to avoid a dependency on System.dll - type Queue<'T>() = - - let mutable array = [| |] - let mutable head = 0 - let mutable size = 0 - let mutable tail = 0 - - let SetCapacity capacity = - let destinationArray = Array.zeroCreate capacity - if (size > 0) then - if (head < tail) then - Array.Copy(array, head, destinationArray, 0, size) - - else - Array.Copy(array, head, destinationArray, 0, array.Length - head) - Array.Copy(array, 0, destinationArray, array.Length - head, tail) - array <- destinationArray - head <- 0 - tail <- if (size = capacity) then 0 else size - - member x.Dequeue() = - if (size = 0) then - failwith "Dequeue" - let local = array.[head] - array.[head] <- Unchecked.defaultof<'T> - head <- (head + 1) % array.Length - size <- size - 1 - local - - member this.Enqueue item = - if (size = array.Length) then - let capacity = int ((int64 array.Length * 200L) / 100L) - let capacity = max capacity (array.Length + 4) - SetCapacity capacity - array.[tail] <- item - tail <- (tail + 1) % array.Length - size <- size + 1 - - member x.Count = size - - module AsyncHelpers = let awaitEither a1 a2 = @@ -93,7 +52,7 @@ namespace Microsoft.FSharp.Control [] type Mailbox<'Msg>(cancellationSupported: bool) = let mutable inboxStore = null - let mutable arrivals = new Queue<'Msg>() + let arrivals = Queue<'Msg>() let syncRoot = arrivals // Control elements indicating the state of the reader. When the reader is "blocked" at an From d3a2f7b1985923aeda9fe027d3730b51c283539c Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 31 Oct 2019 05:00:34 +0300 Subject: [PATCH 063/214] Type check: recover in Set expressions when left side value is not mutable (#7682) * Recover ValNoMutable and PropertyCannotBeSet errors * Recover FieldNotMutable error * Refactor tests * Refactor tests * Update baseline --- src/fsharp/MethodCalls.fs | 3 ++- src/fsharp/TypeChecker.fs | 28 ++++++++++++------------ tests/fsharp/core/span/test3.bsl | 2 +- tests/service/Common.fs | 29 +++++++++++++++++++++++++ tests/service/EditorTests.fs | 37 ++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 16 deletions(-) diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index fdae67c6ad..37f031e782 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -1638,5 +1638,6 @@ let MethInfoChecks g amap isInstance tyargsOpt objArgs ad m (minfo: MethInfo) = exception FieldNotMutable of DisplayEnv * Tast.RecdFieldRef * range let CheckRecdFieldMutation m denv (rfinfo: RecdFieldInfo) = - if not rfinfo.RecdField.IsMutable then error (FieldNotMutable(denv, rfinfo.RecdFieldRef, m)) + if not rfinfo.RecdField.IsMutable then + errorR (FieldNotMutable (denv, rfinfo.RecdFieldRef, m)) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 4181cb846c..978949fd47 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -9362,7 +9362,8 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del if isByrefTy g vty then destByrefTy g vty else - if not vref.IsMutable then error (ValNotMutable(env.DisplayEnv, vref, mStmt)) + if not vref.IsMutable then + errorR (ValNotMutable (env.DisplayEnv, vref, mStmt)) vty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false vty2 env tpenv e2 @@ -9415,15 +9416,15 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) - if isByrefMethReturnSetter then - // x.P <- ... byref setter - if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterResolution NormalValUse args ExprAtomicFlag.Atomic delayed - else - error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + if not isByrefMethReturnSetter then + errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + // x.P <- ... byref setter + if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterResolution NormalValUse args ExprAtomicFlag.Atomic delayed else let args = if pinfo.IsIndexer then args else [] - if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + if isNil meths then + errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) // Note: static calls never mutate a struct object argument TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed | _ -> @@ -9600,12 +9601,11 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy cenv.g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) - if isByrefMethReturnSetter then - // x.P <- ... byref setter - if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed - else - error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + if not isByrefMethReturnSetter then + errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + // x.P <- ... byref setter + if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed else let args = if pinfo.IsIndexer then args else [] let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) diff --git a/tests/fsharp/core/span/test3.bsl b/tests/fsharp/core/span/test3.bsl index cb28469527..1e6859edcc 100644 --- a/tests/fsharp/core/span/test3.bsl +++ b/tests/fsharp/core/span/test3.bsl @@ -10,5 +10,5 @@ test3.fsx(47,21,47,27): typecheck error FS0027: This value is not mutable. Consi test3.fsx(46,26,46,27): typecheck error FS0193: Type constraint mismatch. The type 'Span' is not compatible with type - 'seq<'a>' + 'seq' diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 946995e4c1..163e70bb09 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -5,6 +5,7 @@ open System.IO open System.Collections.Generic open FSharp.Compiler open FSharp.Compiler.SourceCodeServices +open FsUnit #if NETCOREAPP2_0 let readRefs (folder : string) (projectFile: string) = @@ -304,6 +305,34 @@ let rec allSymbolsInEntities compGen (entities: IList) = yield! allSymbolsInEntities compGen e.NestedEntities ] +let getSymbolUses (source: string) = + let _, typeCheckResults = parseAndCheckScript("/home/user/Test.fsx", source) + typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously + +let getSymbols (source: string) = + getSymbolUses source + |> Array.map (fun symbolUse -> symbolUse.Symbol) + + +let getSymbolName (symbol: FSharpSymbol) = + match symbol with + | :? FSharpMemberOrFunctionOrValue as mfv -> Some mfv.LogicalName + | :? FSharpEntity as entity -> Some entity.LogicalName + | :? FSharpGenericParameter as parameter -> Some parameter.Name + | :? FSharpParameter as parameter -> parameter.Name + | :? FSharpStaticParameter as parameter -> Some parameter.Name + | :? FSharpActivePatternCase as case -> Some case.Name + | :? FSharpUnionCase as case -> Some case.Name + | _ -> None + + +let assertContainsSymbolWithName name source = + getSymbols source + |> Array.choose getSymbolName + |> Array.contains name + |> shouldEqual true + + let coreLibAssemblyName = #if NETCOREAPP2_0 "System.Runtime" diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs index 69b9e40764..7cf404fdf3 100644 --- a/tests/service/EditorTests.fs +++ b/tests/service/EditorTests.fs @@ -1319,3 +1319,40 @@ let ``FSharpField.IsNameGenerated`` () = "type U = Case of string * Item2: string * string * Name: string", ["Item1", true; "Item2", false; "Item3", true; "Name", false]] |> List.iter (fun (source, expected) -> checkFields source |> shouldEqual expected) + + +[] +let ``ValNoMutable recovery`` () = + let source = """ +let x = 1 +x <- + let y = 1 + y +""" + assertContainsSymbolWithName "y" source + + +[] +let ``PropertyCannotBeSet recovery`` () = + let source = """ +type T = + static member P = 1 + +T.P <- + let y = 1 + y +""" + assertContainsSymbolWithName "y" source + + +[] +let ``FieldNotMutable recovery`` () = + let source = """ +type R = + { F: int } + +{ F = 1 }.F <- + let y = 1 + y +""" + assertContainsSymbolWithName "y" source From fa6e7ccdc91ea1f4afbc546d5ab0153a3eec8396 Mon Sep 17 00:00:00 2001 From: Sergey Tihon Date: Thu, 31 Oct 2019 05:07:32 +0300 Subject: [PATCH 064/214] Moved CodeGen/EmittedIL/TailCalls over to NUnit (#7386) * TailCalls test migration * fix the diff in IL * fix for netcore --- .../Compiler/CodeGen/EmittedIL/TailCalls.fs | 253 ++++++++++++++++++ tests/fsharp/Compiler/ILChecker.fs | 2 +- tests/fsharp/FSharpSuite.Tests.fsproj | 1 + .../CodeGen/EmittedIL/TailCalls/TailCall01.fs | 4 - .../EmittedIL/TailCalls/TailCall01.il.bsl | 111 -------- .../CodeGen/EmittedIL/TailCalls/TailCall02.fs | 5 - .../EmittedIL/TailCalls/TailCall02.il.bsl | 97 ------- .../CodeGen/EmittedIL/TailCalls/TailCall03.fs | 4 - .../EmittedIL/TailCalls/TailCall03.il.bsl | 120 --------- .../CodeGen/EmittedIL/TailCalls/TailCall04.fs | 5 - .../EmittedIL/TailCalls/TailCall04.il.bsl | 112 -------- .../CodeGen/EmittedIL/TailCalls/TailCall05.fs | 4 - .../EmittedIL/TailCalls/TailCall05.il.bsl | 118 -------- .../CodeGen/EmittedIL/TailCalls/env.lst | 5 - .../CodeGen/EmittedIL/TailCalls/keep.lst | 1 - 15 files changed, 255 insertions(+), 587 deletions(-) create mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/TailCalls.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/keep.lst diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/TailCalls.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/TailCalls.fs new file mode 100644 index 0000000000..a61bd24ecb --- /dev/null +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/TailCalls.fs @@ -0,0 +1,253 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL + +open FSharp.Compiler.UnitTests +open NUnit.Framework + +[] +module ``TailCalls`` = + // Regression test for DevDiv:72571 + + [] + let ``TailCall 01``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"; "--tailcalls+"|] + """ +module TailCall01 +let foo(x:int, y) = printfn "%d" x +let run() = let x = 0 in foo(x,5) + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static void foo(int32 x, + !!a y) cil managed + { + + .maxstack 4 + .locals init (class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, + int32 V_1) + IL_0000: ldstr "%d" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: stloc.0 + IL_0010: ldarg.0 + IL_0011: stloc.1 + IL_0012: ldloc.0 + IL_0013: ldloc.1 + IL_0014: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0019: pop + IL_001a: ret + } + """ + """ + .method public static void run() cil managed + { + + .maxstack 4 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldloc.0 + IL_0003: ldc.i4.5 + IL_0004: tail. + IL_0006: call void TailCall01::foo(int32, + !!0) + IL_000b: ret + } + """ + ]) + + [] + let ``TailCall 02``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"; "--tailcalls+"|] + """ +module TailCall02 +let foo(x:int byref) = x +let run() = let mutable x = 0 in foo(&x) + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static int32 foo(int32& x) cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldobj [runtime]System.Int32 + IL_0006: ret + } + """ + """ + .method public static int32 run() cil managed + { + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldloca.s V_0 + IL_0004: call int32 TailCall02::foo(int32&) + IL_0009: ret + } + """ + ]) + + [] + let ``TailCall 03``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"; "--tailcalls+"|] + """ +module TailCall03 +let foo (x:int byref) (y:int byref) z = printfn "%d" (x+y) +let run() = let mutable x = 0 in foo &x &x 5 + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static void foo(int32& x, + int32& y, + !!a z) cil managed + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 03 00 00 00 01 00 00 00 01 00 00 00 01 00 + 00 00 00 00 ) + + .maxstack 4 + .locals init (class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, + int32 V_1) + IL_0000: ldstr "%d" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: stloc.0 + IL_0010: ldarg.0 + IL_0011: ldobj [runtime]System.Int32 + IL_0016: ldarg.1 + IL_0017: ldobj [runtime]System.Int32 + IL_001c: add + IL_001d: stloc.1 + IL_001e: ldloc.0 + IL_001f: ldloc.1 + IL_0020: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0025: pop + IL_0026: ret + } + """ + """ + .method public static void run() cil managed + { + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldloca.s V_0 + IL_0004: ldloca.s V_0 + IL_0006: ldc.i4.5 + IL_0007: call void TailCall03::foo(int32&, + int32&, + !!0) + IL_000c: nop + IL_000d: ret + } + """ + ]) + + [] + let ``TailCall 04``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"; "--tailcalls+"|] + """ +module TailCall04 +let foo(x:int byref, y) = printfn "%d" x +let run() = let mutable x = 0 in foo(&x,5) + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static void foo(int32& x, + !!a y) cil managed + { + + .maxstack 4 + .locals init (class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, + int32 V_1) + IL_0000: ldstr "%d" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: stloc.0 + IL_0010: ldarg.0 + IL_0011: ldobj [runtime]System.Int32 + IL_0016: stloc.1 + IL_0017: ldloc.0 + IL_0018: ldloc.1 + IL_0019: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_001e: pop + IL_001f: ret + } + """ + """ + .method public static void run() cil managed + { + + .maxstack 4 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldloca.s V_0 + IL_0004: ldc.i4.5 + IL_0005: call void TailCall04::foo(int32&, + !!0) + IL_000a: nop + IL_000b: ret + + """ + ]) + + [] + let ``TailCall 05``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"; "--tailcalls+"|] + """ +module TailCall05 +let foo(x:int byref, y:int byref, z) = printfn "%d" (x+y) +let run() = let mutable x = 0 in foo(&x,&x,5) + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static void foo(int32& x, + int32& y, + !!a z) cil managed + { + + .maxstack 4 + .locals init (class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, + int32 V_1) + IL_0000: ldstr "%d" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: stloc.0 + IL_0010: ldarg.0 + IL_0011: ldobj [runtime]System.Int32 + IL_0016: ldarg.1 + IL_0017: ldobj [runtime]System.Int32 + IL_001c: add + IL_001d: stloc.1 + IL_001e: ldloc.0 + IL_001f: ldloc.1 + IL_0020: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0025: pop + IL_0026: ret + } + """ + """ + .method public static void run() cil managed + { + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldloca.s V_0 + IL_0004: ldloca.s V_0 + IL_0006: ldc.i4.5 + IL_0007: call void TailCall05::foo(int32&, + int32&, + !!0) + IL_000c: nop + IL_000d: ret + } + """ + ]) \ No newline at end of file diff --git a/tests/fsharp/Compiler/ILChecker.fs b/tests/fsharp/Compiler/ILChecker.fs index 7f29873bc6..4558d08911 100644 --- a/tests/fsharp/Compiler/ILChecker.fs +++ b/tests/fsharp/Compiler/ILChecker.fs @@ -40,7 +40,7 @@ module ILChecker = let unifyRuntimeAssemblyName ilCode = System.Text.RegularExpressions.Regex.Replace(ilCode, - "\[System.Runtime\]|\[mscorlib\]","[runtime]", + "\[System.Runtime\]|\[System.Runtime.Extensions\]|\[mscorlib\]","[runtime]", System.Text.RegularExpressions.RegexOptions.Singleline) let text = diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 7d9b70ebe6..563358e1a1 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -36,6 +36,7 @@ + diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.fs deleted file mode 100644 index 4a3f78fcfc..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #NoMono #NoMT #CodeGen #EmittedIL #Tailcall -// Regression test for DevDiv:72571 -let foo(x:int, y) = printfn "%d" x -let run() = let x = 0 in foo(x,5) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.il.bsl deleted file mode 100644 index 028bdaec33..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall01.il.bsl +++ /dev/null @@ -1,111 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly TailCall01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TailCall01 -{ - // Offset: 0x00000000 Length: 0x0000021D -} -.mresource public FSharpOptimizationData.TailCall01 -{ - // Offset: 0x00000228 Length: 0x0000007C -} -.module TailCall01.exe -// MVID: {59B19213-7D8F-CF4A-A745-03831392B159} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x02E90000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TailCall01 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static void foo(int32 x, - !!a y) cil managed - { - // Code size 27 (0x1b) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, - [1] int32 V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 21,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TailCalls\\TailCall01.fs' - IL_0000: ldstr "%d" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: stloc.0 - IL_0010: ldarg.0 - IL_0011: stloc.1 - IL_0012: ldloc.0 - IL_0013: ldloc.1 - IL_0014: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0019: pop - IL_001a: ret - } // end of method TailCall01::foo - - .method public static void run() cil managed - { - // Code size 12 (0xc) - .maxstack 4 - .locals init ([0] int32 x) - .line 4,4 : 13,22 '' - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - .line 4,4 : 26,34 '' - IL_0002: ldloc.0 - IL_0003: ldc.i4.5 - IL_0004: tail. - IL_0006: call void TailCall01::foo(int32, - !!0) - IL_000b: ret - } // end of method TailCall01::run - -} // end of class TailCall01 - -.class private abstract auto ansi sealed ''.$TailCall01 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 1 (0x1) - .maxstack 8 - IL_0000: ret - } // end of method $TailCall01::main@ - -} // end of class ''.$TailCall01 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.fs deleted file mode 100644 index 362e37f771..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #NoMono #NoMT #CodeGen #EmittedIL #Tailcall -// Regression test for DevDiv:72571 -let foo(x:int byref) = x -let run() = let mutable x = 0 in foo(&x) - diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.il.bsl deleted file mode 100644 index 8a7cd2907e..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall02.il.bsl +++ /dev/null @@ -1,97 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly TailCall02 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TailCall02 -{ - // Offset: 0x00000000 Length: 0x00000202 -} -.mresource public FSharpOptimizationData.TailCall02 -{ - // Offset: 0x00000208 Length: 0x0000007C -} -.module TailCall02.exe -// MVID: {59B19213-7D8F-CE9D-A745-03831392B159} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00E20000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TailCall02 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static int32 foo(int32& x) cil managed - { - // Code size 7 (0x7) - .maxstack 8 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 24,25 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TailCalls\\TailCall02.fs' - IL_0000: ldarg.0 - IL_0001: ldobj [mscorlib]System.Int32 - IL_0006: ret - } // end of method TailCall02::foo - - .method public static int32 run() cil managed - { - // Code size 10 (0xa) - .maxstack 3 - .locals init ([0] int32 x) - .line 4,4 : 13,30 '' - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - .line 4,4 : 34,41 '' - IL_0002: ldloca.s x - IL_0004: call int32 TailCall02::foo(int32&) - IL_0009: ret - } // end of method TailCall02::run - -} // end of class TailCall02 - -.class private abstract auto ansi sealed ''.$TailCall02 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 1 (0x1) - .maxstack 8 - IL_0000: ret - } // end of method $TailCall02::main@ - -} // end of class ''.$TailCall02 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.fs deleted file mode 100644 index 8311ca7af2..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #NoMono #NoMT #CodeGen #EmittedIL #Tailcall -// Regression test for DevDiv:72571 -let foo (x:int byref) (y:int byref) z = printfn "%d" (x+y) -let run() = let mutable x = 0 in foo &x &x 5 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.il.bsl deleted file mode 100644 index 0b27a3419b..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall03.il.bsl +++ /dev/null @@ -1,120 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly TailCall03 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TailCall03 -{ - // Offset: 0x00000000 Length: 0x00000241 -} -.mresource public FSharpOptimizationData.TailCall03 -{ - // Offset: 0x00000248 Length: 0x0000007C -} -.module TailCall03.exe -// MVID: {59B19213-7D8F-CE88-A745-03831392B159} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00E50000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TailCall03 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static void foo(int32& x, - int32& y, - !!a z) cil managed - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 03 00 00 00 01 00 00 00 01 00 00 00 01 00 - 00 00 00 00 ) - // Code size 39 (0x27) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, - [1] int32 V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 41,53 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TailCalls\\TailCall03.fs' - IL_0000: ldstr "%d" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: stloc.0 - IL_0010: ldarg.0 - IL_0011: ldobj [mscorlib]System.Int32 - IL_0016: ldarg.1 - IL_0017: ldobj [mscorlib]System.Int32 - IL_001c: add - IL_001d: stloc.1 - IL_001e: ldloc.0 - IL_001f: ldloc.1 - IL_0020: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0025: pop - IL_0026: ret - } // end of method TailCall03::foo - - .method public static void run() cil managed - { - // Code size 14 (0xe) - .maxstack 5 - .locals init ([0] int32 x) - .line 4,4 : 13,30 '' - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - .line 4,4 : 34,45 '' - IL_0002: ldloca.s x - IL_0004: ldloca.s x - IL_0006: ldc.i4.5 - IL_0007: call void TailCall03::foo(int32&, - int32&, - !!0) - IL_000c: nop - IL_000d: ret - } // end of method TailCall03::run - -} // end of class TailCall03 - -.class private abstract auto ansi sealed ''.$TailCall03 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 1 (0x1) - .maxstack 8 - IL_0000: ret - } // end of method $TailCall03::main@ - -} // end of class ''.$TailCall03 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.fs deleted file mode 100644 index 0872b95f9c..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #NoMono #NoMT #CodeGen #EmittedIL #Tailcall -// Regression test for DevDiv:72571 -let foo(x:int byref, y) = printfn "%d" x -let run() = let mutable x = 0 in foo(&x,5) - diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.il.bsl deleted file mode 100644 index 309f764e78..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall04.il.bsl +++ /dev/null @@ -1,112 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly TailCall04 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TailCall04 -{ - // Offset: 0x00000000 Length: 0x0000022F -} -.mresource public FSharpOptimizationData.TailCall04 -{ - // Offset: 0x00000238 Length: 0x0000007C -} -.module TailCall04.exe -// MVID: {59B19213-7D8F-CFE3-A745-03831392B159} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x00B70000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TailCall04 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static void foo(int32& x, - !!a y) cil managed - { - // Code size 32 (0x20) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, - [1] int32 V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,39 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TailCalls\\TailCall04.fs' - IL_0000: ldstr "%d" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: stloc.0 - IL_0010: ldarg.0 - IL_0011: ldobj [mscorlib]System.Int32 - IL_0016: stloc.1 - IL_0017: ldloc.0 - IL_0018: ldloc.1 - IL_0019: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_001e: pop - IL_001f: ret - } // end of method TailCall04::foo - - .method public static void run() cil managed - { - // Code size 12 (0xc) - .maxstack 4 - .locals init ([0] int32 x) - .line 4,4 : 13,30 '' - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - .line 4,4 : 34,43 '' - IL_0002: ldloca.s x - IL_0004: ldc.i4.5 - IL_0005: call void TailCall04::foo(int32&, - !!0) - IL_000a: nop - IL_000b: ret - } // end of method TailCall04::run - -} // end of class TailCall04 - -.class private abstract auto ansi sealed ''.$TailCall04 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 1 (0x1) - .maxstack 8 - IL_0000: ret - } // end of method $TailCall04::main@ - -} // end of class ''.$TailCall04 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.fs deleted file mode 100644 index 2796d18d97..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #NoMono #NoMT #CodeGen #EmittedIL #Tailcall -// Regression test for DevDiv:72571 -let foo(x:int byref, y:int byref, z) = printfn "%d" (x+y) -let run() = let mutable x = 0 in foo(&x,&x,5) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.il.bsl deleted file mode 100644 index 5ae3bd0b33..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/TailCall05.il.bsl +++ /dev/null @@ -1,118 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly TailCall05 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.TailCall05 -{ - // Offset: 0x00000000 Length: 0x0000023F -} -.mresource public FSharpOptimizationData.TailCall05 -{ - // Offset: 0x00000248 Length: 0x0000007C -} -.module TailCall05.exe -// MVID: {59B19213-7D8F-CFC6-A745-03831392B159} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x03210000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed TailCall05 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public static void foo(int32& x, - int32& y, - !!a z) cil managed - { - // Code size 39 (0x27) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, - [1] int32 V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 40,52 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TailCalls\\TailCall05.fs' - IL_0000: ldstr "%d" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: stloc.0 - IL_0010: ldarg.0 - IL_0011: ldobj [mscorlib]System.Int32 - IL_0016: ldarg.1 - IL_0017: ldobj [mscorlib]System.Int32 - IL_001c: add - IL_001d: stloc.1 - IL_001e: ldloc.0 - IL_001f: ldloc.1 - IL_0020: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0025: pop - IL_0026: ret - } // end of method TailCall05::foo - - .method public static void run() cil managed - { - // Code size 14 (0xe) - .maxstack 5 - .locals init ([0] int32 x) - .line 4,4 : 13,30 '' - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - .line 4,4 : 34,46 '' - IL_0002: ldloca.s x - IL_0004: ldloca.s x - IL_0006: ldc.i4.5 - IL_0007: call void TailCall05::foo(int32&, - int32&, - !!0) - IL_000c: nop - IL_000d: ret - } // end of method TailCall05::run - -} // end of class TailCall05 - -.class private abstract auto ansi sealed ''.$TailCall05 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 1 (0x1) - .maxstack 8 - IL_0000: ret - } // end of method $TailCall05::main@ - -} // end of class ''.$TailCall05 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst deleted file mode 100644 index 0c87dd2fbb..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst +++ /dev/null @@ -1,5 +0,0 @@ - SOURCE=TailCall01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall01.exe" # TailCall01.fs - - SOURCE=TailCall02.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall02.exe" # TailCall02.fs - - SOURCE=TailCall03.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall03.exe" # TailCall03.fs - - SOURCE=TailCall04.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall04.exe" # TailCall04.fs - - SOURCE=TailCall05.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall05.exe" # TailCall05.fs - diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/keep.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/keep.lst deleted file mode 100644 index f59ec20aab..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/keep.lst +++ /dev/null @@ -1 +0,0 @@ -* \ No newline at end of file From 3b47477c1cfb70b6e2c8268e0ca6d5a3a3fcbd44 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 30 Oct 2019 19:19:01 -0700 Subject: [PATCH 065/214] Update DotNetFrameworkDependencies.fs --- src/fsharp/DotNetFrameworkDependencies.fs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index f28f125636..8c9c98c16d 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -6,6 +6,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies open System open System.Collections.Generic + open System.Globalization open System.IO open System.Reflection From a61b6f1ab6aa03949b118a017715527fa9f936b3 Mon Sep 17 00:00:00 2001 From: Fraser Waters Date: Thu, 31 Oct 2019 15:30:00 +0000 Subject: [PATCH 066/214] Delete duplicate test (#7412) * Delete duplicate test StartTask was exactly the same as CreateTask 50 lines above. * Restore poorly merged test case --- .../Microsoft.FSharp.Control/AsyncType.fs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index 79a179bea1..2966bf32d4 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -199,20 +199,6 @@ type AsyncType() = | _ -> reraise() Assert.IsTrue (tcs.Task.IsCompleted, "Task is not completed") - [] - member this.StartTask () = - let s = "Hello tasks!" - let a = async { return s } -#if !NET46 - let t = -#else - use t = -#endif - Async.StartAsTask a - this.WaitASec t - Assert.IsTrue (t.IsCompleted) - Assert.AreEqual(s, t.Result) - [] member this.RunSynchronouslyCancellationWithDelayedResult () = let cts = new CancellationTokenSource() From 3352b0e64d3a565f47ba2fb4cf7a6f1be9ca86cd Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 31 Oct 2019 10:16:27 -0700 Subject: [PATCH 067/214] Resolve native dependencies (#7782) * Resolve native dependencies * Feedback * quotes * temp * collectible=false --- eng/Build.ps1 | 9 + .../FSharpScript.fs | 6 +- .../FSharp.DependencyManager.Utilities.fs | 8 +- src/fsharp/fsi/fsi.fs | 167 +- ...ompiler.Private.Scripting.UnitTests.fsproj | 1 + .../FSharpScriptTests.fs | 79 + .../housing.csv | 20641 ++++++++++++++++ 7 files changed, 20889 insertions(+), 22 deletions(-) create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 6041f93421..d68a683f29 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -51,6 +51,7 @@ param ( [switch]$testDependencyManager, [switch]$testFSharpCore, [switch]$testFSharpQA, + [switch]$testScripting, [switch]$testVs, [switch]$testAll, [string]$officialSkipTests = "false", @@ -88,6 +89,7 @@ function Print-Usage() { Write-Host " -testCoreClr Run tests against CoreCLR" Write-Host " -testFSharpCore Run FSharpCore unit tests" Write-Host " -testFSharpQA Run F# Cambridge tests" + Write-Host " -testScripting Run Scripting tests" Write-Host " -testVs Run F# editor unit tests" Write-Host " -officialSkipTests Set to 'true' to skip running tests" Write-Host "" @@ -401,6 +403,13 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $coreclrTargetFramework } + if ($testScripting) { + if (-not $noVisualStudio) { + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework + } + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework + } + if ($testVs -and -not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\vsintegration\tests\GetTypesVS.UnitTests\GetTypesVS.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\vsintegration\tests\UnitTests\VisualFSharp.UnitTests.fsproj" -targetFramework $desktopTargetFramework diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index c0ce545e07..1d79c01746 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -31,9 +31,13 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st ())() let config = FsiEvaluationSession.GetDefaultConfiguration() +#if NETSTANDARD let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] +#else + let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--quiet" |] +#endif let argv = Array.append baseArgs additionalArgs - let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) + let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr) member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index b5b8d481e2..19ac1fede5 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -249,7 +249,6 @@ $(PACKAGEREFERENCES) $(FSharpToolsDirectory)/$(FSharpDesignTimeProtocol)/%(_ResolvedOutputFiles.NearestTargetFramework)/%(_ResolvedOutputFiles.FileName)%(_ResolvedOutputFiles.Extension) - @@ -262,6 +261,11 @@ $(PACKAGEREFERENCES) $(%(FsxResolvedFile.PackageRootProperty)) $(%(FsxResolvedFile.PackageRootProperty))\content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx + + $([System.String]::Copy('%(FullPath)').Substring(0, $([System.String]::Copy('%(FullPath)').LastIndexOf('runtimes')))) + @@ -277,6 +281,8 @@ $(PACKAGEREFERENCES) + + diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 1913284f49..98bdb1886a 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -19,6 +19,10 @@ open System.Text open System.Threading open System.Reflection open System.Runtime.CompilerServices +#if NETSTANDARD +open System.Runtime.Loader +#endif + open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Diagnostics @@ -1118,6 +1122,7 @@ type internal FsiDynamicCompiler [mkSynId rangeStdin (FsiDynamicModulePrefix + sprintf "%04d" i)] member __.DynamicAssemblyName = assemblyName + member __.DynamicAssembly = (assemblyBuilder :> Assembly) member __.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) = @@ -1536,10 +1541,27 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso // - The requesting assembly (that is, the assembly that is returned by the ResolveEventArgs.RequestingAssembly property) // was loaded without context. // +// On the coreclr we add an UnmanagedDll Resoution handler to ensure that native dll's can be searched for, +// the desktop version of the Clr does not support this mechanism. +// // For information about contexts, see the Assembly.LoadFrom(String) method overload. module internal MagicAssemblyResolution = - // FxCop identifies Assembly.LoadFrom. + +#if NETSTANDARD + // Cut down AssemblyLoadContext, for loading native libraries + type FsiNativeAssemblyLoadContext () = + inherit AssemblyLoadContext() + + member this.LoadNativeLibrary(path: string): IntPtr = + base.LoadUnmanagedDllFromPath(path) + + override _.Load(_path: AssemblyName): Assembly = + raise (NotImplementedException()) + + static member NativeLoadContext = new FsiNativeAssemblyLoadContext() +#endif + // See bug 5501 for details on decision to use UnsafeLoadFrom here. // Summary: // It is an explicit user trust decision to load an assembly with #r. Scripts are not run automatically (for example, by double-clicking in explorer). @@ -1550,7 +1572,7 @@ module internal MagicAssemblyResolution = let Install(tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput) = - let ResolveAssembly (ctok, m, tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput, fullAssemName:string) = + let ResolveAssembly (ctok, m, tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput, fullAssemName: string) = try // Grab the name of the assembly @@ -1641,18 +1663,127 @@ module internal MagicAssemblyResolution = stopProcessingRecovery e range0 null +#if NETSTANDARD + let probingFileNames (name: string) = + // coreclr native library probing algorithm: https://github.com/dotnet/coreclr/blob/9773db1e7b1acb3ec75c9cc0e36bd62dcbacd6d5/src/System.Private.CoreLib/shared/System/Runtime/Loader/LibraryNameVariation.Unix.cs + let isRooted = Path.IsPathRooted name + let useSuffix s = not (name.Contains(s + ".") || name.EndsWith(s)) // linux devs often append version # to libraries I.e mydll.so.5.3.2 + let usePrefix = name.IndexOf(Path.DirectorySeparatorChar) = -1 // If name has directory information no add no prefix + && name.IndexOf(Path.AltDirectorySeparatorChar) = -1 + && name.IndexOf(Path.PathSeparator) = -1 + && name.IndexOf(Path.VolumeSeparatorChar) = -1 + let prefix = [| "lib" |] + let suffix = [| + if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then + ".dll" + ".exe" + elif RuntimeInformation.IsOSPlatform(OSPlatform.OSX) then + ".dylib" + else + ".so" + |] + + [| + yield name // Bare name + if not (isRooted) then + for s in suffix do + if useSuffix s then // Suffix without prefix + yield (sprintf "%s%s" name s) + if usePrefix then + for p in prefix do // Suffix with prefix + yield (sprintf "%s%s%s" p name s) + elif usePrefix then + for p in prefix do // Prefix + yield (sprintf "%s%s" p name) + |] + + // Directories to start probing in + // Algorithm: + // Search for native libraries using: + // 1. Include directories + // 2. compilerToolPath directories + // 3. reference dll's + // 4. The implicit include directory + let probingRoots = + seq { + yield! tcConfigB.includes + yield! tcConfigB.compilerToolPaths + yield! (tcConfigB.referencedDLLs |> Seq.map(fun ref -> Path.GetDirectoryName(ref.Text))) + yield tcConfigB.implicitIncludeDir + } |>Seq.distinct + + // Computer valid dotnet-rids for this environment: + // https://docs.microsoft.com/en-us/dotnet/core/rid-catalog + // + // Where rid is: win, win-x64, win-x86, osx-x64, linux-x64 etc ... + let probingRids = + let processArchitecture = RuntimeInformation.ProcessArchitecture + let baseRid = + if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then "win" + elif RuntimeInformation.IsOSPlatform(OSPlatform.OSX) then "osx" + else "linux" + let platformRid = + match processArchitecture with + | Architecture.X64 -> baseRid + "-x64" + | Architecture.X86 -> baseRid + "-x86" + | Architecture.Arm64 -> baseRid + "-arm64" + | _ -> baseRid + "arm" + [| "any"; baseRid; platformRid |] + + let resolveUnmanagedDll (assembly : Assembly) (name : string) : IntPtr = + ignore assembly + + // Enumerate probing roots looking for a dll that matches the probing name in the probed locations + let probeForNativeLibrary root rid name = + // Look for name in root + probingFileNames name |> Array.tryPick(fun name -> + let path = Path.Combine(root, "runtimes", rid, "native", name) + if File.Exists(path) then + Some path + else + None) + + let probe = + probingRoots |> Seq.tryPick(fun root -> + probingFileNames name |> Seq.tryPick(fun name -> + let path = Path.Combine(root, name) + if File.Exists(path) then + Some path + else + probingRids |> Seq.tryPick(fun rid -> probeForNativeLibrary root rid name))) + + match probe with + | Some path -> FsiNativeAssemblyLoadContext.NativeLoadContext.LoadNativeLibrary(path) + | None -> IntPtr.Zero +#endif + let rangeStdin = rangeN Lexhelp.stdinMockFilename 0 - let handler = new ResolveEventHandler(fun _ args -> + let resolveAssembly = new ResolveEventHandler(fun _ args -> // Explanation: our understanding is that magic assembly resolution happens // during compilation. So we recover the CompilationThreadToken here. let ctok = AssumeCompilationThreadWithoutEvidence () ResolveAssembly (ctok, rangeStdin, tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput, args.Name)) - AppDomain.CurrentDomain.add_AssemblyResolve(handler) + AppDomain.CurrentDomain.add_AssemblyResolve(resolveAssembly) - { new System.IDisposable with - member x.Dispose() = AppDomain.CurrentDomain.remove_AssemblyResolve(handler) } +#if NETSTANDARD + // netstandard 2.1 has this property, unfortunately we don't build with that yet + //public event Func ResolvingUnmanagedDll + let resolveUnmanagedHandler = Func (resolveUnmanagedDll) + let eventInfo = typeof.GetEvent("ResolvingUnmanagedDll") + if not (isNull eventInfo) then + eventInfo.AddEventHandler(AssemblyLoadContext.Default, resolveUnmanagedHandler) +#endif + + { new System.IDisposable with + member x.Dispose() = + AppDomain.CurrentDomain.remove_AssemblyResolve(resolveAssembly) +#if NETSTANDARD + if not (isNull eventInfo) then + eventInfo.RemoveEventHandler(AssemblyLoadContext.Default, resolveUnmanagedHandler) +#endif + } //---------------------------------------------------------------------------- // Reading stdin @@ -2399,7 +2530,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i | None -> SimulatedMSBuildReferenceResolver.getResolver() | Some rr -> rr - let tcConfigB = + let tcConfigB = TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir=defaultFSharpBinariesDir, reduceMemoryUsage=ReduceMemoryFlag.Yes, @@ -2495,8 +2626,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// The lock stops the type checker running at the same time as the server intellisense implementation. let tcLockObject = box 7 // any new object will do - - let resolveAssemblyRef (aref: ILAssemblyRef) = + + let resolveAssemblyRef (aref: ILAssemblyRef) = // Explanation: This callback is invoked during compilation to resolve assembly references // We don't yet propagate the ctok through these calls (though it looks plausible to do so). let ctok = AssumeCompilationThreadWithoutEvidence () @@ -2509,9 +2640,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i | Some resolvedPath -> Some (Choice1Of2 resolvedPath) | None -> None - let fsiDynamicCompiler = FsiDynamicCompiler(fsi, timeReporter, tcConfigB, tcLockObject, outWriter, tcImports, tcGlobals, fsiOptions, fsiConsoleOutput, fsiCollectible, niceNameGen, resolveAssemblyRef) + let fsiDynamicCompiler = FsiDynamicCompiler(fsi, timeReporter, tcConfigB, tcLockObject, outWriter, tcImports, tcGlobals, fsiOptions, fsiConsoleOutput, fsiCollectible, niceNameGen, resolveAssemblyRef) - let fsiInterruptController = FsiInterruptController(fsiOptions, fsiConsoleOutput) + let fsiInterruptController = FsiInterruptController(fsiOptions, fsiConsoleOutput) let uninstallMagicAssemblyResolution = MagicAssemblyResolution.Install(tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput) @@ -2728,9 +2859,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// A background thread is started by this thread to read from the inReader and/or console reader. [] - member x.Run() = + member x.Run() = progress := condition "FSHARP_INTERACTIVE_PROGRESS" - + // Explanation: When Run is called we do a bunch of processing. For fsi.exe // and fsiAnyCpu.exe there are no other active threads at this point, so we can assume this is the // unique compilation thread. For other users of FsiEvaluationSession it is reasonable to assume that @@ -2782,12 +2913,11 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // to be explicitly kept alive. GC.KeepAlive fsiInterruptController.EventHandlers - static member Create(fsiConfig, argv, inReader, outWriter, errorWriter, ?collectible, ?legacyReferenceResolver) = new FsiEvaluationSession(fsiConfig, argv, inReader, outWriter, errorWriter, defaultArg collectible false, legacyReferenceResolver) - + static member GetDefaultConfiguration(fsiObj:obj) = FsiEvaluationSession.GetDefaultConfiguration(fsiObj, true) - + static member GetDefaultConfiguration(fsiObj:obj, useFsiAuxLib: bool) = // We want to avoid modifying FSharp.Compiler.Interactive.Settings to avoid republishing that DLL. // So we access these via reflection @@ -2810,8 +2940,6 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i member __.EventLoopScheduleRestart() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "ScheduleRestart" member __.UseFsiAuxLib = useFsiAuxLib member __.GetOptionalConsoleReadLine(_probe) = None } - - //------------------------------------------------------------------------------- // If no "fsi" object for the configuration is specified, make the default // configuration one which stores the settings in-process @@ -2821,7 +2949,7 @@ module Settings = abstract Run : unit -> bool abstract Invoke : (unit -> 'T) -> 'T abstract ScheduleRestart : unit -> unit - + // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll // by providing an optional reimplementation of the functionality @@ -2867,7 +2995,6 @@ module Settings = runSignal.Dispose() exitSignal.Dispose() doneSignal.Dispose() - [] diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj index 0f4e92e5df..db0fdb8cdc 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -12,6 +12,7 @@ + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 1ef04b28ec..e68243f1aa 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -119,6 +119,85 @@ type InteractiveTests() = script.Eval("0") |> ignoreValue Assert.GreaterOrEqual(assemblyRefCount, 2) +/// Native dll resolution is not implemented on desktop +#if NETSTANDARD + [] + member __.``ML - use assembly with native dependencies``() = + let code = @" +#r ""nuget:RestoreSources=https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json"" +#r ""nuget:Microsoft.ML,version=1.4.0-preview"" +#r ""nuget:Microsoft.ML.AutoML,version=0.16.0-preview"" +#r ""nuget:Microsoft.Data.DataFrame,version=0.1.1-e191008-1"" + +open System +open System.IO +open System.Linq +open Microsoft.Data + +let Shuffle (arr:int[]) = + let rnd = Random() + for i in 0 .. arr.Length - 1 do + let r = i + rnd.Next(arr.Length - i) + let temp = arr.[r] + arr.[r] <- arr.[i] + arr.[i] <- temp + arr + +let housingPath = ""housing.csv"" +let housingData = DataFrame.ReadCsv(housingPath) +let randomIndices = (Shuffle(Enumerable.Range(0, (int (housingData.RowCount) - 1)).ToArray())) +let testSize = int (float (housingData.RowCount) * 0.1) +let trainRows = randomIndices.[testSize..] +let testRows = randomIndices.[..testSize] +let housing_train = housingData.[trainRows] + +open Microsoft.ML +open Microsoft.ML.Data +open Microsoft.ML.AutoML + +let mlContext = MLContext() +let experiment = mlContext.Auto().CreateRegressionExperiment(maxExperimentTimeInSeconds = 15u) +let result = experiment.Execute(housing_train, labelColumnName = ""median_house_value"") +let details = result.RunDetails +printfn ""%A"" result +123 +" + use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) + let mutable assemblyRefCount = 0; + Event.add (fun _ -> assemblyRefCount <- assemblyRefCount + 1) script.AssemblyReferenceAdded + let opt = script.Eval(code) |> getValue + let value = opt.Value + Assert.AreEqual(123, value.ReflectionValue :?> int32) +#endif + + + [] + member __.``Simple pinvoke should not be impacted by native resolver``() = + let code = @" +open System +open System.Runtime.InteropServices + +module Imports = + [] + extern uint32 GetCurrentProcessId() + + [] + extern uint32 getpid() + +// Will throw exception if fails +if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then + printfn ""Current process: %d"" (Imports.GetCurrentProcessId()) +else + printfn ""Current process: %d"" (Imports.getpid()) +123 +" + use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) + let mutable assemblyRefCount = 0; + let opt = script.Eval(code) |> getValue + let value = opt.Value + Assert.AreEqual(123, value.ReflectionValue :?> int32) + + [] member _.``Evaluation can be cancelled``() = use script = new FSharpScript() diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv b/tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv new file mode 100644 index 0000000000..d5e3fa2499 --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv @@ -0,0 +1,20641 @@ +longitude,latitude,housing_median_age,total_rooms,total_bedrooms,population,households,median_income,median_house_value,ocean_proximity +-122.23,37.88,41.0,880.0,129.0,322.0,126.0,8.3252,452600.0,NEAR BAY +-122.22,37.86,21.0,7099.0,1106.0,2401.0,1138.0,8.3014,358500.0,NEAR BAY +-122.24,37.85,52.0,1467.0,190.0,496.0,177.0,7.2574,352100.0,NEAR BAY +-122.25,37.85,52.0,1274.0,235.0,558.0,219.0,5.6431,341300.0,NEAR BAY +-122.25,37.85,52.0,1627.0,280.0,565.0,259.0,3.8462,342200.0,NEAR BAY +-122.25,37.85,52.0,919.0,213.0,413.0,193.0,4.0368,269700.0,NEAR BAY +-122.25,37.84,52.0,2535.0,489.0,1094.0,514.0,3.6591,299200.0,NEAR BAY +-122.25,37.84,52.0,3104.0,687.0,1157.0,647.0,3.12,241400.0,NEAR BAY +-122.26,37.84,42.0,2555.0,665.0,1206.0,595.0,2.0804,226700.0,NEAR BAY +-122.25,37.84,52.0,3549.0,707.0,1551.0,714.0,3.6912,261100.0,NEAR BAY +-122.26,37.85,52.0,2202.0,434.0,910.0,402.0,3.2031,281500.0,NEAR BAY +-122.26,37.85,52.0,3503.0,752.0,1504.0,734.0,3.2705,241800.0,NEAR BAY +-122.26,37.85,52.0,2491.0,474.0,1098.0,468.0,3.075,213500.0,NEAR BAY +-122.26,37.84,52.0,696.0,191.0,345.0,174.0,2.6736,191300.0,NEAR BAY +-122.26,37.85,52.0,2643.0,626.0,1212.0,620.0,1.9167,159200.0,NEAR BAY +-122.26,37.85,50.0,1120.0,283.0,697.0,264.0,2.125,140000.0,NEAR BAY +-122.27,37.85,52.0,1966.0,347.0,793.0,331.0,2.775,152500.0,NEAR BAY +-122.27,37.85,52.0,1228.0,293.0,648.0,303.0,2.1202,155500.0,NEAR BAY +-122.26,37.84,50.0,2239.0,455.0,990.0,419.0,1.9911,158700.0,NEAR BAY +-122.27,37.84,52.0,1503.0,298.0,690.0,275.0,2.6033,162900.0,NEAR BAY +-122.27,37.85,40.0,751.0,184.0,409.0,166.0,1.3578,147500.0,NEAR BAY +-122.27,37.85,42.0,1639.0,367.0,929.0,366.0,1.7135,159800.0,NEAR BAY +-122.27,37.84,52.0,2436.0,541.0,1015.0,478.0,1.725,113900.0,NEAR BAY +-122.27,37.84,52.0,1688.0,337.0,853.0,325.0,2.1806,99700.0,NEAR BAY +-122.27,37.84,52.0,2224.0,437.0,1006.0,422.0,2.6,132600.0,NEAR BAY +-122.28,37.85,41.0,535.0,123.0,317.0,119.0,2.4038,107500.0,NEAR BAY +-122.28,37.85,49.0,1130.0,244.0,607.0,239.0,2.4597,93800.0,NEAR BAY +-122.28,37.85,52.0,1898.0,421.0,1102.0,397.0,1.808,105500.0,NEAR BAY +-122.28,37.84,50.0,2082.0,492.0,1131.0,473.0,1.6424,108900.0,NEAR BAY +-122.28,37.84,52.0,729.0,160.0,395.0,155.0,1.6875,132000.0,NEAR BAY +-122.28,37.84,49.0,1916.0,447.0,863.0,378.0,1.9274,122300.0,NEAR BAY +-122.28,37.84,52.0,2153.0,481.0,1168.0,441.0,1.9615,115200.0,NEAR BAY +-122.27,37.84,48.0,1922.0,409.0,1026.0,335.0,1.7969,110400.0,NEAR BAY +-122.27,37.83,49.0,1655.0,366.0,754.0,329.0,1.375,104900.0,NEAR BAY +-122.27,37.83,51.0,2665.0,574.0,1258.0,536.0,2.7303,109700.0,NEAR BAY +-122.27,37.83,49.0,1215.0,282.0,570.0,264.0,1.4861,97200.0,NEAR BAY +-122.27,37.83,48.0,1798.0,432.0,987.0,374.0,1.0972,104500.0,NEAR BAY +-122.28,37.83,52.0,1511.0,390.0,901.0,403.0,1.4103,103900.0,NEAR BAY +-122.26,37.83,52.0,1470.0,330.0,689.0,309.0,3.48,191400.0,NEAR BAY +-122.26,37.83,52.0,2432.0,715.0,1377.0,696.0,2.5898,176000.0,NEAR BAY +-122.26,37.83,52.0,1665.0,419.0,946.0,395.0,2.0978,155400.0,NEAR BAY +-122.26,37.83,51.0,936.0,311.0,517.0,249.0,1.2852,150000.0,NEAR BAY +-122.26,37.84,49.0,713.0,202.0,462.0,189.0,1.025,118800.0,NEAR BAY +-122.26,37.84,52.0,950.0,202.0,467.0,198.0,3.9643,188800.0,NEAR BAY +-122.26,37.83,52.0,1443.0,311.0,660.0,292.0,3.0125,184400.0,NEAR BAY +-122.26,37.83,52.0,1656.0,420.0,718.0,382.0,2.6768,182300.0,NEAR BAY +-122.26,37.83,50.0,1125.0,322.0,616.0,304.0,2.026,142500.0,NEAR BAY +-122.27,37.82,43.0,1007.0,312.0,558.0,253.0,1.7348,137500.0,NEAR BAY +-122.26,37.82,40.0,624.0,195.0,423.0,160.0,0.9506,187500.0,NEAR BAY +-122.27,37.82,40.0,946.0,375.0,700.0,352.0,1.775,112500.0,NEAR BAY +-122.27,37.82,21.0,896.0,453.0,735.0,438.0,0.9218,171900.0,NEAR BAY +-122.27,37.82,43.0,1868.0,456.0,1061.0,407.0,1.5045,93800.0,NEAR BAY +-122.27,37.82,41.0,3221.0,853.0,1959.0,720.0,1.1108,97500.0,NEAR BAY +-122.27,37.82,52.0,1630.0,456.0,1162.0,400.0,1.2475,104200.0,NEAR BAY +-122.28,37.82,52.0,1170.0,235.0,701.0,233.0,1.6098,87500.0,NEAR BAY +-122.28,37.82,52.0,945.0,243.0,576.0,220.0,1.4113,83100.0,NEAR BAY +-122.28,37.82,52.0,1238.0,288.0,622.0,259.0,1.5057,87500.0,NEAR BAY +-122.28,37.82,52.0,1489.0,335.0,728.0,244.0,0.8172,85300.0,NEAR BAY +-122.28,37.82,52.0,1387.0,341.0,1074.0,304.0,1.2171,80300.0,NEAR BAY +-122.29,37.82,2.0,158.0,43.0,94.0,57.0,2.5625,60000.0,NEAR BAY +-122.29,37.83,52.0,1121.0,211.0,554.0,187.0,3.3929,75700.0,NEAR BAY +-122.29,37.82,49.0,135.0,29.0,86.0,23.0,6.1183,75000.0,NEAR BAY +-122.29,37.81,50.0,760.0,190.0,377.0,122.0,0.9011,86100.0,NEAR BAY +-122.3,37.81,52.0,1224.0,237.0,521.0,159.0,1.191,76100.0,NEAR BAY +-122.3,37.81,48.0,828.0,182.0,392.0,133.0,2.5938,73500.0,NEAR BAY +-122.3,37.81,52.0,1010.0,209.0,604.0,187.0,1.1667,78400.0,NEAR BAY +-122.3,37.81,48.0,1455.0,354.0,788.0,332.0,0.8056,84400.0,NEAR BAY +-122.29,37.8,52.0,1027.0,244.0,492.0,147.0,2.6094,81300.0,NEAR BAY +-122.3,37.81,52.0,572.0,109.0,274.0,82.0,1.8516,85000.0,NEAR BAY +-122.29,37.81,46.0,2801.0,644.0,1823.0,611.0,0.9802,129200.0,NEAR BAY +-122.29,37.81,26.0,768.0,152.0,392.0,127.0,1.7719,82500.0,NEAR BAY +-122.29,37.81,46.0,935.0,297.0,582.0,277.0,0.7286,95200.0,NEAR BAY +-122.29,37.81,49.0,844.0,204.0,560.0,152.0,1.75,75000.0,NEAR BAY +-122.29,37.81,46.0,12.0,4.0,18.0,7.0,0.4999,67500.0,NEAR BAY +-122.29,37.81,20.0,835.0,161.0,290.0,133.0,2.483,137500.0,NEAR BAY +-122.28,37.81,17.0,1237.0,462.0,762.0,439.0,0.9241,177500.0,NEAR BAY +-122.28,37.81,36.0,2914.0,562.0,1236.0,509.0,2.4464,102100.0,NEAR BAY +-122.28,37.81,19.0,1207.0,243.0,721.0,207.0,1.1111,108300.0,NEAR BAY +-122.29,37.81,23.0,1745.0,374.0,1054.0,325.0,0.8026,112500.0,NEAR BAY +-122.28,37.8,38.0,684.0,176.0,344.0,155.0,2.0114,131300.0,NEAR BAY +-122.28,37.81,17.0,924.0,289.0,609.0,289.0,1.5,162500.0,NEAR BAY +-122.27,37.81,52.0,210.0,56.0,183.0,56.0,1.1667,112500.0,NEAR BAY +-122.28,37.81,52.0,340.0,97.0,200.0,87.0,1.5208,112500.0,NEAR BAY +-122.28,37.81,52.0,386.0,164.0,346.0,155.0,0.8075,137500.0,NEAR BAY +-122.28,37.81,35.0,948.0,184.0,467.0,169.0,1.8088,118800.0,NEAR BAY +-122.28,37.81,52.0,773.0,143.0,377.0,115.0,2.4083,98200.0,NEAR BAY +-122.27,37.81,40.0,880.0,451.0,582.0,380.0,0.977,118800.0,NEAR BAY +-122.27,37.81,10.0,875.0,348.0,546.0,330.0,0.76,162500.0,NEAR BAY +-122.27,37.8,10.0,105.0,42.0,125.0,39.0,0.9722,137500.0,NEAR BAY +-122.27,37.8,52.0,249.0,78.0,396.0,85.0,1.2434,500001.0,NEAR BAY +-122.27,37.8,16.0,994.0,392.0,800.0,362.0,2.0938,162500.0,NEAR BAY +-122.28,37.8,52.0,215.0,87.0,904.0,88.0,0.8668,137500.0,NEAR BAY +-122.28,37.8,52.0,96.0,31.0,191.0,34.0,0.75,162500.0,NEAR BAY +-122.27,37.79,27.0,1055.0,347.0,718.0,302.0,2.6354,187500.0,NEAR BAY +-122.27,37.8,39.0,1715.0,623.0,1327.0,467.0,1.8477,179200.0,NEAR BAY +-122.26,37.8,36.0,5329.0,2477.0,3469.0,2323.0,2.0096,130000.0,NEAR BAY +-122.26,37.82,31.0,4596.0,1331.0,2048.0,1180.0,2.8345,183800.0,NEAR BAY +-122.26,37.81,29.0,335.0,107.0,202.0,91.0,2.0062,125000.0,NEAR BAY +-122.26,37.82,22.0,3682.0,1270.0,2024.0,1250.0,1.2185,170000.0,NEAR BAY +-122.26,37.82,37.0,3633.0,1085.0,1838.0,980.0,2.6104,193100.0,NEAR BAY +-122.25,37.81,29.0,4656.0,1414.0,2304.0,1250.0,2.4912,257800.0,NEAR BAY +-122.25,37.81,28.0,5806.0,1603.0,2563.0,1497.0,3.2177,273400.0,NEAR BAY +-122.25,37.81,39.0,854.0,242.0,389.0,228.0,3.125,237500.0,NEAR BAY +-122.25,37.81,52.0,2155.0,701.0,895.0,613.0,2.5795,350000.0,NEAR BAY +-122.26,37.81,34.0,5871.0,1914.0,2689.0,1789.0,2.8406,335700.0,NEAR BAY +-122.24,37.82,52.0,1509.0,225.0,674.0,244.0,4.9306,313400.0,NEAR BAY +-122.24,37.81,52.0,2026.0,482.0,709.0,456.0,3.2727,268500.0,NEAR BAY +-122.25,37.81,52.0,1758.0,460.0,686.0,422.0,3.1691,259400.0,NEAR BAY +-122.24,37.82,52.0,3481.0,751.0,1444.0,718.0,3.9,275700.0,NEAR BAY +-122.25,37.82,28.0,3337.0,855.0,1520.0,802.0,3.9063,225000.0,NEAR BAY +-122.25,37.82,52.0,1424.0,289.0,550.0,253.0,5.0917,262500.0,NEAR BAY +-122.25,37.82,32.0,3809.0,1098.0,1806.0,1022.0,2.6429,218500.0,NEAR BAY +-122.25,37.82,26.0,3959.0,1196.0,1749.0,1217.0,3.0233,255000.0,NEAR BAY +-122.25,37.83,52.0,2376.0,559.0,939.0,519.0,3.1484,224100.0,NEAR BAY +-122.25,37.83,35.0,1613.0,428.0,675.0,422.0,3.4722,243100.0,NEAR BAY +-122.25,37.83,52.0,1279.0,287.0,534.0,291.0,3.1429,231600.0,NEAR BAY +-122.25,37.83,28.0,5022.0,1750.0,2558.0,1661.0,2.4234,218500.0,NEAR BAY +-122.25,37.83,52.0,4190.0,1105.0,1786.0,1037.0,3.0897,234100.0,NEAR BAY +-122.23,37.84,50.0,2515.0,399.0,970.0,373.0,5.8596,327600.0,NEAR BAY +-122.23,37.84,47.0,3175.0,454.0,1098.0,485.0,5.2868,347600.0,NEAR BAY +-122.24,37.83,41.0,2576.0,406.0,794.0,376.0,5.956,366100.0,NEAR BAY +-122.24,37.85,37.0,334.0,54.0,98.0,47.0,4.9643,335000.0,NEAR BAY +-122.23,37.85,52.0,2800.0,411.0,1061.0,403.0,6.3434,373600.0,NEAR BAY +-122.24,37.84,52.0,3529.0,574.0,1177.0,555.0,5.1773,389500.0,NEAR BAY +-122.24,37.85,52.0,2612.0,365.0,901.0,367.0,7.2354,391100.0,NEAR BAY +-122.22,37.85,28.0,5287.0,1048.0,2031.0,956.0,5.457,337300.0,NEAR BAY +-122.22,37.84,50.0,2935.0,473.0,1031.0,479.0,7.5,295200.0,NEAR BAY +-122.21,37.84,44.0,3424.0,597.0,1358.0,597.0,6.0194,292300.0,NEAR BAY +-122.21,37.83,40.0,4991.0,674.0,1616.0,654.0,7.5544,411500.0,NEAR BAY +-122.2,37.84,30.0,2211.0,346.0,844.0,343.0,6.0666,311500.0,NEAR BAY +-122.21,37.84,34.0,3038.0,490.0,1140.0,496.0,7.0548,325900.0,NEAR BAY +-122.19,37.84,18.0,1617.0,210.0,533.0,194.0,11.6017,392600.0,NEAR BAY +-122.2,37.84,35.0,2865.0,460.0,1072.0,443.0,7.4882,319300.0,NEAR BAY +-122.21,37.83,34.0,5065.0,788.0,1627.0,766.0,6.8976,333300.0,NEAR BAY +-122.19,37.83,28.0,1326.0,184.0,463.0,190.0,8.2049,335200.0,NEAR BAY +-122.2,37.83,26.0,1589.0,223.0,542.0,211.0,8.401,351200.0,NEAR BAY +-122.19,37.83,29.0,1791.0,271.0,661.0,269.0,6.8538,368900.0,NEAR BAY +-122.19,37.82,32.0,1835.0,264.0,635.0,263.0,8.317,365900.0,NEAR BAY +-122.2,37.82,37.0,1229.0,181.0,420.0,176.0,7.0175,366700.0,NEAR BAY +-122.2,37.82,39.0,3770.0,534.0,1265.0,500.0,6.3302,362800.0,NEAR BAY +-122.18,37.81,30.0,292.0,38.0,126.0,52.0,6.3624,483300.0,NEAR BAY +-122.21,37.82,52.0,2375.0,333.0,813.0,350.0,7.0549,331400.0,NEAR BAY +-122.2,37.81,45.0,2964.0,436.0,1067.0,426.0,6.7851,323500.0,NEAR BAY +-122.21,37.8,50.0,2833.0,605.0,1260.0,552.0,2.8929,216700.0,NEAR BAY +-122.21,37.8,38.0,2254.0,535.0,951.0,487.0,3.0812,233100.0,NEAR BAY +-122.21,37.81,52.0,1389.0,212.0,510.0,224.0,5.2402,296400.0,NEAR BAY +-122.22,37.81,52.0,1971.0,335.0,765.0,308.0,6.5217,273700.0,NEAR BAY +-122.22,37.8,52.0,2183.0,465.0,1129.0,460.0,3.2632,227700.0,NEAR BAY +-122.22,37.8,52.0,2286.0,464.0,1073.0,441.0,3.0298,199600.0,NEAR BAY +-122.22,37.8,52.0,2721.0,541.0,1185.0,515.0,4.5428,239800.0,NEAR BAY +-122.22,37.81,52.0,2024.0,339.0,756.0,340.0,4.072,270100.0,NEAR BAY +-122.22,37.81,52.0,2944.0,536.0,1034.0,521.0,5.3509,302100.0,NEAR BAY +-122.23,37.8,52.0,2033.0,486.0,787.0,459.0,3.1603,269500.0,NEAR BAY +-122.23,37.81,52.0,1433.0,229.0,612.0,213.0,4.7708,314700.0,NEAR BAY +-122.22,37.81,52.0,2927.0,402.0,1021.0,380.0,8.1564,390100.0,NEAR BAY +-122.23,37.81,52.0,2315.0,292.0,861.0,258.0,8.8793,410300.0,NEAR BAY +-122.24,37.81,52.0,2485.0,313.0,953.0,327.0,6.8591,352400.0,NEAR BAY +-122.24,37.81,52.0,1490.0,238.0,634.0,256.0,6.0302,287300.0,NEAR BAY +-122.23,37.81,52.0,2814.0,365.0,878.0,352.0,7.508,348700.0,NEAR BAY +-122.24,37.81,52.0,2093.0,550.0,918.0,483.0,2.7477,243800.0,NEAR BAY +-122.24,37.8,52.0,888.0,168.0,360.0,175.0,2.1944,211500.0,NEAR BAY +-122.25,37.8,52.0,2087.0,510.0,1197.0,488.0,3.0149,218400.0,NEAR BAY +-122.24,37.81,52.0,2513.0,502.0,1048.0,518.0,3.675,269900.0,NEAR BAY +-122.25,37.81,46.0,3232.0,835.0,1373.0,747.0,3.225,218800.0,NEAR BAY +-122.25,37.8,42.0,4120.0,1065.0,1715.0,1015.0,2.9345,225000.0,NEAR BAY +-122.25,37.8,43.0,2364.0,792.0,1359.0,722.0,2.1429,250000.0,NEAR BAY +-122.25,37.8,41.0,1471.0,469.0,1062.0,413.0,1.6121,171400.0,NEAR BAY +-122.25,37.8,29.0,2468.0,864.0,1335.0,773.0,1.3929,193800.0,NEAR BAY +-122.24,37.79,27.0,1632.0,492.0,1171.0,429.0,2.3173,125000.0,NEAR BAY +-122.25,37.79,45.0,1786.0,526.0,1475.0,460.0,1.7772,97500.0,NEAR BAY +-122.25,37.79,50.0,629.0,188.0,742.0,196.0,2.6458,125000.0,NEAR BAY +-122.25,37.79,52.0,1339.0,391.0,1086.0,363.0,2.181,138800.0,NEAR BAY +-122.25,37.8,36.0,1678.0,606.0,1645.0,543.0,2.2303,116700.0,NEAR BAY +-122.25,37.8,43.0,2344.0,647.0,1710.0,644.0,1.6504,151800.0,NEAR BAY +-122.24,37.8,52.0,996.0,228.0,731.0,228.0,2.2697,127000.0,NEAR BAY +-122.24,37.8,52.0,1591.0,373.0,1118.0,347.0,2.1563,128600.0,NEAR BAY +-122.24,37.8,52.0,1586.0,398.0,1006.0,335.0,2.1348,140600.0,NEAR BAY +-122.24,37.8,47.0,2046.0,588.0,1213.0,554.0,2.6292,182700.0,NEAR BAY +-122.23,37.8,52.0,1192.0,289.0,772.0,257.0,2.3833,146900.0,NEAR BAY +-122.24,37.8,52.0,1803.0,420.0,1321.0,401.0,2.957,122800.0,NEAR BAY +-122.24,37.8,49.0,2838.0,749.0,1487.0,677.0,2.5238,169300.0,NEAR BAY +-122.23,37.8,52.0,783.0,184.0,488.0,186.0,1.9375,126600.0,NEAR BAY +-122.23,37.8,51.0,1590.0,414.0,949.0,392.0,1.9028,127900.0,NEAR BAY +-122.23,37.8,50.0,1746.0,480.0,1149.0,415.0,2.25,123500.0,NEAR BAY +-122.23,37.8,52.0,1252.0,299.0,844.0,280.0,2.3929,111900.0,NEAR BAY +-122.23,37.79,43.0,5963.0,1344.0,4367.0,1231.0,2.1917,112800.0,NEAR BAY +-122.23,37.79,52.0,1783.0,395.0,1659.0,412.0,2.9357,107900.0,NEAR BAY +-122.23,37.79,30.0,999.0,264.0,1011.0,263.0,1.8854,137500.0,NEAR BAY +-122.24,37.79,39.0,1469.0,431.0,1464.0,389.0,2.1638,105500.0,NEAR BAY +-122.24,37.79,47.0,1372.0,395.0,1237.0,303.0,2.125,95500.0,NEAR BAY +-122.24,37.79,52.0,674.0,180.0,647.0,168.0,3.375,116100.0,NEAR BAY +-122.24,37.79,43.0,1626.0,376.0,1284.0,357.0,2.2542,112200.0,NEAR BAY +-122.25,37.79,51.0,175.0,43.0,228.0,55.0,2.1,75000.0,NEAR BAY +-122.25,37.79,39.0,461.0,129.0,381.0,123.0,1.6,112500.0,NEAR BAY +-122.25,37.79,52.0,902.0,237.0,846.0,227.0,3.625,125000.0,NEAR BAY +-122.26,37.8,20.0,2373.0,779.0,1659.0,676.0,1.6929,115000.0,NEAR BAY +-122.22,37.77,52.0,391.0,128.0,520.0,138.0,1.6471,95000.0,NEAR BAY +-122.22,37.77,52.0,1137.0,301.0,866.0,259.0,2.59,96400.0,NEAR BAY +-122.23,37.77,52.0,769.0,206.0,612.0,183.0,2.57,72000.0,NEAR BAY +-122.23,37.78,52.0,472.0,146.0,415.0,126.0,2.6429,71300.0,NEAR BAY +-122.23,37.78,52.0,862.0,215.0,994.0,213.0,3.0257,80800.0,NEAR BAY +-122.22,37.78,50.0,1920.0,530.0,1525.0,477.0,1.4886,128800.0,NEAR BAY +-122.23,37.78,43.0,1420.0,472.0,1506.0,438.0,1.9338,112500.0,NEAR BAY +-122.23,37.78,52.0,986.0,258.0,1008.0,255.0,1.4844,119400.0,NEAR BAY +-122.23,37.78,44.0,2340.0,825.0,2813.0,751.0,1.6009,118100.0,NEAR BAY +-122.23,37.79,48.0,1696.0,396.0,1481.0,343.0,2.0375,122500.0,NEAR BAY +-122.23,37.79,49.0,1175.0,217.0,859.0,219.0,2.293,106300.0,NEAR BAY +-122.22,37.79,37.0,2343.0,574.0,1608.0,523.0,2.1494,132500.0,NEAR BAY +-122.23,37.79,30.0,610.0,145.0,425.0,140.0,1.6198,122700.0,NEAR BAY +-122.23,37.79,40.0,930.0,199.0,564.0,184.0,1.3281,113300.0,NEAR BAY +-122.22,37.79,44.0,1487.0,314.0,961.0,272.0,3.5156,109500.0,NEAR BAY +-122.22,37.79,52.0,3424.0,690.0,2273.0,685.0,3.9048,164700.0,NEAR BAY +-122.21,37.79,52.0,762.0,190.0,600.0,195.0,3.0893,125000.0,NEAR BAY +-122.22,37.79,46.0,2366.0,575.0,1647.0,527.0,2.6042,124700.0,NEAR BAY +-122.22,37.79,49.0,1826.0,450.0,1201.0,424.0,2.5,136700.0,NEAR BAY +-122.22,37.79,38.0,3049.0,711.0,2167.0,659.0,2.7969,141700.0,NEAR BAY +-122.2,37.79,29.0,1640.0,376.0,939.0,340.0,2.8321,150000.0,NEAR BAY +-122.21,37.79,47.0,1543.0,307.0,859.0,292.0,2.9583,138800.0,NEAR BAY +-122.21,37.79,34.0,2364.0,557.0,1517.0,516.0,2.8365,139200.0,NEAR BAY +-122.21,37.79,35.0,1745.0,409.0,1143.0,386.0,2.875,143800.0,NEAR BAY +-122.21,37.8,39.0,2003.0,500.0,1109.0,464.0,3.0682,156500.0,NEAR BAY +-122.21,37.8,39.0,2018.0,447.0,1221.0,446.0,3.0757,151000.0,NEAR BAY +-122.2,37.8,43.0,3045.0,499.0,1115.0,455.0,4.9559,273000.0,NEAR BAY +-122.2,37.8,52.0,1547.0,293.0,706.0,268.0,4.7721,217100.0,NEAR BAY +-122.21,37.8,52.0,3519.0,711.0,1883.0,706.0,3.4861,187100.0,NEAR BAY +-122.2,37.8,41.0,2070.0,354.0,804.0,340.0,5.1184,239600.0,NEAR BAY +-122.21,37.8,48.0,1321.0,263.0,506.0,252.0,4.0977,229700.0,NEAR BAY +-122.19,37.8,48.0,1694.0,259.0,610.0,238.0,4.744,257300.0,NEAR BAY +-122.19,37.8,46.0,1938.0,341.0,768.0,332.0,4.2727,246900.0,NEAR BAY +-122.19,37.79,50.0,968.0,195.0,462.0,184.0,2.9844,179900.0,NEAR BAY +-122.2,37.79,40.0,1060.0,256.0,667.0,235.0,4.1739,169600.0,NEAR BAY +-122.2,37.8,46.0,2041.0,405.0,1059.0,399.0,3.8487,203300.0,NEAR BAY +-122.19,37.8,52.0,1813.0,271.0,637.0,277.0,4.0114,263400.0,NEAR BAY +-122.19,37.79,45.0,2718.0,451.0,1106.0,454.0,4.6563,231800.0,NEAR BAY +-122.19,37.79,28.0,3144.0,761.0,1737.0,669.0,2.9297,140500.0,NEAR BAY +-122.2,37.79,35.0,1802.0,459.0,1009.0,390.0,2.3036,126000.0,NEAR BAY +-122.2,37.79,49.0,882.0,195.0,737.0,210.0,2.6667,122000.0,NEAR BAY +-122.2,37.79,44.0,1621.0,452.0,1354.0,491.0,2.619,134700.0,NEAR BAY +-122.21,37.79,45.0,2115.0,533.0,1530.0,474.0,2.4167,139400.0,NEAR BAY +-122.2,37.79,45.0,2021.0,528.0,1410.0,480.0,2.7788,115400.0,NEAR BAY +-122.21,37.78,46.0,2239.0,508.0,1390.0,569.0,2.7352,137300.0,NEAR BAY +-122.21,37.78,52.0,1477.0,300.0,1065.0,269.0,1.8472,137000.0,NEAR BAY +-122.21,37.78,52.0,1056.0,224.0,792.0,245.0,2.6583,142600.0,NEAR BAY +-122.21,37.78,49.0,898.0,244.0,779.0,245.0,3.0536,137500.0,NEAR BAY +-122.22,37.78,44.0,2968.0,710.0,2269.0,610.0,2.3906,111700.0,NEAR BAY +-122.21,37.78,43.0,1702.0,460.0,1227.0,407.0,1.7188,126800.0,NEAR BAY +-122.21,37.78,47.0,881.0,248.0,753.0,241.0,2.625,111300.0,NEAR BAY +-122.22,37.77,40.0,494.0,114.0,547.0,135.0,2.8015,114800.0,NEAR BAY +-122.22,37.78,50.0,1776.0,473.0,1807.0,440.0,1.7276,102300.0,NEAR BAY +-122.22,37.78,44.0,1678.0,514.0,1700.0,495.0,2.0801,131900.0,NEAR BAY +-122.22,37.78,51.0,1637.0,463.0,1543.0,393.0,2.489,119100.0,NEAR BAY +-122.21,37.76,52.0,1420.0,314.0,1085.0,300.0,1.7546,80600.0,NEAR BAY +-122.21,37.77,52.0,591.0,173.0,353.0,137.0,4.0904,80600.0,NEAR BAY +-122.21,37.77,52.0,745.0,153.0,473.0,149.0,2.6765,88800.0,NEAR BAY +-122.2,37.77,49.0,2272.0,498.0,1621.0,483.0,2.4338,102400.0,NEAR BAY +-122.21,37.77,46.0,1234.0,375.0,1183.0,354.0,2.3309,98700.0,NEAR BAY +-122.21,37.77,43.0,1017.0,328.0,836.0,277.0,2.2604,100000.0,NEAR BAY +-122.19,37.77,42.0,932.0,254.0,900.0,263.0,1.8039,92300.0,NEAR BAY +-122.2,37.77,39.0,2689.0,597.0,1888.0,537.0,2.2562,94800.0,NEAR BAY +-122.2,37.77,41.0,1547.0,415.0,1024.0,341.0,2.0562,102000.0,NEAR BAY +-122.2,37.78,52.0,2300.0,443.0,1225.0,423.0,3.5398,158400.0,NEAR BAY +-122.2,37.78,39.0,1752.0,399.0,1071.0,376.0,3.1167,121600.0,NEAR BAY +-122.2,37.78,50.0,1867.0,403.0,1128.0,378.0,2.5401,129100.0,NEAR BAY +-122.2,37.77,43.0,2430.0,502.0,1537.0,484.0,2.898,121400.0,NEAR BAY +-122.21,37.78,44.0,1729.0,414.0,1240.0,393.0,2.3125,102800.0,NEAR BAY +-122.19,37.78,52.0,1026.0,180.0,469.0,168.0,2.875,160000.0,NEAR BAY +-122.19,37.77,52.0,2170.0,428.0,1086.0,425.0,3.3715,143900.0,NEAR BAY +-122.19,37.77,52.0,2329.0,445.0,1144.0,417.0,3.5114,151200.0,NEAR BAY +-122.19,37.78,52.0,2492.0,415.0,1109.0,375.0,4.3125,164400.0,NEAR BAY +-122.19,37.78,52.0,2198.0,397.0,984.0,369.0,3.22,156500.0,NEAR BAY +-122.18,37.78,33.0,142.0,31.0,575.0,47.0,3.875,225000.0,NEAR BAY +-122.19,37.78,49.0,1183.0,205.0,496.0,209.0,5.2328,174200.0,NEAR BAY +-122.19,37.78,52.0,1070.0,193.0,555.0,190.0,3.7262,166900.0,NEAR BAY +-122.2,37.78,45.0,1766.0,332.0,869.0,327.0,4.5893,163500.0,NEAR BAY +-122.18,37.79,39.0,617.0,95.0,236.0,106.0,5.2578,253000.0,NEAR BAY +-122.18,37.79,41.0,1411.0,233.0,626.0,214.0,7.0875,240700.0,NEAR BAY +-122.18,37.79,46.0,2109.0,387.0,922.0,329.0,3.9712,208100.0,NEAR BAY +-122.19,37.79,47.0,1229.0,243.0,582.0,256.0,2.9514,198100.0,NEAR BAY +-122.19,37.79,50.0,954.0,217.0,546.0,201.0,2.6667,172800.0,NEAR BAY +-122.18,37.81,37.0,1643.0,262.0,620.0,266.0,5.4446,336700.0,NEAR BAY +-122.18,37.8,34.0,1355.0,195.0,442.0,195.0,6.2838,318200.0,NEAR BAY +-122.18,37.8,23.0,2317.0,336.0,955.0,328.0,6.7527,285800.0,NEAR BAY +-122.13,37.77,24.0,2459.0,317.0,916.0,324.0,7.0712,293000.0,NEAR BAY +-122.16,37.79,22.0,12842.0,2048.0,4985.0,1967.0,5.9849,371000.0,NEAR BAY +-122.17,37.78,42.0,1524.0,260.0,651.0,267.0,3.6875,157300.0,NEAR BAY +-122.17,37.77,30.0,3326.0,746.0,1704.0,703.0,2.875,135300.0,NEAR BAY +-122.18,37.78,43.0,1985.0,440.0,1085.0,407.0,3.4205,136700.0,NEAR BAY +-122.18,37.78,50.0,1642.0,322.0,713.0,284.0,3.2984,160700.0,NEAR BAY +-122.17,37.78,49.0,893.0,177.0,468.0,181.0,3.875,140600.0,NEAR BAY +-122.17,37.78,52.0,653.0,128.0,296.0,121.0,4.175,144000.0,NEAR BAY +-122.16,37.77,47.0,1256.0,,570.0,218.0,4.375,161900.0,NEAR BAY +-122.16,37.77,48.0,977.0,194.0,446.0,180.0,4.7708,156300.0,NEAR BAY +-122.16,37.77,45.0,2324.0,397.0,968.0,384.0,3.5739,176000.0,NEAR BAY +-122.16,37.77,39.0,1583.0,349.0,857.0,316.0,3.0958,145800.0,NEAR BAY +-122.17,37.77,39.0,1612.0,342.0,912.0,322.0,3.3958,141900.0,NEAR BAY +-122.17,37.77,31.0,2424.0,533.0,1360.0,452.0,1.871,90700.0,NEAR BAY +-122.17,37.76,41.0,1594.0,367.0,1074.0,355.0,1.9356,90600.0,NEAR BAY +-122.17,37.76,47.0,2118.0,413.0,965.0,382.0,2.1842,107900.0,NEAR BAY +-122.18,37.76,37.0,1575.0,358.0,933.0,320.0,2.2917,107000.0,NEAR BAY +-122.17,37.76,38.0,1764.0,397.0,987.0,354.0,2.4333,98200.0,NEAR BAY +-122.18,37.76,50.0,1187.0,261.0,907.0,246.0,1.9479,89500.0,NEAR BAY +-122.18,37.76,52.0,754.0,175.0,447.0,165.0,3.9063,93800.0,NEAR BAY +-122.18,37.76,49.0,2308.0,452.0,1299.0,451.0,1.8407,96700.0,NEAR BAY +-122.18,37.77,27.0,909.0,236.0,396.0,157.0,2.0786,97500.0,NEAR BAY +-122.18,37.77,42.0,1180.0,257.0,877.0,268.0,2.8125,97300.0,NEAR BAY +-122.18,37.76,43.0,2018.0,408.0,1111.0,367.0,1.8913,91200.0,NEAR BAY +-122.19,37.76,49.0,1368.0,282.0,790.0,269.0,1.7056,91400.0,NEAR BAY +-122.18,37.77,52.0,2744.0,547.0,1479.0,554.0,2.2768,96200.0,NEAR BAY +-122.18,37.77,51.0,2107.0,471.0,1173.0,438.0,3.2552,120100.0,NEAR BAY +-122.18,37.77,52.0,1748.0,362.0,1029.0,366.0,2.0556,100000.0,NEAR BAY +-122.19,37.76,52.0,2024.0,391.0,1030.0,350.0,2.4659,94700.0,NEAR BAY +-122.2,37.76,47.0,1116.0,259.0,826.0,279.0,1.75,85700.0,NEAR BAY +-122.19,37.77,41.0,2036.0,510.0,1412.0,454.0,2.0469,89300.0,NEAR BAY +-122.19,37.77,45.0,1852.0,393.0,1132.0,349.0,2.7159,101400.0,NEAR BAY +-122.19,37.76,41.0,921.0,207.0,522.0,159.0,1.2083,72500.0,NEAR BAY +-122.19,37.76,45.0,995.0,238.0,630.0,237.0,1.925,74100.0,NEAR BAY +-122.2,37.75,36.0,606.0,132.0,531.0,133.0,1.5809,70000.0,NEAR BAY +-122.2,37.76,37.0,2680.0,736.0,1925.0,667.0,1.4097,84600.0,NEAR BAY +-122.19,37.76,38.0,1493.0,370.0,1144.0,351.0,0.7683,81800.0,NEAR BAY +-122.19,37.75,19.0,2207.0,565.0,1481.0,520.0,1.3194,81400.0,NEAR BAY +-122.19,37.75,28.0,856.0,189.0,435.0,162.0,0.8012,81800.0,NEAR BAY +-122.19,37.76,26.0,1293.0,297.0,984.0,303.0,1.9479,85800.0,NEAR BAY +-122.19,37.74,36.0,847.0,212.0,567.0,159.0,1.1765,87100.0,NEAR BAY +-122.18,37.74,42.0,541.0,154.0,380.0,123.0,2.3456,83500.0,NEAR BAY +-122.19,37.73,44.0,1066.0,253.0,825.0,244.0,2.1538,79700.0,NEAR BAY +-122.19,37.74,43.0,707.0,147.0,417.0,155.0,2.5139,83400.0,NEAR BAY +-122.19,37.73,45.0,1528.0,291.0,801.0,287.0,1.2625,84700.0,NEAR BAY +-122.18,37.73,42.0,909.0,215.0,646.0,198.0,2.9063,80000.0,NEAR BAY +-122.18,37.73,43.0,1391.0,293.0,855.0,285.0,2.5192,76400.0,NEAR BAY +-122.18,37.73,44.0,548.0,119.0,435.0,136.0,2.1111,79700.0,NEAR BAY +-122.18,37.73,42.0,4074.0,874.0,2736.0,780.0,2.455,82400.0,NEAR BAY +-122.17,37.74,41.0,1613.0,445.0,1481.0,414.0,2.4028,97700.0,NEAR BAY +-122.17,37.74,47.0,463.0,134.0,327.0,137.0,2.15,97200.0,NEAR BAY +-122.17,37.74,43.0,818.0,193.0,494.0,179.0,2.4776,101600.0,NEAR BAY +-122.17,37.73,43.0,1473.0,371.0,1231.0,341.0,2.1587,86500.0,NEAR BAY +-122.18,37.74,35.0,504.0,126.0,323.0,109.0,1.8438,90500.0,NEAR BAY +-122.17,37.74,46.0,1026.0,226.0,749.0,225.0,3.0298,107600.0,NEAR BAY +-122.17,37.74,46.0,769.0,183.0,693.0,178.0,2.25,84200.0,NEAR BAY +-122.18,37.74,46.0,2103.0,391.0,1339.0,354.0,2.2467,88900.0,NEAR BAY +-122.18,37.75,45.0,330.0,76.0,282.0,80.0,4.0469,80700.0,NEAR BAY +-122.18,37.75,46.0,941.0,218.0,621.0,195.0,1.325,87100.0,NEAR BAY +-122.17,37.75,38.0,992.0,,732.0,259.0,1.6196,85100.0,NEAR BAY +-122.18,37.75,45.0,990.0,261.0,901.0,260.0,2.1731,82000.0,NEAR BAY +-122.19,37.75,36.0,1126.0,263.0,482.0,150.0,1.9167,82800.0,NEAR BAY +-122.18,37.75,43.0,1036.0,233.0,652.0,213.0,2.069,84600.0,NEAR BAY +-122.18,37.75,36.0,1047.0,214.0,651.0,166.0,1.712,82100.0,NEAR BAY +-122.17,37.76,33.0,1280.0,307.0,999.0,286.0,2.5625,89300.0,NEAR BAY +-122.17,37.75,43.0,1587.0,320.0,907.0,306.0,1.9821,98300.0,NEAR BAY +-122.17,37.75,41.0,1257.0,271.0,828.0,230.0,2.5043,92300.0,NEAR BAY +-122.17,37.75,44.0,1218.0,248.0,763.0,254.0,2.3281,88800.0,NEAR BAY +-122.17,37.75,48.0,1751.0,390.0,935.0,349.0,1.4375,90000.0,NEAR BAY +-122.16,37.76,45.0,2299.0,514.0,1437.0,484.0,2.5122,95500.0,NEAR BAY +-122.16,37.75,38.0,2457.0,624.0,1516.0,482.0,1.5625,91700.0,NEAR BAY +-122.17,37.75,47.0,998.0,211.0,597.0,185.0,3.1587,100400.0,NEAR BAY +-122.17,37.76,40.0,1685.0,343.0,949.0,342.0,1.8426,94800.0,NEAR BAY +-122.16,37.76,46.0,1827.0,307.0,881.0,302.0,4.6696,164300.0,NEAR BAY +-122.16,37.76,36.0,2781.0,574.0,1438.0,519.0,2.4598,155500.0,NEAR BAY +-122.15,37.76,39.0,1823.0,286.0,763.0,270.0,6.0749,196900.0,NEAR BAY +-122.14,37.77,27.0,2229.0,365.0,1297.0,355.0,4.8304,279100.0,NEAR BAY +-122.14,37.76,34.0,1513.0,231.0,545.0,211.0,5.5701,252800.0,NEAR BAY +-122.13,37.76,26.0,3266.0,491.0,1222.0,533.0,5.37,275400.0,NEAR BAY +-122.12,37.75,33.0,1809.0,261.0,808.0,219.0,6.86,250000.0,NEAR BAY +-122.12,37.75,28.0,794.0,111.0,329.0,109.0,7.6923,329800.0,NEAR BAY +-122.14,37.75,36.0,690.0,105.0,299.0,109.0,4.0313,195500.0,NEAR BAY +-122.14,37.75,33.0,1334.0,200.0,579.0,202.0,6.8323,255900.0,NEAR BAY +-122.13,37.75,30.0,414.0,54.0,137.0,50.0,4.975,311100.0,NEAR BAY +-122.13,37.75,36.0,768.0,93.0,229.0,93.0,5.3602,330000.0,NEAR BAY +-122.13,37.74,41.0,4400.0,666.0,1476.0,648.0,5.0,248900.0,NEAR BAY +-122.16,37.75,46.0,954.0,161.0,429.0,154.0,2.925,142900.0,NEAR BAY +-122.15,37.75,40.0,1445.0,256.0,849.0,255.0,3.8913,126300.0,NEAR BAY +-122.15,37.75,44.0,1938.0,399.0,946.0,331.0,3.225,135800.0,NEAR BAY +-122.15,37.74,41.0,856.0,178.0,571.0,191.0,3.1458,130600.0,NEAR BAY +-122.16,37.75,24.0,1790.0,454.0,1137.0,386.0,2.537,107900.0,NEAR BAY +-122.16,37.75,44.0,617.0,131.0,378.0,135.0,2.5568,111100.0,NEAR BAY +-122.15,37.74,43.0,1383.0,275.0,853.0,272.0,3.5083,122000.0,NEAR BAY +-122.15,37.74,49.0,1325.0,277.0,764.0,282.0,3.3125,118000.0,NEAR BAY +-122.16,37.75,40.0,1227.0,294.0,928.0,261.0,1.8235,95200.0,NEAR BAY +-122.16,37.75,35.0,667.0,140.0,406.0,133.0,3.8047,94300.0,NEAR BAY +-122.17,37.74,34.0,1223.0,281.0,824.0,280.0,2.2917,92500.0,NEAR BAY +-122.17,37.75,37.0,1379.0,287.0,835.0,259.0,2.4962,91800.0,NEAR BAY +-122.16,37.74,43.0,1534.0,300.0,826.0,295.0,4.0417,109400.0,NEAR BAY +-122.16,37.74,46.0,1029.0,181.0,567.0,211.0,3.4844,129500.0,NEAR BAY +-122.16,37.74,52.0,771.0,147.0,355.0,144.0,4.1458,143400.0,NEAR BAY +-122.16,37.74,47.0,824.0,223.0,533.0,166.0,2.625,98200.0,NEAR BAY +-122.16,37.74,44.0,1097.0,239.0,609.0,215.0,2.0227,103100.0,NEAR BAY +-122.29,37.9,49.0,1283.0,238.0,576.0,236.0,3.3333,276800.0,NEAR BAY +-122.29,37.9,52.0,1604.0,263.0,594.0,286.0,5.338,270900.0,NEAR BAY +-122.29,37.89,52.0,2248.0,422.0,870.0,377.0,3.4732,246200.0,NEAR BAY +-122.3,37.9,38.0,2263.0,522.0,1027.0,509.0,3.5125,224200.0,NEAR BAY +-122.29,37.89,52.0,1571.0,349.0,693.0,326.0,3.1375,229100.0,NEAR BAY +-122.3,37.89,46.0,1520.0,402.0,815.0,375.0,2.8036,211600.0,NEAR BAY +-122.3,37.9,15.0,5083.0,1212.0,2420.0,1146.0,4.5824,256100.0,NEAR BAY +-122.3,37.89,36.0,1077.0,293.0,518.0,276.0,3.0208,206300.0,NEAR BAY +-122.3,37.89,52.0,1248.0,283.0,620.0,275.0,4.0875,221300.0,NEAR BAY +-122.33,37.89,42.0,1342.0,291.0,551.0,266.0,4.5268,207400.0,NEAR BAY +-122.34,37.88,37.0,3061.0,930.0,2556.0,924.0,1.7375,350000.0,NEAR BAY +-122.29,37.89,52.0,3171.0,698.0,1498.0,696.0,3.1795,218200.0,NEAR BAY +-122.29,37.88,50.0,1211.0,261.0,523.0,227.0,3.8672,216700.0,NEAR BAY +-122.29,37.89,52.0,979.0,175.0,374.0,153.0,5.1675,270600.0,NEAR BAY +-122.29,37.89,52.0,2269.0,380.0,1004.0,371.0,5.1696,261400.0,NEAR BAY +-122.28,37.88,52.0,1844.0,332.0,769.0,334.0,4.2614,261300.0,NEAR BAY +-122.29,37.89,52.0,2178.0,421.0,940.0,423.0,5.0551,232200.0,NEAR BAY +-122.27,37.9,42.0,1650.0,274.0,645.0,256.0,5.6228,375400.0,NEAR BAY +-122.26,37.9,52.0,1927.0,279.0,705.0,288.0,7.8864,357300.0,NEAR BAY +-122.27,37.9,52.0,2079.0,273.0,684.0,275.0,7.9556,374400.0,NEAR BAY +-122.27,37.9,52.0,1803.0,240.0,572.0,236.0,6.174,358800.0,NEAR BAY +-122.27,37.9,52.0,2041.0,270.0,671.0,253.0,6.9414,417500.0,NEAR BAY +-122.27,37.89,52.0,3046.0,373.0,975.0,365.0,8.8342,430500.0,NEAR BAY +-122.28,37.9,52.0,2318.0,328.0,779.0,312.0,7.1754,362900.0,NEAR BAY +-122.28,37.9,52.0,2003.0,250.0,658.0,244.0,10.0825,397000.0,NEAR BAY +-122.28,37.9,52.0,2261.0,328.0,819.0,335.0,4.9083,346800.0,NEAR BAY +-122.28,37.89,52.0,1225.0,169.0,412.0,168.0,5.7912,327100.0,NEAR BAY +-122.28,37.89,52.0,2315.0,408.0,835.0,369.0,4.5893,290100.0,NEAR BAY +-122.28,37.89,52.0,2070.0,329.0,722.0,306.0,5.4171,292000.0,NEAR BAY +-122.28,37.89,52.0,2616.0,473.0,1085.0,487.0,4.125,270900.0,NEAR BAY +-122.27,37.89,52.0,2640.0,366.0,973.0,355.0,7.266,371100.0,NEAR BAY +-122.27,37.89,52.0,1978.0,293.0,723.0,272.0,5.3989,335600.0,NEAR BAY +-122.26,37.9,37.0,2220.0,335.0,903.0,362.0,7.8336,371300.0,NEAR BAY +-122.25,37.89,41.0,1125.0,195.0,356.0,181.0,6.1593,344000.0,NEAR BAY +-122.26,37.89,52.0,3078.0,494.0,1005.0,462.0,6.381,342200.0,NEAR BAY +-122.26,37.89,52.0,3706.0,531.0,1205.0,504.0,6.6828,370900.0,NEAR BAY +-122.25,37.89,37.0,3000.0,457.0,987.0,450.0,7.5385,350000.0,NEAR BAY +-122.25,37.89,42.0,2863.0,460.0,1031.0,448.0,6.7138,368600.0,NEAR BAY +-122.26,37.88,52.0,2551.0,417.0,894.0,404.0,6.2425,391800.0,NEAR BAY +-122.26,37.88,52.0,2255.0,410.0,823.0,377.0,5.7979,415300.0,NEAR BAY +-122.27,37.88,52.0,3360.0,648.0,1232.0,621.0,4.2813,284900.0,NEAR BAY +-122.27,37.88,52.0,1693.0,391.0,669.0,367.0,3.5417,287500.0,NEAR BAY +-122.27,37.88,44.0,2252.0,592.0,989.0,550.0,3.0132,272900.0,NEAR BAY +-122.28,37.88,52.0,2495.0,491.0,1058.0,464.0,4.1429,259600.0,NEAR BAY +-122.28,37.88,52.0,1193.0,200.0,506.0,207.0,4.1912,254500.0,NEAR BAY +-122.28,37.88,52.0,1172.0,215.0,489.0,218.0,3.9167,235600.0,NEAR BAY +-122.29,37.88,52.0,2159.0,424.0,824.0,388.0,3.8897,218400.0,NEAR BAY +-122.29,37.88,48.0,2365.0,490.0,1034.0,475.0,3.1065,229200.0,NEAR BAY +-122.29,37.88,46.0,1895.0,442.0,920.0,425.0,2.9926,192100.0,NEAR BAY +-122.29,37.88,52.0,1650.0,395.0,841.0,380.0,3.556,179300.0,NEAR BAY +-122.3,37.88,45.0,453.0,146.0,749.0,137.0,1.475,187500.0,NEAR BAY +-122.3,37.88,52.0,409.0,97.0,208.0,98.0,1.6971,138800.0,NEAR BAY +-122.3,37.87,10.0,503.0,118.0,228.0,100.0,2.1705,150000.0,NEAR BAY +-122.3,37.86,50.0,499.0,127.0,287.0,128.0,2.75,140600.0,NEAR BAY +-122.29,37.85,52.0,477.0,119.0,218.0,106.0,2.5682,120000.0,NEAR BAY +-122.3,37.88,46.0,1647.0,376.0,854.0,355.0,2.9,144800.0,NEAR BAY +-122.3,37.87,52.0,3123.0,749.0,1695.0,684.0,2.2208,144800.0,NEAR BAY +-122.28,37.88,52.0,957.0,188.0,403.0,172.0,3.2344,245500.0,NEAR BAY +-122.28,37.87,52.0,589.0,132.0,288.0,131.0,3.5156,200000.0,NEAR BAY +-122.28,37.87,49.0,2026.0,548.0,963.0,521.0,1.9805,173700.0,NEAR BAY +-122.29,37.87,50.0,1829.0,536.0,1129.0,516.0,2.6684,185600.0,NEAR BAY +-122.29,37.87,52.0,895.0,198.0,386.0,204.0,3.875,182600.0,NEAR BAY +-122.28,37.88,52.0,1909.0,416.0,811.0,406.0,3.006,227900.0,NEAR BAY +-122.28,37.87,46.0,3022.0,696.0,1293.0,675.0,2.543,220700.0,NEAR BAY +-122.28,37.87,46.0,1777.0,446.0,805.0,431.0,2.8676,212000.0,NEAR BAY +-122.27,37.88,52.0,2803.0,930.0,1372.0,876.0,2.1907,271400.0,NEAR BAY +-122.27,37.87,30.0,1465.0,439.0,862.0,425.0,1.7778,268800.0,NEAR BAY +-122.27,37.88,37.0,2619.0,682.0,1152.0,616.0,2.52,277800.0,NEAR BAY +-122.26,37.88,52.0,1149.0,255.0,483.0,249.0,4.2788,332500.0,NEAR BAY +-122.26,37.88,52.0,2363.0,604.0,1558.0,573.0,2.944,338900.0,NEAR BAY +-122.26,37.88,52.0,2604.0,837.0,1798.0,769.0,1.725,287500.0,NEAR BAY +-122.25,37.87,41.0,685.0,141.0,266.0,123.0,5.2289,384600.0,NEAR BAY +-122.25,37.87,42.0,1756.0,465.0,2184.0,422.0,2.5562,371400.0,NEAR BAY +-122.25,37.87,52.0,1204.0,460.0,2016.0,477.0,0.949,350000.0,NEAR BAY +-122.25,37.87,52.0,609.0,236.0,1349.0,250.0,1.1696,500001.0,NEAR BAY +-122.26,37.87,52.0,1087.0,371.0,3337.0,350.0,1.4012,175000.0,NEAR BAY +-122.26,37.87,52.0,2773.0,998.0,1721.0,949.0,1.1859,241700.0,NEAR BAY +-122.27,37.87,35.0,3218.0,1108.0,1675.0,1000.0,1.7464,216700.0,NEAR BAY +-122.27,37.87,49.0,1350.0,368.0,707.0,350.0,2.8846,211300.0,NEAR BAY +-122.27,37.87,52.0,3084.0,698.0,1424.0,694.0,2.7372,210200.0,NEAR BAY +-122.28,37.86,52.0,938.0,195.0,393.0,189.0,3.8594,196400.0,NEAR BAY +-122.28,37.87,52.0,1813.0,353.0,828.0,339.0,3.5625,191700.0,NEAR BAY +-122.28,37.87,52.0,1233.0,300.0,571.0,292.0,2.2788,182300.0,NEAR BAY +-122.29,37.87,44.0,2539.0,755.0,1382.0,713.0,2.537,175000.0,NEAR BAY +-122.29,37.87,46.0,1267.0,324.0,792.0,321.0,2.525,165900.0,NEAR BAY +-122.29,37.86,52.0,1665.0,404.0,815.0,372.0,1.9946,156900.0,NEAR BAY +-122.28,37.86,52.0,1659.0,367.0,788.0,346.0,2.8214,164300.0,NEAR BAY +-122.29,37.87,52.0,2225.0,460.0,1145.0,430.0,2.6165,150000.0,NEAR BAY +-122.29,37.86,50.0,2485.0,607.0,1354.0,563.0,1.9483,150500.0,NEAR BAY +-122.28,37.86,52.0,2031.0,450.0,958.0,445.0,1.9327,169900.0,NEAR BAY +-122.28,37.86,49.0,2932.0,668.0,1361.0,608.0,1.9798,147400.0,NEAR BAY +-122.28,37.85,52.0,2246.0,472.0,1005.0,449.0,2.4167,152700.0,NEAR BAY +-122.27,37.86,49.0,2052.0,435.0,924.0,414.0,2.5417,182700.0,NEAR BAY +-122.28,37.86,52.0,1999.0,417.0,780.0,358.0,3.3906,179300.0,NEAR BAY +-122.28,37.86,52.0,3007.0,691.0,1582.0,636.0,2.5652,157700.0,NEAR BAY +-122.28,37.86,41.0,2214.0,550.0,1213.0,568.0,2.2845,153100.0,NEAR BAY +-122.27,37.86,52.0,1088.0,305.0,486.0,267.0,2.6071,250000.0,NEAR BAY +-122.27,37.86,52.0,834.0,186.0,494.0,175.0,3.15,206300.0,NEAR BAY +-122.27,37.86,52.0,1769.0,372.0,849.0,365.0,2.6914,218800.0,NEAR BAY +-122.27,37.86,52.0,2307.0,583.0,1127.0,548.0,1.8447,198200.0,NEAR BAY +-122.26,37.86,35.0,5161.0,1744.0,3276.0,1742.0,1.6307,253600.0,NEAR BAY +-122.26,37.86,52.0,3497.0,832.0,1493.0,794.0,2.9044,257400.0,NEAR BAY +-122.26,37.86,52.0,3774.0,744.0,1461.0,679.0,2.9405,289500.0,NEAR BAY +-122.26,37.86,52.0,2888.0,604.0,1253.0,538.0,3.3893,241700.0,NEAR BAY +-122.25,37.86,48.0,2153.0,517.0,1656.0,459.0,3.0417,489600.0,NEAR BAY +-122.25,37.86,52.0,1389.0,191.0,514.0,202.0,7.0897,446200.0,NEAR BAY +-122.25,37.86,52.0,1709.0,318.0,719.0,295.0,5.0463,456300.0,NEAR BAY +-122.25,37.86,52.0,1587.0,444.0,878.0,449.0,1.7652,336800.0,NEAR BAY +-122.24,37.86,52.0,1668.0,225.0,517.0,214.0,7.8521,500001.0,NEAR BAY +-122.24,37.85,52.0,3726.0,474.0,1366.0,496.0,9.3959,500001.0,NEAR BAY +-122.25,37.86,52.0,4048.0,663.0,1316.0,590.0,5.3794,376900.0,NEAR BAY +-122.26,37.85,52.0,3618.0,768.0,1508.0,755.0,3.2619,309600.0,NEAR BAY +-122.27,37.85,52.0,4076.0,920.0,1800.0,815.0,2.7054,182300.0,NEAR BAY +-122.27,37.85,47.0,2077.0,400.0,719.0,326.0,2.2431,172700.0,NEAR BAY +-122.27,37.85,50.0,1279.0,300.0,675.0,255.0,1.9028,150800.0,NEAR BAY +-122.27,37.85,52.0,1974.0,426.0,875.0,363.0,1.5817,153600.0,NEAR BAY +-122.27,37.85,52.0,335.0,83.0,152.0,77.0,2.2841,106300.0,NEAR BAY +-122.27,37.85,47.0,1375.0,307.0,843.0,319.0,1.3785,142300.0,NEAR BAY +-122.28,37.85,52.0,610.0,145.0,281.0,132.0,2.9018,119400.0,NEAR BAY +-122.28,37.85,44.0,1025.0,198.0,506.0,204.0,1.73,147900.0,NEAR BAY +-122.28,37.85,48.0,2063.0,484.0,1054.0,466.0,2.2625,132900.0,NEAR BAY +-122.29,37.84,35.0,1872.0,419.0,1017.0,414.0,2.2106,132500.0,NEAR BAY +-122.28,37.83,52.0,3108.0,813.0,1623.0,765.0,2.6997,126900.0,NEAR BAY +-122.3,37.84,14.0,7355.0,2408.0,3100.0,2051.0,4.0018,143800.0,NEAR BAY +-122.23,37.83,52.0,2990.0,379.0,947.0,361.0,7.8772,500001.0,NEAR BAY +-122.22,37.82,39.0,2492.0,310.0,808.0,315.0,11.8603,500001.0,NEAR BAY +-122.22,37.82,42.0,2991.0,335.0,1018.0,335.0,13.499,500001.0,NEAR BAY +-122.23,37.82,52.0,3242.0,366.0,1001.0,352.0,12.2138,500001.0,NEAR BAY +-122.23,37.82,52.0,3051.0,381.0,1005.0,369.0,8.1872,466100.0,NEAR BAY +-122.23,37.82,52.0,3494.0,396.0,1192.0,383.0,12.3804,500001.0,NEAR BAY +-122.24,37.83,52.0,1757.0,246.0,585.0,227.0,5.8948,457800.0,NEAR BAY +-122.24,37.83,52.0,2449.0,312.0,916.0,316.0,8.1194,471600.0,NEAR BAY +-122.23,37.82,52.0,1611.0,203.0,556.0,179.0,8.7477,500001.0,NEAR BAY +-122.24,37.82,52.0,3665.0,517.0,1470.0,520.0,6.155,398600.0,NEAR BAY +-122.25,37.82,52.0,2474.0,403.0,1104.0,398.0,5.883,340700.0,NEAR BAY +-122.23,37.76,52.0,3037.0,516.0,1242.0,518.0,5.2128,289900.0,NEAR BAY +-122.23,37.76,52.0,2269.0,323.0,805.0,321.0,4.7188,335300.0,NEAR BAY +-122.23,37.76,52.0,1316.0,177.0,378.0,162.0,5.2915,333000.0,NEAR BAY +-122.24,37.77,52.0,1153.0,235.0,481.0,223.0,2.6411,241000.0,NEAR BAY +-122.23,37.77,52.0,772.0,179.0,409.0,160.0,3.3214,189600.0,NEAR BAY +-122.24,37.77,52.0,1711.0,386.0,885.0,373.0,3.6417,206300.0,NEAR BAY +-122.25,37.77,52.0,2650.0,566.0,1468.0,567.0,3.0161,215700.0,NEAR BAY +-122.25,37.77,52.0,1038.0,220.0,482.0,215.0,3.1771,210200.0,NEAR BAY +-122.25,37.77,52.0,1527.0,320.0,825.0,264.0,3.4531,208800.0,NEAR BAY +-122.25,37.77,52.0,859.0,157.0,429.0,158.0,4.3098,197900.0,NEAR BAY +-122.26,37.78,52.0,970.0,217.0,528.0,208.0,3.3438,201300.0,NEAR BAY +-122.26,37.78,52.0,1045.0,239.0,496.0,216.0,2.9213,190800.0,NEAR BAY +-122.27,37.78,52.0,1408.0,280.0,718.0,265.0,2.6806,207900.0,NEAR BAY +-122.27,37.78,52.0,1222.0,264.0,630.0,265.0,3.7708,215300.0,NEAR BAY +-122.27,37.78,45.0,1169.0,263.0,723.0,286.0,3.9444,212900.0,NEAR BAY +-122.27,37.78,13.0,2020.0,535.0,959.0,486.0,5.2601,292700.0,NEAR BAY +-122.28,37.79,30.0,4145.0,869.0,3668.0,855.0,2.5444,275000.0,NEAR BAY +-122.3,37.77,42.0,2038.0,368.0,2037.0,355.0,2.6447,200000.0,NEAR BAY +-122.28,37.78,29.0,5154.0,,3741.0,1273.0,2.5762,173400.0,NEAR BAY +-122.29,37.78,42.0,1241.0,309.0,821.0,300.0,1.9427,102200.0,NEAR BAY +-122.28,37.77,52.0,1468.0,363.0,870.0,347.0,2.9688,220800.0,NEAR BAY +-122.28,37.77,27.0,3997.0,1073.0,1901.0,966.0,3.75,242800.0,NEAR BAY +-122.29,37.76,18.0,2873.0,763.0,1243.0,663.0,5.1702,265400.0,NEAR BAY +-122.28,37.78,50.0,1487.0,306.0,730.0,327.0,2.5139,219000.0,NEAR BAY +-122.26,37.77,52.0,1670.0,350.0,793.0,299.0,2.9732,282100.0,NEAR BAY +-122.27,37.77,52.0,2252.0,388.0,1033.0,434.0,5.5337,372000.0,NEAR BAY +-122.27,37.77,52.0,1731.0,377.0,872.0,363.0,4.1667,225800.0,NEAR BAY +-122.27,37.77,52.0,1710.0,481.0,849.0,457.0,2.7115,220800.0,NEAR BAY +-122.27,37.77,52.0,2388.0,559.0,1121.0,518.0,3.3269,234500.0,NEAR BAY +-122.25,37.77,52.0,2156.0,458.0,872.0,445.0,3.2685,254200.0,NEAR BAY +-122.26,37.77,52.0,1565.0,315.0,637.0,297.0,4.7778,351800.0,NEAR BAY +-122.26,37.77,52.0,1704.0,371.0,663.0,340.0,4.226,275000.0,NEAR BAY +-122.26,37.77,52.0,1210.0,168.0,411.0,172.0,3.3571,405400.0,NEAR BAY +-122.26,37.77,52.0,2097.0,444.0,915.0,413.0,2.9899,228100.0,NEAR BAY +-122.26,37.77,52.0,1848.0,479.0,921.0,477.0,2.875,234000.0,NEAR BAY +-122.24,37.77,43.0,955.0,284.0,585.0,266.0,2.3882,162500.0,NEAR BAY +-122.25,37.77,43.0,4329.0,1110.0,2086.0,1053.0,2.975,243400.0,NEAR BAY +-122.23,37.76,52.0,3011.0,542.0,1303.0,535.0,5.1039,273800.0,NEAR BAY +-122.23,37.76,52.0,1049.0,185.0,374.0,176.0,4.1458,248500.0,NEAR BAY +-122.24,37.76,52.0,2504.0,516.0,979.0,472.0,3.4762,244000.0,NEAR BAY +-122.24,37.76,52.0,1846.0,471.0,827.0,446.0,2.6833,240900.0,NEAR BAY +-122.23,37.76,52.0,1705.0,246.0,658.0,253.0,5.75,306300.0,NEAR BAY +-122.23,37.75,50.0,1542.0,289.0,654.0,268.0,3.9632,240000.0,NEAR BAY +-122.24,37.75,45.0,891.0,,384.0,146.0,4.9489,247100.0,NEAR BAY +-122.24,37.75,27.0,4051.0,753.0,1499.0,797.0,4.8711,286600.0,NEAR BAY +-122.24,37.76,52.0,2646.0,581.0,1128.0,522.0,3.0718,266700.0,NEAR BAY +-122.24,37.76,49.0,2428.0,525.0,1110.0,492.0,3.6719,229800.0,NEAR BAY +-122.24,37.76,52.0,2567.0,436.0,1119.0,415.0,4.6094,229300.0,NEAR BAY +-122.24,37.73,21.0,7031.0,1249.0,2930.0,1235.0,4.5213,228400.0,NEAR BAY +-122.25,37.74,25.0,1914.0,365.0,897.0,390.0,4.4562,206200.0,NEAR BAY +-122.24,37.72,5.0,18634.0,2885.0,7427.0,2718.0,7.611,350700.0,NEAR BAY +-122.27,37.73,31.0,5785.0,1379.0,2973.0,1312.0,3.2689,231000.0,NEAR BAY +-122.25,37.76,52.0,2876.0,648.0,1340.0,632.0,3.567,252900.0,NEAR BAY +-122.27,37.74,28.0,6909.0,1554.0,2974.0,1484.0,3.6875,353900.0,NEAR BAY +-122.27,37.77,23.0,5679.0,1270.0,2690.0,1151.0,4.7695,291700.0,NEAR BAY +-122.28,37.75,20.0,1156.0,365.0,583.0,326.0,3.1972,100000.0,NEAR BAY +-122.06,37.77,12.0,14316.0,2045.0,5781.0,2007.0,7.2634,341600.0,NEAR BAY +-122.06,37.73,5.0,3596.0,467.0,1738.0,512.0,7.0568,412500.0,NEAR BAY +-122.06,37.71,36.0,3541.0,570.0,1478.0,529.0,4.635,248600.0,NEAR BAY +-122.07,37.71,40.0,1808.0,302.0,746.0,270.0,5.3015,254900.0,NEAR BAY +-122.07,37.71,36.0,2879.0,480.0,1235.0,455.0,4.9801,241500.0,NEAR BAY +-122.07,37.72,26.0,3204.0,477.0,1411.0,484.0,5.4834,295200.0,NEAR BAY +-122.08,37.72,31.0,3866.0,531.0,1368.0,521.0,6.187,340400.0,NEAR BAY +-122.08,37.72,32.0,2476.0,368.0,1048.0,367.0,5.6194,274700.0,NEAR BAY +-122.08,37.71,35.0,2211.0,350.0,1004.0,365.0,5.4639,238600.0,NEAR BAY +-122.09,37.71,35.0,2663.0,387.0,1086.0,367.0,5.1498,266400.0,NEAR BAY +-122.1,37.72,30.0,2599.0,366.0,922.0,350.0,5.8382,330200.0,NEAR BAY +-122.11,37.71,36.0,4569.0,824.0,1950.0,819.0,4.65,206800.0,NEAR BAY +-122.1,37.7,25.0,2973.0,622.0,1413.0,595.0,4.3819,209200.0,NEAR BAY +-122.1,37.69,30.0,3115.0,625.0,1444.0,568.0,3.7222,195800.0,NEAR BAY +-122.09,37.71,31.0,1843.0,282.0,749.0,269.0,5.2855,253500.0,NEAR BAY +-122.09,37.7,31.0,2053.0,336.0,867.0,329.0,4.3375,241800.0,NEAR BAY +-122.1,37.71,27.0,6740.0,1073.0,2723.0,1035.0,5.2131,252500.0,NEAR BAY +-122.09,37.7,30.0,1751.0,269.0,731.0,263.0,6.005,263900.0,NEAR BAY +-122.08,37.71,38.0,1663.0,295.0,781.0,301.0,5.0519,227000.0,NEAR BAY +-122.08,37.71,38.0,3716.0,657.0,1784.0,652.0,4.8237,220900.0,NEAR BAY +-122.08,37.7,32.0,2718.0,447.0,1156.0,410.0,5.2497,259300.0,NEAR BAY +-122.07,37.7,39.0,1420.0,272.0,645.0,277.0,4.125,232500.0,NEAR BAY +-122.06,37.7,37.0,1893.0,310.0,821.0,315.0,4.6005,231600.0,NEAR BAY +-122.06,37.7,33.0,3906.0,790.0,1912.0,770.0,3.5187,209400.0,NEAR BAY +-122.07,37.7,32.0,3400.0,736.0,1487.0,694.0,3.0,223200.0,NEAR BAY +-122.08,37.7,25.0,3402.0,758.0,1645.0,710.0,3.4934,209900.0,NEAR BAY +-122.09,37.7,33.0,4413.0,1107.0,2239.0,1051.0,2.9861,208200.0,NEAR BAY +-122.07,37.69,29.0,2304.0,618.0,1021.0,552.0,2.5362,203800.0,NEAR BAY +-122.08,37.69,36.0,2350.0,499.0,1105.0,467.0,3.3021,195700.0,NEAR BAY +-122.07,37.69,31.0,5914.0,1309.0,2999.0,1295.0,3.0964,190500.0,NEAR BAY +-122.08,37.69,43.0,1575.0,324.0,740.0,284.0,2.8512,181000.0,NEAR BAY +-122.08,37.69,42.0,1414.0,274.0,629.0,244.0,3.3478,184900.0,NEAR BAY +-122.08,37.68,37.0,848.0,202.0,314.0,205.0,2.3958,190800.0,NEAR BAY +-122.08,37.68,15.0,3051.0,685.0,1479.0,668.0,3.5295,242200.0,NEAR BAY +-122.09,37.69,20.0,4296.0,817.0,1732.0,800.0,4.8036,188300.0,NEAR BAY +-122.15,37.74,52.0,2898.0,557.0,1338.0,550.0,3.851,183500.0,NEAR BAY +-122.14,37.74,52.0,1071.0,201.0,440.0,192.0,4.0662,204200.0,NEAR BAY +-122.14,37.73,51.0,2619.0,403.0,922.0,393.0,4.6042,251900.0,NEAR BAY +-122.15,37.74,49.0,1494.0,316.0,611.0,288.0,2.2,187500.0,NEAR BAY +-122.16,37.73,52.0,2260.0,416.0,994.0,412.0,4.1164,198200.0,NEAR BAY +-122.15,37.74,52.0,1394.0,223.0,545.0,230.0,3.95,219000.0,NEAR BAY +-122.15,37.73,52.0,1028.0,129.0,317.0,143.0,4.9135,275000.0,NEAR BAY +-122.15,37.73,45.0,3758.0,819.0,1573.0,736.0,2.8355,245400.0,NEAR BAY +-122.17,37.73,46.0,2163.0,470.0,925.0,435.0,3.25,177500.0,NEAR BAY +-122.16,37.73,49.0,1699.0,408.0,768.0,385.0,2.8301,171600.0,NEAR BAY +-122.17,37.73,52.0,1555.0,289.0,620.0,292.0,3.7159,183300.0,NEAR BAY +-122.16,37.73,52.0,1114.0,206.0,425.0,207.0,2.5625,175000.0,NEAR BAY +-122.18,37.72,45.0,1498.0,313.0,1003.0,305.0,3.8047,156700.0,NEAR BAY +-122.18,37.71,45.0,726.0,147.0,519.0,135.0,3.375,157500.0,NEAR BAY +-122.17,37.71,38.0,890.0,200.0,481.0,198.0,3.244,179800.0,NEAR BAY +-122.18,37.7,36.0,2639.0,533.0,1209.0,519.0,4.0268,205500.0,NEAR BAY +-122.18,37.7,35.0,2562.0,554.0,1398.0,525.0,3.3906,178900.0,NEAR BAY +-122.19,37.71,36.0,361.0,69.0,158.0,58.0,5.5461,262500.0,NEAR BAY +-122.17,37.72,42.0,3008.0,659.0,1817.0,664.0,3.371,165000.0,NEAR BAY +-122.17,37.72,46.0,1369.0,284.0,766.0,289.0,3.5313,159700.0,NEAR BAY +-122.17,37.72,5.0,1692.0,398.0,814.0,328.0,3.663,158300.0,NEAR BAY +-122.16,37.72,38.0,1007.0,245.0,618.0,239.0,2.875,144800.0,NEAR BAY +-122.17,37.72,43.0,3783.0,814.0,2139.0,789.0,4.0202,166300.0,NEAR BAY +-122.16,37.71,37.0,1507.0,242.0,632.0,253.0,4.5553,191000.0,NEAR BAY +-122.16,37.71,36.0,666.0,132.0,366.0,134.0,3.4643,175000.0,NEAR BAY +-122.16,37.72,10.0,2229.0,601.0,877.0,485.0,3.3431,137500.0,NEAR BAY +-122.15,37.73,28.0,2215.0,587.0,830.0,573.0,2.1898,141700.0,NEAR BAY +-122.15,37.72,31.0,1616.0,372.0,739.0,379.0,2.9097,210900.0,NEAR BAY +-122.15,37.72,47.0,1190.0,251.0,540.0,266.0,3.375,198300.0,NEAR BAY +-122.15,37.72,29.0,4169.0,1047.0,2024.0,962.0,2.8125,157400.0,NEAR BAY +-122.14,37.73,52.0,2024.0,320.0,823.0,334.0,5.0,264700.0,NEAR BAY +-122.14,37.73,38.0,1723.0,394.0,711.0,353.0,3.0673,218400.0,NEAR BAY +-122.14,37.73,43.0,2264.0,390.0,931.0,368.0,3.8125,235100.0,NEAR BAY +-122.13,37.73,33.0,1996.0,268.0,686.0,270.0,6.9096,341800.0,NEAR BAY +-122.13,37.72,26.0,2862.0,394.0,1030.0,397.0,7.912,367300.0,NEAR BAY +-122.13,37.72,35.0,2183.0,383.0,976.0,392.0,3.8393,243500.0,NEAR BAY +-122.12,37.71,35.0,1037.0,207.0,552.0,210.0,4.0,167900.0,NEAR BAY +-122.13,37.72,25.0,1134.0,153.0,340.0,171.0,6.5095,371200.0,NEAR BAY +-122.14,37.72,39.0,786.0,132.0,288.0,132.0,3.5156,218900.0,NEAR BAY +-122.14,37.72,45.0,1397.0,253.0,555.0,248.0,2.983,202700.0,NEAR BAY +-122.13,37.72,45.0,2315.0,451.0,1006.0,444.0,3.524,186200.0,NEAR BAY +-122.13,37.71,44.0,1613.0,339.0,776.0,346.0,3.1103,188900.0,NEAR BAY +-122.13,37.71,44.0,1421.0,298.0,609.0,270.0,3.5781,180000.0,NEAR BAY +-122.15,37.71,18.0,5778.0,1526.0,2441.0,1352.0,3.1682,202700.0,NEAR BAY +-122.14,37.71,27.0,3094.0,866.0,1364.0,789.0,2.6101,181700.0,NEAR BAY +-122.14,37.71,18.0,3905.0,1007.0,2197.0,1044.0,3.6932,166800.0,NEAR BAY +-122.13,37.7,43.0,3046.0,557.0,1333.0,544.0,3.4583,183700.0,NEAR BAY +-122.13,37.7,19.0,3516.0,710.0,1810.0,703.0,3.9032,218000.0,NEAR BAY +-122.15,37.71,36.0,998.0,178.0,531.0,183.0,4.0208,191500.0,NEAR BAY +-122.15,37.7,36.0,1464.0,244.0,672.0,261.0,3.5547,194700.0,NEAR BAY +-122.14,37.7,17.0,1463.0,292.0,695.0,330.0,4.5859,187200.0,NEAR BAY +-122.13,37.7,21.0,4124.0,1054.0,2162.0,998.0,2.6321,223100.0,NEAR BAY +-122.13,37.69,17.0,2380.0,769.0,1216.0,643.0,3.395,271300.0,NEAR BAY +-122.14,37.7,36.0,1266.0,228.0,606.0,239.0,3.9702,194100.0,NEAR BAY +-122.16,37.7,36.0,2239.0,391.0,1203.0,379.0,5.0043,190400.0,NEAR BAY +-122.14,37.69,38.0,1571.0,317.0,874.0,301.0,4.4659,189100.0,NEAR BAY +-122.15,37.69,38.0,1246.0,221.0,637.0,222.0,3.6625,184600.0,NEAR BAY +-122.15,37.69,36.0,1501.0,287.0,703.0,276.0,3.8864,197300.0,NEAR BAY +-122.15,37.7,36.0,1468.0,252.0,733.0,229.0,3.4583,192600.0,NEAR BAY +-122.16,37.69,36.0,1118.0,219.0,625.0,228.0,3.7813,192200.0,NEAR BAY +-122.16,37.7,36.0,1097.0,208.0,568.0,225.0,2.9917,194600.0,NEAR BAY +-122.16,37.7,36.0,1719.0,303.0,836.0,311.0,4.4375,193500.0,NEAR BAY +-122.17,37.7,24.0,1755.0,365.0,952.0,362.0,4.0,202600.0,NEAR BAY +-122.16,37.68,16.0,1687.0,348.0,568.0,352.0,2.3869,83300.0,NEAR BAY +-122.17,37.69,24.0,2262.0,391.0,1125.0,366.0,4.7609,212600.0,NEAR BAY +-122.18,37.68,5.0,2087.0,407.0,840.0,401.0,5.4858,187800.0,NEAR BAY +-122.16,37.69,36.0,1480.0,278.0,796.0,283.0,4.3971,205700.0,NEAR BAY +-122.15,37.69,36.0,1545.0,273.0,863.0,267.0,4.0109,192900.0,NEAR BAY +-122.15,37.68,35.0,2632.0,447.0,1349.0,486.0,4.3864,205200.0,NEAR BAY +-122.15,37.68,30.0,2261.0,443.0,929.0,383.0,4.2841,213400.0,NEAR BAY +-122.15,37.69,39.0,1670.0,308.0,957.0,335.0,5.1312,183600.0,NEAR BAY +-122.14,37.69,37.0,2141.0,535.0,1093.0,555.0,2.9958,178400.0,NEAR BAY +-122.14,37.68,27.0,3337.0,613.0,1489.0,607.0,3.6364,219200.0,NEAR BAY +-122.14,37.68,31.0,3184.0,716.0,1561.0,628.0,2.7955,183100.0,NEAR BAY +-122.1,37.69,44.0,2341.0,500.0,1256.0,485.0,2.9507,157100.0,NEAR BAY +-122.12,37.69,30.0,1197.0,269.0,695.0,279.0,3.4375,157800.0,NEAR BAY +-122.13,37.69,34.0,1131.0,278.0,560.0,237.0,2.875,161700.0,NEAR BAY +-122.12,37.71,38.0,1164.0,284.0,632.0,289.0,3.0345,152100.0,NEAR BAY +-122.12,37.7,41.0,3495.0,787.0,1849.0,750.0,2.679,144900.0,NEAR BAY +-122.12,37.7,17.0,2488.0,617.0,1287.0,538.0,2.9922,179900.0,NEAR BAY +-122.12,37.69,35.0,2681.0,508.0,1580.0,536.0,4.1042,179100.0,NEAR BAY +-122.12,37.7,19.0,2495.0,635.0,1571.0,579.0,2.5833,159900.0,NEAR BAY +-122.11,37.7,23.0,1689.0,461.0,828.0,443.0,2.1552,161400.0,NEAR BAY +-122.11,37.7,29.0,1298.0,306.0,835.0,338.0,2.3274,170400.0,NEAR BAY +-122.11,37.7,19.0,2693.0,789.0,1765.0,724.0,2.4206,137500.0,NEAR BAY +-122.1,37.69,41.0,746.0,,387.0,161.0,3.9063,178400.0,NEAR BAY +-122.11,37.69,37.0,2444.0,651.0,1562.0,618.0,2.6464,155200.0,NEAR BAY +-122.11,37.69,42.0,1472.0,310.0,768.0,309.0,3.4643,160900.0,NEAR BAY +-122.12,37.69,10.0,2227.0,560.0,1140.0,472.0,2.3973,167300.0,NEAR BAY +-122.03,37.69,20.0,200.0,25.0,83.0,31.0,6.5,340000.0,NEAR BAY +-121.97,37.64,32.0,1283.0,194.0,485.0,171.0,6.0574,431000.0,<1H OCEAN +-122.02,37.63,6.0,2445.0,590.0,1189.0,573.0,3.8958,301100.0,NEAR BAY +-122.04,37.63,21.0,1307.0,236.0,586.0,249.0,4.7813,241900.0,NEAR BAY +-122.05,37.63,5.0,3785.0,936.0,2240.0,792.0,3.2829,162500.0,NEAR BAY +-122.04,37.66,10.0,2031.0,357.0,867.0,352.0,5.3169,299200.0,NEAR BAY +-122.04,37.65,10.0,8299.0,1326.0,3827.0,1288.0,6.2579,315500.0,NEAR BAY +-122.05,37.68,23.0,7518.0,1279.0,3827.0,1294.0,5.1701,216800.0,NEAR BAY +-122.07,37.68,36.0,1815.0,426.0,1280.0,431.0,3.25,218100.0,NEAR BAY +-122.06,37.68,30.0,5367.0,1207.0,2667.0,1047.0,3.1796,170300.0,NEAR BAY +-122.08,37.68,26.0,1167.0,370.0,253.0,137.0,2.4196,275000.0,NEAR BAY +-122.08,37.68,26.0,2607.0,682.0,1401.0,607.0,2.6563,184100.0,NEAR BAY +-122.08,37.67,29.0,493.0,168.0,233.0,152.0,0.9637,160000.0,NEAR BAY +-122.09,37.67,48.0,1252.0,305.0,673.0,308.0,2.3357,175000.0,NEAR BAY +-122.09,37.68,41.0,1382.0,353.0,704.0,314.0,3.5114,197500.0,NEAR BAY +-122.09,37.69,43.0,500.0,110.0,273.0,120.0,3.3125,150000.0,NEAR BAY +-122.09,37.68,29.0,2333.0,538.0,1120.0,540.0,2.4042,205600.0,NEAR BAY +-122.09,37.68,41.0,1834.0,463.0,1105.0,467.0,2.8322,170300.0,NEAR BAY +-122.09,37.68,43.0,1415.0,348.0,569.0,293.0,2.5156,190900.0,NEAR BAY +-122.1,37.68,37.0,1352.0,342.0,691.0,324.0,3.4032,196900.0,NEAR BAY +-122.1,37.68,37.0,2116.0,503.0,1109.0,448.0,2.535,174000.0,NEAR BAY +-122.11,37.68,37.0,1976.0,481.0,1197.0,465.0,2.5772,170200.0,NEAR BAY +-122.1,37.68,38.0,1779.0,413.0,1061.0,400.0,3.0962,180900.0,NEAR BAY +-122.1,37.67,34.0,3659.0,897.0,2479.0,903.0,2.9564,150500.0,NEAR BAY +-122.1,37.68,31.0,1892.0,428.0,1162.0,389.0,3.125,167100.0,NEAR BAY +-122.12,37.68,35.0,1958.0,484.0,1146.0,448.0,2.95,148900.0,NEAR BAY +-122.12,37.68,40.0,1553.0,253.0,724.0,267.0,4.38,196400.0,NEAR BAY +-122.12,37.68,37.0,2412.0,394.0,975.0,375.0,4.0417,191100.0,NEAR BAY +-122.11,37.67,36.0,2110.0,389.0,952.0,370.0,3.8,187500.0,NEAR BAY +-122.12,37.68,45.0,2179.0,401.0,1159.0,399.0,3.4839,180600.0,NEAR BAY +-122.13,37.68,45.0,2457.0,445.0,1129.0,422.0,4.0588,182800.0,NEAR BAY +-122.13,37.68,44.0,2147.0,399.0,1175.0,401.0,4.1974,179300.0,NEAR BAY +-122.13,37.68,43.0,1676.0,340.0,924.0,328.0,3.6,179400.0,NEAR BAY +-122.14,37.68,35.0,2976.0,518.0,1424.0,538.0,4.267,210300.0,NEAR BAY +-122.14,37.67,34.0,3036.0,533.0,1366.0,500.0,4.2386,192300.0,NEAR BAY +-122.15,37.67,35.0,2472.0,398.0,1171.0,390.0,5.5797,198100.0,NEAR BAY +-122.14,37.67,36.0,1487.0,249.0,641.0,243.0,4.0682,196200.0,NEAR BAY +-122.13,37.67,38.0,2012.0,347.0,880.0,332.0,3.1734,181600.0,NEAR BAY +-122.14,37.67,37.0,3342.0,,1635.0,557.0,4.7933,186900.0,NEAR BAY +-122.14,37.67,37.0,3156.0,534.0,1495.0,543.0,4.8125,188300.0,NEAR BAY +-122.13,37.67,40.0,1748.0,318.0,914.0,317.0,3.8676,184000.0,NEAR BAY +-122.12,37.67,33.0,3429.0,681.0,1798.0,694.0,3.9395,184700.0,NEAR BAY +-122.13,37.67,42.0,3592.0,703.0,1625.0,665.0,3.2434,179900.0,NEAR BAY +-122.11,37.67,38.0,1035.0,247.0,599.0,224.0,3.0917,167200.0,NEAR BAY +-122.11,37.67,32.0,3028.0,811.0,2037.0,703.0,3.0645,165400.0,NEAR BAY +-122.09,37.67,33.0,2431.0,655.0,1854.0,603.0,2.7019,154000.0,NEAR BAY +-122.09,37.67,39.0,2069.0,500.0,1408.0,478.0,3.1115,153500.0,NEAR BAY +-122.09,37.66,40.0,1340.0,313.0,766.0,271.0,3.4722,135400.0,NEAR BAY +-122.09,37.66,39.0,1160.0,259.0,725.0,274.0,2.2222,158300.0,NEAR BAY +-122.05,37.68,32.0,2015.0,318.0,1019.0,340.0,6.1104,240700.0,NEAR BAY +-122.06,37.67,22.0,3882.0,816.0,1830.0,743.0,4.2733,180700.0,NEAR BAY +-122.07,37.67,27.0,3239.0,671.0,1469.0,616.0,3.2465,230600.0,NEAR BAY +-122.07,37.67,28.0,2932.0,739.0,1198.0,624.0,3.2417,210800.0,NEAR BAY +-122.07,37.67,38.0,2104.0,409.0,1039.0,394.0,3.875,165300.0,NEAR BAY +-122.04,37.67,29.0,1694.0,251.0,690.0,242.0,6.0501,254200.0,NEAR BAY +-122.04,37.67,18.0,3000.0,419.0,1155.0,415.0,6.8233,332600.0,NEAR BAY +-122.04,37.66,23.0,2419.0,348.0,1066.0,384.0,6.3501,350000.0,NEAR BAY +-122.07,37.66,28.0,2280.0,610.0,1255.0,587.0,2.6719,161200.0,NEAR BAY +-122.07,37.66,21.0,5031.0,1168.0,2461.0,1042.0,3.875,179300.0,NEAR BAY +-122.08,37.66,33.0,1547.0,372.0,1063.0,356.0,2.5625,154300.0,NEAR BAY +-122.07,37.65,31.0,3300.0,790.0,2181.0,740.0,3.016,161800.0,NEAR BAY +-122.08,37.65,17.0,5018.0,1439.0,3069.0,1299.0,2.7694,161900.0,NEAR BAY +-122.08,37.65,35.0,1813.0,393.0,1093.0,374.0,3.6818,165400.0,NEAR BAY +-122.08,37.66,37.0,1997.0,436.0,1349.0,437.0,2.1382,166600.0,NEAR BAY +-122.1,37.66,37.0,901.0,191.0,599.0,206.0,3.7303,149700.0,NEAR BAY +-122.1,37.66,35.0,686.0,142.0,480.0,149.0,3.875,162100.0,NEAR BAY +-122.1,37.66,33.0,1954.0,464.0,1293.0,448.0,3.0489,152600.0,NEAR BAY +-122.09,37.65,27.0,2630.0,722.0,1414.0,634.0,2.8203,195200.0,NEAR BAY +-122.09,37.65,35.0,1130.0,192.0,543.0,184.0,4.3897,190600.0,NEAR BAY +-122.09,37.65,35.0,1184.0,200.0,572.0,194.0,4.7143,193800.0,NEAR BAY +-122.1,37.66,34.0,656.0,115.0,342.0,112.0,4.6875,200600.0,NEAR BAY +-122.11,37.66,29.0,2544.0,643.0,2332.0,603.0,3.2091,150000.0,NEAR BAY +-122.1,37.66,36.0,1305.0,225.0,768.0,234.0,4.275,185300.0,NEAR BAY +-122.11,37.66,36.0,1755.0,316.0,913.0,299.0,4.1302,172700.0,NEAR BAY +-122.11,37.66,35.0,2843.0,652.0,1726.0,643.0,3.09,174100.0,NEAR BAY +-122.1,37.65,25.0,2538.0,494.0,1185.0,501.0,4.5417,194400.0,NEAR BAY +-122.1,37.64,28.0,1784.0,311.0,735.0,278.0,4.6635,206700.0,NEAR BAY +-122.1,37.65,31.0,1797.0,327.0,796.0,319.0,4.4427,204500.0,NEAR BAY +-122.1,37.65,36.0,410.0,76.0,252.0,82.0,4.5303,175000.0,NEAR BAY +-122.12,37.65,26.0,162.0,27.0,86.0,25.0,2.375,137500.0,NEAR BAY +-122.1,37.63,18.0,9963.0,2031.0,5613.0,1946.0,3.8171,187200.0,NEAR BAY +-122.1,37.61,35.0,2361.0,458.0,1727.0,467.0,4.5281,173600.0,NEAR BAY +-122.13,37.66,19.0,862.0,167.0,407.0,183.0,4.3456,163000.0,NEAR BAY +-122.11,37.65,18.0,4335.0,808.0,2041.0,734.0,3.4861,331600.0,NEAR BAY +-122.11,37.64,31.0,1487.0,280.0,854.0,301.0,5.2312,197600.0,NEAR BAY +-122.11,37.64,8.0,3592.0,849.0,1907.0,746.0,3.6708,197900.0,NEAR BAY +-122.12,37.64,40.0,432.0,102.0,264.0,77.0,3.8875,228100.0,NEAR BAY +-122.09,37.63,34.0,1457.0,242.0,735.0,249.0,3.9167,189500.0,NEAR BAY +-122.09,37.64,32.0,1578.0,284.0,836.0,292.0,3.9063,184200.0,NEAR BAY +-122.1,37.63,29.0,2172.0,435.0,1377.0,408.0,3.7895,180900.0,NEAR BAY +-122.08,37.64,36.0,1340.0,245.0,789.0,248.0,3.8,172000.0,NEAR BAY +-122.08,37.64,36.0,1116.0,199.0,662.0,226.0,5.7309,177900.0,NEAR BAY +-122.09,37.64,36.0,1885.0,307.0,853.0,271.0,4.1141,173100.0,NEAR BAY +-122.09,37.64,36.0,1180.0,212.0,664.0,200.0,5.2838,172600.0,NEAR BAY +-122.08,37.64,30.0,5267.0,1253.0,4065.0,1113.0,3.3479,182100.0,NEAR BAY +-122.08,37.64,23.0,1897.0,440.0,1109.0,418.0,3.142,179500.0,NEAR BAY +-122.08,37.63,31.0,767.0,171.0,548.0,185.0,3.7614,176000.0,NEAR BAY +-122.08,37.63,33.0,691.0,127.0,431.0,149.0,4.25,192600.0,NEAR BAY +-122.08,37.64,36.0,786.0,133.0,463.0,160.0,3.9338,182700.0,NEAR BAY +-122.07,37.64,22.0,5861.0,1516.0,5436.0,1463.0,2.5158,134900.0,NEAR BAY +-122.07,37.63,27.0,2784.0,723.0,2028.0,693.0,2.4808,157600.0,NEAR BAY +-122.07,37.64,25.0,4524.0,860.0,2426.0,862.0,4.7083,190900.0,NEAR BAY +-122.06,37.64,37.0,1468.0,304.0,1038.0,282.0,4.1652,158200.0,NEAR BAY +-122.06,37.64,20.0,1655.0,450.0,857.0,430.0,3.5541,350000.0,NEAR BAY +-122.06,37.65,33.0,1227.0,286.0,848.0,291.0,3.8036,158200.0,NEAR BAY +-122.06,37.64,33.0,1160.0,252.0,729.0,220.0,3.8259,146100.0,NEAR BAY +-122.04,37.63,33.0,952.0,172.0,369.0,159.0,3.2331,226700.0,NEAR BAY +-122.03,37.62,35.0,2072.0,352.0,1001.0,350.0,4.7109,198700.0,NEAR BAY +-122.03,37.62,32.0,2964.0,547.0,1472.0,527.0,4.2468,221200.0,NEAR BAY +-122.04,37.62,35.0,1032.0,173.0,453.0,176.0,6.396,208500.0,NEAR BAY +-122.04,37.62,35.0,657.0,118.0,328.0,134.0,3.8125,204200.0,NEAR BAY +-122.04,37.62,32.0,1540.0,324.0,793.0,302.0,3.2857,193200.0,NEAR BAY +-122.03,37.62,35.0,1298.0,236.0,632.0,204.0,3.8929,209500.0,NEAR BAY +-122.03,37.61,36.0,1409.0,271.0,1002.0,281.0,3.7262,164900.0,NEAR BAY +-122.03,37.61,37.0,1383.0,259.0,808.0,241.0,4.0125,161400.0,NEAR BAY +-122.04,37.61,36.0,1151.0,216.0,727.0,215.0,4.1719,187000.0,NEAR BAY +-122.04,37.62,35.0,899.0,179.0,455.0,185.0,4.2857,190400.0,NEAR BAY +-122.08,37.63,37.0,1793.0,364.0,1534.0,346.0,3.6458,156600.0,NEAR BAY +-122.08,37.62,17.0,2485.0,518.0,1139.0,550.0,2.6875,157300.0,NEAR BAY +-122.07,37.63,35.0,1931.0,376.0,1175.0,337.0,3.7292,168100.0,NEAR BAY +-122.07,37.63,24.0,2329.0,465.0,1401.0,453.0,4.5913,177600.0,NEAR BAY +-122.06,37.63,12.0,6711.0,1374.0,3388.0,1289.0,3.8625,208900.0,NEAR BAY +-122.06,37.63,23.0,1939.0,356.0,841.0,364.0,3.3611,169200.0,NEAR BAY +-122.05,37.61,16.0,1642.0,346.0,705.0,351.0,2.8971,163900.0,NEAR BAY +-122.08,37.63,34.0,1619.0,293.0,1148.0,310.0,4.0326,164700.0,NEAR BAY +-122.08,37.63,35.0,517.0,108.0,391.0,107.0,4.0682,156900.0,NEAR BAY +-122.09,37.63,36.0,1570.0,274.0,992.0,249.0,5.3644,168800.0,NEAR BAY +-122.09,37.63,35.0,1213.0,221.0,790.0,243.0,4.7019,174100.0,NEAR BAY +-122.08,37.62,27.0,1826.0,309.0,1016.0,313.0,5.64,206500.0,NEAR BAY +-122.08,37.61,26.0,2261.0,443.0,1039.0,395.0,3.7931,203900.0,NEAR BAY +-121.99,37.61,9.0,3666.0,711.0,2341.0,703.0,4.6458,217000.0,<1H OCEAN +-122.02,37.6,36.0,1633.0,345.0,1382.0,338.0,3.694,159600.0,NEAR BAY +-122.02,37.6,31.0,2155.0,522.0,1858.0,437.0,2.652,159800.0,NEAR BAY +-122.02,37.6,32.0,1295.0,280.0,1156.0,300.0,3.5,154300.0,NEAR BAY +-122.02,37.6,32.0,1295.0,295.0,1097.0,328.0,3.2386,149600.0,NEAR BAY +-122.03,37.61,33.0,1518.0,302.0,831.0,268.0,5.097,188600.0,NEAR BAY +-122.04,37.6,17.0,3314.0,638.0,1873.0,602.0,4.3875,238500.0,NEAR BAY +-122.06,37.6,22.0,3009.0,497.0,1640.0,514.0,4.625,235300.0,NEAR BAY +-122.08,37.61,6.0,2605.0,474.0,1568.0,433.0,5.0406,261400.0,NEAR BAY +-122.06,37.6,17.0,5159.0,832.0,3174.0,817.0,5.8704,234400.0,NEAR BAY +-122.06,37.6,18.0,1726.0,276.0,1186.0,310.0,5.3226,231700.0,NEAR BAY +-122.08,37.59,16.0,1816.0,365.0,1367.0,355.0,4.235,156300.0,NEAR BAY +-122.07,37.59,13.0,2578.0,551.0,1680.0,528.0,4.825,222000.0,NEAR BAY +-122.08,37.58,15.0,2576.0,418.0,1657.0,410.0,5.5218,254400.0,NEAR BAY +-122.07,37.58,16.0,1644.0,251.0,1033.0,267.0,6.5116,244300.0,NEAR BAY +-122.07,37.58,16.0,1606.0,240.0,1117.0,268.0,6.0661,247000.0,NEAR BAY +-122.08,37.58,16.0,3349.0,544.0,2003.0,488.0,6.0074,236500.0,NEAR BAY +-122.07,37.59,15.0,3475.0,686.0,2568.0,653.0,4.6211,151400.0,NEAR BAY +-122.07,37.58,16.0,1893.0,338.0,1461.0,344.0,5.225,213700.0,NEAR BAY +-122.04,37.59,14.0,1727.0,302.0,1116.0,273.0,5.3428,243600.0,NEAR BAY +-122.05,37.59,15.0,6243.0,1273.0,3163.0,1274.0,3.7462,212500.0,NEAR BAY +-122.03,37.6,24.0,2077.0,383.0,1488.0,389.0,4.5721,214700.0,NEAR BAY +-122.02,37.59,18.0,1165.0,333.0,855.0,319.0,3.6923,213200.0,NEAR BAY +-122.03,37.59,16.0,4371.0,889.0,2530.0,817.0,4.6786,256000.0,NEAR BAY +-122.01,37.59,2.0,838.0,295.0,240.0,149.0,2.875,237500.0,NEAR BAY +-122.02,37.58,15.0,3052.0,760.0,2097.0,728.0,3.3617,178100.0,NEAR BAY +-122.01,37.58,17.0,4313.0,717.0,2629.0,721.0,5.7579,231800.0,NEAR BAY +-122.09,37.6,36.0,385.0,94.0,295.0,92.0,2.9706,147900.0,NEAR BAY +-122.08,37.6,10.0,3046.0,678.0,2056.0,628.0,3.9022,191700.0,NEAR BAY +-121.97,37.57,21.0,4342.0,783.0,2172.0,789.0,4.6146,247600.0,<1H OCEAN +-121.96,37.58,15.0,3575.0,597.0,1777.0,559.0,5.7192,283500.0,<1H OCEAN +-121.98,37.58,20.0,4126.0,1031.0,2079.0,975.0,3.6832,216900.0,<1H OCEAN +-121.99,37.58,31.0,2878.0,478.0,1276.0,485.0,6.2073,282500.0,<1H OCEAN +-122.0,37.58,6.0,4405.0,717.0,2071.0,688.0,5.8151,295600.0,<1H OCEAN +-122.01,37.57,14.0,16199.0,2993.0,8117.0,2847.0,5.8322,281800.0,NEAR BAY +-122.04,37.58,14.0,14917.0,2708.0,8012.0,2606.0,5.6277,269800.0,NEAR BAY +-122.04,37.57,12.0,5719.0,1064.0,3436.0,1057.0,5.2879,231200.0,NEAR BAY +-122.07,37.57,8.0,8647.0,1407.0,5019.0,1379.0,6.5615,318300.0,NEAR BAY +-122.06,37.58,15.0,8112.0,1376.0,4576.0,1348.0,5.6758,253400.0,NEAR BAY +-122.05,37.57,7.0,10648.0,1818.0,6075.0,1797.0,6.1047,278200.0,NEAR BAY +-121.93,37.49,5.0,1150.0,311.0,648.0,245.0,3.5714,300000.0,<1H OCEAN +-122.07,37.52,3.0,14014.0,2861.0,7205.0,2753.0,6.0824,273500.0,NEAR BAY +-122.02,37.56,23.0,4332.0,857.0,2461.0,829.0,4.3594,223400.0,NEAR BAY +-122.02,37.56,35.0,1716.0,312.0,914.0,316.0,5.5737,214500.0,NEAR BAY +-122.03,37.56,31.0,4981.0,964.0,2841.0,924.0,4.8962,220200.0,NEAR BAY +-122.03,37.56,24.0,8444.0,1492.0,4446.0,1491.0,4.6978,240300.0,NEAR BAY +-122.01,37.56,6.0,3028.0,778.0,1531.0,736.0,4.4259,158000.0,NEAR BAY +-122.01,37.55,26.0,2068.0,532.0,1434.0,495.0,3.3008,224200.0,NEAR BAY +-122.02,37.55,33.0,1325.0,274.0,909.0,267.0,4.5687,177200.0,NEAR BAY +-122.01,37.56,24.0,2563.0,485.0,1174.0,501.0,3.8179,216100.0,NEAR BAY +-121.99,37.56,18.0,5505.0,1005.0,2641.0,971.0,5.0,269700.0,<1H OCEAN +-121.99,37.56,20.0,6462.0,1294.0,3288.0,1235.0,4.3393,231200.0,<1H OCEAN +-121.96,37.55,4.0,3746.0,993.0,1606.0,838.0,4.1387,162500.0,<1H OCEAN +-121.97,37.56,13.0,8918.0,1823.0,4518.0,1772.0,4.8052,254000.0,<1H OCEAN +-121.97,37.54,31.0,1949.0,344.0,986.0,322.0,4.6349,196200.0,<1H OCEAN +-121.97,37.55,17.0,4924.0,1247.0,3080.0,1182.0,3.168,189400.0,<1H OCEAN +-121.98,37.54,17.0,5133.0,1375.0,3386.0,1339.0,3.1326,220800.0,<1H OCEAN +-121.99,37.55,16.0,6647.0,2098.0,4649.0,1903.0,2.9074,213800.0,<1H OCEAN +-121.94,37.56,15.0,5674.0,748.0,2412.0,714.0,8.3996,442900.0,<1H OCEAN +-121.95,37.55,21.0,10687.0,1540.0,4552.0,1520.0,6.6478,333400.0,<1H OCEAN +-121.93,37.54,25.0,1354.0,192.0,596.0,220.0,6.629,352400.0,<1H OCEAN +-121.94,37.54,27.0,3715.0,526.0,1631.0,538.0,6.2179,305300.0,<1H OCEAN +-121.94,37.53,33.0,2095.0,342.0,941.0,304.0,5.761,259600.0,<1H OCEAN +-121.95,37.54,29.0,3517.0,645.0,1724.0,585.0,4.6641,248900.0,<1H OCEAN +-121.94,37.54,31.0,2537.0,382.0,1067.0,410.0,6.7599,356000.0,<1H OCEAN +-121.96,37.54,14.0,5106.0,1207.0,2738.0,1108.0,3.9909,236000.0,<1H OCEAN +-121.96,37.53,23.0,2215.0,475.0,1278.0,492.0,4.2955,218800.0,<1H OCEAN +-121.96,37.53,28.0,2949.0,529.0,1538.0,545.0,4.9615,228000.0,<1H OCEAN +-121.96,37.53,18.0,2375.0,652.0,1252.0,586.0,2.6198,235900.0,<1H OCEAN +-121.97,37.54,28.0,2312.0,496.0,1344.0,467.0,4.7135,203200.0,<1H OCEAN +-121.97,37.53,35.0,2277.0,420.0,1353.0,413.0,4.75,197000.0,<1H OCEAN +-121.97,37.53,26.0,2506.0,387.0,1273.0,406.0,5.4299,236400.0,<1H OCEAN +-121.98,37.53,28.0,2829.0,566.0,1610.0,540.0,4.6,223200.0,<1H OCEAN +-121.98,37.53,26.0,3179.0,703.0,2142.0,639.0,4.1947,222700.0,<1H OCEAN +-121.99,37.54,26.0,2332.0,371.0,1285.0,404.0,5.388,225000.0,<1H OCEAN +-121.99,37.54,18.0,3584.0,715.0,1673.0,661.0,3.9444,240100.0,<1H OCEAN +-121.99,37.54,28.0,3046.0,507.0,1772.0,516.0,5.3283,227900.0,<1H OCEAN +-121.99,37.55,28.0,2414.0,415.0,1106.0,453.0,4.8403,268600.0,<1H OCEAN +-122.0,37.54,29.0,4133.0,744.0,2023.0,749.0,5.1616,275100.0,<1H OCEAN +-122.01,37.55,34.0,2791.0,495.0,1276.0,468.0,4.9167,256300.0,NEAR BAY +-122.0,37.55,27.0,6103.0,1249.0,3026.0,1134.0,4.1591,332400.0,<1H OCEAN +-122.01,37.54,32.0,2572.0,406.0,1128.0,395.0,5.0,287600.0,NEAR BAY +-122.0,37.54,26.0,1910.0,371.0,852.0,357.0,5.8325,298900.0,<1H OCEAN +-122.01,37.53,27.0,1890.0,303.0,889.0,314.0,5.7057,287600.0,NEAR BAY +-121.99,37.53,25.0,5405.0,939.0,2831.0,923.0,5.0423,222200.0,<1H OCEAN +-121.97,37.52,26.0,3761.0,623.0,1776.0,613.0,4.5317,232600.0,<1H OCEAN +-121.97,37.51,25.0,3333.0,511.0,1671.0,504.0,5.4359,258300.0,<1H OCEAN +-121.97,37.52,23.0,4925.0,948.0,2530.0,894.0,5.0824,230900.0,<1H OCEAN +-121.95,37.52,33.0,3994.0,764.0,2721.0,763.0,5.2308,196900.0,<1H OCEAN +-121.96,37.51,22.0,5811.0,1125.0,3215.0,1086.0,4.4107,223500.0,<1H OCEAN +-121.96,37.52,26.0,4211.0,741.0,2352.0,734.0,5.2396,223900.0,<1H OCEAN +-121.93,37.53,27.0,5532.0,973.0,2855.0,960.0,4.7478,243500.0,<1H OCEAN +-121.92,37.53,7.0,28258.0,3864.0,12203.0,3701.0,8.4045,451100.0,<1H OCEAN +-121.89,37.49,9.0,4909.0,577.0,1981.0,591.0,9.7194,500001.0,<1H OCEAN +-121.92,37.49,10.0,7441.0,1588.0,3571.0,1466.0,5.1643,193100.0,<1H OCEAN +-121.92,37.48,23.0,4314.0,676.0,1972.0,623.0,5.3813,264400.0,<1H OCEAN +-121.92,37.47,26.0,2016.0,322.0,1105.0,357.0,6.0878,246900.0,<1H OCEAN +-121.91,37.47,13.0,5377.0,744.0,2759.0,760.0,6.868,337300.0,<1H OCEAN +-122.03,37.55,22.0,9167.0,1373.0,4319.0,1404.0,6.992,284800.0,NEAR BAY +-122.03,37.55,26.0,3087.0,532.0,1597.0,483.0,4.9118,217300.0,NEAR BAY +-122.04,37.55,23.0,3170.0,532.0,1446.0,515.0,4.4357,291700.0,NEAR BAY +-122.04,37.54,26.0,2145.0,369.0,1285.0,377.0,4.9464,223800.0,NEAR BAY +-122.05,37.54,25.0,4209.0,731.0,2568.0,703.0,5.2882,223100.0,NEAR BAY +-122.05,37.55,23.0,4247.0,835.0,2357.0,823.0,5.1321,211300.0,NEAR BAY +-122.04,37.53,25.0,4458.0,922.0,2998.0,890.0,3.9667,218500.0,NEAR BAY +-122.04,37.5,17.0,407.0,97.0,307.0,100.0,3.1696,156300.0,NEAR BAY +-122.06,37.54,20.0,6483.0,1068.0,3526.0,1060.0,5.0838,248200.0,NEAR BAY +-122.03,37.54,35.0,1867.0,343.0,1213.0,338.0,4.8214,186000.0,NEAR BAY +-122.03,37.54,6.0,2918.0,672.0,1911.0,639.0,4.1406,178200.0,NEAR BAY +-122.04,37.53,34.0,2316.0,478.0,1524.0,467.0,3.7364,190400.0,NEAR BAY +-122.02,37.54,31.0,1240.0,264.0,719.0,236.0,3.535,210300.0,NEAR BAY +-122.03,37.54,16.0,4458.0,856.0,3038.0,870.0,5.0739,208000.0,NEAR BAY +-122.03,37.53,18.0,1746.0,437.0,1268.0,404.0,3.256,183300.0,NEAR BAY +-122.01,37.53,19.0,4572.0,712.0,2346.0,709.0,6.0667,245700.0,NEAR BAY +-122.02,37.53,21.0,4280.0,673.0,2216.0,681.0,5.7072,242200.0,NEAR BAY +-122.0,37.51,7.0,6352.0,1390.0,3223.0,1316.0,4.9867,181700.0,<1H OCEAN +-121.92,37.72,4.0,7477.0,1576.0,2937.0,1506.0,5.1437,299400.0,<1H OCEAN +-121.92,37.72,22.0,4638.0,716.0,2302.0,687.0,5.347,219500.0,<1H OCEAN +-121.91,37.71,25.0,4377.0,668.0,2038.0,671.0,5.7233,231800.0,<1H OCEAN +-121.93,37.72,26.0,3816.0,637.0,1935.0,642.0,4.4697,221300.0,<1H OCEAN +-121.93,37.72,26.0,2806.0,459.0,1453.0,444.0,4.9107,213800.0,<1H OCEAN +-121.93,37.71,26.0,4822.0,845.0,2288.0,805.0,4.2281,206000.0,<1H OCEAN +-121.94,37.71,15.0,6473.0,1027.0,2484.0,970.0,5.0143,271100.0,<1H OCEAN +-121.96,37.71,6.0,8072.0,1050.0,3386.0,1062.0,7.2494,336500.0,<1H OCEAN +-121.92,37.64,46.0,1280.0,209.0,512.0,208.0,5.1406,315600.0,INLAND +-121.93,37.66,24.0,3166.0,424.0,1081.0,400.0,8.3337,500001.0,<1H OCEAN +-121.92,37.69,13.0,3742.0,555.0,1590.0,559.0,7.316,285400.0,<1H OCEAN +-121.9,37.66,18.0,7397.0,1137.0,3126.0,1115.0,6.4994,323000.0,INLAND +-121.92,37.68,23.0,1655.0,223.0,706.0,219.0,7.2211,291900.0,<1H OCEAN +-121.93,37.7,3.0,2456.0,582.0,793.0,456.0,4.4087,225600.0,<1H OCEAN +-121.91,37.69,23.0,2179.0,308.0,926.0,299.0,5.9345,259600.0,<1H OCEAN +-121.91,37.68,20.0,1804.0,254.0,831.0,260.0,6.177,262900.0,<1H OCEAN +-121.91,37.68,18.0,3631.0,547.0,1700.0,520.0,5.817,257300.0,<1H OCEAN +-121.91,37.69,18.0,2876.0,423.0,1395.0,427.0,6.3132,259200.0,<1H OCEAN +-121.89,37.68,12.0,7490.0,1207.0,3329.0,1136.0,6.3373,339700.0,<1H OCEAN +-121.88,37.68,23.0,2234.0,270.0,854.0,286.0,7.333,337200.0,INLAND +-121.89,37.68,22.0,1898.0,239.0,734.0,245.0,6.2918,334100.0,<1H OCEAN +-121.88,37.67,16.0,4070.0,624.0,1543.0,577.0,6.5214,311500.0,INLAND +-121.88,37.67,25.0,2244.0,301.0,937.0,324.0,6.4524,296900.0,INLAND +-121.89,37.67,20.0,2948.0,471.0,1181.0,474.0,6.0604,247900.0,INLAND +-121.89,37.67,19.0,2034.0,288.0,852.0,295.0,6.5285,300400.0,INLAND +-121.9,37.67,15.0,2130.0,273.0,876.0,285.0,7.2639,332400.0,<1H OCEAN +-121.9,37.67,7.0,9540.0,1294.0,3926.0,1229.0,7.4353,389800.0,<1H OCEAN +-121.88,37.66,29.0,2702.0,680.0,1360.0,642.0,3.1127,233000.0,INLAND +-121.87,37.66,39.0,522.0,116.0,161.0,102.0,2.4896,238500.0,INLAND +-121.87,37.66,52.0,775.0,134.0,315.0,123.0,5.0677,233300.0,INLAND +-121.89,37.66,3.0,1565.0,464.0,769.0,461.0,2.1187,231300.0,INLAND +-121.88,37.64,20.0,1309.0,184.0,514.0,172.0,10.9506,475800.0,INLAND +-121.87,37.57,13.0,5519.0,833.0,2444.0,825.0,7.0691,393200.0,<1H OCEAN +-121.87,37.67,10.0,4337.0,800.0,1813.0,743.0,5.5,247200.0,INLAND +-121.87,37.67,28.0,1812.0,294.0,853.0,278.0,4.9879,229400.0,INLAND +-121.85,37.68,4.0,4719.0,741.0,1895.0,742.0,6.8132,282500.0,INLAND +-121.85,37.66,14.0,4236.0,701.0,1833.0,663.0,5.6399,300600.0,INLAND +-121.86,37.66,22.0,3634.0,664.0,1699.0,640.0,4.1597,293200.0,INLAND +-121.87,37.66,27.0,1569.0,242.0,583.0,214.0,5.7519,278500.0,INLAND +-121.84,37.66,13.0,13182.0,2074.0,4847.0,1950.0,5.6417,352900.0,INLAND +-121.85,37.72,43.0,228.0,40.0,83.0,42.0,10.3203,400000.0,INLAND +-121.82,37.73,47.0,127.0,23.0,51.0,21.0,4.3472,375000.0,INLAND +-121.86,37.7,13.0,9621.0,1344.0,4389.0,1391.0,6.6827,313700.0,INLAND +-121.89,37.69,4.0,6159.0,1510.0,2649.0,1241.0,3.62,139300.0,<1H OCEAN +-121.77,37.65,16.0,4290.0,554.0,1952.0,576.0,7.3588,327500.0,INLAND +-121.62,37.61,26.0,1786.0,306.0,771.0,279.0,5.7239,430600.0,INLAND +-121.61,37.77,32.0,404.0,74.0,144.0,58.0,4.2083,125000.0,INLAND +-121.72,37.7,17.0,1671.0,352.0,729.0,252.0,6.1023,450000.0,INLAND +-121.73,37.71,12.0,5608.0,1049.0,2595.0,1067.0,3.9864,200200.0,INLAND +-121.75,37.71,11.0,12070.0,2220.0,5826.0,2125.0,4.8624,192400.0,INLAND +-121.77,37.74,25.0,494.0,81.0,254.0,85.0,9.1531,418800.0,INLAND +-121.8,37.7,22.0,5533.0,943.0,2474.0,910.0,4.7361,216800.0,INLAND +-121.8,37.69,17.0,3956.0,639.0,2222.0,662.0,5.4324,215500.0,INLAND +-121.82,37.69,12.0,1906.0,351.0,802.0,319.0,4.9375,227700.0,INLAND +-121.76,37.69,29.0,3433.0,711.0,1919.0,709.0,3.3841,184400.0,INLAND +-121.77,37.68,36.0,1687.0,372.0,950.0,372.0,3.5532,158400.0,INLAND +-121.78,37.69,34.0,2358.0,498.0,1157.0,461.0,3.3618,174600.0,INLAND +-121.78,37.69,35.0,2853.0,588.0,1761.0,572.0,4.3533,168400.0,INLAND +-121.79,37.69,25.0,6296.0,1082.0,3200.0,1047.0,4.5357,188400.0,INLAND +-121.76,37.7,9.0,3980.0,736.0,1705.0,679.0,5.7068,256700.0,INLAND +-121.75,37.69,26.0,2647.0,536.0,1422.0,522.0,3.7212,183800.0,INLAND +-121.75,37.68,35.0,1755.0,299.0,702.0,263.0,5.2443,183400.0,INLAND +-121.76,37.68,35.0,1864.0,357.0,1189.0,349.0,4.2361,177500.0,INLAND +-121.76,37.68,32.0,1078.0,207.0,555.0,197.0,3.1856,186900.0,INLAND +-121.73,37.68,17.0,20354.0,3493.0,8768.0,3293.0,5.4496,238900.0,INLAND +-121.78,37.68,17.0,3112.0,872.0,1392.0,680.0,3.0222,172500.0,INLAND +-121.77,37.68,44.0,495.0,112.0,277.0,109.0,2.6667,179200.0,INLAND +-121.76,37.68,52.0,2157.0,418.0,929.0,419.0,3.7301,204400.0,INLAND +-121.77,37.68,41.0,1501.0,299.0,629.0,288.0,4.6806,209400.0,INLAND +-121.77,37.67,20.0,8068.0,1217.0,3489.0,1259.0,5.7907,264200.0,INLAND +-121.76,37.67,6.0,3023.0,518.0,1225.0,468.0,6.3705,350000.0,INLAND +-121.78,37.67,26.0,2211.0,344.0,1024.0,321.0,5.2649,199800.0,INLAND +-121.79,37.67,26.0,2163.0,339.0,947.0,346.0,6.0797,211000.0,INLAND +-121.78,37.67,28.0,1773.0,278.0,804.0,269.0,4.8571,201100.0,INLAND +-121.78,37.66,25.0,1947.0,418.0,900.0,354.0,3.8523,193000.0,INLAND +-121.79,37.66,22.0,14701.0,2210.0,6693.0,2232.0,5.98,245000.0,INLAND +-119.78,38.69,17.0,1364.0,282.0,338.0,152.0,2.45,117600.0,INLAND +-119.93,38.72,15.0,2061.0,465.0,573.0,196.0,2.2417,97900.0,INLAND +-120.0,38.52,16.0,3045.0,543.0,202.0,102.0,3.15,140600.0,INLAND +-120.56,38.48,14.0,3545.0,702.0,946.0,411.0,3.4609,120900.0,INLAND +-120.59,38.45,13.0,2944.0,558.0,1091.0,466.0,3.0,119000.0,INLAND +-120.55,38.46,16.0,1443.0,249.0,435.0,181.0,3.2031,129200.0,INLAND +-120.55,38.45,17.0,2277.0,474.0,767.0,356.0,2.5208,99100.0,INLAND +-120.55,38.43,18.0,1564.0,357.0,618.0,277.0,2.3549,108900.0,INLAND +-120.25,38.55,15.0,4403.0,891.0,1103.0,433.0,3.0125,111700.0,INLAND +-120.79,38.54,34.0,1133.0,254.0,495.0,187.0,2.05,68900.0,INLAND +-120.8,38.51,23.0,1001.0,195.0,369.0,157.0,3.125,96400.0,INLAND +-120.65,38.5,10.0,1783.0,337.0,638.0,262.0,2.65,116700.0,INLAND +-120.76,38.47,17.0,1521.0,309.0,607.0,240.0,3.5,123800.0,INLAND +-120.88,38.45,25.0,1374.0,297.0,657.0,288.0,2.5476,97900.0,INLAND +-120.79,38.43,40.0,1391.0,246.0,546.0,214.0,3.9107,129800.0,INLAND +-120.69,38.44,13.0,1473.0,265.0,597.0,228.0,4.2917,121300.0,INLAND +-120.93,38.5,15.0,1248.0,234.0,529.0,216.0,3.3393,107200.0,INLAND +-120.97,38.42,16.0,1748.0,322.0,4930.0,287.0,4.3029,121900.0,INLAND +-120.87,38.37,28.0,3998.0,765.0,1614.0,698.0,2.8125,113400.0,INLAND +-120.98,38.34,27.0,3471.0,653.0,1793.0,600.0,3.5508,99100.0,INLAND +-120.88,38.32,18.0,2791.0,492.0,1187.0,438.0,3.2589,103000.0,INLAND +-120.93,38.26,13.0,2084.0,449.0,834.0,305.0,3.2937,114200.0,INLAND +-120.72,38.42,17.0,5654.0,1085.0,2237.0,953.0,3.0465,144100.0,INLAND +-120.77,38.38,15.0,4221.0,816.0,1737.0,743.0,2.3125,128600.0,INLAND +-120.72,38.38,9.0,1787.0,347.0,806.0,306.0,2.525,157200.0,INLAND +-120.66,38.4,18.0,2144.0,420.0,985.0,381.0,3.175,118500.0,INLAND +-120.65,38.42,23.0,1538.0,305.0,730.0,267.0,2.6078,116700.0,INLAND +-120.62,38.39,15.0,3750.0,691.0,1444.0,603.0,2.7399,134800.0,INLAND +-120.69,38.36,19.0,3267.0,614.0,1252.0,566.0,2.7236,109900.0,INLAND +-120.71,38.34,16.0,1257.0,231.0,559.0,213.0,4.4531,144300.0,INLAND +-120.8,38.31,37.0,1341.0,256.0,533.0,242.0,3.2135,123600.0,INLAND +-121.83,39.76,12.0,9831.0,1921.0,4644.0,1775.0,3.1142,112600.0,INLAND +-121.82,39.76,23.0,6010.0,1116.0,2710.0,1149.0,3.0068,107300.0,INLAND +-121.86,39.78,12.0,7653.0,1578.0,3628.0,1494.0,3.0905,117800.0,INLAND +-121.85,39.77,17.0,5273.0,1177.0,2446.0,1199.0,1.9362,89900.0,INLAND +-121.84,39.76,14.0,2351.0,620.0,1215.0,548.0,2.3155,102300.0,INLAND +-121.86,39.76,19.0,7254.0,1785.0,4030.0,1667.0,2.0094,87300.0,INLAND +-121.89,39.76,15.0,10265.0,1860.0,4591.0,1906.0,3.07,142600.0,INLAND +-121.88,39.74,12.0,14631.0,3298.0,7517.0,3262.0,1.6785,153100.0,INLAND +-121.87,39.75,22.0,1707.0,296.0,822.0,297.0,3.6625,126600.0,INLAND +-121.86,39.75,18.0,1651.0,309.0,856.0,293.0,3.5046,118300.0,INLAND +-121.87,39.74,7.0,1737.0,290.0,747.0,265.0,3.9,147000.0,INLAND +-121.85,39.75,39.0,568.0,127.0,267.0,129.0,1.8095,78100.0,INLAND +-121.85,39.74,39.0,1139.0,265.0,623.0,264.0,2.2833,85800.0,INLAND +-121.85,39.74,41.0,2901.0,689.0,1426.0,632.0,1.5633,84500.0,INLAND +-121.85,39.73,52.0,444.0,80.0,1107.0,98.0,3.4191,137500.0,INLAND +-121.85,39.73,17.0,3425.0,827.0,2469.0,758.0,0.9393,88900.0,INLAND +-121.86,39.74,13.0,3494.0,843.0,1571.0,784.0,1.1019,120200.0,INLAND +-121.84,39.75,29.0,4362.0,1053.0,2053.0,1000.0,1.7284,74500.0,INLAND +-121.84,39.74,43.0,2976.0,599.0,1181.0,560.0,2.2621,85100.0,INLAND +-121.83,39.74,34.0,3263.0,604.0,1290.0,594.0,2.575,130300.0,INLAND +-121.8,39.75,28.0,2551.0,378.0,1011.0,374.0,4.3309,125200.0,INLAND +-121.82,39.75,29.0,7744.0,1375.0,3316.0,1365.0,3.0253,111400.0,INLAND +-121.82,39.75,37.0,2236.0,372.0,974.0,379.0,3.2016,97000.0,INLAND +-121.8,39.75,11.0,7212.0,1355.0,3264.0,1264.0,3.1125,122600.0,INLAND +-121.79,39.73,8.0,5690.0,1189.0,2887.0,1077.0,3.0625,116300.0,INLAND +-121.78,39.71,8.0,140.0,28.0,84.0,29.0,2.125,179200.0,INLAND +-121.82,39.73,44.0,2923.0,659.0,1371.0,626.0,2.2925,85800.0,INLAND +-121.84,39.73,52.0,677.0,152.0,379.0,154.0,1.6797,94800.0,INLAND +-121.84,39.73,52.0,502.0,100.0,311.0,100.0,1.5481,200000.0,INLAND +-121.84,39.73,52.0,857.0,232.0,520.0,198.0,0.987,112500.0,INLAND +-121.84,39.72,52.0,1457.0,389.0,802.0,342.0,0.9566,69000.0,INLAND +-121.84,39.73,52.0,957.0,263.0,513.0,223.0,1.3672,55000.0,INLAND +-121.83,39.73,52.0,1741.0,401.0,753.0,377.0,2.0064,77900.0,INLAND +-121.85,39.72,18.0,7272.0,1559.0,5022.0,1524.0,1.6911,98800.0,INLAND +-121.83,39.72,52.0,1890.0,420.0,974.0,383.0,1.6827,78700.0,INLAND +-121.81,39.7,21.0,5051.0,1054.0,2948.0,980.0,1.5863,81300.0,INLAND +-121.82,39.73,33.0,2242.0,517.0,1160.0,449.0,1.7426,60300.0,INLAND +-121.82,39.72,42.0,2978.0,694.0,1879.0,679.0,1.5064,66300.0,INLAND +-121.81,39.71,18.0,1222.0,250.0,708.0,281.0,2.0288,116700.0,INLAND +-121.87,39.82,11.0,5103.0,825.0,2456.0,810.0,4.5032,159700.0,INLAND +-121.89,39.71,26.0,2741.0,451.0,1217.0,437.0,3.7007,139200.0,INLAND +-121.97,39.79,16.0,1453.0,299.0,904.0,286.0,3.5735,89600.0,INLAND +-121.84,39.68,38.0,549.0,105.0,275.0,94.0,3.5375,153100.0,INLAND +-121.8,39.64,25.0,2202.0,422.0,1109.0,403.0,2.8306,87500.0,INLAND +-121.77,39.66,20.0,3759.0,,1705.0,600.0,4.712,158600.0,INLAND +-121.74,39.59,24.0,1535.0,279.0,726.0,272.0,2.3833,95100.0,INLAND +-121.9,39.59,20.0,1465.0,278.0,745.0,250.0,3.0625,93800.0,INLAND +-121.75,39.88,16.0,2867.0,559.0,1203.0,449.0,2.7143,95300.0,INLAND +-121.68,39.82,15.0,3996.0,748.0,1786.0,728.0,3.5189,141300.0,INLAND +-121.54,40.06,17.0,858.0,262.0,47.0,27.0,2.4028,67500.0,INLAND +-121.51,39.97,22.0,1468.0,285.0,611.0,235.0,2.3036,73000.0,INLAND +-121.59,39.86,14.0,1527.0,269.0,665.0,261.0,2.8657,119600.0,INLAND +-121.58,39.83,16.0,4591.0,904.0,1904.0,812.0,2.2419,93200.0,INLAND +-121.6,39.8,10.0,1742.0,307.0,721.0,312.0,2.4537,117900.0,INLAND +-121.62,39.79,11.0,3835.0,727.0,1456.0,658.0,2.5374,97200.0,INLAND +-121.59,39.82,12.0,1958.0,369.0,875.0,354.0,2.3507,97600.0,INLAND +-121.6,39.83,12.0,3744.0,699.0,1532.0,660.0,2.3079,95300.0,INLAND +-121.63,39.82,11.0,3974.0,727.0,1610.0,634.0,2.6147,107700.0,INLAND +-121.6,39.79,18.0,2672.0,533.0,1151.0,532.0,2.567,102900.0,INLAND +-121.59,39.79,20.0,743.0,171.0,395.0,168.0,1.625,88300.0,INLAND +-121.59,39.78,16.0,2754.0,570.0,1063.0,543.0,1.4048,86500.0,INLAND +-121.59,39.78,18.0,945.0,205.0,385.0,207.0,2.1838,58000.0,INLAND +-121.6,39.77,26.0,1503.0,343.0,699.0,296.0,1.875,84000.0,INLAND +-121.61,39.77,25.0,1612.0,313.0,837.0,303.0,2.963,89500.0,INLAND +-121.63,39.78,28.0,1677.0,327.0,770.0,309.0,2.6823,93400.0,INLAND +-121.57,39.8,23.0,790.0,137.0,365.0,152.0,2.1912,115200.0,INLAND +-121.57,39.78,18.0,2221.0,459.0,952.0,440.0,2.0458,105700.0,INLAND +-121.59,39.77,24.0,1535.0,276.0,664.0,273.0,2.3068,97300.0,INLAND +-121.58,39.79,19.0,2636.0,523.0,1184.0,465.0,2.7863,108600.0,INLAND +-121.57,39.76,20.0,1384.0,257.0,557.0,232.0,2.0882,104900.0,INLAND +-121.58,39.76,19.0,2487.0,485.0,1110.0,453.0,3.1061,110200.0,INLAND +-121.58,39.76,18.0,1676.0,332.0,733.0,318.0,1.7875,103800.0,INLAND +-121.59,39.75,20.0,908.0,206.0,481.0,211.0,2.2,80800.0,INLAND +-121.6,39.77,23.0,2263.0,497.0,1138.0,455.0,2.3403,87300.0,INLAND +-121.6,39.76,22.0,2447.0,556.0,1157.0,556.0,1.8245,85500.0,INLAND +-121.61,39.76,31.0,2431.0,512.0,1026.0,427.0,2.5428,85000.0,INLAND +-121.62,39.77,23.0,1759.0,366.0,788.0,359.0,1.8125,93500.0,INLAND +-121.65,39.76,31.0,1599.0,318.0,794.0,303.0,3.0,96700.0,INLAND +-121.63,39.76,22.0,2598.0,482.0,1151.0,490.0,2.8182,109700.0,INLAND +-121.62,39.76,14.0,2063.0,559.0,934.0,529.0,1.7788,85800.0,INLAND +-121.62,39.75,20.0,1173.0,261.0,523.0,258.0,1.0625,92800.0,INLAND +-121.63,39.75,37.0,1296.0,296.0,569.0,257.0,1.8616,70500.0,INLAND +-121.64,39.74,20.0,1808.0,334.0,763.0,335.0,2.3711,121800.0,INLAND +-121.71,39.71,17.0,2748.0,556.0,1174.0,514.0,3.066,102600.0,INLAND +-121.66,39.66,17.0,3502.0,655.0,1763.0,613.0,2.9625,101200.0,INLAND +-121.56,39.69,8.0,2836.0,522.0,1163.0,512.0,3.13,168300.0,INLAND +-121.57,39.74,17.0,1619.0,292.0,705.0,285.0,2.4623,126100.0,INLAND +-121.59,39.74,17.0,1646.0,330.0,750.0,344.0,2.3798,83800.0,INLAND +-121.6,39.75,19.0,2888.0,591.0,984.0,499.0,1.9766,92600.0,INLAND +-121.6,39.68,15.0,1677.0,345.0,844.0,330.0,2.3958,111200.0,INLAND +-121.5,39.83,15.0,1896.0,408.0,893.0,334.0,1.6948,87500.0,INLAND +-121.41,39.72,17.0,1583.0,331.0,730.0,306.0,2.3895,87500.0,INLAND +-121.39,39.61,22.0,2828.0,610.0,986.0,391.0,2.8871,94700.0,INLAND +-121.24,39.65,35.0,632.0,148.0,221.0,102.0,2.3684,62500.0,INLAND +-121.19,39.55,17.0,1483.0,284.0,481.0,211.0,1.4896,83300.0,INLAND +-121.36,39.52,15.0,2490.0,527.0,1229.0,497.0,2.3917,85700.0,INLAND +-121.56,39.52,9.0,818.0,197.0,358.0,197.0,1.7708,79500.0,INLAND +-121.56,39.52,26.0,1957.0,429.0,945.0,397.0,1.7308,53600.0,INLAND +-121.56,39.53,12.0,1733.0,421.0,1861.0,415.0,1.5771,65200.0,INLAND +-121.54,39.6,15.0,886.0,204.0,576.0,205.0,2.1467,84100.0,INLAND +-121.46,39.54,14.0,5549.0,1000.0,1822.0,919.0,2.9562,142300.0,INLAND +-121.49,39.52,25.0,848.0,153.0,436.0,155.0,3.9028,93800.0,INLAND +-121.44,39.5,26.0,1652.0,325.0,790.0,292.0,3.0446,90800.0,INLAND +-121.47,39.49,17.0,1554.0,242.0,553.0,230.0,3.2174,91800.0,INLAND +-121.47,39.51,19.0,3720.0,636.0,1304.0,607.0,2.6921,97500.0,INLAND +-121.53,39.53,35.0,1806.0,293.0,683.0,295.0,4.5156,91200.0,INLAND +-121.53,39.52,30.0,1030.0,161.0,448.0,159.0,2.4821,73800.0,INLAND +-121.53,39.52,24.0,1028.0,185.0,471.0,186.0,2.9688,86400.0,INLAND +-121.54,39.51,33.0,3585.0,757.0,1887.0,765.0,2.502,62100.0,INLAND +-121.52,39.51,30.0,3085.0,610.0,1688.0,575.0,2.334,72200.0,INLAND +-121.55,39.51,39.0,1551.0,353.0,684.0,310.0,2.0357,57600.0,INLAND +-121.55,39.51,48.0,827.0,198.0,396.0,161.0,0.8024,58300.0,INLAND +-121.55,39.51,50.0,1050.0,288.0,485.0,260.0,1.1607,51700.0,INLAND +-121.56,39.51,47.0,1064.0,245.0,603.0,190.0,1.3654,57900.0,INLAND +-121.56,39.51,46.0,1885.0,385.0,871.0,347.0,1.6352,53100.0,INLAND +-121.57,39.5,31.0,2023.0,469.0,1073.0,436.0,1.5714,56100.0,INLAND +-121.58,39.52,25.0,2409.0,490.0,1384.0,479.0,1.9956,58000.0,INLAND +-121.58,39.51,24.0,1865.0,372.0,1087.0,385.0,1.6389,56700.0,INLAND +-121.58,39.5,29.0,1947.0,383.0,925.0,337.0,2.1658,57600.0,INLAND +-121.62,39.5,18.0,2105.0,416.0,974.0,385.0,1.6346,63300.0,INLAND +-121.61,39.52,24.0,1610.0,324.0,909.0,323.0,1.8661,59800.0,INLAND +-121.65,39.53,23.0,1387.0,325.0,640.0,289.0,1.4833,65200.0,INLAND +-121.57,39.48,15.0,202.0,54.0,145.0,40.0,0.8252,42500.0,INLAND +-121.55,39.5,26.0,3215.0,827.0,2041.0,737.0,1.0585,45100.0,INLAND +-121.54,39.5,38.0,1438.0,310.0,779.0,275.0,1.3289,39400.0,INLAND +-121.53,39.49,19.0,1537.0,329.0,617.0,274.0,1.5313,50300.0,INLAND +-121.54,39.48,29.0,2896.0,596.0,1809.0,617.0,1.8047,53800.0,INLAND +-121.54,39.47,14.0,1724.0,315.0,939.0,302.0,2.4952,53900.0,INLAND +-121.55,39.48,41.0,461.0,107.0,284.0,90.0,2.2045,41800.0,INLAND +-121.49,39.49,20.0,2505.0,468.0,1174.0,429.0,2.9965,88900.0,INLAND +-121.52,39.5,33.0,1462.0,241.0,569.0,231.0,3.2833,82600.0,INLAND +-121.52,39.49,30.0,1217.0,238.0,677.0,233.0,2.6563,63600.0,INLAND +-121.52,39.48,21.0,2628.0,494.0,1364.0,468.0,2.0455,59400.0,INLAND +-121.55,39.45,18.0,2278.0,523.0,1185.0,475.0,1.3611,60600.0,INLAND +-121.53,39.44,26.0,1340.0,255.0,662.0,239.0,2.6071,57100.0,INLAND +-121.55,39.44,31.0,1434.0,283.0,811.0,289.0,1.7727,49000.0,INLAND +-121.52,39.43,15.0,2119.0,389.0,1079.0,374.0,2.3566,80400.0,INLAND +-121.46,39.4,17.0,3659.0,735.0,1970.0,667.0,2.425,96200.0,INLAND +-121.39,39.39,52.0,189.0,34.0,121.0,37.0,3.0208,60000.0,INLAND +-121.54,39.33,27.0,720.0,150.0,359.0,138.0,2.5313,61300.0,INLAND +-121.59,39.39,22.0,2515.0,482.0,1284.0,462.0,2.1776,73800.0,INLAND +-121.67,39.37,27.0,2599.0,502.0,1241.0,502.0,1.9943,86300.0,INLAND +-121.65,39.35,24.0,1003.0,251.0,1098.0,227.0,1.7552,86400.0,INLAND +-121.67,39.34,22.0,1217.0,224.0,537.0,187.0,2.6607,84600.0,INLAND +-121.65,39.32,40.0,812.0,154.0,374.0,142.0,2.7891,73500.0,INLAND +-121.69,39.36,29.0,2220.0,471.0,1170.0,428.0,2.3224,56200.0,INLAND +-121.7,39.37,32.0,1852.0,373.0,911.0,365.0,1.7885,57000.0,INLAND +-121.7,39.36,46.0,1210.0,243.0,523.0,242.0,1.91,63900.0,INLAND +-121.7,39.36,37.0,2330.0,495.0,1505.0,470.0,2.0474,56000.0,INLAND +-121.69,39.36,34.0,842.0,186.0,635.0,165.0,1.8355,63000.0,INLAND +-121.74,39.38,27.0,2596.0,435.0,1100.0,409.0,2.3243,85500.0,INLAND +-121.8,39.33,30.0,1019.0,192.0,501.0,185.0,2.5259,81300.0,INLAND +-121.71,39.42,21.0,1432.0,284.0,862.0,275.0,2.2813,57600.0,INLAND +-121.71,39.41,22.0,1814.0,342.0,941.0,323.0,2.1728,59400.0,INLAND +-121.75,39.4,29.0,1687.0,327.0,864.0,334.0,2.4943,81900.0,INLAND +-121.79,39.48,39.0,1105.0,180.0,408.0,166.0,3.3929,82100.0,INLAND +-120.46,38.15,16.0,4221.0,781.0,1516.0,697.0,2.3816,116000.0,INLAND +-120.55,38.12,10.0,1566.0,325.0,785.0,291.0,2.5,116100.0,INLAND +-120.56,38.09,34.0,2745.0,559.0,1150.0,491.0,2.3654,94900.0,INLAND +-120.55,38.07,27.0,1199.0,224.0,463.0,199.0,2.9063,92200.0,INLAND +-120.54,38.07,37.0,736.0,148.0,339.0,140.0,2.2875,79900.0,INLAND +-120.67,37.97,9.0,7450.0,1475.0,2233.0,930.0,2.6528,133000.0,INLAND +-120.46,38.09,16.0,3758.0,715.0,1777.0,615.0,3.0,122600.0,INLAND +-120.79,38.24,19.0,1003.0,235.0,538.0,190.0,2.9821,90400.0,INLAND +-120.9,38.2,16.0,3120.0,641.0,1319.0,526.0,2.0472,93200.0,INLAND +-120.88,38.16,8.0,2029.0,387.0,1000.0,364.0,4.0109,125900.0,INLAND +-120.91,38.11,9.0,3585.0,680.0,1800.0,598.0,3.636,133100.0,INLAND +-120.76,38.12,7.0,7188.0,1288.0,3175.0,1115.0,3.8488,130600.0,INLAND +-120.65,38.28,21.0,3095.0,681.0,1341.0,546.0,2.1382,104000.0,INLAND +-120.72,38.24,32.0,2685.0,543.0,1061.0,492.0,2.5473,101600.0,INLAND +-120.67,38.19,17.0,2967.0,611.0,1387.0,564.0,2.0417,92600.0,INLAND +-120.57,38.2,13.0,4110.0,847.0,1796.0,706.0,2.6417,122300.0,INLAND +-120.43,38.25,13.0,763.0,161.0,311.0,125.0,2.4583,112500.0,INLAND +-120.56,38.39,20.0,1326.0,307.0,563.0,237.0,2.6667,86600.0,INLAND +-120.54,38.41,21.0,1435.0,294.0,668.0,267.0,2.5667,77400.0,INLAND +-120.42,38.42,18.0,2912.0,663.0,999.0,411.0,2.7344,91900.0,INLAND +-120.41,38.33,17.0,1463.0,338.0,529.0,226.0,3.024,100900.0,INLAND +-120.55,38.31,18.0,1411.0,312.0,592.0,230.0,1.625,94700.0,INLAND +-120.57,38.35,17.0,1504.0,358.0,661.0,250.0,2.2604,84800.0,INLAND +-120.36,38.21,10.0,4300.0,845.0,1480.0,609.0,2.8208,139900.0,INLAND +-120.34,38.23,10.0,3757.0,722.0,546.0,223.0,3.75,121400.0,INLAND +-120.33,38.26,13.0,2962.0,546.0,252.0,103.0,4.4063,155800.0,INLAND +-120.34,38.25,17.0,5497.0,1056.0,997.0,408.0,2.9821,111500.0,INLAND +-120.37,38.23,13.0,4401.0,829.0,924.0,383.0,2.6942,123500.0,INLAND +-120.37,38.25,13.0,4495.0,856.0,1149.0,459.0,2.5352,113700.0,INLAND +-120.27,38.29,10.0,3486.0,695.0,298.0,124.0,3.3542,103800.0,INLAND +-120.27,38.31,13.0,3297.0,662.0,267.0,97.0,3.075,108300.0,INLAND +-120.19,38.42,11.0,1568.0,369.0,82.0,33.0,3.125,77500.0,INLAND +-121.91,39.03,48.0,1096.0,218.0,657.0,199.0,2.7841,65800.0,INLAND +-122.0,38.99,39.0,1548.0,323.0,815.0,286.0,2.9489,67500.0,INLAND +-122.13,39.0,23.0,3832.0,774.0,2435.0,747.0,2.2754,59200.0,INLAND +-121.99,39.15,17.0,6440.0,1204.0,3266.0,1142.0,2.7137,72000.0,INLAND +-122.04,39.22,27.0,1446.0,295.0,670.0,281.0,3.2625,92800.0,INLAND +-122.08,39.25,52.0,224.0,38.0,120.0,45.0,3.017,112500.0,INLAND +-122.33,39.1,10.0,266.0,62.0,154.0,49.0,2.25,75000.0,INLAND +-122.2,39.15,33.0,1064.0,174.0,434.0,147.0,3.125,108000.0,INLAND +-122.09,39.13,28.0,4169.0,895.0,2587.0,810.0,2.331,65500.0,INLAND +-122.05,39.34,44.0,1064.0,230.0,494.0,175.0,2.875,61500.0,INLAND +-122.17,39.31,35.0,2791.0,552.0,1395.0,476.0,2.5625,62700.0,INLAND +-122.51,39.3,19.0,1629.0,386.0,551.0,214.0,1.7463,68800.0,INLAND +-122.01,39.21,50.0,1592.0,372.0,781.0,307.0,2.2679,69100.0,INLAND +-122.01,39.21,52.0,1989.0,392.0,985.0,396.0,2.5556,75800.0,INLAND +-122.01,39.21,39.0,1214.0,250.0,660.0,249.0,2.4559,75000.0,INLAND +-121.96,39.3,39.0,701.0,130.0,271.0,89.0,2.1845,112500.0,INLAND +-121.65,38.03,28.0,3144.0,694.0,1095.0,482.0,3.4402,192400.0,INLAND +-121.63,38.03,17.0,2549.0,596.0,1169.0,500.0,3.6694,209400.0,INLAND +-121.63,38.04,25.0,2019.0,411.0,888.0,326.0,3.2619,183800.0,INLAND +-121.73,38.0,3.0,9217.0,1522.0,3578.0,1272.0,5.0016,189100.0,INLAND +-121.72,38.0,7.0,7957.0,1314.0,4460.0,1293.0,4.9618,156500.0,INLAND +-121.72,37.98,5.0,7105.0,1143.0,3523.0,1088.0,5.0468,168800.0,INLAND +-121.68,37.98,19.0,3388.0,599.0,1707.0,575.0,3.6411,162800.0,INLAND +-121.7,37.98,9.0,3079.0,519.0,1562.0,512.0,5.1041,172900.0,INLAND +-121.71,37.99,27.0,3861.0,718.0,2085.0,707.0,3.3558,129700.0,INLAND +-121.67,37.99,22.0,1046.0,195.0,527.0,164.0,4.375,213500.0,INLAND +-121.68,37.93,44.0,1014.0,225.0,704.0,238.0,1.6554,119400.0,INLAND +-121.7,37.94,36.0,1710.0,320.0,861.0,300.0,2.8828,131100.0,INLAND +-121.69,37.95,15.0,1850.0,441.0,1348.0,403.0,3.8125,125400.0,INLAND +-121.7,37.96,33.0,2396.0,452.0,1391.0,465.0,3.2813,151400.0,INLAND +-121.66,37.93,19.0,2055.0,358.0,1064.0,350.0,4.7426,263100.0,INLAND +-121.7,37.91,17.0,1962.0,291.0,825.0,267.0,4.8958,187100.0,INLAND +-121.7,37.93,19.0,2005.0,405.0,972.0,403.0,2.2216,156700.0,INLAND +-121.74,37.95,5.0,4980.0,774.0,2399.0,763.0,5.7104,186300.0,INLAND +-121.7,37.93,10.0,3258.0,612.0,1779.0,558.0,4.6587,152500.0,INLAND +-121.6,37.91,13.0,2479.0,394.0,1075.0,350.0,5.1017,241400.0,INLAND +-121.6,37.9,5.0,14684.0,2252.0,4276.0,1722.0,6.9051,340900.0,INLAND +-121.61,37.86,30.0,1428.0,287.0,989.0,287.0,3.691,154400.0,INLAND +-121.64,37.85,22.0,1999.0,415.0,967.0,320.0,4.4583,253900.0,INLAND +-121.8,38.01,46.0,2273.0,495.0,1088.0,447.0,2.2532,109400.0,INLAND +-121.81,38.01,47.0,1942.0,430.0,1074.0,393.0,2.2361,105100.0,INLAND +-121.81,38.01,52.0,1124.0,245.0,528.0,226.0,2.2639,128500.0,INLAND +-121.82,38.02,46.0,176.0,43.0,101.0,40.0,2.2361,93800.0,INLAND +-121.82,38.01,42.0,1017.0,253.0,798.0,266.0,2.1719,99100.0,INLAND +-121.82,38.01,50.0,1120.0,281.0,625.0,239.0,1.5988,96400.0,INLAND +-121.82,38.01,25.0,3018.0,606.0,1614.0,568.0,3.4722,127000.0,INLAND +-121.84,38.02,46.0,66.0,22.0,37.0,21.0,0.536,87500.0,INLAND +-121.78,38.01,19.0,2688.0,469.0,1216.0,422.0,4.4491,133900.0,INLAND +-121.79,38.01,17.0,4032.0,814.0,1749.0,618.0,3.1728,146800.0,INLAND +-121.79,38.0,34.0,3090.0,593.0,1588.0,566.0,3.6118,124700.0,INLAND +-121.8,38.01,44.0,3184.0,581.0,1399.0,548.0,2.7234,110200.0,INLAND +-121.8,38.01,37.0,3058.0,567.0,1351.0,523.0,3.5179,130800.0,INLAND +-121.78,38.0,8.0,2371.0,375.0,1094.0,396.0,5.3245,174500.0,INLAND +-121.77,38.01,13.0,2983.0,534.0,1417.0,510.0,3.9861,168100.0,INLAND +-121.81,37.99,18.0,2807.0,445.0,1315.0,437.0,4.8194,170400.0,INLAND +-121.81,37.99,22.0,2331.0,359.0,1086.0,340.0,5.1435,150800.0,INLAND +-121.82,37.98,13.0,3995.0,605.0,1969.0,607.0,5.0164,165200.0,INLAND +-121.82,38.01,47.0,1265.0,254.0,587.0,247.0,2.6364,93500.0,INLAND +-121.82,38.0,29.0,2070.0,452.0,985.0,420.0,2.8466,113400.0,INLAND +-121.81,38.0,37.0,2724.0,579.0,1400.0,540.0,2.905,97300.0,INLAND +-121.82,38.0,30.0,3268.0,567.0,1714.0,565.0,4.4583,131000.0,INLAND +-121.85,38.0,26.0,3364.0,570.0,1806.0,566.0,4.2647,133400.0,INLAND +-121.85,38.0,24.0,2269.0,584.0,1239.0,542.0,2.0411,100000.0,INLAND +-121.83,38.0,15.0,6365.0,1646.0,3838.0,1458.0,2.5495,103600.0,INLAND +-121.83,38.0,25.0,1710.0,288.0,799.0,259.0,4.8359,145300.0,INLAND +-121.83,37.99,23.0,1150.0,174.0,572.0,174.0,4.9167,152400.0,INLAND +-121.83,37.99,23.0,1970.0,296.0,935.0,279.0,4.4853,145900.0,INLAND +-121.83,37.99,18.0,2741.0,449.0,1507.0,460.0,4.7566,142500.0,INLAND +-121.83,38.0,8.0,2572.0,738.0,1384.0,684.0,1.7161,75800.0,INLAND +-121.84,37.99,13.0,4545.0,952.0,2188.0,901.0,3.3625,126100.0,INLAND +-121.84,37.99,15.0,2380.0,385.0,1292.0,388.0,4.6029,142600.0,INLAND +-121.83,37.99,16.0,2919.0,462.0,1456.0,453.0,5.6779,164700.0,INLAND +-121.79,38.0,36.0,1141.0,234.0,562.0,213.0,2.5893,108500.0,INLAND +-121.79,37.99,10.0,4156.0,609.0,1878.0,586.0,5.6506,178600.0,INLAND +-121.79,37.99,18.0,3646.0,534.0,1651.0,535.0,5.7321,164700.0,INLAND +-121.8,38.0,34.0,2738.0,475.0,1316.0,459.0,3.5368,122500.0,INLAND +-121.8,37.99,16.0,3077.0,465.0,1575.0,446.0,5.5,179500.0,INLAND +-121.77,37.99,4.0,5623.0,780.0,2429.0,716.0,5.4409,205100.0,INLAND +-121.88,38.03,10.0,2769.0,619.0,1045.0,469.0,4.1111,158600.0,INLAND +-121.9,38.04,36.0,1489.0,331.0,838.0,259.0,1.2024,90200.0,INLAND +-121.86,38.04,52.0,242.0,59.0,188.0,54.0,1.3958,67500.0,INLAND +-121.87,38.02,52.0,2264.0,439.0,1403.0,476.0,2.7083,99400.0,INLAND +-121.88,38.03,52.0,1225.0,250.0,725.0,231.0,2.0,101400.0,INLAND +-121.9,38.03,51.0,2982.0,689.0,1831.0,608.0,2.0034,87700.0,INLAND +-121.88,38.02,46.0,2112.0,466.0,1249.0,382.0,2.5737,87000.0,INLAND +-121.89,38.02,36.0,2707.0,550.0,1827.0,545.0,3.3371,94600.0,INLAND +-121.9,38.02,5.0,1560.0,369.0,1037.0,372.0,3.6154,181800.0,INLAND +-121.87,38.02,31.0,3644.0,746.0,2229.0,678.0,3.1389,117800.0,INLAND +-121.88,38.0,16.0,2605.0,440.0,1352.0,408.0,4.1947,140300.0,INLAND +-121.88,38.01,9.0,5329.0,1284.0,2827.0,1202.0,2.7374,150000.0,INLAND +-121.89,38.01,30.0,4114.0,743.0,1994.0,722.0,4.2227,134400.0,INLAND +-121.88,38.0,22.0,721.0,117.0,367.0,129.0,5.3098,151900.0,INLAND +-121.86,38.0,4.0,4075.0,927.0,2239.0,849.0,3.5857,165200.0,INLAND +-121.86,38.0,16.0,3216.0,464.0,1504.0,453.0,5.25,161700.0,INLAND +-121.89,37.99,4.0,2171.0,597.0,928.0,461.0,4.1016,170500.0,INLAND +-121.88,37.99,16.0,3787.0,515.0,1606.0,507.0,5.5676,174200.0,INLAND +-121.87,38.0,17.0,2713.0,442.0,1475.0,415.0,4.8542,144100.0,INLAND +-121.87,37.99,15.0,2203.0,312.0,1051.0,311.0,4.9783,163900.0,INLAND +-121.89,38.01,28.0,3639.0,751.0,2362.0,641.0,3.0042,103900.0,INLAND +-121.9,38.02,12.0,1497.0,360.0,943.0,341.0,2.1417,122200.0,INLAND +-121.9,38.01,16.0,2604.0,454.0,1696.0,481.0,4.6628,136000.0,INLAND +-121.92,38.02,8.0,2750.0,479.0,1526.0,484.0,5.102,156500.0,INLAND +-121.89,38.01,32.0,1000.0,188.0,663.0,212.0,4.0972,99200.0,INLAND +-121.9,38.01,34.0,3779.0,766.0,2356.0,722.0,3.5129,110600.0,INLAND +-121.9,38.0,14.0,1930.0,363.0,990.0,322.0,4.1094,162200.0,INLAND +-121.9,38.0,14.0,2677.0,368.0,1288.0,375.0,6.0497,177500.0,INLAND +-121.92,38.01,7.0,1632.0,248.0,879.0,262.0,6.1237,166000.0,INLAND +-121.93,38.01,9.0,2294.0,389.0,1142.0,365.0,5.3363,160800.0,INLAND +-121.93,38.02,13.0,1524.0,286.0,940.0,308.0,5.1337,154800.0,INLAND +-121.95,38.03,5.0,5526.0,,3207.0,1012.0,4.0767,143100.0,INLAND +-121.94,38.03,27.0,1654.0,478.0,1141.0,420.0,1.4871,87100.0,INLAND +-121.96,38.02,35.0,2691.0,542.0,1409.0,505.0,3.016,95300.0,INLAND +-121.95,38.02,9.0,3360.0,833.0,2041.0,810.0,2.1013,100700.0,INLAND +-121.94,38.02,29.0,5765.0,1170.0,3266.0,1131.0,2.7907,113900.0,INLAND +-121.92,38.03,16.0,2176.0,464.0,1410.0,434.0,3.5436,100200.0,INLAND +-121.92,38.02,16.0,1840.0,355.0,1288.0,338.0,4.2067,125000.0,INLAND +-121.91,38.02,15.0,2966.0,558.0,1687.0,527.0,3.4817,129800.0,INLAND +-121.97,38.04,38.0,2505.0,554.0,1595.0,498.0,2.5833,83500.0,INLAND +-121.97,38.03,17.0,3685.0,685.0,1939.0,649.0,3.7043,139800.0,INLAND +-121.98,38.05,31.0,2810.0,518.0,1640.0,503.0,3.3661,98500.0,INLAND +-122.02,38.02,44.0,1465.0,247.0,817.0,237.0,4.8693,156900.0,NEAR BAY +-122.0,38.03,4.0,2341.0,408.0,1235.0,431.0,6.0424,165900.0,INLAND +-122.14,38.02,44.0,1625.0,432.0,825.0,385.0,2.0523,133900.0,NEAR BAY +-122.14,38.03,42.0,118.0,34.0,54.0,30.0,2.5795,225000.0,NEAR BAY +-122.13,38.02,52.0,2378.0,508.0,940.0,451.0,2.9583,166000.0,NEAR BAY +-122.13,38.01,48.0,2123.0,494.0,859.0,474.0,1.8523,144800.0,NEAR BAY +-122.14,38.01,50.0,1760.0,341.0,741.0,316.0,4.5,178300.0,NEAR BAY +-122.13,38.01,51.0,1262.0,309.0,608.0,298.0,2.1974,139300.0,NEAR BAY +-122.13,38.0,33.0,2821.0,652.0,1206.0,640.0,2.5481,150800.0,NEAR BAY +-122.16,38.02,40.0,1800.0,290.0,761.0,277.0,5.1265,196100.0,NEAR BAY +-122.11,38.01,39.0,1313.0,306.0,575.0,231.0,3.1711,116100.0,NEAR BAY +-122.11,38.01,41.0,1345.0,272.0,718.0,283.0,3.3831,129400.0,NEAR BAY +-122.12,38.0,20.0,6992.0,1404.0,3221.0,1334.0,4.2042,166400.0,NEAR BAY +-122.12,38.01,50.0,1300.0,263.0,691.0,239.0,3.9519,126500.0,NEAR BAY +-122.12,38.01,50.0,1738.0,355.0,837.0,363.0,3.609,135700.0,NEAR BAY +-122.12,38.01,42.0,2225.0,367.0,864.0,381.0,4.1189,172400.0,NEAR BAY +-122.09,38.02,37.0,1742.0,339.0,1128.0,345.0,3.8824,113700.0,NEAR BAY +-122.1,38.02,28.0,4308.0,824.0,2086.0,776.0,3.6523,159700.0,NEAR BAY +-122.07,38.0,37.0,978.0,202.0,462.0,184.0,3.625,156300.0,NEAR BAY +-122.09,38.0,6.0,10191.0,1882.0,4377.0,1789.0,5.2015,204200.0,NEAR BAY +-122.11,38.0,9.0,3424.0,583.0,1460.0,543.0,5.76,212600.0,NEAR BAY +-122.08,37.99,19.0,4657.0,739.0,1914.0,732.0,5.0509,199900.0,NEAR BAY +-122.09,37.99,19.0,3073.0,506.0,1773.0,493.0,5.4496,205400.0,NEAR BAY +-122.11,37.99,16.0,3913.0,710.0,1782.0,676.0,5.1297,206700.0,NEAR BAY +-122.11,37.99,10.0,2864.0,514.0,1300.0,507.0,4.3875,287700.0,NEAR BAY +-122.08,37.97,9.0,2643.0,439.0,1105.0,467.0,6.6579,245200.0,NEAR BAY +-122.09,37.97,5.0,5303.0,779.0,2017.0,727.0,6.9961,294100.0,NEAR BAY +-122.11,37.98,11.0,4371.0,679.0,1790.0,660.0,6.135,297300.0,NEAR BAY +-122.09,37.98,14.0,5381.0,871.0,2296.0,872.0,5.6875,211000.0,NEAR BAY +-122.12,37.99,33.0,1660.0,277.0,741.0,261.0,4.675,225400.0,NEAR BAY +-122.1,37.97,18.0,4326.0,655.0,1753.0,646.0,5.6931,269600.0,NEAR BAY +-122.1,37.96,20.0,3796.0,650.0,1679.0,611.0,4.3571,228200.0,NEAR BAY +-122.1,37.96,25.0,1374.0,206.0,569.0,235.0,6.3699,235500.0,NEAR BAY +-122.07,37.99,28.0,3310.0,574.0,1811.0,597.0,4.5401,166900.0,NEAR BAY +-122.07,37.98,12.0,6915.0,1639.0,2940.0,1468.0,4.0154,186100.0,NEAR BAY +-122.07,37.97,20.0,1705.0,353.0,856.0,341.0,3.7262,211800.0,NEAR BAY +-122.07,37.96,34.0,1692.0,290.0,836.0,289.0,5.0172,197100.0,NEAR BAY +-122.06,37.96,37.0,1784.0,313.0,788.0,304.0,4.2917,189600.0,NEAR BAY +-122.08,37.96,21.0,9135.0,1534.0,3748.0,1502.0,6.0859,266000.0,NEAR BAY +-122.06,37.95,36.0,2213.0,386.0,950.0,370.0,4.7386,186400.0,NEAR BAY +-122.07,37.95,39.0,2199.0,388.0,1025.0,385.0,4.5893,190000.0,NEAR BAY +-122.08,37.95,24.0,3173.0,548.0,1351.0,536.0,5.0672,243000.0,NEAR BAY +-122.08,37.95,33.0,1043.0,157.0,425.0,148.0,4.8702,235600.0,NEAR BAY +-122.07,37.96,37.0,1217.0,199.0,552.0,194.0,5.0445,196200.0,NEAR BAY +-122.06,37.96,10.0,7136.0,1691.0,2959.0,1507.0,3.9816,182000.0,NEAR BAY +-122.05,37.95,34.0,1408.0,277.0,738.0,269.0,4.175,169400.0,NEAR BAY +-122.05,37.94,22.0,4162.0,1194.0,1804.0,1185.0,2.5459,179300.0,NEAR BAY +-122.06,37.94,19.0,4005.0,972.0,1896.0,893.0,2.5268,235700.0,NEAR BAY +-122.07,37.94,36.0,2639.0,488.0,1111.0,476.0,3.5057,205100.0,NEAR BAY +-122.07,37.94,30.0,1260.0,276.0,707.0,221.0,2.892,220800.0,NEAR BAY +-122.08,37.93,35.0,4043.0,689.0,1832.0,662.0,5.0761,233200.0,NEAR BAY +-122.08,37.94,44.0,2185.0,357.0,943.0,366.0,4.725,232100.0,NEAR BAY +-122.07,37.94,43.0,1454.0,234.0,683.0,258.0,4.475,265700.0,NEAR BAY +-122.09,37.95,32.0,1339.0,209.0,601.0,209.0,6.0265,247900.0,NEAR BAY +-122.09,37.94,29.0,6895.0,1022.0,2634.0,1022.0,6.1922,273200.0,NEAR BAY +-122.04,38.0,16.0,3077.0,733.0,1447.0,709.0,3.2484,91100.0,NEAR BAY +-122.04,37.99,32.0,1504.0,279.0,749.0,267.0,3.2,134500.0,NEAR BAY +-122.04,37.99,36.0,2765.0,495.0,1478.0,441.0,4.125,136200.0,NEAR BAY +-122.05,37.97,16.0,60.0,10.0,65.0,19.0,6.1359,250000.0,NEAR BAY +-122.06,37.99,16.0,2445.0,469.0,721.0,474.0,2.8043,87500.0,NEAR BAY +-122.06,37.99,17.0,1319.0,316.0,384.0,269.0,1.8229,137500.0,NEAR BAY +-122.05,38.0,36.0,2476.0,472.0,1213.0,393.0,3.7333,136400.0,NEAR BAY +-122.05,38.0,16.0,1085.0,217.0,356.0,232.0,2.3462,75000.0,NEAR BAY +-122.03,37.98,16.0,1209.0,477.0,627.0,482.0,1.3894,156300.0,NEAR BAY +-122.04,37.97,10.0,974.0,316.0,631.0,286.0,2.3152,140600.0,NEAR BAY +-122.03,38.0,25.0,3577.0,581.0,1753.0,593.0,5.7295,178300.0,NEAR BAY +-122.03,38.01,27.0,3228.0,562.0,1666.0,588.0,4.5707,175900.0,NEAR BAY +-122.04,37.99,38.0,2675.0,541.0,1378.0,480.0,3.8897,139900.0,NEAR BAY +-122.03,37.98,45.0,2842.0,567.0,1261.0,535.0,3.6042,138200.0,NEAR BAY +-122.02,38.0,28.0,2965.0,533.0,1591.0,472.0,4.6375,178200.0,NEAR BAY +-122.03,37.99,35.0,3103.0,537.0,1614.0,566.0,4.9022,169300.0,NEAR BAY +-122.02,37.99,37.0,2247.0,416.0,1237.0,397.0,4.45,161900.0,NEAR BAY +-122.03,37.99,37.0,1755.0,327.0,882.0,350.0,4.59,166600.0,NEAR BAY +-122.03,37.98,44.0,1254.0,252.0,498.0,217.0,3.4531,148900.0,NEAR BAY +-122.01,37.98,25.0,1476.0,336.0,777.0,297.0,3.5179,165500.0,NEAR BAY +-122.01,37.98,29.0,2001.0,373.0,956.0,370.0,4.317,194000.0,NEAR BAY +-122.0,37.98,32.0,1013.0,169.0,436.0,173.0,5.1118,226900.0,INLAND +-122.0,37.97,27.0,2491.0,428.0,1171.0,431.0,5.1021,202800.0,INLAND +-122.01,37.97,32.0,3012.0,527.0,1288.0,512.0,3.6449,211500.0,NEAR BAY +-122.02,37.98,40.0,1797.0,401.0,756.0,369.0,2.8456,165500.0,NEAR BAY +-122.02,37.98,37.0,1474.0,343.0,782.0,331.0,3.4187,161700.0,NEAR BAY +-122.0,37.99,28.0,4035.0,641.0,1881.0,659.0,5.4607,192300.0,INLAND +-122.0,37.98,31.0,2030.0,337.0,867.0,341.0,5.0915,193200.0,INLAND +-121.99,37.98,23.0,2293.0,411.0,969.0,399.0,4.4536,184000.0,INLAND +-121.99,37.97,28.0,2839.0,428.0,1372.0,443.0,6.2135,217200.0,INLAND +-122.0,37.98,35.0,1192.0,201.0,535.0,172.0,4.9219,182000.0,INLAND +-122.0,37.98,36.0,404.0,77.0,237.0,88.0,4.525,161300.0,INLAND +-122.01,37.98,34.0,1256.0,267.0,638.0,252.0,4.0507,161000.0,NEAR BAY +-122.01,37.99,28.0,1900.0,401.0,918.0,351.0,3.7841,144900.0,NEAR BAY +-121.95,37.96,18.0,2739.0,393.0,1072.0,374.0,6.1436,259500.0,INLAND +-121.97,37.97,27.0,1691.0,289.0,807.0,296.0,6.1168,210500.0,INLAND +-121.97,37.97,24.0,1330.0,183.0,656.0,205.0,5.0092,244100.0,INLAND +-121.97,37.96,28.0,1433.0,290.0,877.0,313.0,4.7891,184800.0,INLAND +-121.96,37.96,28.0,1838.0,273.0,899.0,270.0,5.2145,229200.0,INLAND +-121.96,37.95,7.0,3418.0,740.0,1583.0,676.0,3.6133,196100.0,INLAND +-121.98,37.96,22.0,2987.0,,1420.0,540.0,3.65,204100.0,INLAND +-121.97,37.97,26.0,1977.0,264.0,817.0,273.0,5.7512,240200.0,INLAND +-121.98,37.97,26.0,2714.0,390.0,1232.0,409.0,5.9617,231100.0,INLAND +-121.98,37.97,26.0,2738.0,428.0,1316.0,430.0,5.2442,213200.0,INLAND +-121.99,37.97,22.0,2823.0,509.0,1271.0,474.0,5.1333,207200.0,INLAND +-121.99,37.97,30.0,3320.0,589.0,1470.0,543.0,4.6071,184100.0,INLAND +-122.0,37.96,32.0,3364.0,666.0,1980.0,678.0,3.7,179000.0,INLAND +-122.0,37.96,28.0,4071.0,713.0,2033.0,647.0,4.5833,190700.0,INLAND +-121.96,37.95,13.0,3216.0,765.0,1627.0,715.0,3.0859,167800.0,INLAND +-121.97,37.95,8.0,4253.0,709.0,1883.0,662.0,5.431,246700.0,INLAND +-121.98,37.96,12.0,5048.0,1122.0,2209.0,1014.0,3.1573,126700.0,INLAND +-121.99,37.96,16.0,3324.0,479.0,1470.0,461.0,7.6166,260400.0,INLAND +-121.99,37.96,17.0,2756.0,423.0,1228.0,426.0,5.5872,200600.0,INLAND +-121.98,37.95,14.0,6290.0,854.0,2724.0,820.0,6.7371,267400.0,INLAND +-121.98,37.95,16.0,2984.0,406.0,1317.0,397.0,6.7821,265900.0,INLAND +-122.01,37.97,34.0,3259.0,498.0,1250.0,478.0,5.3794,206200.0,NEAR BAY +-122.02,37.97,36.0,2342.0,436.0,1191.0,416.0,4.0,171000.0,NEAR BAY +-122.03,37.97,45.0,1613.0,338.0,865.0,336.0,3.25,151100.0,NEAR BAY +-122.04,37.97,26.0,2470.0,626.0,1174.0,573.0,2.9861,160900.0,NEAR BAY +-122.03,37.97,20.0,3968.0,931.0,2629.0,903.0,2.9915,166700.0,NEAR BAY +-122.04,37.96,16.0,2913.0,723.0,1705.0,693.0,2.9097,106300.0,NEAR BAY +-122.04,37.97,21.0,6445.0,1839.0,3621.0,1735.0,2.5841,112500.0,NEAR BAY +-122.04,37.97,39.0,1323.0,245.0,705.0,261.0,3.1968,151000.0,NEAR BAY +-122.04,37.96,20.0,1143.0,346.0,578.0,298.0,2.2411,151800.0,NEAR BAY +-122.05,37.96,35.0,2190.0,384.0,1154.0,401.0,3.8456,159800.0,NEAR BAY +-122.04,37.96,28.0,1207.0,252.0,724.0,252.0,3.6964,165700.0,NEAR BAY +-122.04,37.96,27.0,2587.0,729.0,1500.0,623.0,1.837,175000.0,NEAR BAY +-122.05,37.95,27.0,3513.0,791.0,1875.0,694.0,3.1838,182000.0,NEAR BAY +-122.05,37.95,20.0,563.0,107.0,246.0,123.0,5.4482,190800.0,NEAR BAY +-122.01,37.95,8.0,3866.0,539.0,1555.0,513.0,6.0901,298200.0,NEAR BAY +-122.02,37.96,25.0,2615.0,368.0,935.0,366.0,6.6727,305100.0,NEAR BAY +-122.03,37.96,20.0,2636.0,691.0,1142.0,627.0,2.1083,162500.0,NEAR BAY +-122.03,37.95,14.0,3287.0,793.0,1601.0,716.0,3.1719,220500.0,NEAR BAY +-122.02,37.95,25.0,1205.0,260.0,608.0,272.0,2.4519,208300.0,NEAR BAY +-122.03,37.95,32.0,1955.0,313.0,804.0,317.0,4.9485,202300.0,NEAR BAY +-122.02,37.95,22.0,3526.0,510.0,1660.0,508.0,5.6642,237000.0,NEAR BAY +-122.02,37.94,23.0,3516.0,661.0,1465.0,623.0,4.2569,213100.0,NEAR BAY +-122.01,37.94,23.0,3741.0,,1339.0,499.0,6.7061,322300.0,NEAR BAY +-122.02,37.94,19.0,3192.0,612.0,1317.0,594.0,4.125,267100.0,NEAR BAY +-122.01,37.94,26.0,1619.0,224.0,706.0,220.0,6.0704,268000.0,NEAR BAY +-122.01,37.94,18.0,2077.0,298.0,937.0,292.0,6.3809,273600.0,NEAR BAY +-122.0,37.95,9.0,2214.0,256.0,848.0,239.0,6.8145,339200.0,INLAND +-122.01,37.93,25.0,2652.0,335.0,1062.0,334.0,7.5898,330200.0,NEAR BAY +-122.04,37.95,33.0,1653.0,334.0,814.0,328.0,3.1406,163100.0,NEAR BAY +-122.04,37.94,24.0,5732.0,873.0,2444.0,888.0,5.6292,231400.0,NEAR BAY +-122.05,37.94,22.0,2105.0,354.0,993.0,365.0,4.6602,227800.0,NEAR BAY +-122.04,37.95,29.0,866.0,138.0,341.0,133.0,4.7188,197100.0,NEAR BAY +-122.05,37.95,22.0,5175.0,1213.0,2804.0,1091.0,2.85,144600.0,NEAR BAY +-122.03,37.94,21.0,5541.0,776.0,2214.0,737.0,5.5777,279300.0,NEAR BAY +-122.03,37.93,21.0,4712.0,624.0,1773.0,615.0,6.0918,344800.0,NEAR BAY +-122.05,37.93,5.0,4274.0,1153.0,1503.0,881.0,4.0473,266500.0,NEAR BAY +-122.05,37.93,15.0,7803.0,1603.0,2957.0,1546.0,4.45,184900.0,NEAR BAY +-122.05,37.92,14.0,12713.0,2558.0,4741.0,2412.0,4.7094,234700.0,NEAR BAY +-122.02,37.92,26.0,5077.0,640.0,1872.0,636.0,7.4713,351200.0,NEAR BAY +-122.03,37.92,23.0,3318.0,408.0,1124.0,393.0,6.5847,358800.0,NEAR BAY +-122.01,37.91,21.0,10093.0,1269.0,3645.0,1219.0,7.6877,367700.0,NEAR BAY +-122.03,37.91,29.0,5438.0,871.0,2310.0,890.0,5.0362,275300.0,NEAR BAY +-122.06,37.91,15.0,5393.0,1422.0,2133.0,1288.0,4.1612,232800.0,NEAR BAY +-122.06,37.9,25.0,5869.0,1685.0,2669.0,1554.0,2.6998,216100.0,NEAR BAY +-122.06,37.89,21.0,4985.0,1590.0,2575.0,1458.0,3.1002,114300.0,NEAR BAY +-122.07,37.93,45.0,1544.0,244.0,614.0,238.0,5.0255,226000.0,NEAR BAY +-122.07,37.93,25.0,7201.0,1521.0,3264.0,1433.0,3.7433,252100.0,NEAR BAY +-122.07,37.92,26.0,3872.0,739.0,1629.0,684.0,4.4312,225000.0,NEAR BAY +-122.08,37.92,28.0,2377.0,469.0,1068.0,435.0,4.4561,250000.0,NEAR BAY +-122.08,37.92,26.0,1733.0,265.0,796.0,274.0,6.195,264900.0,NEAR BAY +-122.07,37.91,28.0,1731.0,295.0,810.0,295.0,5.0391,259800.0,NEAR BAY +-122.07,37.91,33.0,1550.0,277.0,638.0,254.0,3.6833,292500.0,NEAR BAY +-122.08,37.9,32.0,1075.0,170.0,486.0,173.0,5.0499,306800.0,NEAR BAY +-122.09,37.91,18.0,9576.0,1455.0,3486.0,1380.0,7.0895,306900.0,NEAR BAY +-122.07,37.89,28.0,3410.0,746.0,1428.0,670.0,4.3864,266800.0,NEAR BAY +-122.08,37.89,39.0,3018.0,501.0,1223.0,489.0,6.2924,283900.0,NEAR BAY +-122.08,37.9,29.0,4133.0,770.0,1691.0,744.0,5.1097,288000.0,NEAR BAY +-122.07,37.89,38.0,2139.0,343.0,809.0,340.0,5.5636,268800.0,NEAR BAY +-122.07,37.89,38.0,757.0,124.0,319.0,123.0,5.6558,263300.0,NEAR BAY +-122.06,37.88,34.0,4781.0,703.0,1879.0,714.0,6.5378,340900.0,NEAR BAY +-122.05,37.87,30.0,2296.0,329.0,847.0,322.0,6.7192,397500.0,NEAR BAY +-122.05,37.9,24.0,4125.0,1020.0,1699.0,873.0,2.9526,271000.0,NEAR BAY +-122.05,37.9,32.0,2676.0,484.0,986.0,473.0,4.6528,335700.0,NEAR BAY +-122.05,37.89,37.0,1677.0,269.0,689.0,283.0,4.2625,310600.0,NEAR BAY +-122.04,37.89,33.0,2423.0,322.0,998.0,346.0,7.5349,349100.0,NEAR BAY +-122.05,37.9,32.0,4498.0,862.0,1818.0,851.0,4.8088,321200.0,NEAR BAY +-122.04,37.9,20.0,5467.0,1044.0,2310.0,963.0,5.6986,275800.0,NEAR BAY +-122.02,37.89,29.0,6349.0,858.0,2450.0,778.0,7.5,356200.0,NEAR BAY +-122.04,37.88,32.0,3250.0,550.0,1230.0,557.0,4.6424,312700.0,NEAR BAY +-122.03,37.86,29.0,3025.0,477.0,1035.0,452.0,6.112,390600.0,NEAR BAY +-122.04,37.85,27.0,6039.0,780.0,2181.0,761.0,9.5862,469400.0,NEAR BAY +-121.94,37.73,22.0,1980.0,291.0,861.0,290.0,6.2726,258200.0,<1H OCEAN +-121.94,37.73,22.0,6719.0,1068.0,2843.0,994.0,6.1265,260300.0,<1H OCEAN +-121.93,37.73,23.0,2564.0,347.0,1043.0,351.0,6.2048,275000.0,<1H OCEAN +-121.93,37.73,8.0,831.0,231.0,404.0,224.0,3.375,350000.0,<1H OCEAN +-121.95,37.74,19.0,1127.0,170.0,518.0,167.0,6.3325,250000.0,<1H OCEAN +-121.95,37.74,19.0,5721.0,837.0,2653.0,813.0,6.2631,266000.0,<1H OCEAN +-121.94,37.75,17.0,2559.0,370.0,1238.0,377.0,6.2781,269800.0,<1H OCEAN +-121.92,37.73,24.0,1407.0,327.0,501.0,295.0,2.4821,157200.0,<1H OCEAN +-121.93,37.74,16.0,3326.0,419.0,1272.0,402.0,6.8806,343500.0,<1H OCEAN +-121.94,37.75,16.0,5121.0,735.0,2464.0,761.0,6.6204,296100.0,<1H OCEAN +-121.97,37.79,17.0,5688.0,824.0,2111.0,773.0,6.6131,312500.0,<1H OCEAN +-121.98,37.8,17.0,3354.0,422.0,1457.0,425.0,7.6473,345800.0,<1H OCEAN +-121.98,37.8,16.0,2498.0,330.0,1027.0,343.0,8.155,343700.0,<1H OCEAN +-121.98,37.81,18.0,2903.0,387.0,1127.0,372.0,5.5921,359100.0,<1H OCEAN +-121.96,37.81,12.0,6488.0,778.0,2404.0,765.0,8.3188,403400.0,<1H OCEAN +-121.97,37.8,17.0,3279.0,418.0,1222.0,381.0,7.9168,356000.0,<1H OCEAN +-121.94,37.8,8.0,11336.0,1657.0,4089.0,1555.0,7.8287,369200.0,<1H OCEAN +-121.97,37.79,16.0,3873.0,484.0,1451.0,501.0,6.7857,341300.0,<1H OCEAN +-121.95,37.78,4.0,14652.0,2826.0,5613.0,2579.0,6.3942,356700.0,<1H OCEAN +-121.96,37.76,8.0,3865.0,463.0,1548.0,432.0,9.7037,425100.0,<1H OCEAN +-121.94,37.76,4.0,6875.0,1439.0,2889.0,1307.0,4.6932,356100.0,<1H OCEAN +-121.93,37.76,5.0,2255.0,269.0,876.0,258.0,10.3345,461400.0,<1H OCEAN +-121.92,37.74,8.0,452.0,51.0,140.0,43.0,12.5915,432400.0,<1H OCEAN +-121.93,37.78,2.0,227.0,35.0,114.0,49.0,3.1591,434700.0,<1H OCEAN +-121.96,37.74,2.0,200.0,20.0,25.0,9.0,15.0001,350000.0,<1H OCEAN +-121.97,37.76,8.0,3743.0,581.0,1633.0,567.0,6.7027,381900.0,<1H OCEAN +-121.97,37.77,13.0,7241.0,1007.0,3221.0,947.0,7.2216,324600.0,<1H OCEAN +-121.98,37.74,8.0,2865.0,389.0,1376.0,417.0,7.9393,399300.0,<1H OCEAN +-122.02,37.84,34.0,1879.0,265.0,729.0,263.0,7.7072,443800.0,NEAR BAY +-122.01,37.83,30.0,3917.0,549.0,1330.0,544.0,6.5617,386600.0,NEAR BAY +-122.0,37.82,20.0,2206.0,458.0,926.0,432.0,4.6042,256400.0,<1H OCEAN +-121.99,37.82,22.0,1248.0,271.0,579.0,269.0,3.375,200000.0,<1H OCEAN +-122.03,37.83,24.0,5948.0,738.0,1997.0,710.0,9.8708,500001.0,NEAR BAY +-121.99,37.77,14.0,8213.0,1364.0,3283.0,1286.0,5.1755,294800.0,<1H OCEAN +-121.99,37.81,17.0,465.0,83.0,146.0,75.0,4.9018,188500.0,<1H OCEAN +-122.02,37.8,11.0,6200.0,907.0,2286.0,896.0,7.6518,359300.0,NEAR BAY +-122.03,37.87,21.0,3521.0,447.0,1396.0,467.0,8.2673,358700.0,NEAR BAY +-122.02,37.88,16.0,3031.0,438.0,1087.0,421.0,7.3732,287300.0,NEAR BAY +-122.02,37.87,14.0,3056.0,369.0,1209.0,377.0,8.4352,441400.0,NEAR BAY +-122.03,37.86,25.0,3004.0,393.0,1145.0,376.0,7.2655,494000.0,NEAR BAY +-122.0,37.86,18.0,8953.0,1074.0,3011.0,993.0,10.7372,500001.0,<1H OCEAN +-121.97,37.87,4.0,1029.0,126.0,416.0,122.0,13.4883,500001.0,INLAND +-121.96,37.84,29.0,7479.0,977.0,2744.0,943.0,7.5139,398200.0,INLAND +-122.0,37.84,16.0,7681.0,946.0,2777.0,908.0,9.5271,500001.0,<1H OCEAN +-121.96,37.85,10.0,3209.0,379.0,1199.0,392.0,12.2478,500001.0,INLAND +-121.99,37.83,16.0,2939.0,380.0,1177.0,396.0,8.0839,372000.0,<1H OCEAN +-121.98,37.82,18.0,9117.0,1248.0,3280.0,1167.0,8.003,351300.0,<1H OCEAN +-121.95,37.81,5.0,7178.0,898.0,2823.0,907.0,9.0776,450400.0,<1H OCEAN +-122.1,37.93,20.0,10212.0,1424.0,4083.0,1374.0,8.039,382200.0,NEAR BAY +-122.12,37.94,22.0,4949.0,626.0,1850.0,590.0,10.4549,500001.0,NEAR BAY +-122.1,37.9,38.0,827.0,144.0,368.0,136.0,6.5095,294400.0,NEAR BAY +-122.14,37.9,32.0,5738.0,746.0,2099.0,732.0,10.3224,500001.0,NEAR BAY +-122.12,37.91,34.0,5683.0,755.0,1962.0,723.0,8.3678,455300.0,NEAR BAY +-122.09,37.89,35.0,880.0,139.0,352.0,132.0,6.8686,406500.0,NEAR BAY +-122.1,37.89,21.0,3282.0,653.0,1398.0,601.0,5.2079,310300.0,NEAR BAY +-122.11,37.89,32.0,2372.0,516.0,1067.0,492.0,4.3235,279500.0,NEAR BAY +-122.11,37.88,37.0,4005.0,614.0,1602.0,606.0,6.4666,348200.0,NEAR BAY +-122.12,37.88,35.0,2785.0,362.0,1001.0,363.0,8.0448,433300.0,NEAR BAY +-122.12,37.89,30.0,3227.0,733.0,1260.0,684.0,4.125,257100.0,NEAR BAY +-122.13,37.89,27.0,744.0,214.0,295.0,169.0,2.7411,350000.0,NEAR BAY +-122.13,37.87,18.0,1820.0,220.0,728.0,229.0,10.3713,426100.0,NEAR BAY +-122.14,37.88,34.0,6986.0,1096.0,2865.0,1124.0,6.2275,394400.0,NEAR BAY +-122.07,37.88,11.0,1077.0,318.0,590.0,264.0,3.5536,387200.0,NEAR BAY +-122.08,37.88,24.0,2059.0,462.0,410.0,294.0,2.3971,99400.0,NEAR BAY +-122.08,37.88,26.0,2947.0,,825.0,626.0,2.933,85000.0,NEAR BAY +-122.08,37.87,24.0,6130.0,1359.0,1750.0,1286.0,2.9167,102700.0,NEAR BAY +-122.06,37.85,17.0,7475.0,1556.0,2092.0,1449.0,3.6437,186500.0,NEAR BAY +-122.07,37.86,23.0,1025.0,205.0,263.0,191.0,3.12,155000.0,NEAR BAY +-122.06,37.86,16.0,5187.0,1014.0,1512.0,986.0,4.4551,252400.0,NEAR BAY +-122.07,37.86,17.0,1102.0,224.0,317.0,208.0,3.5893,206300.0,NEAR BAY +-122.08,37.87,26.0,2405.0,564.0,680.0,531.0,2.4896,73400.0,NEAR BAY +-122.1,37.88,35.0,3701.0,528.0,1511.0,517.0,7.2315,367100.0,NEAR BAY +-122.09,37.86,27.0,5484.0,760.0,2212.0,770.0,7.6202,402600.0,NEAR BAY +-122.11,37.87,33.0,3398.0,500.0,1351.0,457.0,6.5814,314200.0,NEAR BAY +-122.12,37.85,18.0,5252.0,686.0,1870.0,657.0,8.0074,454100.0,NEAR BAY +-122.08,37.84,17.0,1320.0,159.0,1722.0,141.0,11.7064,500001.0,NEAR BAY +-122.12,37.81,26.0,4048.0,513.0,1486.0,498.0,7.6717,416500.0,NEAR BAY +-122.12,37.82,26.0,2269.0,317.0,918.0,313.0,6.6657,364500.0,NEAR BAY +-122.11,37.83,19.0,5130.0,741.0,1887.0,712.0,7.203,369900.0,NEAR BAY +-122.08,37.82,4.0,2045.0,237.0,830.0,252.0,11.3421,500001.0,NEAR BAY +-122.14,37.86,20.0,6201.0,1182.0,2415.0,1141.0,4.5744,314000.0,NEAR BAY +-122.14,37.85,27.0,9147.0,1276.0,3371.0,1269.0,7.3267,389900.0,NEAR BAY +-122.14,37.84,24.0,2131.0,343.0,874.0,373.0,5.6349,355600.0,NEAR BAY +-122.16,37.83,16.0,4596.0,705.0,1480.0,650.0,7.52,370200.0,NEAR BAY +-122.16,37.86,36.0,3359.0,493.0,1298.0,483.0,8.1586,404300.0,NEAR BAY +-122.18,37.88,36.0,542.0,119.0,231.0,121.0,4.9,354200.0,NEAR BAY +-122.18,37.86,33.0,4449.0,636.0,1684.0,617.0,8.9571,399700.0,NEAR BAY +-122.16,37.89,32.0,1779.0,241.0,721.0,258.0,8.7589,434500.0,NEAR BAY +-122.17,37.88,32.0,3633.0,508.0,1393.0,506.0,7.6917,401800.0,NEAR BAY +-122.17,37.88,33.0,3626.0,502.0,1348.0,480.0,7.6107,423200.0,NEAR BAY +-122.17,37.87,38.0,1261.0,177.0,472.0,183.0,6.917,438000.0,NEAR BAY +-122.22,37.88,20.0,95.0,13.0,31.0,15.0,2.4444,475000.0,NEAR BAY +-122.2,37.89,37.0,3881.0,560.0,1315.0,517.0,7.3195,367500.0,NEAR BAY +-122.2,37.88,36.0,1065.0,160.0,398.0,155.0,7.7736,378100.0,NEAR BAY +-122.18,37.91,31.0,7200.0,876.0,2428.0,843.0,10.9405,500001.0,NEAR BAY +-122.2,37.9,36.0,2107.0,287.0,740.0,280.0,10.3416,500001.0,NEAR BAY +-122.18,37.9,36.0,4760.0,610.0,1511.0,572.0,9.0064,500001.0,NEAR BAY +-122.18,37.89,18.0,4845.0,735.0,1634.0,734.0,8.1489,499000.0,NEAR BAY +-121.84,37.98,8.0,7505.0,1089.0,3325.0,1016.0,5.2699,204200.0,INLAND +-121.81,37.97,8.0,1584.0,236.0,615.0,202.0,6.4753,166800.0,INLAND +-121.78,37.97,4.0,17032.0,2546.0,7653.0,2359.0,5.5601,213700.0,INLAND +-121.83,37.95,17.0,1133.0,244.0,716.0,235.0,2.875,162500.0,INLAND +-121.94,37.83,11.0,2836.0,373.0,959.0,335.0,10.5815,500001.0,INLAND +-121.89,37.82,4.0,11444.0,1355.0,3898.0,1257.0,13.2949,500001.0,INLAND +-121.91,37.81,7.0,3477.0,416.0,1216.0,395.0,13.1499,500001.0,INLAND +-121.82,37.81,12.0,4711.0,659.0,2089.0,621.0,8.3209,485400.0,INLAND +-121.96,37.99,2.0,3129.0,707.0,1606.0,698.0,2.9591,210100.0,INLAND +-121.96,37.94,26.0,3084.0,505.0,1557.0,501.0,5.1582,194700.0,INLAND +-121.96,37.95,25.0,4026.0,791.0,1850.0,709.0,4.1483,181200.0,INLAND +-121.95,37.94,21.0,3153.0,411.0,1318.0,431.0,6.8642,285400.0,INLAND +-121.97,37.93,4.0,3241.0,464.0,1552.0,494.0,6.6134,307000.0,INLAND +-122.01,37.92,18.0,2808.0,337.0,1038.0,337.0,8.3956,353600.0,NEAR BAY +-122.01,37.92,16.0,2638.0,345.0,1055.0,334.0,8.1163,365800.0,NEAR BAY +-121.99,37.92,14.0,1780.0,224.0,764.0,226.0,9.0243,427700.0,INLAND +-121.93,37.89,13.0,2085.0,292.0,852.0,264.0,7.3445,366700.0,INLAND +-121.92,37.96,14.0,5332.0,884.0,2093.0,839.0,5.2798,237400.0,INLAND +-121.94,37.95,18.0,2541.0,355.0,986.0,346.0,7.1978,288000.0,INLAND +-121.91,37.93,13.0,1610.0,198.0,703.0,217.0,8.7059,329400.0,INLAND +-121.94,37.94,26.0,1299.0,174.0,533.0,180.0,6.2296,291700.0,INLAND +-121.94,37.93,16.0,3421.0,427.0,1341.0,428.0,7.5695,320400.0,INLAND +-121.93,37.93,16.0,2876.0,391.0,1089.0,377.0,6.299,286900.0,INLAND +-121.93,37.93,16.0,2169.0,262.0,877.0,245.0,6.6049,312600.0,INLAND +-121.95,37.94,27.0,1469.0,216.0,578.0,219.0,5.9346,253600.0,INLAND +-122.25,38.02,16.0,1803.0,267.0,946.0,266.0,5.7001,205100.0,NEAR BAY +-122.25,38.03,15.0,3338.0,532.0,1834.0,520.0,5.6293,197600.0,NEAR BAY +-122.21,38.02,15.0,2150.0,327.0,1094.0,324.0,6.0224,198500.0,NEAR BAY +-122.2,37.96,9.0,6306.0,962.0,2581.0,911.0,6.7741,310700.0,NEAR BAY +-122.23,38.06,52.0,1350.0,266.0,490.0,257.0,3.125,171100.0,NEAR BAY +-122.23,38.05,52.0,1736.0,358.0,638.0,297.0,2.5517,147100.0,NEAR BAY +-122.21,38.06,52.0,2735.0,559.0,1076.0,487.0,3.6154,155700.0,NEAR BAY +-122.2,38.04,31.0,3029.0,500.0,1236.0,487.0,5.6022,197000.0,NEAR BAY +-122.26,38.03,25.0,2239.0,361.0,928.0,353.0,4.4474,203700.0,NEAR BAY +-122.27,38.04,47.0,1685.0,405.0,835.0,372.0,2.3103,134500.0,NEAR BAY +-122.26,38.03,41.0,1631.0,282.0,752.0,288.0,3.9345,150200.0,NEAR BAY +-122.26,38.04,41.0,2512.0,539.0,1179.0,480.0,2.694,123000.0,NEAR BAY +-122.25,38.05,30.0,1255.0,297.0,779.0,307.0,1.6767,147700.0,NEAR BAY +-122.32,38.06,4.0,7999.0,1611.0,3596.0,1396.0,5.0969,174200.0,NEAR BAY +-122.28,38.0,26.0,2335.0,413.0,980.0,417.0,3.4471,178900.0,NEAR BAY +-122.29,38.0,16.0,4986.0,1081.0,2805.0,1016.0,4.025,173200.0,NEAR BAY +-122.36,38.03,32.0,2159.0,393.0,981.0,369.0,4.3173,175400.0,NEAR BAY +-122.3,38.0,34.0,1712.0,317.0,956.0,341.0,4.4394,162000.0,NEAR BAY +-122.31,38.0,26.0,3735.0,641.0,1708.0,633.0,4.621,191100.0,NEAR BAY +-122.31,38.01,18.0,4123.0,874.0,1895.0,772.0,3.2759,195000.0,NEAR BAY +-122.28,37.99,28.0,3801.0,622.0,1654.0,571.0,4.375,193300.0,NEAR BAY +-122.26,37.98,28.0,2038.0,329.0,947.0,349.0,5.1178,198000.0,NEAR BAY +-122.27,37.99,16.0,4921.0,737.0,2312.0,725.0,5.8899,243200.0,NEAR BAY +-122.27,37.98,23.0,3455.0,479.0,1375.0,474.0,6.0289,218600.0,NEAR BAY +-122.26,38.02,5.0,3846.0,786.0,2053.0,716.0,5.0473,184800.0,NEAR BAY +-122.24,38.01,11.0,3751.0,565.0,1949.0,555.0,5.7862,269400.0,NEAR BAY +-122.24,38.01,16.0,2084.0,315.0,1154.0,307.0,6.0102,235600.0,NEAR BAY +-122.25,38.0,16.0,2978.0,411.0,1531.0,400.0,6.5006,237700.0,NEAR BAY +-122.26,38.0,14.0,2338.0,391.0,1003.0,398.0,4.2269,170500.0,NEAR BAY +-122.26,38.0,6.0,678.0,104.0,318.0,91.0,5.2375,246400.0,NEAR BAY +-122.27,38.0,15.0,1216.0,166.0,572.0,178.0,5.8418,240300.0,NEAR BAY +-122.27,38.0,12.0,1592.0,242.0,969.0,233.0,6.1576,248700.0,NEAR BAY +-122.26,38.0,5.0,6265.0,908.0,3326.0,872.0,6.2073,272900.0,NEAR BAY +-122.29,37.98,27.0,2133.0,347.0,850.0,350.0,5.1046,209800.0,NEAR BAY +-122.28,37.96,35.0,1579.0,243.0,734.0,264.0,5.5,201000.0,NEAR BAY +-122.27,37.97,10.0,15259.0,2275.0,7266.0,2338.0,6.0666,272400.0,NEAR BAY +-122.3,37.97,30.0,4030.0,772.0,1777.0,718.0,3.6393,184000.0,NEAR BAY +-122.3,37.97,34.0,2854.0,528.0,1211.0,452.0,3.5353,164700.0,NEAR BAY +-122.29,37.97,20.0,3426.0,632.0,1512.0,580.0,4.4911,227400.0,NEAR BAY +-122.3,37.97,35.0,1811.0,377.0,911.0,340.0,3.375,149700.0,NEAR BAY +-122.29,37.94,20.0,7578.0,1426.0,3637.0,1362.0,4.4387,190000.0,NEAR BAY +-122.32,37.95,37.0,1887.0,353.0,895.0,359.0,4.45,196600.0,NEAR BAY +-122.31,37.94,38.0,1794.0,349.0,810.0,335.0,3.8343,191400.0,NEAR BAY +-122.31,37.94,38.0,2172.0,403.0,945.0,384.0,4.3958,194200.0,NEAR BAY +-122.32,37.95,36.0,1425.0,245.0,573.0,239.0,4.35,185000.0,NEAR BAY +-122.31,37.99,25.0,6508.0,1137.0,3259.0,1081.0,4.2348,157800.0,NEAR BAY +-122.3,37.98,25.0,3807.0,806.0,1821.0,792.0,3.6518,164300.0,NEAR BAY +-122.32,37.97,29.0,2347.0,464.0,1135.0,490.0,3.9722,161000.0,NEAR BAY +-122.32,38.01,26.0,3054.0,492.0,1495.0,496.0,4.6944,171100.0,NEAR BAY +-122.33,38.0,35.0,3779.0,711.0,2493.0,679.0,2.9781,109000.0,NEAR BAY +-122.31,38.0,29.0,3108.0,534.0,1687.0,516.0,4.3333,170800.0,NEAR BAY +-122.32,37.99,24.0,4865.0,968.0,2315.0,893.0,4.2852,173500.0,NEAR BAY +-122.32,38.0,32.0,2275.0,397.0,1233.0,418.0,4.0437,162800.0,NEAR BAY +-122.34,37.99,42.0,1531.0,326.0,1271.0,377.0,2.6167,85100.0,NEAR BAY +-122.33,37.98,3.0,2850.0,544.0,1024.0,515.0,6.0115,175000.0,NEAR BAY +-122.33,37.99,4.0,3999.0,1079.0,1591.0,887.0,3.911,112500.0,NEAR BAY +-122.39,38.0,33.0,44.0,6.0,23.0,11.0,4.125,212500.0,NEAR BAY +-122.36,37.96,39.0,246.0,57.0,316.0,52.0,0.716,104200.0,NEAR BAY +-122.36,37.96,31.0,1157.0,276.0,956.0,232.0,1.5347,80400.0,NEAR BAY +-122.36,37.95,40.0,408.0,102.0,302.0,81.0,1.8333,69800.0,NEAR BAY +-122.37,37.95,35.0,215.0,45.0,100.0,34.0,1.6023,81300.0,NEAR BAY +-122.37,37.95,32.0,1298.0,363.0,716.0,268.0,0.9797,76400.0,NEAR BAY +-122.37,37.96,37.0,1572.0,402.0,1046.0,350.0,0.7403,68600.0,NEAR BAY +-122.41,37.98,36.0,60.0,15.0,42.0,25.0,1.4583,67500.0,NEAR BAY +-122.34,37.98,33.0,2014.0,410.0,1354.0,427.0,3.9773,131300.0,NEAR BAY +-122.35,37.98,34.0,3756.0,726.0,2237.0,686.0,3.7562,132900.0,NEAR BAY +-122.34,37.97,19.0,392.0,109.0,287.0,81.0,6.0426,110000.0,NEAR BAY +-122.35,37.96,32.0,1991.0,504.0,1139.0,423.0,2.0353,113600.0,NEAR BAY +-122.35,37.97,43.0,2178.0,482.0,1545.0,471.0,2.5863,112200.0,NEAR BAY +-122.35,37.97,31.0,2892.0,685.0,2104.0,641.0,3.2188,113800.0,NEAR BAY +-122.32,37.97,33.0,1595.0,292.0,991.0,300.0,4.6937,134100.0,NEAR BAY +-122.32,37.97,33.0,1156.0,190.0,643.0,209.0,4.5,156600.0,NEAR BAY +-122.33,37.97,19.0,5151.0,1335.0,2548.0,1165.0,3.3125,158800.0,NEAR BAY +-122.33,37.98,32.0,1967.0,348.0,1144.0,364.0,4.4135,150100.0,NEAR BAY +-122.33,37.97,45.0,1982.0,376.0,1179.0,398.0,3.5463,130800.0,NEAR BAY +-122.34,37.97,19.0,2237.0,580.0,1438.0,551.0,2.3382,120700.0,NEAR BAY +-122.33,37.96,46.0,1222.0,236.0,819.0,251.0,3.9118,129400.0,NEAR BAY +-122.35,37.96,36.0,2191.0,531.0,1563.0,524.0,2.5164,114200.0,NEAR BAY +-122.35,37.96,29.0,1899.0,524.0,1357.0,443.0,1.875,97200.0,NEAR BAY +-122.35,37.96,35.0,1326.0,346.0,1023.0,295.0,2.0724,97700.0,NEAR BAY +-122.35,37.95,31.0,2449.0,595.0,1801.0,548.0,2.6328,110300.0,NEAR BAY +-122.35,37.96,34.0,1428.0,335.0,1272.0,319.0,2.5461,93900.0,NEAR BAY +-122.36,37.96,30.0,950.0,317.0,1073.0,280.0,1.8664,107800.0,NEAR BAY +-122.32,37.96,25.0,1728.0,403.0,934.0,412.0,3.375,133700.0,NEAR BAY +-122.32,37.96,34.0,2070.0,357.0,784.0,294.0,4.0417,182800.0,NEAR BAY +-122.32,37.95,35.0,1612.0,354.0,887.0,331.0,2.5769,146100.0,NEAR BAY +-122.33,37.95,22.0,2099.0,569.0,1135.0,509.0,2.1915,120800.0,NEAR BAY +-122.34,37.96,15.0,6487.0,1717.0,3408.0,1560.0,2.1991,133300.0,NEAR BAY +-122.34,37.96,33.0,1817.0,441.0,1220.0,389.0,2.5382,103600.0,NEAR BAY +-122.32,37.94,38.0,2751.0,522.0,1390.0,489.0,3.7277,165100.0,NEAR BAY +-122.32,37.94,46.0,1901.0,295.0,833.0,352.0,5.5196,210800.0,NEAR BAY +-122.32,37.93,40.0,1141.0,213.0,434.0,196.0,3.9464,186900.0,NEAR BAY +-122.33,37.95,42.0,1627.0,336.0,848.0,316.0,3.7708,144600.0,NEAR BAY +-122.33,37.94,45.0,1226.0,279.0,590.0,260.0,2.8833,140400.0,NEAR BAY +-122.33,37.94,47.0,1882.0,361.0,797.0,342.0,3.5848,140800.0,NEAR BAY +-122.33,37.94,43.0,1876.0,389.0,807.0,377.0,3.1571,141600.0,NEAR BAY +-122.33,37.94,42.0,1695.0,345.0,719.0,334.0,3.9417,139100.0,NEAR BAY +-122.33,37.94,44.0,1769.0,332.0,828.0,309.0,4.0526,150800.0,NEAR BAY +-122.34,37.95,45.0,1128.0,240.0,702.0,270.0,3.6719,134100.0,NEAR BAY +-122.33,37.95,45.0,1585.0,329.0,981.0,373.0,3.0313,135800.0,NEAR BAY +-122.33,37.95,46.0,1543.0,339.0,777.0,322.0,4.0927,142600.0,NEAR BAY +-122.34,37.95,44.0,1675.0,317.0,806.0,311.0,3.0694,135300.0,NEAR BAY +-122.34,37.95,44.0,1788.0,368.0,933.0,329.0,2.875,133400.0,NEAR BAY +-122.34,37.95,39.0,1986.0,427.0,1041.0,385.0,3.2333,135100.0,NEAR BAY +-122.34,37.95,38.0,1340.0,298.0,766.0,241.0,3.2833,111700.0,NEAR BAY +-122.35,37.95,45.0,2142.0,431.0,1318.0,431.0,3.0737,111600.0,NEAR BAY +-122.35,37.95,42.0,1485.0,290.0,971.0,303.0,3.6094,114600.0,NEAR BAY +-122.36,37.95,38.0,1042.0,289.0,773.0,248.0,2.7714,104700.0,NEAR BAY +-122.34,37.94,47.0,2313.0,433.0,947.0,430.0,3.942,143300.0,NEAR BAY +-122.34,37.94,44.0,1917.0,444.0,936.0,435.0,2.7391,140300.0,NEAR BAY +-122.34,37.94,31.0,1611.0,455.0,786.0,411.0,1.681,145500.0,NEAR BAY +-122.34,37.94,42.0,2206.0,451.0,989.0,444.0,3.125,143900.0,NEAR BAY +-122.35,37.94,45.0,2112.0,493.0,1406.0,452.0,2.3456,105200.0,NEAR BAY +-122.35,37.94,34.0,1880.0,459.0,1358.0,422.0,1.6571,105200.0,NEAR BAY +-122.35,37.94,47.0,1275.0,275.0,844.0,273.0,2.8967,95600.0,NEAR BAY +-122.36,37.95,38.0,1066.0,248.0,729.0,286.0,1.5139,81700.0,NEAR BAY +-122.36,37.94,45.0,907.0,188.0,479.0,161.0,3.0862,79000.0,NEAR BAY +-122.36,37.94,27.0,844.0,249.0,583.0,265.0,0.9687,105800.0,NEAR BAY +-122.36,37.94,26.0,1540.0,343.0,1007.0,338.0,1.3365,72900.0,NEAR BAY +-122.36,37.94,41.0,2591.0,585.0,1638.0,462.0,1.822,79700.0,NEAR BAY +-122.37,37.94,49.0,969.0,229.0,599.0,195.0,1.3167,71600.0,NEAR BAY +-122.35,37.93,19.0,1334.0,366.0,1048.0,316.0,1.7865,88000.0,NEAR BAY +-122.35,37.93,28.0,1995.0,488.0,1182.0,439.0,2.3352,84300.0,NEAR BAY +-122.36,37.94,43.0,369.0,107.0,371.0,111.0,1.6,79400.0,NEAR BAY +-122.36,37.93,17.0,1258.0,254.0,885.0,229.0,3.05,121600.0,NEAR BAY +-122.37,37.94,40.0,1064.0,266.0,912.0,239.0,1.0521,69100.0,NEAR BAY +-122.37,37.93,45.0,3150.0,756.0,1798.0,749.0,1.75,37900.0,NEAR BAY +-122.38,37.91,18.0,3507.0,711.0,1224.0,676.0,5.0524,269800.0,NEAR BAY +-122.42,37.93,47.0,3453.0,779.0,1353.0,728.0,4.016,274500.0,NEAR BAY +-122.41,37.94,52.0,154.0,33.0,89.0,38.0,3.2875,275000.0,NEAR BAY +-122.34,37.93,30.0,2515.0,481.0,1327.0,428.0,2.1287,95000.0,NEAR BAY +-122.35,37.93,39.0,2002.0,416.0,1166.0,395.0,1.7257,91500.0,NEAR BAY +-122.36,37.93,44.0,1891.0,449.0,1047.0,432.0,1.7727,86100.0,NEAR BAY +-122.36,37.93,42.0,1796.0,389.0,1107.0,372.0,1.9375,87000.0,NEAR BAY +-122.37,37.93,37.0,709.0,190.0,644.0,174.0,0.8641,84200.0,NEAR BAY +-122.33,37.91,36.0,1954.0,513.0,1437.0,440.0,1.125,93800.0,NEAR BAY +-122.35,37.92,36.0,921.0,200.0,585.0,236.0,1.9224,94000.0,NEAR BAY +-122.36,37.92,52.0,215.0,41.0,126.0,43.0,1.3929,104200.0,NEAR BAY +-122.35,37.91,4.0,2851.0,798.0,1285.0,712.0,4.2895,186800.0,NEAR BAY +-122.33,37.93,34.0,2326.0,471.0,1356.0,441.0,2.3475,90300.0,NEAR BAY +-122.33,37.93,27.0,2158.0,424.0,1220.0,442.0,3.0156,111500.0,NEAR BAY +-122.34,37.93,32.0,2389.0,652.0,1672.0,584.0,1.4423,88300.0,NEAR BAY +-122.34,37.93,45.0,2225.0,486.0,1304.0,459.0,2.64,112100.0,NEAR BAY +-122.35,37.93,41.0,268.0,75.0,198.0,82.0,3.2222,156300.0,NEAR BAY +-122.32,37.92,29.0,2304.0,399.0,1377.0,454.0,5.0187,140600.0,NEAR BAY +-122.33,37.92,26.0,3887.0,779.0,2512.0,740.0,2.2301,122400.0,NEAR BAY +-122.32,37.92,28.0,4649.0,977.0,2606.0,953.0,3.2674,129100.0,NEAR BAY +-122.32,37.91,34.0,2669.0,647.0,1341.0,555.0,2.6399,119600.0,NEAR BAY +-122.31,37.91,39.0,2955.0,696.0,1417.0,682.0,2.7628,167800.0,NEAR BAY +-122.31,37.91,43.0,2549.0,511.0,1060.0,528.0,3.6417,178400.0,NEAR BAY +-122.31,37.91,45.0,3924.0,834.0,1992.0,773.0,4.1146,177800.0,NEAR BAY +-122.31,37.93,39.0,2505.0,371.0,872.0,345.0,5.3433,286500.0,NEAR BAY +-122.31,37.93,36.0,2403.0,408.0,917.0,404.0,5.0399,253400.0,NEAR BAY +-122.32,37.93,40.0,3056.0,489.0,1103.0,481.0,5.1067,247300.0,NEAR BAY +-122.32,37.94,47.0,1911.0,283.0,697.0,275.0,6.2712,267700.0,NEAR BAY +-122.3,37.92,32.0,3943.0,605.0,1524.0,614.0,6.0677,321600.0,NEAR BAY +-122.29,37.92,35.0,583.0,88.0,235.0,84.0,5.943,288200.0,NEAR BAY +-122.29,37.92,32.0,1736.0,234.0,602.0,231.0,6.516,401000.0,NEAR BAY +-122.3,37.93,34.0,2254.0,357.0,715.0,306.0,4.5,304000.0,NEAR BAY +-122.31,37.93,36.0,1526.0,256.0,696.0,263.0,3.5089,261900.0,NEAR BAY +-122.32,37.93,33.0,296.0,73.0,216.0,63.0,2.675,22500.0,NEAR BAY +-122.31,37.92,30.0,1014.0,236.0,537.0,204.0,2.8456,183300.0,NEAR BAY +-122.31,37.92,38.0,1250.0,236.0,631.0,279.0,3.724,220100.0,NEAR BAY +-122.31,37.92,12.0,1895.0,600.0,983.0,519.0,2.5,195800.0,NEAR BAY +-122.32,37.92,22.0,1119.0,220.0,565.0,199.0,3.3594,186900.0,NEAR BAY +-122.31,37.92,43.0,2116.0,407.0,900.0,361.0,4.1587,212200.0,NEAR BAY +-122.3,37.92,33.0,1615.0,271.0,710.0,285.0,4.0804,239000.0,NEAR BAY +-122.31,37.91,31.0,1432.0,348.0,681.0,348.0,2.7243,218100.0,NEAR BAY +-122.3,37.91,39.0,2686.0,569.0,1159.0,559.0,2.9441,200400.0,NEAR BAY +-122.3,37.91,40.0,2866.0,617.0,1305.0,589.0,3.6321,209100.0,NEAR BAY +-122.3,37.9,37.0,2125.0,489.0,912.0,462.0,2.9219,217200.0,NEAR BAY +-122.3,37.9,41.0,2053.0,435.0,873.0,415.0,3.4091,223000.0,NEAR BAY +-122.3,37.9,35.0,1102.0,308.0,688.0,303.0,2.3946,141700.0,NEAR BAY +-122.3,37.9,30.0,1772.0,471.0,880.0,437.0,2.2672,162500.0,NEAR BAY +-122.29,37.92,36.0,1450.0,235.0,568.0,234.0,6.0,311400.0,NEAR BAY +-122.29,37.91,38.0,2591.0,424.0,905.0,378.0,5.1691,263200.0,NEAR BAY +-122.29,37.91,46.0,2085.0,346.0,748.0,354.0,4.0536,262000.0,NEAR BAY +-122.29,37.91,40.0,2085.0,329.0,796.0,339.0,5.5357,273700.0,NEAR BAY +-122.29,37.9,52.0,2657.0,500.0,1131.0,489.0,4.4286,234900.0,NEAR BAY +-122.28,37.91,38.0,2501.0,348.0,805.0,329.0,6.5576,358500.0,NEAR BAY +-122.28,37.9,49.0,3191.0,516.0,1148.0,507.0,6.3538,333700.0,NEAR BAY +-122.28,37.9,52.0,1369.0,249.0,490.0,248.0,4.1212,287500.0,NEAR BAY +-122.28,37.91,41.0,3009.0,482.0,1053.0,490.0,5.828,324400.0,NEAR BAY +-122.27,37.91,47.0,1930.0,315.0,692.0,296.0,6.3669,315500.0,NEAR BAY +-122.28,37.91,48.0,2083.0,298.0,685.0,286.0,7.3089,331200.0,NEAR BAY +-124.17,41.8,16.0,2739.0,480.0,1259.0,436.0,3.7557,109400.0,NEAR OCEAN +-124.3,41.8,19.0,2672.0,552.0,1298.0,478.0,1.9797,85800.0,NEAR OCEAN +-124.23,41.75,11.0,3159.0,616.0,1343.0,479.0,2.4805,73200.0,NEAR OCEAN +-124.21,41.77,17.0,3461.0,722.0,1947.0,647.0,2.5795,68400.0,NEAR OCEAN +-124.19,41.78,15.0,3140.0,714.0,1645.0,640.0,1.6654,74600.0,NEAR OCEAN +-124.22,41.73,28.0,3003.0,699.0,1530.0,653.0,1.7038,78300.0,NEAR OCEAN +-124.21,41.75,20.0,3810.0,787.0,1993.0,721.0,2.0074,66900.0,NEAR OCEAN +-124.17,41.76,20.0,2673.0,538.0,1282.0,514.0,2.4605,105900.0,NEAR OCEAN +-124.16,41.74,15.0,2715.0,569.0,1532.0,530.0,2.1829,69500.0,NEAR OCEAN +-124.14,41.95,21.0,2696.0,578.0,1208.0,494.0,2.275,122400.0,NEAR OCEAN +-124.16,41.92,19.0,1668.0,324.0,841.0,283.0,2.1336,75000.0,NEAR OCEAN +-124.3,41.84,17.0,2677.0,531.0,1244.0,456.0,3.0313,103600.0,NEAR OCEAN +-124.15,41.81,17.0,3276.0,628.0,3546.0,585.0,2.2868,103100.0,NEAR OCEAN +-123.91,41.68,22.0,1880.0,360.0,743.0,314.0,2.9688,152700.0,<1H OCEAN +-123.83,41.88,18.0,1504.0,357.0,660.0,258.0,3.13,116700.0,<1H OCEAN +-123.92,41.54,22.0,2920.0,636.0,1382.0,499.0,2.0202,71100.0,NEAR OCEAN +-119.94,38.96,20.0,1451.0,386.0,467.0,255.0,1.5536,212500.0,INLAND +-119.95,38.95,8.0,430.0,107.0,36.0,18.0,2.625,187500.0,INLAND +-119.95,38.95,22.0,1058.0,352.0,851.0,269.0,2.02,87500.0,INLAND +-119.95,38.95,21.0,2046.0,580.0,952.0,353.0,1.7245,92200.0,INLAND +-119.94,38.95,25.0,1789.0,536.0,1134.0,396.0,2.32,91300.0,INLAND +-119.95,38.94,24.0,2180.0,517.0,755.0,223.0,2.5875,173400.0,INLAND +-119.93,38.94,27.0,1709.0,408.0,97.0,44.0,2.4917,200000.0,INLAND +-119.97,38.94,26.0,1485.0,334.0,406.0,180.0,1.9667,84600.0,INLAND +-119.97,38.93,24.0,856.0,185.0,388.0,108.0,3.1806,107200.0,INLAND +-119.98,38.96,25.0,2443.0,444.0,868.0,342.0,3.5417,114800.0,INLAND +-119.96,38.94,19.0,1429.0,292.0,585.0,188.0,2.2589,131600.0,INLAND +-119.96,38.94,27.0,1492.0,393.0,717.0,254.0,1.8906,104200.0,INLAND +-119.96,38.93,22.0,2731.0,632.0,1215.0,483.0,2.83,110500.0,INLAND +-119.94,38.92,24.0,1258.0,216.0,235.0,96.0,4.6,136800.0,INLAND +-119.98,38.94,25.0,1339.0,328.0,503.0,219.0,1.9018,109700.0,INLAND +-119.98,38.94,23.0,1564.0,298.0,339.0,147.0,4.0417,99300.0,INLAND +-119.99,38.94,24.0,1216.0,289.0,421.0,185.0,3.1625,103600.0,INLAND +-119.99,38.94,22.0,3119.0,640.0,786.0,351.0,3.0806,118500.0,INLAND +-119.99,38.93,23.0,1882.0,414.0,673.0,277.0,2.9091,141900.0,INLAND +-119.98,38.93,28.0,1194.0,272.0,494.0,203.0,2.3281,85800.0,INLAND +-119.98,38.93,25.0,1262.0,293.0,534.0,226.0,2.6607,90400.0,INLAND +-119.98,38.92,27.0,2682.0,606.0,1010.0,399.0,3.15,86900.0,INLAND +-119.98,38.92,28.0,1408.0,312.0,522.0,221.0,2.0708,89600.0,INLAND +-120.0,38.93,17.0,8005.0,1382.0,999.0,383.0,3.9722,313400.0,INLAND +-120.01,38.93,22.0,3080.0,610.0,1045.0,425.0,2.996,126100.0,INLAND +-120.0,38.92,17.0,1106.0,207.0,466.0,180.0,3.3295,126600.0,INLAND +-120.0,38.92,26.0,529.0,116.0,191.0,83.0,3.5,103600.0,INLAND +-120.01,38.92,23.0,964.0,246.0,485.0,198.0,1.7188,96100.0,INLAND +-120.01,38.92,25.0,1758.0,357.0,689.0,278.0,2.675,104200.0,INLAND +-120.02,38.91,22.0,2138.0,493.0,829.0,330.0,2.2056,107200.0,INLAND +-120.02,38.92,24.0,1194.0,246.0,414.0,151.0,3.2396,101900.0,INLAND +-120.01,38.91,27.0,968.0,191.0,283.0,143.0,2.0938,94400.0,INLAND +-120.01,38.91,17.0,2732.0,609.0,1005.0,499.0,1.9851,86700.0,INLAND +-120.01,38.89,24.0,1669.0,422.0,589.0,281.0,3.0089,100800.0,INLAND +-120.0,38.9,21.0,1653.0,419.0,737.0,308.0,1.9727,114100.0,INLAND +-119.99,38.88,17.0,2807.0,529.0,675.0,251.0,2.7457,107800.0,INLAND +-119.98,38.9,16.0,3109.0,572.0,885.0,334.0,3.5,134700.0,INLAND +-119.92,38.91,15.0,3831.0,625.0,984.0,328.0,5.0718,162500.0,INLAND +-120.0,38.87,12.0,1437.0,268.0,395.0,144.0,4.225,127600.0,INLAND +-119.96,38.84,17.0,2722.0,512.0,828.0,289.0,3.5714,109700.0,INLAND +-120.02,38.76,15.0,3142.0,618.0,725.0,285.0,4.3333,121400.0,INLAND +-120.04,38.86,16.0,2708.0,481.0,712.0,261.0,3.7891,117700.0,INLAND +-120.03,38.89,15.0,3042.0,588.0,918.0,336.0,3.8333,118800.0,INLAND +-120.02,38.86,19.0,2429.0,459.0,883.0,300.0,3.017,97600.0,INLAND +-120.13,39.06,22.0,2465.0,539.0,381.0,146.0,2.875,87500.0,INLAND +-120.16,39.04,18.0,2040.0,402.0,350.0,129.0,4.0313,126000.0,INLAND +-120.16,39.01,16.0,1463.0,264.0,54.0,26.0,4.975,206300.0,INLAND +-120.06,39.01,19.0,2967.0,528.0,112.0,48.0,4.0714,437500.0,INLAND +-120.1,38.91,33.0,1561.0,282.0,30.0,11.0,1.875,500001.0,INLAND +-120.97,38.91,7.0,4341.0,716.0,1978.0,682.0,4.8311,172200.0,INLAND +-121.04,38.81,11.0,3522.0,623.0,1456.0,544.0,3.93,163400.0,INLAND +-120.72,38.94,10.0,1604.0,352.0,540.0,190.0,3.7625,113200.0,INLAND +-120.88,38.91,15.0,3876.0,778.0,1960.0,691.0,2.902,127300.0,INLAND +-120.92,38.86,11.0,1720.0,345.0,850.0,326.0,3.2027,128600.0,INLAND +-120.87,38.83,12.0,2180.0,423.0,1070.0,377.0,2.8562,128200.0,INLAND +-120.84,38.81,11.0,1280.0,286.0,609.0,248.0,3.1635,132600.0,INLAND +-120.81,38.89,17.0,1438.0,324.0,675.0,268.0,2.9444,119300.0,INLAND +-120.79,38.83,15.0,1374.0,291.0,709.0,239.0,1.7222,118500.0,INLAND +-120.71,38.85,8.0,1877.0,479.0,884.0,323.0,3.4688,120100.0,INLAND +-120.5,38.87,10.0,81.0,41.0,55.0,16.0,4.9583,87500.0,INLAND +-120.3,38.9,11.0,1961.0,435.0,113.0,53.0,0.9227,95500.0,INLAND +-121.09,38.68,15.0,5218.0,711.0,1949.0,659.0,4.7083,213300.0,INLAND +-121.08,38.67,10.0,2499.0,331.0,1040.0,333.0,6.844,239600.0,INLAND +-121.07,38.66,22.0,1831.0,274.0,813.0,269.0,4.6394,173400.0,INLAND +-121.06,38.7,9.0,13255.0,1739.0,5001.0,1627.0,6.314,228900.0,INLAND +-121.0,38.58,12.0,3425.0,549.0,1357.0,451.0,5.3344,217500.0,INLAND +-121.01,38.73,7.0,6322.0,1046.0,2957.0,1024.0,4.7276,197500.0,INLAND +-120.99,38.69,5.0,5743.0,1074.0,2651.0,962.0,4.1163,172500.0,INLAND +-121.02,38.66,4.0,7392.0,1155.0,3096.0,1065.0,4.5246,198900.0,INLAND +-120.99,38.67,8.0,4913.0,744.0,2005.0,723.0,5.4413,187900.0,INLAND +-120.98,38.67,13.0,3432.0,516.0,1286.0,470.0,5.584,186600.0,INLAND +-120.98,38.66,9.0,2073.0,404.0,916.0,373.0,3.225,163300.0,INLAND +-120.98,38.68,5.0,4810.0,909.0,2242.0,900.0,3.2964,176900.0,INLAND +-120.95,38.69,10.0,3421.0,563.0,1689.0,545.0,5.2032,217100.0,INLAND +-120.96,38.66,11.0,2339.0,436.0,1062.0,380.0,3.9036,180800.0,INLAND +-120.97,38.65,9.0,3707.0,602.0,1601.0,555.0,4.0714,300600.0,INLAND +-120.93,38.65,12.0,2213.0,384.0,1097.0,351.0,4.5568,170100.0,INLAND +-120.91,38.62,12.0,4545.0,748.0,2033.0,718.0,4.1843,207600.0,INLAND +-120.95,38.79,12.0,3247.0,579.0,1459.0,517.0,4.3981,202800.0,INLAND +-120.93,38.77,9.0,2229.0,355.0,788.0,341.0,5.5111,196300.0,INLAND +-120.91,38.73,11.0,5460.0,859.0,2645.0,838.0,4.835,230600.0,INLAND +-120.87,38.71,13.0,2692.0,470.0,1302.0,420.0,4.0,167400.0,INLAND +-120.84,38.77,11.0,1013.0,188.0,410.0,158.0,4.825,184600.0,INLAND +-120.86,38.75,15.0,1533.0,300.0,674.0,287.0,2.5625,146100.0,INLAND +-120.83,38.74,17.0,3685.0,775.0,1714.0,734.0,2.2269,128300.0,INLAND +-120.84,38.73,17.0,2616.0,492.0,1158.0,457.0,2.8807,142600.0,INLAND +-120.81,38.73,38.0,2005.0,385.0,882.0,353.0,2.5104,120500.0,INLAND +-120.78,38.74,28.0,4236.0,877.0,2008.0,881.0,2.1603,111300.0,INLAND +-120.81,38.74,29.0,2259.0,482.0,1099.0,463.0,2.3314,121600.0,INLAND +-120.76,38.76,21.0,3509.0,606.0,1576.0,564.0,2.6392,148500.0,INLAND +-120.76,38.73,17.0,512.0,129.0,314.0,140.0,1.5625,108300.0,INLAND +-120.78,38.73,31.0,3117.0,616.0,1606.0,588.0,2.9844,127900.0,INLAND +-120.81,38.73,42.0,1276.0,260.0,799.0,259.0,2.7273,128600.0,INLAND +-120.78,38.72,19.0,4414.0,767.0,1865.0,699.0,3.6406,150900.0,INLAND +-120.67,38.76,35.0,2104.0,403.0,1060.0,400.0,2.1682,138100.0,INLAND +-120.7,38.75,19.0,2325.0,430.0,967.0,376.0,2.9,158700.0,INLAND +-120.71,38.73,17.0,2146.0,396.0,862.0,351.0,2.9219,141300.0,INLAND +-120.58,38.77,15.0,2155.0,394.0,857.0,356.0,4.03,141200.0,INLAND +-120.58,38.77,21.0,1661.0,406.0,789.0,319.0,2.3583,108700.0,INLAND +-120.6,38.76,22.0,1236.0,273.0,615.0,248.0,3.0217,106900.0,INLAND +-120.59,38.76,21.0,1728.0,417.0,731.0,334.0,1.7266,94700.0,INLAND +-120.63,38.75,17.0,3145.0,621.0,1432.0,559.0,2.7201,117500.0,INLAND +-120.7,38.69,13.0,4492.0,821.0,2093.0,734.0,4.0709,151700.0,INLAND +-120.63,38.73,11.0,4577.0,836.0,1944.0,700.0,4.0675,140200.0,INLAND +-120.62,38.71,10.0,6305.0,1150.0,2597.0,921.0,4.0197,132200.0,INLAND +-120.63,38.68,14.0,1821.0,316.0,769.0,266.0,3.0789,131700.0,INLAND +-120.54,38.75,9.0,3006.0,540.0,1102.0,418.0,3.9812,136600.0,INLAND +-120.76,38.6,14.0,2925.0,625.0,1226.0,437.0,2.5865,133800.0,INLAND +-120.66,38.61,19.0,2715.0,596.0,1301.0,473.0,2.5042,126400.0,INLAND +-120.72,38.57,8.0,892.0,185.0,427.0,164.0,2.6833,118800.0,INLAND +-120.59,38.53,15.0,432.0,87.0,208.0,73.0,3.6125,100000.0,INLAND +-120.44,38.61,9.0,2598.0,548.0,796.0,297.0,3.5192,98000.0,INLAND +-120.32,38.71,13.0,1115.0,255.0,86.0,32.0,3.5667,115600.0,INLAND +-120.08,38.8,34.0,1988.0,511.0,36.0,15.0,4.625,162500.0,INLAND +-120.88,38.58,8.0,3417.0,604.0,1703.0,623.0,4.0827,170700.0,INLAND +-120.84,38.63,12.0,1313.0,231.0,731.0,232.0,5.7373,208300.0,INLAND +-120.81,38.67,14.0,8396.0,1578.0,3952.0,1474.0,3.0565,118800.0,INLAND +-120.76,38.65,17.0,2319.0,430.0,1126.0,372.0,3.5511,155900.0,INLAND +-120.85,38.69,18.0,5928.0,1097.0,2697.0,1096.0,3.4872,141400.0,INLAND +-120.79,38.7,13.0,5036.0,1034.0,2243.0,923.0,2.3319,138500.0,INLAND +-119.81,36.73,51.0,956.0,196.0,662.0,180.0,2.101,56700.0,INLAND +-119.81,36.73,47.0,1314.0,416.0,1155.0,326.0,1.372,49600.0,INLAND +-119.81,36.74,36.0,607.0,155.0,483.0,146.0,1.5625,47500.0,INLAND +-119.79,36.73,52.0,112.0,28.0,193.0,40.0,1.975,47500.0,INLAND +-119.8,36.73,45.0,925.0,231.0,797.0,228.0,1.7011,44800.0,INLAND +-119.8,36.72,43.0,1286.0,360.0,972.0,345.0,0.9513,50400.0,INLAND +-119.81,36.72,46.0,1414.0,268.0,902.0,243.0,1.5833,56700.0,INLAND +-119.81,36.73,50.0,772.0,194.0,606.0,167.0,2.2206,59200.0,INLAND +-119.77,36.73,44.0,1960.0,393.0,1286.0,381.0,2.1518,53000.0,INLAND +-119.77,36.72,43.0,1763.0,389.0,1623.0,390.0,1.4427,47700.0,INLAND +-119.78,36.73,52.0,1377.0,319.0,1280.0,259.0,1.2344,43300.0,INLAND +-119.77,36.73,45.0,1081.0,241.0,821.0,230.0,1.7829,52600.0,INLAND +-119.77,36.75,39.0,1287.0,332.0,1386.0,306.0,1.5227,46900.0,INLAND +-119.77,36.74,20.0,1855.0,519.0,1091.0,443.0,1.5547,93900.0,INLAND +-119.78,36.74,15.0,1461.0,415.0,924.0,356.0,2.5045,90300.0,INLAND +-119.78,36.75,35.0,2114.0,506.0,2050.0,474.0,1.2375,50000.0,INLAND +-119.78,36.75,31.0,1404.0,379.0,1515.0,387.0,1.2813,56400.0,INLAND +-119.79,36.74,35.0,853.0,296.0,1228.0,289.0,1.0513,39600.0,INLAND +-119.79,36.74,52.0,173.0,87.0,401.0,84.0,2.1094,75000.0,INLAND +-119.8,36.74,25.0,1717.0,542.0,1343.0,471.0,0.799,51800.0,INLAND +-119.8,36.75,41.0,1659.0,466.0,1391.0,447.0,1.3527,61200.0,INLAND +-119.79,36.75,33.0,3161.0,934.0,3530.0,846.0,1.123,46700.0,INLAND +-119.82,36.74,52.0,610.0,128.0,406.0,122.0,1.8967,43800.0,INLAND +-119.82,36.72,25.0,2581.0,528.0,1642.0,509.0,1.6435,52600.0,INLAND +-119.82,36.72,17.0,1276.0,242.0,927.0,238.0,2.6176,54100.0,INLAND +-119.83,36.73,21.0,1702.0,358.0,1347.0,316.0,2.4137,62100.0,INLAND +-119.83,36.72,28.0,60.0,10.0,46.0,13.0,4.35,67500.0,INLAND +-119.83,36.71,43.0,355.0,81.0,233.0,75.0,2.4167,73900.0,INLAND +-119.79,36.72,19.0,1719.0,391.0,1369.0,368.0,1.25,53000.0,INLAND +-119.8,36.71,29.0,1541.0,291.0,1007.0,313.0,2.0043,53500.0,INLAND +-119.81,36.71,25.0,1026.0,221.0,789.0,183.0,1.5625,52800.0,INLAND +-119.8,36.72,19.0,1334.0,336.0,1171.0,319.0,1.0481,48500.0,INLAND +-119.8,36.72,15.0,1908.0,417.0,1383.0,375.0,1.0472,57800.0,INLAND +-119.79,36.7,23.0,1731.0,363.0,1210.0,341.0,1.3922,49500.0,INLAND +-119.8,36.7,28.0,1592.0,304.0,962.0,282.0,1.3304,51300.0,INLAND +-119.81,36.7,52.0,314.0,57.0,178.0,66.0,1.2404,52500.0,INLAND +-119.78,36.72,22.0,354.0,121.0,530.0,115.0,2.1458,34400.0,INLAND +-119.79,36.72,41.0,1562.0,322.0,927.0,277.0,1.3047,44100.0,INLAND +-119.78,36.71,35.0,1987.0,394.0,1233.0,383.0,1.3587,45300.0,INLAND +-119.74,36.71,17.0,5872.0,1250.0,5034.0,1224.0,2.1905,61800.0,INLAND +-119.76,36.71,29.0,1745.0,441.0,1530.0,391.0,1.5611,44400.0,INLAND +-119.76,36.72,24.0,1240.0,265.0,1035.0,232.0,2.875,60600.0,INLAND +-119.75,36.71,38.0,1481.0,,1543.0,372.0,1.4577,49800.0,INLAND +-119.74,36.73,34.0,1254.0,272.0,1056.0,279.0,2.3269,50800.0,INLAND +-119.74,36.72,25.0,3972.0,842.0,2863.0,729.0,2.1304,58500.0,INLAND +-119.75,36.72,22.0,3247.0,859.0,4179.0,881.0,1.3343,60800.0,INLAND +-119.76,36.73,46.0,1347.0,282.0,854.0,267.0,1.8723,52600.0,INLAND +-119.76,36.73,39.0,1553.0,363.0,1449.0,341.0,1.4419,45500.0,INLAND +-119.75,36.73,39.0,2290.0,539.0,1685.0,536.0,1.6325,52100.0,INLAND +-119.74,36.73,42.0,1236.0,272.0,946.0,261.0,2.0536,50000.0,INLAND +-119.69,36.75,6.0,1926.0,303.0,965.0,316.0,4.7463,93100.0,INLAND +-119.67,36.74,19.0,2788.0,614.0,1365.0,525.0,2.7813,120300.0,INLAND +-119.69,36.74,17.0,2438.0,598.0,1563.0,538.0,1.5449,62500.0,INLAND +-119.69,36.75,13.0,2343.0,409.0,1347.0,405.0,4.0027,93100.0,INLAND +-119.67,36.73,27.0,2845.0,417.0,1219.0,460.0,4.9196,117900.0,INLAND +-119.69,36.73,30.0,2437.0,349.0,1005.0,380.0,7.2211,171700.0,INLAND +-119.69,36.74,23.0,2097.0,385.0,911.0,405.0,3.5128,121600.0,INLAND +-119.69,36.71,25.0,556.0,79.0,249.0,71.0,4.4583,108300.0,INLAND +-119.67,36.72,31.0,843.0,140.0,453.0,149.0,2.6875,153800.0,INLAND +-119.73,36.73,7.0,2461.0,647.0,1587.0,551.0,1.4007,225000.0,INLAND +-119.72,36.73,9.0,1914.0,491.0,1116.0,424.0,1.4646,65900.0,INLAND +-119.72,36.72,15.0,1713.0,246.0,766.0,232.0,6.8162,127200.0,INLAND +-119.73,36.72,26.0,2645.0,1005.0,1660.0,991.0,0.6991,89500.0,INLAND +-119.73,36.73,9.0,1621.0,428.0,678.0,394.0,2.2437,54200.0,INLAND +-119.71,36.73,19.0,3972.0,585.0,1586.0,560.0,5.2608,151400.0,INLAND +-119.72,36.71,7.0,2456.0,463.0,1350.0,424.0,3.0179,91600.0,INLAND +-119.73,36.72,15.0,2246.0,456.0,1190.0,403.0,2.0294,70400.0,INLAND +-119.73,36.68,32.0,755.0,205.0,681.0,207.0,1.7986,49300.0,INLAND +-119.69,36.69,36.0,1432.0,269.0,836.0,237.0,2.1563,88300.0,INLAND +-119.76,36.68,29.0,1243.0,312.0,836.0,277.0,1.8355,74200.0,INLAND +-119.67,36.65,20.0,2512.0,449.0,1464.0,450.0,3.9211,92300.0,INLAND +-119.63,36.64,33.0,1036.0,181.0,620.0,174.0,3.4107,110400.0,INLAND +-119.65,36.62,6.0,1931.0,422.0,1344.0,414.0,1.6607,58000.0,INLAND +-119.68,36.63,39.0,1237.0,256.0,638.0,239.0,3.0139,65300.0,INLAND +-119.74,36.65,19.0,2546.0,463.0,1257.0,418.0,2.9013,89500.0,INLAND +-119.68,36.62,31.0,834.0,229.0,616.0,211.0,1.6602,61200.0,INLAND +-119.73,36.62,35.0,2080.0,365.0,1026.0,333.0,3.5781,92800.0,INLAND +-119.73,36.59,31.0,1551.0,296.0,1058.0,287.0,3.3438,92600.0,INLAND +-119.8,36.68,31.0,2214.0,432.0,1326.0,416.0,2.1691,66700.0,INLAND +-119.78,36.65,27.0,1226.0,240.0,706.0,211.0,2.77,68400.0,INLAND +-119.82,36.64,30.0,1694.0,312.0,1008.0,321.0,2.2466,96000.0,INLAND +-119.8,36.65,34.0,2263.0,423.0,1184.0,407.0,1.7692,74200.0,INLAND +-119.89,36.73,43.0,524.0,93.0,302.0,93.0,2.6146,81300.0,INLAND +-119.87,36.72,30.0,1584.0,316.0,984.0,300.0,2.0658,67900.0,INLAND +-119.89,36.7,32.0,1485.0,269.0,867.0,271.0,2.5809,78300.0,INLAND +-119.85,36.74,35.0,1191.0,190.0,537.0,182.0,3.5375,96700.0,INLAND +-119.84,36.77,6.0,1853.0,473.0,1397.0,417.0,1.4817,72000.0,INLAND +-119.83,36.76,15.0,3291.0,772.0,1738.0,634.0,1.976,67300.0,INLAND +-119.82,36.75,41.0,1022.0,209.0,741.0,213.0,2.0781,48800.0,INLAND +-119.84,36.75,34.0,1186.0,300.0,774.0,271.0,1.575,57100.0,INLAND +-119.83,36.75,33.0,662.0,183.0,607.0,181.0,1.3929,55600.0,INLAND +-119.81,36.76,48.0,2059.0,388.0,834.0,405.0,2.9306,67900.0,INLAND +-119.81,36.76,51.0,2419.0,486.0,1284.0,426.0,2.2029,54200.0,INLAND +-119.81,36.75,52.0,1827.0,356.0,855.0,353.0,1.7636,55100.0,INLAND +-119.82,36.76,41.0,1973.0,399.0,1107.0,375.0,1.8971,66900.0,INLAND +-119.82,36.76,46.0,2194.0,563.0,924.0,542.0,1.4028,68500.0,INLAND +-119.8,36.76,52.0,1853.0,437.0,764.0,390.0,1.6429,69200.0,INLAND +-119.8,36.75,52.0,1788.0,449.0,1156.0,418.0,1.7298,58400.0,INLAND +-119.81,36.76,52.0,1792.0,352.0,1049.0,357.0,2.4375,57100.0,INLAND +-119.8,36.76,52.0,2224.0,418.0,832.0,406.0,2.3952,78400.0,INLAND +-119.79,36.76,52.0,1185.0,260.0,635.0,239.0,1.175,56100.0,INLAND +-119.79,36.75,52.0,377.0,97.0,530.0,96.0,1.0,45000.0,INLAND +-119.8,36.75,46.0,2625.0,593.0,1368.0,551.0,1.5273,59000.0,INLAND +-119.79,36.76,52.0,2408.0,498.0,1361.0,465.0,2.1055,61300.0,INLAND +-119.78,36.76,47.0,1425.0,323.0,949.0,325.0,1.7344,51300.0,INLAND +-119.78,36.75,49.0,1175.0,307.0,982.0,278.0,1.2937,52000.0,INLAND +-119.78,36.75,43.0,2070.0,512.0,1925.0,444.0,1.4635,46600.0,INLAND +-119.78,36.76,50.0,1343.0,322.0,1063.0,342.0,1.75,49800.0,INLAND +-119.76,36.76,23.0,3800.0,1003.0,3786.0,917.0,1.4766,50600.0,INLAND +-119.76,36.75,35.0,1607.0,383.0,1407.0,382.0,2.19,53400.0,INLAND +-119.76,36.75,41.0,1576.0,417.0,1567.0,366.0,1.2545,45500.0,INLAND +-119.77,36.76,40.0,2009.0,519.0,2219.0,505.0,1.2101,49100.0,INLAND +-119.77,36.76,43.0,1623.0,294.0,781.0,272.0,1.869,56000.0,INLAND +-119.77,36.76,43.0,1945.0,413.0,1492.0,422.0,1.5174,54600.0,INLAND +-119.76,36.75,35.0,2347.0,526.0,1676.0,481.0,1.6548,49400.0,INLAND +-119.76,36.74,52.0,2137.0,448.0,1194.0,444.0,1.3029,69100.0,INLAND +-119.77,36.74,50.0,1325.0,280.0,811.0,281.0,1.8667,62800.0,INLAND +-119.77,36.74,51.0,1454.0,235.0,729.0,252.0,3.3125,70100.0,INLAND +-119.77,36.75,44.0,1818.0,412.0,1680.0,418.0,1.7083,48300.0,INLAND +-119.76,36.75,39.0,2233.0,563.0,2031.0,491.0,1.8641,50800.0,INLAND +-119.74,36.75,47.0,2236.0,418.0,1042.0,397.0,2.9545,59600.0,INLAND +-119.74,36.74,39.0,4893.0,1210.0,4749.0,1067.0,1.2065,55600.0,INLAND +-119.75,36.74,39.0,1740.0,351.0,1098.0,347.0,1.8958,51300.0,INLAND +-119.75,36.75,50.0,1515.0,294.0,852.0,297.0,1.9955,54200.0,INLAND +-119.75,36.75,49.0,2331.0,460.0,1290.0,477.0,2.5111,55400.0,INLAND +-119.74,36.76,42.0,2093.0,470.0,1621.0,438.0,1.7994,58700.0,INLAND +-119.74,36.76,36.0,912.0,216.0,842.0,219.0,1.4766,52800.0,INLAND +-119.75,36.76,29.0,2077.0,524.0,1887.0,489.0,1.4107,59800.0,INLAND +-119.75,36.76,32.0,2072.0,497.0,2002.0,470.0,1.3278,44500.0,INLAND +-119.72,36.76,23.0,6403.0,,3573.0,1260.0,2.3006,69000.0,INLAND +-119.72,36.75,11.0,4832.0,993.0,2190.0,888.0,2.6611,74700.0,INLAND +-119.73,36.76,30.0,1548.0,282.0,886.0,311.0,3.1,71300.0,INLAND +-119.72,36.75,27.0,1691.0,282.0,869.0,337.0,3.9514,86900.0,INLAND +-119.73,36.74,14.0,6202.0,1551.0,5561.0,1435.0,1.6073,64700.0,INLAND +-119.73,36.75,39.0,1745.0,321.0,901.0,303.0,3.1719,67900.0,INLAND +-119.7,36.75,11.0,3626.0,779.0,1819.0,731.0,2.4956,87500.0,INLAND +-119.71,36.74,18.0,8099.0,1670.0,4476.0,1514.0,2.4728,88300.0,INLAND +-119.71,36.76,28.0,2675.0,527.0,1392.0,521.0,2.3108,72000.0,INLAND +-119.7,36.8,34.0,1768.0,303.0,888.0,314.0,3.8088,87700.0,INLAND +-119.71,36.79,34.0,1891.0,323.0,966.0,355.0,3.6681,82000.0,INLAND +-119.71,36.77,11.0,5112.0,1384.0,2487.0,1243.0,2.1461,75900.0,INLAND +-119.73,36.8,15.0,2376.0,538.0,1197.0,510.0,3.1417,74600.0,INLAND +-119.72,36.8,16.0,2396.0,526.0,1338.0,518.0,2.1653,78800.0,INLAND +-119.72,36.8,15.0,3045.0,689.0,1340.0,588.0,3.1953,85700.0,INLAND +-119.71,36.8,17.0,2056.0,366.0,1259.0,367.0,3.9338,84700.0,INLAND +-119.71,36.8,17.0,1415.0,267.0,861.0,293.0,3.25,81400.0,INLAND +-119.71,36.81,9.0,1122.0,290.0,662.0,284.0,2.0536,55000.0,INLAND +-119.7,36.8,31.0,1746.0,321.0,1186.0,360.0,2.6932,66400.0,INLAND +-119.71,36.8,25.0,875.0,156.0,646.0,166.0,3.0,72800.0,INLAND +-119.72,36.8,23.0,2128.0,442.0,1047.0,450.0,2.625,71500.0,INLAND +-119.73,36.8,24.0,1316.0,249.0,781.0,260.0,3.7578,69200.0,INLAND +-119.72,36.81,15.0,2175.0,564.0,1194.0,482.0,2.6767,87500.0,INLAND +-119.73,36.77,24.0,4410.0,939.0,2362.0,862.0,2.9406,73000.0,INLAND +-119.74,36.77,30.0,2427.0,482.0,1375.0,518.0,2.5737,76900.0,INLAND +-119.75,36.77,32.0,1962.0,399.0,1005.0,392.0,2.6726,70400.0,INLAND +-119.75,36.78,35.0,1129.0,220.0,474.0,242.0,2.4405,74300.0,INLAND +-119.75,36.78,33.0,1145.0,197.0,508.0,198.0,2.3333,81300.0,INLAND +-119.74,36.78,27.0,4049.0,947.0,2254.0,882.0,2.2467,70700.0,INLAND +-119.76,36.77,36.0,2507.0,466.0,1227.0,474.0,2.785,72300.0,INLAND +-119.76,36.77,38.0,3804.0,814.0,2142.0,816.0,2.1439,60200.0,INLAND +-119.77,36.77,38.0,3065.0,658.0,1441.0,625.0,2.0564,64700.0,INLAND +-119.77,36.78,36.0,3616.0,779.0,1994.0,786.0,2.5434,67300.0,INLAND +-119.77,36.78,40.0,1411.0,284.0,609.0,296.0,1.9375,67700.0,INLAND +-119.77,36.77,29.0,2554.0,705.0,2669.0,655.0,1.2176,61900.0,INLAND +-119.78,36.77,45.0,1315.0,256.0,666.0,240.0,2.3562,58100.0,INLAND +-119.78,36.78,37.0,2185.0,455.0,1143.0,438.0,1.9784,70700.0,INLAND +-119.79,36.77,30.0,1610.0,410.0,1000.0,397.0,2.0357,60200.0,INLAND +-119.8,36.77,52.0,2964.0,512.0,1114.0,486.0,3.8105,87600.0,INLAND +-119.8,36.78,50.0,1818.0,374.0,737.0,338.0,2.2614,73000.0,INLAND +-119.79,36.78,41.0,2227.0,462.0,1129.0,415.0,2.319,59100.0,INLAND +-119.79,36.77,43.0,2323.0,502.0,1144.0,471.0,2.3967,58700.0,INLAND +-119.81,36.78,52.0,2281.0,371.0,839.0,367.0,3.5972,89900.0,INLAND +-119.81,36.77,49.0,1749.0,314.0,705.0,300.0,3.15,72200.0,INLAND +-119.81,36.77,48.0,1805.0,329.0,741.0,331.0,2.5804,78900.0,INLAND +-119.81,36.77,43.0,2341.0,395.0,890.0,375.0,3.4265,85000.0,INLAND +-119.81,36.78,37.0,1965.0,364.0,796.0,335.0,3.625,83400.0,INLAND +-119.82,36.78,36.0,1370.0,289.0,812.0,282.0,2.6127,69600.0,INLAND +-119.82,36.77,41.0,1441.0,274.0,646.0,296.0,3.0568,71300.0,INLAND +-119.82,36.77,36.0,2252.0,468.0,1117.0,442.0,2.9081,65600.0,INLAND +-119.83,36.77,32.0,2867.0,615.0,1705.0,570.0,2.4286,68100.0,INLAND +-119.83,36.77,23.0,2168.0,503.0,1190.0,425.0,2.625,71600.0,INLAND +-119.83,36.78,30.0,3162.0,640.0,1660.0,639.0,2.8359,80300.0,INLAND +-119.87,36.79,8.0,2875.0,548.0,1718.0,551.0,3.6522,80200.0,INLAND +-119.87,36.79,7.0,1932.0,419.0,1014.0,389.0,3.0938,76700.0,INLAND +-119.89,36.79,5.0,3821.0,705.0,2179.0,694.0,3.7821,80400.0,INLAND +-119.87,36.78,4.0,6102.0,1114.0,3406.0,1115.0,3.4213,84500.0,INLAND +-119.85,36.78,8.0,3096.0,684.0,1454.0,545.0,2.7857,79700.0,INLAND +-119.86,36.78,7.0,2232.0,490.0,1274.0,499.0,2.9853,74700.0,INLAND +-119.85,36.77,9.0,1142.0,314.0,620.0,283.0,2.0446,81300.0,INLAND +-119.85,36.77,27.0,1510.0,344.0,847.0,295.0,2.9315,83200.0,INLAND +-119.85,36.76,10.0,2067.0,450.0,845.0,354.0,1.8214,80100.0,INLAND +-119.85,36.75,24.0,1143.0,245.0,608.0,240.0,2.8194,81100.0,INLAND +-119.87,36.76,34.0,1649.0,323.0,919.0,316.0,2.875,74500.0,INLAND +-119.9,36.79,22.0,1970.0,332.0,1066.0,319.0,3.3125,106100.0,INLAND +-119.89,36.76,17.0,1987.0,335.0,1152.0,313.0,4.1719,126400.0,INLAND +-119.92,36.77,18.0,1422.0,243.0,702.0,230.0,3.6204,119800.0,INLAND +-120.08,36.79,38.0,1446.0,285.0,928.0,255.0,2.9808,89600.0,INLAND +-120.21,36.77,20.0,1745.0,348.0,1093.0,302.0,2.3194,90600.0,INLAND +-120.1,36.66,19.0,2020.0,416.0,1341.0,360.0,1.7,69000.0,INLAND +-119.98,36.74,26.0,1453.0,251.0,896.0,260.0,3.4861,112500.0,INLAND +-120.0,36.7,33.0,1902.0,370.0,1168.0,358.0,2.6852,70800.0,INLAND +-120.04,36.74,14.0,3182.0,730.0,2298.0,721.0,1.6168,71800.0,INLAND +-120.05,36.72,24.0,1961.0,422.0,1559.0,374.0,1.8299,57800.0,INLAND +-120.08,36.72,22.0,1339.0,251.0,820.0,276.0,3.6,83200.0,INLAND +-120.06,36.72,32.0,981.0,237.0,736.0,249.0,1.8,60400.0,INLAND +-120.07,36.74,19.0,2627.0,502.0,1295.0,441.0,3.087,88200.0,INLAND +-119.95,36.8,30.0,1233.0,214.0,620.0,199.0,3.4297,112500.0,INLAND +-119.99,36.8,45.0,1270.0,242.0,598.0,214.0,3.2813,105400.0,INLAND +-120.02,36.8,25.0,1270.0,255.0,1050.0,245.0,2.1618,55300.0,INLAND +-120.04,36.79,48.0,1341.0,239.0,671.0,208.0,2.7917,82800.0,INLAND +-119.91,36.83,29.0,2205.0,366.0,1072.0,345.0,3.8056,165400.0,INLAND +-119.88,36.81,30.0,2288.0,474.0,1435.0,425.0,1.3221,61200.0,INLAND +-119.88,36.85,8.0,2580.0,372.0,1111.0,393.0,7.5,256200.0,INLAND +-119.87,36.83,4.0,4833.0,784.0,2088.0,789.0,5.1781,122500.0,INLAND +-119.85,36.83,15.0,2563.0,335.0,1080.0,356.0,6.7181,160300.0,INLAND +-119.85,36.83,11.0,2497.0,427.0,1101.0,405.0,4.8036,141600.0,INLAND +-119.86,36.82,12.0,1488.0,253.0,675.0,223.0,4.7622,89300.0,INLAND +-119.85,36.82,9.0,3995.0,778.0,1691.0,712.0,3.3239,91300.0,INLAND +-119.85,36.82,15.0,1387.0,236.0,638.0,195.0,5.5842,88900.0,INLAND +-119.85,36.82,16.0,1852.0,274.0,887.0,286.0,5.5405,119300.0,INLAND +-119.88,36.83,2.0,4055.0,735.0,1730.0,654.0,4.2132,96500.0,INLAND +-119.86,36.81,4.0,4530.0,1070.0,1804.0,837.0,3.3942,72100.0,INLAND +-119.87,36.81,6.0,1891.0,341.0,969.0,330.0,4.6726,107800.0,INLAND +-119.85,36.81,15.0,1743.0,310.0,1011.0,325.0,3.755,68000.0,INLAND +-119.85,36.8,14.0,1876.0,324.0,1031.0,311.0,3.6563,88800.0,INLAND +-119.85,36.8,14.0,4177.0,914.0,2300.0,867.0,2.9565,73000.0,INLAND +-119.86,36.8,18.0,2536.0,516.0,1196.0,466.0,2.5595,67900.0,INLAND +-119.84,36.85,8.0,3791.0,487.0,1424.0,475.0,10.5144,345900.0,INLAND +-119.85,36.84,12.0,2272.0,304.0,840.0,305.0,8.9669,213900.0,INLAND +-119.84,36.84,12.0,2396.0,290.0,863.0,258.0,8.7716,229200.0,INLAND +-119.84,36.83,17.0,2273.0,298.0,700.0,263.0,6.8645,195900.0,INLAND +-119.83,36.83,14.0,2351.0,341.0,1128.0,363.0,6.9903,141200.0,INLAND +-119.82,36.83,14.0,2982.0,412.0,1408.0,423.0,5.3241,123000.0,INLAND +-119.84,36.83,17.0,3012.0,408.0,987.0,362.0,7.4201,229700.0,INLAND +-119.82,36.83,16.0,2868.0,376.0,1016.0,379.0,6.1175,144700.0,INLAND +-119.84,36.82,17.0,2807.0,376.0,996.0,353.0,5.5357,167700.0,INLAND +-119.83,36.82,14.0,1087.0,165.0,365.0,176.0,7.2909,155600.0,INLAND +-119.82,36.82,28.0,2268.0,336.0,752.0,330.0,5.2809,151500.0,INLAND +-119.82,36.81,25.0,3305.0,551.0,1149.0,500.0,5.0698,150900.0,INLAND +-119.84,36.81,18.0,2789.0,378.0,937.0,364.0,7.7062,188300.0,INLAND +-119.78,36.86,10.0,2902.0,363.0,1200.0,363.0,8.3608,187300.0,INLAND +-119.77,36.86,7.0,4139.0,544.0,1843.0,562.0,8.2737,193500.0,INLAND +-119.77,36.85,8.0,1519.0,234.0,711.0,248.0,5.9897,123600.0,INLAND +-119.77,36.84,15.0,1924.0,262.0,848.0,277.0,5.3886,125300.0,INLAND +-119.77,36.84,15.0,2058.0,412.0,891.0,378.0,3.2569,124400.0,INLAND +-119.78,36.84,7.0,4907.0,1075.0,2014.0,909.0,3.2147,111900.0,INLAND +-119.78,36.85,12.0,782.0,166.0,292.0,164.0,2.8274,79500.0,INLAND +-119.78,36.86,8.0,3468.0,675.0,1604.0,626.0,4.2071,128300.0,INLAND +-119.79,36.85,11.0,2596.0,619.0,1765.0,539.0,1.9511,54000.0,INLAND +-119.79,36.84,22.0,1529.0,375.0,1543.0,395.0,1.7926,51700.0,INLAND +-119.8,36.86,7.0,6434.0,1201.0,2733.0,1045.0,3.7656,145000.0,INLAND +-119.81,36.85,17.0,2340.0,370.0,1174.0,396.0,4.2304,94400.0,INLAND +-119.82,36.84,7.0,2289.0,342.0,1077.0,354.0,5.4868,158800.0,INLAND +-119.82,36.84,9.0,2340.0,544.0,860.0,520.0,3.3229,119300.0,INLAND +-119.81,36.83,19.0,6789.0,1200.0,2325.0,1109.0,4.049,126000.0,INLAND +-119.81,36.83,10.0,5780.0,922.0,2712.0,883.0,5.6445,135500.0,INLAND +-119.78,36.83,11.0,2754.0,663.0,1328.0,604.0,2.3667,69300.0,INLAND +-119.79,36.82,25.0,2330.0,462.0,1215.0,467.0,3.2143,93000.0,INLAND +-119.8,36.83,17.0,1560.0,261.0,709.0,258.0,4.3315,95800.0,INLAND +-119.79,36.83,15.0,3356.0,694.0,1232.0,627.0,2.2215,72200.0,INLAND +-119.79,36.82,23.0,4358.0,819.0,1852.0,802.0,3.4167,105200.0,INLAND +-119.78,36.82,22.0,4241.0,1147.0,1929.0,971.0,1.7708,53500.0,INLAND +-119.8,36.82,24.0,5377.0,1005.0,2010.0,982.0,3.4542,121200.0,INLAND +-119.81,36.81,33.0,3972.0,594.0,1324.0,561.0,5.4513,143300.0,INLAND +-119.8,36.8,43.0,1951.0,288.0,725.0,308.0,6.3359,169300.0,INLAND +-119.81,36.8,38.0,2252.0,325.0,777.0,314.0,6.1575,160100.0,INLAND +-119.83,36.8,24.0,3756.0,681.0,1586.0,739.0,3.8571,90100.0,INLAND +-119.82,36.8,33.0,1670.0,256.0,528.0,250.0,2.9471,99500.0,INLAND +-119.81,36.8,29.0,2806.0,552.0,1242.0,540.0,3.5958,88800.0,INLAND +-119.83,36.8,16.0,6101.0,1200.0,3407.0,1134.0,3.125,80800.0,INLAND +-119.84,36.8,16.0,2849.0,506.0,1508.0,478.0,3.4074,72700.0,INLAND +-119.84,36.8,19.0,3244.0,776.0,1463.0,710.0,2.0469,66900.0,INLAND +-119.83,36.79,35.0,1872.0,363.0,1054.0,369.0,3.3272,65600.0,INLAND +-119.83,36.78,35.0,1789.0,357.0,933.0,357.0,2.5223,66200.0,INLAND +-119.84,36.78,24.0,3242.0,795.0,2764.0,773.0,1.3385,58800.0,INLAND +-119.84,36.79,21.0,3235.0,648.0,1820.0,614.0,3.3447,71400.0,INLAND +-119.83,36.79,24.0,3505.0,819.0,2098.0,774.0,1.9575,67000.0,INLAND +-119.81,36.78,35.0,1012.0,245.0,633.0,240.0,2.0324,55500.0,INLAND +-119.81,36.78,36.0,1650.0,313.0,660.0,298.0,3.0,79700.0,INLAND +-119.82,36.78,36.0,1582.0,313.0,761.0,318.0,2.6055,69200.0,INLAND +-119.82,36.79,35.0,1474.0,291.0,709.0,294.0,2.6522,65900.0,INLAND +-119.82,36.79,18.0,5822.0,1439.0,3415.0,1224.0,1.6854,64700.0,INLAND +-119.81,36.79,35.0,2314.0,443.0,954.0,457.0,2.9506,73800.0,INLAND +-119.79,36.79,33.0,3433.0,785.0,1806.0,783.0,1.9386,67500.0,INLAND +-119.79,36.78,38.0,1912.0,456.0,1131.0,408.0,2.03,58800.0,INLAND +-119.8,36.78,43.0,2382.0,431.0,874.0,380.0,3.5542,96500.0,INLAND +-119.81,36.79,39.0,2471.0,460.0,1118.0,431.0,2.4167,71900.0,INLAND +-119.8,36.79,45.0,1337.0,187.0,471.0,187.0,5.187,153800.0,INLAND +-119.79,36.81,35.0,1877.0,328.0,1155.0,353.0,3.069,69600.0,INLAND +-119.78,36.8,34.0,2200.0,493.0,1243.0,431.0,1.8514,66500.0,INLAND +-119.79,36.8,27.0,2462.0,484.0,852.0,449.0,3.32,124700.0,INLAND +-119.79,36.81,33.0,1461.0,261.0,494.0,254.0,4.25,132200.0,INLAND +-119.77,36.79,34.0,2679.0,460.0,1141.0,470.0,3.2642,89600.0,INLAND +-119.78,36.78,31.0,2164.0,456.0,959.0,463.0,2.3293,73400.0,INLAND +-119.79,36.79,26.0,1700.0,423.0,909.0,386.0,2.256,64500.0,INLAND +-119.79,36.79,19.0,1524.0,448.0,960.0,386.0,1.5122,47500.0,INLAND +-119.78,36.79,33.0,2260.0,440.0,966.0,413.0,2.9301,68300.0,INLAND +-119.76,36.79,26.0,3654.0,837.0,1976.0,830.0,2.1544,72800.0,INLAND +-119.76,36.78,30.0,6117.0,1330.0,2768.0,1224.0,2.1383,78800.0,INLAND +-119.77,36.79,27.0,2258.0,427.0,1076.0,423.0,2.9937,81100.0,INLAND +-119.76,36.79,32.0,2463.0,468.0,1261.0,486.0,3.3281,75100.0,INLAND +-119.74,36.79,28.0,2857.0,619.0,1614.0,592.0,2.1573,71400.0,INLAND +-119.75,36.78,28.0,3257.0,752.0,1981.0,712.0,2.293,71700.0,INLAND +-119.76,36.8,29.0,3494.0,662.0,1781.0,616.0,2.5893,70900.0,INLAND +-119.77,36.8,32.0,3461.0,665.0,1507.0,649.0,2.9244,84600.0,INLAND +-119.78,36.8,34.0,3426.0,623.0,1938.0,647.0,2.8994,66000.0,INLAND +-119.76,36.8,20.0,6257.0,1346.0,2795.0,1267.0,2.2094,83700.0,INLAND +-119.77,36.8,24.0,3748.0,770.0,1827.0,719.0,2.7222,83100.0,INLAND +-119.74,36.8,18.0,10862.0,2401.0,5466.0,2209.0,2.4678,74300.0,INLAND +-119.75,36.8,25.0,2718.0,504.0,1257.0,465.0,2.3333,90600.0,INLAND +-119.75,36.8,30.0,3308.0,662.0,1894.0,648.0,2.197,74500.0,INLAND +-119.76,36.81,19.0,4643.0,1429.0,4638.0,1335.0,1.2716,69400.0,INLAND +-119.77,36.81,25.0,1565.0,271.0,661.0,275.0,3.4279,84700.0,INLAND +-119.76,36.82,17.0,6932.0,1486.0,3056.0,1453.0,2.3375,99300.0,INLAND +-119.77,36.81,28.0,1713.0,302.0,663.0,282.0,3.567,85500.0,INLAND +-119.78,36.82,25.0,5016.0,,2133.0,928.0,3.625,89500.0,INLAND +-119.78,36.83,18.0,4164.0,741.0,1817.0,681.0,4.2153,95200.0,INLAND +-119.76,36.83,22.0,2803.0,438.0,1234.0,457.0,4.5179,99600.0,INLAND +-119.76,36.83,20.0,3214.0,446.0,1360.0,463.0,5.2595,110900.0,INLAND +-119.77,36.83,19.0,3237.0,507.0,1378.0,510.0,4.7804,101100.0,INLAND +-119.77,36.83,16.0,2360.0,355.0,1034.0,359.0,5.0635,108500.0,INLAND +-119.76,36.83,17.0,3690.0,628.0,1888.0,601.0,4.0196,84200.0,INLAND +-119.75,36.83,15.0,2793.0,436.0,1411.0,441.0,4.9292,109400.0,INLAND +-119.74,36.83,14.0,4675.0,829.0,2235.0,787.0,4.1098,108200.0,INLAND +-119.77,36.91,3.0,7520.0,1143.0,2878.0,1077.0,5.3272,174200.0,INLAND +-119.75,36.87,3.0,13802.0,2244.0,5226.0,1972.0,5.0941,143700.0,INLAND +-119.74,36.85,3.0,10425.0,2121.0,4432.0,1778.0,3.9032,140800.0,INLAND +-119.7,36.94,15.0,1449.0,277.0,649.0,265.0,2.4861,86300.0,INLAND +-119.71,36.88,17.0,2236.0,315.0,992.0,312.0,6.9405,165200.0,INLAND +-119.69,36.86,20.0,1676.0,263.0,786.0,240.0,4.0,164600.0,INLAND +-119.69,36.85,20.0,2655.0,432.0,1081.0,379.0,4.5398,143100.0,INLAND +-119.67,36.89,15.0,2373.0,364.0,1280.0,386.0,5.308,167500.0,INLAND +-119.7,36.83,23.0,3532.0,756.0,1885.0,758.0,2.5904,71400.0,INLAND +-119.7,36.82,25.0,2379.0,540.0,1482.0,484.0,2.3173,68200.0,INLAND +-119.7,36.81,32.0,2623.0,528.0,1570.0,492.0,2.7159,68000.0,INLAND +-119.71,36.83,5.0,1087.0,338.0,623.0,362.0,1.8061,113400.0,INLAND +-119.71,36.83,15.0,2727.0,500.0,1228.0,436.0,3.5078,109000.0,INLAND +-119.73,36.83,8.0,3602.0,,1959.0,580.0,5.3478,138800.0,INLAND +-119.73,36.83,14.0,3348.0,491.0,1584.0,493.0,5.0828,111400.0,INLAND +-119.71,36.82,12.0,2144.0,568.0,1320.0,566.0,2.3381,112500.0,INLAND +-119.71,36.81,19.0,2282.0,550.0,1034.0,500.0,1.6618,69700.0,INLAND +-119.71,36.81,19.0,1648.0,368.0,557.0,354.0,1.7969,72800.0,INLAND +-119.72,36.81,28.0,1651.0,305.0,780.0,309.0,2.9453,72200.0,INLAND +-119.73,36.81,19.0,1699.0,356.0,994.0,368.0,2.7778,79700.0,INLAND +-119.72,36.82,16.0,2627.0,613.0,1054.0,623.0,1.9483,112500.0,INLAND +-119.72,36.82,15.0,946.0,239.0,550.0,246.0,2.2639,52500.0,INLAND +-119.69,36.83,7.0,2075.0,353.0,1040.0,362.0,3.9943,100200.0,INLAND +-119.69,36.83,8.0,943.0,189.0,475.0,155.0,4.9327,89500.0,INLAND +-119.69,36.83,32.0,1098.0,,726.0,224.0,1.4913,54600.0,INLAND +-119.69,36.83,28.0,1868.0,350.0,898.0,329.0,3.1814,78900.0,INLAND +-119.67,36.83,3.0,2029.0,336.0,1003.0,340.0,4.4356,111300.0,INLAND +-119.67,36.83,4.0,2145.0,334.0,1024.0,308.0,5.0864,113700.0,INLAND +-119.68,36.83,11.0,2455.0,344.0,1110.0,339.0,6.1133,120000.0,INLAND +-119.67,36.82,2.0,2579.0,376.0,1133.0,342.0,4.5577,123300.0,INLAND +-119.67,36.81,4.0,1262.0,216.0,622.0,199.0,4.9432,114400.0,INLAND +-119.68,36.81,13.0,2589.0,413.0,1356.0,435.0,5.0253,106200.0,INLAND +-119.69,36.82,17.0,1897.0,433.0,1207.0,384.0,1.8021,55900.0,INLAND +-119.69,36.82,15.0,3303.0,512.0,1687.0,505.0,4.81,93600.0,INLAND +-119.68,36.81,16.0,2668.0,454.0,1536.0,457.0,3.9792,88900.0,INLAND +-119.69,36.81,13.0,1524.0,366.0,994.0,370.0,2.5446,93800.0,INLAND +-119.69,36.81,15.0,2892.0,496.0,1634.0,501.0,4.4934,88000.0,INLAND +-119.68,36.8,7.0,2855.0,518.0,1748.0,498.0,4.2066,88400.0,INLAND +-119.69,36.8,31.0,2576.0,458.0,1306.0,418.0,3.2813,68700.0,INLAND +-119.67,36.8,9.0,3712.0,508.0,1632.0,474.0,6.011,163100.0,INLAND +-119.69,36.79,13.0,1736.0,313.0,993.0,314.0,3.7697,83600.0,INLAND +-119.68,36.79,16.0,1551.0,,1010.0,292.0,3.5417,71300.0,INLAND +-119.69,36.79,15.0,2524.0,451.0,1207.0,424.0,2.7404,76300.0,INLAND +-119.69,36.77,22.0,2456.0,496.0,1720.0,417.0,2.6875,60600.0,INLAND +-119.69,36.79,5.0,2613.0,476.0,1490.0,481.0,4.0993,83000.0,INLAND +-119.68,36.77,21.0,1260.0,182.0,583.0,205.0,6.0132,150800.0,INLAND +-119.64,36.85,15.0,2397.0,353.0,1258.0,347.0,4.9904,157300.0,INLAND +-119.64,36.82,14.0,4872.0,656.0,2085.0,617.0,5.6739,173800.0,INLAND +-119.63,36.79,19.0,1317.0,189.0,517.0,187.0,4.526,148700.0,INLAND +-119.63,36.76,22.0,4126.0,614.0,1795.0,613.0,4.925,154700.0,INLAND +-119.63,36.7,42.0,1338.0,215.0,617.0,222.0,3.0833,133300.0,INLAND +-119.53,36.78,20.0,2822.0,479.0,1372.0,455.0,4.5625,136900.0,INLAND +-119.58,36.83,13.0,6135.0,863.0,2473.0,774.0,5.4895,156700.0,INLAND +-119.58,36.77,19.0,3225.0,548.0,1760.0,542.0,4.0227,126500.0,INLAND +-119.59,36.72,18.0,1284.0,193.0,621.0,190.0,4.5375,130600.0,INLAND +-119.5,36.74,20.0,1089.0,208.0,531.0,212.0,4.5938,106900.0,INLAND +-119.57,36.72,11.0,2510.0,460.0,1248.0,445.0,3.6161,99500.0,INLAND +-119.56,36.71,29.0,1963.0,392.0,1208.0,398.0,2.5741,73000.0,INLAND +-119.56,36.71,37.0,1609.0,374.0,1173.0,344.0,2.181,59900.0,INLAND +-119.57,36.71,10.0,1657.0,359.0,958.0,380.0,2.6458,84800.0,INLAND +-119.57,36.7,34.0,1759.0,354.0,899.0,337.0,2.6823,72900.0,INLAND +-119.56,36.7,40.0,1195.0,326.0,1135.0,315.0,2.1182,58900.0,INLAND +-119.55,36.7,31.0,1671.0,372.0,1371.0,347.0,2.3687,63900.0,INLAND +-119.57,36.7,30.0,2370.0,412.0,1248.0,410.0,3.1442,72300.0,INLAND +-119.57,36.7,7.0,1761.0,309.0,974.0,308.0,3.7261,83900.0,INLAND +-119.58,36.69,42.0,1032.0,215.0,812.0,225.0,1.9766,58100.0,INLAND +-119.55,36.69,21.0,1551.0,423.0,1519.0,406.0,1.7132,55900.0,INLAND +-119.54,36.7,20.0,1815.0,375.0,1665.0,357.0,2.2448,58900.0,INLAND +-119.55,36.71,32.0,1963.0,508.0,2052.0,518.0,1.9076,55800.0,INLAND +-119.55,36.72,6.0,1186.0,234.0,1135.0,218.0,2.1515,63900.0,INLAND +-119.52,36.71,21.0,1834.0,321.0,1120.0,314.0,2.59,69300.0,INLAND +-119.47,36.69,19.0,3351.0,589.0,1578.0,542.0,3.2917,160100.0,INLAND +-119.41,36.68,18.0,1802.0,332.0,945.0,292.0,3.4044,115300.0,INLAND +-119.43,36.63,25.0,1784.0,312.0,904.0,303.0,3.625,107600.0,INLAND +-119.39,36.64,38.0,949.0,190.0,578.0,187.0,2.3618,80000.0,INLAND +-119.4,36.59,37.0,1486.0,296.0,977.0,290.0,3.5074,93800.0,INLAND +-119.49,37.1,24.0,2532.0,555.0,1564.0,507.0,2.3359,92400.0,INLAND +-119.61,36.94,14.0,863.0,151.0,315.0,135.0,4.2679,151800.0,INLAND +-119.57,37.02,16.0,4199.0,794.0,2140.0,722.0,3.332,111800.0,INLAND +-119.48,37.0,16.0,2904.0,551.0,1467.0,509.0,3.1736,111800.0,INLAND +-119.46,36.91,12.0,2980.0,495.0,1184.0,429.0,3.9141,123900.0,INLAND +-119.33,36.89,15.0,1879.0,411.0,755.0,294.0,2.0,83300.0,INLAND +-119.21,37.25,44.0,3042.0,697.0,335.0,115.0,4.1838,85600.0,INLAND +-118.94,37.13,12.0,2255.0,472.0,1006.0,334.0,4.1563,94000.0,INLAND +-119.4,37.09,22.0,2211.0,477.0,773.0,288.0,3.3269,102700.0,INLAND +-119.34,37.12,23.0,1881.0,380.0,64.0,37.0,3.875,125000.0,INLAND +-119.28,37.11,34.0,1901.0,394.0,171.0,73.0,3.0729,144600.0,INLAND +-119.32,37.06,15.0,3111.0,651.0,276.0,107.0,5.1314,179200.0,INLAND +-118.91,36.79,19.0,1616.0,324.0,187.0,80.0,3.7857,78600.0,INLAND +-119.24,36.8,17.0,2052.0,405.0,975.0,340.0,2.6902,94400.0,INLAND +-119.25,36.71,13.0,2813.0,579.0,1385.0,512.0,2.2202,100000.0,INLAND +-119.12,36.69,13.0,3963.0,812.0,1905.0,671.0,2.2278,90500.0,INLAND +-119.34,36.62,26.0,1922.0,339.0,1148.0,332.0,2.6058,92200.0,INLAND +-119.31,36.63,26.0,1874.0,416.0,1834.0,432.0,1.6486,55200.0,INLAND +-119.31,36.62,33.0,1485.0,374.0,1544.0,329.0,1.7292,52000.0,INLAND +-119.32,36.62,15.0,1070.0,256.0,1070.0,243.0,1.5642,51500.0,INLAND +-119.31,36.62,25.0,831.0,230.0,947.0,244.0,1.4481,51700.0,INLAND +-119.43,36.61,19.0,1484.0,296.0,1296.0,298.0,2.4219,65800.0,INLAND +-119.44,36.6,5.0,2353.0,608.0,2505.0,573.0,2.2863,69200.0,INLAND +-119.44,36.6,34.0,864.0,184.0,579.0,171.0,2.0417,72500.0,INLAND +-119.45,36.6,42.0,510.0,88.0,247.0,99.0,2.5,73000.0,INLAND +-119.46,36.61,13.0,1348.0,258.0,719.0,246.0,3.625,108300.0,INLAND +-119.45,36.61,24.0,1302.0,,693.0,243.0,3.7917,90500.0,INLAND +-119.44,36.61,17.0,1531.0,280.0,775.0,246.0,3.9073,91600.0,INLAND +-119.43,36.59,15.0,1371.0,306.0,1266.0,309.0,1.767,63300.0,INLAND +-119.44,36.59,32.0,1153.0,236.0,761.0,241.0,2.825,67600.0,INLAND +-119.45,36.6,36.0,2294.0,489.0,1430.0,454.0,1.8975,60900.0,INLAND +-119.44,36.59,28.0,1343.0,330.0,1331.0,305.0,1.516,56700.0,INLAND +-119.46,36.6,18.0,1404.0,226.0,754.0,229.0,3.9844,118100.0,INLAND +-119.45,36.59,41.0,1749.0,342.0,1171.0,314.0,1.6875,66100.0,INLAND +-119.44,36.58,37.0,1054.0,,879.0,257.0,2.5234,63500.0,INLAND +-119.45,36.58,18.0,1425.0,280.0,753.0,266.0,3.7813,87300.0,INLAND +-119.45,36.59,28.0,1274.0,215.0,572.0,202.0,3.825,84200.0,INLAND +-119.55,36.6,18.0,2379.0,448.0,1638.0,436.0,2.309,57100.0,INLAND +-119.54,36.61,20.0,1490.0,318.0,1474.0,326.0,1.4937,54700.0,INLAND +-119.55,36.61,14.0,3004.0,793.0,3535.0,735.0,1.586,56900.0,INLAND +-119.5,36.62,34.0,1440.0,267.0,1018.0,265.0,2.2206,63400.0,INLAND +-119.49,36.58,21.0,2106.0,410.0,867.0,380.0,1.9913,95300.0,INLAND +-119.52,36.61,33.0,1225.0,275.0,1065.0,248.0,1.8958,55100.0,INLAND +-119.53,36.61,33.0,587.0,170.0,730.0,162.0,1.5625,55800.0,INLAND +-119.6,36.66,27.0,1388.0,296.0,1056.0,284.0,1.6094,55200.0,INLAND +-119.59,36.64,27.0,823.0,171.0,798.0,200.0,3.0521,113800.0,INLAND +-119.53,36.65,43.0,1676.0,320.0,1056.0,276.0,2.5562,93200.0,INLAND +-119.63,36.6,33.0,1589.0,294.0,1102.0,307.0,1.9676,62400.0,INLAND +-119.62,36.58,13.0,1788.0,405.0,1652.0,411.0,2.6858,62400.0,INLAND +-119.59,36.57,19.0,1733.0,303.0,911.0,281.0,3.5987,131700.0,INLAND +-119.6,36.58,28.0,1452.0,300.0,919.0,308.0,2.8287,73100.0,INLAND +-119.61,36.58,29.0,1312.0,280.0,788.0,271.0,2.6974,73000.0,INLAND +-119.62,36.59,17.0,2287.0,390.0,1330.0,393.0,4.0197,88000.0,INLAND +-119.61,36.59,10.0,2842.0,620.0,1443.0,576.0,2.2727,92700.0,INLAND +-119.6,36.57,42.0,2311.0,439.0,1347.0,436.0,2.5556,69700.0,INLAND +-119.6,36.57,33.0,1923.0,403.0,1205.0,389.0,1.8333,68300.0,INLAND +-119.61,36.57,42.0,2242.0,521.0,1359.0,483.0,1.5833,65100.0,INLAND +-119.63,36.58,22.0,1794.0,435.0,1127.0,359.0,1.2647,55300.0,INLAND +-119.6,36.56,36.0,738.0,168.0,737.0,186.0,1.4415,54400.0,INLAND +-119.64,36.56,34.0,576.0,117.0,363.0,97.0,2.0658,92500.0,INLAND +-119.61,36.56,34.0,1911.0,497.0,1886.0,481.0,1.625,53000.0,INLAND +-119.62,36.56,30.0,1722.0,372.0,1467.0,403.0,1.8878,51600.0,INLAND +-119.53,36.55,34.0,2065.0,343.0,1041.0,313.0,3.2917,111500.0,INLAND +-119.54,36.52,16.0,2703.0,415.0,1106.0,372.0,4.2045,120900.0,INLAND +-119.55,36.51,46.0,1889.0,390.0,971.0,403.0,2.2132,76600.0,INLAND +-119.56,36.51,37.0,1018.0,213.0,663.0,204.0,1.6635,67000.0,INLAND +-119.56,36.51,9.0,3860.0,809.0,2157.0,770.0,2.5033,70100.0,INLAND +-119.55,36.52,31.0,1986.0,417.0,1042.0,422.0,3.0294,70200.0,INLAND +-119.56,36.53,19.0,2746.0,495.0,1670.0,518.0,3.2019,95700.0,INLAND +-119.73,36.56,32.0,1513.0,272.0,1038.0,272.0,3.0469,82700.0,INLAND +-119.67,36.57,32.0,1604.0,292.0,868.0,276.0,2.1908,110000.0,INLAND +-119.65,36.51,30.0,1671.0,319.0,966.0,282.0,3.1333,100000.0,INLAND +-119.59,36.52,35.0,990.0,192.0,674.0,178.0,3.3214,101600.0,INLAND +-119.73,36.52,20.0,1741.0,331.0,1466.0,289.0,2.5921,94200.0,INLAND +-119.77,36.44,26.0,1727.0,289.0,802.0,259.0,3.2083,75000.0,INLAND +-119.69,36.46,29.0,1702.0,301.0,914.0,280.0,2.8125,79200.0,INLAND +-119.69,36.43,29.0,1799.0,356.0,1278.0,387.0,1.7813,57900.0,INLAND +-119.87,36.54,34.0,1370.0,287.0,818.0,269.0,2.4044,72500.0,INLAND +-119.79,36.55,32.0,1393.0,276.0,999.0,245.0,2.0216,76800.0,INLAND +-119.81,36.51,31.0,1241.0,254.0,767.0,226.0,2.7321,83600.0,INLAND +-119.84,36.54,19.0,1310.0,241.0,702.0,217.0,2.4375,78200.0,INLAND +-119.83,36.54,31.0,1732.0,332.0,979.0,294.0,2.5208,60000.0,INLAND +-119.89,36.64,34.0,1422.0,237.0,716.0,222.0,2.975,90000.0,INLAND +-119.97,36.57,17.0,1497.0,308.0,1425.0,247.0,2.0313,69400.0,INLAND +-119.9,36.58,20.0,1935.0,363.0,1319.0,359.0,2.4814,74600.0,INLAND +-119.81,36.6,24.0,2246.0,462.0,1291.0,394.0,2.4006,76400.0,INLAND +-119.86,36.45,19.0,2439.0,462.0,1416.0,469.0,2.4474,75600.0,INLAND +-119.86,36.43,34.0,1175.0,251.0,683.0,261.0,1.7176,58400.0,INLAND +-119.85,36.43,23.0,1824.0,354.0,1146.0,362.0,2.8913,60900.0,INLAND +-119.97,36.44,18.0,1128.0,237.0,772.0,220.0,2.1771,39200.0,INLAND +-120.08,36.34,18.0,1524.0,414.0,2030.0,356.0,2.1153,112500.0,INLAND +-120.1,36.16,17.0,598.0,160.0,715.0,146.0,2.3295,55000.0,INLAND +-120.1,36.21,12.0,1462.0,356.0,1708.0,367.0,1.5086,64700.0,INLAND +-120.09,36.19,12.0,1923.0,559.0,2809.0,535.0,1.4191,55100.0,INLAND +-120.27,36.29,11.0,1337.0,412.0,1376.0,318.0,2.4398,87500.0,INLAND +-120.43,36.18,29.0,579.0,116.0,218.0,99.0,2.1458,104200.0,INLAND +-120.37,36.16,36.0,613.0,124.0,310.0,124.0,3.0658,65000.0,INLAND +-120.36,36.14,18.0,1206.0,274.0,622.0,217.0,1.8264,62000.0,INLAND +-120.38,36.15,17.0,2279.0,448.0,1200.0,420.0,2.7461,70000.0,INLAND +-120.37,36.13,10.0,2522.0,533.0,1335.0,493.0,3.2639,86400.0,INLAND +-120.37,36.15,34.0,2084.0,339.0,868.0,347.0,4.381,86300.0,INLAND +-120.35,36.16,18.0,1519.0,296.0,846.0,272.0,2.7792,85300.0,INLAND +-120.35,36.14,9.0,2671.0,647.0,1484.0,541.0,1.7075,60400.0,INLAND +-120.36,36.13,29.0,1938.0,434.0,1306.0,415.0,3.0134,55500.0,INLAND +-120.31,36.65,24.0,943.0,209.0,514.0,156.0,2.25,76600.0,INLAND +-120.25,36.65,31.0,1177.0,221.0,744.0,223.0,2.4937,66000.0,INLAND +-120.18,36.59,25.0,948.0,198.0,613.0,171.0,2.3026,90600.0,INLAND +-120.19,36.61,29.0,1479.0,338.0,1408.0,322.0,2.293,57200.0,INLAND +-120.19,36.6,25.0,875.0,214.0,931.0,214.0,1.5536,58300.0,INLAND +-120.22,36.49,14.0,1508.0,347.0,1679.0,345.0,2.4786,56000.0,INLAND +-120.41,36.77,24.0,1335.0,312.0,1180.0,267.0,1.947,68900.0,INLAND +-120.67,36.72,18.0,819.0,198.0,996.0,198.0,2.5,112500.0,INLAND +-120.51,36.55,20.0,1193.0,263.0,1274.0,241.0,1.9417,38800.0,INLAND +-120.39,36.78,11.0,1947.0,488.0,2104.0,486.0,1.7184,55200.0,INLAND +-120.38,36.75,25.0,1689.0,495.0,1745.0,457.0,1.9056,60000.0,INLAND +-120.38,36.76,25.0,991.0,272.0,941.0,262.0,1.8125,58000.0,INLAND +-120.38,36.76,12.0,932.0,244.0,1043.0,243.0,1.4038,54300.0,INLAND +-120.46,36.87,20.0,1287.0,310.0,954.0,269.0,1.3386,63000.0,INLAND +-120.45,36.86,34.0,673.0,173.0,539.0,182.0,2.3523,66000.0,INLAND +-120.44,36.84,29.0,1563.0,293.0,883.0,288.0,2.8182,90500.0,INLAND +-120.45,36.85,20.0,1519.0,376.0,1681.0,370.0,2.1759,58100.0,INLAND +-120.51,36.86,21.0,1779.0,399.0,1446.0,371.0,2.4414,71900.0,INLAND +-120.55,36.97,42.0,1766.0,344.0,1084.0,323.0,2.3295,74400.0,INLAND +-120.69,36.84,18.0,902.0,195.0,771.0,174.0,2.2083,55000.0,INLAND +-119.55,36.51,46.0,55.0,11.0,26.0,5.0,4.125,67500.0,INLAND +-119.54,36.51,36.0,49.0,7.0,28.0,2.0,4.625,162500.0,INLAND +-122.2,39.75,18.0,2603.0,576.0,1616.0,588.0,2.0192,63700.0,INLAND +-122.18,39.75,30.0,4157.0,834.0,1885.0,774.0,1.6948,67500.0,INLAND +-122.16,39.74,20.0,707.0,126.0,337.0,125.0,3.0469,85000.0,INLAND +-122.19,39.74,39.0,4179.0,814.0,2111.0,809.0,2.3507,65600.0,INLAND +-122.25,39.79,16.0,2127.0,412.0,1104.0,369.0,3.0469,72200.0,INLAND +-122.16,39.78,32.0,1288.0,221.0,562.0,203.0,2.325,69600.0,INLAND +-122.13,39.74,20.0,1401.0,280.0,668.0,250.0,2.2569,94300.0,INLAND +-122.18,39.7,23.0,1658.0,307.0,836.0,297.0,3.35,85400.0,INLAND +-122.23,39.75,16.0,2026.0,396.0,1031.0,382.0,1.9375,73100.0,INLAND +-122.74,39.71,16.0,255.0,73.0,85.0,38.0,1.6607,14999.0,INLAND +-122.38,39.68,21.0,1155.0,210.0,510.0,175.0,2.3851,67500.0,INLAND +-122.14,39.65,33.0,419.0,77.0,190.0,67.0,3.6429,87500.0,INLAND +-122.18,39.55,28.0,1471.0,259.0,673.0,246.0,3.25,81600.0,INLAND +-122.53,39.5,25.0,1231.0,240.0,658.0,211.0,2.4861,71900.0,INLAND +-122.19,39.53,34.0,2679.0,533.0,1287.0,505.0,2.165,58700.0,INLAND +-122.2,39.53,22.0,3265.0,658.0,1647.0,594.0,2.3566,71000.0,INLAND +-122.23,39.53,8.0,1268.0,336.0,1237.0,326.0,1.3708,125000.0,INLAND +-122.22,39.51,17.0,1201.0,268.0,555.0,277.0,2.1,66900.0,INLAND +-122.2,39.52,39.0,2551.0,482.0,1181.0,437.0,2.0625,63400.0,INLAND +-122.2,39.51,37.0,2358.0,413.0,1060.0,424.0,2.8333,69700.0,INLAND +-122.19,39.5,23.0,462.0,97.0,261.0,90.0,2.1705,53000.0,INLAND +-122.04,39.72,23.0,2502.0,481.0,1443.0,455.0,2.5625,70000.0,INLAND +-122.05,39.6,34.0,2051.0,342.0,958.0,322.0,2.8466,95300.0,INLAND +-122.1,39.47,43.0,1320.0,215.0,512.0,197.0,2.4917,77100.0,INLAND +-121.94,39.45,39.0,844.0,161.0,535.0,165.0,1.832,70500.0,INLAND +-122.01,39.74,20.0,2332.0,518.0,1856.0,495.0,2.1746,58700.0,INLAND +-124.17,40.8,52.0,661.0,316.0,392.0,244.0,0.957,60000.0,NEAR OCEAN +-124.16,40.8,52.0,2416.0,618.0,1150.0,571.0,1.7308,80500.0,NEAR OCEAN +-124.16,40.79,52.0,1264.0,277.0,591.0,284.0,1.7778,76900.0,NEAR OCEAN +-124.17,40.8,52.0,1606.0,419.0,891.0,367.0,1.585,75500.0,NEAR OCEAN +-124.17,40.8,52.0,1557.0,344.0,758.0,319.0,1.8529,62500.0,NEAR OCEAN +-124.16,40.79,52.0,2148.0,421.0,975.0,430.0,2.2566,92700.0,NEAR OCEAN +-124.16,40.78,50.0,2285.0,403.0,837.0,353.0,2.5417,85400.0,NEAR OCEAN +-124.17,40.78,39.0,1606.0,330.0,731.0,327.0,1.6369,68300.0,NEAR OCEAN +-124.19,40.78,37.0,1371.0,319.0,640.0,260.0,1.8242,70000.0,NEAR OCEAN +-124.18,40.79,39.0,1836.0,352.0,883.0,337.0,1.745,70500.0,NEAR OCEAN +-124.18,40.79,40.0,1398.0,311.0,788.0,279.0,1.4668,64600.0,NEAR OCEAN +-124.17,40.79,43.0,2285.0,479.0,1169.0,482.0,1.9688,70500.0,NEAR OCEAN +-124.16,40.78,43.0,2241.0,446.0,932.0,395.0,2.9038,82000.0,NEAR OCEAN +-124.16,40.77,35.0,2141.0,438.0,1053.0,434.0,2.8529,85600.0,NEAR OCEAN +-124.17,40.77,30.0,1895.0,366.0,990.0,359.0,2.2227,81300.0,NEAR OCEAN +-124.18,40.78,37.0,1453.0,293.0,867.0,310.0,2.5536,70200.0,NEAR OCEAN +-124.18,40.78,33.0,1076.0,222.0,656.0,236.0,2.5096,72200.0,NEAR OCEAN +-124.18,40.78,34.0,1592.0,364.0,950.0,317.0,2.1607,67000.0,NEAR OCEAN +-124.17,40.75,13.0,2171.0,339.0,951.0,353.0,4.8516,116100.0,NEAR OCEAN +-124.17,40.76,26.0,1776.0,361.0,992.0,380.0,2.8056,82800.0,NEAR OCEAN +-124.19,40.77,30.0,2975.0,634.0,1367.0,583.0,2.442,69000.0,NEAR OCEAN +-124.15,40.81,50.0,340.0,74.0,235.0,83.0,1.75,67500.0,NEAR OCEAN +-124.14,40.8,32.0,1373.0,312.0,872.0,306.0,2.5,72600.0,NEAR OCEAN +-124.15,40.8,47.0,1486.0,335.0,765.0,329.0,1.755,74100.0,NEAR OCEAN +-124.16,40.8,52.0,2167.0,480.0,908.0,451.0,1.6111,74700.0,NEAR OCEAN +-124.16,40.8,52.0,1703.0,500.0,952.0,435.0,1.1386,74100.0,NEAR OCEAN +-124.14,40.79,38.0,1552.0,290.0,873.0,291.0,2.4896,81000.0,NEAR OCEAN +-124.15,40.78,41.0,2127.0,358.0,911.0,349.0,3.1711,104200.0,NEAR OCEAN +-124.16,40.78,46.0,1975.0,346.0,791.0,349.0,3.8,81800.0,NEAR OCEAN +-124.16,40.79,46.0,3042.0,597.0,1206.0,541.0,2.1135,90600.0,NEAR OCEAN +-124.15,40.79,37.0,2692.0,488.0,1263.0,486.0,3.0216,86400.0,NEAR OCEAN +-124.14,40.78,35.0,2426.0,423.0,982.0,432.0,3.4219,92800.0,NEAR OCEAN +-124.14,40.77,27.0,3046.0,605.0,1407.0,571.0,2.9143,99600.0,NEAR OCEAN +-124.15,40.76,24.0,2858.0,511.0,1388.0,512.0,3.375,100600.0,NEAR OCEAN +-124.15,40.78,36.0,2112.0,374.0,829.0,368.0,3.3984,90000.0,NEAR OCEAN +-124.11,40.81,23.0,959.0,212.0,425.0,175.0,2.5536,96100.0,NEAR OCEAN +-124.13,40.78,34.0,2142.0,420.0,1056.0,382.0,2.1101,86900.0,NEAR OCEAN +-124.13,40.8,31.0,2152.0,462.0,1259.0,420.0,2.2478,81100.0,NEAR OCEAN +-124.13,40.79,29.0,2474.0,453.0,1130.0,427.0,2.8833,83000.0,NEAR OCEAN +-124.13,40.79,32.0,2017.0,359.0,855.0,346.0,3.5833,92800.0,NEAR OCEAN +-124.06,40.86,34.0,4183.0,,1891.0,669.0,3.2216,98100.0,NEAR OCEAN +-124.05,40.85,31.0,2414.0,428.0,1005.0,401.0,3.5156,143000.0,NEAR OCEAN +-124.02,40.8,22.0,2588.0,435.0,1198.0,442.0,3.9792,133900.0,<1H OCEAN +-124.08,40.86,18.0,1287.0,484.0,805.0,502.0,1.1157,150000.0,NEAR OCEAN +-124.09,40.86,25.0,1322.0,387.0,794.0,379.0,1.1742,75000.0,NEAR OCEAN +-124.09,40.87,44.0,692.0,206.0,398.0,211.0,1.1576,87500.0,NEAR OCEAN +-124.07,40.87,47.0,1765.0,326.0,796.0,333.0,2.2138,99200.0,NEAR OCEAN +-124.08,40.87,29.0,1710.0,469.0,990.0,425.0,1.1479,101100.0,NEAR OCEAN +-124.09,40.88,50.0,921.0,187.0,420.0,187.0,2.2188,105800.0,NEAR OCEAN +-124.07,40.87,31.0,334.0,134.0,780.0,130.0,0.7684,153100.0,NEAR OCEAN +-124.15,40.88,33.0,2235.0,506.0,1165.0,441.0,1.725,57500.0,NEAR OCEAN +-124.1,40.88,35.0,2987.0,578.0,1581.0,585.0,2.0657,81100.0,NEAR OCEAN +-124.09,40.88,31.0,1982.0,495.0,1052.0,467.0,1.5326,74100.0,NEAR OCEAN +-124.09,40.88,26.0,2683.0,555.0,1353.0,526.0,2.4321,82100.0,NEAR OCEAN +-124.1,40.9,18.0,4032.0,798.0,1948.0,775.0,2.7321,92600.0,NEAR OCEAN +-124.23,40.81,52.0,1112.0,209.0,544.0,172.0,3.3462,50800.0,NEAR OCEAN +-124.06,40.88,12.0,2087.0,424.0,1603.0,438.0,2.5667,139500.0,NEAR OCEAN +-123.74,40.66,25.0,2395.0,431.0,983.0,375.0,3.0469,136000.0,<1H OCEAN +-124.08,40.91,13.0,2522.0,719.0,1381.0,628.0,1.6667,78800.0,NEAR OCEAN +-123.76,41.03,24.0,2386.0,565.0,1058.0,414.0,2.0644,79800.0,<1H OCEAN +-123.85,41.32,31.0,938.0,238.0,425.0,157.0,1.0486,36700.0,<1H OCEAN +-123.72,41.09,19.0,1970.0,431.0,1166.0,363.0,1.8208,50000.0,<1H OCEAN +-123.63,41.11,19.0,1797.0,384.0,1033.0,327.0,1.4911,59200.0,<1H OCEAN +-123.66,41.3,22.0,1580.0,372.0,686.0,264.0,1.8065,62700.0,<1H OCEAN +-123.52,41.01,17.0,1564.0,345.0,517.0,222.0,2.1542,83800.0,INLAND +-124.08,41.36,29.0,1029.0,239.0,509.0,196.0,2.0156,62800.0,NEAR OCEAN +-124.06,41.13,22.0,3263.0,799.0,1384.0,578.0,2.4708,119400.0,NEAR OCEAN +-124.14,41.06,32.0,1020.0,215.0,421.0,198.0,3.0208,143400.0,NEAR OCEAN +-124.1,41.04,26.0,1633.0,380.0,890.0,370.0,1.9741,97900.0,NEAR OCEAN +-124.01,40.97,21.0,1513.0,319.0,943.0,301.0,3.538,102700.0,<1H OCEAN +-124.0,40.92,29.0,1429.0,,672.0,266.0,2.9485,98800.0,<1H OCEAN +-124.01,40.89,28.0,1470.0,336.0,811.0,314.0,2.4559,75600.0,<1H OCEAN +-123.98,40.88,41.0,1719.0,372.0,844.0,336.0,2.6923,84200.0,<1H OCEAN +-123.88,40.93,28.0,1272.0,259.0,519.0,220.0,3.2891,106300.0,<1H OCEAN +-124.16,41.02,23.0,1672.0,385.0,1060.0,390.0,2.1726,75500.0,NEAR OCEAN +-124.08,40.99,18.0,3297.0,662.0,1554.0,578.0,2.6847,111300.0,NEAR OCEAN +-124.16,40.95,20.0,1075.0,214.0,529.0,196.0,3.1406,96000.0,NEAR OCEAN +-124.11,40.95,19.0,1734.0,365.0,866.0,342.0,2.96,81700.0,NEAR OCEAN +-124.09,40.95,18.0,2250.0,484.0,1248.0,472.0,2.5893,99600.0,NEAR OCEAN +-124.11,40.93,25.0,2392.0,474.0,1298.0,461.0,3.5076,73600.0,NEAR OCEAN +-124.11,40.93,17.0,1661.0,329.0,948.0,357.0,2.7639,90200.0,NEAR OCEAN +-124.08,40.94,18.0,1550.0,345.0,941.0,335.0,2.3147,70100.0,NEAR OCEAN +-124.09,40.92,12.0,2497.0,491.0,1153.0,462.0,2.8182,126900.0,NEAR OCEAN +-124.05,40.94,14.0,1452.0,217.0,516.0,181.0,5.0329,165600.0,NEAR OCEAN +-124.1,40.95,17.0,1485.0,345.0,823.0,316.0,1.8993,78400.0,NEAR OCEAN +-124.07,40.81,23.0,2103.0,411.0,1019.0,387.0,2.9911,119700.0,NEAR OCEAN +-124.02,40.72,28.0,3513.0,634.0,1658.0,598.0,3.8095,119900.0,<1H OCEAN +-124.1,40.73,33.0,644.0,129.0,334.0,121.0,3.9659,111800.0,NEAR OCEAN +-124.17,40.74,17.0,2026.0,338.0,873.0,313.0,4.0357,128900.0,NEAR OCEAN +-124.14,40.72,18.0,2581.0,499.0,1375.0,503.0,2.8446,100500.0,NEAR OCEAN +-124.14,40.67,23.0,580.0,117.0,320.0,109.0,4.2054,130600.0,NEAR OCEAN +-124.19,40.73,21.0,5694.0,1056.0,2907.0,972.0,3.5363,90100.0,NEAR OCEAN +-124.21,40.75,32.0,1218.0,331.0,620.0,268.0,1.6528,58100.0,NEAR OCEAN +-124.27,40.69,36.0,2349.0,528.0,1194.0,465.0,2.5179,79000.0,NEAR OCEAN +-124.18,40.62,35.0,952.0,178.0,480.0,179.0,3.0536,107000.0,NEAR OCEAN +-124.17,40.62,32.0,1595.0,309.0,706.0,277.0,2.8958,86400.0,NEAR OCEAN +-124.13,40.62,43.0,2131.0,399.0,910.0,389.0,2.5804,92100.0,NEAR OCEAN +-124.16,40.6,39.0,1322.0,283.0,642.0,292.0,2.4519,85100.0,NEAR OCEAN +-124.15,40.59,39.0,1186.0,238.0,539.0,212.0,2.0938,79600.0,NEAR OCEAN +-124.14,40.6,27.0,1148.0,206.0,521.0,219.0,4.025,128100.0,NEAR OCEAN +-124.14,40.59,22.0,1665.0,405.0,826.0,382.0,1.5625,66800.0,NEAR OCEAN +-124.14,40.59,17.0,2985.0,610.0,1544.0,584.0,2.178,76800.0,NEAR OCEAN +-124.05,40.59,32.0,1878.0,340.0,937.0,353.0,3.4408,95200.0,<1H OCEAN +-124.09,40.55,24.0,2978.0,553.0,1370.0,480.0,2.7644,97300.0,<1H OCEAN +-123.96,40.57,31.0,1854.0,365.0,883.0,310.0,2.3167,92600.0,<1H OCEAN +-123.73,40.48,25.0,2015.0,524.0,746.0,251.0,1.7153,77100.0,INLAND +-124.14,40.58,25.0,1899.0,357.0,891.0,355.0,2.6987,92500.0,<1H OCEAN +-124.14,40.57,29.0,2864.0,600.0,1314.0,562.0,2.1354,75100.0,<1H OCEAN +-124.11,40.57,33.0,1348.0,234.0,573.0,236.0,2.4896,74100.0,<1H OCEAN +-124.13,40.55,38.0,544.0,,240.0,91.0,3.25,94800.0,<1H OCEAN +-124.1,40.5,30.0,1927.0,393.0,996.0,374.0,2.2357,72300.0,<1H OCEAN +-124.1,40.5,42.0,2380.0,553.0,1300.0,504.0,1.7574,57500.0,<1H OCEAN +-124.09,40.44,38.0,2220.0,426.0,1041.0,401.0,2.3947,70500.0,<1H OCEAN +-124.1,40.47,52.0,1196.0,236.0,965.0,265.0,3.5345,55000.0,<1H OCEAN +-124.03,40.45,34.0,1006.0,213.0,443.0,158.0,2.6094,71300.0,<1H OCEAN +-124.26,40.58,52.0,2217.0,394.0,907.0,369.0,2.3571,111400.0,NEAR OCEAN +-124.23,40.54,52.0,2694.0,453.0,1152.0,435.0,3.0806,106700.0,NEAR OCEAN +-124.35,40.54,52.0,1820.0,300.0,806.0,270.0,3.0147,94600.0,NEAR OCEAN +-124.25,40.28,32.0,1430.0,419.0,434.0,187.0,1.9417,76100.0,NEAR OCEAN +-124.08,40.06,17.0,1319.0,267.0,393.0,163.0,2.625,135600.0,NEAR OCEAN +-124.0,40.22,16.0,2088.0,535.0,816.0,326.0,1.319,70700.0,<1H OCEAN +-123.84,40.28,28.0,2809.0,605.0,1093.0,438.0,2.0962,74000.0,<1H OCEAN +-123.68,40.24,31.0,1852.0,452.0,917.0,359.0,1.725,54300.0,<1H OCEAN +-123.82,40.16,19.0,2283.0,634.0,1184.0,453.0,1.2227,76800.0,<1H OCEAN +-123.82,40.12,33.0,2985.0,591.0,1221.0,486.0,2.087,82400.0,<1H OCEAN +-123.75,40.11,35.0,2052.0,477.0,900.0,402.0,1.9625,101500.0,<1H OCEAN +-123.78,40.05,17.0,2019.0,496.0,899.0,347.0,2.1864,101900.0,<1H OCEAN +-115.52,33.12,38.0,1327.0,262.0,784.0,231.0,1.8793,60800.0,INLAND +-115.52,33.13,18.0,1109.0,283.0,1006.0,253.0,2.163,53400.0,INLAND +-115.51,33.12,21.0,1024.0,218.0,890.0,232.0,2.101,46700.0,INLAND +-115.46,33.19,33.0,1234.0,373.0,777.0,298.0,1.0,40000.0,INLAND +-115.51,33.24,32.0,1995.0,523.0,1069.0,410.0,1.6552,43300.0,INLAND +-115.6,33.2,37.0,709.0,187.0,390.0,142.0,2.4511,72500.0,INLAND +-115.73,33.09,27.0,452.0,103.0,258.0,61.0,2.9,87500.0,INLAND +-115.62,33.04,17.0,1009.0,231.0,745.0,217.0,2.0463,61200.0,INLAND +-115.62,33.04,20.0,1121.0,244.0,766.0,230.0,2.2969,62000.0,INLAND +-115.6,33.04,31.0,314.0,61.0,152.0,56.0,3.3472,91700.0,INLAND +-115.41,32.99,29.0,1141.0,220.0,684.0,194.0,3.4038,107800.0,INLAND +-115.59,32.96,17.0,841.0,146.0,473.0,154.0,3.1979,113500.0,INLAND +-115.52,32.98,32.0,1615.0,382.0,1307.0,345.0,1.4583,58600.0,INLAND +-115.52,32.98,21.0,1302.0,327.0,1244.0,316.0,2.2054,66400.0,INLAND +-115.53,32.99,25.0,2578.0,634.0,2082.0,565.0,1.7159,62200.0,INLAND +-115.51,32.99,20.0,1402.0,287.0,1104.0,317.0,1.9088,63700.0,INLAND +-115.54,32.99,23.0,1459.0,373.0,1148.0,388.0,1.5372,69400.0,INLAND +-115.54,32.98,27.0,1513.0,395.0,1121.0,381.0,1.9464,60600.0,INLAND +-115.54,32.99,17.0,1697.0,268.0,911.0,254.0,4.3523,96000.0,INLAND +-115.55,32.98,24.0,2565.0,530.0,1447.0,473.0,3.2593,80800.0,INLAND +-115.54,32.97,41.0,2429.0,454.0,1188.0,430.0,3.0091,70800.0,INLAND +-115.53,32.97,35.0,1583.0,340.0,933.0,318.0,2.4063,70700.0,INLAND +-115.55,32.98,33.0,2266.0,365.0,952.0,360.0,5.4349,143000.0,INLAND +-115.56,32.96,21.0,2164.0,480.0,1164.0,421.0,3.8177,107200.0,INLAND +-115.53,32.97,34.0,2231.0,545.0,1568.0,510.0,1.5217,60300.0,INLAND +-115.52,32.97,24.0,1617.0,366.0,1416.0,401.0,1.975,66400.0,INLAND +-115.52,32.97,10.0,1879.0,387.0,1376.0,337.0,1.9911,67500.0,INLAND +-115.32,32.82,34.0,591.0,139.0,327.0,89.0,3.6528,100000.0,INLAND +-115.39,32.76,16.0,1136.0,196.0,481.0,185.0,6.2558,146300.0,INLAND +-115.4,32.86,19.0,1087.0,171.0,649.0,173.0,3.3182,113800.0,INLAND +-115.37,32.81,23.0,1458.0,294.0,866.0,275.0,2.3594,74300.0,INLAND +-115.37,32.82,14.0,1276.0,270.0,867.0,261.0,1.9375,80900.0,INLAND +-115.37,32.82,30.0,1602.0,322.0,1130.0,335.0,3.5735,71100.0,INLAND +-115.38,32.82,38.0,1892.0,394.0,1175.0,374.0,1.9939,65800.0,INLAND +-115.38,32.81,35.0,1263.0,262.0,950.0,241.0,1.8958,67500.0,INLAND +-115.37,32.81,32.0,741.0,191.0,623.0,169.0,1.7604,68600.0,INLAND +-115.57,32.85,33.0,1365.0,269.0,825.0,250.0,3.2396,62300.0,INLAND +-115.57,32.85,17.0,1039.0,256.0,728.0,246.0,1.7411,63500.0,INLAND +-115.57,32.84,29.0,1207.0,301.0,804.0,288.0,1.9531,61100.0,INLAND +-115.57,32.83,31.0,1494.0,289.0,959.0,284.0,3.5282,67500.0,INLAND +-115.59,32.85,20.0,1608.0,274.0,862.0,248.0,4.875,90800.0,INLAND +-115.6,32.87,3.0,1629.0,317.0,1005.0,312.0,4.1293,83200.0,INLAND +-115.49,32.87,19.0,541.0,104.0,457.0,106.0,3.3583,102800.0,INLAND +-115.64,32.8,23.0,1228.0,235.0,569.0,235.0,3.1667,125000.0,INLAND +-115.69,32.79,18.0,1564.0,340.0,1161.0,343.0,2.1792,55200.0,INLAND +-115.73,32.8,44.0,472.0,81.0,206.0,57.0,2.2083,93800.0,INLAND +-115.72,32.75,16.0,348.0,99.0,123.0,54.0,2.0938,87500.0,INLAND +-115.64,32.75,19.0,377.0,69.0,198.0,55.0,1.625,112500.0,INLAND +-115.58,32.81,5.0,805.0,143.0,458.0,143.0,4.475,96300.0,INLAND +-115.55,32.82,34.0,1540.0,316.0,1013.0,274.0,2.5664,67500.0,INLAND +-115.58,32.81,10.0,1088.0,203.0,533.0,201.0,3.6597,87500.0,INLAND +-115.57,32.8,17.0,1492.0,426.0,1595.0,428.0,1.7188,69900.0,INLAND +-115.57,32.8,16.0,1307.0,359.0,961.0,327.0,1.1853,72600.0,INLAND +-115.57,32.8,16.0,2276.0,594.0,1184.0,513.0,1.875,93800.0,INLAND +-115.48,32.8,21.0,1260.0,246.0,805.0,239.0,2.6172,88500.0,INLAND +-115.52,32.77,18.0,1715.0,337.0,1166.0,333.0,2.2417,79200.0,INLAND +-115.53,32.73,14.0,1527.0,325.0,1453.0,332.0,1.735,61200.0,INLAND +-115.52,32.73,17.0,1190.0,275.0,1113.0,258.0,2.3571,63100.0,INLAND +-115.5,32.75,13.0,330.0,72.0,822.0,64.0,3.4107,142500.0,INLAND +-115.55,32.8,23.0,666.0,142.0,580.0,160.0,2.1136,61000.0,INLAND +-115.55,32.79,22.0,565.0,162.0,692.0,141.0,1.2083,53600.0,INLAND +-115.54,32.79,30.0,752.0,194.0,733.0,186.0,1.6607,56100.0,INLAND +-115.54,32.79,23.0,1712.0,403.0,1370.0,377.0,1.275,60400.0,INLAND +-115.55,32.79,23.0,1004.0,221.0,697.0,201.0,1.6351,59600.0,INLAND +-115.57,32.8,33.0,1192.0,213.0,1066.0,211.0,4.5714,68600.0,INLAND +-115.56,32.8,25.0,1311.0,375.0,1193.0,351.0,2.1979,63900.0,INLAND +-115.56,32.8,28.0,1672.0,416.0,1335.0,397.0,1.5987,59400.0,INLAND +-115.56,32.8,15.0,1171.0,328.0,1024.0,298.0,1.3882,69400.0,INLAND +-115.56,32.79,18.0,1178.0,438.0,1377.0,429.0,1.3373,58300.0,INLAND +-115.56,32.78,34.0,2856.0,555.0,1627.0,522.0,3.2083,76200.0,INLAND +-115.56,32.79,20.0,2372.0,835.0,2283.0,767.0,1.1707,62500.0,INLAND +-115.57,32.79,50.0,1291.0,277.0,864.0,274.0,1.6667,68100.0,INLAND +-115.56,32.78,46.0,2511.0,490.0,1583.0,469.0,3.0603,70800.0,INLAND +-115.56,32.78,35.0,1185.0,202.0,615.0,191.0,4.6154,86200.0,INLAND +-115.57,32.78,25.0,2007.0,301.0,1135.0,332.0,5.128,99600.0,INLAND +-115.56,32.78,29.0,1568.0,283.0,848.0,245.0,3.1597,76200.0,INLAND +-115.55,32.78,5.0,2652.0,606.0,1767.0,536.0,2.8025,84300.0,INLAND +-115.58,32.78,5.0,2494.0,414.0,1416.0,421.0,5.7843,110100.0,INLAND +-115.59,32.79,8.0,2183.0,307.0,1000.0,287.0,6.3814,159900.0,INLAND +-115.58,32.79,14.0,1687.0,507.0,762.0,451.0,1.6635,64400.0,INLAND +-115.57,32.79,34.0,1152.0,208.0,621.0,208.0,3.6042,73600.0,INLAND +-115.57,32.78,29.0,2321.0,367.0,1173.0,360.0,4.0375,86400.0,INLAND +-115.57,32.78,20.0,1534.0,235.0,871.0,222.0,6.2715,97200.0,INLAND +-115.57,32.78,15.0,1413.0,279.0,803.0,277.0,4.3021,87500.0,INLAND +-115.56,32.76,15.0,1278.0,217.0,653.0,185.0,4.4821,140300.0,INLAND +-115.59,32.69,30.0,935.0,177.0,649.0,148.0,2.5769,94400.0,INLAND +-115.49,32.69,17.0,1960.0,389.0,1691.0,356.0,1.899,64000.0,INLAND +-115.4,32.7,19.0,583.0,113.0,531.0,134.0,1.6838,95800.0,INLAND +-115.49,32.67,25.0,2322.0,573.0,2185.0,602.0,1.375,70100.0,INLAND +-115.49,32.67,24.0,1266.0,275.0,1083.0,298.0,1.4828,73100.0,INLAND +-115.48,32.68,15.0,3414.0,666.0,2097.0,622.0,2.3319,91200.0,INLAND +-115.5,32.68,18.0,3631.0,913.0,3565.0,924.0,1.5931,88400.0,INLAND +-115.5,32.67,35.0,2159.0,492.0,1694.0,475.0,2.1776,75500.0,INLAND +-115.49,32.67,29.0,1523.0,440.0,1302.0,393.0,1.1311,84700.0,INLAND +-115.51,32.68,11.0,2872.0,610.0,2644.0,581.0,2.625,72700.0,INLAND +-115.52,32.67,6.0,2804.0,581.0,2807.0,594.0,2.0625,67700.0,INLAND +-116.05,33.33,17.0,290.0,94.0,135.0,57.0,1.7292,81300.0,INLAND +-116.0,33.19,16.0,245.0,57.0,81.0,33.0,1.2639,51300.0,INLAND +-115.88,32.93,15.0,208.0,49.0,51.0,20.0,4.0208,32500.0,INLAND +-116.0,32.74,26.0,1134.0,280.0,329.0,158.0,1.4338,43900.0,INLAND +-115.9,32.69,18.0,414.0,86.0,98.0,54.0,1.5417,57500.0,INLAND +-116.01,33.41,20.0,1996.0,515.0,659.0,295.0,2.8684,62800.0,INLAND +-115.99,33.4,15.0,1945.0,536.0,515.0,273.0,2.0109,54300.0,INLAND +-115.94,33.38,5.0,186.0,43.0,41.0,21.0,2.7,58800.0,INLAND +-115.98,33.32,8.0,240.0,46.0,63.0,24.0,1.4688,53800.0,INLAND +-115.91,33.36,15.0,459.0,95.0,160.0,73.0,0.922,67500.0,INLAND +-115.9,33.34,19.0,1210.0,248.0,329.0,155.0,1.7857,62800.0,INLAND +-115.96,33.3,27.0,322.0,81.0,112.0,57.0,1.125,54400.0,INLAND +-115.95,33.28,12.0,99.0,25.0,37.0,17.0,1.8958,53800.0,INLAND +-115.8,33.26,2.0,96.0,18.0,30.0,16.0,5.3374,47500.0,INLAND +-114.73,33.43,24.0,796.0,243.0,227.0,139.0,0.8964,59200.0,INLAND +-114.98,33.07,18.0,1183.0,363.0,374.0,127.0,3.1607,57500.0,INLAND +-115.73,33.36,19.0,749.0,238.0,476.0,169.0,1.7727,50000.0,INLAND +-115.73,33.35,23.0,1586.0,448.0,338.0,182.0,1.2132,30000.0,INLAND +-114.65,32.79,21.0,44.0,33.0,64.0,27.0,0.8571,25000.0,INLAND +-114.55,32.8,19.0,2570.0,820.0,1431.0,608.0,1.275,56100.0,INLAND +-114.63,32.76,15.0,1448.0,378.0,949.0,300.0,0.8585,45000.0,INLAND +-114.66,32.74,17.0,1388.0,386.0,775.0,320.0,1.2049,44000.0,INLAND +-118.18,37.35,16.0,3806.0,794.0,1501.0,714.0,2.1212,108300.0,INLAND +-118.43,37.4,19.0,2460.0,405.0,1225.0,425.0,4.1576,141500.0,INLAND +-118.6,37.39,19.0,2682.0,518.0,1134.0,399.0,3.2132,166000.0,INLAND +-118.45,37.25,20.0,1468.0,283.0,721.0,270.0,3.0817,118800.0,INLAND +-118.45,37.37,26.0,3135.0,524.0,1385.0,523.0,4.337,139700.0,INLAND +-118.42,37.35,21.0,3302.0,557.0,1413.0,520.0,4.375,180400.0,INLAND +-118.42,37.36,18.0,2281.0,520.0,1425.0,465.0,1.7388,54400.0,INLAND +-118.4,37.36,34.0,2465.0,619.0,1172.0,575.0,1.9722,116100.0,INLAND +-118.39,37.37,25.0,3295.0,824.0,1477.0,770.0,1.8325,105800.0,INLAND +-118.39,37.36,38.0,1813.0,410.0,902.0,396.0,2.3261,98400.0,INLAND +-118.3,37.17,22.0,3480.0,673.0,1541.0,636.0,2.75,94500.0,INLAND +-117.9,36.95,19.0,99.0,26.0,51.0,22.0,1.7292,137500.0,INLAND +-118.31,36.94,35.0,2563.0,530.0,861.0,371.0,2.325,80600.0,INLAND +-118.05,36.64,34.0,2090.0,478.0,896.0,426.0,2.0357,74200.0,INLAND +-118.18,36.63,23.0,2311.0,487.0,1019.0,384.0,2.2574,104700.0,INLAND +-117.69,36.13,25.0,1709.0,439.0,632.0,292.0,1.7868,45500.0,INLAND +-117.02,36.4,19.0,619.0,239.0,490.0,164.0,2.1,14999.0,INLAND +-116.22,36.0,14.0,1372.0,386.0,436.0,213.0,1.1471,32900.0,INLAND +-119.02,35.42,42.0,2271.0,458.0,1124.0,447.0,2.7583,64900.0,INLAND +-119.03,35.42,45.0,1628.0,352.0,754.0,334.0,2.5703,62400.0,INLAND +-119.03,35.42,38.0,2952.0,598.0,1491.0,568.0,2.6094,67900.0,INLAND +-119.03,35.45,14.0,3520.0,604.0,1748.0,582.0,4.3162,87100.0,INLAND +-119.05,35.44,5.0,2133.0,487.0,1182.0,438.0,3.0268,77000.0,INLAND +-119.02,35.44,29.0,3415.0,631.0,1527.0,597.0,4.0125,84400.0,INLAND +-119.02,35.43,39.0,2033.0,370.0,956.0,379.0,3.1736,70700.0,INLAND +-119.02,35.42,40.0,1089.0,226.0,520.0,218.0,2.2727,67200.0,INLAND +-119.02,35.42,36.0,2044.0,447.0,1021.0,374.0,1.8472,57400.0,INLAND +-119.02,35.42,40.0,1912.0,439.0,1015.0,413.0,1.4598,52600.0,INLAND +-119.03,35.42,42.0,1705.0,418.0,905.0,393.0,1.6286,54600.0,INLAND +-119.03,35.41,41.0,1808.0,435.0,1005.0,373.0,1.7857,54300.0,INLAND +-119.04,35.42,47.0,1691.0,402.0,913.0,358.0,1.8403,54700.0,INLAND +-119.05,35.42,41.0,1992.0,421.0,1006.0,419.0,2.8393,57000.0,INLAND +-119.05,35.42,35.0,2353.0,483.0,1368.0,455.0,2.325,63200.0,INLAND +-119.02,35.41,21.0,2534.0,554.0,1297.0,517.0,2.0575,67000.0,INLAND +-119.02,35.41,41.0,2221.0,516.0,1106.0,473.0,1.97,51900.0,INLAND +-119.03,35.41,37.0,1761.0,443.0,911.0,365.0,2.0331,53200.0,INLAND +-119.04,35.41,25.0,1577.0,310.0,844.0,309.0,3.0625,69400.0,INLAND +-119.02,35.41,31.0,2348.0,701.0,1413.0,611.0,1.3222,51400.0,INLAND +-119.03,35.4,35.0,2608.0,620.0,1566.0,583.0,2.1818,63500.0,INLAND +-119.04,35.41,20.0,3268.0,833.0,1622.0,758.0,1.3587,67500.0,INLAND +-119.08,35.42,10.0,4159.0,608.0,2089.0,591.0,5.5261,132000.0,INLAND +-119.07,35.42,19.0,3889.0,832.0,1872.0,731.0,2.6812,107600.0,INLAND +-119.09,35.41,12.0,3449.0,522.0,1754.0,551.0,5.6235,130600.0,INLAND +-119.11,35.42,52.0,154.0,,37.0,16.0,10.0263,200000.0,INLAND +-119.09,35.43,28.0,254.0,35.0,118.0,37.0,4.8571,237500.0,INLAND +-119.05,35.4,18.0,1894.0,319.0,846.0,317.0,3.8611,126400.0,INLAND +-119.08,35.39,10.0,6435.0,1040.0,3242.0,1030.0,5.575,132200.0,INLAND +-119.01,35.4,11.0,8739.0,2190.0,4781.0,1919.0,1.7109,44600.0,INLAND +-119.01,35.39,29.0,1820.0,459.0,1134.0,419.0,1.8289,59400.0,INLAND +-119.01,35.38,36.0,790.0,224.0,426.0,208.0,1.4427,50600.0,INLAND +-119.02,35.39,30.0,227.0,75.0,169.0,101.0,1.3527,60000.0,INLAND +-118.99,35.4,43.0,2225.0,392.0,890.0,374.0,4.0208,90400.0,INLAND +-118.99,35.4,48.0,1908.0,331.0,789.0,321.0,3.5714,84600.0,INLAND +-119.0,35.4,44.0,2250.0,378.0,928.0,379.0,4.3906,93900.0,INLAND +-119.0,35.39,42.0,2839.0,516.0,1203.0,487.0,3.7708,79400.0,INLAND +-119.0,35.39,51.0,1373.0,284.0,648.0,300.0,2.8295,72100.0,INLAND +-118.97,35.41,36.0,1896.0,315.0,937.0,303.0,3.996,85500.0,INLAND +-118.97,35.4,34.0,1859.0,323.0,854.0,309.0,3.1906,76200.0,INLAND +-118.98,35.4,34.0,813.0,171.0,440.0,170.0,2.8393,69800.0,INLAND +-118.98,35.4,36.0,1443.0,273.0,680.0,259.0,2.9821,73100.0,INLAND +-118.98,35.4,36.0,1864.0,331.0,1052.0,325.0,3.4205,76600.0,INLAND +-118.98,35.41,36.0,1482.0,266.0,640.0,274.0,3.875,94500.0,INLAND +-118.96,35.4,28.0,4667.0,875.0,2404.0,841.0,3.2325,89000.0,INLAND +-118.96,35.41,29.0,3548.0,729.0,1542.0,659.0,2.947,87100.0,INLAND +-118.95,35.4,23.0,4483.0,894.0,2136.0,883.0,3.6875,101700.0,INLAND +-118.96,35.4,27.0,2473.0,400.0,1271.0,427.0,3.5524,89100.0,INLAND +-118.96,35.39,23.0,5624.0,1148.0,2842.0,1042.0,3.1297,79000.0,INLAND +-118.96,35.38,34.0,2047.0,347.0,888.0,352.0,3.6734,92900.0,INLAND +-118.95,35.38,35.0,2220.0,388.0,906.0,373.0,3.5938,95200.0,INLAND +-118.96,35.38,41.0,2417.0,435.0,973.0,406.0,3.0568,85600.0,INLAND +-118.94,35.38,26.0,4800.0,831.0,2365.0,743.0,3.7533,87000.0,INLAND +-118.95,35.38,30.0,2594.0,478.0,1419.0,480.0,3.725,83100.0,INLAND +-118.92,35.38,33.0,3122.0,579.0,1733.0,545.0,3.8307,70600.0,INLAND +-118.95,35.41,21.0,3999.0,727.0,1889.0,688.0,3.875,99500.0,INLAND +-118.94,35.4,14.0,5548.0,941.0,2815.0,935.0,4.2214,104600.0,INLAND +-118.94,35.39,27.0,3074.0,452.0,1223.0,452.0,5.4592,139100.0,INLAND +-118.94,35.39,13.0,3137.0,417.0,1318.0,397.0,7.7751,194100.0,INLAND +-118.9,35.41,6.0,4656.0,971.0,2320.0,935.0,3.0938,100800.0,INLAND +-118.94,35.41,10.0,3216.0,526.0,1539.0,483.0,6.3639,143000.0,INLAND +-118.91,35.4,10.0,3587.0,774.0,1398.0,763.0,2.569,113000.0,INLAND +-118.87,35.37,14.0,2458.0,433.0,1352.0,411.0,3.5441,87000.0,INLAND +-118.91,35.37,32.0,4121.0,755.0,2590.0,721.0,3.3462,67600.0,INLAND +-118.88,35.34,20.0,1351.0,255.0,762.0,253.0,2.1111,105300.0,INLAND +-118.92,35.37,17.0,3589.0,701.0,1746.0,640.0,2.4919,75700.0,INLAND +-118.93,35.37,34.0,2412.0,446.0,1558.0,421.0,2.6903,62800.0,INLAND +-118.94,35.37,33.0,3372.0,741.0,2352.0,704.0,2.0643,57600.0,INLAND +-118.94,35.37,23.0,1106.0,252.0,790.0,230.0,1.8523,59700.0,INLAND +-118.95,35.37,34.0,1672.0,359.0,1059.0,349.0,2.1588,61300.0,INLAND +-118.94,35.37,37.0,1667.0,362.0,971.0,335.0,2.875,57400.0,INLAND +-118.95,35.37,37.0,1475.0,327.0,946.0,295.0,1.6728,55400.0,INLAND +-118.96,35.37,41.0,1463.0,339.0,1066.0,318.0,1.7467,52400.0,INLAND +-118.96,35.37,40.0,1603.0,374.0,1026.0,337.0,1.365,54300.0,INLAND +-118.97,35.39,38.0,2121.0,433.0,1547.0,441.0,2.774,59500.0,INLAND +-118.97,35.38,32.0,1361.0,363.0,1483.0,297.0,1.625,46800.0,INLAND +-118.98,35.38,39.0,1497.0,383.0,1182.0,355.0,1.0648,50000.0,INLAND +-118.97,35.38,42.0,1185.0,358.0,1038.0,299.0,0.9951,48000.0,INLAND +-118.97,35.37,41.0,2396.0,602.0,1781.0,543.0,1.8819,58000.0,INLAND +-118.97,35.38,35.0,1673.0,426.0,1041.0,413.0,1.375,57500.0,INLAND +-118.99,35.38,26.0,1317.0,374.0,1025.0,304.0,1.4024,51000.0,INLAND +-118.99,35.38,30.0,1390.0,361.0,1116.0,298.0,1.3451,57500.0,INLAND +-118.98,35.39,22.0,1812.0,457.0,1592.0,420.0,1.4146,49100.0,INLAND +-118.98,35.38,24.0,1807.0,465.0,1460.0,410.0,1.4786,54800.0,INLAND +-118.98,35.38,34.0,1020.0,247.0,795.0,228.0,1.625,50800.0,INLAND +-118.98,35.38,28.0,1171.0,299.0,1193.0,273.0,0.8639,49400.0,INLAND +-118.99,35.39,39.0,2228.0,542.0,1516.0,435.0,1.6009,48800.0,INLAND +-118.99,35.39,36.0,1438.0,348.0,1054.0,341.0,1.8319,55400.0,INLAND +-118.99,35.39,52.0,2805.0,573.0,1325.0,522.0,2.5083,70100.0,INLAND +-118.98,35.39,29.0,607.0,177.0,476.0,143.0,1.1875,50700.0,INLAND +-118.98,35.39,32.0,2620.0,682.0,2375.0,684.0,1.2618,46900.0,INLAND +-119.0,35.37,41.0,303.0,78.0,216.0,80.0,2.2212,55500.0,INLAND +-118.99,35.37,36.0,832.0,198.0,814.0,174.0,1.4773,57400.0,INLAND +-118.99,35.37,38.0,918.0,220.0,743.0,222.0,1.7292,58100.0,INLAND +-118.98,35.37,35.0,825.0,179.0,670.0,181.0,1.1638,57900.0,INLAND +-118.97,35.37,52.0,425.0,119.0,380.0,97.0,1.4125,42500.0,INLAND +-119.01,35.38,44.0,434.0,110.0,274.0,86.0,1.1944,57500.0,INLAND +-119.01,35.38,52.0,114.0,26.0,158.0,26.0,1.075,67500.0,INLAND +-119.01,35.37,35.0,120.0,35.0,477.0,41.0,1.9125,47500.0,INLAND +-119.01,35.37,44.0,593.0,136.0,364.0,121.0,1.4779,66000.0,INLAND +-119.02,35.38,52.0,90.0,35.0,36.0,31.0,0.8054,60000.0,INLAND +-119.02,35.38,48.0,346.0,92.0,129.0,63.0,1.1875,63800.0,INLAND +-119.02,35.39,52.0,191.0,52.0,106.0,49.0,2.0455,72500.0,INLAND +-119.01,35.37,45.0,629.0,143.0,568.0,139.0,1.7321,84400.0,INLAND +-119.03,35.38,38.0,2122.0,394.0,843.0,410.0,3.0,91800.0,INLAND +-119.03,35.38,52.0,1695.0,290.0,540.0,260.0,2.7312,147100.0,INLAND +-119.03,35.37,52.0,1503.0,367.0,554.0,277.0,1.6786,126600.0,INLAND +-119.04,35.37,44.0,1618.0,310.0,667.0,300.0,2.875,82700.0,INLAND +-119.03,35.39,28.0,4513.0,764.0,1593.0,763.0,2.9821,118700.0,INLAND +-119.04,35.36,36.0,1942.0,414.0,1051.0,411.0,1.8362,66900.0,INLAND +-119.05,35.36,30.0,4635.0,800.0,2307.0,754.0,3.6548,84700.0,INLAND +-119.05,35.36,16.0,4507.0,1049.0,2261.0,959.0,3.3261,118400.0,INLAND +-119.07,35.36,19.0,5254.0,894.0,2155.0,831.0,4.6705,110700.0,INLAND +-119.08,35.36,12.0,6442.0,1116.0,2966.0,1092.0,4.5791,123400.0,INLAND +-119.06,35.36,9.0,1228.0,234.0,409.0,212.0,4.3482,95200.0,INLAND +-119.03,35.37,42.0,2508.0,483.0,1035.0,442.0,2.6513,72300.0,INLAND +-119.03,35.36,41.0,1944.0,363.0,977.0,388.0,3.9097,81300.0,INLAND +-119.04,35.36,40.0,1533.0,312.0,771.0,306.0,3.0435,69500.0,INLAND +-119.04,35.37,46.0,1637.0,338.0,714.0,297.0,2.1818,75300.0,INLAND +-119.02,35.37,44.0,2687.0,620.0,1521.0,549.0,1.7213,61600.0,INLAND +-119.02,35.36,48.0,1833.0,396.0,947.0,363.0,2.2827,70000.0,INLAND +-119.02,35.36,47.0,1631.0,340.0,847.0,315.0,2.5062,73700.0,INLAND +-119.03,35.36,41.0,2551.0,594.0,1342.0,595.0,1.9671,76800.0,INLAND +-119.01,35.37,38.0,1702.0,380.0,1191.0,366.0,1.8801,57800.0,INLAND +-119.01,35.36,38.0,1838.0,388.0,1203.0,373.0,1.6797,60700.0,INLAND +-119.01,35.36,36.0,2658.0,626.0,1490.0,529.0,1.2157,57000.0,INLAND +-119.01,35.36,24.0,1941.0,484.0,1277.0,435.0,1.056,51600.0,INLAND +-119.01,35.37,33.0,821.0,181.0,579.0,172.0,1.2469,46700.0,INLAND +-119.0,35.36,40.0,850.0,227.0,764.0,186.0,0.9407,43600.0,INLAND +-119.0,35.36,39.0,896.0,217.0,805.0,197.0,1.25,42500.0,INLAND +-119.0,35.35,35.0,1164.0,277.0,992.0,284.0,1.4015,48700.0,INLAND +-119.0,35.36,35.0,1021.0,280.0,1258.0,239.0,1.7375,48600.0,INLAND +-118.98,35.37,36.0,1562.0,398.0,1223.0,329.0,0.9675,47100.0,INLAND +-118.98,35.36,29.0,1244.0,266.0,933.0,227.0,1.6981,49400.0,INLAND +-118.98,35.36,15.0,1482.0,338.0,1059.0,279.0,1.2617,42700.0,INLAND +-118.99,35.36,18.0,1524.0,354.0,1210.0,344.0,1.1136,47800.0,INLAND +-118.99,35.36,31.0,1498.0,359.0,1168.0,340.0,1.2232,49300.0,INLAND +-118.94,35.36,19.0,2714.0,512.0,1823.0,500.0,3.1281,76200.0,INLAND +-118.95,35.36,30.0,2294.0,508.0,1753.0,482.0,2.1078,54700.0,INLAND +-118.96,35.37,32.0,1025.0,259.0,874.0,236.0,1.9612,53400.0,INLAND +-118.96,35.36,35.0,2285.0,497.0,1738.0,480.0,2.4848,54000.0,INLAND +-118.97,35.37,34.0,1379.0,333.0,1156.0,315.0,1.7197,48900.0,INLAND +-118.97,35.36,31.0,1418.0,306.0,1219.0,312.0,1.5743,46700.0,INLAND +-118.95,35.32,29.0,3480.0,608.0,2007.0,541.0,3.2738,78700.0,INLAND +-118.98,35.35,21.0,496.0,131.0,511.0,124.0,1.7614,33200.0,INLAND +-118.99,35.35,27.0,1615.0,355.0,1380.0,332.0,1.6632,49800.0,INLAND +-118.99,35.33,36.0,1590.0,367.0,1311.0,390.0,1.6786,52900.0,INLAND +-118.99,35.32,26.0,875.0,199.0,567.0,204.0,0.9288,36600.0,INLAND +-119.0,35.35,31.0,2931.0,716.0,1969.0,588.0,2.2155,62100.0,INLAND +-118.99,35.35,32.0,1293.0,317.0,1109.0,286.0,1.1786,45600.0,INLAND +-119.01,35.35,34.0,1354.0,325.0,922.0,304.0,2.1875,58000.0,INLAND +-119.01,35.34,44.0,1730.0,343.0,782.0,278.0,3.0208,63700.0,INLAND +-119.02,35.35,42.0,1239.0,251.0,776.0,272.0,1.983,63300.0,INLAND +-119.01,35.35,39.0,598.0,149.0,366.0,132.0,1.9125,57900.0,INLAND +-119.02,35.35,38.0,1472.0,305.0,670.0,282.0,2.2407,76000.0,INLAND +-119.02,35.34,38.0,1463.0,294.0,692.0,295.0,2.3125,65800.0,INLAND +-119.03,35.34,36.0,3474.0,645.0,1679.0,616.0,2.7256,71900.0,INLAND +-119.03,35.35,34.0,1441.0,294.0,695.0,275.0,2.6875,73700.0,INLAND +-119.04,35.35,31.0,1607.0,336.0,817.0,307.0,2.5644,73000.0,INLAND +-119.04,35.35,27.0,4590.0,897.0,2212.0,894.0,3.1753,85000.0,INLAND +-119.06,35.35,20.0,9351.0,2139.0,4584.0,1953.0,2.575,69900.0,INLAND +-119.05,35.34,14.0,3580.0,984.0,1933.0,912.0,2.6637,175000.0,INLAND +-119.05,35.33,18.0,12707.0,2685.0,7009.0,2552.0,2.9438,87200.0,INLAND +-119.05,35.34,17.0,2387.0,437.0,1204.0,423.0,4.0529,106200.0,INLAND +-119.07,35.35,24.0,4119.0,865.0,1294.0,879.0,2.4123,86200.0,INLAND +-119.07,35.34,16.0,4201.0,786.0,1667.0,724.0,4.8839,134100.0,INLAND +-119.12,35.33,4.0,8574.0,1489.0,4250.0,1444.0,5.1036,103400.0,INLAND +-119.1,35.35,5.0,4597.0,1071.0,1916.0,870.0,4.0327,131000.0,INLAND +-119.08,35.34,18.0,4070.0,512.0,1580.0,540.0,10.5941,245800.0,INLAND +-119.08,35.35,20.0,892.0,129.0,331.0,135.0,7.1837,176300.0,INLAND +-119.09,35.35,14.0,2113.0,256.0,842.0,265.0,8.5325,224100.0,INLAND +-119.08,35.34,16.0,1535.0,238.0,768.0,236.0,5.4449,118500.0,INLAND +-119.08,35.34,15.0,1474.0,235.0,768.0,238.0,4.1528,130100.0,INLAND +-119.1,35.33,4.0,6640.0,898.0,3121.0,902.0,6.759,170300.0,INLAND +-119.08,35.32,8.0,11609.0,2141.0,5696.0,2100.0,5.0012,106300.0,INLAND +-119.09,35.33,9.0,7085.0,1148.0,3084.0,1052.0,4.997,142900.0,INLAND +-119.06,35.32,15.0,3944.0,746.0,2355.0,757.0,3.569,70700.0,INLAND +-119.07,35.33,13.0,9027.0,1901.0,4870.0,1797.0,3.406,100700.0,INLAND +-119.06,35.33,14.0,5264.0,1064.0,3278.0,1049.0,3.8117,82800.0,INLAND +-119.02,35.34,34.0,2861.0,510.0,1375.0,486.0,3.4286,71400.0,INLAND +-119.02,35.33,26.0,3691.0,826.0,2072.0,827.0,2.1553,84700.0,INLAND +-119.03,35.33,21.0,3057.0,698.0,1627.0,680.0,2.7083,84700.0,INLAND +-119.03,35.34,34.0,2221.0,436.0,1131.0,408.0,3.0486,68500.0,INLAND +-119.01,35.34,36.0,973.0,219.0,613.0,187.0,1.5625,46700.0,INLAND +-119.01,35.33,42.0,1120.0,255.0,677.0,213.0,1.5429,39400.0,INLAND +-119.0,35.33,35.0,991.0,221.0,620.0,207.0,1.9417,53800.0,INLAND +-119.01,35.33,32.0,3068.0,628.0,1897.0,607.0,2.4234,63700.0,INLAND +-119.02,35.33,35.0,2053.0,412.0,1193.0,387.0,2.75,65800.0,INLAND +-119.02,35.34,35.0,1650.0,390.0,1145.0,343.0,1.5357,56500.0,INLAND +-118.99,35.32,35.0,1576.0,405.0,870.0,282.0,1.6575,59500.0,INLAND +-118.99,35.3,33.0,2248.0,434.0,1461.0,405.0,2.9402,56200.0,INLAND +-119.0,35.31,37.0,1337.0,275.0,767.0,273.0,1.6522,53300.0,INLAND +-119.09,35.3,3.0,2821.0,519.0,1353.0,495.0,3.6852,109800.0,INLAND +-119.04,35.32,20.0,37.0,11.0,34.0,8.0,1.2,50000.0,INLAND +-119.05,35.32,11.0,7035.0,1455.0,3525.0,1387.0,3.4827,93600.0,INLAND +-119.04,35.31,11.0,2161.0,371.0,1267.0,388.0,4.1957,92700.0,INLAND +-119.03,35.32,12.0,2721.0,549.0,1294.0,523.0,2.5575,100200.0,INLAND +-119.02,35.32,14.0,2927.0,588.0,1821.0,561.0,3.3529,82600.0,INLAND +-119.05,35.3,9.0,10822.0,1994.0,6241.0,1906.0,4.0631,88200.0,INLAND +-119.03,35.3,10.0,829.0,146.0,447.0,173.0,4.1484,102900.0,INLAND +-119.02,35.3,10.0,7397.0,1369.0,4611.0,1310.0,3.6369,81600.0,INLAND +-119.01,35.32,23.0,4870.0,965.0,2717.0,928.0,2.596,70000.0,INLAND +-119.01,35.31,19.0,7092.0,1517.0,4101.0,1436.0,2.1006,74800.0,INLAND +-119.01,35.3,7.0,8596.0,1597.0,4893.0,1520.0,3.9054,80900.0,INLAND +-119.07,35.27,25.0,3081.0,635.0,1830.0,591.0,2.5804,97900.0,INLAND +-119.13,35.22,5.0,6268.0,1003.0,3269.0,980.0,5.1457,118200.0,INLAND +-119.01,35.24,6.0,80.0,16.0,66.0,21.0,3.125,65000.0,INLAND +-119.01,35.28,10.0,7011.0,1453.0,4163.0,1307.0,2.7659,77500.0,INLAND +-118.99,35.24,40.0,282.0,59.0,213.0,71.0,2.35,91700.0,INLAND +-118.99,35.27,32.0,444.0,102.0,242.0,87.0,1.1528,150000.0,INLAND +-118.93,34.82,24.0,806.0,168.0,323.0,136.0,3.5,113900.0,INLAND +-118.95,34.83,18.0,3278.0,762.0,1338.0,550.0,2.9891,116500.0,INLAND +-118.95,34.81,30.0,2817.0,604.0,1089.0,412.0,3.1364,123500.0,INLAND +-119.15,34.83,6.0,8733.0,1600.0,2006.0,736.0,4.5724,168400.0,INLAND +-119.16,34.95,14.0,4054.0,787.0,1581.0,579.0,3.0882,148200.0,INLAND +-118.93,34.82,8.0,508.0,111.0,229.0,84.0,4.0332,128300.0,INLAND +-119.4,35.06,21.0,2213.0,458.0,1250.0,440.0,2.9187,52100.0,INLAND +-119.45,35.07,45.0,973.0,183.0,500.0,177.0,2.6389,30000.0,INLAND +-119.42,35.19,26.0,890.0,172.0,483.0,170.0,4.15,68200.0,INLAND +-119.5,35.27,23.0,3827.0,696.0,1993.0,617.0,3.0742,57900.0,INLAND +-119.48,35.17,36.0,116.0,20.0,39.0,18.0,3.125,37500.0,INLAND +-119.45,35.16,34.0,3437.0,696.0,1783.0,608.0,2.3912,52900.0,INLAND +-119.46,35.17,40.0,4164.0,812.0,1998.0,773.0,2.8323,50800.0,INLAND +-119.46,35.14,30.0,2943.0,,1565.0,584.0,2.5313,45800.0,INLAND +-119.47,35.14,19.0,4190.0,690.0,1973.0,702.0,3.9929,88300.0,INLAND +-119.45,35.15,33.0,5050.0,964.0,2293.0,919.0,3.1592,75400.0,INLAND +-119.45,35.13,34.0,1440.0,309.0,808.0,294.0,2.3013,26600.0,INLAND +-119.46,35.13,46.0,2745.0,543.0,1423.0,482.0,2.1955,26900.0,INLAND +-119.47,35.13,44.0,4599.0,877.0,2140.0,831.0,2.9952,63800.0,INLAND +-119.47,35.4,32.0,2167.0,421.0,1301.0,394.0,1.9718,69800.0,INLAND +-119.42,35.4,24.0,2585.0,480.0,1442.0,424.0,2.8452,104700.0,INLAND +-119.12,35.41,12.0,5589.0,941.0,3018.0,917.0,4.4561,96900.0,INLAND +-119.11,35.39,22.0,984.0,176.0,451.0,170.0,3.25,88900.0,INLAND +-119.12,35.39,13.0,1264.0,202.0,552.0,187.0,4.5903,94300.0,INLAND +-119.19,35.41,12.0,2835.0,471.0,1399.0,413.0,4.4125,149000.0,INLAND +-119.2,35.37,6.0,7383.0,1095.0,3415.0,1059.0,5.3119,157300.0,INLAND +-119.12,35.38,18.0,1521.0,269.0,706.0,279.0,4.4196,121000.0,INLAND +-119.11,35.38,37.0,2044.0,394.0,894.0,359.0,2.9453,82800.0,INLAND +-119.12,35.37,13.0,4527.0,713.0,2170.0,671.0,4.8266,146200.0,INLAND +-119.18,35.5,36.0,1253.0,259.0,932.0,249.0,2.1635,110400.0,INLAND +-119.28,35.52,36.0,786.0,194.0,573.0,134.0,2.2321,37500.0,INLAND +-119.27,35.49,39.0,2649.0,572.0,1815.0,547.0,2.3533,65400.0,INLAND +-119.26,35.5,38.0,2536.0,409.0,1133.0,430.0,4.2375,78600.0,INLAND +-119.27,35.5,34.0,1367.0,329.0,796.0,319.0,2.8269,61100.0,INLAND +-119.27,35.51,28.0,1089.0,179.0,544.0,190.0,3.2279,95800.0,INLAND +-119.28,35.5,34.0,1923.0,379.0,1101.0,351.0,2.4044,65800.0,INLAND +-119.28,35.5,28.0,3107.0,782.0,3260.0,738.0,1.6944,58600.0,INLAND +-119.27,35.5,21.0,2171.0,483.0,1315.0,450.0,1.7105,52100.0,INLAND +-119.38,35.49,34.0,2304.0,437.0,1506.0,403.0,2.2071,64600.0,INLAND +-119.34,35.6,16.0,1584.0,309.0,1011.0,268.0,2.4961,58800.0,INLAND +-119.36,35.55,29.0,510.0,84.0,236.0,73.0,2.7,125000.0,INLAND +-119.35,35.58,13.0,1657.0,362.0,1186.0,376.0,1.1903,63200.0,INLAND +-119.34,35.59,33.0,3240.0,654.0,1809.0,616.0,2.3934,71900.0,INLAND +-119.34,35.6,33.0,2143.0,488.0,1732.0,509.0,1.9362,59000.0,INLAND +-119.33,35.6,32.0,2703.0,683.0,2682.0,675.0,1.4619,60500.0,INLAND +-119.35,35.59,14.0,2719.0,502.0,1497.0,457.0,3.176,71800.0,INLAND +-119.33,35.59,20.0,3085.0,691.0,2645.0,676.0,1.7868,54100.0,INLAND +-119.69,35.62,18.0,820.0,239.0,1345.0,207.0,2.1186,47500.0,INLAND +-119.77,35.65,21.0,2403.0,483.0,1647.0,415.0,2.6066,80000.0,INLAND +-119.14,35.76,30.0,735.0,137.0,421.0,113.0,2.5625,156300.0,INLAND +-119.29,35.76,15.0,3938.0,789.0,3500.0,768.0,2.1295,59800.0,INLAND +-119.19,35.64,29.0,1476.0,220.0,902.0,205.0,2.6726,83300.0,INLAND +-119.24,35.68,21.0,1885.0,398.0,1539.0,388.0,2.5208,58500.0,INLAND +-119.22,35.68,16.0,2874.0,677.0,3078.0,651.0,1.8843,55200.0,INLAND +-119.24,35.67,32.0,3216.0,750.0,2639.0,709.0,2.0025,54700.0,INLAND +-119.25,35.78,27.0,1513.0,342.0,1346.0,323.0,2.7411,59800.0,INLAND +-119.25,35.77,35.0,1618.0,378.0,1449.0,398.0,1.6786,56500.0,INLAND +-119.25,35.76,36.0,2332.0,656.0,2175.0,610.0,1.6045,57300.0,INLAND +-119.25,35.75,36.0,1598.0,443.0,1658.0,417.0,1.517,52100.0,INLAND +-119.25,35.79,8.0,3271.0,797.0,2700.0,688.0,1.7418,62200.0,INLAND +-119.25,35.78,35.0,1927.0,386.0,1371.0,414.0,2.2981,69900.0,INLAND +-119.23,35.78,8.0,1612.0,343.0,1230.0,330.0,2.1806,67200.0,INLAND +-119.23,35.79,31.0,2862.0,606.0,2467.0,600.0,2.3125,62100.0,INLAND +-119.24,35.77,28.0,1737.0,521.0,1764.0,514.0,1.7813,67800.0,INLAND +-119.23,35.77,36.0,3225.0,635.0,2034.0,593.0,2.4044,72500.0,INLAND +-119.23,35.74,16.0,2275.0,659.0,1914.0,614.0,2.033,68400.0,INLAND +-119.23,35.77,26.0,2636.0,468.0,1416.0,485.0,4.1917,84000.0,INLAND +-118.92,35.47,6.0,1755.0,280.0,664.0,254.0,6.2885,216400.0,INLAND +-119.01,35.44,20.0,3458.0,651.0,1465.0,621.0,2.5806,82500.0,INLAND +-118.93,35.44,13.0,1439.0,237.0,557.0,227.0,6.1563,204200.0,INLAND +-118.31,35.74,18.0,2327.0,642.0,799.0,335.0,1.8419,92300.0,INLAND +-118.06,35.68,15.0,1962.0,403.0,730.0,321.0,2.25,67500.0,INLAND +-118.44,35.75,23.0,3166.0,700.0,1097.0,493.0,2.6288,96000.0,INLAND +-118.47,35.72,18.0,4754.0,1075.0,1366.0,690.0,2.0694,81200.0,INLAND +-118.5,35.7,18.0,3303.0,814.0,986.0,522.0,1.5957,101400.0,INLAND +-118.59,35.72,28.0,1491.0,408.0,98.0,48.0,1.4205,90000.0,INLAND +-118.87,35.65,33.0,1504.0,325.0,584.0,223.0,3.4792,94600.0,INLAND +-118.23,35.48,17.0,2354.0,514.0,775.0,380.0,1.8369,59400.0,INLAND +-118.33,35.64,15.0,2966.0,669.0,1007.0,465.0,1.5667,72500.0,INLAND +-118.41,35.63,15.0,5907.0,1257.0,2310.0,1001.0,2.3125,96900.0,INLAND +-118.45,35.62,18.0,2304.0,527.0,782.0,390.0,1.4141,75800.0,INLAND +-118.47,35.64,17.0,2248.0,535.0,927.0,427.0,1.3023,68500.0,INLAND +-118.48,35.61,17.0,4002.0,930.0,1614.0,731.0,1.6236,67300.0,INLAND +-118.45,35.58,16.0,5396.0,1182.0,1802.0,807.0,1.8819,69700.0,INLAND +-118.61,35.47,13.0,2267.0,601.0,756.0,276.0,2.5474,78400.0,INLAND +-117.73,35.73,35.0,2916.0,594.0,1870.0,432.0,3.625,55000.0,INLAND +-117.66,35.63,33.0,2579.0,564.0,1155.0,431.0,2.0441,42100.0,INLAND +-117.67,35.65,18.0,2737.0,589.0,1128.0,533.0,2.8,72000.0,INLAND +-117.68,35.65,15.0,2701.0,576.0,1245.0,513.0,3.3269,81900.0,INLAND +-117.69,35.65,5.0,1131.0,276.0,520.0,232.0,4.0167,87500.0,INLAND +-117.7,35.64,8.0,2683.0,416.0,1154.0,399.0,5.8625,109400.0,INLAND +-117.68,35.64,15.0,3253.0,573.0,1408.0,586.0,5.2043,95700.0,INLAND +-117.67,35.64,6.0,2115.0,342.0,927.0,337.0,6.1935,115700.0,INLAND +-117.67,35.63,32.0,3661.0,787.0,1613.0,706.0,3.0687,63500.0,INLAND +-117.68,35.63,18.0,4334.0,641.0,1777.0,661.0,6.0653,105300.0,INLAND +-117.69,35.63,5.0,3151.0,482.0,1335.0,428.0,5.5773,109000.0,INLAND +-117.7,35.62,18.0,2657.0,496.0,1426.0,483.0,3.5931,71900.0,INLAND +-117.68,35.61,9.0,4241.0,832.0,1929.0,742.0,3.5988,84500.0,INLAND +-117.68,35.6,12.0,1678.0,241.0,765.0,281.0,6.0532,102800.0,INLAND +-117.7,35.6,16.0,2678.0,483.0,1473.0,487.0,3.858,70200.0,INLAND +-117.68,35.62,30.0,2994.0,741.0,1481.0,581.0,2.1458,52400.0,INLAND +-117.64,35.61,10.0,2656.0,506.0,1349.0,501.0,4.25,83200.0,INLAND +-117.66,35.62,11.0,5897.0,1138.0,2728.0,1072.0,4.15,85700.0,INLAND +-117.66,35.61,5.0,5735.0,932.0,2623.0,862.0,4.8494,87200.0,INLAND +-117.66,35.6,14.0,1740.0,391.0,850.0,317.0,2.5812,91700.0,INLAND +-117.76,35.63,12.0,2014.0,372.0,1027.0,356.0,3.9261,101300.0,INLAND +-117.68,35.55,9.0,3811.0,605.0,1518.0,568.0,5.5551,142500.0,INLAND +-117.81,35.65,19.0,1124.0,290.0,598.0,261.0,1.8984,54300.0,INLAND +-117.87,35.73,13.0,2566.0,449.0,1181.0,414.0,4.1518,91800.0,INLAND +-117.84,35.54,11.0,1751.0,316.0,765.0,296.0,5.0762,98000.0,INLAND +-117.74,35.65,15.0,2357.0,484.0,1110.0,442.0,3.1755,81700.0,INLAND +-117.84,35.35,28.0,1913.0,486.0,858.0,371.0,1.9962,50800.0,INLAND +-118.0,35.05,21.0,1739.0,425.0,945.0,362.0,3.4015,86500.0,INLAND +-117.82,35.03,30.0,2555.0,510.0,1347.0,467.0,3.3693,71800.0,INLAND +-117.76,35.22,4.0,18.0,3.0,8.0,6.0,1.625,275000.0,INLAND +-117.79,35.21,4.0,2.0,2.0,6.0,2.0,2.375,137500.0,INLAND +-118.01,35.12,15.0,1926.0,361.0,917.0,316.0,3.3889,68500.0,INLAND +-117.98,35.13,5.0,4849.0,920.0,2504.0,847.0,3.5391,81900.0,INLAND +-117.95,35.13,4.0,2630.0,502.0,1150.0,422.0,4.25,104400.0,INLAND +-117.95,35.08,1.0,83.0,15.0,32.0,15.0,4.875,141700.0,INLAND +-117.98,35.1,4.0,923.0,166.0,352.0,135.0,4.5724,84500.0,INLAND +-117.99,35.16,15.0,2180.0,416.0,960.0,370.0,2.875,87800.0,INLAND +-118.27,34.92,20.0,873.0,175.0,422.0,159.0,2.9583,91700.0,INLAND +-118.34,34.86,11.0,7353.0,1482.0,3571.0,1308.0,2.8097,130000.0,INLAND +-117.68,35.03,28.0,2969.0,648.0,1644.0,570.0,3.4338,54900.0,INLAND +-117.68,34.99,33.0,1589.0,307.0,853.0,272.0,4.2292,64400.0,INLAND +-117.65,35.0,36.0,1184.0,316.0,672.0,241.0,1.9107,39800.0,INLAND +-118.15,34.86,10.0,4597.0,1009.0,2227.0,821.0,2.6149,83500.0,INLAND +-118.17,34.87,9.0,1507.0,293.0,761.0,278.0,3.0184,87900.0,INLAND +-118.19,34.87,2.0,2103.0,389.0,923.0,338.0,5.0553,111100.0,INLAND +-118.17,34.86,21.0,2370.0,540.0,1488.0,554.0,2.7361,83300.0,INLAND +-118.15,35.06,15.0,1069.0,296.0,569.0,263.0,2.0441,73300.0,INLAND +-118.16,35.05,44.0,1297.0,307.0,776.0,278.0,2.5875,68900.0,INLAND +-118.19,35.05,14.0,2992.0,573.0,1631.0,526.0,3.7452,83200.0,INLAND +-118.15,35.04,29.0,1671.0,368.0,821.0,337.0,2.16,56800.0,INLAND +-118.51,35.16,7.0,4371.0,727.0,1932.0,654.0,4.625,136800.0,INLAND +-118.66,35.2,7.0,9664.0,1692.0,3617.0,1370.0,4.0581,162900.0,INLAND +-118.34,35.27,10.0,2939.0,605.0,1167.0,446.0,2.3917,79000.0,INLAND +-118.48,35.14,4.0,8417.0,1657.0,4631.0,1468.0,3.6949,115800.0,INLAND +-118.61,35.08,6.0,3660.0,646.0,1243.0,482.0,3.4911,137200.0,INLAND +-118.61,34.99,11.0,4031.0,766.0,1539.0,564.0,3.8917,120800.0,INLAND +-118.46,35.13,19.0,3109.0,640.0,1457.0,620.0,2.6417,94900.0,INLAND +-118.46,35.12,16.0,4084.0,812.0,2033.0,668.0,3.2405,85500.0,INLAND +-118.43,35.12,8.0,1968.0,376.0,930.0,360.0,3.2632,99800.0,INLAND +-118.44,35.13,34.0,1170.0,290.0,602.0,266.0,1.7917,80000.0,INLAND +-118.44,35.13,21.0,1899.0,447.0,1133.0,391.0,1.8636,67900.0,INLAND +-118.91,35.3,28.0,1793.0,358.0,1233.0,351.0,2.7845,82200.0,INLAND +-118.95,35.26,24.0,1341.0,214.0,667.0,184.0,4.0,94500.0,INLAND +-118.83,35.27,33.0,1190.0,217.0,717.0,196.0,2.6302,81300.0,INLAND +-118.92,35.13,29.0,1297.0,262.0,909.0,253.0,1.9236,106300.0,INLAND +-118.85,35.23,26.0,1639.0,352.0,1222.0,395.0,1.7656,68000.0,INLAND +-118.82,35.23,31.0,2358.0,580.0,2302.0,574.0,1.9688,53900.0,INLAND +-118.83,35.2,17.0,1959.0,484.0,1763.0,453.0,2.1357,53500.0,INLAND +-118.82,35.2,34.0,2185.0,469.0,1910.0,455.0,2.1136,57300.0,INLAND +-118.85,35.2,17.0,2783.0,678.0,2566.0,641.0,1.9907,51200.0,INLAND +-118.91,35.27,29.0,1401.0,317.0,1344.0,306.0,2.0921,61400.0,INLAND +-118.9,35.26,31.0,6145.0,1492.0,5666.0,1457.0,1.9066,54600.0,INLAND +-118.92,35.26,20.0,3815.0,924.0,3450.0,920.0,2.0174,63700.0,INLAND +-118.91,35.24,29.0,2888.0,753.0,2949.0,699.0,1.7716,45500.0,INLAND +-119.69,36.41,38.0,1016.0,202.0,540.0,187.0,2.2885,75000.0,INLAND +-119.57,36.44,30.0,1860.0,337.0,1123.0,347.0,3.4926,94200.0,INLAND +-119.55,36.37,26.0,1912.0,339.0,1002.0,311.0,3.0375,126300.0,INLAND +-119.69,36.38,25.0,1688.0,302.0,879.0,277.0,3.3214,103100.0,INLAND +-119.78,36.37,41.0,831.0,149.0,443.0,146.0,3.1406,100000.0,INLAND +-119.83,36.37,25.0,1549.0,269.0,819.0,272.0,2.7159,101400.0,INLAND +-119.87,36.34,26.0,1414.0,265.0,779.0,249.0,2.9167,83900.0,INLAND +-119.93,36.32,25.0,8363.0,1636.0,7679.0,1580.0,2.0285,106300.0,INLAND +-119.79,36.32,19.0,3252.0,614.0,1971.0,607.0,3.0667,75800.0,INLAND +-119.77,36.32,14.0,3400.0,618.0,1867.0,612.0,3.9926,92500.0,INLAND +-119.78,36.31,14.0,1287.0,291.0,737.0,269.0,3.1667,126400.0,INLAND +-119.77,36.31,14.0,3677.0,863.0,2191.0,785.0,2.6218,69100.0,INLAND +-119.79,36.31,25.0,4984.0,1029.0,2414.0,961.0,2.2937,72300.0,INLAND +-119.77,36.3,24.0,2202.0,471.0,1052.0,439.0,2.1038,62000.0,INLAND +-119.78,36.3,30.0,1846.0,391.0,1255.0,352.0,2.1681,66600.0,INLAND +-119.79,36.3,16.0,1717.0,277.0,903.0,289.0,4.3438,93100.0,INLAND +-119.79,36.29,6.0,1265.0,227.0,764.0,246.0,4.2917,104200.0,INLAND +-119.82,36.32,18.0,942.0,193.0,424.0,174.0,2.0673,87500.0,INLAND +-119.78,36.33,16.0,1006.0,212.0,515.0,200.0,3.2386,112500.0,INLAND +-119.78,36.27,29.0,1871.0,315.0,1066.0,309.0,4.5714,100800.0,INLAND +-119.8,36.29,7.0,479.0,84.0,327.0,103.0,5.1728,107500.0,INLAND +-119.81,36.28,24.0,544.0,112.0,442.0,106.0,3.1071,56100.0,INLAND +-119.72,36.34,33.0,1287.0,214.0,580.0,210.0,3.2019,112500.0,INLAND +-119.72,36.32,40.0,1185.0,221.0,676.0,256.0,2.2721,52600.0,INLAND +-119.7,36.32,40.0,1178.0,244.0,586.0,187.0,2.6477,43500.0,INLAND +-119.73,36.31,20.0,2440.0,433.0,1579.0,400.0,2.8281,60200.0,INLAND +-119.7,36.3,10.0,956.0,201.0,693.0,220.0,2.2895,62000.0,INLAND +-119.67,36.35,10.0,1090.0,164.0,470.0,158.0,4.9432,118800.0,INLAND +-119.65,36.37,4.0,3725.0,783.0,1478.0,600.0,3.5486,148000.0,INLAND +-119.65,36.35,21.0,1745.0,266.0,837.0,292.0,4.3911,107900.0,INLAND +-119.65,36.35,38.0,3148.0,568.0,1378.0,537.0,2.8788,85500.0,INLAND +-119.66,36.35,15.0,1724.0,374.0,947.0,391.0,3.1094,91900.0,INLAND +-119.64,36.36,13.0,2360.0,340.0,1055.0,312.0,5.2134,97400.0,INLAND +-119.64,36.35,23.0,3182.0,563.0,1525.0,585.0,3.8108,90400.0,INLAND +-119.63,36.35,4.0,1684.0,343.0,920.0,324.0,4.2396,90600.0,INLAND +-119.62,36.35,10.0,3674.0,734.0,1864.0,718.0,2.6145,80300.0,INLAND +-119.64,36.35,30.0,1765.0,310.0,746.0,298.0,2.8125,70200.0,INLAND +-119.63,36.34,26.0,1463.0,261.0,699.0,219.0,3.5536,71400.0,INLAND +-119.63,36.33,14.0,2928.0,600.0,1633.0,559.0,1.8385,67500.0,INLAND +-119.61,36.33,32.0,1492.0,284.0,926.0,264.0,3.0139,61500.0,INLAND +-119.63,36.32,36.0,1518.0,287.0,749.0,255.0,2.2333,61000.0,INLAND +-119.66,36.34,32.0,1338.0,276.0,859.0,286.0,2.6397,59700.0,INLAND +-119.65,36.34,46.0,1730.0,337.0,752.0,323.0,1.8529,67200.0,INLAND +-119.65,36.34,47.0,1869.0,357.0,832.0,315.0,3.0846,76100.0,INLAND +-119.64,36.34,32.0,2958.0,670.0,1504.0,627.0,1.8606,56700.0,INLAND +-119.64,36.33,41.0,3095.0,766.0,1852.0,721.0,1.4524,51700.0,INLAND +-119.65,36.33,52.0,1257.0,257.0,624.0,243.0,2.3523,59100.0,INLAND +-119.65,36.33,47.0,1059.0,268.0,693.0,241.0,1.3882,53800.0,INLAND +-119.68,36.32,26.0,592.0,121.0,268.0,116.0,1.7596,120800.0,INLAND +-119.67,36.33,19.0,1241.0,244.0,850.0,237.0,2.9375,81700.0,INLAND +-119.66,36.33,16.0,2048.0,373.0,1052.0,388.0,4.0909,92800.0,INLAND +-119.66,36.33,10.0,1623.0,409.0,988.0,395.0,1.4194,58100.0,INLAND +-119.66,36.32,24.0,2652.0,568.0,1532.0,445.0,2.3256,56800.0,INLAND +-119.68,36.32,28.0,1325.0,276.0,873.0,240.0,2.5833,54400.0,INLAND +-119.68,36.31,12.0,2739.0,535.0,1859.0,498.0,2.9936,60600.0,INLAND +-119.66,36.3,18.0,1147.0,202.0,717.0,212.0,3.3681,70500.0,INLAND +-119.65,36.32,11.0,1294.0,314.0,713.0,290.0,1.5433,50400.0,INLAND +-119.64,36.32,32.0,2205.0,523.0,1772.0,479.0,1.3569,43100.0,INLAND +-119.65,36.3,28.0,941.0,175.0,588.0,180.0,2.3466,53400.0,INLAND +-119.64,36.31,27.0,1513.0,314.0,1071.0,284.0,1.5909,50100.0,INLAND +-119.61,36.31,25.0,1847.0,371.0,1460.0,353.0,1.8839,46300.0,INLAND +-119.57,36.27,20.0,2673.0,452.0,1394.0,449.0,2.625,97400.0,INLAND +-119.69,36.25,35.0,2011.0,349.0,970.0,300.0,2.395,94100.0,INLAND +-119.63,36.18,23.0,207.0,45.0,171.0,50.0,2.4286,100000.0,INLAND +-119.59,36.11,32.0,752.0,159.0,524.0,155.0,2.25,50000.0,INLAND +-119.57,36.09,6.0,2015.0,413.0,992.0,319.0,2.3889,53200.0,INLAND +-119.58,36.1,21.0,1382.0,327.0,1469.0,355.0,1.3967,46500.0,INLAND +-119.56,36.1,29.0,424.0,78.0,284.0,73.0,1.5313,43800.0,INLAND +-119.56,36.1,25.0,1093.0,262.0,893.0,252.0,2.13,50800.0,INLAND +-119.56,36.09,35.0,1648.0,285.0,792.0,265.0,3.2847,64700.0,INLAND +-119.56,36.09,14.0,1267.0,290.0,1077.0,279.0,1.85,52300.0,INLAND +-119.56,36.08,37.0,766.0,189.0,639.0,190.0,1.6607,42100.0,INLAND +-119.58,36.11,21.0,2004.0,385.0,1397.0,398.0,2.2169,61600.0,INLAND +-119.57,36.1,16.0,1461.0,400.0,1201.0,384.0,1.5727,54800.0,INLAND +-119.57,36.1,36.0,1729.0,317.0,737.0,278.0,3.5313,68800.0,INLAND +-119.57,36.1,37.0,1676.0,316.0,707.0,274.0,2.0595,60700.0,INLAND +-119.74,36.15,21.0,1548.0,308.0,1137.0,306.0,2.4688,61300.0,INLAND +-119.9,36.2,43.0,187.0,38.0,106.0,40.0,1.875,137500.0,INLAND +-119.82,36.19,33.0,1293.0,272.0,694.0,229.0,2.0221,52200.0,INLAND +-119.99,36.09,23.0,333.0,92.0,198.0,55.0,0.4999,100000.0,INLAND +-119.96,35.99,25.0,1047.0,270.0,1505.0,286.0,2.0976,47700.0,INLAND +-119.8,36.02,20.0,156.0,39.0,171.0,37.0,3.05,225000.0,INLAND +-120.14,36.04,27.0,2533.0,518.0,1371.0,461.0,2.9708,60900.0,INLAND +-120.12,36.01,18.0,1165.0,334.0,1119.0,308.0,2.2167,48500.0,INLAND +-120.14,36.0,33.0,1726.0,420.0,1371.0,388.0,2.0335,43900.0,INLAND +-120.12,35.99,7.0,2049.0,482.0,1387.0,422.0,2.25,56200.0,INLAND +-120.13,35.87,26.0,48.0,8.0,13.0,8.0,2.375,71300.0,INLAND +-120.0,35.91,16.0,259.0,53.0,131.0,38.0,3.125,62500.0,INLAND +-122.89,39.42,16.0,411.0,114.0,26.0,19.0,0.4999,73500.0,INLAND +-122.9,39.23,39.0,1295.0,240.0,534.0,179.0,3.9519,98900.0,INLAND +-122.91,39.18,43.0,89.0,18.0,86.0,27.0,2.0208,72500.0,INLAND +-122.91,39.17,44.0,202.0,42.0,142.0,39.0,4.35,68300.0,INLAND +-122.9,39.17,45.0,1314.0,277.0,649.0,232.0,2.575,73600.0,INLAND +-122.88,39.14,20.0,1125.0,231.0,521.0,196.0,2.2188,106300.0,INLAND +-123.07,39.12,24.0,1098.0,193.0,353.0,145.0,3.8333,92600.0,<1H OCEAN +-122.95,39.13,17.0,380.0,69.0,225.0,72.0,3.25,137500.0,INLAND +-122.89,39.11,10.0,1588.0,333.0,585.0,254.0,2.2551,71100.0,INLAND +-122.9,39.09,15.0,2483.0,544.0,835.0,380.0,1.9141,143200.0,INLAND +-122.92,39.08,24.0,341.0,64.0,146.0,57.0,4.0,166300.0,INLAND +-122.94,39.1,18.0,681.0,120.0,272.0,105.0,2.8906,140600.0,INLAND +-122.99,39.02,14.0,1582.0,301.0,851.0,273.0,3.45,164100.0,<1H OCEAN +-122.91,39.07,21.0,2202.0,484.0,1000.0,381.0,2.4423,102300.0,INLAND +-122.91,39.06,21.0,1236.0,238.0,601.0,261.0,1.939,100300.0,INLAND +-122.92,39.05,16.0,1548.0,295.0,605.0,250.0,3.5652,119000.0,INLAND +-122.91,39.05,20.0,1128.0,229.0,621.0,210.0,3.2216,93500.0,INLAND +-122.92,39.05,38.0,3131.0,624.0,1591.0,568.0,2.5457,80700.0,INLAND +-122.91,39.05,27.0,789.0,208.0,295.0,108.0,3.7667,95000.0,INLAND +-122.91,39.03,14.0,2374.0,557.0,723.0,427.0,1.3532,95800.0,INLAND +-122.7,39.14,13.0,532.0,111.0,214.0,62.0,3.3929,108300.0,INLAND +-122.87,39.13,15.0,1927.0,427.0,810.0,321.0,1.6369,86500.0,INLAND +-122.86,39.08,24.0,3127.0,674.0,1015.0,448.0,2.0417,78800.0,INLAND +-122.83,39.09,26.0,2191.0,495.0,679.0,371.0,1.4679,94700.0,INLAND +-122.79,39.09,20.0,1798.0,395.0,685.0,331.0,1.625,66800.0,INLAND +-122.8,39.08,17.0,1880.0,467.0,798.0,342.0,1.4676,65000.0,INLAND +-122.79,39.08,23.0,952.0,200.0,321.0,128.0,1.5208,89000.0,INLAND +-122.78,39.05,15.0,1601.0,323.0,661.0,269.0,2.6181,108900.0,INLAND +-122.53,39.09,11.0,1264.0,271.0,370.0,177.0,1.3,69700.0,INLAND +-122.69,39.04,9.0,254.0,50.0,66.0,29.0,2.7639,112500.0,INLAND +-122.73,39.04,23.0,1618.0,395.0,425.0,244.0,1.9833,111500.0,INLAND +-122.69,39.02,27.0,2199.0,527.0,744.0,316.0,2.1094,72400.0,INLAND +-122.66,39.03,27.0,1446.0,329.0,594.0,255.0,1.165,53300.0,INLAND +-122.66,39.02,16.0,3715.0,810.0,943.0,510.0,1.7446,109400.0,INLAND +-122.7,39.0,18.0,793.0,148.0,186.0,59.0,2.3125,162500.0,INLAND +-122.7,38.99,18.0,1177.0,224.0,181.0,105.0,2.3558,134700.0,INLAND +-122.65,38.99,16.0,4279.0,951.0,1596.0,666.0,1.8571,75900.0,INLAND +-122.52,38.99,16.0,975.0,219.0,337.0,155.0,1.6607,77800.0,INLAND +-122.68,38.98,27.0,2300.0,508.0,526.0,254.0,2.1838,109700.0,INLAND +-122.65,38.97,32.0,1856.0,472.0,703.0,292.0,1.1912,60000.0,INLAND +-122.63,38.96,17.0,1708.0,459.0,633.0,312.0,1.75,64000.0,INLAND +-122.62,38.95,19.0,2230.0,538.0,832.0,359.0,1.6865,58800.0,INLAND +-122.62,38.94,14.0,1731.0,400.0,638.0,282.0,2.3179,57500.0,INLAND +-122.61,38.93,14.0,231.0,36.0,108.0,31.0,4.3897,71300.0,INLAND +-122.6,38.93,16.0,1657.0,390.0,572.0,301.0,1.4767,62000.0,INLAND +-122.62,38.96,16.0,1914.0,446.0,828.0,332.0,2.0577,69000.0,INLAND +-122.63,38.96,20.0,2507.0,577.0,1072.0,457.0,2.3083,60200.0,INLAND +-122.65,38.96,27.0,2143.0,580.0,898.0,367.0,1.6769,63200.0,INLAND +-122.64,38.96,29.0,883.0,187.0,326.0,136.0,1.7273,58200.0,INLAND +-122.64,38.95,28.0,1503.0,370.0,522.0,268.0,1.2029,68900.0,INLAND +-122.63,38.95,11.0,686.0,127.0,246.0,86.0,1.7083,77300.0,INLAND +-122.63,38.94,25.0,661.0,144.0,192.0,93.0,1.7566,49000.0,INLAND +-122.63,38.94,18.0,3844.0,969.0,1832.0,845.0,1.125,81800.0,INLAND +-122.62,38.94,13.0,524.0,129.0,215.0,90.0,1.5455,55000.0,INLAND +-122.7,38.97,17.0,2554.0,540.0,723.0,319.0,3.2375,114200.0,INLAND +-122.75,39.01,17.0,4162.0,967.0,889.0,414.0,3.4187,200500.0,INLAND +-122.79,39.02,23.0,642.0,203.0,265.0,84.0,1.8833,96900.0,INLAND +-122.78,38.97,11.0,5175.0,971.0,2144.0,792.0,3.0466,97300.0,INLAND +-122.69,38.94,9.0,1245.0,234.0,517.0,187.0,3.125,93400.0,INLAND +-122.71,38.91,20.0,41.0,18.0,94.0,10.0,1.375,55000.0,INLAND +-122.86,39.05,20.0,1592.0,327.0,647.0,253.0,2.5326,136800.0,INLAND +-122.85,39.0,20.0,1580.0,318.0,753.0,252.0,1.8704,88500.0,INLAND +-122.83,38.99,15.0,289.0,49.0,191.0,54.0,1.6833,113900.0,INLAND +-122.83,38.98,17.0,1383.0,347.0,719.0,296.0,1.6164,77800.0,INLAND +-122.84,38.98,21.0,939.0,176.0,556.0,178.0,1.7196,75000.0,INLAND +-122.92,38.97,20.0,2067.0,384.0,904.0,333.0,2.9934,134200.0,<1H OCEAN +-122.89,38.93,20.0,1214.0,247.0,504.0,223.0,2.7188,105700.0,<1H OCEAN +-122.83,38.96,15.0,1318.0,296.0,567.0,276.0,1.8692,93800.0,INLAND +-122.77,38.92,26.0,712.0,140.0,293.0,100.0,4.0119,119400.0,INLAND +-122.83,38.89,11.0,640.0,134.0,268.0,90.0,3.4514,100000.0,<1H OCEAN +-122.72,38.88,29.0,2781.0,,890.0,310.0,1.9906,96600.0,INLAND +-122.74,38.83,12.0,4515.0,909.0,1554.0,528.0,3.3531,90800.0,<1H OCEAN +-122.48,38.9,10.0,304.0,63.0,161.0,61.0,2.1964,112500.0,INLAND +-122.59,38.92,15.0,1410.0,329.0,599.0,273.0,2.1953,75000.0,INLAND +-122.6,38.9,23.0,292.0,56.0,92.0,41.0,2.9583,91700.0,INLAND +-122.62,38.92,13.0,520.0,115.0,249.0,109.0,1.8417,84700.0,INLAND +-122.65,38.92,30.0,70.0,38.0,20.0,13.0,4.125,112500.0,INLAND +-122.64,38.87,16.0,1177.0,240.0,519.0,199.0,1.5739,73500.0,INLAND +-122.5,38.82,12.0,2394.0,443.0,877.0,341.0,2.5625,109200.0,INLAND +-122.51,38.76,9.0,2589.0,482.0,1050.0,374.0,4.0435,132600.0,INLAND +-122.55,38.81,7.0,3639.0,637.0,1027.0,421.0,3.8831,132100.0,INLAND +-122.59,38.78,15.0,764.0,145.0,366.0,143.0,3.375,103100.0,INLAND +-122.66,38.81,22.0,852.0,176.0,461.0,142.0,3.4375,83300.0,INLAND +-122.68,38.76,29.0,994.0,226.0,302.0,117.0,2.3125,67900.0,INLAND +-122.62,38.73,21.0,1425.0,323.0,727.0,287.0,2.1474,85300.0,INLAND +-122.64,38.71,20.0,531.0,126.0,231.0,96.0,2.625,89600.0,INLAND +-122.52,38.7,26.0,102.0,17.0,43.0,13.0,0.536,87500.0,INLAND +-121.11,41.07,26.0,1707.0,308.0,761.0,250.0,2.7188,48100.0,INLAND +-120.96,41.12,29.0,779.0,136.0,364.0,123.0,2.5,59200.0,INLAND +-121.07,40.85,17.0,976.0,202.0,511.0,175.0,3.6641,80800.0,INLAND +-120.38,40.98,27.0,777.0,185.0,318.0,115.0,1.6833,40000.0,INLAND +-120.35,40.63,33.0,240.0,49.0,63.0,22.0,3.625,200000.0,INLAND +-120.77,40.65,11.0,2635.0,667.0,280.0,132.0,1.7214,118300.0,INLAND +-121.02,40.51,17.0,890.0,167.0,406.0,154.0,3.3036,78300.0,INLAND +-120.96,40.28,19.0,683.0,139.0,302.0,111.0,2.5,64100.0,INLAND +-121.03,40.35,52.0,5486.0,1044.0,1977.0,754.0,2.1833,49500.0,INLAND +-120.67,40.5,15.0,5343.0,,2503.0,902.0,3.5962,85900.0,INLAND +-120.57,40.43,15.0,2045.0,461.0,1121.0,402.0,2.6902,71500.0,INLAND +-120.66,40.42,35.0,1450.0,325.0,717.0,297.0,2.5074,66400.0,INLAND +-120.65,40.42,39.0,3240.0,652.0,1467.0,621.0,2.1875,64300.0,INLAND +-120.66,40.41,52.0,2081.0,478.0,1051.0,419.0,2.2992,70200.0,INLAND +-120.64,40.41,50.0,1741.0,424.0,987.0,383.0,1.5066,59300.0,INLAND +-120.71,40.36,19.0,4462.0,828.0,2229.0,777.0,3.5536,105700.0,INLAND +-120.58,40.37,16.0,3412.0,667.0,1873.0,590.0,2.2661,61800.0,INLAND +-120.42,40.38,26.0,1652.0,313.0,762.0,280.0,2.4757,85600.0,INLAND +-120.36,40.45,19.0,689.0,143.0,355.0,127.0,1.7333,70000.0,INLAND +-120.51,40.41,36.0,36.0,8.0,4198.0,7.0,5.5179,67500.0,INLAND +-120.54,40.29,17.0,3391.0,623.0,1529.0,571.0,3.4028,91000.0,INLAND +-120.49,40.31,16.0,1821.0,360.0,969.0,359.0,3.4643,85100.0,INLAND +-120.37,40.17,21.0,789.0,141.0,406.0,146.0,2.1198,73500.0,INLAND +-120.2,40.26,26.0,2399.0,518.0,1037.0,443.0,2.6765,47600.0,INLAND +-120.09,39.92,19.0,2335.0,518.0,1028.0,383.0,1.7267,60700.0,INLAND +-118.27,34.27,27.0,5205.0,859.0,2363.0,888.0,6.1946,276100.0,<1H OCEAN +-118.28,34.26,32.0,1079.0,207.0,486.0,167.0,4.9833,213000.0,<1H OCEAN +-118.29,34.26,33.0,3177.0,713.0,1845.0,612.0,4.008,191100.0,<1H OCEAN +-118.3,34.26,37.0,2824.0,633.0,1619.0,573.0,3.5568,184500.0,<1H OCEAN +-118.3,34.26,42.0,2186.0,423.0,1145.0,439.0,4.81,191900.0,<1H OCEAN +-118.28,34.25,35.0,2045.0,450.0,1166.0,407.0,3.5214,197600.0,<1H OCEAN +-118.28,34.25,29.0,2559.0,,1886.0,769.0,2.6036,162100.0,<1H OCEAN +-118.29,34.25,19.0,1988.0,594.0,1399.0,527.0,2.4727,175000.0,<1H OCEAN +-118.29,34.25,8.0,5568.0,1514.0,3565.0,1374.0,3.0795,161500.0,<1H OCEAN +-118.27,34.25,37.0,2489.0,454.0,1215.0,431.0,5.0234,257600.0,<1H OCEAN +-118.27,34.25,35.0,2091.0,360.0,879.0,326.0,4.4485,261900.0,<1H OCEAN +-118.27,34.24,30.0,2180.0,369.0,1050.0,390.0,6.3688,277600.0,<1H OCEAN +-118.27,34.25,35.0,779.0,143.0,371.0,150.0,4.6635,230100.0,<1H OCEAN +-118.27,34.25,39.0,699.0,150.0,358.0,143.0,4.4375,195800.0,<1H OCEAN +-118.28,34.24,32.0,2542.0,526.0,1278.0,493.0,4.45,263600.0,<1H OCEAN +-118.28,34.24,29.0,3390.0,580.0,1543.0,576.0,5.6184,316900.0,<1H OCEAN +-118.3,34.25,36.0,1300.0,304.0,688.0,261.0,3.1523,176700.0,<1H OCEAN +-118.33,34.24,31.0,6434.0,1188.0,3540.0,1131.0,4.2639,293300.0,<1H OCEAN +-118.35,34.22,19.0,9259.0,1653.0,3963.0,1595.0,5.997,228700.0,<1H OCEAN +-118.35,34.22,30.0,1260.0,222.0,638.0,229.0,4.1302,258300.0,<1H OCEAN +-118.35,34.21,39.0,1470.0,312.0,1047.0,284.0,3.275,181400.0,<1H OCEAN +-118.35,34.21,42.0,1073.0,220.0,804.0,226.0,3.75,172600.0,<1H OCEAN +-118.31,34.28,34.0,3258.0,610.0,1810.0,633.0,5.1145,219900.0,<1H OCEAN +-118.31,34.27,35.0,1446.0,274.0,759.0,291.0,6.0808,215600.0,<1H OCEAN +-118.3,34.26,43.0,1510.0,310.0,809.0,277.0,3.599,176500.0,<1H OCEAN +-118.3,34.26,40.0,1065.0,214.0,605.0,183.0,4.1964,185900.0,<1H OCEAN +-118.31,34.26,38.0,2264.0,460.0,1124.0,388.0,4.2685,189600.0,<1H OCEAN +-118.31,34.26,41.0,1297.0,327.0,733.0,315.0,3.0583,160300.0,<1H OCEAN +-118.31,34.26,34.0,1797.0,363.0,948.0,363.0,4.1339,187300.0,<1H OCEAN +-118.32,34.26,32.0,3690.0,791.0,1804.0,715.0,4.4875,222700.0,<1H OCEAN +-118.35,34.28,30.0,3214.0,513.0,1700.0,533.0,4.6944,248200.0,<1H OCEAN +-118.33,34.27,29.0,3034.0,732.0,1776.0,702.0,3.1349,230200.0,<1H OCEAN +-118.35,34.27,32.0,604.0,108.0,314.0,113.0,6.2037,205400.0,<1H OCEAN +-118.34,34.26,37.0,1776.0,301.0,702.0,265.0,5.2661,314900.0,<1H OCEAN +-118.35,34.25,34.0,2795.0,460.0,1267.0,443.0,6.1464,354400.0,<1H OCEAN +-118.36,34.26,34.0,3677.0,573.0,1598.0,568.0,6.838,378000.0,<1H OCEAN +-118.3,34.26,28.0,1643.0,489.0,1142.0,458.0,3.1607,200600.0,<1H OCEAN +-118.3,34.25,44.0,1442.0,285.0,859.0,292.0,4.5833,197300.0,<1H OCEAN +-118.31,34.26,37.0,1444.0,246.0,624.0,239.0,5.76,239400.0,<1H OCEAN +-118.31,34.26,36.0,1882.0,453.0,1005.0,409.0,3.8,217100.0,<1H OCEAN +-118.32,34.26,24.0,5106.0,1010.0,2310.0,957.0,4.4375,191500.0,<1H OCEAN +-118.39,34.28,24.0,4694.0,820.0,3566.0,777.0,4.4818,166200.0,<1H OCEAN +-118.38,34.28,22.0,4428.0,825.0,3152.0,836.0,4.7932,166300.0,<1H OCEAN +-118.4,34.28,16.0,6573.0,1480.0,6161.0,1473.0,3.3304,154900.0,<1H OCEAN +-118.38,34.27,8.0,3248.0,847.0,2608.0,731.0,2.8214,158300.0,<1H OCEAN +-118.41,34.29,35.0,1008.0,204.0,1162.0,215.0,3.35,147600.0,<1H OCEAN +-118.41,34.29,32.0,1591.0,320.0,1818.0,306.0,4.2969,145800.0,<1H OCEAN +-118.42,34.28,29.0,1271.0,272.0,1338.0,266.0,4.125,150000.0,<1H OCEAN +-118.41,34.28,32.0,2574.0,531.0,2609.0,472.0,3.7566,146700.0,<1H OCEAN +-118.4,34.28,22.0,3517.0,810.0,3134.0,847.0,2.6652,164800.0,<1H OCEAN +-118.42,34.28,35.0,822.0,200.0,1197.0,203.0,3.2865,133300.0,<1H OCEAN +-118.42,34.28,34.0,1999.0,427.0,2391.0,439.0,2.8,144300.0,<1H OCEAN +-118.42,34.27,33.0,1209.0,341.0,1097.0,283.0,1.6295,134300.0,<1H OCEAN +-118.42,34.27,33.0,937.0,216.0,1216.0,212.0,3.3214,131300.0,<1H OCEAN +-118.42,34.27,35.0,674.0,153.0,808.0,173.0,2.6667,147800.0,<1H OCEAN +-118.43,34.28,30.0,1384.0,308.0,2054.0,301.0,3.0132,142600.0,<1H OCEAN +-118.43,34.27,31.0,1130.0,276.0,1533.0,269.0,4.2353,156800.0,<1H OCEAN +-118.43,34.27,36.0,1002.0,250.0,1312.0,249.0,3.024,148000.0,<1H OCEAN +-118.42,34.27,37.0,1024.0,246.0,1371.0,239.0,3.225,147500.0,<1H OCEAN +-118.43,34.26,30.0,1246.0,373.0,1990.0,369.0,3.5104,140900.0,<1H OCEAN +-118.43,34.26,37.0,1269.0,348.0,1835.0,335.0,3.2583,147200.0,<1H OCEAN +-118.44,34.27,35.0,777.0,187.0,1022.0,186.0,3.4,139600.0,<1H OCEAN +-118.43,34.26,43.0,729.0,172.0,935.0,174.0,2.9519,140900.0,<1H OCEAN +-118.42,34.25,37.0,1545.0,341.0,1909.0,352.0,3.6791,148100.0,<1H OCEAN +-118.43,34.25,35.0,1447.0,335.0,1630.0,306.0,2.9205,143100.0,<1H OCEAN +-118.42,34.26,26.0,1788.0,521.0,2582.0,484.0,2.1062,136400.0,<1H OCEAN +-118.41,34.26,38.0,870.0,205.0,1065.0,222.0,2.5313,136100.0,<1H OCEAN +-118.42,34.26,36.0,973.0,221.0,1086.0,218.0,3.4519,143300.0,<1H OCEAN +-118.42,34.26,37.0,1789.0,424.0,2279.0,411.0,3.9,138600.0,<1H OCEAN +-118.41,34.27,38.0,858.0,203.0,1250.0,204.0,2.9219,137900.0,<1H OCEAN +-118.42,34.27,35.0,2700.0,702.0,3444.0,679.0,1.4867,124000.0,<1H OCEAN +-118.4,34.26,13.0,4379.0,872.0,2560.0,853.0,4.2538,154300.0,<1H OCEAN +-118.4,34.25,13.0,1872.0,497.0,1927.0,432.0,2.2019,134200.0,<1H OCEAN +-118.41,34.25,19.0,280.0,84.0,483.0,87.0,1.95,137500.0,<1H OCEAN +-118.41,34.25,33.0,827.0,192.0,981.0,184.0,2.6429,143100.0,<1H OCEAN +-118.41,34.25,36.0,1146.0,259.0,1173.0,272.0,3.6016,153800.0,<1H OCEAN +-118.41,34.25,18.0,3447.0,857.0,3663.0,817.0,3.2284,157100.0,<1H OCEAN +-118.42,34.24,17.0,2049.0,548.0,2243.0,541.0,2.525,163700.0,<1H OCEAN +-118.42,34.25,36.0,1430.0,331.0,1502.0,312.0,3.6292,145200.0,<1H OCEAN +-118.43,34.32,34.0,2657.0,515.0,1948.0,532.0,4.233,157400.0,<1H OCEAN +-118.43,34.33,18.0,5891.0,920.0,2882.0,911.0,5.901,235600.0,<1H OCEAN +-118.44,34.32,14.0,6235.0,1286.0,3568.0,1190.0,4.1724,211600.0,<1H OCEAN +-118.42,34.31,19.0,6755.0,1443.0,4205.0,1395.0,3.9583,163200.0,<1H OCEAN +-118.42,34.3,29.0,3334.0,712.0,2919.0,718.0,3.6548,180300.0,<1H OCEAN +-118.41,34.32,18.0,6572.0,1105.0,3473.0,1067.0,5.2987,203400.0,<1H OCEAN +-118.41,34.3,28.0,3187.0,569.0,2205.0,559.0,5.1668,187400.0,<1H OCEAN +-118.42,34.32,30.0,3027.0,604.0,1970.0,590.0,4.3409,156000.0,<1H OCEAN +-118.44,34.31,14.0,4151.0,941.0,3163.0,915.0,4.0301,154300.0,<1H OCEAN +-118.44,34.31,22.0,3182.0,822.0,2661.0,746.0,2.7472,160100.0,<1H OCEAN +-118.44,34.3,38.0,1595.0,314.0,1181.0,327.0,3.4,155500.0,<1H OCEAN +-118.45,34.31,9.0,1739.0,358.0,820.0,323.0,4.0556,182500.0,<1H OCEAN +-118.45,34.32,23.0,3481.0,641.0,1952.0,682.0,4.26,189400.0,<1H OCEAN +-118.46,34.32,10.0,5777.0,1112.0,2917.0,1056.0,4.1514,194100.0,<1H OCEAN +-118.45,34.31,28.0,1532.0,287.0,977.0,275.0,4.4773,173100.0,<1H OCEAN +-118.46,34.3,32.0,2424.0,476.0,2291.0,419.0,4.0337,158500.0,<1H OCEAN +-118.46,34.31,24.0,2920.0,601.0,1460.0,598.0,4.2708,218200.0,<1H OCEAN +-118.47,34.32,13.0,2664.0,518.0,1468.0,521.0,4.8988,325200.0,<1H OCEAN +-118.48,34.33,9.0,2384.0,395.0,1697.0,402.0,6.0891,270100.0,<1H OCEAN +-118.48,34.31,31.0,1091.0,256.0,892.0,238.0,3.0,172400.0,<1H OCEAN +-118.47,34.3,16.0,2495.0,551.0,2314.0,567.0,3.6736,192200.0,<1H OCEAN +-118.46,34.29,24.0,3668.0,890.0,3151.0,810.0,3.0526,183300.0,<1H OCEAN +-118.47,34.29,18.0,4256.0,987.0,3401.0,955.0,4.2935,190000.0,<1H OCEAN +-118.49,34.29,26.0,4516.0,611.0,1714.0,581.0,9.2873,431800.0,<1H OCEAN +-118.49,34.28,27.0,2535.0,389.0,1071.0,386.0,6.8695,319400.0,<1H OCEAN +-118.49,34.28,31.0,3508.0,585.0,1957.0,588.0,6.6458,285500.0,<1H OCEAN +-118.49,34.31,25.0,1024.0,145.0,357.0,147.0,7.0598,356300.0,<1H OCEAN +-118.52,34.32,18.0,7498.0,976.0,3189.0,955.0,8.1248,374000.0,<1H OCEAN +-118.51,34.3,24.0,6145.0,868.0,2710.0,875.0,7.5078,344000.0,<1H OCEAN +-118.51,34.28,29.0,4239.0,653.0,1890.0,631.0,6.3911,301700.0,<1H OCEAN +-118.51,34.29,29.0,1287.0,194.0,525.0,187.0,6.4171,319300.0,<1H OCEAN +-118.52,34.29,28.0,2272.0,320.0,868.0,312.0,7.7464,474600.0,<1H OCEAN +-118.52,34.3,17.0,4542.0,621.0,2144.0,597.0,8.8467,450700.0,<1H OCEAN +-118.45,34.3,27.0,2676.0,,2661.0,623.0,4.3047,152100.0,<1H OCEAN +-118.45,34.3,35.0,4085.0,919.0,3988.0,906.0,3.4812,160200.0,<1H OCEAN +-118.54,34.28,18.0,5481.0,780.0,2477.0,764.0,6.7248,377200.0,<1H OCEAN +-118.55,34.28,16.0,8879.0,,3468.0,1200.0,8.1125,428600.0,<1H OCEAN +-118.54,34.28,10.0,7665.0,999.0,3517.0,998.0,10.8805,500001.0,<1H OCEAN +-118.54,34.3,22.0,4423.0,622.0,1995.0,582.0,8.2159,376200.0,<1H OCEAN +-118.57,34.29,4.0,6995.0,1151.0,2907.0,1089.0,7.0808,341200.0,<1H OCEAN +-118.45,34.28,38.0,1527.0,332.0,1303.0,340.0,3.5714,152000.0,<1H OCEAN +-118.46,34.28,23.0,1663.0,302.0,1242.0,283.0,5.5931,217600.0,<1H OCEAN +-118.47,34.27,33.0,1549.0,264.0,881.0,289.0,5.1408,222900.0,<1H OCEAN +-118.48,34.28,35.0,2132.0,368.0,1128.0,341.0,5.3107,227100.0,<1H OCEAN +-118.48,34.28,35.0,1511.0,274.0,873.0,254.0,5.5608,226700.0,<1H OCEAN +-118.47,34.27,17.0,1444.0,282.0,523.0,270.0,2.7353,192400.0,<1H OCEAN +-118.47,34.27,35.0,1150.0,185.0,741.0,178.0,5.741,220600.0,<1H OCEAN +-118.48,34.27,34.0,1231.0,222.0,702.0,222.0,4.9323,223700.0,<1H OCEAN +-118.48,34.27,33.0,2649.0,449.0,1303.0,437.0,4.9955,216800.0,<1H OCEAN +-118.45,34.27,33.0,1194.0,229.0,839.0,230.0,3.705,185800.0,<1H OCEAN +-118.45,34.27,35.0,1579.0,300.0,1012.0,265.0,5.1296,195900.0,<1H OCEAN +-118.46,34.27,30.0,1576.0,282.0,1004.0,284.0,4.8015,179700.0,<1H OCEAN +-118.46,34.27,28.0,1865.0,463.0,1182.0,440.0,2.6193,172300.0,<1H OCEAN +-118.44,34.27,36.0,1111.0,275.0,1333.0,266.0,3.5347,158100.0,<1H OCEAN +-118.44,34.27,29.0,1701.0,419.0,1616.0,371.0,3.3603,142400.0,<1H OCEAN +-118.45,34.26,35.0,1724.0,311.0,992.0,315.0,4.8359,195600.0,<1H OCEAN +-118.45,34.25,36.0,1453.0,270.0,808.0,275.0,4.3839,204600.0,<1H OCEAN +-118.45,34.26,35.0,1637.0,300.0,894.0,302.0,4.175,209600.0,<1H OCEAN +-118.46,34.26,33.0,1358.0,247.0,738.0,235.0,5.0947,210300.0,<1H OCEAN +-118.46,34.26,36.0,1394.0,254.0,761.0,262.0,4.9485,217100.0,<1H OCEAN +-118.46,34.25,33.0,2202.0,433.0,1135.0,407.0,4.2143,224200.0,<1H OCEAN +-118.46,34.25,32.0,2217.0,422.0,1064.0,427.0,3.6989,208600.0,<1H OCEAN +-118.47,34.26,34.0,1300.0,289.0,650.0,291.0,3.8875,199200.0,<1H OCEAN +-118.47,34.26,35.0,1898.0,344.0,1123.0,347.0,5.5792,218400.0,<1H OCEAN +-118.48,34.26,36.0,1770.0,296.0,938.0,304.0,5.749,238000.0,<1H OCEAN +-118.49,34.26,27.0,2722.0,468.0,1164.0,419.0,4.6591,239900.0,<1H OCEAN +-118.47,34.25,34.0,1732.0,399.0,1120.0,401.0,4.1492,195700.0,<1H OCEAN +-118.48,34.25,36.0,1951.0,395.0,1040.0,375.0,5.1619,195300.0,<1H OCEAN +-118.48,34.25,35.0,1442.0,276.0,795.0,268.0,4.9688,216900.0,<1H OCEAN +-118.48,34.25,35.0,1865.0,335.0,1074.0,337.0,5.1068,223300.0,<1H OCEAN +-118.49,34.25,33.0,2088.0,383.0,960.0,362.0,4.3333,232900.0,<1H OCEAN +-118.49,34.27,34.0,4877.0,815.0,2521.0,781.0,5.5714,225900.0,<1H OCEAN +-118.49,34.27,33.0,3047.0,527.0,1578.0,507.0,4.58,236200.0,<1H OCEAN +-118.5,34.27,35.0,2235.0,390.0,1148.0,416.0,4.869,221600.0,<1H OCEAN +-118.51,34.28,34.0,3580.0,565.0,1694.0,524.0,5.4065,243800.0,<1H OCEAN +-118.52,34.28,33.0,1975.0,271.0,801.0,287.0,7.8193,379600.0,<1H OCEAN +-118.51,34.27,34.0,3787.0,771.0,1966.0,738.0,4.055,222500.0,<1H OCEAN +-118.51,34.27,36.0,2276.0,429.0,1001.0,419.0,4.1042,252100.0,<1H OCEAN +-118.52,34.27,36.0,3204.0,538.0,1499.0,499.0,5.5649,271200.0,<1H OCEAN +-118.53,34.27,32.0,1931.0,298.0,948.0,314.0,5.3847,329200.0,<1H OCEAN +-118.53,34.26,18.0,3674.0,,1590.0,550.0,8.176,308400.0,<1H OCEAN +-118.54,34.26,22.0,5303.0,838.0,2372.0,807.0,5.6912,311800.0,<1H OCEAN +-118.54,34.27,28.0,2309.0,300.0,931.0,302.0,6.7415,348200.0,<1H OCEAN +-118.53,34.27,33.0,1927.0,305.0,896.0,293.0,5.634,320500.0,<1H OCEAN +-118.54,34.26,23.0,4960.0,592.0,1929.0,586.0,10.9052,500001.0,<1H OCEAN +-118.55,34.26,21.0,4018.0,536.0,1508.0,529.0,8.203,445400.0,<1H OCEAN +-118.55,34.27,25.0,4919.0,661.0,2183.0,625.0,8.1356,352800.0,<1H OCEAN +-118.5,34.26,33.0,2831.0,510.0,1340.0,504.0,4.8316,237300.0,<1H OCEAN +-118.52,34.26,21.0,8850.0,2139.0,4717.0,1979.0,3.7816,254200.0,<1H OCEAN +-118.51,34.26,29.0,2472.0,354.0,1109.0,397.0,5.5433,332500.0,<1H OCEAN +-118.52,34.25,11.0,7849.0,1664.0,3561.0,1500.0,4.6625,290900.0,<1H OCEAN +-118.49,34.26,25.0,8389.0,1872.0,4483.0,1747.0,3.5497,261300.0,<1H OCEAN +-118.49,34.25,28.0,4054.0,712.0,2164.0,746.0,5.0,258000.0,<1H OCEAN +-118.57,34.27,20.0,7384.0,845.0,2795.0,872.0,9.6047,500001.0,<1H OCEAN +-118.59,34.26,20.0,8146.0,1131.0,3562.0,1054.0,7.167,357100.0,<1H OCEAN +-118.61,34.24,17.0,5406.0,895.0,2337.0,882.0,6.0137,375900.0,<1H OCEAN +-118.63,34.24,9.0,4759.0,924.0,1884.0,915.0,4.8333,277200.0,<1H OCEAN +-118.62,34.26,15.0,10860.0,1653.0,4178.0,1581.0,6.3249,262100.0,<1H OCEAN +-118.6,34.26,18.0,6154.0,1070.0,3010.0,1034.0,5.6392,271500.0,<1H OCEAN +-118.61,34.25,16.0,8295.0,1506.0,3903.0,1451.0,5.5111,276600.0,<1H OCEAN +-118.63,34.22,18.0,1376.0,225.0,670.0,205.0,6.5146,277600.0,<1H OCEAN +-118.64,34.22,25.0,2762.0,410.0,1166.0,439.0,6.8643,333700.0,<1H OCEAN +-118.66,34.23,18.0,897.0,142.0,263.0,110.0,6.1288,350000.0,<1H OCEAN +-118.61,34.23,26.0,3727.0,572.0,1724.0,530.0,6.1419,327300.0,<1H OCEAN +-118.61,34.22,24.0,5256.0,758.0,2474.0,780.0,7.3252,333700.0,<1H OCEAN +-118.6,34.23,19.0,8866.0,2355.0,5005.0,2194.0,3.2564,230300.0,<1H OCEAN +-118.59,34.23,17.0,6592.0,1525.0,4459.0,1463.0,3.0347,254500.0,<1H OCEAN +-118.56,34.25,31.0,1962.0,243.0,697.0,242.0,8.565,500001.0,<1H OCEAN +-118.56,34.24,23.0,2980.0,362.0,1208.0,378.0,8.1714,500001.0,<1H OCEAN +-118.57,34.25,34.0,5098.0,778.0,2239.0,778.0,5.6149,273100.0,<1H OCEAN +-118.58,34.24,26.0,3239.0,647.0,1529.0,590.0,3.2426,236900.0,<1H OCEAN +-118.59,34.25,15.0,9716.0,2387.0,4992.0,2225.0,3.6231,193300.0,<1H OCEAN +-118.57,34.25,20.0,4679.0,609.0,1945.0,609.0,8.7471,419900.0,<1H OCEAN +-118.58,34.25,23.0,4883.0,769.0,2119.0,725.0,5.521,280800.0,<1H OCEAN +-118.56,34.23,36.0,3215.0,529.0,1710.0,539.0,5.5126,248400.0,<1H OCEAN +-118.56,34.23,36.0,2406.0,432.0,1242.0,454.0,4.6944,221800.0,<1H OCEAN +-118.57,34.23,22.0,3275.0,648.0,1746.0,585.0,4.9676,221900.0,<1H OCEAN +-118.58,34.23,29.0,3907.0,773.0,2037.0,727.0,4.1023,230200.0,<1H OCEAN +-118.59,34.23,14.0,4407.0,1209.0,2676.0,1128.0,3.4091,168800.0,<1H OCEAN +-118.58,34.23,35.0,1917.0,314.0,1019.0,340.0,4.8929,234900.0,<1H OCEAN +-118.58,34.22,35.0,1969.0,339.0,950.0,340.0,4.875,230400.0,<1H OCEAN +-118.59,34.22,17.0,6015.0,1464.0,3056.0,1347.0,4.0077,229000.0,<1H OCEAN +-118.51,34.25,24.0,4338.0,558.0,1514.0,549.0,8.8612,500001.0,<1H OCEAN +-118.51,34.24,31.0,5297.0,664.0,1986.0,657.0,8.6454,483500.0,<1H OCEAN +-118.51,34.23,36.0,3324.0,448.0,1190.0,423.0,7.2772,477200.0,<1H OCEAN +-118.52,34.24,6.0,3218.0,949.0,2295.0,876.0,3.0926,418500.0,<1H OCEAN +-118.52,34.23,35.0,1471.0,210.0,735.0,219.0,8.3841,472200.0,<1H OCEAN +-118.53,34.25,20.0,6331.0,1537.0,2957.0,1509.0,3.3892,323100.0,<1H OCEAN +-118.54,34.24,24.0,4631.0,1164.0,2360.0,1083.0,3.0977,264000.0,<1H OCEAN +-118.53,34.24,24.0,2718.0,719.0,3018.0,644.0,2.9076,275300.0,<1H OCEAN +-118.54,34.23,35.0,3422.0,601.0,1690.0,574.0,4.375,232900.0,<1H OCEAN +-118.53,34.23,27.0,2131.0,543.0,1065.0,528.0,3.2404,230400.0,<1H OCEAN +-118.54,34.25,26.0,2639.0,378.0,1191.0,401.0,6.2788,322200.0,<1H OCEAN +-118.55,34.24,21.0,5751.0,1082.0,2230.0,1016.0,4.3458,407500.0,<1H OCEAN +-118.55,34.23,25.0,4409.0,1018.0,4579.0,1010.0,2.8727,245100.0,<1H OCEAN +-118.51,34.23,27.0,4580.0,918.0,2252.0,850.0,4.7926,454400.0,<1H OCEAN +-118.52,34.22,21.0,4617.0,1101.0,2891.0,1031.0,3.2289,318100.0,<1H OCEAN +-118.53,34.23,32.0,4039.0,984.0,2675.0,941.0,3.0321,240000.0,<1H OCEAN +-118.54,34.22,34.0,2193.0,513.0,1299.0,497.0,3.6187,211600.0,<1H OCEAN +-118.54,34.23,29.0,1753.0,342.0,1318.0,333.0,4.125,241400.0,<1H OCEAN +-118.45,34.25,34.0,2094.0,380.0,1207.0,380.0,5.2801,212300.0,<1H OCEAN +-118.46,34.24,11.0,5363.0,1160.0,2783.0,1034.0,3.8583,170700.0,<1H OCEAN +-118.47,34.25,21.0,2692.0,477.0,1330.0,456.0,4.5417,238900.0,<1H OCEAN +-118.47,34.24,19.0,2405.0,661.0,1855.0,621.0,2.3111,255400.0,<1H OCEAN +-118.48,34.24,32.0,2621.0,412.0,1285.0,414.0,6.6537,267600.0,<1H OCEAN +-118.49,34.25,30.0,2871.0,470.0,1335.0,458.0,5.0232,253900.0,<1H OCEAN +-118.49,34.24,35.0,2707.0,446.0,1224.0,445.0,5.2939,244200.0,<1H OCEAN +-118.49,34.24,34.0,1971.0,316.0,917.0,307.0,6.0965,262300.0,<1H OCEAN +-118.5,34.25,32.0,2333.0,389.0,969.0,331.0,4.8164,241100.0,<1H OCEAN +-118.5,34.25,32.0,2411.0,380.0,1040.0,344.0,6.155,257300.0,<1H OCEAN +-118.5,34.24,34.0,2634.0,412.0,1114.0,423.0,5.9401,315300.0,<1H OCEAN +-118.5,34.23,26.0,3082.0,573.0,1590.0,586.0,4.5167,319000.0,<1H OCEAN +-118.49,34.23,32.0,4373.0,683.0,2040.0,693.0,5.2668,242300.0,<1H OCEAN +-118.49,34.22,30.0,1756.0,314.0,899.0,288.0,5.0325,238200.0,<1H OCEAN +-118.47,34.23,22.0,8350.0,2717.0,9135.0,2452.0,2.5008,160000.0,<1H OCEAN +-118.48,34.23,35.0,1963.0,310.0,919.0,297.0,4.7583,258600.0,<1H OCEAN +-118.48,34.23,30.0,1762.0,263.0,761.0,292.0,6.5268,273100.0,<1H OCEAN +-118.48,34.23,29.0,3354.0,707.0,1752.0,650.0,4.5484,239900.0,<1H OCEAN +-118.46,34.23,20.0,4609.0,1499.0,5349.0,1377.0,2.7121,169400.0,<1H OCEAN +-118.46,34.23,16.0,6338.0,1768.0,4718.0,1632.0,3.0187,154600.0,<1H OCEAN +-118.43,34.25,38.0,921.0,239.0,1023.0,241.0,3.4514,151900.0,<1H OCEAN +-118.42,34.24,36.0,1181.0,220.0,775.0,218.0,4.7228,183800.0,<1H OCEAN +-118.43,34.24,36.0,1488.0,313.0,1221.0,296.0,4.0208,171400.0,<1H OCEAN +-118.42,34.24,35.0,1507.0,281.0,1025.0,286.0,4.5833,177200.0,<1H OCEAN +-118.41,34.23,35.0,1026.0,195.0,753.0,185.0,4.5909,179200.0,<1H OCEAN +-118.41,34.24,38.0,490.0,101.0,402.0,100.0,3.125,175900.0,<1H OCEAN +-118.44,34.26,34.0,1102.0,212.0,949.0,212.0,4.0792,165100.0,<1H OCEAN +-118.44,34.26,28.0,1077.0,288.0,1377.0,293.0,3.9167,153900.0,<1H OCEAN +-118.43,34.25,32.0,2433.0,553.0,2318.0,532.0,3.6384,159300.0,<1H OCEAN +-118.44,34.26,34.0,325.0,60.0,433.0,83.0,5.5124,174300.0,<1H OCEAN +-118.44,34.25,35.0,1583.0,324.0,1481.0,351.0,3.7,176000.0,<1H OCEAN +-118.45,34.25,21.0,2143.0,565.0,1803.0,497.0,3.9833,162500.0,<1H OCEAN +-118.45,34.24,11.0,9053.0,2193.0,7096.0,2038.0,3.5082,136500.0,<1H OCEAN +-118.45,34.23,15.0,5738.0,1767.0,4620.0,1581.0,2.3584,157600.0,<1H OCEAN +-118.45,34.24,7.0,3299.0,794.0,2343.0,647.0,3.0865,205900.0,<1H OCEAN +-118.44,34.25,33.0,1121.0,231.0,1038.0,236.0,4.8958,173700.0,<1H OCEAN +-118.43,34.24,35.0,1416.0,261.0,995.0,272.0,3.7143,178700.0,<1H OCEAN +-118.43,34.24,35.0,1488.0,293.0,1112.0,288.0,4.4688,182500.0,<1H OCEAN +-118.44,34.24,36.0,1660.0,301.0,1225.0,307.0,4.095,184000.0,<1H OCEAN +-118.44,34.24,35.0,2344.0,435.0,1531.0,399.0,3.725,178200.0,<1H OCEAN +-118.42,34.23,33.0,2478.0,457.0,1567.0,446.0,5.6629,186700.0,<1H OCEAN +-118.42,34.22,29.0,1807.0,323.0,1234.0,310.0,5.3767,233000.0,<1H OCEAN +-118.43,34.23,35.0,2049.0,390.0,1286.0,385.0,4.4432,181500.0,<1H OCEAN +-118.43,34.24,36.0,1379.0,265.0,896.0,246.0,4.6827,183800.0,<1H OCEAN +-118.42,34.23,34.0,1550.0,279.0,1011.0,288.0,4.5375,189000.0,<1H OCEAN +-118.43,34.23,35.0,1225.0,228.0,720.0,231.0,3.4013,176500.0,<1H OCEAN +-118.43,34.23,37.0,1737.0,369.0,1061.0,356.0,3.9615,173700.0,<1H OCEAN +-118.43,34.24,37.0,1279.0,241.0,987.0,233.0,4.0057,172700.0,<1H OCEAN +-118.44,34.23,36.0,1730.0,387.0,1099.0,353.0,4.0368,183100.0,<1H OCEAN +-118.43,34.22,34.0,1588.0,360.0,1080.0,340.0,3.66,184600.0,<1H OCEAN +-118.44,34.22,41.0,1030.0,214.0,664.0,223.0,3.8083,183800.0,<1H OCEAN +-118.44,34.22,39.0,1529.0,344.0,913.0,314.0,3.325,178200.0,<1H OCEAN +-118.44,34.23,43.0,2257.0,429.0,1418.0,442.0,4.5278,181800.0,<1H OCEAN +-118.46,34.22,35.0,2288.0,617.0,2222.0,566.0,2.6299,170700.0,<1H OCEAN +-118.46,34.22,39.0,1500.0,333.0,998.0,309.0,3.9625,168200.0,<1H OCEAN +-118.46,34.22,31.0,2057.0,601.0,2397.0,579.0,2.871,184400.0,<1H OCEAN +-118.45,34.22,24.0,3442.0,1168.0,4625.0,1097.0,2.0699,183000.0,<1H OCEAN +-118.45,34.23,25.0,4393.0,1369.0,3781.0,1267.0,2.5833,183700.0,<1H OCEAN +-118.45,34.22,8.0,2609.0,786.0,1803.0,695.0,2.7714,185700.0,<1H OCEAN +-118.46,34.23,19.0,9902.0,2814.0,7307.0,2660.0,2.585,145400.0,<1H OCEAN +-118.44,34.22,36.0,1191.0,266.0,718.0,248.0,3.4612,178800.0,<1H OCEAN +-118.44,34.21,37.0,1665.0,335.0,1011.0,343.0,4.8703,185100.0,<1H OCEAN +-118.44,34.21,41.0,1440.0,325.0,1014.0,322.0,2.875,168600.0,<1H OCEAN +-118.44,34.22,41.0,1582.0,399.0,1159.0,378.0,2.825,168600.0,<1H OCEAN +-118.43,34.22,34.0,2300.0,429.0,1447.0,455.0,4.2656,233700.0,<1H OCEAN +-118.43,34.21,17.0,3667.0,1209.0,2636.0,1054.0,2.425,175500.0,<1H OCEAN +-118.43,34.22,36.0,1372.0,295.0,774.0,306.0,3.6618,187300.0,<1H OCEAN +-118.4,34.22,43.0,1220.0,222.0,729.0,230.0,3.6442,186300.0,<1H OCEAN +-118.4,34.21,30.0,2453.0,544.0,1753.0,506.0,2.9803,191500.0,<1H OCEAN +-118.41,34.21,35.0,2215.0,459.0,1594.0,446.0,4.0167,193200.0,<1H OCEAN +-118.4,34.21,45.0,972.0,181.0,554.0,187.0,4.8194,181300.0,<1H OCEAN +-118.4,34.22,36.0,2557.0,540.0,1556.0,491.0,3.6591,183800.0,<1H OCEAN +-118.4,34.23,37.0,1404.0,266.0,889.0,274.0,4.0049,190000.0,<1H OCEAN +-118.38,34.25,38.0,983.0,185.0,513.0,170.0,4.8816,231500.0,<1H OCEAN +-118.37,34.24,40.0,1283.0,246.0,594.0,236.0,4.1121,229200.0,<1H OCEAN +-118.37,34.23,32.0,1444.0,317.0,1177.0,311.0,3.6,164600.0,<1H OCEAN +-118.37,34.22,17.0,1787.0,463.0,1671.0,448.0,3.5521,151500.0,<1H OCEAN +-118.38,34.24,38.0,125.0,42.0,63.0,29.0,1.3594,158300.0,<1H OCEAN +-118.4,34.24,35.0,2552.0,545.0,1850.0,503.0,4.775,179500.0,<1H OCEAN +-118.39,34.23,18.0,3405.0,831.0,3001.0,795.0,3.0083,181900.0,<1H OCEAN +-118.39,34.23,43.0,1193.0,299.0,1184.0,320.0,2.1518,161600.0,<1H OCEAN +-118.4,34.23,36.0,1643.0,349.0,1414.0,337.0,4.1181,172700.0,<1H OCEAN +-118.41,34.21,35.0,2830.0,518.0,1577.0,524.0,5.35,210500.0,<1H OCEAN +-118.41,34.21,35.0,1789.0,292.0,897.0,267.0,5.592,239900.0,<1H OCEAN +-118.39,34.22,40.0,712.0,149.0,533.0,155.0,3.695,165200.0,<1H OCEAN +-118.39,34.22,35.0,1790.0,334.0,1277.0,345.0,5.0818,186800.0,<1H OCEAN +-118.39,34.21,32.0,1869.0,441.0,1516.0,432.0,3.6845,178500.0,<1H OCEAN +-118.39,34.21,14.0,2807.0,868.0,2729.0,803.0,2.6667,172400.0,<1H OCEAN +-118.38,34.22,20.0,1176.0,344.0,864.0,318.0,2.375,177700.0,<1H OCEAN +-118.38,34.21,35.0,1468.0,303.0,1295.0,300.0,3.7708,170600.0,<1H OCEAN +-118.38,34.21,33.0,1981.0,484.0,1665.0,466.0,3.0833,179100.0,<1H OCEAN +-118.42,34.22,34.0,3004.0,589.0,1938.0,568.0,4.1857,198600.0,<1H OCEAN +-118.42,34.21,29.0,2893.0,543.0,1636.0,540.0,5.1586,237400.0,<1H OCEAN +-118.42,34.2,34.0,161.0,48.0,66.0,33.0,1.0,187500.0,<1H OCEAN +-118.42,34.23,34.0,1531.0,278.0,1064.0,274.0,5.6687,207300.0,<1H OCEAN +-118.37,34.21,36.0,1392.0,326.0,1181.0,303.0,3.1563,176400.0,<1H OCEAN +-118.37,34.21,36.0,2080.0,455.0,1939.0,484.0,4.2875,176600.0,<1H OCEAN +-118.37,34.21,34.0,2272.0,558.0,2164.0,484.0,3.7143,175700.0,<1H OCEAN +-118.37,34.22,11.0,2127.0,581.0,1989.0,530.0,2.9028,174100.0,<1H OCEAN +-118.38,34.22,32.0,362.0,100.0,348.0,102.0,2.2679,150000.0,<1H OCEAN +-118.36,34.23,15.0,2485.0,742.0,1994.0,670.0,2.8333,183200.0,<1H OCEAN +-118.36,34.22,37.0,1512.0,348.0,1545.0,351.0,3.7663,160300.0,<1H OCEAN +-118.35,34.22,41.0,1560.0,374.0,1668.0,389.0,3.025,154300.0,<1H OCEAN +-118.36,34.21,41.0,337.0,65.0,198.0,50.0,1.8929,152900.0,<1H OCEAN +-118.38,34.21,42.0,715.0,145.0,730.0,158.0,3.8,169500.0,<1H OCEAN +-118.38,34.2,23.0,4138.0,1171.0,3911.0,1068.0,3.0125,181700.0,<1H OCEAN +-118.39,34.2,17.0,2594.0,1028.0,3950.0,973.0,2.0348,177200.0,<1H OCEAN +-118.37,34.21,33.0,2034.0,470.0,1990.0,423.0,3.7455,159600.0,<1H OCEAN +-118.37,34.2,34.0,2199.0,609.0,2488.0,597.0,2.9861,171800.0,<1H OCEAN +-118.38,34.21,38.0,1363.0,395.0,1798.0,405.0,2.3182,171200.0,<1H OCEAN +-118.37,34.2,33.0,1438.0,309.0,1378.0,306.0,2.8917,170400.0,<1H OCEAN +-118.36,34.19,11.0,2921.0,685.0,1512.0,664.0,4.1445,176400.0,<1H OCEAN +-118.36,34.18,34.0,1471.0,423.0,995.0,386.0,2.9583,188700.0,<1H OCEAN +-118.36,34.18,36.0,2233.0,605.0,1934.0,599.0,2.8784,194900.0,<1H OCEAN +-118.37,34.18,33.0,1829.0,512.0,1345.0,500.0,3.1629,198900.0,<1H OCEAN +-118.37,34.19,19.0,2890.0,821.0,2203.0,705.0,2.6696,185100.0,<1H OCEAN +-118.39,34.19,41.0,2000.0,485.0,1439.0,461.0,3.0491,192000.0,<1H OCEAN +-118.39,34.19,23.0,1875.0,710.0,2555.0,657.0,2.0968,162500.0,<1H OCEAN +-118.39,34.2,19.0,2012.0,732.0,3483.0,731.0,2.2234,181300.0,<1H OCEAN +-118.37,34.19,41.0,2924.0,867.0,2751.0,836.0,2.1,171600.0,<1H OCEAN +-118.38,34.19,37.0,1434.0,394.0,1667.0,404.0,2.4375,176300.0,<1H OCEAN +-118.38,34.2,32.0,993.0,285.0,1044.0,248.0,2.4306,187500.0,<1H OCEAN +-118.4,34.2,13.0,4859.0,1293.0,3351.0,1200.0,3.6875,211900.0,<1H OCEAN +-118.4,34.19,37.0,934.0,231.0,587.0,230.0,3.625,181300.0,<1H OCEAN +-118.4,34.2,30.0,2392.0,655.0,1987.0,609.0,2.8424,226400.0,<1H OCEAN +-118.4,34.19,35.0,2180.0,599.0,1483.0,574.0,3.0395,191300.0,<1H OCEAN +-118.41,34.19,39.0,1169.0,242.0,612.0,247.0,4.1429,200000.0,<1H OCEAN +-118.41,34.2,32.0,2734.0,654.0,2209.0,610.0,3.5164,217200.0,<1H OCEAN +-118.42,34.2,24.0,3148.0,908.0,2850.0,839.0,1.9549,221500.0,<1H OCEAN +-118.41,34.19,42.0,779.0,145.0,450.0,148.0,3.9792,193800.0,<1H OCEAN +-118.42,34.19,34.0,2622.0,572.0,1997.0,573.0,3.338,222500.0,<1H OCEAN +-118.42,34.2,27.0,3201.0,970.0,3403.0,948.0,2.2377,231700.0,<1H OCEAN +-118.43,34.2,28.0,3386.0,,2240.0,737.0,3.0221,290100.0,<1H OCEAN +-118.42,34.19,33.0,3353.0,790.0,2318.0,775.0,2.2589,269700.0,<1H OCEAN +-118.42,34.19,33.0,3285.0,830.0,2281.0,786.0,2.6165,230800.0,<1H OCEAN +-118.42,34.18,27.0,3760.0,880.0,2022.0,812.0,3.1551,225600.0,<1H OCEAN +-118.42,34.18,31.0,2887.0,646.0,1626.0,637.0,3.6745,335500.0,<1H OCEAN +-118.42,34.18,30.0,1323.0,353.0,856.0,333.0,3.3594,202200.0,<1H OCEAN +-118.43,34.18,33.0,2717.0,662.0,1546.0,597.0,3.9099,267500.0,<1H OCEAN +-118.43,34.18,31.0,2417.0,510.0,1102.0,507.0,3.8906,282200.0,<1H OCEAN +-118.42,34.18,40.0,1013.0,150.0,449.0,166.0,5.7143,382400.0,<1H OCEAN +-118.41,34.19,45.0,1106.0,225.0,595.0,228.0,3.6625,190700.0,<1H OCEAN +-118.41,34.18,43.0,1840.0,356.0,966.0,323.0,4.7171,237900.0,<1H OCEAN +-118.41,34.18,30.0,2008.0,513.0,1052.0,496.0,3.0119,262200.0,<1H OCEAN +-118.41,34.19,37.0,1993.0,425.0,939.0,400.0,2.8021,224600.0,<1H OCEAN +-118.4,34.19,30.0,521.0,126.0,306.0,129.0,4.1125,216700.0,<1H OCEAN +-118.4,34.19,35.0,1631.0,356.0,862.0,368.0,3.6007,261800.0,<1H OCEAN +-118.4,34.18,32.0,3724.0,899.0,1912.0,791.0,3.5711,312700.0,<1H OCEAN +-118.4,34.17,27.0,3588.0,911.0,1891.0,871.0,3.4013,286000.0,<1H OCEAN +-118.39,34.19,25.0,3794.0,989.0,2454.0,876.0,2.9982,204200.0,<1H OCEAN +-118.39,34.18,42.0,1957.0,389.0,985.0,414.0,2.9327,240200.0,<1H OCEAN +-118.39,34.17,26.0,3345.0,818.0,1599.0,773.0,3.3516,241500.0,<1H OCEAN +-118.39,34.18,44.0,477.0,91.0,220.0,112.0,3.3906,223800.0,<1H OCEAN +-118.39,34.19,36.0,904.0,191.0,627.0,191.0,2.4167,192900.0,<1H OCEAN +-118.4,34.16,45.0,1176.0,250.0,471.0,228.0,2.3333,364700.0,<1H OCEAN +-118.4,34.16,35.0,1354.0,284.0,501.0,262.0,3.8056,384700.0,<1H OCEAN +-118.4,34.16,34.0,2638.0,580.0,1150.0,551.0,4.2989,364700.0,<1H OCEAN +-118.41,34.16,32.0,3060.0,505.0,1159.0,510.0,6.3703,465800.0,<1H OCEAN +-118.41,34.17,35.0,2027.0,428.0,879.0,402.0,4.692,330900.0,<1H OCEAN +-118.38,34.19,42.0,1308.0,289.0,950.0,302.0,2.7379,181500.0,<1H OCEAN +-118.38,34.18,40.0,2079.0,568.0,1396.0,526.0,3.0061,190800.0,<1H OCEAN +-118.38,34.18,27.0,4834.0,1527.0,3847.0,1432.0,2.1449,165300.0,<1H OCEAN +-118.38,34.18,24.0,1983.0,651.0,2251.0,574.0,2.4792,200000.0,<1H OCEAN +-118.38,34.17,33.0,1588.0,454.0,739.0,392.0,2.8208,238500.0,<1H OCEAN +-118.39,34.17,40.0,1696.0,372.0,835.0,385.0,3.6563,222400.0,<1H OCEAN +-118.37,34.18,36.0,1608.0,373.0,1217.0,374.0,2.9728,190200.0,<1H OCEAN +-118.37,34.18,42.0,1140.0,300.0,643.0,252.0,3.3958,178400.0,<1H OCEAN +-118.38,34.18,44.0,901.0,179.0,473.0,179.0,3.3125,186400.0,<1H OCEAN +-118.38,34.19,30.0,977.0,264.0,736.0,258.0,1.9866,177400.0,<1H OCEAN +-118.37,34.18,35.0,2949.0,794.0,2106.0,746.0,2.9228,177300.0,<1H OCEAN +-118.38,34.18,32.0,3553.0,1060.0,3129.0,1010.0,2.5603,174200.0,<1H OCEAN +-118.36,34.18,31.0,1109.0,354.0,1119.0,334.0,2.3056,200000.0,<1H OCEAN +-118.36,34.17,31.0,1939.0,505.0,1584.0,466.0,2.5234,199500.0,<1H OCEAN +-118.37,34.17,42.0,1713.0,416.0,1349.0,427.0,3.2596,191800.0,<1H OCEAN +-118.41,34.18,35.0,2785.0,663.0,1631.0,614.0,3.9038,276100.0,<1H OCEAN +-118.41,34.17,27.0,3277.0,648.0,1382.0,615.0,3.875,366100.0,<1H OCEAN +-118.41,34.18,35.0,1975.0,384.0,882.0,406.0,4.375,291700.0,<1H OCEAN +-118.43,34.17,32.0,3202.0,696.0,1573.0,621.0,3.4449,292900.0,<1H OCEAN +-118.43,34.17,35.0,2922.0,507.0,1130.0,485.0,5.451,341800.0,<1H OCEAN +-118.43,34.17,37.0,1982.0,331.0,794.0,340.0,5.9275,336900.0,<1H OCEAN +-118.43,34.16,34.0,2459.0,489.0,1139.0,463.0,4.0347,353600.0,<1H OCEAN +-118.43,34.16,41.0,2050.0,478.0,850.0,490.0,3.4208,343400.0,<1H OCEAN +-118.43,34.16,40.0,1134.0,184.0,452.0,187.0,4.569,333900.0,<1H OCEAN +-118.42,34.15,27.0,2795.0,602.0,1073.0,535.0,5.1496,365000.0,<1H OCEAN +-118.42,34.17,31.0,2235.0,363.0,914.0,370.0,6.1359,359700.0,<1H OCEAN +-118.42,34.16,28.0,4664.0,1040.0,1963.0,961.0,3.9028,367900.0,<1H OCEAN +-118.41,34.16,14.0,577.0,150.0,372.0,130.0,4.1875,275000.0,<1H OCEAN +-118.42,34.16,25.0,2769.0,566.0,1201.0,545.0,3.6641,386100.0,<1H OCEAN +-118.4,34.17,24.0,4443.0,1283.0,2421.0,1180.0,2.2652,269200.0,<1H OCEAN +-118.4,34.17,24.0,6347.0,,2945.0,1492.0,3.3545,221500.0,<1H OCEAN +-118.39,34.17,28.0,2790.0,748.0,1351.0,697.0,3.2052,283600.0,<1H OCEAN +-118.39,34.17,26.0,6429.0,1611.0,2806.0,1491.0,3.1929,265200.0,<1H OCEAN +-118.39,34.16,46.0,1582.0,279.0,603.0,283.0,5.1169,414300.0,<1H OCEAN +-118.39,34.16,37.0,1388.0,286.0,547.0,258.0,5.1584,444700.0,<1H OCEAN +-118.38,34.17,30.0,2016.0,622.0,1359.0,557.0,2.7708,192300.0,<1H OCEAN +-118.38,34.16,46.0,2609.0,593.0,1055.0,585.0,3.3177,309400.0,<1H OCEAN +-118.38,34.16,31.0,2197.0,501.0,944.0,474.0,3.7312,319400.0,<1H OCEAN +-118.36,34.17,44.0,2295.0,560.0,1543.0,528.0,2.3851,194100.0,<1H OCEAN +-118.37,34.17,15.0,3327.0,1011.0,2683.0,857.0,2.3784,185400.0,<1H OCEAN +-118.37,34.17,42.0,600.0,171.0,377.0,181.0,2.4107,184400.0,<1H OCEAN +-118.37,34.17,10.0,1431.0,473.0,1438.0,429.0,2.2756,221400.0,<1H OCEAN +-118.37,34.17,6.0,854.0,350.0,542.0,321.0,0.8198,325000.0,<1H OCEAN +-118.37,34.16,6.0,6526.0,2007.0,3298.0,1790.0,2.7231,250000.0,<1H OCEAN +-118.37,34.16,10.0,2606.0,748.0,1373.0,680.0,3.6128,225000.0,<1H OCEAN +-118.37,34.16,25.0,2450.0,618.0,1054.0,578.0,3.6375,262500.0,<1H OCEAN +-118.37,34.16,40.0,1973.0,382.0,774.0,352.0,4.4122,282300.0,<1H OCEAN +-118.36,34.16,43.0,2850.0,709.0,1510.0,670.0,2.4835,274300.0,<1H OCEAN +-118.36,34.16,32.0,2455.0,556.0,989.0,493.0,4.0764,325000.0,<1H OCEAN +-118.37,34.16,17.0,4150.0,1148.0,1808.0,1041.0,3.5051,232400.0,<1H OCEAN +-118.37,34.16,11.0,2901.0,871.0,1659.0,789.0,3.1106,209400.0,<1H OCEAN +-118.36,34.16,45.0,1755.0,335.0,822.0,342.0,5.1423,322900.0,<1H OCEAN +-118.36,34.16,42.0,2304.0,442.0,862.0,429.0,4.3542,417900.0,<1H OCEAN +-118.35,34.15,35.0,2245.0,393.0,783.0,402.0,4.1544,500001.0,<1H OCEAN +-118.43,34.2,20.0,4090.0,1271.0,2824.0,1053.0,2.773,140500.0,<1H OCEAN +-118.43,34.21,26.0,2867.0,671.0,1955.0,640.0,4.125,226500.0,<1H OCEAN +-118.44,34.2,28.0,1732.0,435.0,1198.0,417.0,2.9219,241300.0,<1H OCEAN +-118.44,34.21,20.0,5756.0,1477.0,4031.0,1369.0,3.2448,221200.0,<1H OCEAN +-118.45,34.21,30.0,2331.0,733.0,2172.0,707.0,2.1888,195600.0,<1H OCEAN +-118.45,34.2,19.0,3666.0,1150.0,2657.0,1090.0,2.9688,202100.0,<1H OCEAN +-118.46,34.2,13.0,2926.0,816.0,1867.0,802.0,3.5255,202700.0,<1H OCEAN +-118.46,34.21,7.0,2081.0,657.0,1456.0,535.0,3.5,186900.0,<1H OCEAN +-118.47,34.21,34.0,2512.0,603.0,1805.0,584.0,2.9735,220000.0,<1H OCEAN +-118.47,34.2,20.0,3939.0,1143.0,2475.0,1002.0,2.9025,229100.0,<1H OCEAN +-118.48,34.21,25.0,2879.0,723.0,2077.0,649.0,3.3864,197400.0,<1H OCEAN +-118.48,34.2,26.0,2027.0,559.0,1545.0,513.0,2.8974,189900.0,<1H OCEAN +-118.48,34.22,22.0,3430.0,1214.0,3618.0,1092.0,2.1974,93800.0,<1H OCEAN +-118.49,34.21,25.0,1131.0,449.0,746.0,420.0,1.3565,225000.0,<1H OCEAN +-118.49,34.19,23.0,2087.0,571.0,1809.0,553.0,3.1667,202000.0,<1H OCEAN +-118.49,34.2,35.0,1109.0,206.0,515.0,202.0,5.2118,215800.0,<1H OCEAN +-118.5,34.2,34.0,1617.0,344.0,938.0,305.0,3.915,217700.0,<1H OCEAN +-118.48,34.2,12.0,3831.0,1083.0,2258.0,967.0,2.4375,255400.0,<1H OCEAN +-118.48,34.2,23.0,2850.0,864.0,2249.0,777.0,2.6957,191700.0,<1H OCEAN +-118.48,34.19,20.0,5699.0,1594.0,3809.0,1381.0,2.8646,221100.0,<1H OCEAN +-118.48,34.19,36.0,2058.0,423.0,1132.0,423.0,3.8833,210400.0,<1H OCEAN +-118.47,34.2,25.0,4590.0,1477.0,2723.0,1195.0,2.7118,281700.0,<1H OCEAN +-118.47,34.19,33.0,3879.0,943.0,2113.0,843.0,3.892,292900.0,<1H OCEAN +-118.45,34.2,27.0,1572.0,450.0,1039.0,455.0,2.5562,190500.0,<1H OCEAN +-118.45,34.2,18.0,2729.0,800.0,2099.0,742.0,2.5842,230800.0,<1H OCEAN +-118.46,34.2,22.0,4855.0,1350.0,2519.0,1258.0,3.0893,205600.0,<1H OCEAN +-118.45,34.19,37.0,1073.0,254.0,739.0,253.0,2.4667,192200.0,<1H OCEAN +-118.46,34.19,20.0,5992.0,1820.0,4826.0,1632.0,2.7237,233500.0,<1H OCEAN +-118.46,34.19,35.0,1491.0,295.0,779.0,309.0,6.1142,256300.0,<1H OCEAN +-118.43,34.2,29.0,3051.0,694.0,1942.0,679.0,3.1118,238100.0,<1H OCEAN +-118.44,34.2,36.0,2698.0,623.0,1544.0,554.0,2.7375,234900.0,<1H OCEAN +-118.44,34.2,35.0,1717.0,478.0,1628.0,495.0,2.5197,225600.0,<1H OCEAN +-118.44,34.2,17.0,2934.0,950.0,2517.0,889.0,2.936,232500.0,<1H OCEAN +-118.43,34.19,27.0,3440.0,739.0,1827.0,712.0,4.125,245500.0,<1H OCEAN +-118.44,34.19,37.0,1516.0,344.0,983.0,347.0,5.0,243600.0,<1H OCEAN +-118.44,34.19,19.0,3487.0,959.0,2278.0,835.0,2.6709,215500.0,<1H OCEAN +-118.44,34.19,29.0,1599.0,459.0,1143.0,438.0,2.4583,199100.0,<1H OCEAN +-118.43,34.18,22.0,2052.0,568.0,1254.0,572.0,2.6364,271100.0,<1H OCEAN +-118.44,34.18,36.0,2077.0,496.0,1206.0,528.0,2.2326,221000.0,<1H OCEAN +-118.44,34.19,11.0,2891.0,951.0,2166.0,768.0,2.891,178100.0,<1H OCEAN +-118.44,34.18,17.0,1546.0,592.0,2423.0,556.0,2.1977,154200.0,<1H OCEAN +-118.45,34.19,11.0,2479.0,900.0,2466.0,855.0,2.2264,181300.0,<1H OCEAN +-118.45,34.18,22.0,2516.0,826.0,3350.0,713.0,2.0192,158300.0,<1H OCEAN +-118.46,34.18,27.0,2582.0,719.0,2038.0,718.0,3.0877,174200.0,<1H OCEAN +-118.47,34.19,41.0,1104.0,196.0,495.0,196.0,5.0929,225000.0,<1H OCEAN +-118.45,34.18,39.0,1810.0,388.0,839.0,380.0,3.7171,228800.0,<1H OCEAN +-118.45,34.18,34.0,1843.0,442.0,861.0,417.0,3.6875,246400.0,<1H OCEAN +-118.46,34.18,33.0,1791.0,386.0,844.0,397.0,4.5081,251400.0,<1H OCEAN +-118.46,34.18,35.0,1819.0,465.0,1336.0,419.0,3.4583,253200.0,<1H OCEAN +-118.44,34.18,35.0,972.0,270.0,550.0,256.0,2.2461,215000.0,<1H OCEAN +-118.44,34.17,25.0,4966.0,1134.0,1941.0,958.0,3.8081,286700.0,<1H OCEAN +-118.45,34.18,33.0,2077.0,486.0,1021.0,450.0,3.6019,225000.0,<1H OCEAN +-118.43,34.18,25.0,3830.0,1105.0,2328.0,1017.0,2.6238,210000.0,<1H OCEAN +-118.44,34.18,33.0,2127.0,414.0,1056.0,391.0,4.375,286100.0,<1H OCEAN +-118.43,34.17,33.0,1679.0,404.0,933.0,412.0,2.6979,266000.0,<1H OCEAN +-118.43,34.17,34.0,2180.0,424.0,906.0,429.0,4.4464,353100.0,<1H OCEAN +-118.43,34.17,42.0,777.0,102.0,284.0,113.0,11.2093,500001.0,<1H OCEAN +-118.44,34.17,29.0,2685.0,642.0,1085.0,599.0,3.2763,279400.0,<1H OCEAN +-118.43,34.16,34.0,2622.0,467.0,1233.0,476.0,4.0474,379700.0,<1H OCEAN +-118.44,34.16,35.0,3080.0,642.0,1362.0,623.0,4.1218,328500.0,<1H OCEAN +-118.44,34.16,33.0,1616.0,322.0,580.0,311.0,4.0391,337500.0,<1H OCEAN +-118.45,34.16,22.0,4982.0,1358.0,2237.0,1220.0,3.7105,272600.0,<1H OCEAN +-118.45,34.17,21.0,2152.0,527.0,996.0,470.0,3.2386,277300.0,<1H OCEAN +-118.45,34.17,33.0,3100.0,687.0,1388.0,658.0,4.3333,261300.0,<1H OCEAN +-118.46,34.17,24.0,2814.0,675.0,1463.0,620.0,4.1875,309300.0,<1H OCEAN +-118.46,34.17,22.0,6707.0,1737.0,2620.0,1610.0,3.1478,273700.0,<1H OCEAN +-118.45,34.16,33.0,2544.0,500.0,1035.0,492.0,4.475,314800.0,<1H OCEAN +-118.46,34.16,28.0,2795.0,622.0,1173.0,545.0,4.4423,280400.0,<1H OCEAN +-118.46,34.16,26.0,2548.0,647.0,1098.0,540.0,4.3839,299100.0,<1H OCEAN +-118.54,34.21,22.0,6064.0,1826.0,4876.0,1697.0,2.875,227100.0,<1H OCEAN +-118.54,34.21,32.0,2593.0,566.0,1596.0,547.0,3.9886,199200.0,<1H OCEAN +-118.54,34.22,35.0,1664.0,300.0,1000.0,309.0,4.6731,224100.0,<1H OCEAN +-118.54,34.2,37.0,1600.0,349.0,1012.0,366.0,4.1597,201600.0,<1H OCEAN +-118.54,34.19,33.0,2205.0,453.0,1242.0,419.0,4.1319,203700.0,<1H OCEAN +-118.51,34.22,36.0,2794.0,523.0,1334.0,472.0,4.3462,222100.0,<1H OCEAN +-118.5,34.21,36.0,1254.0,229.0,629.0,245.0,4.9643,236100.0,<1H OCEAN +-118.5,34.21,36.0,1656.0,310.0,817.0,308.0,5.5675,215900.0,<1H OCEAN +-118.51,34.22,36.0,1952.0,387.0,1156.0,392.0,4.185,209200.0,<1H OCEAN +-118.51,34.21,36.0,2396.0,421.0,1064.0,398.0,4.7,223600.0,<1H OCEAN +-118.51,34.22,36.0,1493.0,285.0,766.0,272.0,4.8646,213200.0,<1H OCEAN +-118.52,34.22,35.0,1275.0,222.0,959.0,226.0,5.0282,195400.0,<1H OCEAN +-118.52,34.22,35.0,1620.0,272.0,1052.0,248.0,5.5209,203300.0,<1H OCEAN +-118.52,34.21,36.0,2394.0,424.0,1490.0,427.0,4.3261,206700.0,<1H OCEAN +-118.52,34.21,34.0,1663.0,299.0,762.0,282.0,5.1265,211000.0,<1H OCEAN +-118.53,34.22,29.0,4101.0,849.0,2630.0,867.0,4.6607,199800.0,<1H OCEAN +-118.53,34.21,18.0,3124.0,796.0,1855.0,725.0,2.9389,213200.0,<1H OCEAN +-118.55,34.21,35.0,2592.0,490.0,1427.0,434.0,5.0623,246400.0,<1H OCEAN +-118.56,34.22,35.0,1843.0,329.0,1041.0,317.0,4.4271,205100.0,<1H OCEAN +-118.56,34.21,36.0,1286.0,242.0,788.0,248.0,3.5333,196800.0,<1H OCEAN +-118.56,34.22,34.0,1599.0,294.0,819.0,306.0,4.3194,197000.0,<1H OCEAN +-118.55,34.21,33.0,3910.0,838.0,2097.0,810.0,3.8247,208700.0,<1H OCEAN +-118.56,34.21,13.0,8327.0,1849.0,4126.0,1773.0,3.7313,189800.0,<1H OCEAN +-118.52,34.2,35.0,2891.0,594.0,1757.0,581.0,4.3571,199800.0,<1H OCEAN +-118.53,34.2,33.0,3270.0,818.0,2118.0,763.0,3.225,205300.0,<1H OCEAN +-118.5,34.21,35.0,1668.0,332.0,807.0,311.0,4.5125,200300.0,<1H OCEAN +-118.51,34.2,35.0,1614.0,308.0,850.0,330.0,4.1806,209000.0,<1H OCEAN +-118.51,34.2,37.0,2066.0,434.0,1031.0,414.0,4.0924,188400.0,<1H OCEAN +-118.52,34.21,36.0,1328.0,287.0,823.0,273.0,4.5648,193700.0,<1H OCEAN +-118.5,34.2,42.0,1558.0,322.0,884.0,334.0,2.2304,203800.0,<1H OCEAN +-118.51,34.2,33.0,2327.0,479.0,1166.0,472.0,4.2344,262500.0,<1H OCEAN +-118.51,34.2,34.0,2871.0,581.0,1350.0,535.0,3.7049,227500.0,<1H OCEAN +-118.51,34.19,35.0,2537.0,418.0,1161.0,421.0,5.3028,229200.0,<1H OCEAN +-118.51,34.19,38.0,2182.0,409.0,1141.0,379.0,4.2865,221100.0,<1H OCEAN +-118.5,34.2,18.0,4249.0,933.0,2047.0,909.0,4.1304,229100.0,<1H OCEAN +-118.5,34.19,35.0,2720.0,490.0,1158.0,445.0,5.0796,228300.0,<1H OCEAN +-118.5,34.19,26.0,2156.0,509.0,1142.0,470.0,4.0,224700.0,<1H OCEAN +-118.52,34.2,19.0,4315.0,1304.0,2490.0,1222.0,2.6437,195000.0,<1H OCEAN +-118.52,34.2,37.0,1795.0,346.0,1082.0,354.0,4.9102,207200.0,<1H OCEAN +-118.53,34.2,26.0,2221.0,662.0,1998.0,603.0,2.8701,191100.0,<1H OCEAN +-118.55,34.2,21.0,2549.0,651.0,1624.0,628.0,3.6905,179800.0,<1H OCEAN +-118.55,34.19,18.0,5862.0,,3161.0,1280.0,3.1106,170600.0,<1H OCEAN +-118.55,34.2,31.0,1963.0,420.0,1494.0,415.0,3.5313,211800.0,<1H OCEAN +-118.52,34.19,42.0,881.0,170.0,464.0,163.0,2.9511,203900.0,<1H OCEAN +-118.52,34.19,37.0,1560.0,275.0,763.0,284.0,3.8516,206900.0,<1H OCEAN +-118.52,34.19,37.0,1892.0,347.0,1039.0,343.0,4.8295,212100.0,<1H OCEAN +-118.53,34.19,32.0,2618.0,692.0,1961.0,633.0,2.625,192300.0,<1H OCEAN +-118.52,34.18,34.0,2307.0,388.0,1168.0,427.0,4.2143,245400.0,<1H OCEAN +-118.53,34.18,26.0,4175.0,885.0,2118.0,778.0,4.2083,240300.0,<1H OCEAN +-118.56,34.2,36.0,1544.0,308.0,891.0,286.0,4.175,190900.0,<1H OCEAN +-118.56,34.2,35.0,2273.0,,1431.0,403.0,4.0789,196700.0,<1H OCEAN +-118.56,34.19,35.0,782.0,144.0,425.0,140.0,5.4548,201400.0,<1H OCEAN +-118.56,34.19,34.0,1237.0,242.0,671.0,221.0,3.9615,183600.0,<1H OCEAN +-118.56,34.19,34.0,2579.0,561.0,1237.0,517.0,4.433,235100.0,<1H OCEAN +-118.56,34.18,36.0,1366.0,224.0,719.0,270.0,4.8264,251000.0,<1H OCEAN +-118.54,34.19,22.0,3380.0,790.0,2199.0,737.0,2.5739,239200.0,<1H OCEAN +-118.54,34.18,25.0,1938.0,457.0,1280.0,425.0,3.9632,240300.0,<1H OCEAN +-118.55,34.19,36.0,978.0,170.0,475.0,192.0,4.675,222500.0,<1H OCEAN +-118.55,34.19,31.0,1856.0,370.0,990.0,360.0,4.3654,223800.0,<1H OCEAN +-118.58,34.21,24.0,2642.0,696.0,1649.0,633.0,3.0187,217700.0,<1H OCEAN +-118.59,34.21,26.0,2335.0,669.0,1986.0,645.0,2.9974,178800.0,<1H OCEAN +-118.59,34.2,18.0,847.0,185.0,733.0,178.0,5.2149,201900.0,<1H OCEAN +-118.58,34.2,37.0,1389.0,252.0,826.0,249.0,5.015,220900.0,<1H OCEAN +-118.57,34.22,27.0,2795.0,606.0,1702.0,586.0,3.7798,258400.0,<1H OCEAN +-118.57,34.21,23.0,4891.0,793.0,2447.0,765.0,5.8798,270500.0,<1H OCEAN +-118.57,34.22,17.0,3262.0,753.0,1879.0,708.0,4.1359,255200.0,<1H OCEAN +-118.58,34.21,13.0,6227.0,1317.0,3739.0,1226.0,4.0313,299300.0,<1H OCEAN +-118.58,34.22,35.0,2560.0,441.0,1428.0,468.0,5.6345,228200.0,<1H OCEAN +-118.58,34.21,27.0,2209.0,353.0,1034.0,344.0,4.7125,250900.0,<1H OCEAN +-118.59,34.21,34.0,1943.0,320.0,895.0,305.0,5.0462,227700.0,<1H OCEAN +-118.59,34.21,34.0,2389.0,521.0,1560.0,514.0,4.8333,225400.0,<1H OCEAN +-118.6,34.21,21.0,9512.0,2560.0,7282.0,2387.0,2.8039,227500.0,<1H OCEAN +-118.61,34.21,34.0,3494.0,557.0,1861.0,576.0,5.6407,251500.0,<1H OCEAN +-118.62,34.22,33.0,1636.0,275.0,866.0,289.0,5.6356,241300.0,<1H OCEAN +-118.62,34.21,26.0,3234.0,517.0,1597.0,513.0,6.1074,258600.0,<1H OCEAN +-118.62,34.22,34.0,2633.0,471.0,1313.0,428.0,4.0909,232900.0,<1H OCEAN +-118.61,34.21,41.0,1058.0,228.0,778.0,245.0,3.3534,180500.0,<1H OCEAN +-118.61,34.2,16.0,1718.0,467.0,896.0,475.0,3.6296,160900.0,<1H OCEAN +-118.61,34.21,33.0,2609.0,431.0,1208.0,406.0,5.4527,227100.0,<1H OCEAN +-118.62,34.2,23.0,3098.0,542.0,1486.0,492.0,5.7613,235800.0,<1H OCEAN +-118.63,34.21,31.0,3952.0,647.0,1762.0,588.0,5.5709,244800.0,<1H OCEAN +-118.64,34.22,16.0,4312.0,574.0,1902.0,574.0,8.4438,390000.0,<1H OCEAN +-118.65,34.21,5.0,5429.0,665.0,2315.0,687.0,9.6465,500001.0,<1H OCEAN +-118.65,34.2,23.0,7480.0,1084.0,3037.0,1058.0,6.9223,338400.0,<1H OCEAN +-118.62,34.2,32.0,3233.0,553.0,1678.0,545.0,5.0025,234900.0,<1H OCEAN +-118.63,34.2,19.0,7411.0,1045.0,2814.0,950.0,6.7785,336100.0,<1H OCEAN +-118.59,34.21,17.0,2737.0,868.0,2924.0,785.0,2.5797,183500.0,<1H OCEAN +-118.59,34.2,21.0,1789.0,,2300.0,677.0,2.754,179800.0,<1H OCEAN +-118.6,34.2,10.0,2869.0,941.0,2162.0,829.0,3.2297,150000.0,<1H OCEAN +-118.6,34.21,19.0,2581.0,857.0,2004.0,784.0,2.6159,182300.0,<1H OCEAN +-118.56,34.2,35.0,1770.0,362.0,1083.0,355.0,5.0483,221000.0,<1H OCEAN +-118.57,34.21,36.0,878.0,167.0,499.0,179.0,4.1181,190400.0,<1H OCEAN +-118.57,34.2,18.0,7157.0,1869.0,4642.0,1699.0,3.1818,208000.0,<1H OCEAN +-118.58,34.2,21.0,2979.0,744.0,1824.0,692.0,3.5,223700.0,<1H OCEAN +-118.56,34.19,36.0,2600.0,441.0,1246.0,426.0,4.1111,215600.0,<1H OCEAN +-118.57,34.2,36.0,2559.0,469.0,1358.0,445.0,4.5568,201500.0,<1H OCEAN +-118.57,34.2,33.0,1759.0,311.0,943.0,315.0,5.223,209200.0,<1H OCEAN +-118.58,34.2,35.0,1558.0,267.0,793.0,249.0,5.1463,220200.0,<1H OCEAN +-118.58,34.2,35.0,1323.0,228.0,756.0,216.0,4.233,221300.0,<1H OCEAN +-118.56,34.19,34.0,2185.0,372.0,986.0,347.0,4.8125,266700.0,<1H OCEAN +-118.58,34.19,35.0,2329.0,399.0,966.0,336.0,3.8839,224900.0,<1H OCEAN +-118.58,34.19,27.0,4286.0,1071.0,2863.0,1033.0,3.3125,222800.0,<1H OCEAN +-118.58,34.19,15.0,3061.0,1079.0,2173.0,1078.0,2.85,187500.0,<1H OCEAN +-118.58,34.18,28.0,908.0,142.0,368.0,143.0,5.6159,340500.0,<1H OCEAN +-118.62,34.2,29.0,2421.0,402.0,1120.0,388.0,5.0309,244800.0,<1H OCEAN +-118.62,34.18,25.0,3124.0,468.0,1241.0,439.0,6.4044,333100.0,<1H OCEAN +-118.62,34.19,35.0,1934.0,307.0,905.0,315.0,5.5101,267400.0,<1H OCEAN +-118.61,34.2,29.0,1673.0,284.0,794.0,270.0,5.5191,245800.0,<1H OCEAN +-118.61,34.19,28.0,3824.0,749.0,1790.0,701.0,4.1154,246400.0,<1H OCEAN +-118.61,34.19,34.0,703.0,127.0,369.0,127.0,4.3125,210100.0,<1H OCEAN +-118.6,34.19,16.0,14912.0,4183.0,5105.0,3302.0,2.8312,213900.0,<1H OCEAN +-118.63,34.19,32.0,3568.0,591.0,1741.0,563.0,5.1529,259600.0,<1H OCEAN +-118.63,34.18,32.0,1646.0,242.0,697.0,233.0,6.6689,433000.0,<1H OCEAN +-118.64,34.19,30.0,2399.0,373.0,1062.0,377.0,6.0094,245600.0,<1H OCEAN +-118.64,34.19,33.0,3017.0,494.0,1423.0,470.0,5.6163,248400.0,<1H OCEAN +-118.64,34.18,33.0,3808.0,623.0,1784.0,615.0,5.1641,263400.0,<1H OCEAN +-118.64,34.19,28.0,3274.0,571.0,1424.0,521.0,4.4167,247300.0,<1H OCEAN +-118.65,34.18,27.0,1793.0,339.0,1016.0,326.0,4.925,240300.0,<1H OCEAN +-118.65,34.19,27.0,2772.0,511.0,1346.0,497.0,5.2016,243000.0,<1H OCEAN +-118.66,34.19,23.0,7544.0,1031.0,3221.0,1043.0,7.642,374900.0,<1H OCEAN +-118.63,34.17,33.0,4769.0,787.0,2019.0,743.0,5.5798,338200.0,<1H OCEAN +-118.64,34.17,26.0,6767.0,903.0,2574.0,883.0,7.7846,409000.0,<1H OCEAN +-118.57,34.18,36.0,2981.0,441.0,1243.0,413.0,6.5304,439800.0,<1H OCEAN +-118.57,34.17,35.0,2072.0,318.0,908.0,342.0,6.0928,327300.0,<1H OCEAN +-118.58,34.17,29.0,3393.0,574.0,1471.0,587.0,6.2064,334900.0,<1H OCEAN +-118.59,34.18,7.0,11853.0,2691.0,4404.0,2447.0,4.2009,271300.0,<1H OCEAN +-118.61,34.17,19.0,5944.0,1345.0,2372.0,1250.0,3.8819,328900.0,<1H OCEAN +-118.62,34.17,32.0,1491.0,355.0,756.0,296.0,3.0404,262800.0,<1H OCEAN +-118.62,34.17,34.0,3268.0,538.0,1463.0,519.0,6.8482,308300.0,<1H OCEAN +-118.63,34.18,33.0,5252.0,760.0,2041.0,730.0,6.7977,389700.0,<1H OCEAN +-118.65,34.18,26.0,4607.0,656.0,1769.0,643.0,7.4918,367600.0,<1H OCEAN +-118.66,34.18,25.0,6612.0,857.0,2519.0,843.0,8.3912,419000.0,<1H OCEAN +-118.61,34.17,31.0,1689.0,362.0,705.0,360.0,4.0,278500.0,<1H OCEAN +-118.61,34.15,32.0,4491.0,815.0,1696.0,749.0,4.9102,319100.0,<1H OCEAN +-118.61,34.16,29.0,4364.0,647.0,1550.0,624.0,6.8107,367400.0,<1H OCEAN +-118.63,34.16,33.0,2896.0,455.0,1116.0,411.0,6.0192,347700.0,<1H OCEAN +-118.63,34.16,30.0,3346.0,487.0,1296.0,495.0,7.457,392700.0,<1H OCEAN +-118.62,34.15,26.0,5661.0,791.0,2493.0,780.0,7.9814,409900.0,<1H OCEAN +-118.57,34.17,31.0,1950.0,383.0,870.0,357.0,3.1875,500001.0,<1H OCEAN +-118.58,34.17,18.0,6476.0,1082.0,2413.0,958.0,5.6327,500001.0,<1H OCEAN +-118.59,34.17,36.0,1887.0,359.0,761.0,329.0,5.4847,296000.0,<1H OCEAN +-118.6,34.16,37.0,3441.0,584.0,1283.0,544.0,4.1656,313100.0,<1H OCEAN +-118.6,34.16,32.0,3999.0,667.0,1628.0,631.0,6.0794,338500.0,<1H OCEAN +-118.57,34.15,22.0,5791.0,706.0,2059.0,673.0,10.9201,500001.0,<1H OCEAN +-118.58,34.15,21.0,3856.0,547.0,1422.0,535.0,8.4196,450700.0,<1H OCEAN +-118.59,34.15,29.0,2023.0,330.0,747.0,304.0,6.7694,369700.0,<1H OCEAN +-118.6,34.15,28.0,4570.0,744.0,1693.0,695.0,6.14,361900.0,<1H OCEAN +-118.59,34.14,19.0,1303.0,155.0,450.0,145.0,10.5511,483100.0,<1H OCEAN +-118.49,34.18,31.0,3073.0,674.0,1486.0,684.0,4.8984,311700.0,<1H OCEAN +-118.51,34.18,37.0,1893.0,365.0,911.0,324.0,4.8036,295300.0,<1H OCEAN +-118.51,34.17,31.0,3252.0,834.0,1411.0,760.0,3.1885,219000.0,<1H OCEAN +-118.52,34.18,43.0,1700.0,380.0,930.0,349.0,3.675,213100.0,<1H OCEAN +-118.52,34.18,46.0,2082.0,438.0,1047.0,393.0,3.6534,216000.0,<1H OCEAN +-118.52,34.18,42.0,1611.0,410.0,879.0,386.0,3.1923,221800.0,<1H OCEAN +-118.53,34.17,18.0,6430.0,1412.0,2897.0,1348.0,3.855,243800.0,<1H OCEAN +-118.54,34.17,11.0,1080.0,174.0,386.0,160.0,6.1274,315900.0,<1H OCEAN +-118.55,34.18,32.0,3011.0,529.0,1287.0,525.0,5.0605,311000.0,<1H OCEAN +-118.56,34.18,39.0,1819.0,291.0,770.0,278.0,5.4088,457300.0,<1H OCEAN +-118.54,34.18,17.0,7214.0,1994.0,4100.0,1823.0,3.0943,174500.0,<1H OCEAN +-118.53,34.18,16.0,7194.0,1976.0,3687.0,1894.0,3.1887,189300.0,<1H OCEAN +-118.54,34.17,34.0,2458.0,433.0,1034.0,373.0,5.6738,443600.0,<1H OCEAN +-118.54,34.17,25.0,3352.0,891.0,1815.0,860.0,2.8528,425000.0,<1H OCEAN +-118.55,34.17,36.0,2127.0,297.0,761.0,274.0,7.8392,500001.0,<1H OCEAN +-118.56,34.17,35.0,2987.0,391.0,1244.0,387.0,7.1322,500001.0,<1H OCEAN +-118.52,34.17,20.0,17377.0,4457.0,7450.0,4204.0,3.2154,259600.0,<1H OCEAN +-118.52,34.16,39.0,2693.0,478.0,1219.0,435.0,5.17,335400.0,<1H OCEAN +-118.53,34.16,32.0,3554.0,762.0,1623.0,750.0,3.6141,290600.0,<1H OCEAN +-118.51,34.16,23.0,11154.0,1995.0,4076.0,1809.0,5.4609,500001.0,<1H OCEAN +-118.48,34.16,32.0,2108.0,309.0,769.0,274.0,8.7172,500001.0,<1H OCEAN +-118.49,34.16,37.0,3333.0,488.0,1171.0,485.0,6.4958,500001.0,<1H OCEAN +-118.5,34.16,34.0,3547.0,523.0,1187.0,500.0,7.139,424000.0,<1H OCEAN +-118.5,34.15,33.0,3104.0,387.0,1111.0,376.0,13.4196,500001.0,<1H OCEAN +-118.5,34.17,37.0,880.0,,369.0,155.0,4.1429,303600.0,<1H OCEAN +-118.49,34.15,33.0,2829.0,360.0,1010.0,363.0,10.3587,500001.0,<1H OCEAN +-118.49,34.14,28.0,3539.0,441.0,1190.0,421.0,10.6796,500001.0,<1H OCEAN +-118.49,34.13,24.0,4394.0,,1443.0,528.0,11.2979,500001.0,<1H OCEAN +-118.51,34.14,28.0,6748.0,904.0,2431.0,876.0,12.8879,500001.0,<1H OCEAN +-118.53,34.14,28.0,6920.0,906.0,2515.0,860.0,9.2189,500001.0,<1H OCEAN +-118.54,34.15,26.0,10111.0,1295.0,3599.0,1257.0,10.2292,500001.0,<1H OCEAN +-118.56,34.14,23.0,9657.0,1189.0,3585.0,1162.0,10.4399,500001.0,<1H OCEAN +-118.43,34.15,28.0,6270.0,1706.0,2549.0,1497.0,3.2241,295800.0,<1H OCEAN +-118.43,34.15,42.0,1293.0,214.0,459.0,217.0,7.672,467600.0,<1H OCEAN +-118.43,34.15,26.0,2900.0,667.0,1090.0,590.0,3.7125,447400.0,<1H OCEAN +-118.43,34.15,31.0,1856.0,425.0,795.0,426.0,2.8448,360600.0,<1H OCEAN +-118.44,34.15,29.0,5474.0,1457.0,2352.0,1326.0,3.415,382500.0,<1H OCEAN +-118.44,34.15,44.0,1778.0,251.0,641.0,251.0,10.0549,500001.0,<1H OCEAN +-118.44,34.15,15.0,4420.0,1076.0,1669.0,1016.0,4.6375,359100.0,<1H OCEAN +-118.44,34.15,37.0,1335.0,286.0,539.0,279.0,3.2813,301700.0,<1H OCEAN +-118.44,34.15,38.0,1387.0,337.0,713.0,343.0,2.9352,304500.0,<1H OCEAN +-118.45,34.16,22.0,7828.0,2038.0,3303.0,1922.0,3.6171,318300.0,<1H OCEAN +-118.45,34.15,10.0,1091.0,260.0,517.0,266.0,4.1727,332600.0,<1H OCEAN +-118.45,34.15,20.0,3876.0,799.0,1334.0,753.0,4.5656,478400.0,<1H OCEAN +-118.46,34.16,38.0,1495.0,300.0,598.0,280.0,3.4698,265400.0,<1H OCEAN +-118.46,34.16,16.0,4590.0,1200.0,2195.0,1139.0,3.8273,334900.0,<1H OCEAN +-118.47,34.15,7.0,6306.0,1473.0,2381.0,1299.0,4.642,457300.0,<1H OCEAN +-118.47,34.16,30.0,3823.0,740.0,1449.0,612.0,4.6,392500.0,<1H OCEAN +-118.47,34.15,43.0,804.0,117.0,267.0,110.0,8.2269,500001.0,<1H OCEAN +-118.48,34.15,31.0,2536.0,429.0,990.0,424.0,5.4591,495500.0,<1H OCEAN +-118.48,34.16,30.0,3507.0,536.0,1427.0,525.0,6.7082,500001.0,<1H OCEAN +-118.48,34.14,31.0,9320.0,1143.0,2980.0,1109.0,10.3599,500001.0,<1H OCEAN +-118.46,34.14,34.0,5264.0,771.0,1738.0,753.0,8.8115,500001.0,<1H OCEAN +-118.47,34.14,36.0,2873.0,420.0,850.0,379.0,8.153,500001.0,<1H OCEAN +-118.47,34.14,34.0,3646.0,610.0,1390.0,607.0,7.629,500001.0,<1H OCEAN +-118.43,34.14,44.0,1693.0,239.0,498.0,216.0,10.9237,500001.0,<1H OCEAN +-118.43,34.13,37.0,4400.0,695.0,1521.0,666.0,8.2954,500001.0,<1H OCEAN +-118.45,34.14,33.0,1741.0,274.0,588.0,267.0,7.9625,490800.0,<1H OCEAN +-118.35,34.15,52.0,1680.0,238.0,493.0,211.0,9.042,500001.0,<1H OCEAN +-118.36,34.15,41.0,3545.0,698.0,1221.0,651.0,4.3,500001.0,<1H OCEAN +-118.36,34.15,34.0,3659.0,921.0,1338.0,835.0,3.6202,366100.0,<1H OCEAN +-118.37,34.15,23.0,4604.0,1319.0,2391.0,1227.0,3.1373,263100.0,<1H OCEAN +-118.37,34.15,29.0,2630.0,617.0,1071.0,573.0,3.3669,376100.0,<1H OCEAN +-118.38,34.16,42.0,2358.0,546.0,1065.0,523.0,3.1289,320600.0,<1H OCEAN +-118.38,34.15,36.0,2933.0,619.0,1115.0,579.0,4.3036,365900.0,<1H OCEAN +-118.39,34.15,29.0,3110.0,650.0,1212.0,642.0,4.2031,394400.0,<1H OCEAN +-118.39,34.15,29.0,917.0,181.0,379.0,183.0,3.4612,425000.0,<1H OCEAN +-118.39,34.16,20.0,4084.0,1062.0,1637.0,987.0,3.2388,256300.0,<1H OCEAN +-118.4,34.15,31.0,3881.0,909.0,1535.0,846.0,3.0398,369100.0,<1H OCEAN +-118.41,34.15,33.0,4032.0,868.0,1695.0,869.0,4.3468,425900.0,<1H OCEAN +-118.42,34.15,48.0,680.0,131.0,268.0,126.0,4.615,371400.0,<1H OCEAN +-118.42,34.15,18.0,1880.0,420.0,681.0,333.0,4.3214,372300.0,<1H OCEAN +-118.42,34.15,31.0,1861.0,430.0,736.0,360.0,5.2853,355900.0,<1H OCEAN +-118.42,34.16,17.0,277.0,70.0,119.0,59.0,4.0208,341700.0,<1H OCEAN +-118.42,34.16,46.0,54.0,9.0,20.0,6.0,0.536,375000.0,<1H OCEAN +-118.4,34.15,41.0,2394.0,500.0,837.0,417.0,4.3889,380400.0,<1H OCEAN +-118.4,34.15,44.0,2515.0,510.0,967.0,484.0,5.0754,374500.0,<1H OCEAN +-118.41,34.15,24.0,3891.0,866.0,1568.0,830.0,4.1656,364700.0,<1H OCEAN +-118.41,34.15,46.0,1628.0,259.0,500.0,258.0,6.083,424000.0,<1H OCEAN +-118.36,34.14,30.0,1376.0,317.0,629.0,320.0,3.6823,295200.0,<1H OCEAN +-118.37,34.14,8.0,4382.0,1560.0,2138.0,1411.0,3.5714,197900.0,<1H OCEAN +-118.37,34.14,21.0,4670.0,1161.0,1914.0,1094.0,3.7986,367700.0,<1H OCEAN +-118.38,34.14,42.0,1253.0,225.0,492.0,224.0,7.7112,386700.0,<1H OCEAN +-118.39,34.14,19.0,5076.0,1034.0,2021.0,960.0,5.5683,309200.0,<1H OCEAN +-118.39,34.15,36.0,2696.0,713.0,905.0,659.0,3.1146,373500.0,<1H OCEAN +-118.35,34.13,39.0,1610.0,278.0,511.0,278.0,4.3333,385900.0,<1H OCEAN +-118.34,34.12,41.0,3257.0,679.0,1237.0,638.0,4.2415,409600.0,<1H OCEAN +-118.36,34.13,36.0,6871.0,1180.0,2216.0,1130.0,8.0499,495600.0,<1H OCEAN +-118.37,34.14,23.0,1883.0,512.0,774.0,478.0,3.5096,396400.0,<1H OCEAN +-118.37,34.13,28.0,4287.0,627.0,1498.0,615.0,8.5677,500001.0,<1H OCEAN +-118.39,34.14,34.0,4624.0,781.0,1572.0,719.0,6.5533,500001.0,<1H OCEAN +-118.38,34.14,40.0,1965.0,354.0,666.0,357.0,6.0876,483800.0,<1H OCEAN +-118.4,34.13,32.0,8262.0,1156.0,2712.0,1125.0,10.5575,500001.0,<1H OCEAN +-118.4,34.14,52.0,1695.0,281.0,595.0,264.0,6.0678,399300.0,<1H OCEAN +-118.4,34.14,45.0,417.0,89.0,187.0,88.0,5.1377,360700.0,<1H OCEAN +-118.41,34.14,33.0,778.0,143.0,258.0,130.0,5.738,497600.0,<1H OCEAN +-118.42,34.14,27.0,3990.0,892.0,1417.0,800.0,4.0439,500001.0,<1H OCEAN +-118.42,34.13,38.0,3830.0,518.0,1292.0,516.0,12.7823,500001.0,<1H OCEAN +-118.22,34.14,52.0,2298.0,406.0,1203.0,387.0,5.5291,274600.0,<1H OCEAN +-118.22,34.14,52.0,1388.0,271.0,735.0,239.0,3.7404,247700.0,<1H OCEAN +-118.2,34.14,52.0,3800.0,646.0,1842.0,620.0,5.5524,293900.0,<1H OCEAN +-118.19,34.14,46.0,2387.0,488.0,1181.0,456.0,3.6058,257900.0,<1H OCEAN +-118.19,34.14,38.0,1826.0,300.0,793.0,297.0,5.2962,291500.0,<1H OCEAN +-118.23,34.14,39.0,277.0,89.0,182.0,91.0,2.3958,175000.0,<1H OCEAN +-118.22,34.14,50.0,3657.0,708.0,1725.0,644.0,5.5456,258100.0,<1H OCEAN +-118.22,34.13,35.0,2983.0,526.0,1614.0,543.0,5.7794,272400.0,<1H OCEAN +-118.2,34.14,52.0,2090.0,466.0,1219.0,390.0,4.0909,204200.0,<1H OCEAN +-118.21,34.14,44.0,1681.0,407.0,1105.0,387.0,3.2222,186500.0,<1H OCEAN +-118.21,34.14,25.0,1908.0,628.0,1412.0,588.0,2.2267,189800.0,<1H OCEAN +-118.2,34.14,51.0,1941.0,378.0,1012.0,371.0,3.9375,217000.0,<1H OCEAN +-118.19,34.14,47.0,2525.0,523.0,1514.0,498.0,4.3359,209200.0,<1H OCEAN +-118.19,34.13,52.0,2012.0,458.0,1314.0,434.0,3.925,180400.0,<1H OCEAN +-118.2,34.13,52.0,2035.0,459.0,2589.0,438.0,3.5349,193600.0,<1H OCEAN +-118.21,34.13,52.0,2465.0,611.0,1433.0,570.0,3.25,214200.0,<1H OCEAN +-118.22,34.13,47.0,1585.0,420.0,949.0,366.0,2.7098,173800.0,<1H OCEAN +-118.22,34.13,52.0,791.0,174.0,501.0,162.0,3.3542,178100.0,<1H OCEAN +-118.18,34.13,52.0,2228.0,475.0,1311.0,452.0,3.5341,182100.0,<1H OCEAN +-118.18,34.12,52.0,1081.0,311.0,904.0,283.0,1.9219,165100.0,<1H OCEAN +-118.18,34.12,45.0,2397.0,488.0,1569.0,471.0,4.21,167900.0,<1H OCEAN +-118.17,34.12,35.0,2568.0,672.0,1696.0,605.0,2.9154,169200.0,<1H OCEAN +-118.18,34.12,29.0,2640.0,737.0,1795.0,655.0,2.369,173400.0,<1H OCEAN +-118.17,34.12,30.0,3376.0,720.0,1990.0,725.0,3.7813,232000.0,<1H OCEAN +-118.19,34.13,50.0,1309.0,302.0,883.0,293.0,3.1287,198000.0,<1H OCEAN +-118.19,34.12,52.0,679.0,132.0,483.0,163.0,4.2344,162500.0,<1H OCEAN +-118.19,34.12,41.0,2591.0,682.0,2366.0,583.0,2.3071,146400.0,<1H OCEAN +-118.19,34.12,44.0,1219.0,324.0,1036.0,282.0,4.0417,170600.0,<1H OCEAN +-118.19,34.12,36.0,2833.0,720.0,2148.0,709.0,2.7012,172100.0,<1H OCEAN +-118.2,34.13,30.0,3369.0,824.0,2032.0,795.0,4.0052,196400.0,<1H OCEAN +-118.2,34.13,50.0,2929.0,588.0,1931.0,574.0,3.3438,173600.0,<1H OCEAN +-118.2,34.12,52.0,1580.0,426.0,1462.0,406.0,3.3326,167600.0,<1H OCEAN +-118.2,34.12,41.0,1908.0,503.0,1557.0,453.0,2.9194,162000.0,<1H OCEAN +-118.21,34.12,52.0,1590.0,360.0,1127.0,321.0,3.4625,173900.0,<1H OCEAN +-118.21,34.12,41.0,1904.0,514.0,1666.0,498.0,3.6845,175800.0,<1H OCEAN +-118.21,34.12,52.0,1301.0,389.0,1189.0,361.0,2.5139,190000.0,<1H OCEAN +-118.2,34.11,52.0,678.0,173.0,791.0,186.0,4.0625,171300.0,<1H OCEAN +-118.2,34.11,46.0,3659.0,1068.0,4153.0,993.0,2.5211,162900.0,<1H OCEAN +-118.2,34.11,52.0,1901.0,525.0,1856.0,480.0,3.0,156400.0,<1H OCEAN +-118.2,34.12,44.0,1565.0,398.0,1500.0,407.0,2.8125,155600.0,<1H OCEAN +-118.19,34.12,46.0,3387.0,820.0,2833.0,813.0,2.987,176900.0,<1H OCEAN +-118.19,34.11,40.0,1266.0,348.0,1032.0,315.0,2.1667,150000.0,<1H OCEAN +-118.19,34.12,35.0,2524.0,749.0,2487.0,679.0,2.4932,167700.0,<1H OCEAN +-118.18,34.11,33.0,1523.0,391.0,753.0,298.0,2.6591,183800.0,<1H OCEAN +-118.18,34.11,44.0,1346.0,398.0,1204.0,344.0,2.3984,152200.0,<1H OCEAN +-118.19,34.11,38.0,1158.0,309.0,1051.0,322.0,2.286,169300.0,<1H OCEAN +-118.19,34.11,26.0,1638.0,457.0,1155.0,437.0,3.4227,143800.0,<1H OCEAN +-118.19,34.1,42.0,1577.0,379.0,1317.0,378.0,3.2121,153900.0,<1H OCEAN +-118.2,34.11,36.0,1441.0,534.0,1809.0,500.0,2.1793,185700.0,<1H OCEAN +-118.2,34.11,37.0,2040.0,611.0,1698.0,545.0,1.9355,166300.0,<1H OCEAN +-118.2,34.1,30.0,3643.0,1197.0,4336.0,1163.0,2.07,154500.0,<1H OCEAN +-118.21,34.11,32.0,2759.0,499.0,1661.0,533.0,4.3812,228200.0,<1H OCEAN +-118.21,34.1,40.0,1684.0,316.0,795.0,330.0,5.2723,218300.0,<1H OCEAN +-118.21,34.1,47.0,5077.0,1271.0,3348.0,1106.0,3.0377,186800.0,<1H OCEAN +-118.22,34.1,35.0,4003.0,788.0,2785.0,764.0,4.1213,252100.0,<1H OCEAN +-118.23,34.1,38.0,1051.0,249.0,799.0,229.0,2.712,143800.0,<1H OCEAN +-118.23,34.1,46.0,2483.0,587.0,2121.0,553.0,2.2788,152900.0,<1H OCEAN +-118.21,34.1,36.0,2000.0,533.0,1234.0,535.0,3.7437,241700.0,<1H OCEAN +-118.21,34.09,34.0,1660.0,412.0,1678.0,382.0,2.7708,148200.0,<1H OCEAN +-118.22,34.1,33.0,1903.0,386.0,1187.0,340.0,4.0469,196600.0,<1H OCEAN +-118.23,34.1,41.0,1353.0,379.0,1536.0,416.0,2.1687,157000.0,<1H OCEAN +-118.22,34.09,42.0,1706.0,488.0,1941.0,447.0,2.5213,149700.0,<1H OCEAN +-118.22,34.09,36.0,1427.0,415.0,1835.0,410.0,2.48,138900.0,<1H OCEAN +-118.22,34.09,45.0,1072.0,275.0,996.0,243.0,2.8194,165000.0,<1H OCEAN +-118.23,34.09,41.0,438.0,201.0,690.0,161.0,2.0476,181300.0,<1H OCEAN +-118.23,34.13,47.0,1162.0,235.0,781.0,268.0,4.6528,244400.0,<1H OCEAN +-118.23,34.13,48.0,737.0,166.0,462.0,131.0,3.5893,212500.0,<1H OCEAN +-118.22,34.13,40.0,2749.0,580.0,1375.0,511.0,4.825,205800.0,<1H OCEAN +-118.23,34.13,34.0,609.0,149.0,407.0,145.0,4.5766,185800.0,<1H OCEAN +-118.23,34.13,48.0,1308.0,,835.0,294.0,4.2891,214800.0,<1H OCEAN +-118.23,34.13,37.0,1799.0,426.0,1088.0,417.0,2.975,244500.0,<1H OCEAN +-118.22,34.12,28.0,3306.0,1025.0,2670.0,942.0,3.0919,185400.0,<1H OCEAN +-118.21,34.12,35.0,1937.0,439.0,1523.0,412.0,3.5638,170500.0,<1H OCEAN +-118.22,34.11,36.0,2870.0,529.0,1371.0,565.0,5.2083,220900.0,<1H OCEAN +-118.22,34.12,37.0,1298.0,242.0,750.0,255.0,5.2049,240800.0,<1H OCEAN +-118.23,34.12,28.0,1546.0,465.0,974.0,408.0,2.2843,183800.0,<1H OCEAN +-118.24,34.12,41.0,1213.0,301.0,801.0,300.0,3.1806,204200.0,<1H OCEAN +-118.23,34.12,32.0,2094.0,491.0,1413.0,479.0,4.5089,221100.0,<1H OCEAN +-118.23,34.11,31.0,1021.0,191.0,495.0,191.0,5.5051,223500.0,<1H OCEAN +-118.23,34.11,35.0,4148.0,971.0,3220.0,892.0,3.3389,187100.0,<1H OCEAN +-118.25,34.12,11.0,1281.0,418.0,1584.0,330.0,2.8889,153100.0,<1H OCEAN +-118.24,34.12,29.0,2904.0,892.0,3320.0,765.0,2.6111,168800.0,<1H OCEAN +-118.24,34.12,34.0,80.0,26.0,125.0,35.0,0.8907,154200.0,<1H OCEAN +-118.24,34.11,50.0,2141.0,451.0,1777.0,426.0,2.7679,178800.0,<1H OCEAN +-118.24,34.11,39.0,1148.0,348.0,1161.0,333.0,2.2167,176700.0,<1H OCEAN +-118.23,34.11,33.0,2612.0,646.0,2496.0,606.0,3.133,156000.0,<1H OCEAN +-118.26,34.12,45.0,2839.0,698.0,1768.0,653.0,3.1306,214000.0,<1H OCEAN +-118.26,34.11,47.0,2183.0,510.0,1445.0,503.0,3.6667,210900.0,<1H OCEAN +-118.25,34.11,43.0,2230.0,583.0,1667.0,543.0,2.8667,217800.0,<1H OCEAN +-118.25,34.11,43.0,2222.0,635.0,1817.0,606.0,2.7466,208900.0,<1H OCEAN +-118.25,34.11,39.0,1415.0,369.0,1467.0,351.0,3.015,156300.0,<1H OCEAN +-118.24,34.1,42.0,1525.0,456.0,1688.0,432.0,3.1691,141300.0,<1H OCEAN +-118.25,34.11,52.0,125.0,42.0,99.0,40.0,3.4375,170000.0,<1H OCEAN +-118.25,34.1,42.0,598.0,147.0,312.0,144.0,2.625,164300.0,<1H OCEAN +-118.25,34.1,42.0,4198.0,956.0,1935.0,878.0,3.7184,277300.0,<1H OCEAN +-118.26,34.11,52.0,1740.0,402.0,749.0,335.0,3.5673,270700.0,<1H OCEAN +-118.27,34.14,29.0,3768.0,1211.0,2320.0,1030.0,2.7685,204500.0,<1H OCEAN +-118.27,34.13,47.0,1375.0,359.0,1512.0,418.0,2.1071,208900.0,<1H OCEAN +-118.27,34.13,46.0,1613.0,396.0,966.0,416.0,2.9392,230300.0,<1H OCEAN +-118.27,34.11,36.0,1832.0,539.0,934.0,486.0,3.0521,276600.0,<1H OCEAN +-118.27,34.11,39.0,3825.0,916.0,1378.0,746.0,4.4094,352600.0,<1H OCEAN +-118.28,34.11,38.0,4453.0,1156.0,1830.0,1099.0,3.6181,495600.0,<1H OCEAN +-118.28,34.11,45.0,1607.0,331.0,633.0,332.0,3.1445,438300.0,<1H OCEAN +-118.28,34.12,50.0,2384.0,312.0,836.0,337.0,12.8763,500001.0,<1H OCEAN +-118.26,34.12,52.0,1942.0,476.0,1375.0,477.0,2.7348,209100.0,<1H OCEAN +-118.26,34.12,52.0,2290.0,520.0,1278.0,485.0,3.8393,238200.0,<1H OCEAN +-118.27,34.12,50.0,2037.0,440.0,1089.0,417.0,3.575,230600.0,<1H OCEAN +-118.29,34.11,30.0,2774.0,570.0,1076.0,580.0,5.296,500001.0,<1H OCEAN +-118.29,34.11,40.0,2681.0,737.0,1144.0,669.0,3.0461,264300.0,<1H OCEAN +-118.29,34.1,39.0,2196.0,582.0,1165.0,538.0,2.9417,254200.0,<1H OCEAN +-118.29,34.1,43.0,1711.0,443.0,1190.0,429.0,3.5172,265500.0,<1H OCEAN +-118.29,34.11,24.0,3696.0,1125.0,1685.0,1031.0,2.3789,266700.0,<1H OCEAN +-118.29,34.11,49.0,2850.0,379.0,1113.0,380.0,12.9591,500001.0,<1H OCEAN +-118.29,34.11,48.0,1448.0,295.0,681.0,287.0,3.2333,436400.0,<1H OCEAN +-118.3,34.11,52.0,3136.0,675.0,1213.0,606.0,3.5806,391900.0,<1H OCEAN +-118.3,34.1,37.0,5305.0,1980.0,3895.0,1874.0,2.0672,283300.0,<1H OCEAN +-118.3,34.11,25.0,1590.0,218.0,568.0,206.0,8.4389,500001.0,<1H OCEAN +-118.3,34.11,52.0,1954.0,245.0,645.0,237.0,6.9391,500001.0,<1H OCEAN +-118.31,34.11,52.0,1875.0,303.0,735.0,293.0,5.8659,433300.0,<1H OCEAN +-118.31,34.12,39.0,3895.0,561.0,1271.0,536.0,8.0073,500001.0,<1H OCEAN +-118.31,34.13,40.0,2822.0,443.0,907.0,414.0,7.2692,498700.0,<1H OCEAN +-118.32,34.12,52.0,3410.0,800.0,1218.0,783.0,4.15,393500.0,<1H OCEAN +-118.32,34.11,42.0,2462.0,543.0,857.0,482.0,4.0833,434400.0,<1H OCEAN +-118.32,34.11,33.0,5135.0,1450.0,2404.0,1292.0,3.2462,435700.0,<1H OCEAN +-118.32,34.11,48.0,4472.0,1579.0,2796.0,1397.0,2.3974,410700.0,<1H OCEAN +-118.33,34.11,38.0,3495.0,1100.0,1939.0,994.0,2.2148,438300.0,<1H OCEAN +-118.33,34.11,48.0,1601.0,464.0,784.0,461.0,3.0642,342900.0,<1H OCEAN +-118.33,34.11,37.0,2330.0,434.0,846.0,457.0,8.2335,430200.0,<1H OCEAN +-118.32,34.13,34.0,1856.0,273.0,540.0,264.0,4.0833,500001.0,<1H OCEAN +-118.33,34.12,23.0,1894.0,416.0,769.0,392.0,6.0352,500001.0,<1H OCEAN +-118.34,34.13,45.0,2375.0,417.0,751.0,410.0,6.6739,500001.0,<1H OCEAN +-118.32,34.14,23.0,4574.0,1423.0,1624.0,995.0,4.0965,500001.0,<1H OCEAN +-118.34,34.11,40.0,5485.0,1242.0,2034.0,1133.0,3.6974,500001.0,<1H OCEAN +-118.35,34.1,26.0,3977.0,1050.0,1720.0,935.0,3.358,364500.0,<1H OCEAN +-118.36,34.1,52.0,1295.0,281.0,578.0,273.0,2.976,405100.0,<1H OCEAN +-118.36,34.1,52.0,1096.0,247.0,423.0,230.0,3.0179,500001.0,<1H OCEAN +-118.35,34.1,18.0,7432.0,2793.0,3596.0,2270.0,2.8036,225000.0,<1H OCEAN +-118.35,34.1,16.0,2930.0,1038.0,1648.0,980.0,2.6458,372200.0,<1H OCEAN +-118.35,34.1,20.0,2745.0,782.0,1161.0,739.0,3.9044,436400.0,<1H OCEAN +-118.35,34.1,18.0,4109.0,1301.0,2103.0,1116.0,2.325,250000.0,<1H OCEAN +-118.35,34.1,24.0,5477.0,1803.0,2863.0,1755.0,1.845,237500.0,<1H OCEAN +-118.34,34.11,51.0,937.0,348.0,527.0,333.0,4.3571,468800.0,<1H OCEAN +-118.34,34.1,29.0,3193.0,1452.0,2039.0,1265.0,1.8209,500001.0,<1H OCEAN +-118.34,34.1,24.0,1996.0,791.0,1215.0,672.0,1.5429,325000.0,<1H OCEAN +-118.34,34.1,28.0,2223.0,752.0,1271.0,684.0,2.5434,232100.0,<1H OCEAN +-118.33,34.1,30.0,5293.0,2446.0,4123.0,2127.0,1.51,187500.0,<1H OCEAN +-118.33,34.1,43.0,2732.0,1646.0,3049.0,1429.0,1.3157,333300.0,<1H OCEAN +-118.31,34.1,40.0,4984.0,2158.0,4828.0,2028.0,1.6903,350000.0,<1H OCEAN +-118.32,34.1,28.0,1759.0,716.0,1463.0,620.0,1.7306,450000.0,<1H OCEAN +-118.3,34.1,35.0,7517.0,2961.0,5899.0,2769.0,1.9354,340000.0,<1H OCEAN +-118.3,34.1,25.0,3926.0,1715.0,4865.0,1612.0,1.6112,262500.0,<1H OCEAN +-118.31,34.1,36.0,2288.0,1033.0,3030.0,890.0,1.5328,250000.0,<1H OCEAN +-118.31,34.1,33.0,766.0,347.0,918.0,305.0,1.705,350000.0,<1H OCEAN +-118.33,34.1,48.0,1116.0,524.0,1610.0,483.0,1.625,237500.0,<1H OCEAN +-118.33,34.1,45.0,1913.0,696.0,1552.0,611.0,2.0888,237500.0,<1H OCEAN +-118.32,34.1,43.0,1615.0,734.0,1460.0,644.0,1.4005,193800.0,<1H OCEAN +-118.32,34.09,34.0,2473.0,1171.0,2655.0,1083.0,1.6331,162500.0,<1H OCEAN +-118.33,34.09,30.0,1679.0,682.0,1445.0,579.0,2.1403,200000.0,<1H OCEAN +-118.33,34.1,29.0,732.0,288.0,691.0,278.0,2.1866,250000.0,<1H OCEAN +-118.31,34.1,34.0,399.0,141.0,482.0,134.0,1.625,67500.0,<1H OCEAN +-118.31,34.09,34.0,2065.0,839.0,2626.0,775.0,1.8214,211100.0,<1H OCEAN +-118.31,34.09,28.0,720.0,267.0,891.0,265.0,1.8977,100000.0,<1H OCEAN +-118.31,34.09,37.0,773.0,,835.0,312.0,1.8576,193800.0,<1H OCEAN +-118.32,34.09,32.0,563.0,191.0,626.0,185.0,2.0341,250000.0,<1H OCEAN +-118.32,34.09,27.0,210.0,98.0,332.0,112.0,2.5556,175000.0,<1H OCEAN +-118.32,34.1,36.0,1655.0,690.0,1957.0,633.0,1.7325,221900.0,<1H OCEAN +-118.32,34.09,34.0,1478.0,675.0,1976.0,653.0,2.0557,225000.0,<1H OCEAN +-118.32,34.1,31.0,622.0,229.0,597.0,227.0,1.5284,200000.0,<1H OCEAN +-118.32,34.1,30.0,2193.0,965.0,2197.0,836.0,1.8277,137500.0,<1H OCEAN +-118.32,34.1,52.0,786.0,270.0,756.0,273.0,2.2311,206300.0,<1H OCEAN +-118.3,34.1,29.0,3403.0,1367.0,3432.0,1174.0,1.7083,166700.0,<1H OCEAN +-118.3,34.09,40.0,3058.0,1215.0,3953.0,1223.0,1.8156,218800.0,<1H OCEAN +-118.31,34.09,36.0,787.0,420.0,1506.0,360.0,1.2412,216700.0,<1H OCEAN +-118.3,34.1,38.0,2067.0,914.0,2717.0,853.0,1.7641,250000.0,<1H OCEAN +-118.3,34.1,36.0,2284.0,899.0,1964.0,839.0,1.9297,203300.0,<1H OCEAN +-118.29,34.09,34.0,2716.0,1114.0,2991.0,1021.0,1.7514,187500.0,<1H OCEAN +-118.3,34.09,36.0,2332.0,993.0,3155.0,927.0,2.2612,230400.0,<1H OCEAN +-118.29,34.1,39.0,631.0,298.0,744.0,274.0,2.7054,162500.0,<1H OCEAN +-118.29,34.09,29.0,2240.0,792.0,2254.0,739.0,2.3317,172500.0,<1H OCEAN +-118.28,34.09,38.0,790.0,275.0,664.0,194.0,3.0357,175000.0,<1H OCEAN +-118.29,34.09,43.0,1583.0,658.0,1941.0,614.0,1.9835,225000.0,<1H OCEAN +-118.29,34.09,28.0,1562.0,648.0,1974.0,597.0,1.9766,112500.0,<1H OCEAN +-118.29,34.09,35.0,2198.0,998.0,3441.0,912.0,2.0467,158300.0,<1H OCEAN +-118.29,34.09,35.0,2624.0,1116.0,3548.0,1008.0,2.0132,198400.0,<1H OCEAN +-118.29,34.09,39.0,336.0,173.0,586.0,151.0,1.8056,262500.0,<1H OCEAN +-118.29,34.09,52.0,1272.0,322.0,984.0,353.0,1.9063,261600.0,<1H OCEAN +-118.3,34.09,29.0,3245.0,1190.0,3906.0,1102.0,2.1927,253300.0,<1H OCEAN +-118.3,34.09,25.0,2345.0,852.0,2860.0,862.0,1.4497,205600.0,<1H OCEAN +-118.3,34.09,32.0,2202.0,674.0,2178.0,635.0,2.0307,226700.0,<1H OCEAN +-118.31,34.09,36.0,2517.0,842.0,2446.0,689.0,2.1524,187500.0,<1H OCEAN +-118.31,34.09,30.0,3165.0,1263.0,3678.0,1141.0,2.0,240600.0,<1H OCEAN +-118.31,34.09,42.0,1951.0,846.0,2500.0,813.0,1.5195,218200.0,<1H OCEAN +-118.32,34.09,44.0,2666.0,,2297.0,726.0,1.676,208800.0,<1H OCEAN +-118.32,34.09,30.0,1871.0,766.0,2595.0,819.0,2.0044,212500.0,<1H OCEAN +-118.32,34.09,28.0,2173.0,819.0,2548.0,763.0,1.879,218800.0,<1H OCEAN +-118.33,34.09,36.0,654.0,186.0,416.0,138.0,3.6953,200000.0,<1H OCEAN +-118.33,34.09,36.0,561.0,180.0,340.0,127.0,1.4375,165000.0,<1H OCEAN +-118.33,34.09,40.0,2004.0,687.0,1514.0,542.0,1.9911,220000.0,<1H OCEAN +-118.34,34.09,5.0,2665.0,954.0,1733.0,766.0,2.3568,204700.0,<1H OCEAN +-118.34,34.09,14.0,3032.0,999.0,1691.0,841.0,2.2,210000.0,<1H OCEAN +-118.34,34.08,50.0,3457.0,854.0,1584.0,841.0,3.1078,346700.0,<1H OCEAN +-118.34,34.09,52.0,1731.0,502.0,849.0,466.0,3.2946,321600.0,<1H OCEAN +-118.34,34.08,52.0,1430.0,186.0,547.0,178.0,10.3661,500001.0,<1H OCEAN +-118.35,34.09,47.0,1800.0,546.0,921.0,478.0,2.8021,280600.0,<1H OCEAN +-118.35,34.08,52.0,1003.0,200.0,514.0,204.0,3.8472,395700.0,<1H OCEAN +-118.35,34.08,52.0,2088.0,388.0,908.0,375.0,3.8141,342000.0,<1H OCEAN +-118.35,34.09,42.0,2210.0,643.0,1228.0,605.0,2.5982,315800.0,<1H OCEAN +-118.35,34.08,52.0,1710.0,350.0,727.0,355.0,4.5833,333900.0,<1H OCEAN +-118.36,34.08,52.0,1965.0,480.0,794.0,451.0,3.2824,304800.0,<1H OCEAN +-118.32,34.08,52.0,1164.0,257.0,575.0,251.0,3.125,380400.0,<1H OCEAN +-118.33,34.08,52.0,1777.0,454.0,671.0,439.0,3.5083,500001.0,<1H OCEAN +-118.33,34.08,50.0,2989.0,832.0,1345.0,775.0,3.2426,442900.0,<1H OCEAN +-118.31,34.08,30.0,1390.0,457.0,1460.0,423.0,2.2422,254500.0,<1H OCEAN +-118.31,34.08,31.0,2275.0,823.0,2189.0,720.0,1.7542,287500.0,<1H OCEAN +-118.32,34.08,46.0,2038.0,534.0,1250.0,525.0,2.4196,358100.0,<1H OCEAN +-118.31,34.08,23.0,1443.0,521.0,1264.0,450.0,2.7543,220000.0,<1H OCEAN +-118.32,34.08,52.0,1137.0,304.0,754.0,297.0,3.37,330300.0,<1H OCEAN +-118.32,34.08,52.0,2370.0,473.0,1053.0,434.0,4.1429,380300.0,<1H OCEAN +-118.3,34.08,34.0,2501.0,1047.0,3326.0,970.0,1.8771,247500.0,<1H OCEAN +-118.3,34.08,36.0,1276.0,503.0,1502.0,450.0,2.1766,205600.0,<1H OCEAN +-118.31,34.08,27.0,1514.0,510.0,1603.0,518.0,2.8971,251100.0,<1H OCEAN +-118.31,34.08,26.0,1609.0,534.0,1868.0,497.0,2.7038,227100.0,<1H OCEAN +-118.29,34.08,34.0,479.0,182.0,557.0,170.0,1.525,210000.0,<1H OCEAN +-118.29,34.08,23.0,1864.0,937.0,2795.0,858.0,1.8495,212500.0,<1H OCEAN +-118.3,34.08,34.0,1562.0,651.0,1774.0,559.0,1.5685,225000.0,<1H OCEAN +-118.3,34.08,32.0,2880.0,1063.0,3646.0,1028.0,2.3846,258300.0,<1H OCEAN +-118.29,34.08,25.0,2459.0,823.0,2635.0,763.0,2.4,173900.0,<1H OCEAN +-118.29,34.08,38.0,380.0,130.0,445.0,140.0,1.9286,137500.0,<1H OCEAN +-118.37,34.12,34.0,2821.0,399.0,843.0,391.0,11.615,500001.0,<1H OCEAN +-118.36,34.12,26.0,3902.0,610.0,1468.0,632.0,8.5136,500001.0,<1H OCEAN +-118.35,34.11,33.0,7478.0,1678.0,2701.0,1500.0,4.1717,500001.0,<1H OCEAN +-118.36,34.11,35.0,3946.0,695.0,1361.0,620.0,6.5195,500001.0,<1H OCEAN +-118.38,34.11,38.0,2601.0,523.0,870.0,474.0,7.1134,416700.0,<1H OCEAN +-118.37,34.11,42.0,5518.0,979.0,1863.0,957.0,8.5842,500001.0,<1H OCEAN +-118.36,34.1,36.0,2963.0,838.0,1129.0,745.0,2.5588,500001.0,<1H OCEAN +-118.37,34.1,37.0,407.0,67.0,100.0,47.0,15.0001,500001.0,<1H OCEAN +-118.38,34.1,39.0,3798.0,586.0,975.0,525.0,9.3092,500001.0,<1H OCEAN +-118.39,34.1,30.0,6310.0,957.0,1776.0,880.0,8.944,500001.0,<1H OCEAN +-118.39,34.09,41.0,730.0,126.0,230.0,125.0,4.3214,500001.0,<1H OCEAN +-118.36,34.09,38.0,2158.0,582.0,1061.0,577.0,2.9643,355300.0,<1H OCEAN +-118.36,34.08,40.0,3110.0,764.0,1557.0,763.0,1.9937,367100.0,<1H OCEAN +-118.37,34.08,52.0,2946.0,695.0,1258.0,650.0,3.9783,374100.0,<1H OCEAN +-118.37,34.08,22.0,3008.0,938.0,1224.0,816.0,3.2149,300000.0,<1H OCEAN +-118.37,34.09,31.0,2697.0,706.0,1059.0,689.0,2.8942,500001.0,<1H OCEAN +-118.36,34.08,45.0,2195.0,483.0,1265.0,455.0,3.3864,397900.0,<1H OCEAN +-118.37,34.08,52.0,1466.0,254.0,600.0,253.0,5.7524,393600.0,<1H OCEAN +-118.37,34.08,52.0,1234.0,223.0,543.0,213.0,6.0338,423700.0,<1H OCEAN +-118.26,34.1,48.0,2566.0,571.0,1421.0,563.0,3.6579,318600.0,<1H OCEAN +-118.26,34.1,52.0,1310.0,263.0,689.0,208.0,4.0721,350000.0,<1H OCEAN +-118.27,34.1,51.0,3149.0,519.0,1082.0,510.0,6.4459,421600.0,<1H OCEAN +-118.27,34.1,41.0,3729.0,740.0,1364.0,707.0,5.7778,412700.0,<1H OCEAN +-118.27,34.11,41.0,4138.0,1130.0,1859.0,1030.0,2.978,306800.0,<1H OCEAN +-118.28,34.11,46.0,1156.0,203.0,514.0,213.0,4.2019,352100.0,<1H OCEAN +-118.28,34.11,52.0,2036.0,348.0,775.0,332.0,5.4122,397500.0,<1H OCEAN +-118.28,34.11,52.0,1803.0,437.0,787.0,388.0,4.5781,360500.0,<1H OCEAN +-118.28,34.1,44.0,2728.0,585.0,1227.0,567.0,4.0602,324000.0,<1H OCEAN +-118.27,34.1,50.0,2113.0,398.0,793.0,418.0,4.7132,304600.0,<1H OCEAN +-118.28,34.1,49.0,1767.0,467.0,1066.0,438.0,3.0958,210900.0,<1H OCEAN +-118.28,34.1,48.0,805.0,246.0,633.0,235.0,2.3421,200000.0,<1H OCEAN +-118.28,34.1,49.0,2843.0,880.0,2004.0,796.0,2.7875,217300.0,<1H OCEAN +-118.27,34.09,48.0,1527.0,295.0,589.0,286.0,4.1667,344800.0,<1H OCEAN +-118.27,34.09,52.0,3225.0,763.0,1559.0,710.0,3.9674,268800.0,<1H OCEAN +-118.28,34.09,52.0,2273.0,663.0,1480.0,597.0,2.3333,196500.0,<1H OCEAN +-118.27,34.09,52.0,2327.0,555.0,1048.0,491.0,3.7847,252300.0,<1H OCEAN +-118.26,34.09,51.0,1532.0,366.0,669.0,333.0,3.6434,278800.0,<1H OCEAN +-118.26,34.09,36.0,3503.0,833.0,2652.0,788.0,3.8448,241400.0,<1H OCEAN +-118.27,34.09,52.0,1079.0,222.0,439.0,201.0,4.625,230800.0,<1H OCEAN +-118.27,34.09,44.0,3646.0,912.0,1783.0,861.0,2.9709,225000.0,<1H OCEAN +-118.26,34.08,52.0,984.0,276.0,994.0,260.0,2.3816,166700.0,<1H OCEAN +-118.26,34.08,41.0,1396.0,360.0,1069.0,363.0,2.4375,203300.0,<1H OCEAN +-118.26,34.08,46.0,945.0,250.0,910.0,252.0,3.5039,187500.0,<1H OCEAN +-118.27,34.08,35.0,1147.0,365.0,1016.0,296.0,2.3913,198800.0,<1H OCEAN +-118.26,34.07,36.0,2306.0,813.0,2823.0,765.0,2.0214,170500.0,<1H OCEAN +-118.26,34.07,28.0,579.0,184.0,673.0,202.0,2.625,187500.0,<1H OCEAN +-118.27,34.07,27.0,1190.0,,1795.0,422.0,1.7016,160000.0,<1H OCEAN +-118.27,34.08,38.0,2265.0,801.0,2899.0,792.0,2.5521,157500.0,<1H OCEAN +-118.27,34.08,46.0,3007.0,854.0,2587.0,814.0,2.7179,184300.0,<1H OCEAN +-118.28,34.08,42.0,997.0,374.0,982.0,372.0,2.9423,200000.0,<1H OCEAN +-118.28,34.08,52.0,2465.0,773.0,2328.0,746.0,2.6178,203100.0,<1H OCEAN +-118.27,34.08,43.0,962.0,253.0,658.0,244.0,3.2386,185000.0,<1H OCEAN +-118.27,34.07,38.0,1270.0,556.0,1692.0,450.0,1.87,170800.0,<1H OCEAN +-118.28,34.08,42.0,1618.0,522.0,1454.0,440.0,3.1607,182000.0,<1H OCEAN +-118.28,34.09,52.0,1739.0,464.0,938.0,482.0,2.4429,228800.0,<1H OCEAN +-118.28,34.08,39.0,3162.0,896.0,1934.0,818.0,2.875,213500.0,<1H OCEAN +-118.28,34.08,40.0,1630.0,543.0,1568.0,510.0,2.7366,169100.0,<1H OCEAN +-118.28,34.09,49.0,3828.0,1197.0,2862.0,1009.0,2.4677,219200.0,<1H OCEAN +-118.23,34.07,35.0,1335.0,440.0,1586.0,445.0,1.9722,156300.0,<1H OCEAN +-118.23,34.07,40.0,506.0,119.0,397.0,114.0,3.1944,143800.0,<1H OCEAN +-118.24,34.08,52.0,109.0,20.0,86.0,24.0,4.9844,187500.0,<1H OCEAN +-118.24,34.08,52.0,137.0,26.0,65.0,24.0,4.025,137500.0,<1H OCEAN +-118.23,34.09,47.0,859.0,239.0,913.0,234.0,2.6442,136100.0,<1H OCEAN +-118.23,34.09,49.0,1638.0,456.0,1500.0,430.0,2.6923,150000.0,<1H OCEAN +-118.23,34.09,45.0,1747.0,484.0,1680.0,441.0,2.6051,155500.0,<1H OCEAN +-118.25,34.09,52.0,2050.0,429.0,957.0,418.0,3.5603,210000.0,<1H OCEAN +-118.25,34.09,52.0,104.0,20.0,32.0,17.0,3.75,241700.0,<1H OCEAN +-118.25,34.08,44.0,1425.0,438.0,1121.0,374.0,2.1108,200000.0,<1H OCEAN +-118.25,34.08,47.0,2133.0,689.0,2104.0,662.0,2.6136,169200.0,<1H OCEAN +-118.25,34.09,43.0,1903.0,635.0,1919.0,613.0,2.6336,174300.0,<1H OCEAN +-118.25,34.09,52.0,1866.0,470.0,1211.0,417.0,2.935,189400.0,<1H OCEAN +-118.26,34.08,50.0,1791.0,660.0,2183.0,675.0,1.7945,166700.0,<1H OCEAN +-118.26,34.08,45.0,2174.0,627.0,1992.0,557.0,2.5428,167800.0,<1H OCEAN +-118.25,34.09,52.0,3142.0,765.0,1728.0,682.0,3.1864,189800.0,<1H OCEAN +-118.26,34.08,45.0,2225.0,827.0,2699.0,792.0,1.9209,179200.0,<1H OCEAN +-118.26,34.07,46.0,2341.0,703.0,2371.0,648.0,2.4038,181700.0,<1H OCEAN +-118.26,34.07,52.0,830.0,200.0,701.0,189.0,2.7625,232100.0,<1H OCEAN +-118.25,34.07,47.0,2059.0,618.0,2033.0,544.0,1.9028,217900.0,<1H OCEAN +-118.25,34.07,43.0,764.0,322.0,1275.0,306.0,2.0,175000.0,<1H OCEAN +-118.25,34.06,20.0,41.0,17.0,87.0,25.0,1.5491,225000.0,<1H OCEAN +-118.24,34.07,27.0,223.0,80.0,249.0,82.0,1.6136,137500.0,<1H OCEAN +-118.25,34.07,18.0,4297.0,1420.0,4332.0,1286.0,2.2545,192500.0,<1H OCEAN +-118.25,34.07,16.0,719.0,225.0,801.0,218.0,2.3942,133300.0,<1H OCEAN +-118.22,34.09,40.0,1081.0,282.0,970.0,263.0,1.875,150000.0,<1H OCEAN +-118.22,34.08,31.0,394.0,117.0,573.0,131.0,1.8173,154200.0,<1H OCEAN +-118.22,34.08,34.0,1709.0,562.0,2105.0,503.0,1.9704,152100.0,<1H OCEAN +-118.19,34.08,38.0,1241.0,298.0,1055.0,263.0,2.3409,115500.0,<1H OCEAN +-118.2,34.08,49.0,1320.0,309.0,1405.0,328.0,2.4375,114000.0,<1H OCEAN +-118.2,34.07,21.0,1353.0,380.0,1688.0,367.0,1.9937,139600.0,<1H OCEAN +-118.2,34.07,34.0,1765.0,551.0,2203.0,500.0,2.2708,159600.0,<1H OCEAN +-118.21,34.08,39.0,986.0,361.0,1347.0,299.0,2.2907,133900.0,<1H OCEAN +-118.21,34.08,26.0,2574.0,807.0,3163.0,802.0,1.9495,173200.0,<1H OCEAN +-118.2,34.09,39.0,1594.0,430.0,1668.0,378.0,2.5343,138200.0,<1H OCEAN +-118.2,34.08,41.0,1807.0,429.0,1699.0,424.0,2.2222,126000.0,<1H OCEAN +-118.19,34.1,39.0,2054.0,423.0,1205.0,403.0,4.239,213000.0,<1H OCEAN +-118.21,34.08,52.0,3672.0,808.0,3062.0,764.0,2.6806,153000.0,<1H OCEAN +-118.21,34.09,39.0,1287.0,353.0,1171.0,345.0,1.6118,138500.0,<1H OCEAN +-118.21,34.09,39.0,1561.0,445.0,1780.0,391.0,2.4632,144200.0,<1H OCEAN +-118.21,34.09,37.0,1822.0,498.0,1961.0,506.0,1.9881,159200.0,<1H OCEAN +-118.22,34.07,35.0,1504.0,477.0,2059.0,498.0,2.0133,145800.0,<1H OCEAN +-118.22,34.07,36.0,839.0,250.0,1079.0,245.0,1.7463,158300.0,<1H OCEAN +-118.21,34.07,31.0,1077.0,300.0,1198.0,274.0,2.1333,160200.0,<1H OCEAN +-118.21,34.07,52.0,1770.0,,1848.0,439.0,2.4135,167200.0,<1H OCEAN +-118.21,34.07,47.0,1346.0,383.0,1452.0,371.0,1.7292,191700.0,<1H OCEAN +-118.21,34.07,31.0,1453.0,404.0,1486.0,389.0,2.3859,153100.0,<1H OCEAN +-118.21,34.07,42.0,902.0,318.0,1312.0,323.0,1.9375,168800.0,<1H OCEAN +-118.21,34.06,29.0,1478.0,413.0,1580.0,394.0,1.8781,147500.0,<1H OCEAN +-118.16,34.09,36.0,3334.0,920.0,2881.0,800.0,2.1696,170800.0,<1H OCEAN +-118.17,34.1,48.0,2514.0,595.0,2484.0,601.0,3.1146,142500.0,<1H OCEAN +-118.17,34.1,37.0,299.0,89.0,318.0,92.0,1.3125,145800.0,<1H OCEAN +-118.17,34.09,45.0,1327.0,271.0,1069.0,284.0,3.3977,153800.0,<1H OCEAN +-118.18,34.09,40.0,2744.0,708.0,2747.0,674.0,2.6226,148800.0,<1H OCEAN +-118.18,34.09,44.0,1688.0,426.0,1605.0,384.0,3.3785,184900.0,<1H OCEAN +-118.19,34.09,41.0,2090.0,530.0,2043.0,537.0,1.9706,144200.0,<1H OCEAN +-118.18,34.1,10.0,1907.0,398.0,921.0,369.0,4.875,200400.0,<1H OCEAN +-118.18,34.1,10.0,1940.0,445.0,763.0,412.0,4.975,166700.0,<1H OCEAN +-118.18,34.1,7.0,2529.0,689.0,1215.0,577.0,4.7853,153100.0,<1H OCEAN +-118.18,34.1,8.0,1116.0,267.0,435.0,235.0,4.9231,230900.0,<1H OCEAN +-118.18,34.08,35.0,2226.0,602.0,2230.0,549.0,2.9167,129300.0,<1H OCEAN +-118.19,34.08,35.0,1554.0,381.0,1487.0,374.0,1.9038,139500.0,<1H OCEAN +-118.19,34.07,38.0,2965.0,665.0,2128.0,650.0,3.0241,166300.0,<1H OCEAN +-118.19,34.07,42.0,1555.0,337.0,1152.0,348.0,3.375,169600.0,<1H OCEAN +-118.19,34.06,44.0,1734.0,364.0,1133.0,351.0,2.5132,163100.0,<1H OCEAN +-118.16,34.09,33.0,1515.0,415.0,1345.0,346.0,2.375,175000.0,<1H OCEAN +-118.16,34.09,50.0,1568.0,302.0,1093.0,333.0,3.1442,162100.0,<1H OCEAN +-118.17,34.09,36.0,3066.0,797.0,3097.0,780.0,2.5523,156500.0,<1H OCEAN +-118.17,34.09,33.0,2907.0,797.0,3212.0,793.0,2.2348,146600.0,<1H OCEAN +-118.18,34.08,31.0,1318.0,311.0,1164.0,289.0,2.9939,135500.0,<1H OCEAN +-118.18,34.08,33.0,1369.0,408.0,1475.0,377.0,2.3281,151900.0,<1H OCEAN +-118.16,34.08,43.0,1523.0,378.0,1338.0,352.0,3.2031,144600.0,<1H OCEAN +-118.17,34.08,39.0,787.0,181.0,731.0,179.0,3.2279,158500.0,<1H OCEAN +-118.17,34.08,33.0,851.0,231.0,936.0,228.0,3.375,147500.0,<1H OCEAN +-118.18,34.07,28.0,2616.0,630.0,2218.0,621.0,2.6842,156000.0,<1H OCEAN +-118.17,34.07,19.0,2150.0,544.0,1510.0,467.0,3.4952,150000.0,<1H OCEAN +-118.16,34.07,41.0,247.0,55.0,925.0,50.0,3.5769,135700.0,<1H OCEAN +-118.17,34.07,37.0,1155.0,225.0,814.0,241.0,3.875,148500.0,<1H OCEAN +-118.18,34.06,27.0,2025.0,565.0,2189.0,577.0,2.6083,148600.0,<1H OCEAN +-118.19,34.06,32.0,555.0,159.0,748.0,163.0,1.9762,137500.0,<1H OCEAN +-118.19,34.06,47.0,2324.0,658.0,3020.0,594.0,1.1868,93800.0,<1H OCEAN +-118.2,34.06,46.0,453.0,119.0,533.0,132.0,2.2961,112500.0,<1H OCEAN +-118.2,34.06,40.0,1181.0,335.0,1441.0,337.0,2.1136,111800.0,<1H OCEAN +-118.2,34.05,8.0,762.0,204.0,728.0,174.0,2.4886,137500.0,<1H OCEAN +-118.19,34.05,46.0,1051.0,302.0,1435.0,305.0,1.6667,133600.0,<1H OCEAN +-118.2,34.05,36.0,2672.0,675.0,2883.0,674.0,2.0885,142800.0,<1H OCEAN +-118.19,34.05,37.0,349.0,79.0,276.0,64.0,3.2125,125000.0,<1H OCEAN +-118.2,34.06,46.0,321.0,101.0,401.0,86.0,2.1029,109400.0,<1H OCEAN +-118.21,34.06,30.0,511.0,153.0,1152.0,149.0,2.3611,156800.0,<1H OCEAN +-118.22,34.06,52.0,48.0,6.0,41.0,10.0,10.2264,112500.0,<1H OCEAN +-118.22,34.05,36.0,1243.0,470.0,1668.0,444.0,1.0714,137500.0,<1H OCEAN +-118.21,34.06,52.0,470.0,115.0,434.0,123.0,2.095,109100.0,<1H OCEAN +-118.22,34.06,34.0,1083.0,364.0,1132.0,338.0,2.2344,153100.0,<1H OCEAN +-118.22,34.05,34.0,1113.0,,928.0,290.0,3.1654,155000.0,<1H OCEAN +-118.22,34.05,41.0,1422.0,478.0,1640.0,434.0,1.6122,157100.0,<1H OCEAN +-118.21,34.05,26.0,745.0,258.0,694.0,236.0,1.3846,129200.0,<1H OCEAN +-118.21,34.05,28.0,1079.0,306.0,1358.0,285.0,2.52,131900.0,<1H OCEAN +-118.21,34.05,28.0,950.0,357.0,1485.0,345.0,1.9271,136400.0,<1H OCEAN +-118.21,34.05,45.0,2146.0,607.0,2868.0,625.0,2.121,144000.0,<1H OCEAN +-118.2,34.05,43.0,1165.0,317.0,1279.0,303.0,1.9615,141700.0,<1H OCEAN +-118.2,34.05,40.0,1146.0,323.0,1354.0,321.0,1.9205,121900.0,<1H OCEAN +-118.2,34.05,40.0,1082.0,318.0,1085.0,273.0,1.7054,117200.0,<1H OCEAN +-118.2,34.05,42.0,1703.0,586.0,2490.0,581.0,2.02,147200.0,<1H OCEAN +-118.2,34.05,41.0,1268.0,398.0,1887.0,407.0,2.625,150000.0,<1H OCEAN +-118.19,34.05,43.0,977.0,266.0,1084.0,259.0,2.7708,127900.0,<1H OCEAN +-118.19,34.05,41.0,1098.0,264.0,1178.0,245.0,2.1058,124300.0,<1H OCEAN +-118.2,34.05,50.0,1407.0,401.0,1526.0,385.0,2.29,121800.0,<1H OCEAN +-118.19,34.04,45.0,963.0,234.0,1194.0,239.0,2.1806,134900.0,<1H OCEAN +-118.19,34.04,40.0,1095.0,305.0,1322.0,281.0,1.9688,150000.0,<1H OCEAN +-118.19,34.03,52.0,1053.0,246.0,1036.0,249.0,2.1071,136700.0,<1H OCEAN +-118.19,34.03,50.0,1183.0,246.0,851.0,231.0,3.2639,142600.0,<1H OCEAN +-118.2,34.04,52.0,1249.0,307.0,1223.0,297.0,2.07,136300.0,<1H OCEAN +-118.2,34.04,47.0,1894.0,408.0,1629.0,379.0,3.7619,127600.0,<1H OCEAN +-118.2,34.03,52.0,1754.0,452.0,1849.0,445.0,2.3716,122800.0,<1H OCEAN +-118.2,34.04,44.0,1399.0,386.0,1419.0,373.0,1.8224,143800.0,<1H OCEAN +-118.2,34.04,36.0,1625.0,490.0,2003.0,478.0,2.181,147200.0,<1H OCEAN +-118.2,34.04,44.0,1582.0,544.0,1998.0,515.0,1.6888,125000.0,<1H OCEAN +-118.2,34.04,18.0,796.0,227.0,547.0,218.0,1.0333,135400.0,<1H OCEAN +-118.21,34.04,36.0,1825.0,479.0,2097.0,480.0,2.1862,135300.0,<1H OCEAN +-118.21,34.04,37.0,845.0,249.0,881.0,252.0,2.2454,165000.0,<1H OCEAN +-118.21,34.04,47.0,1325.0,393.0,1557.0,352.0,2.8,148400.0,<1H OCEAN +-118.21,34.05,28.0,1841.0,809.0,3199.0,727.0,1.6319,151600.0,<1H OCEAN +-118.21,34.04,52.0,846.0,271.0,1153.0,281.0,2.1923,155000.0,<1H OCEAN +-118.22,34.05,43.0,1153.0,411.0,1667.0,409.0,1.9402,139300.0,<1H OCEAN +-118.21,34.05,47.0,722.0,235.0,930.0,226.0,2.5455,114300.0,<1H OCEAN +-118.22,34.04,43.0,798.0,308.0,1417.0,325.0,1.4189,141700.0,<1H OCEAN +-118.22,34.05,44.0,1105.0,346.0,1598.0,372.0,1.2,115600.0,<1H OCEAN +-118.22,34.04,43.0,2343.0,803.0,2468.0,707.0,1.5163,115000.0,<1H OCEAN +-118.21,34.04,43.0,1502.0,477.0,1844.0,477.0,1.9405,152500.0,<1H OCEAN +-118.21,34.04,47.0,1306.0,391.0,1499.0,346.0,2.2788,139600.0,<1H OCEAN +-118.22,34.03,45.0,554.0,214.0,888.0,218.0,1.8125,139600.0,<1H OCEAN +-118.21,34.03,45.0,1860.0,472.0,1893.0,456.0,2.6573,141800.0,<1H OCEAN +-118.21,34.03,44.0,1550.0,407.0,1718.0,403.0,2.5268,141100.0,<1H OCEAN +-118.21,34.03,52.0,497.0,132.0,547.0,121.0,2.2083,146300.0,<1H OCEAN +-118.21,34.03,47.0,876.0,228.0,872.0,231.0,2.2656,145000.0,<1H OCEAN +-118.2,34.03,41.0,1292.0,334.0,1150.0,322.0,1.925,135200.0,<1H OCEAN +-118.2,34.02,49.0,1098.0,317.0,1411.0,301.0,2.75,146000.0,<1H OCEAN +-118.2,34.03,52.0,774.0,209.0,813.0,203.0,2.3472,135200.0,<1H OCEAN +-118.2,34.03,37.0,1583.0,392.0,1776.0,377.0,2.7266,140800.0,<1H OCEAN +-118.2,34.03,52.0,583.0,157.0,730.0,174.0,1.4115,140600.0,<1H OCEAN +-118.21,34.02,45.0,792.0,203.0,872.0,188.0,2.6875,129700.0,<1H OCEAN +-118.19,34.02,44.0,2702.0,770.0,3260.0,721.0,2.3575,144800.0,<1H OCEAN +-118.2,34.02,48.0,2230.0,593.0,2419.0,598.0,2.3944,130700.0,<1H OCEAN +-118.2,34.02,26.0,36.0,9.0,35.0,9.0,1.625,175000.0,<1H OCEAN +-118.2,34.02,42.0,498.0,120.0,548.0,119.0,3.7543,126600.0,<1H OCEAN +-118.21,34.02,52.0,22.0,7.0,55.0,7.0,7.5752,67500.0,<1H OCEAN +-118.21,34.02,43.0,1811.0,513.0,2123.0,487.0,1.3615,133300.0,<1H OCEAN +-118.23,34.05,52.0,346.0,270.0,346.0,251.0,2.5313,225000.0,<1H OCEAN +-118.24,34.05,13.0,1703.0,697.0,1823.0,669.0,0.8288,181300.0,<1H OCEAN +-118.24,34.04,52.0,116.0,107.0,171.0,92.0,1.0769,112500.0,<1H OCEAN +-118.24,34.06,33.0,390.0,199.0,435.0,193.0,1.1979,350000.0,<1H OCEAN +-118.24,34.06,8.0,1204.0,552.0,1074.0,517.0,1.0227,87500.0,<1H OCEAN +-118.24,34.06,19.0,2870.0,1021.0,3325.0,978.0,1.7395,162500.0,<1H OCEAN +-118.25,34.05,52.0,2806.0,1944.0,2232.0,1605.0,0.6775,350000.0,<1H OCEAN +-118.25,34.05,8.0,3105.0,1256.0,1086.0,997.0,0.8131,275000.0,<1H OCEAN +-118.25,34.06,12.0,4011.0,1438.0,1673.0,1088.0,5.3081,287500.0,<1H OCEAN +-118.26,34.05,52.0,58.0,52.0,41.0,27.0,4.0972,500001.0,<1H OCEAN +-118.26,34.04,6.0,1529.0,566.0,1051.0,473.0,2.462,162500.0,<1H OCEAN +-118.25,34.06,52.0,174.0,66.0,249.0,57.0,1.7763,312500.0,<1H OCEAN +-118.26,34.06,15.0,326.0,123.0,490.0,105.0,1.4886,175000.0,<1H OCEAN +-118.26,34.06,40.0,637.0,273.0,1150.0,263.0,1.8625,131300.0,<1H OCEAN +-118.26,34.07,52.0,1802.0,613.0,2382.0,587.0,1.8438,185900.0,<1H OCEAN +-118.26,34.07,40.0,680.0,273.0,995.0,249.0,2.2607,165600.0,<1H OCEAN +-118.26,34.07,30.0,929.0,238.0,763.0,214.0,2.5227,187500.0,<1H OCEAN +-118.26,34.06,38.0,715.0,282.0,1174.0,300.0,2.345,225000.0,<1H OCEAN +-118.26,34.06,42.0,2541.0,1282.0,3974.0,1189.0,1.5854,87500.0,<1H OCEAN +-118.27,34.07,42.0,1175.0,428.0,1593.0,407.0,2.3438,213300.0,<1H OCEAN +-118.27,34.06,30.0,1771.0,788.0,2188.0,764.0,1.5885,154200.0,<1H OCEAN +-118.27,34.07,34.0,786.0,341.0,1239.0,320.0,2.3438,152100.0,<1H OCEAN +-118.27,34.07,32.0,1657.0,579.0,2071.0,598.0,2.1135,152500.0,<1H OCEAN +-118.27,34.06,33.0,1416.0,686.0,2013.0,614.0,1.9818,208300.0,<1H OCEAN +-118.27,34.07,33.0,1177.0,468.0,1533.0,430.0,2.3981,183300.0,<1H OCEAN +-118.28,34.07,41.0,1072.0,331.0,1111.0,314.0,1.9233,207100.0,<1H OCEAN +-118.28,34.07,24.0,3247.0,1281.0,2642.0,1182.0,2.4632,216700.0,<1H OCEAN +-118.28,34.07,14.0,1924.0,926.0,2226.0,792.0,2.2552,265900.0,<1H OCEAN +-118.28,34.07,32.0,1777.0,536.0,1684.0,489.0,2.3636,190000.0,<1H OCEAN +-118.28,34.07,25.0,7522.0,3179.0,7221.0,2902.0,2.0173,177500.0,<1H OCEAN +-118.28,34.06,14.0,1787.0,853.0,2251.0,763.0,1.1642,400000.0,<1H OCEAN +-118.28,34.06,17.0,2518.0,1196.0,3051.0,1000.0,1.7199,175000.0,<1H OCEAN +-118.27,34.06,17.0,2124.0,1168.0,3915.0,1137.0,1.1346,137500.0,<1H OCEAN +-118.27,34.06,25.0,1714.0,1176.0,3723.0,1036.0,1.3241,112500.0,<1H OCEAN +-118.27,34.06,45.0,564.0,353.0,1172.0,319.0,1.494,187500.0,<1H OCEAN +-118.27,34.06,26.0,513.0,338.0,1204.0,321.0,1.4904,275000.0,<1H OCEAN +-118.26,34.06,33.0,1950.0,1047.0,3707.0,1012.0,1.7238,110000.0,<1H OCEAN +-118.27,34.05,37.0,350.0,245.0,1122.0,248.0,2.7634,137500.0,<1H OCEAN +-118.27,34.05,52.0,1292.0,864.0,2081.0,724.0,0.9563,275000.0,<1H OCEAN +-118.28,34.06,52.0,1261.0,616.0,2309.0,581.0,1.6184,225000.0,<1H OCEAN +-118.28,34.06,52.0,936.0,454.0,990.0,354.0,1.1122,187500.0,<1H OCEAN +-118.28,34.06,42.0,2472.0,,3795.0,1179.0,1.2254,162500.0,<1H OCEAN +-118.27,34.05,25.0,1316.0,836.0,2796.0,784.0,1.7866,325000.0,<1H OCEAN +-118.27,34.05,26.0,1164.0,674.0,1685.0,541.0,1.5727,225000.0,<1H OCEAN +-118.28,34.05,28.0,1306.0,637.0,2079.0,598.0,1.4615,275000.0,<1H OCEAN +-118.28,34.05,31.0,1525.0,730.0,2510.0,652.0,1.6355,162500.0,<1H OCEAN +-118.28,34.05,41.0,1788.0,774.0,2931.0,702.0,1.4413,158900.0,<1H OCEAN +-118.28,34.05,41.0,1075.0,597.0,2260.0,614.0,1.3,162500.0,<1H OCEAN +-118.28,34.05,44.0,968.0,384.0,1805.0,375.0,1.4801,212500.0,<1H OCEAN +-118.27,34.05,47.0,661.0,359.0,1406.0,307.0,1.3169,112500.0,<1H OCEAN +-118.27,34.04,13.0,1784.0,,2158.0,682.0,1.7038,118100.0,<1H OCEAN +-118.27,34.05,24.0,323.0,214.0,751.0,189.0,1.8304,225000.0,<1H OCEAN +-118.27,34.05,12.0,535.0,328.0,1194.0,365.0,1.2012,275000.0,<1H OCEAN +-118.32,34.07,52.0,2156.0,306.0,861.0,311.0,8.8062,500001.0,<1H OCEAN +-118.33,34.06,52.0,1841.0,240.0,693.0,218.0,15.0001,500001.0,<1H OCEAN +-118.33,34.07,52.0,2248.0,255.0,813.0,265.0,15.0001,500001.0,<1H OCEAN +-118.33,34.07,52.0,1482.0,171.0,531.0,161.0,15.0001,500001.0,<1H OCEAN +-118.34,34.06,52.0,2089.0,309.0,883.0,281.0,7.4574,500001.0,<1H OCEAN +-118.34,34.06,52.0,1311.0,310.0,707.0,290.0,3.4812,432800.0,<1H OCEAN +-118.29,34.08,49.0,649.0,315.0,987.0,329.0,1.6806,316700.0,<1H OCEAN +-118.29,34.07,19.0,3013.0,1118.0,2465.0,1008.0,2.5386,290600.0,<1H OCEAN +-118.29,34.06,9.0,1554.0,815.0,1704.0,761.0,2.0185,141700.0,<1H OCEAN +-118.29,34.07,22.0,492.0,269.0,634.0,261.0,1.6406,300000.0,<1H OCEAN +-118.29,34.07,26.0,2302.0,1124.0,2660.0,1004.0,2.3567,253100.0,<1H OCEAN +-118.29,34.08,43.0,3056.0,1345.0,3920.0,1304.0,1.925,300000.0,<1H OCEAN +-118.3,34.07,31.0,1489.0,664.0,1793.0,556.0,2.4348,230600.0,<1H OCEAN +-118.3,34.07,46.0,5677.0,2610.0,7443.0,2406.0,1.8238,237500.0,<1H OCEAN +-118.3,34.07,26.0,2107.0,757.0,2660.0,740.0,2.3375,282300.0,<1H OCEAN +-118.3,34.07,36.0,2657.0,738.0,2274.0,723.0,3.425,281700.0,<1H OCEAN +-118.31,34.07,28.0,2362.0,949.0,2759.0,894.0,2.2364,305600.0,<1H OCEAN +-118.31,34.08,49.0,2549.0,630.0,1539.0,594.0,2.6218,350900.0,<1H OCEAN +-118.31,34.07,40.0,2657.0,794.0,2149.0,749.0,2.2653,445000.0,<1H OCEAN +-118.32,34.07,52.0,2980.0,366.0,967.0,359.0,11.2185,500001.0,<1H OCEAN +-118.31,34.06,36.0,369.0,147.0,145.0,136.0,0.8804,450000.0,<1H OCEAN +-118.32,34.06,52.0,983.0,246.0,578.0,204.0,5.7393,500001.0,<1H OCEAN +-118.32,34.07,25.0,2740.0,707.0,1420.0,664.0,3.5909,404500.0,<1H OCEAN +-118.32,34.06,52.0,955.0,100.0,457.0,120.0,15.0001,500001.0,<1H OCEAN +-118.31,34.07,26.0,5062.0,2055.0,4533.0,1822.0,2.3105,166700.0,<1H OCEAN +-118.31,34.06,30.0,3110.0,1269.0,2535.0,1218.0,1.6987,412500.0,<1H OCEAN +-118.3,34.07,18.0,3759.0,,3296.0,1462.0,2.2708,175000.0,<1H OCEAN +-118.31,34.07,20.0,3264.0,1248.0,2919.0,1191.0,2.3674,500001.0,<1H OCEAN +-118.3,34.06,20.0,1782.0,896.0,1749.0,823.0,2.2094,75000.0,<1H OCEAN +-118.31,34.06,34.0,2470.0,1197.0,2326.0,1055.0,1.9038,325000.0,<1H OCEAN +-118.29,34.07,24.0,4021.0,1707.0,3727.0,1529.0,1.7365,112500.0,<1H OCEAN +-118.3,34.07,28.0,5221.0,2530.0,5840.0,2374.0,1.8829,300000.0,<1H OCEAN +-118.3,34.06,43.0,1366.0,740.0,942.0,672.0,1.6953,150000.0,<1H OCEAN +-118.29,34.06,42.0,3894.0,2293.0,6846.0,2156.0,1.5553,70000.0,<1H OCEAN +-118.29,34.06,27.0,2456.0,1111.0,4137.0,1104.0,1.5954,187500.0,<1H OCEAN +-118.29,34.06,46.0,1759.0,1012.0,2716.0,877.0,2.1637,350000.0,<1H OCEAN +-118.3,34.06,47.0,1390.0,872.0,2860.0,827.0,1.468,137500.0,<1H OCEAN +-118.29,34.06,23.0,2040.0,778.0,2235.0,697.0,1.9309,233300.0,<1H OCEAN +-118.3,34.06,33.0,2437.0,1283.0,3906.0,1084.0,2.0332,270000.0,<1H OCEAN +-118.3,34.06,21.0,3960.0,1490.0,3468.0,1335.0,1.8214,475000.0,<1H OCEAN +-118.3,34.06,23.0,2512.0,1203.0,3720.0,1118.0,1.7896,322200.0,<1H OCEAN +-118.31,34.06,24.0,1336.0,453.0,1268.0,426.0,2.8202,500001.0,<1H OCEAN +-118.31,34.06,47.0,3038.0,1533.0,4225.0,1472.0,1.6725,187500.0,<1H OCEAN +-118.31,34.06,34.0,1848.0,667.0,1351.0,589.0,2.0547,410000.0,<1H OCEAN +-118.31,34.06,52.0,2124.0,756.0,1920.0,756.0,2.1435,328900.0,<1H OCEAN +-118.31,34.06,31.0,2827.0,1084.0,3107.0,993.0,2.0278,360000.0,<1H OCEAN +-118.31,34.06,14.0,1559.0,646.0,1639.0,567.0,1.9949,380000.0,<1H OCEAN +-118.32,34.05,42.0,3292.0,713.0,2224.0,674.0,3.5517,291500.0,<1H OCEAN +-118.32,34.06,43.0,2808.0,584.0,1654.0,569.0,4.125,436800.0,<1H OCEAN +-118.32,34.06,36.0,3239.0,722.0,1383.0,612.0,4.5918,337000.0,<1H OCEAN +-118.33,34.06,52.0,1368.0,231.0,737.0,248.0,8.3617,433800.0,<1H OCEAN +-118.33,34.05,48.0,2405.0,527.0,1868.0,502.0,3.375,257800.0,<1H OCEAN +-118.33,34.05,44.0,1574.0,390.0,1323.0,404.0,2.5284,226300.0,<1H OCEAN +-118.33,34.05,45.0,1707.0,519.0,1446.0,466.0,2.1736,171300.0,<1H OCEAN +-118.32,34.05,50.0,1389.0,364.0,976.0,302.0,1.5882,327300.0,<1H OCEAN +-118.32,34.05,42.0,3343.0,1183.0,3480.0,1146.0,1.9923,250000.0,<1H OCEAN +-118.31,34.05,35.0,1692.0,423.0,1578.0,406.0,2.5313,305800.0,<1H OCEAN +-118.31,34.05,40.0,1667.0,365.0,1161.0,384.0,3.1406,417600.0,<1H OCEAN +-118.3,34.05,44.0,1612.0,650.0,2028.0,593.0,1.9152,115600.0,<1H OCEAN +-118.3,34.05,42.0,1476.0,610.0,1605.0,545.0,1.721,214300.0,<1H OCEAN +-118.31,34.05,42.0,443.0,223.0,582.0,223.0,2.2937,350000.0,<1H OCEAN +-118.3,34.05,46.0,1386.0,457.0,1845.0,485.0,2.1414,157700.0,<1H OCEAN +-118.3,34.05,31.0,1744.0,720.0,2034.0,633.0,2.2684,193800.0,<1H OCEAN +-118.29,34.05,30.0,1417.0,589.0,1615.0,540.0,1.3867,193800.0,<1H OCEAN +-118.29,34.05,34.0,1102.0,,1325.0,439.0,1.5972,168800.0,<1H OCEAN +-118.3,34.05,36.0,1723.0,569.0,1664.0,501.0,1.9323,161100.0,<1H OCEAN +-118.3,34.05,34.0,1453.0,588.0,1987.0,589.0,2.096,187500.0,<1H OCEAN +-118.29,34.05,18.0,3585.0,1661.0,5229.0,1534.0,1.847,250000.0,<1H OCEAN +-118.29,34.05,11.0,677.0,370.0,1143.0,341.0,2.3864,350000.0,<1H OCEAN +-118.29,34.05,31.0,2818.0,1252.0,4126.0,1200.0,2.053,229200.0,<1H OCEAN +-118.35,34.08,52.0,1801.0,313.0,714.0,293.0,4.6838,479000.0,<1H OCEAN +-118.35,34.07,52.0,2497.0,406.0,1030.0,412.0,4.89,500001.0,<1H OCEAN +-118.35,34.07,52.0,2315.0,356.0,894.0,345.0,4.1328,500001.0,<1H OCEAN +-118.34,34.07,52.0,2066.0,319.0,981.0,297.0,5.8632,450000.0,<1H OCEAN +-118.34,34.08,52.0,1421.0,163.0,495.0,167.0,10.586,500001.0,<1H OCEAN +-118.34,34.08,52.0,1721.0,195.0,688.0,196.0,15.0001,500001.0,<1H OCEAN +-118.34,34.07,52.0,1621.0,284.0,588.0,272.0,6.2223,500001.0,<1H OCEAN +-118.34,34.07,52.0,3421.0,598.0,1203.0,564.0,4.1618,500001.0,<1H OCEAN +-118.34,34.08,52.0,2756.0,542.0,971.0,510.0,5.5871,500001.0,<1H OCEAN +-118.35,34.08,52.0,2877.0,721.0,1186.0,704.0,3.2645,175000.0,<1H OCEAN +-118.36,34.08,52.0,2373.0,601.0,1135.0,576.0,3.1765,225000.0,<1H OCEAN +-118.36,34.08,52.0,1902.0,488.0,848.0,478.0,2.9621,175000.0,<1H OCEAN +-118.35,34.07,48.0,890.0,255.0,434.0,232.0,3.6111,450000.0,<1H OCEAN +-118.35,34.07,45.0,7803.0,2154.0,3359.0,2041.0,3.3594,287500.0,<1H OCEAN +-118.35,34.07,46.0,1651.0,410.0,512.0,397.0,4.0179,350000.0,<1H OCEAN +-118.35,34.07,45.0,3312.0,880.0,1157.0,809.0,3.5719,500001.0,<1H OCEAN +-118.36,34.07,40.0,1821.0,447.0,777.0,441.0,2.3375,355200.0,<1H OCEAN +-118.36,34.07,48.0,1740.0,360.0,748.0,357.0,4.7019,411100.0,<1H OCEAN +-118.37,34.07,50.0,2519.0,,1117.0,516.0,4.3667,405600.0,<1H OCEAN +-118.36,34.07,52.0,2046.0,451.0,944.0,435.0,3.4265,456900.0,<1H OCEAN +-118.37,34.07,52.0,2203.0,437.0,899.0,384.0,4.25,486900.0,<1H OCEAN +-118.37,34.07,52.0,2195.0,435.0,884.0,432.0,5.24,486400.0,<1H OCEAN +-118.37,34.07,44.0,2703.0,663.0,1045.0,619.0,3.201,287500.0,<1H OCEAN +-118.37,34.07,39.0,2309.0,526.0,870.0,546.0,3.1677,453400.0,<1H OCEAN +-118.37,34.07,52.0,1084.0,247.0,468.0,255.0,3.4286,474300.0,<1H OCEAN +-118.38,34.08,25.0,4625.0,1307.0,1739.0,1191.0,3.3989,485000.0,<1H OCEAN +-118.38,34.07,16.0,4814.0,1381.0,1897.0,1209.0,3.3725,375000.0,<1H OCEAN +-118.38,34.07,21.0,3653.0,956.0,1510.0,890.0,3.5573,500001.0,<1H OCEAN +-118.34,34.07,52.0,3175.0,1057.0,1594.0,997.0,3.1766,225000.0,<1H OCEAN +-118.35,34.06,52.0,3446.0,1360.0,1768.0,1245.0,2.4722,500001.0,<1H OCEAN +-118.34,34.06,52.0,1314.0,170.0,629.0,214.0,7.1669,500001.0,<1H OCEAN +-118.34,34.05,52.0,2530.0,458.0,1122.0,449.0,3.9167,321600.0,<1H OCEAN +-118.34,34.06,52.0,2069.0,417.0,826.0,377.0,3.5481,396000.0,<1H OCEAN +-118.34,34.06,52.0,1482.0,336.0,768.0,300.0,3.7167,327300.0,<1H OCEAN +-118.35,34.06,52.0,2837.0,602.0,1164.0,551.0,3.2411,250000.0,<1H OCEAN +-118.35,34.06,48.0,1354.0,279.0,716.0,309.0,3.7167,385000.0,<1H OCEAN +-118.35,34.06,52.0,1368.0,322.0,617.0,303.0,5.3819,440900.0,<1H OCEAN +-118.35,34.05,33.0,2880.0,836.0,1416.0,736.0,2.6781,328800.0,<1H OCEAN +-118.35,34.06,48.0,3551.0,826.0,1601.0,827.0,3.2279,400000.0,<1H OCEAN +-118.36,34.06,39.0,2810.0,670.0,1109.0,624.0,3.25,355000.0,<1H OCEAN +-118.36,34.06,52.0,2130.0,455.0,921.0,395.0,2.9605,500001.0,<1H OCEAN +-118.37,34.06,52.0,843.0,160.0,333.0,151.0,4.5192,446000.0,<1H OCEAN +-118.37,34.06,52.0,1608.0,289.0,630.0,252.0,5.5596,500001.0,<1H OCEAN +-118.38,34.06,28.0,2522.0,616.0,991.0,574.0,3.1475,362500.0,<1H OCEAN +-118.38,34.06,29.0,3946.0,1008.0,1676.0,876.0,2.7824,450000.0,<1H OCEAN +-118.38,34.06,31.0,4345.0,1158.0,1987.0,1070.0,2.8233,310000.0,<1H OCEAN +-118.38,34.06,25.0,2558.0,661.0,1183.0,636.0,3.5556,500000.0,<1H OCEAN +-118.37,34.05,35.0,2457.0,552.0,1159.0,523.0,3.0862,345300.0,<1H OCEAN +-118.37,34.04,52.0,1197.0,231.0,671.0,219.0,3.825,278500.0,<1H OCEAN +-118.37,34.05,48.0,1266.0,234.0,539.0,222.0,4.005,275000.0,<1H OCEAN +-118.37,34.05,41.0,2369.0,544.0,1252.0,522.0,2.9883,296100.0,<1H OCEAN +-118.37,34.06,52.0,2239.0,423.0,832.0,411.0,5.0858,470000.0,<1H OCEAN +-118.37,34.05,52.0,2346.0,437.0,1121.0,400.0,4.0583,444300.0,<1H OCEAN +-118.37,34.05,52.0,1563.0,306.0,776.0,308.0,3.625,440900.0,<1H OCEAN +-118.37,34.06,52.0,2402.0,506.0,878.0,464.0,4.0217,500001.0,<1H OCEAN +-118.36,34.05,48.0,1825.0,404.0,728.0,363.0,3.3824,322600.0,<1H OCEAN +-118.36,34.05,47.0,1424.0,300.0,632.0,278.0,4.0625,295200.0,<1H OCEAN +-118.36,34.05,48.0,1835.0,380.0,956.0,370.0,3.2813,243600.0,<1H OCEAN +-118.36,34.04,49.0,995.0,184.0,462.0,194.0,2.7917,242000.0,<1H OCEAN +-118.36,34.05,45.0,1879.0,395.0,946.0,409.0,3.3333,254700.0,<1H OCEAN +-118.36,34.05,50.0,3518.0,812.0,1724.0,758.0,3.0833,338100.0,<1H OCEAN +-118.38,34.05,52.0,2053.0,480.0,900.0,417.0,3.0707,417900.0,<1H OCEAN +-118.39,34.05,47.0,1621.0,314.0,724.0,311.0,5.7509,474100.0,<1H OCEAN +-118.38,34.05,52.0,1004.0,231.0,590.0,226.0,4.2404,351000.0,<1H OCEAN +-118.38,34.05,52.0,1241.0,210.0,526.0,214.0,4.4191,334100.0,<1H OCEAN +-118.38,34.05,49.0,702.0,,458.0,187.0,4.8958,333600.0,<1H OCEAN +-118.38,34.05,40.0,2352.0,598.0,1133.0,563.0,3.238,287500.0,<1H OCEAN +-118.38,34.05,35.0,3517.0,879.0,1632.0,784.0,3.0956,500001.0,<1H OCEAN +-118.35,34.05,47.0,2815.0,679.0,1533.0,594.0,2.5806,234100.0,<1H OCEAN +-118.35,34.05,44.0,1856.0,493.0,1374.0,469.0,2.0984,158000.0,<1H OCEAN +-118.36,34.05,42.0,1372.0,,674.0,271.0,2.8793,202100.0,<1H OCEAN +-118.36,34.05,45.0,2283.0,,1093.0,475.0,2.5658,252000.0,<1H OCEAN +-118.35,34.05,46.0,2149.0,451.0,905.0,443.0,2.8841,290800.0,<1H OCEAN +-118.34,34.05,50.0,2009.0,419.0,1130.0,402.0,3.1944,213500.0,<1H OCEAN +-118.34,34.05,39.0,975.0,292.0,723.0,285.0,2.2725,140600.0,<1H OCEAN +-118.35,34.05,52.0,1971.0,414.0,1065.0,409.0,3.6435,195800.0,<1H OCEAN +-118.34,34.05,52.0,2194.0,504.0,997.0,438.0,2.6654,259400.0,<1H OCEAN +-118.32,34.04,39.0,2965.0,812.0,2638.0,794.0,2.532,172700.0,<1H OCEAN +-118.32,34.04,39.0,1294.0,330.0,1140.0,313.0,2.2554,165000.0,<1H OCEAN +-118.32,34.04,48.0,1184.0,328.0,953.0,311.0,2.3526,156300.0,<1H OCEAN +-118.33,34.04,31.0,1090.0,251.0,955.0,239.0,2.913,192500.0,<1H OCEAN +-118.33,34.05,46.0,3015.0,795.0,2300.0,725.0,2.0706,268500.0,<1H OCEAN +-118.33,34.04,52.0,2545.0,401.0,1004.0,372.0,3.6373,420000.0,<1H OCEAN +-118.34,34.05,41.0,2099.0,472.0,1369.0,465.0,2.7409,167100.0,<1H OCEAN +-118.34,34.04,35.0,2345.0,607.0,2042.0,565.0,2.5955,139700.0,<1H OCEAN +-118.34,34.04,40.0,2064.0,662.0,2140.0,617.0,2.2254,127100.0,<1H OCEAN +-118.34,34.04,37.0,1466.0,529.0,1835.0,500.0,1.7014,123200.0,<1H OCEAN +-118.35,34.04,36.0,1956.0,601.0,1672.0,546.0,1.8685,150700.0,<1H OCEAN +-118.35,34.04,49.0,1104.0,266.0,668.0,297.0,3.0856,151600.0,<1H OCEAN +-118.35,34.04,45.0,1579.0,357.0,713.0,335.0,2.1711,179200.0,<1H OCEAN +-118.36,34.04,48.0,1769.0,429.0,993.0,405.0,2.3214,139400.0,<1H OCEAN +-118.36,34.04,45.0,1767.0,417.0,1052.0,379.0,3.5161,157000.0,<1H OCEAN +-118.35,34.04,38.0,1626.0,375.0,1019.0,372.0,2.3687,146800.0,<1H OCEAN +-118.36,34.03,43.0,1690.0,379.0,1017.0,359.0,2.1078,133500.0,<1H OCEAN +-118.37,34.03,37.0,1236.0,,966.0,292.0,3.0694,122200.0,<1H OCEAN +-118.36,34.04,34.0,3239.0,806.0,2331.0,765.0,2.0538,125800.0,<1H OCEAN +-118.35,34.04,41.0,1617.0,423.0,1110.0,375.0,2.4635,169400.0,<1H OCEAN +-118.35,34.03,44.0,865.0,208.0,537.0,183.0,1.9,110900.0,<1H OCEAN +-118.35,34.04,45.0,1839.0,459.0,1312.0,460.0,2.5625,138000.0,<1H OCEAN +-118.34,34.04,42.0,1681.0,360.0,987.0,337.0,2.6,171400.0,<1H OCEAN +-118.34,34.03,48.0,1426.0,331.0,784.0,356.0,1.6581,118800.0,<1H OCEAN +-118.34,34.04,42.0,2010.0,494.0,1203.0,427.0,1.9408,134600.0,<1H OCEAN +-118.35,34.03,35.0,1438.0,333.0,794.0,306.0,1.975,138100.0,<1H OCEAN +-118.33,34.04,33.0,1806.0,444.0,1161.0,393.0,2.5927,161500.0,<1H OCEAN +-118.33,34.03,33.0,2314.0,624.0,1714.0,582.0,1.7377,183900.0,<1H OCEAN +-118.33,34.04,48.0,2437.0,443.0,1400.0,426.0,2.628,251100.0,<1H OCEAN +-118.32,34.04,47.0,1989.0,532.0,1430.0,519.0,1.8333,151100.0,<1H OCEAN +-118.32,34.04,42.0,1766.0,404.0,1117.0,367.0,2.0259,168800.0,<1H OCEAN +-118.32,34.04,44.0,1008.0,223.0,544.0,223.0,2.8654,176800.0,<1H OCEAN +-118.32,34.03,35.0,3189.0,935.0,2221.0,801.0,2.1046,114000.0,<1H OCEAN +-118.33,34.03,39.0,2840.0,826.0,1911.0,688.0,1.9018,137500.0,<1H OCEAN +-118.32,34.03,47.0,1082.0,198.0,455.0,193.0,3.0132,223200.0,<1H OCEAN +-118.32,34.03,50.0,1845.0,349.0,1109.0,335.0,2.8971,127800.0,<1H OCEAN +-118.32,34.03,47.0,1734.0,453.0,1272.0,438.0,3.1731,121500.0,<1H OCEAN +-118.32,34.02,52.0,2511.0,587.0,1660.0,546.0,2.6098,127100.0,<1H OCEAN +-118.32,34.02,51.0,2010.0,460.0,1355.0,433.0,2.0304,133400.0,<1H OCEAN +-118.32,34.02,47.0,1648.0,346.0,1120.0,338.0,2.0042,114200.0,<1H OCEAN +-118.33,34.02,45.0,1667.0,399.0,928.0,375.0,1.8783,118200.0,<1H OCEAN +-118.33,34.02,46.0,1528.0,391.0,933.0,366.0,2.1979,125700.0,<1H OCEAN +-118.33,34.03,46.0,2312.0,625.0,1552.0,603.0,1.6429,125000.0,<1H OCEAN +-118.34,34.02,48.0,1614.0,320.0,684.0,318.0,4.2218,181000.0,<1H OCEAN +-118.34,34.02,44.0,2067.0,385.0,1046.0,441.0,3.5357,156900.0,<1H OCEAN +-118.35,34.03,49.0,2334.0,530.0,1334.0,447.0,1.89,124000.0,<1H OCEAN +-118.35,34.03,43.0,2122.0,524.0,1510.0,436.0,2.2273,123300.0,<1H OCEAN +-118.35,34.02,52.0,427.0,92.0,233.0,116.0,3.25,134700.0,<1H OCEAN +-118.35,34.03,42.0,2043.0,512.0,1634.0,501.0,1.9928,125400.0,<1H OCEAN +-118.36,34.03,36.0,1083.0,342.0,1023.0,295.0,2.1324,143800.0,<1H OCEAN +-118.36,34.03,40.0,2323.0,661.0,1847.0,614.0,1.8316,113500.0,<1H OCEAN +-118.36,34.03,38.0,1400.0,376.0,1139.0,315.0,2.2368,120000.0,<1H OCEAN +-118.36,34.03,35.0,1819.0,499.0,1666.0,482.0,1.6452,125900.0,<1H OCEAN +-118.36,34.03,38.0,2365.0,638.0,2259.0,607.0,2.0879,120700.0,<1H OCEAN +-118.37,34.03,43.0,1350.0,287.0,811.0,307.0,3.3636,140900.0,<1H OCEAN +-118.34,34.03,46.0,2437.0,502.0,1151.0,477.0,2.4444,134100.0,<1H OCEAN +-118.34,34.02,49.0,1609.0,371.0,896.0,389.0,2.5156,136600.0,<1H OCEAN +-118.34,34.02,50.0,1172.0,261.0,685.0,260.0,3.1442,130300.0,<1H OCEAN +-118.34,34.03,49.0,1295.0,276.0,765.0,265.0,3.4306,130200.0,<1H OCEAN +-118.34,34.03,47.0,1927.0,561.0,1349.0,508.0,1.3444,125000.0,<1H OCEAN +-118.36,34.02,43.0,1356.0,333.0,796.0,329.0,1.7159,189700.0,<1H OCEAN +-118.37,34.03,41.0,1425.0,285.0,838.0,296.0,3.9732,188400.0,<1H OCEAN +-118.37,34.02,44.0,1944.0,458.0,981.0,377.0,2.6154,193200.0,<1H OCEAN +-118.28,34.05,35.0,1627.0,838.0,3013.0,791.0,1.5565,152500.0,<1H OCEAN +-118.28,34.04,39.0,1155.0,433.0,1857.0,424.0,2.1696,153400.0,<1H OCEAN +-118.29,34.04,41.0,659.0,291.0,1224.0,290.0,2.0817,132500.0,<1H OCEAN +-118.29,34.05,40.0,907.0,349.0,1426.0,323.0,1.8571,143800.0,<1H OCEAN +-118.29,34.04,48.0,1353.0,488.0,1945.0,487.0,2.4359,123700.0,<1H OCEAN +-118.3,34.04,50.0,1757.0,522.0,2080.0,488.0,1.7225,180000.0,<1H OCEAN +-118.3,34.05,51.0,1005.0,314.0,1227.0,306.0,2.4297,162500.0,<1H OCEAN +-118.3,34.05,39.0,993.0,506.0,1765.0,464.0,1.2786,121900.0,<1H OCEAN +-118.31,34.05,38.0,1864.0,515.0,1768.0,439.0,1.9336,190600.0,<1H OCEAN +-118.31,34.05,35.0,2007.0,571.0,1513.0,554.0,2.1162,229200.0,<1H OCEAN +-118.31,34.05,26.0,1809.0,640.0,2543.0,640.0,2.3536,500000.0,<1H OCEAN +-118.31,34.04,33.0,2691.0,726.0,2390.0,681.0,2.4048,208300.0,<1H OCEAN +-118.31,34.04,29.0,2038.0,578.0,2070.0,570.0,2.0658,214600.0,<1H OCEAN +-118.31,34.03,29.0,2438.0,867.0,2114.0,753.0,0.8351,150000.0,<1H OCEAN +-118.32,34.03,31.0,2206.0,501.0,1194.0,435.0,1.9531,227800.0,<1H OCEAN +-118.31,34.04,52.0,1277.0,285.0,954.0,334.0,2.5833,234600.0,<1H OCEAN +-118.3,34.04,24.0,2092.0,585.0,1757.0,538.0,1.7109,175000.0,<1H OCEAN +-118.3,34.04,37.0,1470.0,399.0,1579.0,390.0,2.006,150000.0,<1H OCEAN +-118.31,34.04,37.0,2338.0,686.0,2376.0,630.0,1.767,170300.0,<1H OCEAN +-118.29,34.04,44.0,1941.0,579.0,2049.0,535.0,2.0405,143000.0,<1H OCEAN +-118.3,34.03,41.0,1653.0,426.0,1868.0,393.0,1.78,162500.0,<1H OCEAN +-118.3,34.04,35.0,1090.0,345.0,1605.0,330.0,2.1518,152800.0,<1H OCEAN +-118.29,34.04,31.0,700.0,299.0,1272.0,298.0,2.1542,128100.0,<1H OCEAN +-118.29,34.04,32.0,432.0,182.0,702.0,186.0,2.1471,125000.0,<1H OCEAN +-118.29,34.03,42.0,1680.0,557.0,2099.0,526.0,1.9167,136400.0,<1H OCEAN +-118.28,34.03,45.0,943.0,289.0,953.0,238.0,2.0673,151600.0,<1H OCEAN +-118.29,34.03,42.0,907.0,378.0,822.0,288.0,1.2875,179200.0,<1H OCEAN +-118.29,34.03,29.0,3544.0,1384.0,3323.0,1213.0,1.0219,258300.0,<1H OCEAN +-118.29,34.03,38.0,1501.0,437.0,1777.0,441.0,2.0848,135200.0,<1H OCEAN +-118.29,34.03,22.0,3313.0,1235.0,2381.0,1063.0,0.7473,168800.0,<1H OCEAN +-118.29,34.03,27.0,1084.0,287.0,1085.0,279.0,2.135,119600.0,<1H OCEAN +-118.31,34.03,46.0,2173.0,510.0,1343.0,476.0,2.025,135500.0,<1H OCEAN +-118.31,34.03,52.0,1902.0,406.0,1233.0,385.0,2.8295,132200.0,<1H OCEAN +-118.31,34.02,52.0,1173.0,284.0,814.0,295.0,2.45,111400.0,<1H OCEAN +-118.31,34.02,44.0,1555.0,324.0,931.0,265.0,1.4712,105800.0,<1H OCEAN +-118.31,34.02,45.0,1423.0,278.0,822.0,276.0,2.4519,98100.0,<1H OCEAN +-118.31,34.02,52.0,1832.0,441.0,1186.0,420.0,1.2434,98400.0,<1H OCEAN +-118.3,34.03,47.0,2241.0,559.0,1775.0,504.0,2.1571,147900.0,<1H OCEAN +-118.3,34.03,40.0,1695.0,374.0,1138.0,357.0,2.7125,150000.0,<1H OCEAN +-118.31,34.03,47.0,1315.0,,785.0,245.0,1.23,138400.0,<1H OCEAN +-118.3,34.03,37.0,2781.0,766.0,2586.0,729.0,1.8564,187500.0,<1H OCEAN +-118.31,34.03,34.0,2041.0,517.0,1479.0,495.0,2.1173,156600.0,<1H OCEAN +-118.31,34.02,23.0,1703.0,397.0,1333.0,361.0,1.3187,127100.0,<1H OCEAN +-118.31,34.02,46.0,1976.0,469.0,1409.0,431.0,2.2981,112100.0,<1H OCEAN +-118.3,34.02,49.0,2120.0,483.0,1522.0,416.0,1.85,116800.0,<1H OCEAN +-118.29,34.02,21.0,1641.0,491.0,1526.0,453.0,2.087,141300.0,<1H OCEAN +-118.3,34.02,34.0,3184.0,772.0,2474.0,705.0,1.631,137500.0,<1H OCEAN +-118.3,34.02,31.0,1933.0,478.0,1522.0,423.0,1.5781,119300.0,<1H OCEAN +-118.28,34.02,29.0,515.0,229.0,2690.0,217.0,0.4999,500001.0,<1H OCEAN +-118.27,34.03,50.0,395.0,232.0,948.0,243.0,1.7546,175000.0,<1H OCEAN +-118.27,34.03,51.0,1280.0,422.0,1560.0,381.0,1.7115,125000.0,<1H OCEAN +-118.28,34.04,19.0,460.0,241.0,890.0,229.0,1.6089,162500.0,<1H OCEAN +-118.28,34.04,24.0,1283.0,545.0,1932.0,516.0,1.2969,160200.0,<1H OCEAN +-118.28,34.04,25.0,1582.0,780.0,2390.0,719.0,1.4167,200000.0,<1H OCEAN +-118.28,34.04,20.0,1193.0,454.0,1880.0,453.0,2.1806,180000.0,<1H OCEAN +-118.28,34.05,44.0,1273.0,474.0,1754.0,460.0,1.6037,275000.0,<1H OCEAN +-118.28,34.03,41.0,1933.0,791.0,3121.0,719.0,1.8539,147500.0,<1H OCEAN +-118.28,34.03,40.0,2118.0,796.0,2195.0,658.0,1.7976,164600.0,<1H OCEAN +-118.28,34.04,48.0,1521.0,513.0,1772.0,458.0,2.2232,162500.0,<1H OCEAN +-118.27,34.02,39.0,2004.0,633.0,3050.0,621.0,1.875,127300.0,<1H OCEAN +-118.28,34.02,52.0,281.0,103.0,470.0,96.0,1.9375,38800.0,<1H OCEAN +-118.27,34.02,40.0,561.0,284.0,662.0,205.0,0.9234,187500.0,<1H OCEAN +-118.28,34.03,26.0,2107.0,809.0,2821.0,572.0,0.844,350000.0,<1H OCEAN +-118.28,34.03,25.0,1407.0,550.0,1193.0,472.0,1.2989,225000.0,<1H OCEAN +-118.25,34.02,50.0,180.0,89.0,356.0,76.0,2.1944,158300.0,<1H OCEAN +-118.24,34.03,52.0,142.0,47.0,137.0,45.0,1.8333,312500.0,<1H OCEAN +-118.26,34.03,49.0,299.0,90.0,287.0,68.0,1.2096,100000.0,<1H OCEAN +-118.25,34.03,52.0,1274.0,418.0,1655.0,368.0,2.1905,124000.0,<1H OCEAN +-118.25,34.02,32.0,1375.0,448.0,1698.0,432.0,1.6302,130700.0,<1H OCEAN +-118.26,34.02,38.0,980.0,285.0,1308.0,310.0,1.5652,123100.0,<1H OCEAN +-118.26,34.02,38.0,1091.0,349.0,1786.0,340.0,2.131,136500.0,<1H OCEAN +-118.26,34.02,40.0,1259.0,362.0,1499.0,327.0,1.8382,126400.0,<1H OCEAN +-118.26,34.02,37.0,1551.0,501.0,2173.0,474.0,2.1667,117700.0,<1H OCEAN +-118.26,34.02,48.0,1465.0,440.0,1859.0,400.0,1.3134,96200.0,<1H OCEAN +-118.26,34.02,46.0,1249.0,357.0,1607.0,331.0,2.0703,114800.0,<1H OCEAN +-118.26,34.02,41.0,848.0,323.0,1428.0,313.0,1.5603,109600.0,<1H OCEAN +-118.26,34.02,39.0,698.0,232.0,1046.0,228.0,2.2356,119500.0,<1H OCEAN +-118.25,34.02,35.0,1368.0,486.0,2239.0,461.0,1.913,114300.0,<1H OCEAN +-118.25,34.02,33.0,1676.0,525.0,2564.0,515.0,2.1957,100800.0,<1H OCEAN +-118.25,34.01,28.0,481.0,136.0,596.0,128.0,1.2396,90300.0,<1H OCEAN +-118.25,34.02,32.0,1311.0,410.0,1792.0,396.0,2.3304,119900.0,<1H OCEAN +-118.24,34.02,48.0,542.0,150.0,571.0,114.0,1.8485,90600.0,<1H OCEAN +-118.24,34.01,48.0,396.0,99.0,485.0,110.0,2.375,107500.0,<1H OCEAN +-118.24,34.01,43.0,1456.0,444.0,2098.0,433.0,1.8929,99200.0,<1H OCEAN +-118.25,34.01,31.0,1301.0,403.0,1952.0,377.0,2.1466,100800.0,<1H OCEAN +-118.24,34.01,30.0,405.0,86.0,376.0,68.0,1.7813,127500.0,<1H OCEAN +-118.25,34.01,45.0,782.0,270.0,1030.0,235.0,1.0898,93400.0,<1H OCEAN +-118.25,34.01,36.0,879.0,262.0,1034.0,236.0,1.2857,99300.0,<1H OCEAN +-118.25,34.01,43.0,1429.0,386.0,1412.0,354.0,1.3287,107200.0,<1H OCEAN +-118.25,34.01,43.0,1575.0,475.0,1980.0,469.0,1.7425,100500.0,<1H OCEAN +-118.25,34.01,30.0,962.0,291.0,1280.0,263.0,1.4464,110200.0,<1H OCEAN +-118.26,34.01,38.0,697.0,208.0,749.0,206.0,1.4653,118800.0,<1H OCEAN +-118.26,34.01,47.0,1269.0,323.0,1628.0,325.0,1.5089,115800.0,<1H OCEAN +-118.26,34.01,37.0,2451.0,668.0,2824.0,598.0,1.9074,99600.0,<1H OCEAN +-118.27,34.01,42.0,990.0,289.0,1167.0,281.0,1.4524,126800.0,<1H OCEAN +-118.26,34.01,46.0,879.0,253.0,1010.0,221.0,2.1776,118300.0,<1H OCEAN +-118.27,34.02,21.0,1314.0,375.0,1505.0,366.0,2.319,97200.0,<1H OCEAN +-118.27,34.01,35.0,1193.0,355.0,1784.0,341.0,1.8652,116100.0,<1H OCEAN +-118.27,34.01,35.0,1672.0,556.0,2106.0,519.0,1.2206,129200.0,<1H OCEAN +-118.27,34.01,47.0,921.0,264.0,881.0,221.0,1.4327,114100.0,<1H OCEAN +-118.27,34.01,43.0,1235.0,385.0,1745.0,372.0,2.0817,113300.0,<1H OCEAN +-118.27,34.0,46.0,1748.0,428.0,1707.0,409.0,2.148,103800.0,<1H OCEAN +-118.27,34.0,48.0,1869.0,461.0,1834.0,441.0,1.7052,107400.0,<1H OCEAN +-118.27,34.0,47.0,780.0,237.0,888.0,215.0,1.75,95800.0,<1H OCEAN +-118.26,34.01,43.0,2179.0,682.0,2624.0,609.0,1.8641,108200.0,<1H OCEAN +-118.26,34.0,41.0,1733.0,492.0,1776.0,453.0,1.6221,104200.0,<1H OCEAN +-118.25,34.0,36.0,1033.0,267.0,1112.0,229.0,1.7237,105800.0,<1H OCEAN +-118.25,34.0,36.0,1176.0,309.0,1267.0,292.0,1.6382,105000.0,<1H OCEAN +-118.25,34.0,32.0,1218.0,342.0,1292.0,304.0,1.5781,102900.0,<1H OCEAN +-118.25,34.0,41.0,1768.0,475.0,1721.0,474.0,1.303,90400.0,<1H OCEAN +-118.25,34.0,34.0,1905.0,552.0,2194.0,521.0,1.4792,95800.0,<1H OCEAN +-118.24,34.0,23.0,588.0,157.0,716.0,173.0,1.2056,87500.0,<1H OCEAN +-118.24,34.0,43.0,863.0,206.0,788.0,187.0,0.9463,95000.0,<1H OCEAN +-118.25,34.0,29.0,1419.0,363.0,1696.0,317.0,2.2813,101300.0,<1H OCEAN +-118.24,34.0,38.0,1715.0,414.0,1714.0,389.0,1.7132,108200.0,<1H OCEAN +-118.24,33.99,44.0,448.0,116.0,504.0,96.0,1.875,98600.0,<1H OCEAN +-118.24,33.99,41.0,1425.0,372.0,1803.0,353.0,1.6731,88200.0,<1H OCEAN +-118.25,33.99,42.0,2261.0,574.0,2496.0,527.0,1.5556,98500.0,<1H OCEAN +-118.25,33.99,39.0,1274.0,319.0,1362.0,324.0,2.1793,107900.0,<1H OCEAN +-118.26,34.0,27.0,1611.0,479.0,1457.0,458.0,0.8941,91900.0,<1H OCEAN +-118.26,34.0,37.0,2615.0,697.0,2484.0,630.0,1.9208,103400.0,<1H OCEAN +-118.27,34.0,40.0,2099.0,599.0,2311.0,529.0,1.852,101500.0,<1H OCEAN +-118.27,34.0,43.0,1638.0,434.0,1213.0,390.0,1.3403,110800.0,<1H OCEAN +-118.27,34.0,43.0,1258.0,381.0,1276.0,358.0,1.8917,106900.0,<1H OCEAN +-118.26,33.99,47.0,1865.0,465.0,1916.0,438.0,1.8242,95000.0,<1H OCEAN +-118.26,33.99,36.0,2016.0,505.0,1807.0,464.0,1.6901,103500.0,<1H OCEAN +-118.27,33.99,30.0,504.0,140.0,529.0,123.0,1.9531,100000.0,<1H OCEAN +-118.27,33.99,35.0,932.0,294.0,1153.0,282.0,1.4886,100000.0,<1H OCEAN +-118.27,33.99,38.0,1407.0,447.0,1783.0,402.0,1.8086,97100.0,<1H OCEAN +-118.28,34.01,46.0,441.0,167.0,621.0,144.0,1.8824,162500.0,<1H OCEAN +-118.28,34.02,46.0,1098.0,426.0,1510.0,374.0,2.1382,156300.0,<1H OCEAN +-118.29,34.01,40.0,885.0,312.0,799.0,221.0,1.1667,143800.0,<1H OCEAN +-118.3,34.01,48.0,4217.0,1095.0,3298.0,949.0,1.9152,122300.0,<1H OCEAN +-118.3,34.02,27.0,2190.0,626.0,1768.0,528.0,1.2446,103800.0,<1H OCEAN +-118.29,34.02,26.0,2001.0,582.0,2044.0,557.0,1.1563,118800.0,<1H OCEAN +-118.3,34.02,42.0,2386.0,670.0,2327.0,661.0,1.6699,108000.0,<1H OCEAN +-118.3,34.01,35.0,1147.0,290.0,818.0,281.0,1.7961,111700.0,<1H OCEAN +-118.31,34.01,50.0,1463.0,354.0,912.0,293.0,1.7386,109400.0,<1H OCEAN +-118.31,34.02,41.0,1046.0,216.0,727.0,201.0,1.6667,116900.0,<1H OCEAN +-118.31,34.02,43.0,2255.0,533.0,1568.0,470.0,1.6955,115200.0,<1H OCEAN +-118.31,34.01,39.0,2073.0,566.0,1246.0,547.0,2.0417,117100.0,<1H OCEAN +-118.31,34.02,46.0,2217.0,489.0,1227.0,448.0,1.6851,108800.0,<1H OCEAN +-118.31,34.01,48.0,2544.0,532.0,1357.0,498.0,2.5263,121000.0,<1H OCEAN +-118.31,34.01,52.0,2547.0,475.0,1417.0,444.0,1.8214,123200.0,<1H OCEAN +-118.31,34.01,52.0,1793.0,350.0,1303.0,366.0,3.0759,123700.0,<1H OCEAN +-118.29,34.01,42.0,814.0,223.0,511.0,188.0,2.3942,123200.0,<1H OCEAN +-118.29,34.01,50.0,2238.0,673.0,2247.0,583.0,1.6505,125000.0,<1H OCEAN +-118.3,34.0,52.0,1743.0,421.0,1206.0,384.0,1.6875,116000.0,<1H OCEAN +-118.3,34.01,52.0,1908.0,428.0,1271.0,394.0,2.5885,136200.0,<1H OCEAN +-118.3,34.01,52.0,1444.0,343.0,1154.0,334.0,2.0625,134400.0,<1H OCEAN +-118.28,34.01,34.0,2305.0,775.0,2450.0,740.0,1.7143,132000.0,<1H OCEAN +-118.28,34.0,46.0,1650.0,463.0,1992.0,458.0,2.3403,114100.0,<1H OCEAN +-118.29,34.0,6.0,1487.0,468.0,1509.0,403.0,1.4639,112500.0,<1H OCEAN +-118.29,34.01,39.0,751.0,207.0,1010.0,231.0,1.6036,137500.0,<1H OCEAN +-118.29,34.01,30.0,1385.0,518.0,1730.0,472.0,1.0539,142500.0,<1H OCEAN +-118.28,34.01,50.0,2601.0,794.0,3080.0,770.0,1.8656,122900.0,<1H OCEAN +-118.28,34.0,43.0,713.0,245.0,880.0,237.0,1.2065,103600.0,<1H OCEAN +-118.28,34.01,52.0,795.0,308.0,1118.0,275.0,1.2175,131300.0,<1H OCEAN +-118.28,34.01,48.0,483.0,190.0,775.0,188.0,2.3309,126600.0,<1H OCEAN +-118.28,34.0,38.0,3335.0,921.0,3612.0,887.0,2.125,118800.0,<1H OCEAN +-118.28,34.0,42.0,1534.0,417.0,1295.0,380.0,2.0938,119200.0,<1H OCEAN +-118.28,34.0,42.0,855.0,284.0,890.0,247.0,1.2778,112500.0,<1H OCEAN +-118.28,34.0,44.0,2636.0,725.0,2182.0,651.0,1.432,124000.0,<1H OCEAN +-118.28,34.0,48.0,1514.0,376.0,1353.0,344.0,2.1607,96100.0,<1H OCEAN +-118.29,34.0,44.0,1753.0,387.0,1165.0,380.0,2.1354,105800.0,<1H OCEAN +-118.29,34.0,41.0,1807.0,493.0,1731.0,471.0,1.2347,111700.0,<1H OCEAN +-118.29,34.0,52.0,1319.0,295.0,898.0,271.0,2.7727,128600.0,<1H OCEAN +-118.3,34.0,40.0,1131.0,281.0,859.0,230.0,1.1806,134600.0,<1H OCEAN +-118.3,34.0,52.0,1420.0,355.0,1080.0,353.0,1.5179,116100.0,<1H OCEAN +-118.29,34.0,52.0,2579.0,494.0,1558.0,458.0,2.0809,109600.0,<1H OCEAN +-118.3,34.0,52.0,1686.0,377.0,982.0,356.0,2.0958,116400.0,<1H OCEAN +-118.3,34.0,52.0,1296.0,246.0,853.0,238.0,3.05,111600.0,<1H OCEAN +-118.31,34.0,52.0,1542.0,309.0,939.0,276.0,1.6892,129100.0,<1H OCEAN +-118.3,34.0,52.0,1718.0,354.0,1026.0,312.0,2.0,128000.0,<1H OCEAN +-118.31,34.0,52.0,1630.0,379.0,1413.0,405.0,1.933,120000.0,<1H OCEAN +-118.31,34.0,52.0,2709.0,642.0,1751.0,613.0,2.1116,122500.0,<1H OCEAN +-118.31,34.0,47.0,1551.0,362.0,1329.0,322.0,1.9792,116400.0,<1H OCEAN +-118.31,33.99,48.0,2235.0,433.0,1363.0,433.0,1.6559,101400.0,<1H OCEAN +-118.31,33.99,47.0,1525.0,359.0,982.0,333.0,2.0915,126600.0,<1H OCEAN +-118.31,33.99,45.0,1489.0,339.0,791.0,316.0,2.2339,104800.0,<1H OCEAN +-118.31,33.99,44.0,1703.0,358.0,789.0,249.0,1.7083,100000.0,<1H OCEAN +-118.29,33.99,46.0,2608.0,636.0,1766.0,596.0,1.5846,114800.0,<1H OCEAN +-118.3,33.99,47.0,2637.0,588.0,1903.0,521.0,1.8317,96500.0,<1H OCEAN +-118.3,33.99,47.0,2212.0,533.0,1903.0,554.0,1.9853,101100.0,<1H OCEAN +-118.28,33.99,46.0,2577.0,703.0,2446.0,687.0,1.275,98300.0,<1H OCEAN +-118.29,33.99,46.0,2198.0,530.0,2067.0,497.0,2.0542,103400.0,<1H OCEAN +-118.28,33.99,52.0,1283.0,342.0,1363.0,329.0,2.5848,101900.0,<1H OCEAN +-118.28,33.99,49.0,2174.0,481.0,1861.0,484.0,1.7159,95000.0,<1H OCEAN +-118.28,33.99,46.0,1211.0,321.0,1153.0,282.0,1.7849,99300.0,<1H OCEAN +-118.32,34.01,52.0,3104.0,645.0,1498.0,581.0,2.6667,128000.0,<1H OCEAN +-118.32,34.02,50.0,1655.0,256.0,672.0,260.0,4.2554,194300.0,<1H OCEAN +-118.32,34.02,48.0,1949.0,308.0,823.0,340.0,3.3906,189700.0,<1H OCEAN +-118.32,34.01,50.0,1842.0,377.0,817.0,341.0,3.1548,157700.0,<1H OCEAN +-118.32,34.01,47.0,1745.0,371.0,1079.0,368.0,2.4022,123400.0,<1H OCEAN +-118.33,34.02,46.0,2223.0,361.0,968.0,373.0,4.26,182600.0,<1H OCEAN +-118.33,34.01,47.0,1320.0,259.0,653.0,291.0,3.7727,193000.0,<1H OCEAN +-118.33,34.02,42.0,2043.0,378.0,869.0,416.0,3.5,181100.0,<1H OCEAN +-118.32,34.01,44.0,4032.0,913.0,1622.0,848.0,2.4934,165800.0,<1H OCEAN +-118.33,34.01,43.0,2227.0,564.0,956.0,472.0,2.0217,187500.0,<1H OCEAN +-118.33,34.01,44.0,1762.0,463.0,786.0,445.0,1.9231,188500.0,<1H OCEAN +-118.33,34.01,44.0,2182.0,492.0,878.0,493.0,1.9631,181300.0,<1H OCEAN +-118.32,34.0,50.0,3250.0,693.0,2300.0,675.0,1.95,112600.0,<1H OCEAN +-118.32,34.0,50.0,2189.0,460.0,1097.0,469.0,2.4583,120900.0,<1H OCEAN +-118.33,34.0,47.0,1671.0,388.0,895.0,317.0,2.2054,121500.0,<1H OCEAN +-118.33,34.0,47.0,825.0,187.0,416.0,173.0,2.3333,133300.0,<1H OCEAN +-118.33,34.0,24.0,873.0,320.0,529.0,308.0,0.9304,151600.0,<1H OCEAN +-118.32,33.99,43.0,2028.0,479.0,1074.0,394.0,2.5909,98700.0,<1H OCEAN +-118.32,33.99,49.0,1407.0,269.0,889.0,283.0,1.9779,114200.0,<1H OCEAN +-118.33,33.99,44.0,1918.0,387.0,1041.0,364.0,2.8542,126500.0,<1H OCEAN +-118.33,33.99,46.0,1582.0,315.0,777.0,286.0,3.2083,149600.0,<1H OCEAN +-118.34,33.99,48.0,2009.0,335.0,919.0,297.0,4.8125,170500.0,<1H OCEAN +-118.32,33.99,48.0,1260.0,284.0,791.0,280.0,2.1875,115200.0,<1H OCEAN +-118.32,33.99,43.0,1257.0,232.0,735.0,232.0,3.7167,108900.0,<1H OCEAN +-118.33,33.99,43.0,2224.0,550.0,1598.0,545.0,2.8274,122500.0,<1H OCEAN +-118.34,33.99,46.0,1217.0,322.0,662.0,305.0,3.1731,140300.0,<1H OCEAN +-118.32,33.98,47.0,949.0,210.0,574.0,217.0,2.175,114700.0,<1H OCEAN +-118.32,33.98,40.0,1298.0,277.0,791.0,255.0,3.2344,104300.0,<1H OCEAN +-118.32,33.98,47.0,1528.0,331.0,864.0,308.0,1.9732,101000.0,<1H OCEAN +-118.32,33.98,46.0,1611.0,339.0,921.0,314.0,3.0833,103300.0,<1H OCEAN +-118.33,33.98,28.0,3889.0,1199.0,3121.0,1046.0,1.8806,113900.0,<1H OCEAN +-118.33,33.98,32.0,1784.0,489.0,1472.0,476.0,1.6477,108900.0,<1H OCEAN +-118.33,33.98,38.0,3063.0,796.0,2153.0,721.0,1.8472,149100.0,<1H OCEAN +-118.34,33.99,48.0,2225.0,433.0,1170.0,401.0,2.9643,140400.0,<1H OCEAN +-118.34,33.98,46.0,2126.0,409.0,1292.0,414.0,2.9315,149000.0,<1H OCEAN +-118.35,33.99,47.0,2183.0,380.0,927.0,371.0,4.9531,180100.0,<1H OCEAN +-118.35,33.98,47.0,2512.0,461.0,1082.0,426.0,3.8235,207600.0,<1H OCEAN +-118.34,33.99,34.0,397.0,132.0,250.0,121.0,1.675,166700.0,<1H OCEAN +-118.32,33.98,44.0,1448.0,314.0,861.0,310.0,2.2396,108600.0,<1H OCEAN +-118.32,33.97,52.0,1778.0,320.0,795.0,279.0,3.5114,138800.0,<1H OCEAN +-118.32,33.98,49.0,1412.0,333.0,901.0,328.0,1.7067,118600.0,<1H OCEAN +-118.33,33.98,30.0,3112.0,931.0,2739.0,841.0,1.6531,118500.0,<1H OCEAN +-118.33,33.97,44.0,2526.0,579.0,1423.0,573.0,2.5363,158800.0,<1H OCEAN +-118.33,33.97,47.0,1830.0,369.0,922.0,377.0,4.1635,156400.0,<1H OCEAN +-118.36,34.02,46.0,3745.0,798.0,1502.0,808.0,3.8643,195800.0,<1H OCEAN +-118.36,34.01,33.0,3140.0,466.0,1214.0,464.0,6.5044,350400.0,<1H OCEAN +-118.37,34.02,33.0,2263.0,430.0,900.0,382.0,4.4028,246800.0,<1H OCEAN +-118.38,34.02,31.0,1893.0,450.0,819.0,426.0,4.3077,140600.0,<1H OCEAN +-118.33,34.02,11.0,1249.0,313.0,625.0,336.0,0.8702,170500.0,<1H OCEAN +-118.34,34.01,35.0,1359.0,359.0,655.0,341.0,2.5568,312500.0,<1H OCEAN +-118.34,34.01,37.0,4291.0,1102.0,1941.0,953.0,1.7945,106300.0,<1H OCEAN +-118.34,34.01,38.0,2318.0,735.0,1407.0,702.0,1.6187,266700.0,<1H OCEAN +-118.34,34.02,44.0,1527.0,246.0,608.0,245.0,4.0357,187800.0,<1H OCEAN +-118.35,34.02,34.0,3978.0,1073.0,2725.0,1035.0,1.7622,167900.0,<1H OCEAN +-118.35,34.02,34.0,5218.0,1576.0,3538.0,1371.0,1.5143,118800.0,<1H OCEAN +-118.35,34.02,27.0,3358.0,1069.0,2415.0,956.0,1.4589,87500.0,<1H OCEAN +-118.35,34.01,33.0,3246.0,601.0,1585.0,603.0,3.6629,353200.0,<1H OCEAN +-118.35,34.01,35.0,3776.0,,1583.0,749.0,3.5486,332100.0,<1H OCEAN +-118.35,34.0,28.0,3085.0,621.0,1162.0,558.0,3.25,301000.0,<1H OCEAN +-118.28,33.99,35.0,1138.0,304.0,1128.0,311.0,1.8818,100000.0,<1H OCEAN +-118.28,33.99,37.0,1971.0,513.0,1673.0,464.0,1.4625,103000.0,<1H OCEAN +-118.29,33.99,39.0,979.0,235.0,857.0,236.0,2.5547,108900.0,<1H OCEAN +-118.29,33.98,41.0,1582.0,416.0,1422.0,370.0,1.0516,108300.0,<1H OCEAN +-118.29,33.99,43.0,1902.0,398.0,1153.0,363.0,1.9375,112900.0,<1H OCEAN +-118.3,33.99,44.0,1458.0,326.0,1159.0,283.0,1.1645,98200.0,<1H OCEAN +-118.3,33.99,43.0,1534.0,384.0,1231.0,329.0,2.5437,94500.0,<1H OCEAN +-118.3,33.98,44.0,1597.0,388.0,902.0,321.0,1.9556,93300.0,<1H OCEAN +-118.3,33.99,45.0,1701.0,452.0,1484.0,427.0,1.84,91400.0,<1H OCEAN +-118.31,33.98,44.0,222.0,54.0,234.0,77.0,5.1136,111700.0,<1H OCEAN +-118.31,33.99,49.0,857.0,196.0,694.0,228.0,2.895,108000.0,<1H OCEAN +-118.31,33.98,52.0,1837.0,426.0,1062.0,343.0,2.0,96500.0,<1H OCEAN +-118.31,33.98,52.0,1607.0,331.0,900.0,295.0,3.5982,96600.0,<1H OCEAN +-118.31,33.98,50.0,1985.0,454.0,1090.0,410.0,1.825,106600.0,<1H OCEAN +-118.31,33.98,52.0,1975.0,379.0,1043.0,371.0,2.3977,112200.0,<1H OCEAN +-118.32,33.98,49.0,1993.0,446.0,1052.0,394.0,2.2138,119800.0,<1H OCEAN +-118.29,33.98,44.0,2261.0,555.0,1348.0,455.0,1.9125,97200.0,<1H OCEAN +-118.29,33.98,48.0,1124.0,231.0,783.0,223.0,3.4444,93100.0,<1H OCEAN +-118.3,33.98,52.0,1371.0,315.0,986.0,277.0,2.9432,94000.0,<1H OCEAN +-118.3,33.98,48.0,2010.0,445.0,1208.0,404.0,1.6611,95800.0,<1H OCEAN +-118.3,33.98,48.0,1998.0,410.0,1176.0,382.0,3.0455,102400.0,<1H OCEAN +-118.3,33.98,44.0,1242.0,270.0,811.0,274.0,2.9375,95200.0,<1H OCEAN +-118.29,33.98,42.0,2833.0,768.0,2542.0,725.0,1.3479,100000.0,<1H OCEAN +-118.29,33.98,46.0,1118.0,300.0,786.0,254.0,1.4042,110000.0,<1H OCEAN +-118.28,33.98,39.0,1306.0,345.0,1332.0,331.0,1.9564,92200.0,<1H OCEAN +-118.28,33.98,47.0,865.0,193.0,782.0,217.0,2.2411,93000.0,<1H OCEAN +-118.28,33.98,45.0,1720.0,416.0,1382.0,365.0,0.9337,92300.0,<1H OCEAN +-118.28,33.98,19.0,883.0,313.0,726.0,277.0,0.9809,121400.0,<1H OCEAN +-118.29,33.98,30.0,1162.0,318.0,1207.0,289.0,1.223,100000.0,<1H OCEAN +-118.28,33.97,31.0,1068.0,271.0,1091.0,281.0,1.689,102600.0,<1H OCEAN +-118.28,33.97,31.0,2017.0,566.0,2063.0,521.0,1.9219,107000.0,<1H OCEAN +-118.28,33.97,35.0,2305.0,634.0,1978.0,568.0,1.375,100000.0,<1H OCEAN +-118.29,33.97,43.0,2660.0,672.0,2133.0,588.0,1.7734,107300.0,<1H OCEAN +-118.3,33.97,46.0,1425.0,317.0,1140.0,304.0,3.375,98500.0,<1H OCEAN +-118.3,33.97,44.0,1521.0,289.0,1074.0,285.0,2.0673,99800.0,<1H OCEAN +-118.3,33.97,42.0,944.0,200.0,567.0,190.0,2.6311,124100.0,<1H OCEAN +-118.3,33.97,50.0,2270.0,451.0,1000.0,412.0,2.1221,119400.0,<1H OCEAN +-118.31,33.97,52.0,1595.0,325.0,823.0,302.0,3.2188,124200.0,<1H OCEAN +-118.31,33.97,47.0,2066.0,422.0,1156.0,380.0,2.7917,125800.0,<1H OCEAN +-118.31,33.97,52.0,1629.0,277.0,819.0,288.0,3.725,142600.0,<1H OCEAN +-118.31,33.97,48.0,1541.0,314.0,819.0,312.0,3.0917,136100.0,<1H OCEAN +-118.31,33.94,41.0,1353.0,286.0,751.0,250.0,2.7401,131700.0,<1H OCEAN +-118.3,33.95,50.0,1843.0,326.0,892.0,314.0,3.1346,120000.0,<1H OCEAN +-118.31,33.95,43.0,1823.0,358.0,1065.0,342.0,3.2708,131000.0,<1H OCEAN +-118.31,33.95,44.0,1558.0,333.0,1095.0,316.0,4.0043,133500.0,<1H OCEAN +-118.31,33.95,44.0,2490.0,430.0,1305.0,411.0,4.8295,149600.0,<1H OCEAN +-118.31,33.94,43.0,2104.0,393.0,1132.0,394.0,3.0682,142000.0,<1H OCEAN +-118.31,33.96,43.0,2118.0,569.0,1266.0,500.0,1.747,121000.0,<1H OCEAN +-118.31,33.96,43.0,2149.0,493.0,1316.0,462.0,1.528,131800.0,<1H OCEAN +-118.31,33.96,46.0,1686.0,303.0,870.0,320.0,3.4643,136300.0,<1H OCEAN +-118.31,33.96,48.0,2015.0,356.0,1020.0,338.0,4.0625,138700.0,<1H OCEAN +-118.29,33.97,48.0,3139.0,587.0,1319.0,506.0,3.5208,134200.0,<1H OCEAN +-118.29,33.96,36.0,1717.0,417.0,902.0,368.0,1.4868,113200.0,<1H OCEAN +-118.3,33.96,43.0,2009.0,442.0,1095.0,439.0,2.8299,109500.0,<1H OCEAN +-118.3,33.96,39.0,2802.0,618.0,1524.0,529.0,2.6518,136300.0,<1H OCEAN +-118.28,33.96,41.0,1175.0,340.0,1241.0,352.0,1.2273,98400.0,<1H OCEAN +-118.28,33.96,34.0,2074.0,562.0,1913.0,514.0,1.6156,102100.0,<1H OCEAN +-118.28,33.97,34.0,2771.0,802.0,2782.0,715.0,1.6652,99000.0,<1H OCEAN +-118.29,33.96,31.0,4022.0,1208.0,3707.0,1007.0,1.3096,116300.0,<1H OCEAN +-118.3,33.96,47.0,2112.0,417.0,1161.0,368.0,3.9722,117400.0,<1H OCEAN +-118.31,33.96,52.0,2523.0,460.0,1167.0,413.0,3.0625,127400.0,<1H OCEAN +-118.31,33.96,47.0,1586.0,322.0,1077.0,339.0,4.4861,140400.0,<1H OCEAN +-118.31,33.96,47.0,2005.0,392.0,1134.0,415.0,3.7143,140300.0,<1H OCEAN +-118.26,33.99,30.0,1702.0,443.0,1966.0,442.0,1.5521,97500.0,<1H OCEAN +-118.27,33.98,30.0,1966.0,584.0,2028.0,535.0,1.625,101500.0,<1H OCEAN +-118.28,33.99,38.0,1454.0,323.0,1098.0,297.0,1.5109,104000.0,<1H OCEAN +-118.27,33.99,41.0,656.0,162.0,730.0,170.0,1.8047,101800.0,<1H OCEAN +-118.28,33.98,43.0,1240.0,312.0,1100.0,311.0,1.575,97500.0,<1H OCEAN +-118.27,33.98,45.0,1696.0,424.0,1502.0,429.0,1.3042,99200.0,<1H OCEAN +-118.27,33.98,39.0,2062.0,588.0,1933.0,570.0,1.3801,97000.0,<1H OCEAN +-118.27,33.98,44.0,1722.0,457.0,2177.0,401.0,2.125,92500.0,<1H OCEAN +-118.26,33.98,43.0,762.0,206.0,854.0,188.0,1.2315,98200.0,<1H OCEAN +-118.26,33.97,46.0,1295.0,351.0,1120.0,323.0,1.7121,98200.0,<1H OCEAN +-118.26,33.97,44.0,1246.0,308.0,1031.0,295.0,1.9556,96300.0,<1H OCEAN +-118.26,33.97,46.0,1521.0,352.0,1100.0,334.0,1.55,100600.0,<1H OCEAN +-118.26,33.97,46.0,1086.0,249.0,880.0,250.0,1.5962,95700.0,<1H OCEAN +-118.27,33.97,45.0,1546.0,371.0,1186.0,366.0,1.64,96800.0,<1H OCEAN +-118.28,33.97,40.0,2180.0,642.0,2464.0,631.0,1.5521,90100.0,<1H OCEAN +-118.27,33.97,39.0,2569.0,688.0,2601.0,630.0,2.0754,101400.0,<1H OCEAN +-118.28,33.97,38.0,1819.0,497.0,2110.0,499.0,1.6027,97300.0,<1H OCEAN +-118.27,33.96,38.0,977.0,295.0,1073.0,292.0,1.0208,86400.0,<1H OCEAN +-118.27,33.96,42.0,796.0,203.0,697.0,177.0,2.037,92600.0,<1H OCEAN +-118.28,33.96,37.0,1812.0,500.0,1640.0,447.0,1.9348,99100.0,<1H OCEAN +-118.26,33.97,47.0,1504.0,374.0,1168.0,358.0,1.4625,94200.0,<1H OCEAN +-118.26,33.96,40.0,1475.0,347.0,1222.0,298.0,1.5303,95300.0,<1H OCEAN +-118.26,33.96,39.0,1255.0,323.0,902.0,327.0,1.5812,94000.0,<1H OCEAN +-118.26,33.97,52.0,1331.0,346.0,1144.0,362.0,1.5326,90600.0,<1H OCEAN +-118.27,33.97,34.0,1462.0,394.0,1310.0,351.0,1.1557,90100.0,<1H OCEAN +-118.27,33.96,38.0,1126.0,270.0,999.0,265.0,0.5495,91700.0,<1H OCEAN +-118.27,33.96,34.0,1040.0,276.0,1083.0,255.0,1.6467,90900.0,<1H OCEAN +-118.27,33.95,39.0,1529.0,358.0,1154.0,357.0,1.2091,97900.0,<1H OCEAN +-118.26,33.95,38.0,1387.0,346.0,1240.0,355.0,1.6898,95100.0,<1H OCEAN +-118.26,33.95,44.0,1513.0,369.0,1088.0,344.0,1.2969,94400.0,<1H OCEAN +-118.26,33.96,39.0,1542.0,375.0,1256.0,361.0,1.7167,100000.0,<1H OCEAN +-118.26,33.96,37.0,1625.0,383.0,1243.0,350.0,1.3971,89800.0,<1H OCEAN +-118.28,33.96,42.0,1604.0,399.0,1581.0,387.0,1.7656,96700.0,<1H OCEAN +-118.28,33.95,40.0,2044.0,538.0,2150.0,524.0,2.1437,94800.0,<1H OCEAN +-118.28,33.96,42.0,1206.0,304.0,1167.0,250.0,1.615,101300.0,<1H OCEAN +-118.28,33.96,39.0,882.0,221.0,697.0,189.0,1.8472,99100.0,<1H OCEAN +-118.28,33.96,23.0,1983.0,611.0,2048.0,600.0,1.5313,91400.0,<1H OCEAN +-118.29,33.95,35.0,1401.0,362.0,1357.0,327.0,2.0917,99300.0,<1H OCEAN +-118.29,33.95,32.0,721.0,205.0,842.0,208.0,1.6029,89700.0,<1H OCEAN +-118.29,33.96,39.0,1340.0,409.0,1463.0,367.0,1.5294,111400.0,<1H OCEAN +-118.29,33.95,40.0,2808.0,695.0,2357.0,627.0,1.9655,102300.0,<1H OCEAN +-118.29,33.95,39.0,1701.0,428.0,1468.0,411.0,1.9702,93200.0,<1H OCEAN +-118.28,33.94,43.0,1201.0,292.0,840.0,252.0,2.7917,105600.0,<1H OCEAN +-118.29,33.94,34.0,1089.0,278.0,995.0,315.0,2.3352,107700.0,<1H OCEAN +-118.27,33.95,35.0,2073.0,494.0,1753.0,490.0,1.5,93600.0,<1H OCEAN +-118.27,33.95,43.0,1156.0,291.0,1074.0,299.0,1.8814,94900.0,<1H OCEAN +-118.27,33.94,30.0,1041.0,275.0,877.0,270.0,1.5268,91600.0,<1H OCEAN +-118.28,33.94,38.0,637.0,204.0,679.0,162.0,1.5714,89700.0,<1H OCEAN +-118.28,33.95,41.0,835.0,208.0,707.0,192.0,1.4103,86200.0,<1H OCEAN +-118.27,33.95,40.0,935.0,226.0,818.0,236.0,1.8798,101300.0,<1H OCEAN +-118.27,33.95,34.0,987.0,248.0,902.0,221.0,2.3365,98000.0,<1H OCEAN +-118.27,33.95,34.0,1261.0,315.0,1027.0,303.0,2.2946,88800.0,<1H OCEAN +-118.27,33.95,29.0,1579.0,351.0,1056.0,322.0,2.3056,98500.0,<1H OCEAN +-118.25,33.95,35.0,1405.0,326.0,1086.0,273.0,1.0375,89800.0,<1H OCEAN +-118.26,33.94,45.0,1080.0,218.0,850.0,237.0,2.25,93400.0,<1H OCEAN +-118.26,33.95,44.0,1771.0,378.0,1296.0,399.0,1.6389,96700.0,<1H OCEAN +-118.26,33.95,44.0,1481.0,329.0,999.0,315.0,1.5147,94600.0,<1H OCEAN +-118.26,33.94,44.0,1103.0,265.0,760.0,247.0,1.6887,99600.0,<1H OCEAN +-118.25,33.94,37.0,1002.0,270.0,1092.0,273.0,1.6333,94500.0,<1H OCEAN +-118.26,33.94,41.0,1510.0,410.0,1408.0,389.0,1.65,94200.0,<1H OCEAN +-118.27,33.94,38.0,1314.0,318.0,1080.0,285.0,1.5872,89800.0,<1H OCEAN +-118.26,33.94,44.0,795.0,181.0,716.0,167.0,2.0,90300.0,<1H OCEAN +-118.26,33.93,35.0,1562.0,403.0,1587.0,406.0,1.4917,93200.0,<1H OCEAN +-118.27,33.93,41.0,570.0,135.0,466.0,121.0,2.6458,91300.0,<1H OCEAN +-118.27,33.94,34.0,721.0,165.0,661.0,171.0,2.0789,92400.0,<1H OCEAN +-118.27,33.94,37.0,973.0,221.0,842.0,178.0,1.6645,94900.0,<1H OCEAN +-118.27,33.93,36.0,1467.0,369.0,1247.0,347.0,1.8191,92700.0,<1H OCEAN +-118.26,33.93,36.0,1102.0,247.0,702.0,225.0,1.5256,95400.0,<1H OCEAN +-118.26,33.93,42.0,1433.0,295.0,775.0,293.0,1.1326,104800.0,<1H OCEAN +-118.25,33.93,42.0,657.0,147.0,526.0,132.0,2.5,110200.0,<1H OCEAN +-118.26,33.92,40.0,1076.0,244.0,705.0,255.0,1.7986,98900.0,<1H OCEAN +-118.27,33.92,36.0,1465.0,346.0,1147.0,324.0,1.7262,88800.0,<1H OCEAN +-118.27,33.94,43.0,1309.0,344.0,1182.0,340.0,1.6625,88700.0,<1H OCEAN +-118.27,33.94,30.0,1764.0,397.0,1406.0,362.0,1.449,93100.0,<1H OCEAN +-118.27,33.94,39.0,2078.0,561.0,1901.0,504.0,1.1468,96900.0,<1H OCEAN +-118.28,33.93,21.0,847.0,278.0,1283.0,277.0,1.4329,94100.0,<1H OCEAN +-118.28,33.94,32.0,1381.0,375.0,1268.0,354.0,1.1051,94200.0,<1H OCEAN +-118.28,33.94,9.0,456.0,130.0,438.0,114.0,0.8952,81300.0,<1H OCEAN +-118.28,33.94,44.0,1631.0,338.0,1197.0,355.0,3.0788,100000.0,<1H OCEAN +-118.28,33.93,42.0,1898.0,460.0,1503.0,429.0,2.5179,97400.0,<1H OCEAN +-118.29,33.93,43.0,2021.0,379.0,1051.0,352.0,3.3836,129900.0,<1H OCEAN +-118.29,33.94,47.0,1782.0,338.0,1003.0,329.0,2.5398,105700.0,<1H OCEAN +-118.28,33.93,41.0,936.0,257.0,913.0,226.0,2.0313,122600.0,<1H OCEAN +-118.29,33.92,40.0,1935.0,461.0,1616.0,433.0,2.875,120200.0,<1H OCEAN +-118.29,33.93,41.0,896.0,198.0,605.0,168.0,2.2778,128100.0,<1H OCEAN +-118.27,33.93,38.0,2073.0,500.0,1657.0,470.0,1.2098,88400.0,<1H OCEAN +-118.28,33.92,39.0,1274.0,282.0,975.0,277.0,1.5114,90400.0,<1H OCEAN +-118.28,33.93,43.0,269.0,74.0,295.0,79.0,2.2969,90600.0,<1H OCEAN +-118.28,33.93,45.0,529.0,112.0,448.0,120.0,3.5833,90600.0,<1H OCEAN +-118.28,33.93,52.0,117.0,33.0,74.0,45.0,0.4999,90600.0,<1H OCEAN +-118.25,33.94,44.0,1463.0,312.0,940.0,312.0,2.3333,99800.0,<1H OCEAN +-118.25,33.94,43.0,1113.0,378.0,1305.0,334.0,1.1434,91300.0,<1H OCEAN +-118.25,33.94,43.0,793.0,,736.0,231.0,0.8527,90400.0,<1H OCEAN +-118.23,33.95,37.0,2667.0,671.0,2865.0,683.0,0.6831,87500.0,<1H OCEAN +-118.24,33.95,40.0,1193.0,280.0,1210.0,286.0,1.35,89500.0,<1H OCEAN +-118.24,33.95,37.0,649.0,147.0,653.0,147.0,1.4792,97500.0,<1H OCEAN +-118.24,33.95,36.0,2316.0,543.0,1938.0,507.0,1.25,97400.0,<1H OCEAN +-118.24,33.95,21.0,1260.0,342.0,1167.0,310.0,0.9708,107600.0,<1H OCEAN +-118.25,33.95,28.0,2136.0,,1799.0,476.0,1.5427,95700.0,<1H OCEAN +-118.24,33.95,37.0,441.0,125.0,390.0,98.0,1.6513,90200.0,<1H OCEAN +-118.25,33.95,25.0,764.0,200.0,801.0,220.0,1.1384,100000.0,<1H OCEAN +-118.25,33.93,40.0,975.0,270.0,1068.0,270.0,0.9889,87500.0,<1H OCEAN +-118.25,33.93,36.0,2452.0,734.0,2664.0,667.0,0.9298,100000.0,<1H OCEAN +-118.25,33.93,42.0,819.0,233.0,899.0,228.0,1.1346,85400.0,<1H OCEAN +-118.24,33.94,37.0,869.0,241.0,1040.0,233.0,2.0,84200.0,<1H OCEAN +-118.24,33.94,34.0,796.0,180.0,673.0,144.0,2.0769,88300.0,<1H OCEAN +-118.24,33.93,37.0,1027.0,258.0,824.0,248.0,1.5132,86300.0,<1H OCEAN +-118.24,33.93,32.0,779.0,201.0,861.0,219.0,1.0625,89800.0,<1H OCEAN +-118.24,33.94,42.0,380.0,106.0,411.0,100.0,0.9705,90000.0,<1H OCEAN +-118.24,33.94,39.0,1215.0,273.0,1211.0,265.0,1.7212,95500.0,<1H OCEAN +-118.23,33.94,39.0,1141.0,258.0,1313.0,234.0,2.0187,90100.0,<1H OCEAN +-118.23,33.94,35.0,1090.0,267.0,1339.0,263.0,2.1607,97600.0,<1H OCEAN +-118.23,33.94,36.0,1110.0,,1417.0,302.0,2.3333,92100.0,<1H OCEAN +-118.24,33.94,30.0,940.0,211.0,1071.0,204.0,1.2679,92000.0,<1H OCEAN +-118.23,33.93,36.0,501.0,123.0,487.0,118.0,1.3,87000.0,<1H OCEAN +-118.23,33.93,39.0,2065.0,532.0,2015.0,535.0,0.8478,104900.0,<1H OCEAN +-118.24,33.93,32.0,1063.0,282.0,992.0,253.0,0.8984,88700.0,<1H OCEAN +-118.39,34.12,29.0,6447.0,1012.0,2184.0,960.0,8.2816,500001.0,<1H OCEAN +-118.4,34.11,32.0,5578.0,753.0,1567.0,697.0,15.0001,500001.0,<1H OCEAN +-118.42,34.12,27.0,2089.0,303.0,654.0,270.0,12.3767,500001.0,<1H OCEAN +-118.43,34.11,27.0,10806.0,1440.0,3511.0,1352.0,12.7296,500001.0,<1H OCEAN +-118.43,34.09,27.0,1613.0,200.0,497.0,197.0,7.9835,500001.0,<1H OCEAN +-118.45,34.12,20.0,10722.0,1617.0,3731.0,1511.0,9.7449,500001.0,<1H OCEAN +-118.44,34.09,36.0,3129.0,392.0,862.0,334.0,15.0001,500001.0,<1H OCEAN +-118.43,34.08,46.0,778.0,90.0,238.0,93.0,15.0001,500001.0,<1H OCEAN +-118.45,34.08,52.0,1500.0,176.0,384.0,145.0,7.1576,500001.0,<1H OCEAN +-118.45,34.1,31.0,6675.0,842.0,2092.0,796.0,11.8442,500001.0,<1H OCEAN +-118.46,34.08,35.0,3247.0,525.0,1065.0,484.0,7.8426,500001.0,<1H OCEAN +-118.47,34.1,32.0,8041.0,1141.0,2768.0,1106.0,11.1978,500001.0,<1H OCEAN +-118.49,34.11,27.0,6603.0,879.0,2336.0,868.0,13.2935,500001.0,<1H OCEAN +-118.48,34.07,29.0,4767.0,777.0,1500.0,638.0,10.7937,500001.0,<1H OCEAN +-118.48,34.07,40.0,3351.0,484.0,1564.0,523.0,8.5153,500001.0,<1H OCEAN +-118.48,34.07,37.0,4042.0,549.0,1318.0,542.0,12.8665,500001.0,<1H OCEAN +-118.49,34.06,42.0,2861.0,360.0,829.0,310.0,15.0001,500001.0,<1H OCEAN +-118.49,34.07,36.0,2929.0,366.0,1054.0,352.0,13.5728,500001.0,<1H OCEAN +-118.51,34.11,29.0,9013.0,1117.0,2919.0,1061.0,13.947,500001.0,<1H OCEAN +-118.5,34.05,39.0,1487.0,163.0,414.0,160.0,15.0,500001.0,<1H OCEAN +-118.53,34.09,37.0,5477.0,833.0,1925.0,757.0,8.1888,500001.0,<1H OCEAN +-118.52,34.05,45.0,1814.0,325.0,709.0,311.0,4.825,500001.0,<1H OCEAN +-118.52,34.04,47.0,1985.0,315.0,819.0,340.0,6.5147,500001.0,<1H OCEAN +-118.57,34.09,14.0,7970.0,1142.0,2926.0,1096.0,11.2866,500001.0,<1H OCEAN +-118.54,34.05,33.0,6778.0,1092.0,2540.0,1052.0,8.565,500001.0,<1H OCEAN +-118.55,34.04,41.0,1482.0,239.0,617.0,242.0,8.8619,500001.0,<1H OCEAN +-118.56,34.03,34.0,2095.0,343.0,662.0,299.0,8.2934,500001.0,<1H OCEAN +-118.56,34.06,24.0,2332.0,349.0,761.0,325.0,7.3031,500001.0,<1H OCEAN +-118.54,34.06,21.0,3755.0,525.0,1493.0,526.0,11.4233,500001.0,<1H OCEAN +-118.55,34.03,35.0,9075.0,1858.0,3646.0,1724.0,6.0307,500001.0,<1H OCEAN +-118.52,34.04,42.0,993.0,130.0,368.0,134.0,10.8082,500001.0,<1H OCEAN +-118.52,34.04,43.0,2167.0,254.0,761.0,256.0,13.6842,500001.0,<1H OCEAN +-118.53,34.04,45.0,1711.0,264.0,735.0,261.0,9.1078,500001.0,<1H OCEAN +-118.53,34.03,40.0,4350.0,763.0,1551.0,665.0,7.0318,500001.0,<1H OCEAN +-118.5,34.05,36.0,4152.0,542.0,1461.0,550.0,15.0001,500001.0,<1H OCEAN +-118.55,33.99,39.0,2603.0,456.0,928.0,410.0,7.9096,500001.0,NEAR OCEAN +-118.51,34.04,38.0,4715.0,691.0,1660.0,637.0,10.1882,500001.0,<1H OCEAN +-118.47,34.06,45.0,1271.0,190.0,419.0,171.0,7.6447,500001.0,<1H OCEAN +-118.47,34.06,45.0,3030.0,433.0,916.0,399.0,9.4664,500001.0,<1H OCEAN +-118.48,34.05,48.0,3623.0,528.0,1282.0,516.0,9.5221,500001.0,<1H OCEAN +-118.49,34.05,42.0,1918.0,216.0,632.0,224.0,15.0001,500001.0,<1H OCEAN +-118.47,34.06,26.0,6577.0,1789.0,2937.0,1652.0,4.801,500001.0,<1H OCEAN +-118.46,34.06,20.0,5448.0,1532.0,2202.0,1442.0,4.2554,500001.0,<1H OCEAN +-118.47,34.05,25.0,2689.0,719.0,1229.0,663.0,3.5909,500001.0,<1H OCEAN +-118.46,34.05,25.0,4077.0,1151.0,1719.0,1017.0,3.7721,337500.0,<1H OCEAN +-118.46,34.05,21.0,3639.0,1002.0,1489.0,983.0,4.6197,387500.0,<1H OCEAN +-118.47,34.05,22.0,5215.0,1193.0,2048.0,1121.0,4.7009,500001.0,<1H OCEAN +-118.47,34.05,27.0,4401.0,1033.0,1725.0,962.0,4.175,500001.0,<1H OCEAN +-118.48,34.05,36.0,2143.0,434.0,751.0,396.0,6.7496,500001.0,<1H OCEAN +-118.49,34.05,45.0,1346.0,214.0,415.0,209.0,7.0285,500001.0,<1H OCEAN +-118.42,34.08,46.0,1399.0,148.0,410.0,152.0,15.0001,500001.0,<1H OCEAN +-118.43,34.07,34.0,3203.0,483.0,949.0,439.0,10.3467,500001.0,<1H OCEAN +-118.43,34.07,38.0,3251.0,656.0,1251.0,593.0,7.7382,500001.0,<1H OCEAN +-118.44,34.07,26.0,3535.0,748.0,1322.0,666.0,7.1674,500001.0,<1H OCEAN +-118.44,34.07,35.0,1973.0,332.0,1257.0,296.0,8.9565,500001.0,<1H OCEAN +-118.44,34.06,28.0,3910.0,959.0,1763.0,867.0,5.5,500001.0,<1H OCEAN +-118.44,34.07,21.0,730.0,263.0,965.0,224.0,2.0511,350000.0,<1H OCEAN +-118.44,34.06,14.0,520.0,292.0,282.0,213.0,2.2857,500001.0,<1H OCEAN +-118.45,34.07,13.0,4284.0,1452.0,3806.0,1252.0,1.3125,350000.0,<1H OCEAN +-118.45,34.07,19.0,4845.0,1609.0,3751.0,1539.0,1.583,350000.0,<1H OCEAN +-118.45,34.06,20.0,3367.0,1264.0,2667.0,1131.0,2.2444,500000.0,<1H OCEAN +-118.46,34.06,46.0,1302.0,215.0,482.0,226.0,7.0674,500001.0,<1H OCEAN +-118.46,34.07,43.0,2511.0,456.0,808.0,407.0,6.7703,500001.0,<1H OCEAN +-118.46,34.07,49.0,2418.0,301.0,850.0,318.0,14.2867,500001.0,<1H OCEAN +-118.46,34.07,42.0,2564.0,460.0,913.0,414.0,9.2225,500001.0,<1H OCEAN +-118.44,34.06,9.0,5102.0,1695.0,2609.0,1450.0,3.2545,500001.0,<1H OCEAN +-118.44,34.05,18.0,4780.0,1192.0,1886.0,1036.0,4.4674,500001.0,<1H OCEAN +-118.44,34.05,32.0,1880.0,435.0,798.0,417.0,4.7109,500000.0,<1H OCEAN +-118.44,34.05,15.0,5368.0,1312.0,2269.0,1232.0,5.7097,316700.0,<1H OCEAN +-118.43,34.06,11.0,3184.0,641.0,911.0,463.0,7.2675,500001.0,<1H OCEAN +-118.43,34.06,41.0,1463.0,267.0,601.0,267.0,5.3777,500001.0,<1H OCEAN +-118.43,34.05,22.0,4251.0,1073.0,1581.0,881.0,5.2555,500001.0,<1H OCEAN +-118.44,34.06,13.0,4833.0,1119.0,1649.0,807.0,6.2389,500001.0,<1H OCEAN +-118.42,34.06,40.0,2933.0,565.0,1077.0,536.0,6.1527,500001.0,<1H OCEAN +-118.43,34.06,31.0,1317.0,284.0,523.0,274.0,7.4219,500001.0,<1H OCEAN +-118.43,34.06,38.0,2982.0,664.0,1122.0,572.0,4.1908,500001.0,<1H OCEAN +-118.43,34.06,20.0,4600.0,1018.0,1675.0,932.0,5.1999,500001.0,<1H OCEAN +-118.42,34.06,44.0,533.0,90.0,291.0,97.0,10.8045,500001.0,<1H OCEAN +-118.42,34.06,52.0,1881.0,334.0,640.0,321.0,6.871,500001.0,<1H OCEAN +-118.42,34.05,38.0,4888.0,1126.0,1698.0,937.0,4.8304,500001.0,<1H OCEAN +-118.43,34.05,52.0,1693.0,290.0,727.0,305.0,6.7115,500001.0,<1H OCEAN +-118.43,34.05,24.0,3832.0,949.0,1613.0,893.0,3.9673,477300.0,<1H OCEAN +-118.44,34.05,20.0,5943.0,1538.0,2492.0,1429.0,4.1141,305000.0,<1H OCEAN +-118.44,34.05,22.0,3970.0,871.0,1588.0,791.0,4.8618,500001.0,<1H OCEAN +-118.43,34.04,52.0,2425.0,435.0,962.0,412.0,5.8587,494700.0,<1H OCEAN +-118.45,34.05,28.0,801.0,399.0,936.0,406.0,2.1875,181300.0,<1H OCEAN +-118.45,34.04,22.0,3319.0,1045.0,1848.0,940.0,3.6673,283300.0,<1H OCEAN +-118.45,34.04,23.0,3771.0,1321.0,2031.0,1241.0,2.7679,277500.0,<1H OCEAN +-118.46,34.05,25.0,6902.0,2138.0,3136.0,1844.0,2.6509,410000.0,<1H OCEAN +-118.45,34.05,23.0,4099.0,1287.0,2103.0,1217.0,3.7549,275000.0,<1H OCEAN +-118.46,34.04,19.0,3522.0,1036.0,1820.0,977.0,3.2663,337500.0,<1H OCEAN +-118.47,34.04,21.0,5041.0,1491.0,2719.0,1420.0,3.5335,268800.0,<1H OCEAN +-118.45,34.04,19.0,3330.0,1010.0,1837.0,915.0,3.0173,393800.0,<1H OCEAN +-118.46,34.04,25.0,2142.0,718.0,1390.0,699.0,3.0069,325000.0,<1H OCEAN +-118.46,34.04,25.0,2768.0,850.0,1558.0,784.0,3.6976,360000.0,<1H OCEAN +-118.46,34.04,17.0,2729.0,897.0,1404.0,758.0,3.1235,420800.0,<1H OCEAN +-118.46,34.04,31.0,2621.0,707.0,1632.0,673.0,3.287,348100.0,<1H OCEAN +-118.45,34.04,21.0,2819.0,648.0,1435.0,593.0,3.9489,360200.0,<1H OCEAN +-118.45,34.03,45.0,727.0,168.0,520.0,175.0,2.6528,300000.0,<1H OCEAN +-118.45,34.03,39.0,1657.0,402.0,931.0,363.0,3.7813,336300.0,<1H OCEAN +-118.44,34.04,49.0,32.0,7.0,14.0,7.0,2.1875,225000.0,<1H OCEAN +-118.44,34.04,16.0,18.0,6.0,3.0,4.0,0.536,350000.0,<1H OCEAN +-118.44,34.04,31.0,2670.0,662.0,1535.0,631.0,3.0714,347800.0,<1H OCEAN +-118.43,34.04,52.0,1782.0,308.0,735.0,307.0,5.2954,485100.0,<1H OCEAN +-118.42,34.04,46.0,1508.0,276.0,639.0,273.0,4.925,409800.0,<1H OCEAN +-118.43,34.04,42.0,2725.0,569.0,1115.0,516.0,4.5833,427500.0,<1H OCEAN +-118.41,34.05,16.0,9728.0,2211.0,3026.0,1899.0,5.8758,500001.0,<1H OCEAN +-118.42,34.05,33.0,2921.0,652.0,1124.0,608.0,5.0151,500001.0,<1H OCEAN +-118.42,34.05,52.0,2533.0,402.0,981.0,386.0,7.8164,500001.0,<1H OCEAN +-118.4,34.05,26.0,4473.0,923.0,1518.0,805.0,5.0762,500001.0,<1H OCEAN +-118.4,34.04,40.0,2079.0,268.0,720.0,282.0,9.272,500001.0,<1H OCEAN +-118.4,34.04,42.0,1298.0,174.0,420.0,190.0,12.8483,500001.0,<1H OCEAN +-118.4,34.03,36.0,1831.0,296.0,871.0,269.0,8.1484,500001.0,<1H OCEAN +-118.41,34.03,33.0,1730.0,386.0,994.0,363.0,3.7277,500001.0,<1H OCEAN +-118.41,34.04,49.0,601.0,95.0,228.0,106.0,8.0239,500001.0,<1H OCEAN +-118.39,34.05,35.0,2458.0,576.0,1047.0,554.0,4.0283,412500.0,<1H OCEAN +-118.39,34.05,42.0,3105.0,559.0,1253.0,531.0,5.222,500001.0,<1H OCEAN +-118.4,34.05,34.0,2113.0,459.0,859.0,432.0,3.6953,500001.0,<1H OCEAN +-118.39,34.05,25.0,2814.0,701.0,1139.0,658.0,4.0153,460000.0,<1H OCEAN +-118.41,34.04,52.0,1907.0,261.0,681.0,249.0,10.9805,500001.0,<1H OCEAN +-118.41,34.04,52.0,2113.0,332.0,800.0,327.0,11.1768,500001.0,<1H OCEAN +-118.41,34.03,36.0,3053.0,635.0,1234.0,577.0,5.1637,500001.0,<1H OCEAN +-118.42,34.04,51.0,1975.0,348.0,771.0,357.0,6.626,500001.0,<1H OCEAN +-118.42,34.04,52.0,1358.0,272.0,574.0,267.0,5.6454,500001.0,<1H OCEAN +-118.39,34.04,45.0,2089.0,312.0,834.0,305.0,7.3028,500001.0,<1H OCEAN +-118.39,34.04,44.0,1873.0,286.0,635.0,283.0,5.5951,461300.0,<1H OCEAN +-118.4,34.04,43.0,3863.0,537.0,1398.0,511.0,8.5938,500001.0,<1H OCEAN +-118.4,34.05,43.0,1028.0,145.0,394.0,149.0,10.4519,500001.0,<1H OCEAN +-118.39,34.05,42.0,1467.0,203.0,577.0,204.0,6.6368,500001.0,<1H OCEAN +-118.38,34.04,35.0,2237.0,592.0,1794.0,543.0,2.2961,207700.0,<1H OCEAN +-118.38,34.04,31.0,2846.0,727.0,2120.0,672.0,2.7226,254200.0,<1H OCEAN +-118.38,34.04,45.0,767.0,130.0,254.0,118.0,6.2895,340400.0,<1H OCEAN +-118.38,34.04,36.0,3005.0,771.0,2054.0,758.0,2.0437,309100.0,<1H OCEAN +-118.38,34.04,39.0,2614.0,569.0,1665.0,553.0,3.4063,271600.0,<1H OCEAN +-118.39,34.04,41.0,101.0,23.0,85.0,30.0,4.125,237500.0,<1H OCEAN +-118.39,34.04,52.0,1492.0,277.0,666.0,289.0,4.7386,340400.0,<1H OCEAN +-118.39,34.04,49.0,1230.0,279.0,669.0,269.0,3.9038,308300.0,<1H OCEAN +-118.39,34.03,28.0,1722.0,536.0,1161.0,481.0,3.2228,232500.0,<1H OCEAN +-118.39,34.03,25.0,3442.0,1050.0,1890.0,914.0,3.0574,319400.0,<1H OCEAN +-118.4,34.03,24.0,1101.0,318.0,491.0,287.0,3.2222,319400.0,<1H OCEAN +-118.4,34.03,43.0,1006.0,201.0,520.0,199.0,6.5669,372800.0,<1H OCEAN +-118.41,34.03,26.0,4376.0,1394.0,2435.0,1250.0,2.8418,327300.0,<1H OCEAN +-118.4,34.02,19.0,7297.0,2331.0,3870.0,2144.0,3.116,300000.0,<1H OCEAN +-118.4,34.02,27.0,515.0,201.0,397.0,228.0,2.4135,184400.0,<1H OCEAN +-118.41,34.03,24.0,3711.0,1192.0,1764.0,1147.0,3.1642,366700.0,<1H OCEAN +-118.41,34.02,24.0,2610.0,756.0,1322.0,692.0,3.5022,281300.0,<1H OCEAN +-118.41,34.02,16.0,5825.0,1866.0,3390.0,1752.0,3.0965,320000.0,<1H OCEAN +-118.39,34.03,19.0,1450.0,509.0,746.0,437.0,3.1415,55000.0,<1H OCEAN +-118.4,34.03,13.0,6152.0,1978.0,3397.0,1845.0,3.4058,275000.0,<1H OCEAN +-118.38,34.03,36.0,2101.0,569.0,1756.0,527.0,2.9344,222100.0,<1H OCEAN +-118.39,34.03,39.0,1366.0,375.0,1237.0,370.0,3.7206,230900.0,<1H OCEAN +-118.37,34.04,43.0,888.0,170.0,514.0,161.0,3.1827,202800.0,<1H OCEAN +-118.37,34.04,42.0,1809.0,424.0,1094.0,382.0,2.767,143000.0,<1H OCEAN +-118.38,34.03,43.0,912.0,255.0,705.0,246.0,2.6402,185700.0,<1H OCEAN +-118.37,34.04,25.0,542.0,161.0,442.0,131.0,2.25,333300.0,<1H OCEAN +-118.37,34.04,43.0,1465.0,278.0,727.0,290.0,4.0781,289400.0,<1H OCEAN +-118.42,34.03,45.0,1262.0,223.0,637.0,221.0,5.0866,427300.0,<1H OCEAN +-118.43,34.03,45.0,1740.0,311.0,788.0,306.0,5.2099,373600.0,<1H OCEAN +-118.43,34.03,39.0,1733.0,429.0,855.0,387.0,3.2308,340800.0,<1H OCEAN +-118.43,34.03,26.0,1706.0,516.0,894.0,435.0,3.1875,372700.0,<1H OCEAN +-118.42,34.03,44.0,904.0,176.0,358.0,158.0,3.3542,344200.0,<1H OCEAN +-118.44,34.03,25.0,2059.0,659.0,1349.0,588.0,3.2396,352400.0,<1H OCEAN +-118.43,34.03,36.0,1552.0,388.0,867.0,352.0,3.6467,346700.0,<1H OCEAN +-118.44,34.03,37.0,1193.0,205.0,488.0,224.0,3.625,357600.0,<1H OCEAN +-118.44,34.03,37.0,975.0,189.0,489.0,202.0,4.2434,331000.0,<1H OCEAN +-118.44,34.03,30.0,1039.0,303.0,606.0,274.0,3.125,343800.0,<1H OCEAN +-118.45,34.03,41.0,1240.0,320.0,711.0,304.0,3.3482,318100.0,<1H OCEAN +-118.45,34.03,41.0,2083.0,528.0,993.0,481.0,4.0231,353900.0,<1H OCEAN +-118.44,34.03,41.0,1164.0,265.0,561.0,251.0,4.2411,350900.0,<1H OCEAN +-118.44,34.02,37.0,1592.0,308.0,783.0,321.0,6.2583,386000.0,<1H OCEAN +-118.44,34.01,43.0,1408.0,246.0,651.0,240.0,4.5795,400000.0,<1H OCEAN +-118.44,34.01,41.0,1309.0,221.0,534.0,228.0,5.1708,418800.0,<1H OCEAN +-118.45,34.01,37.0,1328.0,250.0,626.0,228.0,5.8666,440100.0,<1H OCEAN +-118.45,34.01,40.0,1361.0,240.0,559.0,229.0,6.3516,354300.0,<1H OCEAN +-118.45,34.01,36.0,2424.0,418.0,1123.0,417.0,6.4755,405800.0,<1H OCEAN +-118.44,34.02,32.0,2242.0,490.0,921.0,461.0,4.0429,500001.0,<1H OCEAN +-118.43,34.01,43.0,1487.0,242.0,675.0,247.0,5.3403,489800.0,<1H OCEAN +-118.44,34.02,39.0,3278.0,632.0,1321.0,617.0,6.2917,465700.0,<1H OCEAN +-118.43,34.02,38.0,2172.0,437.0,830.0,368.0,3.9091,500001.0,<1H OCEAN +-118.43,34.02,42.0,1528.0,244.0,634.0,242.0,8.1631,500001.0,<1H OCEAN +-118.43,34.02,41.0,2403.0,516.0,1001.0,514.0,4.3906,500001.0,<1H OCEAN +-118.42,34.03,44.0,629.0,131.0,326.0,156.0,4.5278,374300.0,<1H OCEAN +-118.41,34.03,20.0,4374.0,1311.0,2165.0,1185.0,3.6019,463600.0,<1H OCEAN +-118.42,34.02,21.0,3244.0,815.0,1423.0,781.0,3.6488,340800.0,<1H OCEAN +-118.42,34.02,34.0,2243.0,444.0,973.0,413.0,4.9676,414100.0,<1H OCEAN +-118.42,34.02,28.0,3167.0,737.0,1248.0,665.0,3.1941,394700.0,<1H OCEAN +-118.42,34.02,34.0,2995.0,942.0,2626.0,947.0,2.2402,450000.0,<1H OCEAN +-118.41,34.02,34.0,1430.0,357.0,805.0,362.0,3.3462,307000.0,<1H OCEAN +-118.42,34.02,22.0,3292.0,1134.0,1655.0,898.0,3.1746,348800.0,<1H OCEAN +-118.42,34.02,26.0,2664.0,842.0,1745.0,789.0,3.4269,301900.0,<1H OCEAN +-118.41,34.02,35.0,1728.0,442.0,1161.0,420.0,3.725,310000.0,<1H OCEAN +-118.41,34.02,19.0,4702.0,1472.0,2636.0,1334.0,3.3955,225000.0,<1H OCEAN +-118.41,34.02,27.0,2224.0,618.0,1594.0,625.0,3.0833,315500.0,<1H OCEAN +-118.42,34.01,33.0,2731.0,535.0,1280.0,510.0,4.7083,420100.0,<1H OCEAN +-118.42,34.01,32.0,1300.0,356.0,703.0,311.0,3.5667,394000.0,<1H OCEAN +-118.43,34.01,27.0,3133.0,1021.0,2242.0,1002.0,2.697,412500.0,<1H OCEAN +-118.43,34.01,41.0,1527.0,279.0,746.0,285.0,6.4232,446600.0,<1H OCEAN +-118.43,34.01,31.0,2526.0,528.0,1046.0,504.0,4.7009,500001.0,<1H OCEAN +-118.44,34.01,42.0,2061.0,396.0,907.0,393.0,6.0804,420000.0,<1H OCEAN +-118.44,34.0,44.0,1462.0,338.0,821.0,341.0,2.599,362200.0,<1H OCEAN +-118.44,34.0,44.0,1798.0,353.0,835.0,314.0,4.75,355800.0,<1H OCEAN +-118.45,34.0,39.0,1909.0,359.0,867.0,345.0,4.7,334700.0,<1H OCEAN +-118.44,34.0,40.0,1287.0,346.0,806.0,311.0,3.875,321300.0,<1H OCEAN +-118.43,34.0,30.0,2148.0,597.0,1341.0,559.0,3.3995,324000.0,<1H OCEAN +-118.44,34.0,22.0,5822.0,1707.0,3335.0,1585.0,3.1579,243100.0,<1H OCEAN +-118.44,34.0,41.0,1562.0,377.0,874.0,368.0,4.1083,324300.0,<1H OCEAN +-118.42,34.01,42.0,1594.0,369.0,952.0,362.0,3.099,335400.0,<1H OCEAN +-118.42,34.01,29.0,1996.0,489.0,960.0,449.0,3.6611,344200.0,<1H OCEAN +-118.42,34.0,31.0,1930.0,456.0,1002.0,410.0,3.9798,458600.0,<1H OCEAN +-118.43,34.0,28.0,6128.0,1963.0,3586.0,1815.0,2.7058,310900.0,<1H OCEAN +-118.46,34.01,43.0,513.0,98.0,266.0,103.0,5.6428,343100.0,<1H OCEAN +-118.46,34.0,39.0,4098.0,1100.0,2054.0,1053.0,2.918,345600.0,<1H OCEAN +-118.46,34.0,37.0,388.0,83.0,248.0,84.0,5.1664,326700.0,<1H OCEAN +-118.46,34.0,36.0,1392.0,260.0,679.0,247.0,4.7344,346900.0,<1H OCEAN +-118.46,34.01,39.0,711.0,148.0,347.0,153.0,4.2813,297200.0,<1H OCEAN +-118.47,34.0,38.0,1235.0,390.0,891.0,376.0,2.7143,287500.0,<1H OCEAN +-118.47,34.0,41.0,2331.0,636.0,1839.0,537.0,2.288,263500.0,<1H OCEAN +-118.46,34.0,39.0,614.0,174.0,538.0,159.0,2.3542,235700.0,<1H OCEAN +-118.47,33.99,34.0,1875.0,501.0,1491.0,526.0,2.8417,321400.0,<1H OCEAN +-118.47,34.0,37.0,2586.0,765.0,1801.0,737.0,2.6042,305800.0,<1H OCEAN +-118.47,33.99,31.0,1312.0,376.0,1178.0,330.0,2.0714,300000.0,<1H OCEAN +-118.47,33.99,41.0,1146.0,310.0,833.0,270.0,2.5938,285000.0,<1H OCEAN +-118.47,33.99,33.0,854.0,235.0,645.0,198.0,2.1471,239300.0,<1H OCEAN +-118.51,33.98,40.0,1901.0,679.0,865.0,587.0,2.3417,425000.0,<1H OCEAN +-118.48,33.99,46.0,2219.0,686.0,1107.0,590.0,2.5523,387500.0,<1H OCEAN +-118.47,33.99,50.0,1568.0,501.0,764.0,478.0,3.015,414300.0,<1H OCEAN +-118.47,33.99,52.0,1523.0,447.0,636.0,408.0,3.0682,412500.0,<1H OCEAN +-118.47,33.99,52.0,2167.0,622.0,1095.0,570.0,2.8514,358700.0,<1H OCEAN +-118.47,33.99,37.0,2155.0,721.0,1082.0,637.0,3.4071,267500.0,<1H OCEAN +-118.47,33.99,24.0,1438.0,454.0,665.0,416.0,2.975,500001.0,<1H OCEAN +-118.5,33.97,52.0,709.0,329.0,388.0,313.0,2.2643,350000.0,<1H OCEAN +-118.45,33.99,52.0,1010.0,244.0,573.0,242.0,4.1861,363200.0,<1H OCEAN +-118.46,33.99,52.0,1158.0,253.0,528.0,253.0,3.5234,334700.0,<1H OCEAN +-118.46,33.99,44.0,1122.0,287.0,531.0,256.0,4.0598,335900.0,<1H OCEAN +-118.46,34.0,44.0,941.0,230.0,493.0,206.0,3.6458,325800.0,<1H OCEAN +-118.46,34.0,52.0,888.0,206.0,376.0,194.0,3.875,372000.0,<1H OCEAN +-118.45,34.0,46.0,1777.0,362.0,896.0,334.0,4.45,348300.0,<1H OCEAN +-118.45,34.0,43.0,1606.0,408.0,862.0,354.0,3.962,345800.0,<1H OCEAN +-118.45,34.0,48.0,1923.0,408.0,1142.0,433.0,4.575,326700.0,<1H OCEAN +-118.45,33.99,33.0,3125.0,785.0,1720.0,713.0,2.9722,325000.0,<1H OCEAN +-118.45,33.99,52.0,1829.0,472.0,779.0,424.0,3.1607,339000.0,<1H OCEAN +-118.46,33.99,41.0,885.0,285.0,562.0,268.0,3.1992,303800.0,<1H OCEAN +-118.46,33.99,37.0,1828.0,460.0,1075.0,453.0,4.337,360600.0,<1H OCEAN +-118.46,33.98,32.0,2388.0,591.0,1009.0,556.0,5.2121,466700.0,<1H OCEAN +-118.46,33.99,35.0,1214.0,300.0,478.0,265.0,4.0156,500001.0,<1H OCEAN +-118.46,33.98,27.0,2217.0,520.0,806.0,458.0,3.8935,500001.0,<1H OCEAN +-118.5,33.97,29.0,2737.0,808.0,1157.0,696.0,5.128,500001.0,<1H OCEAN +-118.45,33.99,45.0,1132.0,269.0,654.0,264.0,4.5673,343100.0,<1H OCEAN +-118.45,33.99,26.0,1919.0,405.0,953.0,371.0,6.0672,420800.0,<1H OCEAN +-118.46,33.98,19.0,2520.0,726.0,964.0,663.0,3.8068,500001.0,<1H OCEAN +-118.46,33.97,19.0,1658.0,427.0,648.0,378.0,3.8698,500001.0,<1H OCEAN +-118.46,33.97,18.0,9430.0,2473.0,3408.0,2003.0,6.1726,500001.0,<1H OCEAN +-118.46,33.97,19.0,2461.0,521.0,777.0,447.0,10.0,500001.0,<1H OCEAN +-118.48,33.96,16.0,895.0,181.0,237.0,149.0,12.0088,500001.0,<1H OCEAN +-118.4,34.0,10.0,1526.0,339.0,705.0,268.0,5.8083,321800.0,<1H OCEAN +-118.41,34.0,35.0,684.0,161.0,381.0,159.0,2.8393,272000.0,<1H OCEAN +-118.41,34.0,30.0,3550.0,934.0,3738.0,880.0,3.191,271200.0,<1H OCEAN +-118.41,34.0,18.0,1307.0,441.0,884.0,456.0,2.9338,276300.0,<1H OCEAN +-118.42,34.0,14.0,3771.0,1180.0,2355.0,978.0,3.1603,287500.0,<1H OCEAN +-118.42,33.99,35.0,1701.0,482.0,1428.0,494.0,3.725,284600.0,<1H OCEAN +-118.43,33.99,35.0,2243.0,495.0,1135.0,465.0,4.3281,324000.0,<1H OCEAN +-118.43,33.98,19.0,8324.0,1590.0,2927.0,1538.0,7.5426,351700.0,<1H OCEAN +-118.43,33.99,45.0,1899.0,461.0,1260.0,415.0,2.6667,320000.0,<1H OCEAN +-118.43,33.99,43.0,2483.0,548.0,1212.0,493.0,4.0189,302900.0,<1H OCEAN +-118.42,33.99,23.0,5548.0,1245.0,2847.0,1229.0,4.4228,366900.0,<1H OCEAN +-118.42,33.98,3.0,475.0,155.0,236.0,153.0,3.6667,450000.0,<1H OCEAN +-118.43,33.99,42.0,2558.0,558.0,1328.0,541.0,4.875,301300.0,<1H OCEAN +-118.44,33.99,43.0,1432.0,308.0,782.0,303.0,4.3333,303900.0,<1H OCEAN +-118.41,33.99,39.0,3014.0,822.0,3212.0,777.0,1.1985,215000.0,<1H OCEAN +-118.42,33.99,38.0,740.0,171.0,599.0,194.0,4.0893,248900.0,<1H OCEAN +-118.42,33.99,35.0,1724.0,419.0,1079.0,394.0,4.5521,263800.0,<1H OCEAN +-118.41,34.0,35.0,1062.0,305.0,1026.0,307.0,2.7153,265500.0,<1H OCEAN +-118.41,33.99,36.0,1089.0,234.0,632.0,215.0,3.6538,276100.0,<1H OCEAN +-118.4,33.99,39.0,1613.0,380.0,1113.0,356.0,2.825,276700.0,<1H OCEAN +-118.41,33.98,33.0,3331.0,777.0,1695.0,735.0,3.9727,307200.0,<1H OCEAN +-118.39,33.97,38.0,993.0,175.0,374.0,180.0,6.2673,357200.0,<1H OCEAN +-118.38,33.97,43.0,2715.0,458.0,1151.0,434.0,7.4897,362600.0,<1H OCEAN +-118.39,33.97,44.0,1097.0,186.0,513.0,185.0,6.235,361400.0,<1H OCEAN +-118.39,33.97,43.0,2700.0,510.0,1146.0,506.0,5.1333,345900.0,<1H OCEAN +-118.39,33.97,46.0,2198.0,352.0,839.0,335.0,6.5778,350800.0,<1H OCEAN +-118.39,33.96,45.0,1361.0,252.0,581.0,263.0,5.8143,340700.0,<1H OCEAN +-118.39,33.96,45.0,1436.0,374.0,662.0,292.0,3.625,329400.0,<1H OCEAN +-118.36,33.98,40.0,1113.0,234.0,584.0,231.0,3.0927,316000.0,<1H OCEAN +-118.37,33.98,39.0,303.0,69.0,131.0,73.0,4.3438,331800.0,<1H OCEAN +-118.37,33.97,32.0,6699.0,1781.0,2725.0,1544.0,3.3889,285700.0,<1H OCEAN +-118.41,33.97,37.0,1629.0,275.0,668.0,266.0,6.1333,387200.0,<1H OCEAN +-118.41,33.97,44.0,2298.0,388.0,849.0,360.0,5.5941,363500.0,<1H OCEAN +-118.4,33.96,44.0,1877.0,314.0,877.0,320.0,6.8197,363600.0,<1H OCEAN +-118.41,33.96,44.0,1802.0,306.0,753.0,282.0,6.0286,356000.0,<1H OCEAN +-118.41,33.97,43.0,1464.0,224.0,581.0,232.0,6.2022,365900.0,<1H OCEAN +-118.41,33.97,44.0,2789.0,503.0,3732.0,474.0,4.6176,352300.0,<1H OCEAN +-118.42,33.97,44.0,1462.0,240.0,562.0,237.0,4.9375,365200.0,<1H OCEAN +-118.42,33.96,44.0,1282.0,216.0,494.0,209.0,5.618,365900.0,<1H OCEAN +-118.43,33.96,38.0,1104.0,216.0,415.0,163.0,6.1985,422000.0,<1H OCEAN +-118.43,33.96,13.0,1860.0,345.0,800.0,355.0,5.8864,500001.0,<1H OCEAN +-118.44,33.96,33.0,2799.0,491.0,978.0,447.0,5.6435,500001.0,<1H OCEAN +-118.43,33.96,20.0,1901.0,270.0,704.0,254.0,8.7819,500001.0,<1H OCEAN +-118.43,33.97,16.0,70.0,7.0,17.0,4.0,7.7197,500001.0,<1H OCEAN +-118.42,33.96,24.0,4393.0,966.0,1257.0,579.0,5.0714,356100.0,<1H OCEAN +-118.43,33.96,16.0,14891.0,3984.0,6270.0,3595.0,5.1064,283200.0,<1H OCEAN +-118.4,33.97,35.0,913.0,161.0,451.0,172.0,5.6169,411200.0,<1H OCEAN +-118.4,33.98,39.0,714.0,118.0,314.0,117.0,5.9856,432100.0,<1H OCEAN +-118.4,33.98,36.0,2526.0,452.0,996.0,441.0,5.611,456600.0,<1H OCEAN +-118.4,33.97,38.0,1089.0,174.0,502.0,180.0,7.5953,434800.0,<1H OCEAN +-118.4,33.97,37.0,1364.0,248.0,494.0,242.0,4.6364,456300.0,<1H OCEAN +-118.4,33.97,44.0,2825.0,453.0,1221.0,461.0,5.9544,377200.0,<1H OCEAN +-118.4,33.96,43.0,2416.0,454.0,1028.0,409.0,5.6732,330700.0,<1H OCEAN +-118.37,33.97,41.0,1833.0,355.0,847.0,348.0,5.726,287800.0,<1H OCEAN +-118.38,33.97,42.0,1859.0,337.0,813.0,326.0,6.019,294500.0,<1H OCEAN +-118.38,33.96,44.0,2395.0,458.0,1287.0,450.0,4.6923,299000.0,<1H OCEAN +-118.38,33.95,35.0,3259.0,967.0,2003.0,920.0,3.2708,400000.0,<1H OCEAN +-118.38,33.95,29.0,1821.0,588.0,1397.0,523.0,2.5833,187500.0,<1H OCEAN +-118.37,33.95,5.0,6955.0,2062.0,3591.0,1566.0,3.111,247600.0,<1H OCEAN +-118.4,33.96,44.0,1138.0,228.0,497.0,228.0,4.1852,303300.0,<1H OCEAN +-118.41,33.96,15.0,412.0,128.0,310.0,137.0,3.9792,266700.0,<1H OCEAN +-118.41,33.96,32.0,1044.0,219.0,567.0,222.0,4.1471,284400.0,<1H OCEAN +-118.41,33.94,45.0,2038.0,394.0,1086.0,387.0,4.7375,289600.0,<1H OCEAN +-118.45,33.96,24.0,3097.0,791.0,1075.0,639.0,5.723,500001.0,<1H OCEAN +-118.45,33.96,36.0,2723.0,547.0,1090.0,519.0,6.3267,500001.0,<1H OCEAN +-118.44,33.95,37.0,2076.0,332.0,771.0,327.0,6.2551,500001.0,<1H OCEAN +-118.28,33.92,37.0,1761.0,409.0,1309.0,357.0,2.1875,175900.0,<1H OCEAN +-118.28,33.91,41.0,620.0,133.0,642.0,162.0,2.6546,159600.0,<1H OCEAN +-118.29,33.9,42.0,1273.0,309.0,1203.0,348.0,4.4636,162000.0,<1H OCEAN +-118.29,33.91,41.0,2475.0,532.0,1416.0,470.0,3.8372,156400.0,<1H OCEAN +-118.29,33.91,31.0,2025.0,618.0,2231.0,593.0,2.4741,151200.0,<1H OCEAN +-118.29,33.92,23.0,2503.0,532.0,1735.0,505.0,2.7368,162800.0,<1H OCEAN +-118.28,33.88,19.0,2758.0,675.0,2047.0,591.0,2.6618,179700.0,<1H OCEAN +-118.29,33.88,32.0,2307.0,493.0,1754.0,528.0,4.317,232800.0,<1H OCEAN +-118.29,33.88,27.0,2082.0,612.0,2009.0,548.0,2.9063,184100.0,<1H OCEAN +-118.29,33.89,35.0,2810.0,614.0,1578.0,601.0,3.59,200600.0,<1H OCEAN +-118.29,33.87,32.0,1700.0,340.0,864.0,317.0,4.381,238700.0,<1H OCEAN +-118.3,33.86,35.0,2016.0,365.0,1083.0,369.0,5.1727,230200.0,<1H OCEAN +-118.3,33.86,35.0,1511.0,274.0,853.0,308.0,4.9792,251300.0,<1H OCEAN +-118.29,33.85,10.0,1391.0,420.0,1378.0,377.0,1.9049,222200.0,<1H OCEAN +-118.31,33.84,5.0,3559.0,869.0,2965.0,794.0,2.6491,216700.0,<1H OCEAN +-118.3,33.84,36.0,1428.0,268.0,825.0,250.0,4.7222,239600.0,<1H OCEAN +-118.3,33.84,37.0,1241.0,226.0,621.0,255.0,4.9196,232400.0,<1H OCEAN +-118.3,33.85,38.0,123.0,36.0,142.0,40.0,2.3942,200000.0,<1H OCEAN +-118.3,33.83,31.0,2693.0,661.0,1598.0,618.0,3.1851,240200.0,<1H OCEAN +-118.3,33.83,33.0,2716.0,660.0,1807.0,661.0,3.5473,226300.0,<1H OCEAN +-118.31,33.83,27.0,2880.0,802.0,2083.0,727.0,2.9619,223400.0,<1H OCEAN +-118.3,33.82,35.0,1499.0,340.0,1141.0,326.0,2.6136,213600.0,<1H OCEAN +-118.3,33.82,26.0,2080.0,560.0,2096.0,506.0,2.8106,184400.0,<1H OCEAN +-118.3,33.82,25.0,2659.0,765.0,2629.0,726.0,2.6368,175900.0,<1H OCEAN +-118.3,33.81,17.0,5544.0,1068.0,3008.0,1038.0,5.322,282700.0,<1H OCEAN +-118.3,33.8,27.0,2790.0,513.0,1498.0,519.0,5.3106,268300.0,<1H OCEAN +-118.31,33.8,30.0,3096.0,757.0,2048.0,704.0,3.125,233300.0,<1H OCEAN +-118.3,33.79,35.0,2793.0,686.0,2255.0,682.0,3.0057,235300.0,<1H OCEAN +-118.3,33.79,9.0,2782.0,884.0,1790.0,748.0,2.9154,203300.0,<1H OCEAN +-118.3,33.79,13.0,3569.0,924.0,2159.0,880.0,3.163,224200.0,<1H OCEAN +-118.3,33.78,35.0,2572.0,504.0,1172.0,519.0,4.6207,304100.0,<1H OCEAN +-118.26,33.8,41.0,2004.0,481.0,1658.0,456.0,3.1779,171100.0,<1H OCEAN +-118.25,33.8,36.0,1697.0,394.0,1274.0,396.0,3.35,163100.0,<1H OCEAN +-118.26,33.79,30.0,1291.0,230.0,835.0,215.0,5.5,181500.0,<1H OCEAN +-118.25,33.79,32.0,1205.0,340.0,1799.0,370.0,2.375,128000.0,NEAR OCEAN +-118.24,33.8,28.0,636.0,169.0,788.0,143.0,3.6161,131300.0,NEAR OCEAN +-118.23,33.8,26.0,239.0,135.0,165.0,112.0,1.3333,187500.0,NEAR OCEAN +-118.27,33.8,38.0,1446.0,327.0,980.0,319.0,3.35,177700.0,<1H OCEAN +-118.27,33.79,36.0,2218.0,561.0,1789.0,527.0,3.1613,182300.0,<1H OCEAN +-118.27,33.79,39.0,1513.0,365.0,1227.0,354.0,3.3929,184600.0,<1H OCEAN +-118.28,33.8,38.0,1471.0,329.0,1207.0,335.0,4.0,165500.0,<1H OCEAN +-118.28,33.79,28.0,1895.0,420.0,1422.0,389.0,4.3816,191300.0,<1H OCEAN +-118.28,33.79,36.0,1989.0,458.0,1668.0,455.0,3.3009,168000.0,<1H OCEAN +-118.28,33.78,20.0,2233.0,591.0,1915.0,558.0,3.2011,169100.0,<1H OCEAN +-118.29,33.79,10.0,3708.0,1016.0,2855.0,948.0,2.0,165400.0,<1H OCEAN +-118.29,33.79,16.0,1867.0,571.0,951.0,498.0,3.3427,154200.0,<1H OCEAN +-118.3,33.79,21.0,1068.0,283.0,1180.0,274.0,2.5,157500.0,<1H OCEAN +-118.3,33.8,8.0,1115.0,412.0,1472.0,396.0,3.1392,146200.0,<1H OCEAN +-118.27,33.79,31.0,1535.0,369.0,1291.0,340.0,2.9375,174000.0,<1H OCEAN +-118.26,33.78,27.0,1672.0,491.0,1723.0,462.0,2.0458,174500.0,NEAR OCEAN +-118.27,33.79,26.0,2109.0,651.0,2120.0,605.0,2.1447,158700.0,<1H OCEAN +-118.27,33.79,39.0,1417.0,359.0,1450.0,367.0,2.8462,172000.0,<1H OCEAN +-118.25,33.79,34.0,1349.0,371.0,1716.0,380.0,2.7143,138100.0,NEAR OCEAN +-118.25,33.79,38.0,1730.0,460.0,1724.0,424.0,2.7308,150400.0,NEAR OCEAN +-118.25,33.79,39.0,981.0,286.0,1183.0,298.0,1.9208,139800.0,NEAR OCEAN +-118.26,33.78,21.0,2188.0,706.0,2265.0,652.0,1.9923,164700.0,NEAR OCEAN +-118.26,33.79,42.0,1162.0,264.0,1044.0,241.0,3.5488,205600.0,<1H OCEAN +-118.23,33.78,20.0,59.0,24.0,69.0,23.0,2.5588,350000.0,NEAR OCEAN +-118.26,33.78,35.0,1239.0,473.0,1524.0,387.0,2.0956,154700.0,NEAR OCEAN +-118.25,33.78,32.0,296.0,139.0,511.0,133.0,1.4444,182100.0,NEAR OCEAN +-118.24,33.78,24.0,574.0,173.0,784.0,162.0,2.25,152300.0,NEAR OCEAN +-118.26,33.78,36.0,2191.0,739.0,2931.0,692.0,2.1311,163100.0,NEAR OCEAN +-118.26,33.77,36.0,886.0,253.0,809.0,219.0,2.4545,164200.0,NEAR OCEAN +-118.27,33.77,26.0,2272.0,694.0,2567.0,595.0,1.9964,150600.0,NEAR OCEAN +-118.27,33.78,21.0,3354.0,1174.0,4426.0,1110.0,2.5262,167300.0,<1H OCEAN +-118.28,33.78,37.0,1212.0,304.0,1076.0,293.0,3.2115,160100.0,<1H OCEAN +-118.27,33.77,39.0,1731.0,485.0,2115.0,478.0,1.5369,141300.0,NEAR OCEAN +-118.27,33.76,46.0,22.0,11.0,32.0,7.0,3.125,112500.0,NEAR OCEAN +-118.3,33.77,18.0,3821.0,795.0,2831.0,769.0,2.9571,346200.0,<1H OCEAN +-118.3,33.76,18.0,9659.0,1716.0,4336.0,1674.0,5.7764,290500.0,<1H OCEAN +-118.28,33.77,47.0,307.0,69.0,374.0,65.0,2.9063,146900.0,<1H OCEAN +-118.28,33.75,41.0,1305.0,381.0,1384.0,369.0,2.45,186800.0,NEAR OCEAN +-118.28,33.75,18.0,393.0,189.0,429.0,188.0,1.8393,187500.0,NEAR OCEAN +-118.28,33.74,40.0,1751.0,512.0,1939.0,503.0,1.5394,200000.0,NEAR OCEAN +-118.28,33.75,21.0,2442.0,719.0,1916.0,646.0,1.2276,208300.0,NEAR OCEAN +-118.28,33.74,16.0,855.0,271.0,486.0,250.0,0.7591,350000.0,NEAR OCEAN +-118.3,33.75,19.0,2356.0,440.0,1291.0,418.0,4.2308,416100.0,<1H OCEAN +-118.3,33.76,6.0,6097.0,1270.0,2678.0,1226.0,5.1269,285200.0,<1H OCEAN +-118.3,33.75,42.0,967.0,175.0,481.0,163.0,5.6611,265600.0,<1H OCEAN +-118.3,33.75,48.0,1958.0,386.0,1098.0,380.0,4.625,273400.0,<1H OCEAN +-118.3,33.74,47.0,2223.0,410.0,1163.0,413.0,4.4671,270800.0,NEAR OCEAN +-118.31,33.74,36.0,2464.0,472.0,1111.0,457.0,4.5074,350000.0,NEAR OCEAN +-118.31,33.74,22.0,5042.0,974.0,2260.0,935.0,4.3472,351200.0,NEAR OCEAN +-118.29,33.75,27.0,1650.0,443.0,1359.0,386.0,2.5795,192400.0,NEAR OCEAN +-118.3,33.75,23.0,1957.0,517.0,1454.0,526.0,3.5056,203100.0,<1H OCEAN +-118.29,33.75,37.0,1319.0,292.0,766.0,285.0,2.7031,218900.0,NEAR OCEAN +-118.29,33.74,29.0,1503.0,411.0,1368.0,390.0,2.1473,195300.0,NEAR OCEAN +-118.29,33.74,52.0,1438.0,472.0,1018.0,399.0,2.2188,306700.0,NEAR OCEAN +-118.29,33.74,41.0,1382.0,361.0,905.0,344.0,2.75,238300.0,NEAR OCEAN +-118.29,33.74,30.0,2074.0,533.0,1311.0,531.0,2.0329,225800.0,NEAR OCEAN +-118.29,33.73,43.0,1854.0,519.0,1151.0,486.0,2.5759,225000.0,NEAR OCEAN +-118.29,33.73,21.0,2492.0,711.0,1699.0,672.0,2.1382,242300.0,NEAR OCEAN +-118.29,33.73,30.0,2835.0,711.0,1669.0,652.0,3.3616,268500.0,NEAR OCEAN +-118.3,33.73,42.0,1731.0,,866.0,403.0,2.7451,255400.0,NEAR OCEAN +-118.3,33.74,23.0,3075.0,860.0,1584.0,806.0,2.9386,260500.0,NEAR OCEAN +-118.31,33.73,36.0,1725.0,295.0,799.0,306.0,5.0874,368500.0,NEAR OCEAN +-118.31,33.73,52.0,1665.0,280.0,656.0,282.0,5.249,351900.0,NEAR OCEAN +-118.3,33.74,20.0,2625.0,673.0,1184.0,606.0,3.9167,285200.0,NEAR OCEAN +-118.3,33.73,47.0,2852.0,603.0,1130.0,560.0,4.194,293900.0,NEAR OCEAN +-118.31,33.73,52.0,2025.0,361.0,957.0,363.0,4.2059,350000.0,NEAR OCEAN +-118.28,33.74,44.0,1853.0,556.0,2090.0,539.0,1.8584,248100.0,NEAR OCEAN +-118.28,33.73,39.0,2602.0,802.0,2178.0,737.0,2.0469,234500.0,NEAR OCEAN +-118.28,33.73,52.0,2085.0,588.0,1767.0,516.0,2.1935,243200.0,NEAR OCEAN +-118.28,33.73,45.0,2137.0,559.0,1550.0,529.0,1.9167,227200.0,NEAR OCEAN +-118.29,33.73,30.0,3161.0,,1865.0,771.0,2.7139,231700.0,NEAR OCEAN +-118.29,33.72,25.0,2469.0,584.0,1253.0,535.0,3.1932,257500.0,NEAR OCEAN +-118.3,33.72,28.0,2647.0,658.0,1459.0,595.0,3.4474,253400.0,NEAR OCEAN +-118.3,33.72,28.0,2510.0,583.0,1388.0,554.0,3.3397,267800.0,NEAR OCEAN +-118.3,33.73,40.0,2582.0,606.0,1304.0,588.0,3.5694,276400.0,NEAR OCEAN +-118.31,33.73,52.0,1642.0,287.0,692.0,288.0,4.1812,321500.0,NEAR OCEAN +-118.31,33.72,26.0,2711.0,508.0,1372.0,459.0,4.1451,326700.0,NEAR OCEAN +-118.33,33.69,41.0,2168.0,357.0,1171.0,374.0,4.7216,311900.0,NEAR OCEAN +-118.31,33.73,33.0,2265.0,366.0,986.0,388.0,5.4533,409800.0,NEAR OCEAN +-118.32,33.73,25.0,1099.0,168.0,407.0,159.0,7.6886,500001.0,NEAR OCEAN +-118.33,33.72,25.0,6191.0,1081.0,2297.0,1023.0,6.4246,446700.0,NEAR OCEAN +-118.29,33.71,36.0,3135.0,746.0,1815.0,697.0,3.7596,300000.0,NEAR OCEAN +-118.31,33.67,42.0,1297.0,246.0,611.0,242.0,5.3074,401900.0,NEAR OCEAN +-118.3,33.72,35.0,2790.0,,1167.0,441.0,6.2028,361500.0,NEAR OCEAN +-118.29,33.71,40.0,1644.0,471.0,780.0,416.0,3.1071,464300.0,NEAR OCEAN +-118.29,33.71,40.0,1933.0,475.0,902.0,412.0,4.25,332800.0,NEAR OCEAN +-118.29,33.71,31.0,2809.0,666.0,1316.0,633.0,4.5606,303800.0,NEAR OCEAN +-118.29,33.72,39.0,2651.0,590.0,1103.0,508.0,3.274,254300.0,NEAR OCEAN +-118.29,33.72,21.0,1568.0,452.0,801.0,422.0,3.5109,225000.0,NEAR OCEAN +-118.28,33.68,8.0,2842.0,522.0,1624.0,510.0,3.7282,287500.0,NEAR OCEAN +-118.23,34.24,31.0,3857.0,607.0,1695.0,572.0,7.642,396400.0,<1H OCEAN +-118.23,34.23,34.0,2377.0,362.0,1055.0,362.0,6.0,367100.0,<1H OCEAN +-118.24,34.24,31.0,3019.0,469.0,1349.0,462.0,7.1463,394100.0,<1H OCEAN +-118.24,34.24,31.0,3812.0,595.0,1645.0,591.0,7.585,380100.0,<1H OCEAN +-118.23,34.22,36.0,2288.0,439.0,1079.0,434.0,4.5486,361000.0,<1H OCEAN +-118.24,34.23,41.0,1912.0,308.0,896.0,314.0,5.3473,352700.0,<1H OCEAN +-118.24,34.23,43.0,1061.0,208.0,514.0,208.0,6.01,254200.0,<1H OCEAN +-118.24,34.23,42.0,1541.0,280.0,753.0,264.0,5.1028,292100.0,<1H OCEAN +-118.25,34.23,35.0,2839.0,592.0,1413.0,538.0,4.1667,271200.0,<1H OCEAN +-118.25,34.25,34.0,3150.0,518.0,1392.0,480.0,4.9355,336900.0,<1H OCEAN +-118.25,34.23,34.0,2421.0,475.0,1232.0,454.0,4.6852,296200.0,<1H OCEAN +-118.26,34.24,35.0,1535.0,283.0,816.0,287.0,6.1873,312100.0,<1H OCEAN +-118.26,34.24,35.0,1666.0,280.0,788.0,273.0,6.6277,344400.0,<1H OCEAN +-118.26,34.24,35.0,2485.0,418.0,1226.0,406.0,5.7083,329500.0,<1H OCEAN +-118.26,34.24,42.0,890.0,179.0,555.0,200.0,4.4821,271900.0,<1H OCEAN +-118.25,34.23,41.0,1979.0,496.0,1157.0,459.0,4.4083,217700.0,<1H OCEAN +-118.25,34.22,30.0,2062.0,396.0,1089.0,375.0,5.5362,301200.0,<1H OCEAN +-118.25,34.23,37.0,1954.0,368.0,967.0,370.0,5.0862,261300.0,<1H OCEAN +-118.26,34.23,43.0,1428.0,325.0,836.0,302.0,4.5759,209200.0,<1H OCEAN +-118.26,34.23,38.0,1107.0,194.0,518.0,195.0,7.5582,263700.0,<1H OCEAN +-118.26,34.23,33.0,1805.0,303.0,838.0,301.0,5.4306,326600.0,<1H OCEAN +-118.22,34.21,29.0,2174.0,418.0,1030.0,395.0,3.5707,341700.0,<1H OCEAN +-118.23,34.21,36.0,2988.0,719.0,1357.0,657.0,3.5174,268000.0,<1H OCEAN +-118.23,34.21,29.0,2584.0,608.0,1217.0,568.0,3.3287,273400.0,<1H OCEAN +-118.23,34.21,32.0,1464.0,406.0,693.0,380.0,2.5463,200000.0,<1H OCEAN +-118.23,34.21,38.0,1399.0,390.0,859.0,386.0,3.4148,234800.0,<1H OCEAN +-118.24,34.22,41.0,2476.0,506.0,1271.0,485.0,3.4531,263900.0,<1H OCEAN +-118.24,34.22,34.0,1722.0,406.0,926.0,371.0,4.1523,252000.0,<1H OCEAN +-118.25,34.22,34.0,2510.0,535.0,1516.0,542.0,3.8068,267000.0,<1H OCEAN +-118.23,34.21,50.0,309.0,47.0,121.0,45.0,6.213,285000.0,<1H OCEAN +-118.23,34.2,51.0,1477.0,280.0,750.0,295.0,5.3925,317900.0,<1H OCEAN +-118.23,34.2,48.0,1473.0,294.0,807.0,296.0,3.399,306300.0,<1H OCEAN +-118.24,34.2,41.0,2067.0,452.0,1282.0,455.0,5.5756,309900.0,<1H OCEAN +-118.24,34.21,32.0,3817.0,886.0,1888.0,829.0,3.5777,245600.0,<1H OCEAN +-118.24,34.22,36.0,2507.0,517.0,1232.0,470.0,5.529,241300.0,<1H OCEAN +-118.27,34.22,34.0,8206.0,1186.0,3141.0,1150.0,7.2812,462200.0,<1H OCEAN +-118.23,34.18,47.0,1853.0,345.0,757.0,310.0,3.6875,422000.0,<1H OCEAN +-118.23,34.18,43.0,1708.0,280.0,768.0,276.0,6.207,457400.0,<1H OCEAN +-118.23,34.18,45.0,2332.0,,943.0,339.0,8.1132,446600.0,<1H OCEAN +-118.26,34.18,32.0,14556.0,2077.0,5459.0,2017.0,8.1657,500001.0,<1H OCEAN +-118.22,34.19,36.0,959.0,204.0,446.0,210.0,3.215,331300.0,<1H OCEAN +-118.22,34.19,31.0,4704.0,920.0,1895.0,886.0,4.9297,400000.0,<1H OCEAN +-118.22,34.19,36.0,2443.0,492.0,1115.0,493.0,3.9777,409800.0,<1H OCEAN +-118.21,34.18,14.0,2672.0,335.0,1113.0,318.0,12.1579,500001.0,<1H OCEAN +-118.23,34.17,37.0,4524.0,1005.0,2099.0,937.0,3.5781,366700.0,<1H OCEAN +-118.21,34.17,24.0,8590.0,1231.0,3401.0,1178.0,8.1325,472700.0,<1H OCEAN +-118.21,34.16,25.0,434.0,74.0,199.0,75.0,5.9199,420500.0,<1H OCEAN +-118.19,34.16,49.0,1788.0,267.0,735.0,266.0,6.6009,375700.0,<1H OCEAN +-118.2,34.16,31.0,5550.0,881.0,2465.0,862.0,6.8317,446100.0,<1H OCEAN +-118.23,34.16,31.0,3105.0,582.0,1359.0,547.0,5.1718,429100.0,<1H OCEAN +-118.23,34.15,26.0,1649.0,522.0,1332.0,483.0,3.1004,257100.0,<1H OCEAN +-118.23,34.15,40.0,2124.0,370.0,998.0,372.0,5.3369,370400.0,<1H OCEAN +-118.24,34.16,40.0,2549.0,591.0,1156.0,546.0,3.3333,374300.0,<1H OCEAN +-118.24,34.16,52.0,2187.0,284.0,733.0,274.0,9.5823,406200.0,<1H OCEAN +-118.24,34.16,52.0,1904.0,297.0,797.0,286.0,6.6603,380400.0,<1H OCEAN +-118.25,34.16,52.0,2477.0,385.0,993.0,371.0,4.9135,368100.0,<1H OCEAN +-118.25,34.17,52.0,1532.0,292.0,631.0,275.0,5.1242,372900.0,<1H OCEAN +-118.25,34.16,24.0,5131.0,1436.0,2690.0,1371.0,2.5668,280000.0,<1H OCEAN +-118.26,34.17,20.0,5949.0,1417.0,2593.0,1337.0,3.8576,318600.0,<1H OCEAN +-118.26,34.16,17.0,2943.0,769.0,1312.0,656.0,3.1484,187500.0,<1H OCEAN +-118.26,34.16,19.0,2919.0,857.0,1866.0,811.0,3.1733,206300.0,<1H OCEAN +-118.26,34.16,20.0,3407.0,885.0,1883.0,870.0,3.7321,351100.0,<1H OCEAN +-118.27,34.17,48.0,1560.0,280.0,825.0,269.0,5.5118,354700.0,<1H OCEAN +-118.27,34.16,15.0,5036.0,1299.0,3164.0,1175.0,2.9148,238700.0,<1H OCEAN +-118.27,34.16,45.0,1865.0,360.0,973.0,349.0,3.6587,321200.0,<1H OCEAN +-118.28,34.17,52.0,2332.0,433.0,1135.0,440.0,5.5658,331200.0,<1H OCEAN +-118.27,34.17,52.0,2010.0,,908.0,326.0,6.9135,374000.0,<1H OCEAN +-118.27,34.17,52.0,2287.0,295.0,829.0,296.0,7.8383,500001.0,<1H OCEAN +-118.27,34.18,52.0,3034.0,406.0,1158.0,399.0,6.2976,498400.0,<1H OCEAN +-118.28,34.18,47.0,2243.0,339.0,911.0,319.0,7.4046,446800.0,<1H OCEAN +-118.28,34.18,52.0,2602.0,418.0,1137.0,419.0,5.3185,358000.0,<1H OCEAN +-118.29,34.18,52.0,1602.0,265.0,667.0,251.0,5.049,323500.0,<1H OCEAN +-118.28,34.18,50.0,2195.0,336.0,878.0,309.0,6.884,365600.0,<1H OCEAN +-118.28,34.17,22.0,2664.0,651.0,1553.0,629.0,3.6354,256300.0,<1H OCEAN +-118.29,34.17,17.0,3852.0,1066.0,2986.0,993.0,2.3482,255400.0,<1H OCEAN +-118.29,34.17,52.0,1732.0,305.0,875.0,311.0,4.325,292600.0,<1H OCEAN +-118.29,34.18,10.0,4292.0,1075.0,2719.0,987.0,3.6974,286600.0,<1H OCEAN +-118.29,34.16,31.0,1262.0,338.0,1019.0,332.0,3.7083,241900.0,<1H OCEAN +-118.29,34.16,42.0,413.0,107.0,349.0,107.0,4.3438,189800.0,<1H OCEAN +-118.29,34.17,12.0,2238.0,682.0,1882.0,611.0,2.9,208300.0,<1H OCEAN +-118.3,34.17,17.0,4041.0,1169.0,3309.0,1117.0,2.6016,222400.0,<1H OCEAN +-118.3,34.17,30.0,48.0,14.0,74.0,16.0,5.0056,162500.0,<1H OCEAN +-118.29,34.16,35.0,1257.0,318.0,764.0,319.0,3.2083,238000.0,<1H OCEAN +-118.3,34.16,40.0,1875.0,460.0,869.0,438.0,3.2321,243600.0,<1H OCEAN +-118.3,34.16,35.0,3213.0,874.0,2401.0,819.0,2.8342,256800.0,<1H OCEAN +-118.27,34.16,47.0,1453.0,356.0,787.0,345.0,3.0114,255500.0,<1H OCEAN +-118.27,34.15,22.0,2265.0,637.0,1684.0,561.0,2.6729,217100.0,<1H OCEAN +-118.27,34.15,25.0,3018.0,806.0,2205.0,742.0,3.0199,220200.0,<1H OCEAN +-118.27,34.15,14.0,1744.0,536.0,1494.0,531.0,3.2171,230800.0,<1H OCEAN +-118.27,34.16,52.0,830.0,183.0,479.0,179.0,3.1397,253700.0,<1H OCEAN +-118.27,34.16,48.0,1301.0,253.0,637.0,260.0,4.3438,252700.0,<1H OCEAN +-118.28,34.16,49.0,1393.0,290.0,605.0,282.0,2.9491,257400.0,<1H OCEAN +-118.26,34.16,18.0,1775.0,525.0,950.0,522.0,3.5417,177100.0,<1H OCEAN +-118.26,34.15,14.0,2981.0,894.0,1941.0,863.0,3.0,178600.0,<1H OCEAN +-118.26,34.15,6.0,3340.0,945.0,2315.0,846.0,2.8884,252300.0,<1H OCEAN +-118.26,34.15,18.0,2481.0,756.0,1763.0,675.0,2.8088,247500.0,<1H OCEAN +-118.24,34.16,52.0,850.0,162.0,493.0,160.0,6.9408,298800.0,<1H OCEAN +-118.24,34.15,20.0,2734.0,658.0,1562.0,607.0,3.3906,284100.0,<1H OCEAN +-118.24,34.15,45.0,1235.0,271.0,499.0,263.0,3.1435,282600.0,<1H OCEAN +-118.25,34.15,15.0,3712.0,1005.0,1888.0,890.0,3.6875,209600.0,<1H OCEAN +-118.25,34.16,14.0,3700.0,945.0,1681.0,905.0,3.9054,200000.0,<1H OCEAN +-118.24,34.15,17.0,5282.0,1605.0,4116.0,1574.0,3.052,209800.0,<1H OCEAN +-118.24,34.15,19.0,4852.0,1465.0,3171.0,1332.0,2.5924,192900.0,<1H OCEAN +-118.25,34.15,31.0,1238.0,338.0,605.0,331.0,2.8478,228100.0,<1H OCEAN +-118.25,34.15,32.0,1377.0,444.0,768.0,422.0,2.2621,187500.0,<1H OCEAN +-118.25,34.15,20.0,3960.0,1027.0,1729.0,978.0,3.0441,193800.0,<1H OCEAN +-118.23,34.14,33.0,2865.0,864.0,2061.0,790.0,2.6268,201300.0,<1H OCEAN +-118.24,34.14,20.0,3196.0,994.0,2929.0,983.0,3.0206,219500.0,<1H OCEAN +-118.24,34.14,27.0,2909.0,1021.0,2614.0,935.0,2.1444,229000.0,<1H OCEAN +-118.23,34.15,19.0,2294.0,716.0,1686.0,680.0,3.0288,258300.0,<1H OCEAN +-118.23,34.14,25.0,2864.0,844.0,1745.0,803.0,2.9167,224300.0,<1H OCEAN +-118.24,34.14,28.0,1843.0,554.0,1402.0,512.0,2.462,254000.0,<1H OCEAN +-118.24,34.14,36.0,1813.0,560.0,1501.0,544.0,1.9125,238000.0,<1H OCEAN +-118.24,34.13,37.0,1644.0,395.0,959.0,383.0,3.3636,257700.0,<1H OCEAN +-118.24,34.13,45.0,2170.0,401.0,1043.0,394.0,5.6921,269000.0,<1H OCEAN +-118.24,34.15,7.0,2063.0,670.0,1892.0,643.0,1.7301,202300.0,<1H OCEAN +-118.24,34.14,9.0,4877.0,1488.0,4486.0,1458.0,2.4421,222100.0,<1H OCEAN +-118.25,34.14,30.0,1615.0,570.0,1245.0,544.0,1.8929,196900.0,<1H OCEAN +-118.25,34.14,37.0,584.0,260.0,552.0,235.0,1.8235,275000.0,<1H OCEAN +-118.25,34.15,13.0,1107.0,479.0,616.0,443.0,0.8185,187500.0,<1H OCEAN +-118.26,34.14,51.0,902.0,320.0,650.0,334.0,1.5417,268800.0,<1H OCEAN +-118.26,34.14,29.0,3431.0,1222.0,4094.0,1205.0,2.2614,248100.0,<1H OCEAN +-118.27,34.14,10.0,1060.0,332.0,1025.0,288.0,3.0074,175000.0,<1H OCEAN +-118.26,34.14,6.0,1727.0,506.0,1200.0,439.0,4.1083,210700.0,<1H OCEAN +-118.27,34.15,7.0,2837.0,776.0,2287.0,736.0,3.008,229000.0,<1H OCEAN +-118.26,34.13,25.0,3208.0,1111.0,2843.0,1005.0,2.6673,218100.0,<1H OCEAN +-118.26,34.13,37.0,1383.0,470.0,1185.0,451.0,2.5,207100.0,<1H OCEAN +-118.26,34.13,37.0,196.0,74.0,194.0,68.0,1.2188,218800.0,<1H OCEAN +-118.26,34.14,23.0,1336.0,396.0,1255.0,359.0,2.5388,205000.0,<1H OCEAN +-118.25,34.14,13.0,3487.0,1131.0,3749.0,1072.0,2.1602,221900.0,<1H OCEAN +-118.25,34.14,25.0,5980.0,1856.0,5217.0,1772.0,2.506,184500.0,<1H OCEAN +-118.25,34.13,22.0,2340.0,773.0,2226.0,754.0,2.5417,217500.0,<1H OCEAN +-118.24,34.13,45.0,1971.0,439.0,1245.0,430.0,4.0272,260500.0,<1H OCEAN +-118.25,34.13,52.0,322.0,88.0,229.0,89.0,2.125,243800.0,<1H OCEAN +-118.25,34.13,36.0,2946.0,1025.0,2542.0,912.0,2.2244,255900.0,<1H OCEAN +-118.25,34.12,21.0,739.0,265.0,861.0,246.0,2.4856,181300.0,<1H OCEAN +-118.31,34.22,27.0,7714.0,1132.0,3199.0,1100.0,7.1262,446200.0,<1H OCEAN +-118.33,34.21,31.0,3190.0,489.0,1362.0,480.0,6.981,402900.0,<1H OCEAN +-118.34,34.21,36.0,1834.0,316.0,864.0,309.0,4.7885,302200.0,<1H OCEAN +-118.29,34.18,36.0,3120.0,620.0,1441.0,612.0,3.9041,320400.0,<1H OCEAN +-118.3,34.19,14.0,3615.0,913.0,1924.0,852.0,3.5083,280900.0,<1H OCEAN +-118.3,34.19,52.0,1704.0,277.0,746.0,262.0,4.7986,326100.0,<1H OCEAN +-118.3,34.19,51.0,1502.0,243.0,586.0,231.0,4.375,332400.0,<1H OCEAN +-118.31,34.19,27.0,4713.0,1169.0,2372.0,1077.0,3.7015,287900.0,<1H OCEAN +-118.3,34.19,52.0,2962.0,468.0,1364.0,466.0,4.9042,343500.0,<1H OCEAN +-118.31,34.2,36.0,1692.0,263.0,778.0,278.0,5.0865,349600.0,<1H OCEAN +-118.32,34.2,36.0,2110.0,346.0,984.0,342.0,6.9909,345300.0,<1H OCEAN +-118.32,34.2,36.0,759.0,136.0,372.0,135.0,4.9886,328900.0,<1H OCEAN +-118.32,34.2,36.0,1978.0,337.0,834.0,311.0,3.9866,294400.0,<1H OCEAN +-118.33,34.2,43.0,1325.0,254.0,613.0,248.0,3.6071,289000.0,<1H OCEAN +-118.33,34.2,43.0,2322.0,418.0,1106.0,433.0,4.3631,284600.0,<1H OCEAN +-118.34,34.2,41.0,2860.0,682.0,1516.0,621.0,3.0431,262900.0,<1H OCEAN +-118.34,34.19,41.0,1524.0,393.0,1176.0,375.0,2.875,192400.0,<1H OCEAN +-118.36,34.2,14.0,1878.0,614.0,1874.0,559.0,2.5267,231800.0,<1H OCEAN +-118.32,34.2,29.0,2209.0,444.0,952.0,403.0,4.375,341200.0,<1H OCEAN +-118.32,34.19,37.0,1335.0,249.0,485.0,240.0,4.1731,352100.0,<1H OCEAN +-118.32,34.19,37.0,1519.0,331.0,613.0,315.0,3.0179,272500.0,<1H OCEAN +-118.31,34.19,42.0,724.0,149.0,420.0,150.0,3.0625,361700.0,<1H OCEAN +-118.32,34.19,37.0,589.0,119.0,375.0,122.0,3.3897,222700.0,<1H OCEAN +-118.33,34.2,23.0,7179.0,1985.0,4757.0,1924.0,3.1051,206500.0,<1H OCEAN +-118.3,34.18,13.0,7174.0,1997.0,4293.0,1872.0,3.0973,251900.0,<1H OCEAN +-118.3,34.17,37.0,350.0,115.0,342.0,111.0,3.0687,200000.0,<1H OCEAN +-118.3,34.18,5.0,5492.0,1549.0,2997.0,1405.0,3.3205,172100.0,<1H OCEAN +-118.31,34.18,11.0,3112.0,890.0,1700.0,851.0,3.1587,181300.0,<1H OCEAN +-118.31,34.19,13.0,3801.0,1116.0,1986.0,1078.0,2.0875,222700.0,<1H OCEAN +-118.32,34.18,49.0,192.0,41.0,83.0,38.0,3.0179,118800.0,<1H OCEAN +-118.32,34.18,44.0,1594.0,389.0,832.0,340.0,3.4,212100.0,<1H OCEAN +-118.32,34.17,39.0,1995.0,564.0,1202.0,544.0,3.5875,250000.0,<1H OCEAN +-118.32,34.17,47.0,2589.0,465.0,1284.0,485.0,5.1008,247100.0,<1H OCEAN +-118.33,34.17,48.0,2584.0,483.0,1118.0,459.0,4.2396,245100.0,<1H OCEAN +-118.33,34.19,46.0,2115.0,463.0,1133.0,439.0,3.7344,222000.0,<1H OCEAN +-118.33,34.18,45.0,2570.0,517.0,1256.0,510.0,4.6898,226000.0,<1H OCEAN +-118.33,34.19,45.0,1505.0,347.0,799.0,319.0,3.138,217000.0,<1H OCEAN +-118.34,34.19,48.0,814.0,165.0,490.0,176.0,3.1406,223100.0,<1H OCEAN +-118.33,34.18,45.0,1552.0,315.0,785.0,316.0,3.7411,235500.0,<1H OCEAN +-118.33,34.18,49.0,1969.0,377.0,977.0,367.0,3.8462,231300.0,<1H OCEAN +-118.33,34.18,48.0,2122.0,385.0,926.0,362.0,5.6975,231400.0,<1H OCEAN +-118.34,34.19,43.0,1029.0,252.0,613.0,255.0,2.6827,219900.0,<1H OCEAN +-118.34,34.19,47.0,1721.0,343.0,834.0,334.0,4.1923,231200.0,<1H OCEAN +-118.34,34.18,45.0,3046.0,633.0,1448.0,599.0,3.24,226900.0,<1H OCEAN +-118.34,34.18,46.0,1393.0,301.0,714.0,295.0,2.8125,229900.0,<1H OCEAN +-118.35,34.19,45.0,903.0,190.0,557.0,204.0,4.0313,209100.0,<1H OCEAN +-118.36,34.19,46.0,1676.0,322.0,846.0,295.0,5.1814,209500.0,<1H OCEAN +-118.35,34.18,46.0,2711.0,491.0,1277.0,490.0,4.282,224700.0,<1H OCEAN +-118.35,34.18,46.0,1840.0,379.0,866.0,360.0,3.3056,230400.0,<1H OCEAN +-118.35,34.17,44.0,2572.0,613.0,1280.0,570.0,3.5583,232000.0,<1H OCEAN +-118.35,34.17,47.0,858.0,170.0,365.0,171.0,2.0385,225000.0,<1H OCEAN +-118.35,34.17,42.0,1604.0,326.0,814.0,329.0,4.4408,216000.0,<1H OCEAN +-118.36,34.17,46.0,1268.0,240.0,661.0,239.0,4.0742,229100.0,<1H OCEAN +-118.34,34.18,45.0,1328.0,290.0,720.0,289.0,3.875,226900.0,<1H OCEAN +-118.34,34.18,45.0,3566.0,701.0,1601.0,653.0,3.8668,232000.0,<1H OCEAN +-118.34,34.17,49.0,3033.0,580.0,1284.0,561.0,4.1161,232500.0,<1H OCEAN +-118.35,34.16,42.0,2267.0,478.0,1083.0,458.0,3.2015,250000.0,<1H OCEAN +-118.35,34.16,45.0,1390.0,281.0,538.0,270.0,4.2212,293800.0,<1H OCEAN +-118.35,34.16,49.0,1305.0,228.0,584.0,255.0,5.636,267900.0,<1H OCEAN +-118.33,34.17,44.0,1934.0,375.0,750.0,365.0,2.473,251800.0,<1H OCEAN +-118.33,34.16,37.0,2381.0,575.0,1235.0,499.0,3.7941,247800.0,<1H OCEAN +-118.34,34.17,46.0,1718.0,344.0,756.0,343.0,3.2125,247000.0,<1H OCEAN +-118.34,34.17,52.0,1133.0,212.0,545.0,222.0,4.875,249500.0,<1H OCEAN +-118.34,34.16,44.0,1717.0,391.0,848.0,353.0,3.6111,254500.0,<1H OCEAN +-118.34,34.16,46.0,1396.0,294.0,608.0,246.0,3.692,244500.0,<1H OCEAN +-118.33,34.16,44.0,2705.0,649.0,1676.0,654.0,3.4286,247900.0,<1H OCEAN +-118.33,34.15,39.0,493.0,168.0,259.0,138.0,2.3667,17500.0,<1H OCEAN +-118.33,34.15,44.0,1321.0,303.0,471.0,301.0,4.2679,331800.0,<1H OCEAN +-118.34,34.15,40.0,3068.0,756.0,1190.0,695.0,3.5637,497400.0,<1H OCEAN +-118.34,34.15,16.0,1586.0,377.0,625.0,344.0,4.0893,450000.0,<1H OCEAN +-118.34,34.16,25.0,6082.0,1763.0,2616.0,1644.0,3.6486,246900.0,<1H OCEAN +-118.32,34.17,45.0,3448.0,690.0,1562.0,643.0,4.0648,258800.0,<1H OCEAN +-118.31,34.16,38.0,2347.0,665.0,1317.0,547.0,3.2112,349300.0,<1H OCEAN +-118.32,34.16,49.0,1074.0,170.0,403.0,208.0,6.2547,366700.0,<1H OCEAN +-118.32,34.17,40.0,1868.0,356.0,799.0,403.0,2.9306,279300.0,<1H OCEAN +-118.33,34.16,23.0,1359.0,428.0,770.0,380.0,3.4016,234600.0,<1H OCEAN +-118.32,34.16,46.0,2345.0,453.0,1031.0,427.0,4.3173,278300.0,<1H OCEAN +-118.3,34.17,16.0,1353.0,398.0,1211.0,357.0,3.1551,205000.0,<1H OCEAN +-118.31,34.16,37.0,2144.0,446.0,860.0,435.0,3.9464,315000.0,<1H OCEAN +-118.31,34.17,12.0,3188.0,931.0,2118.0,850.0,3.1823,218300.0,<1H OCEAN +-118.31,34.17,24.0,2910.0,917.0,2522.0,873.0,2.4074,219400.0,<1H OCEAN +-118.43,34.3,33.0,2443.0,498.0,1601.0,484.0,4.0223,146000.0,<1H OCEAN +-118.43,34.3,37.0,1394.0,313.0,1111.0,327.0,3.6023,161800.0,<1H OCEAN +-118.43,34.29,39.0,1769.0,410.0,1499.0,390.0,3.1212,153500.0,<1H OCEAN +-118.42,34.29,34.0,1489.0,326.0,1389.0,313.0,3.4821,160300.0,<1H OCEAN +-118.43,34.3,28.0,271.0,61.0,246.0,62.0,1.7062,164600.0,<1H OCEAN +-118.44,34.29,35.0,2606.0,447.0,1555.0,404.0,4.6864,193800.0,<1H OCEAN +-118.43,34.29,38.0,1704.0,347.0,1384.0,374.0,2.865,155500.0,<1H OCEAN +-118.43,34.29,38.0,1237.0,298.0,1073.0,293.0,3.6726,154600.0,<1H OCEAN +-118.43,34.29,50.0,1181.0,265.0,1196.0,269.0,3.2095,167000.0,<1H OCEAN +-118.43,34.28,27.0,862.0,280.0,1243.0,267.0,2.3724,154200.0,<1H OCEAN +-118.44,34.29,32.0,1260.0,382.0,1434.0,342.0,2.0286,122900.0,<1H OCEAN +-118.44,34.29,30.0,1632.0,401.0,1357.0,401.0,3.1588,160100.0,<1H OCEAN +-118.45,34.29,30.0,762.0,228.0,840.0,226.0,2.3375,154200.0,<1H OCEAN +-118.44,34.28,32.0,527.0,146.0,582.0,143.0,1.7708,138800.0,<1H OCEAN +-118.44,34.28,46.0,11.0,11.0,24.0,13.0,2.875,162500.0,<1H OCEAN +-118.44,34.28,37.0,944.0,244.0,1107.0,235.0,1.9688,144100.0,<1H OCEAN +-118.44,34.28,47.0,843.0,194.0,800.0,180.0,3.3687,151700.0,<1H OCEAN +-118.44,34.28,38.0,1156.0,305.0,1359.0,289.0,2.5147,137100.0,<1H OCEAN +-118.45,34.28,36.0,2602.0,638.0,2780.0,620.0,2.7155,149800.0,<1H OCEAN +-117.71,34.15,17.0,17715.0,2370.0,7665.0,2312.0,7.9068,349100.0,INLAND +-117.73,34.12,26.0,1279.0,163.0,412.0,157.0,6.1731,293800.0,INLAND +-117.78,34.13,18.0,7798.0,1161.0,3710.0,1227.0,5.8819,260500.0,INLAND +-117.76,34.13,8.0,16759.0,2274.0,7249.0,2156.0,7.4837,358700.0,INLAND +-117.8,34.15,14.0,7876.0,1253.0,3699.0,1162.0,5.5423,248700.0,INLAND +-117.8,34.11,25.0,5039.0,821.0,2654.0,802.0,4.7969,211700.0,INLAND +-117.8,34.1,17.0,5153.0,1164.0,2949.0,1083.0,3.5603,174600.0,INLAND +-117.8,34.1,13.0,2996.0,495.0,1187.0,464.0,6.2456,161700.0,INLAND +-117.79,34.12,16.0,2426.0,426.0,1319.0,446.0,4.8125,224500.0,INLAND +-117.79,34.11,18.0,3814.0,721.0,1881.0,692.0,4.4722,215600.0,INLAND +-117.83,34.14,26.0,8254.0,1153.0,3460.0,1131.0,6.5253,349900.0,INLAND +-117.83,34.15,20.0,2421.0,306.0,1023.0,298.0,8.0683,451500.0,INLAND +-117.82,34.13,27.0,3770.0,573.0,1606.0,562.0,6.1321,309700.0,INLAND +-117.84,34.13,26.0,3773.0,694.0,2103.0,688.0,4.6937,198000.0,INLAND +-117.87,34.15,24.0,5745.0,735.0,2061.0,679.0,8.2827,451400.0,INLAND +-117.93,34.15,14.0,9610.0,2005.0,4723.0,1907.0,4.0393,156800.0,INLAND +-117.9,34.15,21.0,2056.0,461.0,1332.0,429.0,3.3942,212800.0,INLAND +-117.9,34.14,29.0,2240.0,457.0,1187.0,407.0,3.8365,184200.0,<1H OCEAN +-117.9,34.14,35.0,2259.0,505.0,1561.0,509.0,3.3043,155500.0,<1H OCEAN +-117.91,34.14,42.0,2225.0,485.0,1544.0,464.0,2.2442,166700.0,INLAND +-117.89,34.14,15.0,4644.0,967.0,2855.0,867.0,3.3654,222100.0,<1H OCEAN +-117.88,34.14,23.0,2308.0,322.0,1001.0,317.0,7.5112,355500.0,INLAND +-117.88,34.14,32.0,1764.0,365.0,924.0,329.0,3.875,186700.0,INLAND +-117.88,34.13,33.0,3713.0,718.0,2106.0,720.0,4.0023,185500.0,<1H OCEAN +-117.85,34.14,35.0,2899.0,429.0,1251.0,429.0,6.1049,297200.0,INLAND +-117.85,34.14,35.0,1582.0,248.0,654.0,221.0,4.9091,275000.0,INLAND +-117.86,34.14,33.0,2344.0,363.0,1098.0,359.0,6.2089,283400.0,INLAND +-117.87,34.15,37.0,2655.0,415.0,1056.0,401.0,5.4224,269500.0,INLAND +-117.86,34.14,36.0,3097.0,667.0,1484.0,634.0,3.1905,235300.0,INLAND +-117.87,34.14,30.0,2495.0,586.0,1139.0,559.0,2.9375,209200.0,INLAND +-117.85,34.13,31.0,1959.0,318.0,1021.0,303.0,4.3145,233000.0,INLAND +-117.85,34.12,30.0,4367.0,1033.0,2524.0,954.0,3.0448,192100.0,INLAND +-117.86,34.13,33.0,2383.0,428.0,1269.0,421.0,4.636,245500.0,INLAND +-117.86,34.13,40.0,1304.0,280.0,607.0,256.0,2.588,209500.0,INLAND +-117.86,34.13,29.0,630.0,145.0,378.0,148.0,3.4107,170800.0,INLAND +-117.87,34.13,32.0,1741.0,373.0,872.0,333.0,3.4219,194500.0,<1H OCEAN +-117.87,34.13,29.0,1677.0,413.0,873.0,400.0,3.12,194300.0,<1H OCEAN +-117.82,34.12,26.0,3118.0,528.0,1546.0,545.0,5.27,209400.0,INLAND +-117.84,34.12,25.0,3465.0,566.0,1722.0,536.0,4.8304,228900.0,INLAND +-117.83,34.11,29.0,2671.0,437.0,1484.0,445.0,4.9844,203000.0,INLAND +-117.84,34.11,17.0,3499.0,621.0,1911.0,621.0,4.8894,191700.0,INLAND +-117.84,34.12,34.0,2026.0,345.0,1142.0,332.0,4.392,187600.0,INLAND +-117.85,34.11,25.0,9255.0,1659.0,4944.0,1627.0,4.5708,223000.0,INLAND +-117.81,34.08,13.0,18448.0,2474.0,7775.0,2397.0,7.7876,348900.0,INLAND +-117.81,34.12,23.0,7063.0,1176.0,3100.0,1112.0,4.8229,192600.0,INLAND +-117.81,34.11,21.0,3481.0,808.0,1866.0,746.0,3.6201,150400.0,INLAND +-117.81,34.1,19.0,1935.0,399.0,1126.0,389.0,3.8929,144600.0,INLAND +-117.83,34.1,18.0,11026.0,1978.0,5407.0,1923.0,4.075,231100.0,INLAND +-117.76,34.1,28.0,4086.0,871.0,1973.0,853.0,2.621,202200.0,INLAND +-117.78,34.09,32.0,2643.0,516.0,1862.0,478.0,3.7177,177200.0,INLAND +-117.79,34.1,26.0,1664.0,344.0,1024.0,339.0,3.5192,190500.0,INLAND +-117.76,34.12,16.0,9020.0,1509.0,3575.0,1486.0,4.2415,275700.0,INLAND +-117.77,34.12,15.0,4260.0,770.0,2007.0,695.0,4.4609,230000.0,INLAND +-117.76,34.11,22.0,4935.0,954.0,2874.0,938.0,3.9825,180500.0,INLAND +-117.77,34.1,50.0,2388.0,494.0,1241.0,459.0,2.8818,167200.0,INLAND +-117.77,34.11,28.0,1998.0,414.0,1124.0,389.0,3.75,180900.0,INLAND +-117.78,34.11,23.0,7079.0,1381.0,3205.0,1327.0,3.0735,212300.0,INLAND +-117.74,34.11,28.0,3494.0,566.0,1391.0,522.0,5.3637,214700.0,INLAND +-117.75,34.12,25.0,5411.0,998.0,2243.0,1019.0,4.3148,240700.0,INLAND +-117.74,34.1,26.0,2723.0,604.0,1847.0,498.0,2.6779,136000.0,INLAND +-117.74,34.1,29.0,2742.0,488.0,2477.0,532.0,3.5072,121900.0,INLAND +-117.75,34.1,21.0,8069.0,2174.0,4369.0,2036.0,3.2756,156800.0,INLAND +-117.71,34.12,20.0,11250.0,1893.0,4952.0,1859.0,5.6785,239500.0,INLAND +-117.73,34.12,26.0,6459.0,894.0,2487.0,885.0,6.2089,261800.0,INLAND +-117.71,34.1,41.0,555.0,130.0,1492.0,123.0,2.2813,125000.0,INLAND +-117.71,34.1,52.0,567.0,152.0,2688.0,126.0,1.875,212500.0,INLAND +-117.72,34.1,52.0,2867.0,496.0,978.0,513.0,3.1477,291200.0,INLAND +-117.72,34.1,32.0,3241.0,895.0,1592.0,810.0,2.4952,181800.0,INLAND +-117.72,34.1,46.0,2477.0,458.0,1034.0,455.0,5.5,289700.0,INLAND +-117.73,34.1,37.0,3457.0,,1344.0,530.0,5.8891,226000.0,INLAND +-117.71,34.09,36.0,2637.0,476.0,1385.0,483.0,4.1739,158700.0,INLAND +-117.71,34.08,26.0,2744.0,494.0,1411.0,465.0,4.2639,154200.0,INLAND +-117.72,34.09,36.0,1473.0,328.0,785.0,299.0,3.2566,151800.0,INLAND +-117.72,34.09,33.0,4979.0,934.0,2575.0,874.0,3.7958,152500.0,INLAND +-117.73,34.09,30.0,2345.0,496.0,1897.0,454.0,2.4375,112100.0,INLAND +-117.73,34.09,36.0,1543.0,297.0,1355.0,303.0,3.5313,117800.0,INLAND +-117.73,34.08,33.0,1350.0,265.0,1251.0,257.0,2.9063,115200.0,INLAND +-117.74,34.09,30.0,3199.0,591.0,2192.0,563.0,3.4871,136400.0,INLAND +-117.75,34.08,33.0,2824.0,523.0,1797.0,493.0,3.6359,135100.0,INLAND +-117.75,34.08,33.0,1067.0,194.0,600.0,201.0,4.0368,139100.0,INLAND +-117.75,34.09,36.0,3094.0,556.0,1672.0,545.0,4.2143,146900.0,INLAND +-117.76,34.08,37.0,2263.0,502.0,1677.0,522.0,2.9388,139200.0,INLAND +-117.77,34.08,27.0,5929.0,932.0,2817.0,828.0,6.0434,214800.0,INLAND +-117.77,34.07,36.0,2922.0,652.0,2392.0,629.0,2.8661,124000.0,INLAND +-117.77,34.07,29.0,2976.0,662.0,2452.0,633.0,3.0638,113600.0,INLAND +-117.75,34.07,52.0,1548.0,348.0,1131.0,343.0,2.63,127300.0,INLAND +-117.76,34.07,51.0,1538.0,394.0,1173.0,388.0,2.3156,109800.0,INLAND +-117.76,34.07,48.0,1157.0,247.0,677.0,218.0,2.8594,127200.0,INLAND +-117.76,34.06,33.0,1831.0,486.0,1625.0,472.0,1.9937,103600.0,INLAND +-117.76,34.06,47.0,508.0,108.0,384.0,86.0,1.9583,92600.0,INLAND +-117.77,34.06,27.0,2178.0,629.0,2379.0,591.0,1.9766,108000.0,INLAND +-117.78,34.07,18.0,3610.0,772.0,2899.0,765.0,3.9784,113500.0,INLAND +-117.78,34.06,25.0,1712.0,491.0,1807.0,478.0,2.2258,114800.0,INLAND +-117.79,34.07,33.0,1694.0,333.0,1689.0,301.0,3.7583,116300.0,INLAND +-117.79,34.07,34.0,975.0,192.0,870.0,183.0,3.7933,116100.0,INLAND +-117.78,34.06,33.0,1056.0,272.0,964.0,300.0,2.4464,128700.0,INLAND +-117.78,34.05,39.0,2933.0,590.0,1886.0,550.0,3.9224,131300.0,INLAND +-117.8,34.05,5.0,4536.0,1178.0,2485.0,909.0,4.1118,125900.0,<1H OCEAN +-117.8,34.06,34.0,1081.0,205.0,1325.0,252.0,3.6298,108500.0,INLAND +-117.82,34.05,21.0,4031.0,923.0,2558.0,834.0,3.1641,117300.0,<1H OCEAN +-117.76,34.06,30.0,1700.0,504.0,1719.0,459.0,2.227,91900.0,INLAND +-117.76,34.05,36.0,2910.0,819.0,3055.0,782.0,1.9029,98000.0,INLAND +-117.75,34.05,35.0,1293.0,339.0,1494.0,312.0,1.6645,93300.0,INLAND +-117.76,34.05,36.0,3839.0,1004.0,4711.0,942.0,2.3859,116200.0,INLAND +-117.74,34.08,35.0,1613.0,298.0,911.0,293.0,3.4398,134300.0,INLAND +-117.74,34.07,42.0,2504.0,553.0,1550.0,509.0,3.0294,135700.0,INLAND +-117.74,34.06,48.0,2438.0,599.0,1508.0,548.0,2.8983,129200.0,INLAND +-117.74,34.07,52.0,1868.0,316.0,947.0,328.0,4.2415,140100.0,INLAND +-117.75,34.07,52.0,1279.0,213.0,444.0,204.0,5.2269,161000.0,INLAND +-117.75,34.07,52.0,2550.0,586.0,1246.0,576.0,1.6006,146200.0,INLAND +-117.72,34.08,34.0,2742.0,491.0,1761.0,496.0,3.2481,128800.0,INLAND +-117.72,34.07,33.0,4100.0,740.0,2580.0,730.0,3.7321,134200.0,INLAND +-117.73,34.08,28.0,5173.0,1069.0,3502.0,954.0,3.8438,130800.0,INLAND +-117.73,34.07,34.0,4038.0,725.0,2716.0,759.0,4.1339,135000.0,INLAND +-117.72,34.06,32.0,2209.0,654.0,1718.0,569.0,1.9643,113200.0,INLAND +-117.73,34.06,34.0,344.0,108.0,315.0,119.0,3.1786,117800.0,INLAND +-117.73,34.06,51.0,498.0,115.0,368.0,112.0,1.4063,98800.0,INLAND +-117.73,34.07,33.0,1921.0,489.0,1430.0,467.0,2.3406,122600.0,INLAND +-117.73,34.07,33.0,1025.0,261.0,854.0,269.0,2.2596,119400.0,INLAND +-117.73,34.05,36.0,975.0,243.0,809.0,233.0,2.8929,118100.0,INLAND +-117.73,34.05,28.0,2758.0,771.0,2877.0,694.0,2.0734,113300.0,INLAND +-117.74,34.05,30.0,1185.0,317.0,1466.0,302.0,2.625,94300.0,INLAND +-117.74,34.05,29.0,2452.0,700.0,3029.0,665.0,2.1354,110700.0,INLAND +-117.74,34.05,27.0,852.0,237.0,1024.0,221.0,2.1141,110900.0,INLAND +-117.75,34.05,46.0,1480.0,358.0,1511.0,348.0,1.9718,110600.0,INLAND +-117.73,34.04,26.0,3827.0,814.0,3367.0,810.0,3.15,129700.0,INLAND +-117.73,34.03,42.0,1967.0,378.0,1459.0,348.0,3.0375,118100.0,INLAND +-117.74,34.02,33.0,2318.0,464.0,1904.0,451.0,3.7454,116400.0,INLAND +-117.74,34.04,27.0,2215.0,440.0,1987.0,449.0,3.0429,129600.0,INLAND +-117.74,34.03,27.0,3623.0,809.0,3712.0,754.0,3.4609,123300.0,INLAND +-117.75,34.04,22.0,2948.0,636.0,2600.0,602.0,3.125,113600.0,INLAND +-117.76,34.04,34.0,1914.0,,1564.0,328.0,2.8347,115800.0,INLAND +-117.76,34.04,36.0,2242.0,448.0,2052.0,447.0,3.4464,113000.0,INLAND +-117.85,34.0,26.0,2712.0,402.0,1389.0,377.0,5.6513,227900.0,<1H OCEAN +-117.86,33.99,10.0,17820.0,2812.0,8686.0,2666.0,6.3875,310700.0,<1H OCEAN +-117.8,34.03,25.0,4240.0,643.0,1885.0,637.0,6.2384,247600.0,<1H OCEAN +-117.78,34.03,8.0,32054.0,5290.0,15507.0,5050.0,6.0191,253900.0,<1H OCEAN +-117.83,34.01,16.0,9446.0,1650.0,4911.0,1534.0,5.0111,212900.0,<1H OCEAN +-117.8,34.02,23.0,3351.0,591.0,1535.0,522.0,5.0869,230600.0,<1H OCEAN +-117.81,34.01,12.0,9197.0,1642.0,4332.0,1554.0,4.9589,282100.0,<1H OCEAN +-117.79,34.02,5.0,18690.0,2862.0,9427.0,2777.0,6.4266,315600.0,<1H OCEAN +-117.84,34.0,26.0,797.0,117.0,383.0,114.0,6.8758,253800.0,<1H OCEAN +-117.83,33.99,14.0,17527.0,2751.0,8380.0,2676.0,6.2734,267000.0,<1H OCEAN +-117.84,33.98,26.0,3638.0,557.0,1993.0,593.0,6.1076,221200.0,<1H OCEAN +-117.83,33.97,11.0,21533.0,3078.0,9671.0,2890.0,7.0329,368300.0,<1H OCEAN +-117.87,34.04,7.0,27700.0,4179.0,15037.0,4072.0,6.6288,339700.0,<1H OCEAN +-117.86,34.02,19.0,6300.0,937.0,3671.0,943.0,5.9716,262100.0,<1H OCEAN +-117.86,34.01,16.0,4632.0,,3038.0,727.0,5.1762,264400.0,<1H OCEAN +-117.87,34.02,16.0,3552.0,575.0,2120.0,573.0,6.4333,271500.0,<1H OCEAN +-117.84,34.04,4.0,9959.0,1544.0,4904.0,1429.0,6.9754,402500.0,<1H OCEAN +-117.85,34.06,24.0,3128.0,497.0,1406.0,472.0,7.5286,462700.0,<1H OCEAN +-117.85,34.08,23.0,1160.0,166.0,467.0,178.0,8.105,386200.0,<1H OCEAN +-117.85,34.07,32.0,761.0,101.0,295.0,95.0,11.1077,500001.0,<1H OCEAN +-117.86,34.08,31.0,2524.0,349.0,1003.0,343.0,7.5196,380900.0,<1H OCEAN +-117.87,34.08,33.0,4518.0,716.0,2037.0,764.0,5.6015,267200.0,<1H OCEAN +-117.87,34.07,21.0,4723.0,882.0,2210.0,768.0,3.8167,258700.0,<1H OCEAN +-117.85,34.1,22.0,5179.0,944.0,2315.0,884.0,4.51,189900.0,<1H OCEAN +-117.86,34.09,29.0,3855.0,585.0,2205.0,609.0,5.5496,218200.0,<1H OCEAN +-117.85,34.09,16.0,4556.0,639.0,2066.0,651.0,6.4667,263900.0,<1H OCEAN +-117.86,34.09,26.0,3408.0,542.0,1664.0,543.0,6.1498,239100.0,<1H OCEAN +-117.87,34.1,25.0,2208.0,477.0,1084.0,424.0,3.775,191700.0,<1H OCEAN +-117.87,34.09,31.0,1484.0,327.0,927.0,317.0,3.6484,189600.0,<1H OCEAN +-117.88,34.1,32.0,3357.0,621.0,1696.0,604.0,4.2685,216600.0,<1H OCEAN +-117.89,34.09,36.0,1811.0,320.0,1005.0,332.0,5.5629,188300.0,<1H OCEAN +-117.87,34.09,36.0,1267.0,191.0,640.0,200.0,5.2405,220000.0,<1H OCEAN +-117.87,34.08,33.0,3630.0,800.0,2257.0,796.0,3.2469,206900.0,<1H OCEAN +-117.88,34.09,29.0,3416.0,790.0,2223.0,728.0,3.5109,186000.0,<1H OCEAN +-117.86,34.1,23.0,2535.0,490.0,1327.0,466.0,3.5977,180600.0,<1H OCEAN +-117.86,34.1,29.0,1185.0,197.0,588.0,196.0,5.0832,196900.0,<1H OCEAN +-117.87,34.1,15.0,6409.0,1363.0,3359.0,1267.0,3.875,173300.0,<1H OCEAN +-117.84,34.1,17.0,7836.0,1624.0,4419.0,1526.0,3.8465,180700.0,<1H OCEAN +-117.85,34.11,27.0,1748.0,403.0,985.0,416.0,3.1133,180600.0,INLAND +-117.87,34.12,33.0,2059.0,361.0,1073.0,339.0,4.2454,183800.0,<1H OCEAN +-117.88,34.12,33.0,1485.0,274.0,1006.0,258.0,5.1708,158500.0,<1H OCEAN +-117.88,34.12,34.0,912.0,165.0,522.0,150.0,4.0417,178000.0,<1H OCEAN +-117.87,34.12,34.0,1004.0,220.0,772.0,217.0,3.8571,174500.0,<1H OCEAN +-117.87,34.11,23.0,4066.0,819.0,2105.0,737.0,4.6556,199600.0,<1H OCEAN +-117.87,34.11,34.0,1324.0,211.0,799.0,228.0,4.5234,192200.0,<1H OCEAN +-117.88,34.11,30.0,3082.0,602.0,2008.0,619.0,4.1411,182700.0,<1H OCEAN +-117.89,34.12,35.0,1470.0,241.0,885.0,246.0,4.9239,168800.0,<1H OCEAN +-117.88,34.12,35.0,1574.0,276.0,1088.0,289.0,4.0938,165300.0,<1H OCEAN +-117.89,34.11,36.0,806.0,147.0,446.0,153.0,4.5221,151300.0,<1H OCEAN +-117.88,34.11,18.0,2923.0,670.0,1751.0,656.0,3.2383,157000.0,<1H OCEAN +-117.89,34.12,35.0,1447.0,272.0,1224.0,268.0,3.9934,141900.0,<1H OCEAN +-117.89,34.12,35.0,1566.0,321.0,1396.0,317.0,4.05,141300.0,<1H OCEAN +-117.89,34.11,27.0,2434.0,535.0,1623.0,498.0,3.6875,140200.0,<1H OCEAN +-117.9,34.11,37.0,1286.0,255.0,1047.0,249.0,4.2019,140100.0,<1H OCEAN +-117.88,34.13,25.0,2559.0,654.0,1674.0,623.0,2.8547,155600.0,<1H OCEAN +-117.88,34.12,36.0,2029.0,351.0,1327.0,364.0,4.1836,164300.0,<1H OCEAN +-117.89,34.13,34.0,2159.0,386.0,1443.0,385.0,4.1995,147400.0,<1H OCEAN +-117.9,34.13,25.0,3076.0,856.0,2868.0,752.0,2.6619,117600.0,<1H OCEAN +-117.9,34.13,32.0,1640.0,391.0,1312.0,358.0,2.6292,136100.0,<1H OCEAN +-117.9,34.13,5.0,1126.0,316.0,819.0,311.0,1.5,139800.0,<1H OCEAN +-117.9,34.13,37.0,1801.0,422.0,1564.0,425.0,3.1597,133000.0,<1H OCEAN +-117.9,34.12,33.0,1788.0,456.0,1787.0,361.0,2.6629,124100.0,<1H OCEAN +-117.9,34.12,33.0,1555.0,361.0,1571.0,386.0,4.0529,138200.0,<1H OCEAN +-117.9,34.12,35.0,957.0,194.0,804.0,221.0,3.3322,151400.0,<1H OCEAN +-117.91,34.13,34.0,1540.0,328.0,1037.0,317.0,2.2132,138500.0,<1H OCEAN +-117.92,34.13,42.0,1762.0,398.0,1526.0,365.0,2.8643,132600.0,INLAND +-117.91,34.12,41.0,2673.0,578.0,2259.0,592.0,3.7846,145500.0,<1H OCEAN +-117.91,34.12,33.0,1391.0,309.0,1038.0,298.0,4.1944,149500.0,<1H OCEAN +-117.92,34.12,32.0,2552.0,576.0,2161.0,548.0,2.9459,144400.0,<1H OCEAN +-117.93,34.12,36.0,294.0,67.0,266.0,80.0,3.5385,134400.0,INLAND +-117.9,34.11,23.0,4776.0,1316.0,4797.0,1187.0,2.1667,142600.0,<1H OCEAN +-117.91,34.11,20.0,3158.0,684.0,2396.0,713.0,3.525,153000.0,<1H OCEAN +-117.92,34.11,24.0,2838.0,695.0,2151.0,645.0,3.2202,126200.0,<1H OCEAN +-117.94,34.1,31.0,1239.0,254.0,929.0,244.0,3.3625,153400.0,<1H OCEAN +-117.97,34.11,18.0,123.0,28.0,121.0,26.0,3.0417,137500.0,INLAND +-117.99,34.08,11.0,2399.0,527.0,2307.0,531.0,3.5625,141000.0,INLAND +-117.99,34.07,31.0,1507.0,369.0,1548.0,347.0,3.4327,147200.0,INLAND +-117.98,34.07,15.0,3543.0,888.0,3131.0,823.0,3.0184,139400.0,INLAND +-117.98,34.07,28.0,441.0,106.0,504.0,108.0,2.9107,152500.0,INLAND +-117.99,34.06,32.0,2491.0,616.0,2660.0,595.0,2.564,145800.0,INLAND +-118.0,34.07,34.0,1696.0,456.0,1609.0,426.0,2.25,138500.0,INLAND +-117.99,34.07,35.0,1681.0,360.0,1648.0,373.0,2.4911,145900.0,INLAND +-117.99,34.08,35.0,1032.0,207.0,954.0,191.0,2.8906,134800.0,INLAND +-117.97,34.08,8.0,2027.0,480.0,1781.0,447.0,3.0806,142400.0,INLAND +-117.97,34.08,30.0,2227.0,474.0,1961.0,481.0,3.3261,164100.0,INLAND +-117.96,34.07,32.0,2910.0,709.0,2583.0,670.0,3.7736,158400.0,<1H OCEAN +-117.97,34.07,20.0,2063.0,496.0,1573.0,468.0,3.2,157100.0,<1H OCEAN +-117.97,34.07,22.0,1438.0,364.0,1325.0,335.0,2.7802,162500.0,<1H OCEAN +-117.98,34.08,17.0,3640.0,830.0,3537.0,807.0,3.4784,152200.0,INLAND +-117.98,34.1,22.0,5661.0,1209.0,5389.0,1178.0,3.7727,159700.0,INLAND +-117.98,34.09,31.0,3073.0,617.0,2640.0,594.0,3.5,161300.0,INLAND +-117.97,34.09,27.0,3569.0,761.0,3339.0,762.0,4.1304,160500.0,INLAND +-117.95,34.11,29.0,1986.0,448.0,2013.0,432.0,3.1034,140800.0,INLAND +-117.96,34.1,35.0,4036.0,904.0,3878.0,846.0,3.2957,141600.0,INLAND +-117.97,34.1,33.0,1558.0,316.0,1600.0,338.0,2.9712,143900.0,INLAND +-117.97,34.1,26.0,1399.0,277.0,1285.0,276.0,4.0,160100.0,INLAND +-117.96,34.09,30.0,2686.0,613.0,2477.0,573.0,3.4427,160800.0,INLAND +-117.96,34.09,6.0,1954.0,534.0,1584.0,496.0,3.1621,131000.0,INLAND +-117.96,34.1,30.0,2775.0,657.0,2847.0,642.0,3.2266,141800.0,INLAND +-117.97,34.09,31.0,2779.0,639.0,2259.0,670.0,3.4032,143400.0,INLAND +-117.95,34.09,21.0,2215.0,484.0,1792.0,419.0,2.8375,166500.0,<1H OCEAN +-117.95,34.08,34.0,2278.0,476.0,1728.0,448.0,3.125,154100.0,<1H OCEAN +-117.95,34.09,18.0,1179.0,324.0,1296.0,331.0,2.851,140600.0,<1H OCEAN +-117.96,34.08,39.0,1076.0,338.0,1242.0,332.0,2.2679,151800.0,<1H OCEAN +-117.96,34.08,33.0,4151.0,850.0,3563.0,848.0,3.1912,159900.0,<1H OCEAN +-117.96,34.08,28.0,2831.0,552.0,2330.0,557.0,3.9741,173100.0,<1H OCEAN +-117.94,34.09,21.0,2707.0,675.0,1742.0,626.0,2.1062,176700.0,<1H OCEAN +-117.94,34.08,32.0,2704.0,514.0,1669.0,497.0,4.4653,195400.0,<1H OCEAN +-117.94,34.08,34.0,1970.0,476.0,1269.0,406.0,4.064,201200.0,<1H OCEAN +-117.94,34.08,35.0,2393.0,417.0,1336.0,418.0,4.87,187700.0,<1H OCEAN +-117.95,34.08,37.0,1137.0,203.0,672.0,226.0,3.2969,189000.0,<1H OCEAN +-117.95,34.07,37.0,1987.0,399.0,1279.0,378.0,4.1172,176500.0,<1H OCEAN +-117.93,34.09,34.0,2192.0,431.0,1376.0,428.0,3.9861,163900.0,<1H OCEAN +-117.93,34.09,35.0,782.0,153.0,499.0,163.0,4.2062,161300.0,<1H OCEAN +-117.93,34.09,35.0,1891.0,353.0,1093.0,382.0,4.0167,165500.0,<1H OCEAN +-117.93,34.09,37.0,1185.0,225.0,769.0,235.0,4.4625,154200.0,<1H OCEAN +-117.92,34.08,36.0,1285.0,228.0,679.0,231.0,3.8705,191900.0,<1H OCEAN +-117.92,34.08,35.0,2108.0,408.0,1257.0,414.0,4.1312,185200.0,<1H OCEAN +-117.93,34.07,34.0,1409.0,305.0,819.0,273.0,3.3977,188800.0,<1H OCEAN +-117.93,34.08,36.0,1371.0,246.0,806.0,241.0,4.5078,187100.0,<1H OCEAN +-117.93,34.08,35.0,689.0,128.0,379.0,128.0,3.9583,206000.0,<1H OCEAN +-117.93,34.08,36.0,1597.0,285.0,901.0,272.0,4.3947,197000.0,<1H OCEAN +-117.93,34.08,36.0,1788.0,317.0,1139.0,320.0,4.125,185800.0,<1H OCEAN +-117.91,34.08,33.0,2325.0,452.0,1170.0,445.0,3.6625,217100.0,<1H OCEAN +-117.91,34.08,35.0,1443.0,266.0,861.0,262.0,3.5795,186900.0,<1H OCEAN +-117.92,34.08,36.0,1479.0,251.0,741.0,245.0,4.2986,189600.0,<1H OCEAN +-117.92,34.08,35.0,1860.0,323.0,1011.0,305.0,3.5536,207000.0,<1H OCEAN +-117.92,34.08,35.0,1897.0,311.0,965.0,323.0,5.7039,199400.0,<1H OCEAN +-117.91,34.1,28.0,3694.0,722.0,1999.0,718.0,3.2813,181100.0,<1H OCEAN +-117.91,34.09,20.0,4327.0,1037.0,2296.0,963.0,3.0441,185400.0,<1H OCEAN +-117.92,34.09,35.0,1810.0,318.0,1164.0,332.0,5.0123,165700.0,<1H OCEAN +-117.92,34.1,33.0,1921.0,397.0,1492.0,393.0,4.375,150500.0,<1H OCEAN +-117.9,34.1,31.0,3007.0,653.0,1766.0,616.0,3.7083,166000.0,<1H OCEAN +-117.91,34.1,35.0,2746.0,478.0,1779.0,501.0,4.25,166700.0,<1H OCEAN +-117.92,34.1,35.0,2994.0,603.0,1933.0,561.0,4.0052,160700.0,<1H OCEAN +-117.89,34.1,27.0,3341.0,728.0,1762.0,679.0,2.9437,180400.0,<1H OCEAN +-117.89,34.1,35.0,3185.0,544.0,1858.0,564.0,3.8304,175900.0,<1H OCEAN +-117.89,34.1,34.0,2048.0,411.0,1456.0,416.0,3.125,168600.0,<1H OCEAN +-117.9,34.1,35.0,2739.0,475.0,1481.0,483.0,4.5655,176600.0,<1H OCEAN +-117.9,34.09,34.0,1562.0,272.0,825.0,266.0,4.125,220800.0,<1H OCEAN +-117.9,34.08,32.0,2068.0,356.0,976.0,370.0,5.212,201200.0,<1H OCEAN +-117.89,34.09,37.0,1055.0,280.0,538.0,206.0,2.4167,181300.0,<1H OCEAN +-117.89,34.09,35.0,1205.0,330.0,583.0,319.0,2.3971,188900.0,<1H OCEAN +-117.89,34.09,37.0,1813.0,394.0,1100.0,375.0,3.4453,176700.0,<1H OCEAN +-117.9,34.09,39.0,1726.0,333.0,892.0,335.0,4.3409,191800.0,<1H OCEAN +-117.88,34.08,30.0,6132.0,1538.0,3147.0,1449.0,2.7763,187800.0,<1H OCEAN +-117.89,34.08,35.0,1711.0,335.0,825.0,356.0,3.5,215600.0,<1H OCEAN +-117.89,34.08,25.0,2115.0,489.0,1107.0,477.0,3.1949,207400.0,<1H OCEAN +-117.89,34.07,32.0,2374.0,450.0,1580.0,427.0,3.8837,200300.0,<1H OCEAN +-117.9,34.08,32.0,5482.0,1251.0,3426.0,1117.0,3.2943,204400.0,<1H OCEAN +-117.87,34.06,25.0,3652.0,470.0,1525.0,484.0,10.1248,428500.0,<1H OCEAN +-117.88,34.06,23.0,6689.0,1124.0,3081.0,1047.0,5.9254,491200.0,<1H OCEAN +-117.9,34.06,35.0,1313.0,194.0,599.0,209.0,7.5,287200.0,<1H OCEAN +-117.9,34.06,33.0,1701.0,290.0,831.0,275.0,5.4469,274700.0,<1H OCEAN +-117.9,34.06,33.0,1330.0,209.0,578.0,192.0,5.6406,266200.0,<1H OCEAN +-117.89,34.07,35.0,1439.0,261.0,804.0,271.0,3.9808,188600.0,<1H OCEAN +-117.9,34.07,35.0,1646.0,294.0,1056.0,280.0,3.055,172000.0,<1H OCEAN +-117.89,34.07,35.0,834.0,137.0,392.0,123.0,4.5179,218800.0,<1H OCEAN +-117.9,34.06,34.0,2956.0,469.0,1488.0,464.0,5.3664,268300.0,<1H OCEAN +-117.9,34.07,36.0,1009.0,164.0,466.0,149.0,5.8519,249400.0,<1H OCEAN +-117.91,34.07,36.0,1390.0,270.0,887.0,266.0,5.0897,189000.0,<1H OCEAN +-117.91,34.07,33.0,2938.0,561.0,1519.0,549.0,4.5594,204200.0,<1H OCEAN +-117.92,34.06,34.0,2819.0,609.0,1718.0,558.0,3.5547,197600.0,<1H OCEAN +-117.92,34.07,36.0,1057.0,207.0,658.0,207.0,4.7708,191700.0,<1H OCEAN +-117.92,34.07,29.0,1699.0,399.0,1052.0,411.0,3.2122,195500.0,<1H OCEAN +-117.91,34.06,29.0,3250.0,521.0,1382.0,513.0,5.112,218300.0,<1H OCEAN +-117.91,34.05,35.0,3189.0,,1727.0,500.0,5.0758,211100.0,<1H OCEAN +-117.92,34.06,35.0,2894.0,467.0,1420.0,479.0,5.184,224900.0,<1H OCEAN +-117.93,34.06,37.0,1505.0,262.0,798.0,259.0,5.4635,202100.0,<1H OCEAN +-117.93,34.06,35.0,1022.0,183.0,628.0,187.0,3.9375,187500.0,<1H OCEAN +-117.93,34.05,36.0,1340.0,221.0,848.0,244.0,4.1731,205100.0,<1H OCEAN +-117.93,34.05,32.0,3055.0,623.0,1902.0,565.0,4.2926,190700.0,<1H OCEAN +-117.92,34.07,38.0,175.0,22.0,129.0,20.0,9.7066,182500.0,<1H OCEAN +-117.93,34.06,28.0,3342.0,688.0,2210.0,647.0,3.4596,202800.0,<1H OCEAN +-117.95,34.05,34.0,1428.0,227.0,890.0,249.0,5.8722,204800.0,<1H OCEAN +-117.94,34.06,32.0,3418.0,662.0,2003.0,622.0,4.0333,210200.0,<1H OCEAN +-117.94,34.06,34.0,1921.0,422.0,1230.0,447.0,3.6648,193900.0,<1H OCEAN +-117.93,34.07,36.0,1207.0,209.0,683.0,213.0,5.3559,207300.0,<1H OCEAN +-117.94,34.07,25.0,1814.0,404.0,1187.0,363.0,3.3523,170800.0,<1H OCEAN +-117.95,34.07,37.0,1375.0,260.0,951.0,272.0,3.2083,195200.0,<1H OCEAN +-117.95,34.06,32.0,2252.0,415.0,1370.0,411.0,4.6312,184800.0,<1H OCEAN +-117.96,34.07,35.0,2819.0,529.0,1508.0,485.0,4.6118,191700.0,<1H OCEAN +-117.96,34.06,34.0,2226.0,381.0,1464.0,365.0,4.4102,183200.0,<1H OCEAN +-117.96,34.06,31.0,2017.0,462.0,1462.0,457.0,2.067,167300.0,<1H OCEAN +-117.97,34.05,33.0,1452.0,268.0,1274.0,278.0,3.6563,162700.0,<1H OCEAN +-117.97,34.06,34.0,3580.0,684.0,2786.0,636.0,4.0469,166800.0,<1H OCEAN +-117.98,34.06,33.0,1353.0,228.0,1079.0,237.0,4.5417,160300.0,<1H OCEAN +-117.97,34.06,31.0,2516.0,,2194.0,497.0,3.2413,155500.0,<1H OCEAN +-117.98,34.06,36.0,2391.0,407.0,1967.0,398.0,4.0274,160700.0,<1H OCEAN +-117.98,34.05,35.0,2342.0,426.0,2176.0,416.0,3.7454,156900.0,<1H OCEAN +-117.99,34.05,35.0,1792.0,317.0,1441.0,306.0,3.7917,151100.0,<1H OCEAN +-117.97,34.05,33.0,2028.0,422.0,1727.0,371.0,2.8438,157600.0,<1H OCEAN +-117.97,34.05,36.0,931.0,160.0,746.0,201.0,3.1667,158000.0,<1H OCEAN +-117.97,34.05,36.0,1299.0,206.0,763.0,216.0,3.5179,161400.0,<1H OCEAN +-117.97,34.05,34.0,2050.0,495.0,1832.0,465.0,2.8333,155700.0,<1H OCEAN +-117.98,34.05,33.0,1560.0,315.0,1467.0,313.0,4.1429,159800.0,<1H OCEAN +-117.98,34.04,34.0,2547.0,537.0,2108.0,498.0,3.4722,154600.0,<1H OCEAN +-117.97,34.04,32.0,1507.0,295.0,1326.0,324.0,4.119,163300.0,<1H OCEAN +-117.97,34.04,28.0,1686.0,417.0,1355.0,388.0,2.5192,157300.0,<1H OCEAN +-117.96,34.03,35.0,2093.0,,1755.0,403.0,3.4115,150400.0,<1H OCEAN +-117.96,34.03,35.0,1623.0,331.0,1462.0,312.0,3.9803,152600.0,<1H OCEAN +-117.95,34.03,33.0,1453.0,326.0,1609.0,319.0,3.7578,155800.0,<1H OCEAN +-117.95,34.03,35.0,804.0,159.0,727.0,179.0,2.7361,145700.0,<1H OCEAN +-117.96,34.05,35.0,1254.0,263.0,1092.0,268.0,4.6364,163100.0,<1H OCEAN +-117.96,34.05,36.0,1475.0,270.0,1149.0,284.0,3.0904,158600.0,<1H OCEAN +-117.95,34.05,35.0,1309.0,276.0,1113.0,253.0,4.375,156500.0,<1H OCEAN +-117.95,34.04,36.0,1044.0,200.0,982.0,205.0,4.7679,153900.0,<1H OCEAN +-117.96,34.04,35.0,1141.0,212.0,924.0,212.0,3.1591,148300.0,<1H OCEAN +-117.96,34.04,33.0,1458.0,268.0,1115.0,257.0,4.7955,158100.0,<1H OCEAN +-117.96,34.04,34.0,1381.0,265.0,1020.0,268.0,4.025,146900.0,<1H OCEAN +-117.96,34.05,32.0,1993.0,388.0,1385.0,380.0,3.7258,181900.0,<1H OCEAN +-117.94,34.05,34.0,1729.0,324.0,1341.0,324.0,3.7708,163500.0,<1H OCEAN +-117.94,34.04,36.0,1431.0,354.0,1367.0,334.0,3.5592,160200.0,<1H OCEAN +-117.94,34.04,34.0,1403.0,274.0,977.0,257.0,3.8409,163000.0,<1H OCEAN +-117.94,34.05,34.0,1519.0,304.0,1262.0,300.0,3.3409,161200.0,<1H OCEAN +-117.95,34.05,31.0,2349.0,539.0,2028.0,521.0,3.494,154500.0,<1H OCEAN +-117.94,34.04,33.0,1493.0,331.0,1571.0,354.0,3.8864,158900.0,<1H OCEAN +-117.95,34.04,27.0,2610.0,846.0,2296.0,750.0,2.274,150800.0,<1H OCEAN +-117.94,34.03,35.0,1499.0,289.0,1112.0,268.0,3.83,149000.0,<1H OCEAN +-117.94,34.03,35.0,1375.0,249.0,1015.0,239.0,4.0521,151800.0,<1H OCEAN +-117.95,34.03,33.0,1782.0,394.0,1517.0,376.0,3.3389,157900.0,<1H OCEAN +-117.93,34.01,23.0,3188.0,836.0,3883.0,840.0,2.1863,157600.0,<1H OCEAN +-117.93,34.01,33.0,1733.0,361.0,1757.0,375.0,4.2266,153800.0,<1H OCEAN +-117.94,34.02,27.0,5026.0,955.0,3899.0,930.0,3.871,162900.0,<1H OCEAN +-117.95,34.02,19.0,1129.0,258.0,900.0,228.0,3.875,135600.0,<1H OCEAN +-117.95,34.02,22.0,1919.0,411.0,1203.0,363.0,4.2578,144100.0,<1H OCEAN +-117.92,34.03,35.0,1341.0,233.0,898.0,216.0,4.1118,157300.0,<1H OCEAN +-117.92,34.03,32.0,1819.0,375.0,1728.0,375.0,3.975,162400.0,<1H OCEAN +-117.92,34.03,35.0,1469.0,306.0,1285.0,308.0,3.9219,159500.0,<1H OCEAN +-117.93,34.03,35.0,2160.0,399.0,1694.0,403.0,3.8581,163100.0,<1H OCEAN +-117.93,34.03,30.0,2246.0,446.0,1837.0,431.0,4.7917,164500.0,<1H OCEAN +-117.93,34.04,23.0,6361.0,1168.0,4580.0,1109.0,4.9342,181000.0,<1H OCEAN +-117.93,34.04,30.0,1336.0,239.0,905.0,253.0,4.8854,178100.0,<1H OCEAN +-117.9,34.04,15.0,11989.0,2185.0,6652.0,2081.0,4.5554,278300.0,<1H OCEAN +-117.9,34.05,33.0,629.0,76.0,253.0,75.0,7.6286,330400.0,<1H OCEAN +-117.91,34.04,15.0,8749.0,1761.0,5278.0,1691.0,4.6324,168800.0,<1H OCEAN +-117.92,34.05,36.0,2241.0,419.0,1743.0,448.0,4.6587,161900.0,<1H OCEAN +-117.88,34.01,16.0,6756.0,1332.0,4429.0,1299.0,4.7589,178200.0,<1H OCEAN +-117.88,34.0,21.0,5459.0,1086.0,3394.0,1087.0,3.6308,192100.0,<1H OCEAN +-117.89,34.01,23.0,4535.0,955.0,3881.0,930.0,3.6275,154100.0,<1H OCEAN +-117.9,34.01,27.0,1702.0,381.0,2091.0,352.0,3.7917,131100.0,<1H OCEAN +-117.9,34.01,27.0,2383.0,472.0,2079.0,494.0,3.9702,141400.0,<1H OCEAN +-117.91,34.02,17.0,5973.0,1384.0,4349.0,1229.0,3.2799,199300.0,<1H OCEAN +-117.9,34.02,15.0,14058.0,2486.0,8997.0,2497.0,5.0704,226200.0,<1H OCEAN +-117.91,34.02,22.0,6269.0,,5587.0,1251.0,3.8201,136200.0,<1H OCEAN +-117.92,34.01,35.0,3055.0,634.0,3738.0,615.0,3.375,127200.0,<1H OCEAN +-117.98,34.04,29.0,1468.0,310.0,1390.0,276.0,3.75,190600.0,<1H OCEAN +-117.96,34.02,33.0,349.0,124.0,460.0,83.0,2.375,133300.0,<1H OCEAN +-117.98,34.03,21.0,797.0,162.0,484.0,166.0,2.625,191100.0,<1H OCEAN +-117.9,33.99,18.0,8076.0,1789.0,5325.0,1707.0,3.443,171900.0,<1H OCEAN +-117.92,34.0,36.0,116.0,30.0,193.0,35.0,3.8125,136300.0,<1H OCEAN +-117.88,34.0,32.0,265.0,51.0,170.0,50.0,3.9375,187500.0,<1H OCEAN +-117.89,33.99,22.0,3272.0,618.0,1784.0,591.0,4.0324,211300.0,<1H OCEAN +-117.87,33.99,21.0,2837.0,515.0,2031.0,555.0,4.9271,209700.0,<1H OCEAN +-118.01,34.05,37.0,682.0,172.0,813.0,173.0,3.8125,138000.0,<1H OCEAN +-117.99,34.04,30.0,4468.0,959.0,4027.0,938.0,3.185,168300.0,<1H OCEAN +-118.02,34.04,27.0,5640.0,1001.0,3538.0,978.0,5.065,215400.0,<1H OCEAN +-118.0,34.03,25.0,6909.0,1154.0,3912.0,1121.0,5.257,226100.0,<1H OCEAN +-117.98,34.02,32.0,2945.0,651.0,2044.0,652.0,3.1979,183900.0,<1H OCEAN +-117.98,34.02,33.0,3512.0,632.0,1971.0,598.0,4.4653,193200.0,<1H OCEAN +-117.98,34.01,27.0,2643.0,418.0,1344.0,381.0,5.7057,262100.0,<1H OCEAN +-117.99,34.0,26.0,2988.0,397.0,1371.0,415.0,6.6988,382500.0,<1H OCEAN +-118.02,34.02,21.0,5992.0,986.0,2647.0,969.0,5.2405,302400.0,<1H OCEAN +-117.97,34.01,33.0,3530.0,700.0,2959.0,679.0,3.7459,152900.0,<1H OCEAN +-117.97,34.01,33.0,2006.0,381.0,1410.0,346.0,3.7083,165500.0,<1H OCEAN +-117.97,34.0,28.0,1983.0,375.0,1407.0,367.0,3.8319,179000.0,<1H OCEAN +-117.97,33.99,22.0,5284.0,982.0,2613.0,932.0,4.7332,289900.0,<1H OCEAN +-117.98,34.0,22.0,3632.0,538.0,1968.0,566.0,6.019,324900.0,<1H OCEAN +-117.98,33.99,26.0,3343.0,455.0,1429.0,457.0,7.0778,334300.0,<1H OCEAN +-117.98,33.98,27.0,2275.0,346.0,1039.0,333.0,6.2217,333500.0,<1H OCEAN +-117.99,33.98,18.0,8399.0,1144.0,3727.0,1107.0,6.9695,360400.0,<1H OCEAN +-117.95,34.0,34.0,2376.0,468.0,1858.0,449.0,4.1328,176300.0,<1H OCEAN +-117.96,34.0,33.0,5462.0,952.0,3527.0,914.0,4.4038,186700.0,<1H OCEAN +-117.96,34.0,34.0,2777.0,540.0,1954.0,522.0,4.5163,183800.0,<1H OCEAN +-117.92,33.98,10.0,16414.0,2919.0,8907.0,2714.0,6.1552,362500.0,<1H OCEAN +-117.95,33.98,15.0,16042.0,2602.0,7732.0,2552.0,5.6716,330400.0,<1H OCEAN +-117.94,33.99,18.0,6100.0,1018.0,3112.0,982.0,4.9932,284000.0,<1H OCEAN +-117.95,33.99,15.0,3978.0,692.0,2418.0,665.0,5.0142,269900.0,<1H OCEAN +-117.95,33.99,24.0,1219.0,177.0,610.0,185.0,6.7978,325000.0,<1H OCEAN +-117.95,33.99,25.0,1075.0,138.0,451.0,132.0,6.8492,332200.0,<1H OCEAN +-117.96,33.99,25.0,1348.0,210.0,660.0,200.0,5.2852,297600.0,<1H OCEAN +-117.96,33.99,25.0,2799.0,388.0,1348.0,389.0,6.2517,311100.0,<1H OCEAN +-117.97,33.99,23.0,3335.0,570.0,1560.0,555.0,5.7268,300300.0,<1H OCEAN +-117.96,33.98,25.0,1259.0,184.0,599.0,170.0,5.7407,302200.0,<1H OCEAN +-117.88,33.96,16.0,19059.0,3079.0,10988.0,3061.0,5.5469,265200.0,<1H OCEAN +-117.89,33.98,5.0,3088.0,711.0,1415.0,641.0,2.5125,184500.0,<1H OCEAN +-117.9,33.98,20.0,9893.0,2283.0,7228.0,2159.0,3.253,186700.0,<1H OCEAN +-117.9,33.97,23.0,7353.0,1255.0,4014.0,1124.0,5.4155,213200.0,<1H OCEAN +-117.75,34.06,52.0,1171.0,318.0,1126.0,276.0,1.9762,105800.0,INLAND +-117.75,34.06,52.0,62.0,9.0,44.0,16.0,0.4999,112500.0,INLAND +-117.74,34.06,4.0,1391.0,506.0,727.0,369.0,1.4722,137500.0,INLAND +-117.75,34.05,27.0,437.0,108.0,469.0,97.0,1.7206,107500.0,INLAND +-117.75,34.05,37.0,378.0,92.0,503.0,103.0,2.1908,94600.0,INLAND +-117.75,34.06,44.0,477.0,135.0,502.0,117.0,2.0156,112500.0,INLAND +-117.75,34.06,52.0,24.0,6.0,46.0,7.0,1.625,67500.0,INLAND +-117.94,34.15,33.0,859.0,144.0,421.0,138.0,4.4821,220100.0,INLAND +-117.95,34.16,17.0,7116.0,1089.0,3538.0,1083.0,6.2654,273800.0,INLAND +-117.94,34.14,33.0,1620.0,283.0,868.0,275.0,5.411,219400.0,INLAND +-117.95,34.14,13.0,3859.0,710.0,2283.0,759.0,4.5594,184500.0,INLAND +-117.95,34.14,33.0,1943.0,440.0,1526.0,353.0,3.038,137500.0,INLAND +-117.96,34.14,27.0,2221.0,542.0,1328.0,523.0,2.5275,151700.0,INLAND +-117.96,34.14,33.0,1994.0,405.0,993.0,403.0,3.766,163900.0,INLAND +-117.96,34.14,9.0,907.0,207.0,619.0,194.0,3.9464,179600.0,INLAND +-117.97,34.14,15.0,3595.0,964.0,1839.0,877.0,2.6014,150300.0,INLAND +-117.97,34.14,33.0,1328.0,348.0,903.0,329.0,3.1094,136000.0,INLAND +-117.97,34.13,42.0,683.0,127.0,541.0,138.0,3.4375,151700.0,INLAND +-117.98,34.14,24.0,1596.0,388.0,1329.0,352.0,3.0417,148000.0,INLAND +-117.97,34.13,33.0,2038.0,473.0,1546.0,469.0,3.4777,144500.0,INLAND +-117.98,34.13,37.0,1447.0,309.0,1279.0,290.0,4.0083,142900.0,INLAND +-117.98,34.13,29.0,2110.0,460.0,1890.0,448.0,3.6806,130500.0,INLAND +-117.97,34.15,33.0,2474.0,472.0,1268.0,437.0,6.4576,500001.0,INLAND +-117.97,34.17,35.0,5005.0,848.0,2112.0,813.0,4.9968,295000.0,INLAND +-118.0,34.16,42.0,1020.0,156.0,398.0,157.0,6.101,311800.0,INLAND +-118.01,34.16,47.0,1745.0,270.0,753.0,275.0,5.532,318500.0,INLAND +-117.99,34.18,38.0,2981.0,432.0,1063.0,437.0,6.5254,365000.0,INLAND +-117.99,34.16,40.0,3838.0,696.0,1851.0,674.0,4.2407,262000.0,INLAND +-118.0,34.16,52.0,1354.0,227.0,531.0,206.0,4.8059,270600.0,INLAND +-118.0,34.15,48.0,3436.0,673.0,1540.0,648.0,4.275,256800.0,INLAND +-118.01,34.15,52.0,2234.0,472.0,986.0,439.0,3.9125,265500.0,INLAND +-118.02,34.15,44.0,2419.0,437.0,1045.0,432.0,3.875,280800.0,INLAND +-118.02,34.17,32.0,3868.0,548.0,1558.0,528.0,9.4667,500001.0,INLAND +-118.03,34.16,36.0,1640.0,239.0,693.0,253.0,6.6888,500001.0,INLAND +-118.03,34.15,43.0,1694.0,283.0,674.0,267.0,4.1797,486800.0,INLAND +-118.02,34.15,44.0,2267.0,426.0,980.0,372.0,3.6,307400.0,INLAND +-118.06,34.17,38.0,2726.0,398.0,1059.0,380.0,7.2419,410400.0,INLAND +-118.05,34.17,45.0,2535.0,455.0,1036.0,437.0,5.0482,388900.0,INLAND +-118.04,34.17,52.0,1885.0,401.0,764.0,373.0,4.0385,265700.0,INLAND +-118.04,34.18,37.0,3134.0,532.0,1220.0,508.0,5.2865,455400.0,INLAND +-118.04,34.16,38.0,1594.0,249.0,633.0,247.0,5.9582,350700.0,INLAND +-118.05,34.16,36.0,3908.0,732.0,1688.0,725.0,4.5625,376800.0,INLAND +-118.05,34.16,41.0,3320.0,713.0,1236.0,659.0,3.5694,278600.0,INLAND +-118.06,34.16,46.0,1467.0,298.0,816.0,267.0,3.6705,286500.0,INLAND +-118.06,34.16,34.0,2297.0,419.0,909.0,412.0,4.8214,362500.0,INLAND +-118.07,34.16,35.0,3585.0,671.0,1401.0,623.0,4.125,330000.0,INLAND +-118.03,34.16,36.0,1401.0,218.0,667.0,225.0,7.1615,484700.0,INLAND +-118.03,34.16,39.0,2731.0,366.0,1034.0,338.0,9.8098,500001.0,INLAND +-118.05,34.15,32.0,5131.0,665.0,1877.0,622.0,8.2004,500001.0,INLAND +-118.06,34.15,37.0,1980.0,226.0,697.0,226.0,15.0001,500001.0,INLAND +-118.05,34.14,39.0,2125.0,295.0,862.0,303.0,8.9728,500001.0,INLAND +-118.06,34.13,40.0,4307.0,918.0,1769.0,845.0,3.6341,391500.0,INLAND +-118.06,34.14,42.0,2461.0,379.0,1179.0,360.0,7.0315,437300.0,INLAND +-118.06,34.14,40.0,2662.0,379.0,1151.0,387.0,8.4889,500001.0,INLAND +-118.03,34.14,44.0,1446.0,250.0,721.0,243.0,4.7308,352200.0,INLAND +-118.04,34.13,22.0,3359.0,643.0,1227.0,588.0,4.645,276200.0,INLAND +-118.04,34.15,34.0,1523.0,311.0,676.0,295.0,3.3621,377200.0,INLAND +-118.04,34.13,35.0,249.0,31.0,268.0,29.0,15.0001,500001.0,INLAND +-118.05,34.13,23.0,3264.0,729.0,1475.0,668.0,3.735,218300.0,INLAND +-118.06,34.13,28.0,12139.0,2873.0,5359.0,2731.0,3.292,227300.0,INLAND +-118.02,34.14,34.0,1077.0,257.0,478.0,199.0,2.6316,252800.0,INLAND +-118.02,34.13,32.0,3308.0,718.0,1803.0,667.0,3.9464,273600.0,INLAND +-118.03,34.14,31.0,4353.0,1117.0,2338.0,1037.0,3.0727,242600.0,INLAND +-118.01,34.13,36.0,1332.0,217.0,648.0,203.0,4.7159,365900.0,INLAND +-118.02,34.13,33.0,2874.0,458.0,1239.0,431.0,5.2329,430900.0,INLAND +-118.02,34.13,34.0,1966.0,319.0,980.0,297.0,7.7307,429000.0,INLAND +-118.03,34.13,33.0,2352.0,373.0,995.0,359.0,4.9583,445700.0,INLAND +-118.02,34.12,37.0,2250.0,360.0,989.0,329.0,6.1536,366000.0,INLAND +-118.02,34.11,35.0,2454.0,458.0,1110.0,435.0,3.8029,414800.0,INLAND +-118.02,34.12,36.0,1471.0,246.0,751.0,230.0,5.4555,395100.0,INLAND +-118.02,34.12,38.0,1778.0,288.0,870.0,281.0,6.5784,408500.0,INLAND +-118.03,34.11,34.0,2837.0,460.0,1344.0,458.0,6.5722,437400.0,INLAND +-118.01,34.14,20.0,3350.0,831.0,1816.0,744.0,2.8352,161700.0,INLAND +-118.01,34.14,23.0,3425.0,754.0,2202.0,729.0,3.52,187300.0,INLAND +-118.02,34.14,31.0,6854.0,1578.0,4131.0,1524.0,3.5878,222800.0,INLAND +-117.99,34.15,44.0,2492.0,611.0,1951.0,596.0,3.1304,185600.0,INLAND +-118.0,34.15,43.0,2583.0,633.0,1544.0,617.0,2.5417,178300.0,INLAND +-118.01,34.15,32.0,6597.0,1579.0,3689.0,1459.0,3.2377,184100.0,INLAND +-117.98,34.14,27.0,6341.0,1289.0,2899.0,1192.0,3.6336,235200.0,INLAND +-117.99,34.14,30.0,2346.0,,1988.0,474.0,2.5625,153000.0,INLAND +-118.0,34.13,24.0,2584.0,520.0,1869.0,503.0,3.2841,167000.0,INLAND +-118.0,34.14,31.0,1298.0,431.0,1131.0,425.0,1.0548,178100.0,INLAND +-118.0,34.14,39.0,1302.0,303.0,800.0,291.0,3.2723,166900.0,INLAND +-118.0,34.13,35.0,1005.0,224.0,742.0,221.0,3.5481,158100.0,INLAND +-117.99,34.13,37.0,1568.0,371.0,1618.0,350.0,2.9605,129400.0,INLAND +-117.99,34.12,37.0,1527.0,331.0,1504.0,324.0,3.2857,130100.0,INLAND +-117.99,34.12,35.0,1040.0,231.0,1040.0,242.0,2.5395,139200.0,INLAND +-118.0,34.12,37.0,1340.0,325.0,928.0,333.0,3.9219,175000.0,INLAND +-118.0,34.12,42.0,870.0,170.0,546.0,164.0,4.625,173800.0,INLAND +-118.01,34.13,38.0,3374.0,671.0,1906.0,640.0,4.0729,212300.0,INLAND +-118.01,34.12,43.0,1185.0,207.0,657.0,198.0,4.5491,214800.0,INLAND +-118.01,34.12,32.0,1937.0,332.0,922.0,340.0,3.94,278400.0,INLAND +-118.01,34.11,32.0,1978.0,536.0,826.0,470.0,2.5114,212200.0,INLAND +-118.01,34.11,43.0,1858.0,345.0,1054.0,329.0,3.5625,211600.0,INLAND +-118.01,34.11,36.0,1722.0,320.0,794.0,322.0,4.2132,212200.0,INLAND +-118.02,34.1,36.0,1928.0,361.0,1008.0,368.0,4.733,233700.0,INLAND +-118.02,34.1,36.0,452.0,80.0,248.0,83.0,1.9688,226000.0,INLAND +-118.02,34.11,39.0,1504.0,280.0,718.0,261.0,4.625,219000.0,INLAND +-118.03,34.1,38.0,2301.0,416.0,1079.0,398.0,4.4236,233600.0,INLAND +-118.03,34.1,30.0,2773.0,634.0,1376.0,540.0,2.7857,201700.0,INLAND +-118.03,34.1,31.0,2647.0,539.0,1473.0,520.0,3.94,223900.0,INLAND +-118.03,34.1,32.0,2668.0,609.0,1512.0,541.0,2.9422,233100.0,INLAND +-118.03,34.11,38.0,2076.0,361.0,988.0,332.0,5.9175,416900.0,INLAND +-118.04,34.11,44.0,773.0,120.0,405.0,121.0,5.0,447100.0,INLAND +-118.04,34.11,37.0,1275.0,177.0,598.0,174.0,7.1885,500001.0,INLAND +-118.05,34.11,42.0,3677.0,627.0,1779.0,622.0,5.1509,426500.0,INLAND +-118.04,34.13,39.0,2485.0,382.0,1072.0,342.0,6.0878,430200.0,INLAND +-118.04,34.12,39.0,2522.0,380.0,1113.0,357.0,5.2249,445200.0,INLAND +-118.04,34.12,44.0,2007.0,288.0,921.0,307.0,6.5989,500001.0,INLAND +-118.04,34.12,30.0,2170.0,318.0,984.0,309.0,5.6916,500001.0,INLAND +-118.05,34.12,20.0,5218.0,959.0,2302.0,850.0,3.55,476700.0,INLAND +-118.06,34.12,25.0,3891.0,848.0,1848.0,759.0,3.6639,248100.0,INLAND +-118.06,34.12,34.0,2941.0,558.0,1660.0,576.0,4.5667,271500.0,INLAND +-118.06,34.12,35.0,2053.0,369.0,1044.0,375.0,4.1875,275400.0,INLAND +-118.05,34.11,48.0,1410.0,304.0,677.0,274.0,3.2596,272400.0,INLAND +-118.06,34.11,36.0,2178.0,485.0,914.0,412.0,2.7656,239500.0,INLAND +-118.06,34.11,39.0,2603.0,547.0,1196.0,487.0,3.0854,248700.0,INLAND +-118.04,34.1,39.0,2302.0,412.0,1590.0,406.0,4.8017,273800.0,INLAND +-118.05,34.1,36.0,1606.0,318.0,889.0,294.0,4.7931,272600.0,INLAND +-118.06,34.1,38.0,3229.0,636.0,1599.0,609.0,3.8646,257100.0,<1H OCEAN +-118.06,34.1,42.0,1576.0,313.0,697.0,282.0,4.3523,283600.0,<1H OCEAN +-118.06,34.1,43.0,1833.0,355.0,786.0,334.0,3.5761,256700.0,<1H OCEAN +-118.06,34.1,38.0,2438.0,442.0,1308.0,461.0,3.6995,260100.0,<1H OCEAN +-118.04,34.1,38.0,2317.0,451.0,1155.0,426.0,4.1488,235300.0,INLAND +-118.04,34.09,34.0,2597.0,461.0,1542.0,470.0,4.6211,248900.0,INLAND +-118.05,34.1,30.0,2143.0,427.0,1107.0,416.0,4.2321,252200.0,INLAND +-118.05,34.1,42.0,2065.0,404.0,1313.0,402.0,4.0179,274300.0,INLAND +-118.06,34.09,38.0,2036.0,388.0,1096.0,371.0,4.0625,262500.0,<1H OCEAN +-118.06,34.1,38.0,1960.0,330.0,874.0,308.0,4.8594,265900.0,<1H OCEAN +-118.06,34.09,36.0,1239.0,238.0,717.0,237.0,3.244,258100.0,<1H OCEAN +-118.06,34.09,40.0,1975.0,389.0,1116.0,378.0,4.2898,251600.0,<1H OCEAN +-118.07,34.09,40.0,1745.0,370.0,1293.0,357.0,2.5474,198100.0,<1H OCEAN +-118.07,34.09,35.0,1224.0,267.0,887.0,276.0,4.0987,202400.0,<1H OCEAN +-118.08,34.09,33.0,2557.0,578.0,1715.0,530.0,2.9196,208800.0,<1H OCEAN +-118.08,34.09,34.0,1823.0,457.0,1485.0,401.0,3.7222,207200.0,<1H OCEAN +-118.08,34.09,32.0,3214.0,718.0,2316.0,751.0,3.7066,206800.0,<1H OCEAN +-118.04,34.09,34.0,2001.0,388.0,1461.0,397.0,3.8304,183000.0,INLAND +-118.04,34.08,35.0,1148.0,258.0,975.0,253.0,4.037,173300.0,<1H OCEAN +-118.04,34.09,32.0,1339.0,334.0,817.0,349.0,2.8333,186000.0,INLAND +-118.05,34.09,23.0,602.0,135.0,409.0,123.0,3.5268,146400.0,<1H OCEAN +-118.02,34.09,32.0,1747.0,399.0,1199.0,402.0,3.4286,191800.0,INLAND +-118.02,34.08,29.0,2741.0,667.0,2449.0,677.0,3.6944,175200.0,INLAND +-118.02,34.09,24.0,2080.0,514.0,1976.0,478.0,2.6917,170000.0,INLAND +-118.03,34.09,29.0,1219.0,338.0,1152.0,323.0,2.8029,180900.0,INLAND +-118.03,34.08,32.0,1780.0,484.0,1732.0,454.0,2.4464,169600.0,INLAND +-118.0,34.1,34.0,2249.0,460.0,1544.0,441.0,3.4005,176300.0,INLAND +-118.01,34.09,29.0,3402.0,747.0,2331.0,690.0,3.6094,179200.0,INLAND +-118.01,34.1,27.0,2424.0,542.0,1713.0,557.0,3.8085,181400.0,INLAND +-118.01,34.1,35.0,2120.0,412.0,1375.0,405.0,3.4609,166300.0,INLAND +-118.0,34.08,29.0,2003.0,401.0,1520.0,364.0,3.994,195300.0,INLAND +-118.01,34.08,30.0,2281.0,522.0,1969.0,500.0,3.6531,166300.0,INLAND +-118.02,34.08,28.0,2769.0,631.0,2452.0,581.0,2.6071,175900.0,INLAND +-118.01,34.08,35.0,1852.0,358.0,1414.0,347.0,4.275,173600.0,INLAND +-118.01,34.09,32.0,1613.0,361.0,1283.0,404.0,3.1944,181700.0,INLAND +-118.0,34.08,23.0,1627.0,318.0,1279.0,289.0,4.6467,185100.0,INLAND +-118.02,34.08,31.0,2402.0,632.0,2830.0,603.0,2.3333,164200.0,INLAND +-118.03,34.08,37.0,775.0,179.0,726.0,183.0,3.25,159200.0,INLAND +-118.03,34.08,42.0,1597.0,373.0,1311.0,352.0,2.9688,162800.0,INLAND +-118.04,34.07,52.0,177.0,59.0,269.0,75.0,2.3611,131300.0,<1H OCEAN +-118.05,34.08,34.0,572.0,154.0,752.0,182.0,2.0433,138800.0,<1H OCEAN +-118.05,34.08,25.0,4909.0,1422.0,4983.0,1293.0,2.7254,143500.0,<1H OCEAN +-118.05,34.08,30.0,1572.0,427.0,1857.0,428.0,2.4914,159200.0,<1H OCEAN +-118.06,34.08,37.0,778.0,205.0,850.0,198.0,2.5119,180500.0,<1H OCEAN +-118.06,34.08,34.0,1197.0,260.0,942.0,245.0,3.4202,189100.0,<1H OCEAN +-118.06,34.08,42.0,1988.0,402.0,1239.0,402.0,3.2569,201500.0,<1H OCEAN +-118.07,34.08,38.0,2462.0,553.0,1843.0,538.0,3.2312,211900.0,<1H OCEAN +-118.07,34.07,19.0,1554.0,393.0,1427.0,370.0,3.125,207100.0,<1H OCEAN +-118.07,34.08,37.0,1210.0,252.0,733.0,243.0,2.806,214600.0,<1H OCEAN +-118.05,34.07,32.0,4492.0,1075.0,4119.0,1035.0,3.2373,183100.0,<1H OCEAN +-118.06,34.07,30.0,2308.0,674.0,3034.0,691.0,2.3929,184400.0,<1H OCEAN +-118.03,34.07,37.0,1091.0,269.0,905.0,242.0,3.1042,152000.0,<1H OCEAN +-118.03,34.06,36.0,1018.0,305.0,1307.0,292.0,2.1453,162100.0,<1H OCEAN +-118.04,34.07,39.0,1382.0,315.0,1090.0,308.0,3.8125,174000.0,<1H OCEAN +-118.04,34.07,39.0,2451.0,649.0,2536.0,648.0,2.3098,173100.0,<1H OCEAN +-118.01,34.07,22.0,6311.0,1572.0,6666.0,1456.0,2.9334,182600.0,INLAND +-118.01,34.06,26.0,557.0,153.0,455.0,196.0,2.7721,155400.0,INLAND +-118.01,34.07,24.0,5684.0,1485.0,6626.0,1481.0,2.2559,166800.0,INLAND +-118.02,34.07,21.0,3245.0,959.0,3528.0,887.0,2.3236,156300.0,INLAND +-118.03,34.06,31.0,1513.0,389.0,1396.0,364.0,2.4706,170600.0,<1H OCEAN +-118.03,34.06,24.0,2343.0,834.0,3537.0,824.0,2.1094,135200.0,<1H OCEAN +-118.03,34.06,27.0,2510.0,783.0,3481.0,726.0,2.4875,157800.0,<1H OCEAN +-118.04,34.06,31.0,957.0,295.0,1300.0,287.0,2.1383,153400.0,<1H OCEAN +-118.04,34.06,30.0,2019.0,551.0,2481.0,484.0,3.1875,154200.0,<1H OCEAN +-118.04,34.06,39.0,1258.0,245.0,988.0,228.0,3.2132,176100.0,<1H OCEAN +-118.05,34.06,32.0,2286.0,654.0,2991.0,655.0,2.1781,174500.0,<1H OCEAN +-118.05,34.06,45.0,531.0,164.0,722.0,166.0,2.1406,162500.0,<1H OCEAN +-118.05,34.06,25.0,1022.0,291.0,1570.0,297.0,3.023,142000.0,<1H OCEAN +-118.06,34.06,28.0,2127.0,625.0,3160.0,620.0,2.5763,173900.0,<1H OCEAN +-118.06,34.06,28.0,1778.0,605.0,2184.0,574.0,1.9189,165900.0,<1H OCEAN +-118.07,34.07,31.0,1370.0,284.0,1062.0,277.0,3.5156,199300.0,<1H OCEAN +-118.08,34.07,32.0,4089.0,975.0,3775.0,955.0,3.29,205500.0,<1H OCEAN +-118.07,34.06,34.0,2873.0,718.0,2758.0,699.0,2.5985,168600.0,<1H OCEAN +-118.04,34.05,32.0,1252.0,273.0,1337.0,263.0,2.6579,156800.0,<1H OCEAN +-118.05,34.05,36.0,1084.0,202.0,920.0,199.0,3.7279,162200.0,<1H OCEAN +-118.06,34.04,28.0,1516.0,363.0,1011.0,344.0,2.6288,160300.0,<1H OCEAN +-118.03,34.06,24.0,2469.0,731.0,3818.0,712.0,2.5445,151400.0,<1H OCEAN +-118.04,34.05,34.0,1058.0,230.0,1043.0,229.0,3.0536,137500.0,<1H OCEAN +-118.04,34.04,35.0,1734.0,363.0,1527.0,344.0,3.0,160600.0,<1H OCEAN +-118.04,34.04,32.0,1619.0,323.0,1492.0,342.0,3.5,165100.0,<1H OCEAN +-118.05,34.04,33.0,1348.0,,1098.0,257.0,4.2917,161200.0,<1H OCEAN +-118.06,34.03,36.0,21.0,7.0,21.0,9.0,2.375,175000.0,<1H OCEAN +-118.02,34.06,26.0,2929.0,970.0,3792.0,817.0,2.2577,173800.0,<1H OCEAN +-118.02,34.05,34.0,1610.0,513.0,2050.0,508.0,2.5562,156300.0,<1H OCEAN +-118.03,34.05,36.0,1359.0,317.0,1557.0,370.0,2.7955,157500.0,<1H OCEAN +-118.03,34.05,36.0,1345.0,331.0,1511.0,309.0,3.5129,142300.0,<1H OCEAN +-118.01,34.05,31.0,1135.0,355.0,1717.0,368.0,2.1602,161700.0,<1H OCEAN +-118.02,34.05,28.0,991.0,255.0,1145.0,265.0,2.3611,167000.0,<1H OCEAN +-118.02,34.05,33.0,2464.0,627.0,2932.0,568.0,3.0625,165800.0,<1H OCEAN +-118.02,34.04,28.0,6175.0,1449.0,5041.0,1408.0,2.8821,158100.0,<1H OCEAN +-118.09,34.18,34.0,3113.0,409.0,1139.0,418.0,10.2289,500001.0,INLAND +-118.07,34.17,34.0,4062.0,597.0,1525.0,566.0,7.8588,454800.0,INLAND +-118.07,34.17,36.0,2415.0,394.0,1215.0,413.0,5.5418,326100.0,INLAND +-118.07,34.17,35.0,2142.0,373.0,986.0,374.0,5.7051,326000.0,INLAND +-118.1,34.18,39.0,2321.0,336.0,880.0,339.0,7.7108,450000.0,INLAND +-118.11,34.19,50.0,1430.0,186.0,620.0,201.0,9.532,483300.0,INLAND +-118.12,34.19,52.0,2405.0,299.0,970.0,319.0,8.7835,444100.0,INLAND +-118.11,34.2,36.0,4915.0,725.0,1897.0,700.0,6.827,359400.0,INLAND +-118.13,34.2,46.0,2676.0,427.0,1022.0,395.0,6.4288,295500.0,INLAND +-118.13,34.19,48.0,2539.0,425.0,930.0,364.0,4.7269,303900.0,INLAND +-118.13,34.21,36.0,1449.0,235.0,621.0,210.0,6.1824,274100.0,INLAND +-118.13,34.2,45.0,1213.0,206.0,529.0,231.0,5.6629,234000.0,INLAND +-118.13,34.2,46.0,1271.0,236.0,573.0,210.0,4.9312,240200.0,INLAND +-118.13,34.19,43.0,1621.0,365.0,1015.0,329.0,2.92,242200.0,INLAND +-118.14,34.19,45.0,3595.0,619.0,1686.0,607.0,4.73,201000.0,INLAND +-118.14,34.2,39.0,2569.0,426.0,1282.0,432.0,5.0953,207400.0,INLAND +-118.15,34.2,37.0,1997.0,361.0,1037.0,363.0,3.7932,210300.0,INLAND +-118.15,34.2,52.0,1786.0,306.0,1018.0,322.0,4.1518,182100.0,INLAND +-118.15,34.2,46.0,1505.0,261.0,857.0,269.0,4.5,184200.0,INLAND +-118.15,34.21,34.0,2765.0,515.0,1422.0,438.0,5.4727,238900.0,INLAND +-118.15,34.19,48.0,1854.0,360.0,1126.0,382.0,3.2216,161600.0,<1H OCEAN +-118.15,34.19,47.0,1717.0,314.0,868.0,295.0,3.6094,160700.0,<1H OCEAN +-118.16,34.19,40.0,1840.0,358.0,1218.0,347.0,4.25,177900.0,<1H OCEAN +-118.16,34.2,43.0,1810.0,343.0,988.0,307.0,3.8203,176000.0,<1H OCEAN +-118.18,34.22,40.0,1983.0,298.0,853.0,271.0,5.9845,241700.0,<1H OCEAN +-118.19,34.22,32.0,10626.0,1504.0,4353.0,1482.0,9.8413,500001.0,<1H OCEAN +-118.21,34.22,37.0,2260.0,322.0,941.0,303.0,8.3695,500001.0,<1H OCEAN +-118.18,34.2,44.0,1473.0,250.0,668.0,239.0,8.72,415900.0,<1H OCEAN +-118.19,34.2,41.0,2031.0,294.0,859.0,302.0,7.419,483700.0,<1H OCEAN +-118.19,34.21,41.0,1602.0,228.0,680.0,225.0,6.553,500001.0,<1H OCEAN +-118.2,34.21,40.0,1477.0,228.0,609.0,224.0,7.8375,500001.0,<1H OCEAN +-118.2,34.21,42.0,1493.0,237.0,665.0,224.0,6.7571,443900.0,<1H OCEAN +-118.21,34.21,41.0,1676.0,263.0,757.0,255.0,4.7734,450800.0,<1H OCEAN +-118.22,34.23,34.0,3296.0,483.0,1268.0,478.0,8.4802,500001.0,<1H OCEAN +-118.21,34.22,39.0,3008.0,386.0,1240.0,370.0,9.2463,500001.0,<1H OCEAN +-118.22,34.22,39.0,2686.0,417.0,1094.0,402.0,7.0059,500001.0,<1H OCEAN +-118.23,34.22,37.0,1376.0,237.0,618.0,226.0,5.9771,431800.0,<1H OCEAN +-118.21,34.2,35.0,3646.0,552.0,1409.0,534.0,6.3794,500001.0,<1H OCEAN +-118.2,34.2,44.0,2890.0,438.0,1219.0,429.0,6.987,500001.0,<1H OCEAN +-118.18,34.19,48.0,1371.0,,528.0,155.0,15.0001,500001.0,<1H OCEAN +-118.19,34.19,34.0,2061.0,260.0,825.0,254.0,15.0001,500001.0,<1H OCEAN +-118.2,34.19,38.0,2176.0,266.0,798.0,243.0,15.0001,500001.0,<1H OCEAN +-118.18,34.17,43.0,4269.0,591.0,1467.0,582.0,9.0702,500001.0,<1H OCEAN +-118.18,34.16,34.0,5012.0,746.0,1699.0,715.0,9.4987,500001.0,<1H OCEAN +-118.15,34.18,46.0,2230.0,488.0,1985.0,456.0,2.2328,142100.0,<1H OCEAN +-118.15,34.17,46.0,2553.0,558.0,1740.0,492.0,2.0278,127500.0,<1H OCEAN +-118.16,34.18,44.0,1870.0,389.0,1345.0,391.0,1.8932,136100.0,<1H OCEAN +-118.16,34.18,48.0,568.0,145.0,559.0,135.0,2.4135,135700.0,<1H OCEAN +-118.16,34.17,52.0,1193.0,228.0,703.0,221.0,3.1741,163800.0,<1H OCEAN +-118.17,34.18,44.0,1401.0,246.0,607.0,271.0,2.8472,218800.0,<1H OCEAN +-118.15,34.18,42.0,1521.0,320.0,1118.0,311.0,3.3125,154900.0,<1H OCEAN +-118.16,34.19,42.0,2076.0,462.0,1641.0,436.0,2.2326,149200.0,<1H OCEAN +-118.16,34.19,44.0,2195.0,449.0,1377.0,417.0,3.5887,153500.0,<1H OCEAN +-118.17,34.18,38.0,1280.0,231.0,828.0,237.0,4.375,166700.0,<1H OCEAN +-118.17,34.19,45.0,1790.0,316.0,1035.0,312.0,4.0985,173100.0,<1H OCEAN +-118.13,34.19,42.0,2203.0,412.0,1012.0,377.0,4.0714,234000.0,INLAND +-118.14,34.18,47.0,3457.0,622.0,1700.0,579.0,3.5164,226500.0,<1H OCEAN +-118.14,34.19,49.0,1678.0,277.0,737.0,287.0,3.7222,237000.0,INLAND +-118.15,34.19,38.0,1750.0,411.0,1398.0,409.0,2.3967,163100.0,<1H OCEAN +-118.1,34.18,47.0,2168.0,352.0,902.0,361.0,5.894,300900.0,INLAND +-118.11,34.18,52.0,3571.0,510.0,1434.0,490.0,5.9009,376000.0,INLAND +-118.12,34.18,44.0,2357.0,342.0,891.0,337.0,6.3467,352700.0,INLAND +-118.13,34.18,52.0,3094.0,519.0,1309.0,488.0,6.4223,310900.0,INLAND +-118.1,34.17,46.0,1774.0,315.0,753.0,330.0,4.7241,279600.0,INLAND +-118.1,34.17,48.0,1111.0,229.0,421.0,202.0,3.2813,268100.0,INLAND +-118.11,34.17,50.0,3374.0,598.0,1484.0,569.0,4.99,261600.0,INLAND +-118.11,34.17,46.0,2837.0,592.0,1453.0,549.0,3.1115,234600.0,INLAND +-118.12,34.18,47.0,2344.0,513.0,1537.0,481.0,3.4777,230600.0,INLAND +-118.13,34.18,52.0,1464.0,211.0,603.0,226.0,5.8309,309100.0,INLAND +-118.12,34.17,37.0,2705.0,676.0,1551.0,608.0,2.2692,225000.0,INLAND +-118.12,34.17,52.0,1835.0,330.0,777.0,317.0,3.7159,315400.0,INLAND +-118.13,34.17,52.0,1784.0,368.0,966.0,345.0,3.6094,261500.0,<1H OCEAN +-118.14,34.18,52.0,1700.0,317.0,996.0,329.0,3.9688,175000.0,<1H OCEAN +-118.14,34.17,52.0,2667.0,486.0,1681.0,504.0,4.0524,173100.0,<1H OCEAN +-118.14,34.17,42.0,2757.0,713.0,2112.0,653.0,2.7148,166800.0,<1H OCEAN +-118.14,34.18,50.0,1493.0,326.0,1000.0,323.0,3.3068,154400.0,<1H OCEAN +-118.14,34.17,40.0,1054.0,251.0,1056.0,276.0,2.3,146700.0,<1H OCEAN +-118.15,34.18,45.0,2612.0,664.0,3117.0,584.0,2.3029,148800.0,<1H OCEAN +-118.15,34.16,18.0,1711.0,383.0,1474.0,415.0,1.2891,181300.0,<1H OCEAN +-118.15,34.16,38.0,2471.0,529.0,1661.0,441.0,2.2765,146600.0,<1H OCEAN +-118.16,34.16,44.0,1284.0,278.0,925.0,261.0,1.7321,178400.0,<1H OCEAN +-118.16,34.17,46.0,1508.0,261.0,674.0,255.0,3.5909,155400.0,<1H OCEAN +-118.16,34.16,43.0,1276.0,226.0,545.0,209.0,4.1518,230700.0,<1H OCEAN +-118.16,34.16,52.0,1576.0,239.0,696.0,249.0,6.07,261800.0,<1H OCEAN +-118.16,34.15,19.0,1721.0,290.0,571.0,278.0,6.6031,500001.0,<1H OCEAN +-118.16,34.15,17.0,821.0,163.0,229.0,164.0,7.3715,263000.0,<1H OCEAN +-118.14,34.16,39.0,2776.0,840.0,2546.0,773.0,2.575,153500.0,<1H OCEAN +-118.14,34.15,52.0,407.0,160.0,227.0,148.0,1.5156,187500.0,<1H OCEAN +-118.15,34.15,52.0,275.0,123.0,273.0,111.0,1.1667,500001.0,<1H OCEAN +-118.15,34.16,52.0,1925.0,597.0,2258.0,594.0,1.6921,162500.0,<1H OCEAN +-118.15,34.15,49.0,806.0,199.0,698.0,172.0,2.3654,137500.0,<1H OCEAN +-118.14,34.17,34.0,2384.0,604.0,2073.0,540.0,2.3062,158000.0,<1H OCEAN +-118.14,34.16,30.0,2598.0,757.0,2869.0,769.0,2.1377,142300.0,<1H OCEAN +-118.15,34.16,20.0,2410.0,632.0,2135.0,578.0,1.6887,148600.0,<1H OCEAN +-118.15,34.17,36.0,930.0,280.0,1024.0,300.0,1.0846,146400.0,<1H OCEAN +-118.13,34.17,49.0,1962.0,435.0,1329.0,457.0,3.2898,200000.0,<1H OCEAN +-118.14,34.16,36.0,2973.0,807.0,2846.0,784.0,2.6217,156300.0,<1H OCEAN +-118.14,34.17,52.0,2687.0,600.0,1716.0,544.0,2.7201,205700.0,<1H OCEAN +-118.13,34.16,36.0,2162.0,658.0,1337.0,590.0,2.2095,176700.0,<1H OCEAN +-118.13,34.15,24.0,1125.0,341.0,579.0,321.0,2.8125,141700.0,<1H OCEAN +-118.14,34.15,41.0,1256.0,407.0,855.0,383.0,1.9923,500001.0,<1H OCEAN +-118.14,34.15,17.0,1896.0,674.0,971.0,652.0,0.8438,175000.0,<1H OCEAN +-118.14,34.16,38.0,1843.0,565.0,1449.0,524.0,2.2174,215400.0,<1H OCEAN +-118.12,34.16,30.0,1762.0,416.0,940.0,398.0,2.8631,188600.0,<1H OCEAN +-118.13,34.16,33.0,2682.0,716.0,2050.0,692.0,2.4817,169500.0,<1H OCEAN +-118.13,34.15,18.0,1665.0,477.0,1095.0,390.0,2.6038,155600.0,<1H OCEAN +-118.12,34.15,19.0,557.0,216.0,673.0,212.0,2.1763,168800.0,<1H OCEAN +-118.12,34.15,22.0,1671.0,480.0,1005.0,443.0,3.0119,171400.0,<1H OCEAN +-118.13,34.15,9.0,2099.0,625.0,1252.0,554.0,3.1875,173100.0,<1H OCEAN +-118.13,34.15,28.0,1119.0,334.0,739.0,323.0,2.5903,125000.0,<1H OCEAN +-118.12,34.17,52.0,2948.0,542.0,1363.0,495.0,4.7098,287900.0,INLAND +-118.13,34.16,52.0,1872.0,357.0,984.0,364.0,4.0,250400.0,<1H OCEAN +-118.13,34.16,52.0,1596.0,314.0,1024.0,292.0,3.6719,227900.0,<1H OCEAN +-118.13,34.16,52.0,1787.0,427.0,1107.0,410.0,2.5664,215000.0,<1H OCEAN +-118.09,34.17,36.0,2875.0,552.0,1131.0,458.0,4.3083,269300.0,INLAND +-118.1,34.16,44.0,2795.0,496.0,1235.0,469.0,4.2386,283700.0,INLAND +-118.1,34.17,44.0,4505.0,894.0,2296.0,899.0,3.4811,300500.0,INLAND +-118.12,34.17,52.0,2166.0,483.0,1308.0,467.0,3.0417,222600.0,INLAND +-118.11,34.16,52.0,3158.0,459.0,1229.0,444.0,5.4223,325600.0,INLAND +-118.11,34.16,52.0,2489.0,437.0,1101.0,438.0,4.2065,320300.0,INLAND +-118.11,34.16,52.0,1353.0,274.0,852.0,306.0,3.4583,239900.0,INLAND +-118.11,34.15,40.0,1950.0,509.0,1038.0,438.0,2.6172,196100.0,<1H OCEAN +-118.11,34.15,26.0,2193.0,558.0,1186.0,559.0,3.6474,184100.0,<1H OCEAN +-118.12,34.15,35.0,1760.0,447.0,984.0,384.0,3.4167,198200.0,<1H OCEAN +-118.12,34.16,52.0,2218.0,437.0,1211.0,422.0,5.0237,241900.0,<1H OCEAN +-118.1,34.16,46.0,2863.0,513.0,1412.0,498.0,5.3272,330200.0,INLAND +-118.1,34.15,32.0,978.0,227.0,543.0,211.0,3.0096,199000.0,INLAND +-118.1,34.15,14.0,1442.0,369.0,782.0,343.0,2.7431,177500.0,INLAND +-118.08,34.16,42.0,3490.0,665.0,1713.0,620.0,4.5461,242400.0,INLAND +-118.09,34.15,46.0,271.0,74.0,150.0,55.0,2.2321,237500.0,INLAND +-118.09,34.15,52.0,670.0,141.0,268.0,110.0,3.5568,205000.0,INLAND +-118.09,34.15,49.0,1467.0,259.0,688.0,260.0,4.3452,260100.0,INLAND +-118.09,34.16,45.0,2199.0,358.0,942.0,353.0,5.0393,321100.0,INLAND +-118.07,34.16,39.0,1804.0,265.0,730.0,276.0,6.4761,397500.0,INLAND +-118.07,34.16,35.0,2459.0,438.0,970.0,437.0,4.2143,369400.0,INLAND +-118.07,34.15,45.0,1095.0,237.0,672.0,234.0,3.4087,209200.0,INLAND +-118.07,34.14,42.0,3200.0,685.0,1668.0,628.0,3.375,260400.0,INLAND +-118.08,34.15,28.0,238.0,58.0,142.0,31.0,0.4999,500001.0,INLAND +-118.08,34.14,45.0,2923.0,604.0,1903.0,560.0,3.1729,218700.0,INLAND +-118.08,34.14,52.0,1282.0,189.0,431.0,187.0,6.1159,470800.0,INLAND +-118.08,34.13,46.0,1238.0,147.0,377.0,145.0,8.4546,500001.0,INLAND +-118.08,34.13,35.0,1897.0,279.0,733.0,291.0,7.4185,500001.0,INLAND +-118.08,34.14,42.0,2690.0,589.0,1149.0,535.0,3.88,281100.0,INLAND +-118.09,34.14,40.0,3092.0,549.0,1457.0,536.0,5.3377,373800.0,INLAND +-118.09,34.15,45.0,1345.0,356.0,749.0,327.0,2.8007,210900.0,INLAND +-118.1,34.14,45.0,3066.0,659.0,1287.0,625.0,3.5804,324400.0,<1H OCEAN +-118.11,34.14,52.0,2401.0,332.0,810.0,308.0,6.0948,358700.0,<1H OCEAN +-118.1,34.14,26.0,6262.0,1645.0,3001.0,1505.0,3.6572,213200.0,<1H OCEAN +-118.11,34.14,44.0,3298.0,615.0,1417.0,643.0,4.1324,434800.0,<1H OCEAN +-118.12,34.14,52.0,2337.0,352.0,981.0,328.0,5.8692,490400.0,<1H OCEAN +-118.12,34.14,25.0,3420.0,977.0,1718.0,947.0,3.1033,217900.0,<1H OCEAN +-118.13,34.13,39.0,2099.0,397.0,1500.0,380.0,4.8304,493200.0,<1H OCEAN +-118.13,34.14,23.0,5465.0,1494.0,2511.0,1359.0,3.4531,210900.0,<1H OCEAN +-118.13,34.14,29.0,3559.0,1034.0,1658.0,965.0,3.2643,163900.0,<1H OCEAN +-118.14,34.14,24.0,10239.0,2823.0,4210.0,2565.0,3.6997,225000.0,<1H OCEAN +-118.14,34.14,17.0,3404.0,1011.0,1694.0,949.0,2.9511,282300.0,<1H OCEAN +-118.15,34.14,27.0,1499.0,426.0,755.0,414.0,3.875,258300.0,<1H OCEAN +-118.15,34.14,45.0,543.0,191.0,454.0,181.0,2.3,55000.0,<1H OCEAN +-118.15,34.14,52.0,403.0,117.0,361.0,105.0,1.625,187500.0,<1H OCEAN +-118.16,34.14,27.0,1551.0,254.0,816.0,233.0,8.2435,500001.0,<1H OCEAN +-118.16,34.14,41.0,3039.0,482.0,973.0,446.0,7.4817,500001.0,<1H OCEAN +-118.17,34.14,45.0,2257.0,285.0,759.0,305.0,11.7894,500001.0,<1H OCEAN +-118.18,34.13,44.0,2734.0,415.0,1057.0,424.0,7.9213,477800.0,<1H OCEAN +-118.18,34.13,39.0,2902.0,460.0,1007.0,420.0,6.1953,363000.0,<1H OCEAN +-118.18,34.14,38.0,3039.0,487.0,1131.0,465.0,7.7116,360900.0,<1H OCEAN +-118.15,34.13,30.0,2763.0,520.0,1143.0,465.0,4.7298,500001.0,<1H OCEAN +-118.15,34.13,50.0,2443.0,494.0,947.0,451.0,4.7344,314700.0,<1H OCEAN +-118.16,34.13,36.0,4003.0,647.0,1337.0,631.0,7.723,500001.0,<1H OCEAN +-118.13,34.13,52.0,2826.0,381.0,924.0,365.0,7.9976,500001.0,<1H OCEAN +-118.13,34.12,46.0,3156.0,430.0,1109.0,423.0,10.7397,500001.0,<1H OCEAN +-118.14,34.13,16.0,3569.0,821.0,1505.0,783.0,4.9167,251100.0,<1H OCEAN +-118.14,34.13,49.0,4438.0,803.0,1650.0,741.0,5.1072,479700.0,<1H OCEAN +-118.15,34.13,34.0,824.0,224.0,430.0,213.0,3.6389,215000.0,<1H OCEAN +-118.12,34.13,52.0,2935.0,341.0,975.0,327.0,11.706,500001.0,<1H OCEAN +-118.11,34.12,48.0,2476.0,313.0,900.0,303.0,10.6767,500001.0,<1H OCEAN +-118.11,34.12,52.0,2954.0,371.0,1152.0,347.0,11.5609,500001.0,<1H OCEAN +-118.12,34.12,52.0,2907.0,317.0,956.0,279.0,15.0001,500001.0,<1H OCEAN +-118.12,34.11,52.0,2787.0,353.0,1057.0,364.0,10.2317,500001.0,<1H OCEAN +-118.13,34.11,52.0,2568.0,345.0,1102.0,345.0,9.1373,500001.0,<1H OCEAN +-118.14,34.11,52.0,2742.0,422.0,1153.0,414.0,8.1124,500001.0,<1H OCEAN +-118.1,34.13,44.0,1917.0,265.0,754.0,257.0,12.4237,500001.0,<1H OCEAN +-118.1,34.13,44.0,1745.0,237.0,693.0,248.0,9.7912,500001.0,<1H OCEAN +-118.09,34.12,45.0,2966.0,415.0,1231.0,409.0,7.8347,500001.0,<1H OCEAN +-118.1,34.12,49.0,3783.0,579.0,1601.0,539.0,6.3013,500001.0,<1H OCEAN +-118.1,34.12,50.0,1835.0,231.0,636.0,211.0,11.6471,500001.0,<1H OCEAN +-118.1,34.13,47.0,2234.0,276.0,749.0,260.0,15.0001,500001.0,<1H OCEAN +-118.08,34.13,39.0,788.0,128.0,413.0,139.0,5.9546,396700.0,INLAND +-118.08,34.12,41.0,1598.0,280.0,807.0,282.0,5.5067,325000.0,<1H OCEAN +-118.09,34.12,38.0,2638.0,432.0,1284.0,433.0,5.4536,342700.0,<1H OCEAN +-118.09,34.12,38.0,1713.0,285.0,779.0,286.0,5.6152,359900.0,<1H OCEAN +-118.07,34.13,27.0,3787.0,913.0,1992.0,853.0,3.301,251200.0,INLAND +-118.08,34.13,28.0,4465.0,985.0,2273.0,949.0,3.5671,228500.0,INLAND +-118.07,34.12,30.0,2201.0,559.0,1194.0,531.0,4.1136,279900.0,INLAND +-118.07,34.12,43.0,1554.0,287.0,802.0,277.0,4.2312,272600.0,INLAND +-118.08,34.12,34.0,2921.0,641.0,1541.0,562.0,3.6827,264100.0,<1H OCEAN +-118.08,34.12,27.0,1685.0,341.0,757.0,317.0,4.2434,270500.0,<1H OCEAN +-118.07,34.11,41.0,2869.0,563.0,1627.0,533.0,5.0736,270700.0,<1H OCEAN +-118.07,34.11,47.0,832.0,194.0,419.0,156.0,3.1576,225000.0,<1H OCEAN +-118.08,34.11,42.0,2628.0,525.0,1494.0,523.0,3.9464,257200.0,<1H OCEAN +-118.08,34.11,42.0,1969.0,353.0,927.0,354.0,5.5924,285300.0,<1H OCEAN +-118.08,34.1,32.0,2830.0,645.0,1500.0,527.0,3.0819,214600.0,<1H OCEAN +-118.09,34.11,36.0,2966.0,527.0,1231.0,482.0,4.6442,316800.0,<1H OCEAN +-118.09,34.11,45.0,1883.0,275.0,764.0,289.0,6.5078,414800.0,<1H OCEAN +-118.1,34.1,52.0,1788.0,313.0,792.0,294.0,3.75,280000.0,<1H OCEAN +-118.1,34.11,49.0,3367.0,523.0,1317.0,495.0,6.706,351400.0,<1H OCEAN +-118.11,34.11,50.0,2131.0,294.0,753.0,284.0,6.7099,352200.0,<1H OCEAN +-118.11,34.1,49.0,2812.0,478.0,1329.0,490.0,5.2503,292900.0,<1H OCEAN +-118.12,34.11,48.0,2124.0,319.0,785.0,319.0,5.2131,359600.0,<1H OCEAN +-118.12,34.1,49.0,2057.0,430.0,1103.0,414.0,4.0556,282600.0,<1H OCEAN +-118.12,34.1,34.0,2918.0,555.0,1435.0,568.0,4.2344,306300.0,<1H OCEAN +-118.13,34.1,19.0,2742.0,756.0,1396.0,703.0,2.5663,197500.0,<1H OCEAN +-118.13,34.09,21.0,3862.0,1186.0,2773.0,1102.0,2.7816,188200.0,<1H OCEAN +-118.13,34.1,26.0,3050.0,825.0,2153.0,772.0,3.1103,214100.0,<1H OCEAN +-118.14,34.09,20.0,3447.0,1007.0,2622.0,934.0,2.918,208700.0,<1H OCEAN +-118.13,34.11,45.0,1780.0,289.0,755.0,328.0,4.825,351100.0,<1H OCEAN +-118.13,34.1,24.0,4670.0,1185.0,2478.0,1107.0,3.1975,252400.0,<1H OCEAN +-118.14,34.1,52.0,4061.0,861.0,2290.0,790.0,2.8919,258400.0,<1H OCEAN +-118.14,34.11,52.0,3367.0,545.0,1427.0,535.0,5.2292,444500.0,<1H OCEAN +-118.15,34.1,52.0,4325.0,823.0,1927.0,795.0,3.9485,419100.0,<1H OCEAN +-118.15,34.11,52.0,2375.0,369.0,930.0,351.0,7.4111,469100.0,<1H OCEAN +-118.15,34.11,52.0,1746.0,330.0,704.0,306.0,3.7895,364800.0,<1H OCEAN +-118.15,34.11,52.0,1000.0,192.0,363.0,158.0,4.2981,352800.0,<1H OCEAN +-118.15,34.12,36.0,6119.0,1513.0,2719.0,1402.0,3.8427,319700.0,<1H OCEAN +-118.15,34.12,43.0,1810.0,427.0,742.0,429.0,3.8529,350000.0,<1H OCEAN +-118.15,34.12,52.0,1518.0,344.0,725.0,296.0,3.4018,204500.0,<1H OCEAN +-118.15,34.12,49.0,1789.0,288.0,848.0,311.0,6.0199,500000.0,<1H OCEAN +-118.16,34.12,38.0,2231.0,489.0,940.0,484.0,5.4165,435100.0,<1H OCEAN +-118.17,34.12,37.0,2246.0,481.0,995.0,459.0,4.2944,354700.0,<1H OCEAN +-118.15,34.11,39.0,2618.0,582.0,1314.0,532.0,3.5875,309300.0,<1H OCEAN +-118.15,34.1,39.0,3856.0,867.0,1847.0,830.0,3.4559,364900.0,<1H OCEAN +-118.16,34.11,31.0,5715.0,1154.0,2639.0,1079.0,4.1661,364400.0,<1H OCEAN +-118.16,34.11,48.0,1091.0,236.0,632.0,234.0,3.7235,263600.0,<1H OCEAN +-118.17,34.11,39.0,1758.0,436.0,892.0,447.0,3.6406,278900.0,<1H OCEAN +-118.17,34.11,26.0,4971.0,996.0,2370.0,932.0,4.9676,381400.0,<1H OCEAN +-118.17,34.1,25.0,4444.0,647.0,1922.0,652.0,8.058,477300.0,<1H OCEAN +-118.14,34.1,27.0,4073.0,1013.0,2411.0,933.0,3.108,231000.0,<1H OCEAN +-118.15,34.09,27.0,1935.0,460.0,1456.0,382.0,2.8062,192800.0,<1H OCEAN +-118.15,34.09,52.0,2203.0,430.0,1238.0,403.0,4.4306,225800.0,<1H OCEAN +-118.16,34.09,52.0,1722.0,448.0,1122.0,425.0,3.1204,224000.0,<1H OCEAN +-118.15,34.1,36.0,3514.0,818.0,2277.0,828.0,3.1211,229300.0,<1H OCEAN +-118.15,34.08,44.0,1053.0,251.0,941.0,256.0,3.125,205600.0,<1H OCEAN +-118.15,34.08,48.0,3697.0,816.0,2446.0,787.0,3.3988,199200.0,<1H OCEAN +-118.14,34.09,28.0,4164.0,1127.0,2934.0,1014.0,2.7483,218800.0,<1H OCEAN +-118.14,34.09,38.0,1745.0,457.0,1547.0,460.0,2.85,219000.0,<1H OCEAN +-118.14,34.08,24.0,3988.0,1098.0,2909.0,1034.0,2.7036,170000.0,<1H OCEAN +-118.14,34.08,30.0,1433.0,397.0,1110.0,346.0,2.3464,191700.0,<1H OCEAN +-118.14,34.08,24.0,2999.0,786.0,2937.0,796.0,2.9405,217800.0,<1H OCEAN +-118.14,34.07,52.0,695.0,145.0,523.0,170.0,3.665,220400.0,<1H OCEAN +-118.11,34.1,44.0,2012.0,435.0,1454.0,456.0,3.3229,226600.0,<1H OCEAN +-118.12,34.09,25.0,4870.0,1371.0,3518.0,1296.0,3.2307,188400.0,<1H OCEAN +-118.13,34.09,42.0,700.0,212.0,662.0,210.0,3.0078,191700.0,<1H OCEAN +-118.13,34.09,42.0,2562.0,781.0,1936.0,687.0,2.2214,219000.0,<1H OCEAN +-118.13,34.08,40.0,1931.0,449.0,1367.0,446.0,2.575,228400.0,<1H OCEAN +-118.09,34.1,27.0,6010.0,1532.0,3620.0,1445.0,2.7436,201700.0,<1H OCEAN +-118.1,34.1,41.0,1379.0,315.0,1249.0,309.0,2.6553,183100.0,<1H OCEAN +-118.09,34.09,36.0,1068.0,246.0,949.0,250.0,2.3462,188500.0,<1H OCEAN +-118.1,34.09,44.0,2352.0,484.0,1517.0,463.0,4.2833,258000.0,<1H OCEAN +-118.1,34.1,29.0,1937.0,448.0,1352.0,433.0,3.81,234600.0,<1H OCEAN +-118.11,34.1,20.0,3090.0,802.0,2109.0,738.0,3.3801,192500.0,<1H OCEAN +-118.1,34.1,34.0,2578.0,645.0,1628.0,617.0,2.34,210900.0,<1H OCEAN +-118.07,34.1,34.0,2253.0,522.0,1262.0,511.0,3.4375,259800.0,<1H OCEAN +-118.07,34.09,33.0,2178.0,445.0,1153.0,400.0,3.6083,212000.0,<1H OCEAN +-118.07,34.1,28.0,676.0,177.0,543.0,185.0,3.2361,187500.0,<1H OCEAN +-118.07,34.1,32.0,4275.0,,2812.0,1012.0,3.3512,214100.0,<1H OCEAN +-118.08,34.1,36.0,2679.0,548.0,1605.0,533.0,3.5313,213200.0,<1H OCEAN +-118.09,34.1,40.0,1904.0,393.0,1183.0,364.0,3.6696,210400.0,<1H OCEAN +-118.08,34.08,38.0,1889.0,407.0,1330.0,396.0,3.9219,205200.0,<1H OCEAN +-118.08,34.08,43.0,1716.0,402.0,1343.0,386.0,2.9688,211400.0,<1H OCEAN +-118.09,34.09,40.0,855.0,208.0,745.0,222.0,3.0125,224000.0,<1H OCEAN +-118.09,34.08,34.0,1513.0,384.0,986.0,336.0,2.6901,235600.0,<1H OCEAN +-118.09,34.08,33.0,1430.0,344.0,1165.0,328.0,3.0357,206000.0,<1H OCEAN +-118.09,34.08,42.0,1003.0,236.0,769.0,231.0,3.1607,218300.0,<1H OCEAN +-118.1,34.09,42.0,1460.0,289.0,829.0,273.0,4.875,227300.0,<1H OCEAN +-118.1,34.08,37.0,2894.0,659.0,1977.0,636.0,2.543,208100.0,<1H OCEAN +-118.1,34.08,24.0,4510.0,1296.0,3985.0,1240.0,2.6884,204600.0,<1H OCEAN +-118.1,34.09,46.0,2822.0,525.0,1434.0,520.0,3.8906,238300.0,<1H OCEAN +-118.11,34.08,42.0,3172.0,644.0,1829.0,642.0,3.3966,243200.0,<1H OCEAN +-118.11,34.08,30.0,2350.0,472.0,945.0,467.0,3.3421,201000.0,<1H OCEAN +-118.11,34.08,45.0,1106.0,226.0,779.0,205.0,4.5446,244800.0,<1H OCEAN +-118.11,34.07,46.0,1130.0,229.0,698.0,209.0,5.2719,244400.0,<1H OCEAN +-118.12,34.09,25.0,3603.0,1003.0,2719.0,913.0,2.6981,208000.0,<1H OCEAN +-118.12,34.08,52.0,1437.0,290.0,980.0,282.0,5.3032,245700.0,<1H OCEAN +-118.12,34.08,49.0,1782.0,374.0,1010.0,367.0,3.1583,268200.0,<1H OCEAN +-118.13,34.08,34.0,3848.0,991.0,2814.0,972.0,2.6716,227100.0,<1H OCEAN +-118.12,34.08,35.0,2248.0,,1762.0,622.0,3.0,253900.0,<1H OCEAN +-118.13,34.08,35.0,2517.0,662.0,1883.0,607.0,2.5787,223000.0,<1H OCEAN +-118.12,34.08,36.0,2433.0,585.0,1565.0,563.0,3.2344,234900.0,<1H OCEAN +-118.13,34.07,32.0,1880.0,428.0,1404.0,424.0,3.085,220500.0,<1H OCEAN +-118.12,34.07,45.0,1770.0,423.0,1410.0,389.0,3.0592,212500.0,<1H OCEAN +-118.12,34.07,43.0,1050.0,252.0,820.0,244.0,2.025,215600.0,<1H OCEAN +-118.12,34.06,23.0,1190.0,347.0,965.0,327.0,2.2261,211800.0,<1H OCEAN +-118.13,34.06,17.0,1714.0,572.0,1590.0,568.0,1.1875,183900.0,<1H OCEAN +-118.13,34.07,20.0,2130.0,654.0,1870.0,578.0,2.3664,192200.0,<1H OCEAN +-118.12,34.06,17.0,5137.0,1614.0,4945.0,1535.0,2.4599,181600.0,<1H OCEAN +-118.11,34.07,19.0,3215.0,907.0,3072.0,870.0,2.3393,202300.0,<1H OCEAN +-118.11,34.06,18.0,2609.0,721.0,2221.0,703.0,2.3224,192300.0,<1H OCEAN +-118.14,34.07,42.0,1036.0,199.0,656.0,215.0,4.1902,235000.0,<1H OCEAN +-118.14,34.06,39.0,2390.0,444.0,1246.0,422.0,3.7857,245700.0,<1H OCEAN +-118.14,34.06,37.0,1339.0,258.0,706.0,238.0,4.7569,253800.0,<1H OCEAN +-118.15,34.07,52.0,1983.0,344.0,887.0,331.0,3.2875,234400.0,<1H OCEAN +-118.15,34.07,44.0,1626.0,383.0,1063.0,334.0,2.4348,220700.0,<1H OCEAN +-118.16,34.07,47.0,2994.0,543.0,1651.0,561.0,3.8644,241500.0,<1H OCEAN +-118.16,34.07,42.0,3836.0,777.0,2118.0,754.0,3.6364,254600.0,<1H OCEAN +-118.15,34.07,40.0,1072.0,204.0,940.0,200.0,3.125,242700.0,<1H OCEAN +-118.15,34.06,28.0,3855.0,922.0,2517.0,874.0,3.505,204300.0,<1H OCEAN +-118.16,34.06,25.0,4284.0,741.0,2163.0,701.0,6.1509,315100.0,<1H OCEAN +-118.16,34.06,27.0,1675.0,274.0,785.0,275.0,5.828,301100.0,<1H OCEAN +-118.14,34.05,25.0,5478.0,1136.0,3062.0,1096.0,3.4118,341100.0,<1H OCEAN +-118.15,34.05,31.0,3362.0,799.0,1939.0,754.0,3.5089,305800.0,<1H OCEAN +-118.15,34.05,33.0,3287.0,649.0,1783.0,653.0,3.8472,293300.0,<1H OCEAN +-118.13,34.06,30.0,1692.0,398.0,1130.0,365.0,2.8672,198500.0,<1H OCEAN +-118.14,34.06,27.0,5257.0,1082.0,3496.0,1036.0,3.3906,237200.0,<1H OCEAN +-118.13,34.05,35.0,3229.0,616.0,1879.0,595.0,3.9531,268400.0,<1H OCEAN +-118.14,34.05,39.0,1880.0,367.0,954.0,349.0,3.875,236400.0,<1H OCEAN +-118.12,34.06,35.0,1729.0,438.0,1308.0,412.0,2.5321,197200.0,<1H OCEAN +-118.12,34.06,25.0,1137.0,293.0,800.0,281.0,2.4286,233300.0,<1H OCEAN +-118.12,34.06,25.0,1526.0,388.0,1304.0,378.0,3.1892,214700.0,<1H OCEAN +-118.11,34.06,32.0,1273.0,344.0,1148.0,368.0,2.1061,214700.0,<1H OCEAN +-118.11,34.06,16.0,2416.0,565.0,1750.0,514.0,2.8229,163700.0,<1H OCEAN +-118.11,34.06,14.0,2628.0,668.0,2208.0,574.0,2.9764,160300.0,<1H OCEAN +-118.09,34.07,45.0,593.0,133.0,481.0,128.0,2.5938,199300.0,<1H OCEAN +-118.09,34.07,38.0,1036.0,226.0,1058.0,235.0,3.2578,184200.0,<1H OCEAN +-118.1,34.08,21.0,1349.0,352.0,1188.0,330.0,2.5,182100.0,<1H OCEAN +-118.1,34.07,29.0,1179.0,313.0,1255.0,308.0,2.5964,176800.0,<1H OCEAN +-118.11,34.07,39.0,1270.0,299.0,1073.0,278.0,3.3088,186600.0,<1H OCEAN +-118.1,34.07,36.0,1240.0,349.0,1383.0,338.0,2.4931,170300.0,<1H OCEAN +-118.1,34.07,36.0,3661.0,956.0,3816.0,931.0,2.5104,185000.0,<1H OCEAN +-118.09,34.07,26.0,794.0,182.0,709.0,170.0,3.175,170800.0,<1H OCEAN +-118.1,34.07,33.0,3437.0,1081.0,3817.0,1042.0,2.25,203700.0,<1H OCEAN +-118.09,34.07,45.0,726.0,146.0,568.0,160.0,3.0347,183200.0,<1H OCEAN +-118.09,34.07,31.0,1054.0,252.0,1032.0,258.0,2.3424,188500.0,<1H OCEAN +-118.09,34.06,30.0,1980.0,552.0,2264.0,511.0,2.6094,179400.0,<1H OCEAN +-118.09,34.06,38.0,3230.0,840.0,3485.0,827.0,2.629,171600.0,<1H OCEAN +-118.08,34.04,20.0,5841.0,1146.0,3273.0,1131.0,4.7222,185100.0,<1H OCEAN +-118.09,34.06,31.0,1146.0,289.0,1163.0,258.0,2.2083,185600.0,<1H OCEAN +-118.1,34.06,31.0,2852.0,740.0,3100.0,725.0,2.9524,178800.0,<1H OCEAN +-118.1,34.06,36.0,1463.0,369.0,1492.0,366.0,3.25,179200.0,<1H OCEAN +-118.11,34.06,30.0,1547.0,436.0,1700.0,410.0,2.5488,187500.0,<1H OCEAN +-118.09,34.05,22.0,1764.0,357.0,1379.0,363.0,3.5357,199000.0,<1H OCEAN +-118.1,34.05,31.0,3559.0,734.0,2975.0,715.0,3.756,183300.0,<1H OCEAN +-118.1,34.05,26.0,1495.0,328.0,1296.0,304.0,2.913,152300.0,<1H OCEAN +-118.09,34.04,18.0,5580.0,1369.0,3842.0,1276.0,3.6512,168500.0,<1H OCEAN +-118.09,34.04,24.0,1543.0,257.0,824.0,271.0,6.4385,272600.0,<1H OCEAN +-118.11,34.05,23.0,3436.0,565.0,1729.0,529.0,5.9941,266700.0,<1H OCEAN +-118.11,34.04,28.0,3913.0,696.0,2264.0,697.0,5.2446,258000.0,<1H OCEAN +-118.12,34.05,32.0,3775.0,786.0,2416.0,792.0,3.6625,247600.0,<1H OCEAN +-118.12,34.04,35.0,1038.0,209.0,598.0,190.0,5.9214,254900.0,<1H OCEAN +-118.13,34.04,36.0,1938.0,364.0,1118.0,374.0,3.5833,227300.0,<1H OCEAN +-118.13,34.04,40.0,1444.0,312.0,881.0,303.0,3.1083,220500.0,<1H OCEAN +-118.14,34.03,38.0,1447.0,293.0,1042.0,284.0,4.1375,211500.0,<1H OCEAN +-118.15,34.04,33.0,818.0,195.0,664.0,198.0,2.1944,203300.0,<1H OCEAN +-118.14,34.04,43.0,1949.0,464.0,1216.0,457.0,3.3214,209300.0,<1H OCEAN +-118.14,34.04,40.0,1966.0,391.0,1120.0,362.0,3.7109,198800.0,<1H OCEAN +-118.14,34.04,37.0,1129.0,212.0,509.0,202.0,2.6146,243200.0,<1H OCEAN +-118.11,34.03,36.0,1493.0,316.0,989.0,293.0,3.5272,213700.0,<1H OCEAN +-118.13,34.04,42.0,2205.0,451.0,1392.0,423.0,4.3646,211400.0,<1H OCEAN +-118.12,34.04,34.0,2103.0,427.0,1355.0,434.0,4.5795,235300.0,<1H OCEAN +-118.12,34.04,35.0,1064.0,203.0,608.0,201.0,4.0938,246900.0,<1H OCEAN +-117.93,33.95,31.0,3600.0,468.0,1382.0,435.0,7.4597,500001.0,<1H OCEAN +-117.95,33.95,29.0,4943.0,674.0,1913.0,641.0,6.8189,379300.0,<1H OCEAN +-117.95,33.97,33.0,1113.0,145.0,424.0,137.0,8.3474,500001.0,<1H OCEAN +-117.97,33.96,30.0,4873.0,667.0,1995.0,638.0,7.2472,441900.0,<1H OCEAN +-117.98,33.95,35.0,4055.0,652.0,1758.0,639.0,6.1898,282400.0,<1H OCEAN +-117.98,33.94,36.0,4297.0,717.0,2038.0,700.0,5.2851,258800.0,<1H OCEAN +-117.99,33.95,30.0,2217.0,284.0,851.0,291.0,10.4835,498600.0,<1H OCEAN +-118.0,33.95,35.0,1431.0,210.0,505.0,213.0,6.8109,401000.0,<1H OCEAN +-118.01,33.95,35.0,1755.0,322.0,774.0,290.0,5.0861,296700.0,<1H OCEAN +-118.0,33.96,37.0,2414.0,323.0,878.0,305.0,9.1541,453800.0,<1H OCEAN +-117.99,33.97,18.0,4078.0,484.0,1490.0,482.0,10.8034,500001.0,<1H OCEAN +-118.05,34.02,31.0,40.0,8.0,25.0,7.0,2.125,375000.0,<1H OCEAN +-118.03,34.01,10.0,6531.0,1036.0,2975.0,1018.0,6.2319,403700.0,<1H OCEAN +-118.06,34.02,25.0,3548.0,639.0,2653.0,664.0,5.2557,188800.0,<1H OCEAN +-118.06,34.01,34.0,1962.0,396.0,1488.0,332.0,3.9091,155100.0,<1H OCEAN +-118.07,34.01,38.0,2245.0,444.0,1540.0,419.0,3.7986,171000.0,<1H OCEAN +-118.07,34.01,36.0,1391.0,283.0,1025.0,275.0,3.2375,176800.0,<1H OCEAN +-118.08,34.01,32.0,1973.0,401.0,1322.0,386.0,3.4861,158100.0,<1H OCEAN +-118.07,34.0,42.0,1392.0,351.0,1471.0,348.0,2.63,143800.0,<1H OCEAN +-118.08,34.0,35.0,1188.0,342.0,1373.0,332.0,2.9107,150900.0,<1H OCEAN +-118.08,34.01,34.0,1914.0,549.0,2122.0,529.0,2.5969,150200.0,<1H OCEAN +-118.08,34.02,14.0,3789.0,810.0,2551.0,793.0,2.9321,144200.0,<1H OCEAN +-118.08,34.01,33.0,1091.0,233.0,890.0,226.0,2.7679,176400.0,<1H OCEAN +-118.08,34.01,36.0,1248.0,322.0,1282.0,326.0,3.2031,147600.0,<1H OCEAN +-118.09,34.01,36.0,1465.0,363.0,1538.0,342.0,3.5469,150600.0,<1H OCEAN +-118.09,34.01,42.0,897.0,229.0,1094.0,238.0,2.0729,114100.0,<1H OCEAN +-118.09,34.01,31.0,1108.0,238.0,1151.0,229.0,4.3333,149500.0,<1H OCEAN +-118.09,34.0,36.0,1722.0,353.0,1174.0,335.0,3.045,160600.0,<1H OCEAN +-118.09,34.0,35.0,1580.0,331.0,1290.0,338.0,4.1458,162500.0,<1H OCEAN +-118.09,33.99,34.0,1369.0,270.0,1005.0,272.0,3.692,172600.0,<1H OCEAN +-118.1,33.99,36.0,1529.0,290.0,1271.0,287.0,3.6875,175200.0,<1H OCEAN +-118.1,33.99,35.0,1326.0,272.0,933.0,267.0,3.4306,162500.0,<1H OCEAN +-118.1,33.99,31.0,965.0,217.0,599.0,206.0,2.7202,190300.0,<1H OCEAN +-118.08,33.98,36.0,1492.0,282.0,1041.0,270.0,4.0677,165800.0,<1H OCEAN +-118.08,33.98,39.0,1042.0,221.0,863.0,228.0,3.6033,157800.0,<1H OCEAN +-118.09,33.98,37.0,1270.0,272.0,1092.0,274.0,3.5,160700.0,<1H OCEAN +-118.09,33.99,35.0,2787.0,639.0,1923.0,614.0,3.5757,177900.0,<1H OCEAN +-118.08,33.99,38.0,1683.0,328.0,1369.0,339.0,3.6196,170700.0,<1H OCEAN +-118.08,33.99,37.0,1419.0,310.0,1125.0,296.0,2.5,162000.0,<1H OCEAN +-118.08,33.99,36.0,2024.0,590.0,2028.0,573.0,2.8152,163900.0,<1H OCEAN +-118.08,34.0,32.0,1165.0,358.0,997.0,361.0,0.9817,166300.0,<1H OCEAN +-118.07,33.99,35.0,1625.0,302.0,1134.0,288.0,4.5595,164900.0,<1H OCEAN +-118.07,33.99,41.0,1204.0,252.0,1002.0,248.0,3.0577,163300.0,<1H OCEAN +-118.07,33.99,39.0,552.0,151.0,807.0,168.0,3.25,153300.0,<1H OCEAN +-118.06,33.98,40.0,1723.0,370.0,1221.0,370.0,3.3562,169200.0,<1H OCEAN +-118.06,33.98,40.0,1410.0,255.0,932.0,273.0,4.2206,178000.0,<1H OCEAN +-118.06,33.98,42.0,1342.0,243.0,615.0,208.0,5.4381,186900.0,<1H OCEAN +-118.06,33.98,50.0,1146.0,238.0,579.0,213.0,2.9583,172600.0,<1H OCEAN +-118.06,33.98,38.0,1862.0,319.0,975.0,305.0,4.7266,177600.0,<1H OCEAN +-118.06,34.0,34.0,5002.0,917.0,2597.0,893.0,3.9243,219800.0,<1H OCEAN +-118.07,34.0,37.0,2976.0,636.0,2117.0,598.0,4.1058,167300.0,<1H OCEAN +-118.05,33.99,42.0,2480.0,401.0,1085.0,438.0,5.193,263400.0,<1H OCEAN +-118.04,33.99,36.0,3531.0,754.0,1613.0,697.0,3.2359,198600.0,<1H OCEAN +-118.05,33.99,38.0,1619.0,,886.0,357.0,3.7328,182400.0,<1H OCEAN +-118.06,33.99,38.0,862.0,178.0,484.0,176.0,4.375,186200.0,<1H OCEAN +-118.06,33.99,47.0,1588.0,309.0,827.0,292.0,3.7833,166100.0,<1H OCEAN +-118.06,33.99,46.0,1203.0,219.0,637.0,211.0,3.3611,174400.0,<1H OCEAN +-118.06,33.99,45.0,1471.0,255.0,670.0,250.0,4.5478,188000.0,<1H OCEAN +-118.04,33.98,50.0,1951.0,458.0,1362.0,454.0,3.0,163200.0,<1H OCEAN +-118.05,33.98,41.0,1406.0,428.0,1174.0,390.0,2.0147,137500.0,<1H OCEAN +-118.05,33.98,41.0,1694.0,413.0,1222.0,387.0,2.8311,155300.0,<1H OCEAN +-118.04,34.0,30.0,5308.0,854.0,2114.0,838.0,5.1985,279200.0,<1H OCEAN +-118.03,33.99,52.0,2792.0,461.0,1177.0,439.0,3.4312,243800.0,<1H OCEAN +-118.03,33.98,46.0,1974.0,465.0,880.0,441.0,2.7578,236800.0,<1H OCEAN +-118.04,33.98,43.0,2446.0,764.0,1699.0,692.0,2.625,163300.0,<1H OCEAN +-118.04,33.98,28.0,1617.0,507.0,1158.0,486.0,1.9688,165600.0,<1H OCEAN +-118.04,33.98,25.0,3040.0,831.0,1580.0,735.0,2.3182,182100.0,<1H OCEAN +-118.04,33.99,47.0,2530.0,565.0,1262.0,509.0,3.6475,197100.0,<1H OCEAN +-118.02,33.98,23.0,1995.0,306.0,707.0,293.0,8.6677,332700.0,<1H OCEAN +-118.03,33.97,32.0,2468.0,552.0,1190.0,479.0,3.8275,238500.0,<1H OCEAN +-118.02,33.97,34.0,1903.0,293.0,887.0,306.0,6.148,313800.0,<1H OCEAN +-118.01,33.97,36.0,1451.0,224.0,608.0,246.0,6.0648,290800.0,<1H OCEAN +-118.0,33.97,30.0,6540.0,991.0,3124.0,953.0,6.0663,372600.0,<1H OCEAN +-118.01,33.96,36.0,1805.0,288.0,882.0,308.0,5.3054,273500.0,<1H OCEAN +-118.02,33.96,36.0,2002.0,361.0,913.0,311.0,4.5446,244700.0,<1H OCEAN +-118.02,33.96,36.0,2071.0,398.0,988.0,404.0,4.6226,219700.0,<1H OCEAN +-118.03,33.97,36.0,1601.0,290.0,715.0,284.0,4.8152,232400.0,<1H OCEAN +-118.03,33.97,39.0,1996.0,389.0,1029.0,387.0,4.65,224300.0,<1H OCEAN +-118.03,33.97,39.0,2126.0,434.0,1103.0,433.0,3.2852,196200.0,<1H OCEAN +-118.03,33.97,36.0,2149.0,527.0,1359.0,481.0,2.824,167900.0,<1H OCEAN +-118.04,33.97,29.0,2376.0,700.0,1968.0,680.0,2.6082,162500.0,<1H OCEAN +-118.04,33.97,25.0,2945.0,914.0,2313.0,832.0,2.5686,177500.0,<1H OCEAN +-118.03,33.97,22.0,2185.0,623.0,1644.0,606.0,2.593,192000.0,<1H OCEAN +-118.02,33.95,38.0,2139.0,426.0,1138.0,412.0,4.2917,168900.0,<1H OCEAN +-118.02,33.95,36.0,1681.0,329.0,964.0,311.0,4.108,181200.0,<1H OCEAN +-118.03,33.96,37.0,1745.0,365.0,1022.0,368.0,4.0536,171400.0,<1H OCEAN +-118.03,33.96,37.0,1180.0,256.0,614.0,242.0,3.117,164600.0,<1H OCEAN +-118.03,33.95,34.0,1882.0,428.0,1034.0,375.0,3.6509,173200.0,<1H OCEAN +-118.03,33.95,37.0,1772.0,321.0,934.0,326.0,4.1471,177800.0,<1H OCEAN +-118.04,33.95,36.0,2722.0,515.0,1390.0,486.0,3.8214,178500.0,<1H OCEAN +-118.04,33.96,37.0,1948.0,395.0,1163.0,379.0,3.225,154000.0,<1H OCEAN +-118.04,33.96,42.0,1430.0,338.0,1269.0,321.0,3.3214,148800.0,<1H OCEAN +-118.05,33.96,37.0,2622.0,652.0,2778.0,644.0,2.9714,160300.0,<1H OCEAN +-118.04,33.97,34.0,1759.0,431.0,1282.0,391.0,3.0491,158200.0,<1H OCEAN +-118.05,33.98,34.0,2142.0,390.0,1305.0,406.0,4.0379,172800.0,<1H OCEAN +-118.05,33.97,36.0,2854.0,688.0,2816.0,673.0,3.6,154000.0,<1H OCEAN +-118.06,33.97,37.0,1645.0,308.0,1077.0,320.0,4.3203,159200.0,<1H OCEAN +-118.07,33.98,32.0,3304.0,714.0,2032.0,690.0,3.2093,167800.0,<1H OCEAN +-118.07,33.98,41.0,1478.0,273.0,916.0,281.0,3.9688,169800.0,<1H OCEAN +-118.06,33.97,39.0,1639.0,300.0,988.0,309.0,3.9612,175800.0,<1H OCEAN +-118.07,33.97,36.0,1887.0,370.0,1006.0,329.0,3.1554,170700.0,<1H OCEAN +-118.08,33.97,38.0,1026.0,190.0,789.0,193.0,4.2,163200.0,<1H OCEAN +-118.07,33.97,32.0,3400.0,826.0,3017.0,793.0,2.4607,155600.0,<1H OCEAN +-118.07,33.96,30.0,928.0,230.0,913.0,214.0,2.6991,147100.0,<1H OCEAN +-118.07,33.97,36.0,1265.0,273.0,1052.0,253.0,4.8929,156200.0,<1H OCEAN +-118.08,33.97,36.0,1620.0,298.0,1258.0,309.0,3.9773,166700.0,<1H OCEAN +-118.08,33.97,35.0,825.0,155.0,590.0,144.0,4.6333,161200.0,<1H OCEAN +-118.08,33.97,36.0,1678.0,323.0,1380.0,352.0,3.5481,163300.0,<1H OCEAN +-118.09,33.98,39.0,936.0,194.0,691.0,211.0,3.6875,169500.0,<1H OCEAN +-118.09,33.97,39.0,1473.0,297.0,1108.0,294.0,4.1389,166000.0,<1H OCEAN +-118.09,33.97,35.0,2664.0,541.0,2033.0,491.0,3.7326,164300.0,<1H OCEAN +-118.1,33.97,35.0,2426.0,529.0,2010.0,514.0,2.9922,163500.0,<1H OCEAN +-118.1,33.98,34.0,1357.0,310.0,1042.0,287.0,3.4083,156700.0,<1H OCEAN +-118.09,33.98,37.0,1226.0,255.0,1068.0,271.0,3.1607,172200.0,<1H OCEAN +-118.1,33.98,33.0,1927.0,482.0,1623.0,479.0,3.5268,152000.0,<1H OCEAN +-118.11,33.97,33.0,2125.0,500.0,1672.0,476.0,3.6397,166600.0,<1H OCEAN +-118.11,33.98,36.0,446.0,108.0,410.0,117.0,3.3942,147200.0,<1H OCEAN +-118.09,33.96,36.0,3271.0,603.0,2593.0,616.0,3.3621,169700.0,<1H OCEAN +-118.09,33.96,36.0,1116.0,229.0,719.0,233.0,3.425,163200.0,<1H OCEAN +-118.09,33.95,36.0,1991.0,396.0,1306.0,403.0,4.5,166600.0,<1H OCEAN +-118.1,33.96,38.0,1657.0,335.0,1195.0,309.0,4.1711,160100.0,<1H OCEAN +-118.1,33.96,36.0,1184.0,240.0,946.0,232.0,4.0357,162500.0,<1H OCEAN +-118.1,33.97,20.0,1878.0,548.0,1461.0,516.0,2.9821,142500.0,<1H OCEAN +-118.1,33.96,36.0,2013.0,435.0,1476.0,475.0,3.9549,192100.0,<1H OCEAN +-118.1,33.96,40.0,1743.0,328.0,981.0,291.0,3.6667,173100.0,<1H OCEAN +-118.08,33.95,32.0,1962.0,387.0,1274.0,398.0,4.8304,160600.0,<1H OCEAN +-118.08,33.95,37.0,1743.0,348.0,1328.0,354.0,3.0944,162800.0,<1H OCEAN +-118.08,33.96,35.0,2104.0,399.0,1659.0,387.0,4.0096,165000.0,<1H OCEAN +-118.08,33.96,34.0,1431.0,310.0,1162.0,288.0,4.369,165400.0,<1H OCEAN +-118.09,33.96,20.0,1911.0,472.0,1407.0,465.0,2.7647,163000.0,<1H OCEAN +-118.09,33.95,32.0,1083.0,206.0,737.0,218.0,3.5583,170800.0,<1H OCEAN +-118.09,33.94,36.0,2762.0,472.0,1576.0,493.0,4.0846,183400.0,<1H OCEAN +-118.09,33.93,36.0,1585.0,323.0,1205.0,343.0,4.5306,183400.0,<1H OCEAN +-118.09,33.94,33.0,1976.0,404.0,1379.0,395.0,3.8542,175400.0,<1H OCEAN +-118.08,33.94,21.0,3933.0,949.0,2219.0,820.0,2.4926,171400.0,<1H OCEAN +-118.04,33.95,35.0,1945.0,357.0,1227.0,359.0,5.2162,171900.0,<1H OCEAN +-118.04,33.94,31.0,3808.0,670.0,2430.0,660.0,4.625,173900.0,<1H OCEAN +-118.04,33.95,36.0,1976.0,368.0,1236.0,355.0,4.615,174000.0,<1H OCEAN +-118.05,33.95,33.0,1954.0,390.0,1600.0,376.0,3.6125,170800.0,<1H OCEAN +-118.05,33.94,34.0,495.0,120.0,527.0,130.0,1.9453,149000.0,<1H OCEAN +-118.04,33.93,36.0,1045.0,239.0,1165.0,230.0,3.1979,161800.0,<1H OCEAN +-118.05,33.93,31.0,894.0,203.0,883.0,190.0,3.6771,141500.0,<1H OCEAN +-118.05,33.93,35.0,2107.0,480.0,2241.0,443.0,3.1513,150000.0,<1H OCEAN +-118.05,33.92,33.0,1999.0,470.0,2170.0,466.0,3.2371,154700.0,<1H OCEAN +-118.03,33.93,22.0,3382.0,800.0,2688.0,784.0,3.875,164700.0,<1H OCEAN +-118.02,33.92,35.0,2075.0,424.0,1312.0,396.0,3.7969,164800.0,<1H OCEAN +-118.03,33.92,30.0,1414.0,332.0,1307.0,315.0,3.0,158300.0,<1H OCEAN +-118.03,33.92,35.0,2108.0,405.0,1243.0,394.0,3.6731,167000.0,<1H OCEAN +-118.04,33.93,35.0,1805.0,387.0,1505.0,366.0,4.1667,151900.0,<1H OCEAN +-118.04,33.92,34.0,1995.0,417.0,1573.0,407.0,3.4907,153500.0,<1H OCEAN +-118.04,33.93,36.0,1726.0,332.0,1293.0,310.0,4.3849,144100.0,<1H OCEAN +-118.04,33.92,35.0,2469.0,522.0,2151.0,537.0,3.4219,156200.0,<1H OCEAN +-118.02,33.93,35.0,2400.0,398.0,1218.0,408.0,4.1312,193800.0,<1H OCEAN +-118.03,33.93,35.0,2470.0,416.0,1386.0,411.0,5.2736,179500.0,<1H OCEAN +-118.03,33.94,37.0,1699.0,302.0,889.0,271.0,4.3542,179800.0,<1H OCEAN +-118.03,33.94,30.0,2572.0,521.0,1564.0,501.0,3.4861,177200.0,<1H OCEAN +-118.04,33.94,37.0,1328.0,273.0,1115.0,275.0,4.2051,164400.0,<1H OCEAN +-118.03,33.94,34.0,1748.0,386.0,917.0,378.0,3.4792,169000.0,<1H OCEAN +-118.01,33.95,36.0,1579.0,290.0,816.0,276.0,4.4318,181100.0,<1H OCEAN +-118.02,33.95,36.0,1705.0,299.0,871.0,296.0,4.6184,179800.0,<1H OCEAN +-118.02,33.95,36.0,1632.0,295.0,797.0,283.0,4.2292,179500.0,<1H OCEAN +-118.01,33.95,37.0,1165.0,210.0,627.0,221.0,4.6923,181000.0,<1H OCEAN +-118.02,33.94,33.0,2382.0,404.0,1339.0,389.0,5.3016,192200.0,<1H OCEAN +-118.02,33.94,23.0,4815.0,1081.0,3232.0,1016.0,3.488,191800.0,<1H OCEAN +-118.02,33.95,35.0,2085.0,400.0,1112.0,391.0,3.4886,173900.0,<1H OCEAN +-117.98,33.94,32.0,2562.0,491.0,1222.0,446.0,4.0985,226200.0,<1H OCEAN +-117.98,33.93,27.0,3142.0,509.0,1520.0,503.0,6.2924,232500.0,<1H OCEAN +-117.99,33.93,33.0,2299.0,431.0,1049.0,447.0,3.6458,208100.0,<1H OCEAN +-117.99,33.94,34.0,1519.0,301.0,758.0,304.0,4.3125,214000.0,<1H OCEAN +-117.99,33.94,30.0,2395.0,565.0,1214.0,521.0,3.7045,212300.0,<1H OCEAN +-118.0,33.94,35.0,2603.0,482.0,1305.0,507.0,3.9543,214400.0,<1H OCEAN +-118.0,33.94,36.0,2911.0,534.0,1395.0,486.0,5.1738,203700.0,<1H OCEAN +-118.01,33.94,36.0,1921.0,329.0,969.0,327.0,4.9191,188700.0,<1H OCEAN +-118.01,33.94,35.0,1323.0,235.0,807.0,247.0,4.2708,174800.0,<1H OCEAN +-118.01,33.93,31.0,3395.0,742.0,1886.0,737.0,4.4118,174400.0,<1H OCEAN +-118.02,33.93,33.0,4711.0,988.0,2984.0,931.0,3.6028,184700.0,<1H OCEAN +-117.99,33.93,36.0,1287.0,233.0,779.0,229.0,4.8523,175800.0,<1H OCEAN +-118.0,33.93,35.0,1288.0,240.0,758.0,250.0,4.9205,173900.0,<1H OCEAN +-118.01,33.93,34.0,2424.0,468.0,1293.0,444.0,3.275,189900.0,<1H OCEAN +-118.0,33.93,35.0,802.0,153.0,445.0,150.0,5.0077,185000.0,<1H OCEAN +-118.0,33.94,37.0,903.0,158.0,444.0,158.0,3.75,174400.0,<1H OCEAN +-118.01,33.92,34.0,4039.0,694.0,2269.0,663.0,5.2305,205100.0,<1H OCEAN +-118.01,33.92,35.0,1606.0,289.0,829.0,273.0,5.273,187600.0,<1H OCEAN +-118.02,33.92,34.0,1478.0,251.0,956.0,277.0,5.5238,185300.0,<1H OCEAN +-118.0,33.92,26.0,2830.0,399.0,1204.0,404.0,6.1273,289600.0,<1H OCEAN +-118.0,33.91,19.0,5166.0,770.0,2374.0,753.0,5.979,285200.0,<1H OCEAN +-117.99,33.93,27.0,3708.0,718.0,1921.0,721.0,4.375,210400.0,<1H OCEAN +-118.0,33.93,24.0,4534.0,967.0,2547.0,895.0,3.9575,215400.0,<1H OCEAN +-117.98,33.92,27.0,3700.0,,1793.0,552.0,5.3668,219800.0,<1H OCEAN +-117.99,33.92,27.0,5805.0,1152.0,3106.0,1144.0,4.061,222700.0,<1H OCEAN +-117.98,33.91,16.0,10621.0,1782.0,3836.0,1480.0,5.0923,257200.0,<1H OCEAN +-117.99,33.9,33.0,2161.0,383.0,1235.0,383.0,5.6454,202800.0,<1H OCEAN +-117.99,33.9,30.0,1677.0,372.0,1021.0,332.0,3.5859,199700.0,<1H OCEAN +-118.0,33.89,35.0,1065.0,176.0,574.0,171.0,5.0384,200800.0,<1H OCEAN +-118.0,33.89,34.0,1932.0,315.0,1053.0,316.0,5.1377,213300.0,<1H OCEAN +-118.0,33.9,35.0,1758.0,309.0,972.0,338.0,4.3831,209800.0,<1H OCEAN +-118.0,33.9,35.0,1942.0,332.0,1127.0,325.0,4.5144,206300.0,<1H OCEAN +-118.01,33.9,26.0,2968.0,674.0,1655.0,628.0,4.6094,201000.0,<1H OCEAN +-118.01,33.89,34.0,1653.0,292.0,1003.0,310.0,4.6,203400.0,<1H OCEAN +-118.01,33.89,33.0,2046.0,327.0,1018.0,320.0,4.2292,212800.0,<1H OCEAN +-118.0,33.89,35.0,1011.0,183.0,578.0,171.0,3.9861,188700.0,<1H OCEAN +-118.02,33.9,36.0,2417.0,421.0,1276.0,426.0,5.5601,205200.0,<1H OCEAN +-118.02,33.9,34.0,2678.0,511.0,1540.0,497.0,4.4954,202900.0,<1H OCEAN +-118.01,33.89,36.0,1589.0,265.0,804.0,272.0,4.6354,202900.0,<1H OCEAN +-118.02,33.89,36.0,1375.0,,670.0,221.0,5.0839,198200.0,<1H OCEAN +-118.02,33.92,34.0,2169.0,418.0,1169.0,406.0,3.2222,218700.0,<1H OCEAN +-118.01,33.91,32.0,2722.0,571.0,2541.0,462.0,4.2305,221400.0,<1H OCEAN +-118.01,33.9,36.0,1382.0,257.0,685.0,255.0,5.125,211700.0,<1H OCEAN +-118.02,33.91,35.0,2182.0,390.0,1248.0,399.0,5.4236,216700.0,<1H OCEAN +-118.02,33.9,34.0,1636.0,358.0,977.0,357.0,3.5938,209900.0,<1H OCEAN +-118.03,33.9,35.0,1434.0,279.0,744.0,252.0,3.7308,202400.0,<1H OCEAN +-118.02,33.91,35.0,1337.0,234.0,692.0,235.0,5.1155,213700.0,<1H OCEAN +-118.02,33.91,34.0,2518.0,429.0,1309.0,421.0,4.7861,210700.0,<1H OCEAN +-118.03,33.91,32.0,4040.0,832.0,2526.0,798.0,3.2143,160100.0,<1H OCEAN +-118.03,33.91,35.0,2323.0,406.0,1741.0,398.0,4.2437,164100.0,<1H OCEAN +-118.03,33.9,36.0,1143.0,193.0,826.0,188.0,5.3184,171100.0,<1H OCEAN +-118.04,33.9,36.0,15.0,5.0,15.0,6.0,0.4999,162500.0,<1H OCEAN +-118.09,34.03,27.0,3797.0,597.0,2043.0,614.0,5.5,276800.0,<1H OCEAN +-118.09,34.02,28.0,1984.0,313.0,1099.0,343.0,4.5526,250200.0,<1H OCEAN +-118.09,34.02,33.0,4853.0,1105.0,2855.0,1006.0,3.2622,208600.0,<1H OCEAN +-118.1,34.02,33.0,1143.0,172.0,508.0,174.0,4.9107,279900.0,<1H OCEAN +-118.11,34.02,17.0,9559.0,1911.0,5279.0,1844.0,5.1515,318900.0,<1H OCEAN +-118.12,34.02,25.0,2655.0,558.0,1466.0,525.0,3.0529,265800.0,<1H OCEAN +-118.12,34.03,20.0,2595.0,428.0,1751.0,479.0,5.6112,308000.0,<1H OCEAN +-118.1,34.01,29.0,2077.0,564.0,2087.0,543.0,2.66,189200.0,<1H OCEAN +-118.1,34.01,23.0,1724.0,576.0,1336.0,542.0,1.3365,183300.0,<1H OCEAN +-118.1,34.01,42.0,1436.0,298.0,1005.0,298.0,3.4297,195800.0,<1H OCEAN +-118.1,34.02,37.0,1022.0,232.0,653.0,238.0,3.0625,189400.0,<1H OCEAN +-118.11,34.02,40.0,1727.0,309.0,932.0,313.0,3.95,210200.0,<1H OCEAN +-118.11,34.01,43.0,1539.0,386.0,1122.0,377.0,2.4605,196000.0,<1H OCEAN +-118.12,34.02,36.0,1595.0,383.0,1105.0,359.0,2.4286,205600.0,<1H OCEAN +-118.12,34.02,32.0,1789.0,528.0,1429.0,517.0,1.8906,224500.0,<1H OCEAN +-118.13,34.03,31.0,4267.0,1070.0,3176.0,1071.0,3.0212,208200.0,<1H OCEAN +-118.13,34.02,38.0,1243.0,310.0,788.0,286.0,2.5852,185100.0,<1H OCEAN +-118.13,34.02,40.0,2988.0,690.0,2144.0,667.0,2.3359,189300.0,<1H OCEAN +-118.13,34.02,41.0,734.0,190.0,565.0,191.0,2.2813,192000.0,<1H OCEAN +-118.13,34.02,43.0,396.0,91.0,261.0,73.0,2.9044,172900.0,<1H OCEAN +-118.14,34.02,45.0,1307.0,283.0,967.0,254.0,2.75,178300.0,<1H OCEAN +-118.14,34.03,44.0,2003.0,390.0,1291.0,392.0,4.0625,201100.0,<1H OCEAN +-118.13,34.03,42.0,2203.0,467.0,1470.0,488.0,2.8385,192200.0,<1H OCEAN +-118.14,34.03,45.0,1569.0,359.0,1203.0,359.0,2.4612,180500.0,<1H OCEAN +-118.15,34.02,43.0,2172.0,605.0,2386.0,597.0,2.8239,150600.0,<1H OCEAN +-118.15,34.03,43.0,2006.0,472.0,1687.0,463.0,1.7991,158800.0,<1H OCEAN +-118.16,34.03,41.0,1377.0,293.0,1142.0,272.0,3.1724,141600.0,<1H OCEAN +-118.15,34.03,44.0,603.0,207.0,588.0,218.0,2.0536,186400.0,<1H OCEAN +-118.15,34.03,42.0,1481.0,411.0,1206.0,394.0,2.6806,189300.0,<1H OCEAN +-118.15,34.04,39.0,1099.0,263.0,787.0,269.0,3.7794,194600.0,<1H OCEAN +-118.15,34.04,44.0,647.0,142.0,457.0,143.0,3.6875,162500.0,<1H OCEAN +-118.16,34.04,45.0,332.0,70.0,302.0,60.0,3.1895,156300.0,<1H OCEAN +-118.16,34.04,22.0,2991.0,791.0,2486.0,754.0,1.5078,181900.0,<1H OCEAN +-118.16,34.04,38.0,1076.0,286.0,1535.0,323.0,2.7026,145000.0,<1H OCEAN +-118.16,34.04,11.0,852.0,215.0,806.0,202.0,1.3971,134400.0,<1H OCEAN +-118.17,34.03,31.0,1014.0,252.0,1064.0,247.0,2.4167,125500.0,<1H OCEAN +-118.17,34.04,38.0,385.0,102.0,402.0,95.0,1.625,129700.0,<1H OCEAN +-118.17,34.04,46.0,705.0,167.0,655.0,149.0,3.5938,141100.0,<1H OCEAN +-118.17,34.06,36.0,871.0,201.0,2862.0,181.0,2.1845,123800.0,<1H OCEAN +-118.17,34.05,35.0,1256.0,294.0,2990.0,302.0,3.1528,121800.0,<1H OCEAN +-118.18,34.05,41.0,389.0,102.0,455.0,107.0,2.7031,109200.0,<1H OCEAN +-118.17,34.06,44.0,1856.0,461.0,1853.0,452.0,2.5033,131900.0,<1H OCEAN +-118.17,34.06,43.0,464.0,,416.0,120.0,2.475,142600.0,<1H OCEAN +-118.18,34.06,33.0,278.0,71.0,266.0,56.0,0.8941,98200.0,<1H OCEAN +-118.19,34.06,37.0,1715.0,456.0,2052.0,440.0,2.3125,116100.0,<1H OCEAN +-118.18,34.06,45.0,934.0,228.0,893.0,192.0,2.53,140300.0,<1H OCEAN +-118.18,34.05,52.0,1070.0,231.0,925.0,220.0,1.825,133000.0,<1H OCEAN +-118.19,34.05,42.0,1291.0,345.0,1535.0,332.0,1.9083,119200.0,<1H OCEAN +-118.19,34.05,35.0,1296.0,307.0,1423.0,276.0,2.7432,135200.0,<1H OCEAN +-118.19,34.05,47.0,1273.0,264.0,1193.0,260.0,2.4375,122900.0,<1H OCEAN +-118.18,34.05,38.0,3272.0,731.0,3299.0,726.0,2.8295,126500.0,<1H OCEAN +-118.18,34.05,41.0,762.0,147.0,817.0,176.0,3.75,123100.0,<1H OCEAN +-118.18,34.05,41.0,616.0,196.0,814.0,180.0,3.3333,115100.0,<1H OCEAN +-118.18,34.04,36.0,1807.0,630.0,2118.0,669.0,1.55,129000.0,<1H OCEAN +-118.18,34.04,44.0,1079.0,275.0,1249.0,249.0,3.0417,141700.0,<1H OCEAN +-118.19,34.04,34.0,1011.0,274.0,1164.0,262.0,2.8542,146900.0,<1H OCEAN +-118.19,34.04,39.0,1074.0,323.0,1613.0,308.0,2.3015,131700.0,<1H OCEAN +-118.19,34.05,29.0,855.0,199.0,785.0,169.0,2.6964,122200.0,<1H OCEAN +-118.17,34.04,44.0,691.0,155.0,613.0,142.0,1.9667,133900.0,<1H OCEAN +-118.17,34.04,39.0,563.0,138.0,682.0,137.0,2.75,150000.0,<1H OCEAN +-118.18,34.03,39.0,609.0,145.0,690.0,134.0,2.9167,145800.0,<1H OCEAN +-118.17,34.04,43.0,908.0,232.0,1005.0,224.0,1.75,134000.0,<1H OCEAN +-118.17,34.04,45.0,911.0,238.0,1005.0,229.0,2.8167,114000.0,<1H OCEAN +-118.17,34.05,39.0,962.0,229.0,999.0,221.0,3.375,126000.0,<1H OCEAN +-118.17,34.05,45.0,733.0,178.0,715.0,165.0,2.5962,124100.0,<1H OCEAN +-118.18,34.04,42.0,1670.0,,1997.0,452.0,2.788,150500.0,<1H OCEAN +-118.18,34.03,26.0,859.0,255.0,835.0,232.0,1.1929,143800.0,<1H OCEAN +-118.19,34.03,27.0,1346.0,340.0,1177.0,295.0,1.7995,153400.0,<1H OCEAN +-118.19,34.04,40.0,1279.0,316.0,1438.0,329.0,2.1774,157600.0,<1H OCEAN +-118.19,34.04,43.0,1682.0,422.0,1706.0,409.0,2.1029,153300.0,<1H OCEAN +-118.19,34.03,31.0,525.0,136.0,627.0,145.0,2.6964,125000.0,<1H OCEAN +-118.18,34.03,37.0,2115.0,580.0,2842.0,572.0,2.239,121300.0,<1H OCEAN +-118.19,34.03,42.0,2250.0,629.0,2588.0,609.0,1.9719,134200.0,<1H OCEAN +-118.18,34.03,40.0,2631.0,698.0,2920.0,677.0,2.0764,145600.0,<1H OCEAN +-118.19,34.02,45.0,1535.0,432.0,1820.0,419.0,1.7801,142800.0,<1H OCEAN +-118.18,34.02,36.0,1138.0,296.0,1484.0,320.0,2.2813,150700.0,<1H OCEAN +-118.18,34.02,37.0,2631.0,734.0,3228.0,701.0,2.15,132200.0,<1H OCEAN +-118.19,34.02,40.0,474.0,124.0,546.0,121.0,2.3438,137500.0,<1H OCEAN +-118.18,34.02,35.0,661.0,142.0,720.0,143.0,2.8977,142500.0,<1H OCEAN +-118.19,34.02,34.0,1478.0,369.0,1735.0,348.0,1.8875,136700.0,<1H OCEAN +-118.18,34.02,33.0,832.0,226.0,987.0,220.0,3.0972,125000.0,<1H OCEAN +-118.18,34.02,43.0,887.0,219.0,965.0,217.0,2.625,133900.0,<1H OCEAN +-118.18,34.01,42.0,1845.0,497.0,2191.0,492.0,2.3462,127300.0,<1H OCEAN +-118.17,34.03,41.0,2099.0,530.0,2325.0,528.0,2.1979,140800.0,<1H OCEAN +-118.17,34.03,43.0,1636.0,506.0,1855.0,502.0,2.2902,152400.0,<1H OCEAN +-118.17,34.03,42.0,882.0,292.0,1248.0,281.0,2.761,120000.0,<1H OCEAN +-118.18,34.03,44.0,1629.0,420.0,1893.0,387.0,2.2991,137500.0,<1H OCEAN +-118.17,34.02,41.0,676.0,216.0,851.0,199.0,2.3077,140600.0,<1H OCEAN +-118.17,34.02,34.0,760.0,219.0,968.0,202.0,1.7813,145000.0,<1H OCEAN +-118.17,34.02,39.0,759.0,215.0,883.0,226.0,2.125,143800.0,<1H OCEAN +-118.17,34.02,33.0,346.0,103.0,488.0,107.0,1.8681,112500.0,<1H OCEAN +-118.16,34.03,45.0,894.0,231.0,925.0,222.0,2.6042,145000.0,<1H OCEAN +-118.16,34.03,40.0,2201.0,636.0,2682.0,595.0,2.359,143400.0,<1H OCEAN +-118.16,34.02,35.0,1734.0,493.0,2053.0,508.0,2.1442,149200.0,<1H OCEAN +-118.16,34.02,41.0,1256.0,391.0,1511.0,381.0,1.7981,166000.0,<1H OCEAN +-118.16,34.02,47.0,1055.0,298.0,1303.0,302.0,2.6964,138800.0,<1H OCEAN +-118.17,34.02,42.0,946.0,272.0,1191.0,261.0,2.45,132000.0,<1H OCEAN +-118.16,34.02,34.0,1474.0,511.0,1962.0,501.0,1.8715,139600.0,<1H OCEAN +-118.15,34.02,42.0,2729.0,725.0,3004.0,722.0,2.3438,154300.0,<1H OCEAN +-118.15,34.02,37.0,2344.0,631.0,2195.0,610.0,2.7022,151900.0,<1H OCEAN +-118.16,34.02,42.0,814.0,216.0,773.0,208.0,2.5313,156900.0,<1H OCEAN +-118.16,34.01,37.0,690.0,261.0,952.0,255.0,1.6354,158900.0,<1H OCEAN +-118.16,34.01,40.0,1552.0,,1919.0,427.0,2.2596,137500.0,<1H OCEAN +-118.16,34.02,44.0,1218.0,374.0,1175.0,342.0,1.9688,173900.0,<1H OCEAN +-118.14,34.02,44.0,1715.0,460.0,1740.0,423.0,2.7019,153300.0,<1H OCEAN +-118.14,34.02,40.0,1912.0,502.0,2077.0,500.0,2.6,180600.0,<1H OCEAN +-118.13,34.02,36.0,984.0,275.0,1024.0,284.0,2.125,153500.0,<1H OCEAN +-118.14,34.01,42.0,1007.0,277.0,1060.0,268.0,3.0179,153700.0,<1H OCEAN +-118.14,34.02,42.0,1384.0,458.0,1825.0,455.0,1.4178,145500.0,<1H OCEAN +-118.14,34.01,46.0,1746.0,447.0,1296.0,392.0,2.3929,156800.0,<1H OCEAN +-118.14,34.01,42.0,1973.0,510.0,1841.0,502.0,2.5326,156500.0,<1H OCEAN +-118.13,34.01,45.0,1179.0,268.0,736.0,252.0,2.7083,161800.0,<1H OCEAN +-118.13,34.01,40.0,2412.0,629.0,2119.0,600.0,2.075,151100.0,<1H OCEAN +-118.13,34.01,43.0,782.0,207.0,827.0,223.0,3.1538,154300.0,<1H OCEAN +-118.11,34.01,41.0,815.0,252.0,775.0,231.0,2.2847,190000.0,<1H OCEAN +-118.12,34.0,31.0,3281.0,768.0,2385.0,733.0,2.7308,173800.0,<1H OCEAN +-118.12,34.01,40.0,1417.0,338.0,1068.0,331.0,2.4259,164600.0,<1H OCEAN +-118.12,34.01,33.0,1956.0,478.0,1472.0,464.0,1.9867,166300.0,<1H OCEAN +-118.1,34.0,32.0,2122.0,591.0,1929.0,539.0,2.7311,169300.0,<1H OCEAN +-118.11,34.0,24.0,2403.0,590.0,2103.0,547.0,2.7292,193800.0,<1H OCEAN +-118.11,34.0,38.0,2573.0,484.0,1568.0,459.0,3.0208,193700.0,<1H OCEAN +-118.11,34.0,33.0,2886.0,726.0,2650.0,728.0,2.625,178700.0,<1H OCEAN +-118.11,34.01,22.0,1141.0,332.0,1189.0,321.0,2.2042,162500.0,<1H OCEAN +-118.12,33.99,27.0,2316.0,559.0,2012.0,544.0,2.8155,176800.0,<1H OCEAN +-118.12,33.99,26.0,2296.0,534.0,1777.0,507.0,2.5395,191000.0,<1H OCEAN +-118.12,33.98,44.0,932.0,179.0,717.0,180.0,3.6875,178100.0,<1H OCEAN +-118.12,33.99,24.0,1705.0,479.0,2037.0,459.0,2.4219,137500.0,<1H OCEAN +-118.14,34.01,36.0,702.0,210.0,834.0,216.0,2.25,162500.0,<1H OCEAN +-118.15,33.98,17.0,3361.0,925.0,3264.0,914.0,2.2813,145600.0,<1H OCEAN +-118.15,34.0,32.0,3218.0,739.0,2368.0,730.0,3.1406,175300.0,<1H OCEAN +-118.16,34.0,37.0,1341.0,336.0,1233.0,306.0,3.6583,150500.0,<1H OCEAN +-118.17,34.01,30.0,1228.0,358.0,1603.0,323.0,3.0225,130800.0,<1H OCEAN +-118.16,34.01,36.0,931.0,246.0,732.0,235.0,1.7679,142800.0,<1H OCEAN +-118.17,34.01,36.0,1657.0,425.0,1689.0,418.0,2.7799,149300.0,<1H OCEAN +-118.18,34.01,39.0,322.0,82.0,319.0,90.0,2.6364,148800.0,<1H OCEAN +-118.21,33.99,39.0,47.0,16.0,51.0,23.0,3.2188,112500.0,<1H OCEAN +-118.23,34.0,35.0,167.0,60.0,267.0,55.0,1.5227,350000.0,<1H OCEAN +-118.23,33.99,37.0,378.0,176.0,714.0,156.0,2.1912,112500.0,<1H OCEAN +-118.22,33.99,24.0,1402.0,482.0,1976.0,466.0,2.6964,163200.0,<1H OCEAN +-118.22,33.99,6.0,1499.0,437.0,1754.0,447.0,4.3164,143200.0,<1H OCEAN +-118.22,33.99,4.0,1849.0,577.0,1529.0,418.0,2.7708,186300.0,<1H OCEAN +-118.22,33.98,34.0,2283.0,809.0,3032.0,832.0,2.4387,175000.0,<1H OCEAN +-118.22,33.98,27.0,1095.0,340.0,1300.0,318.0,2.6548,123200.0,<1H OCEAN +-118.22,33.98,15.0,1011.0,274.0,899.0,219.0,2.7045,190600.0,<1H OCEAN +-118.23,33.98,25.0,986.0,310.0,1439.0,251.0,2.39,183300.0,<1H OCEAN +-118.23,33.99,5.0,706.0,203.0,839.0,199.0,4.5208,165000.0,<1H OCEAN +-118.23,33.98,30.0,2562.0,959.0,3909.0,955.0,1.9929,150600.0,<1H OCEAN +-118.24,33.99,28.0,312.0,89.0,498.0,87.0,2.4107,96400.0,<1H OCEAN +-118.24,33.98,30.0,861.0,250.0,1062.0,231.0,1.75,115400.0,<1H OCEAN +-118.24,33.99,33.0,885.0,294.0,1270.0,282.0,2.1615,118800.0,<1H OCEAN +-118.25,33.99,41.0,2215.0,544.0,2054.0,480.0,1.5272,100300.0,<1H OCEAN +-118.25,33.99,41.0,1486.0,509.0,2312.0,541.0,1.3963,92900.0,<1H OCEAN +-118.25,33.98,47.0,617.0,162.0,754.0,144.0,2.2969,116700.0,<1H OCEAN +-118.25,33.98,44.0,1087.0,335.0,1441.0,310.0,1.6667,112500.0,<1H OCEAN +-118.25,33.98,40.0,1867.0,633.0,2223.0,609.0,1.7207,105100.0,<1H OCEAN +-118.25,33.98,37.0,1045.0,361.0,1666.0,337.0,1.7929,97200.0,<1H OCEAN +-118.25,33.98,39.0,1553.0,461.0,2271.0,437.0,1.7378,121900.0,<1H OCEAN +-118.25,33.98,37.0,1503.0,392.0,1886.0,401.0,2.5637,125000.0,<1H OCEAN +-118.24,33.98,37.0,1196.0,364.0,1622.0,327.0,2.125,108900.0,<1H OCEAN +-118.24,33.98,45.0,972.0,249.0,1288.0,261.0,2.2054,125000.0,<1H OCEAN +-118.24,33.98,45.0,173.0,42.0,230.0,57.0,3.0724,110700.0,<1H OCEAN +-118.22,33.98,30.0,1971.0,645.0,2650.0,605.0,2.0357,169900.0,<1H OCEAN +-118.22,33.98,42.0,626.0,143.0,625.0,156.0,3.125,166300.0,<1H OCEAN +-118.22,33.98,32.0,2643.0,737.0,2784.0,711.0,2.5352,184400.0,<1H OCEAN +-118.22,33.98,36.0,1514.0,453.0,1496.0,448.0,2.1044,148200.0,<1H OCEAN +-118.22,33.98,18.0,1781.0,765.0,1913.0,702.0,1.2059,255000.0,<1H OCEAN +-118.22,33.98,34.0,2225.0,753.0,2980.0,736.0,1.6685,128800.0,<1H OCEAN +-118.23,33.98,35.0,1366.0,496.0,2160.0,497.0,2.2059,150000.0,<1H OCEAN +-118.2,33.98,38.0,867.0,243.0,950.0,235.0,1.8929,163100.0,<1H OCEAN +-118.21,33.97,35.0,1863.0,537.0,2274.0,510.0,2.1005,171300.0,<1H OCEAN +-118.21,33.98,39.0,1315.0,306.0,1257.0,298.0,3.2788,169000.0,<1H OCEAN +-118.21,33.98,37.0,788.0,215.0,883.0,221.0,2.6818,164600.0,<1H OCEAN +-118.21,33.98,35.0,1705.0,562.0,2212.0,539.0,2.325,161500.0,<1H OCEAN +-118.2,33.99,35.0,1705.0,523.0,2252.0,508.0,2.3421,154200.0,<1H OCEAN +-118.2,33.99,33.0,1134.0,375.0,1615.0,354.0,2.1468,141700.0,<1H OCEAN +-118.19,33.99,38.0,1212.0,272.0,1129.0,263.0,2.6673,142300.0,<1H OCEAN +-118.19,33.99,40.0,1547.0,434.0,1930.0,427.0,3.3869,157300.0,<1H OCEAN +-118.19,33.98,40.0,973.0,272.0,1257.0,258.0,2.8214,158000.0,<1H OCEAN +-118.19,33.99,42.0,1429.0,436.0,1537.0,389.0,3.0114,157500.0,<1H OCEAN +-118.19,33.99,37.0,2073.0,614.0,2544.0,598.0,2.9054,156300.0,<1H OCEAN +-118.2,33.99,35.0,1608.0,465.0,2140.0,488.0,3.1979,154700.0,<1H OCEAN +-118.2,33.99,30.0,1474.0,459.0,1844.0,464.0,2.551,160000.0,<1H OCEAN +-118.19,33.99,35.0,1172.0,436.0,1741.0,408.0,2.4596,154700.0,<1H OCEAN +-118.19,33.98,34.0,1022.0,286.0,1058.0,275.0,2.6042,156700.0,<1H OCEAN +-118.19,33.99,36.0,1273.0,379.0,1398.0,353.0,2.4516,147800.0,<1H OCEAN +-118.2,33.99,31.0,1186.0,387.0,2087.0,409.0,1.9132,154600.0,<1H OCEAN +-118.2,33.98,43.0,1091.0,320.0,1418.0,316.0,2.1522,159400.0,<1H OCEAN +-118.19,33.98,33.0,151.0,83.0,380.0,83.0,1.4224,189600.0,<1H OCEAN +-118.19,33.97,30.0,1790.0,556.0,1827.0,520.0,1.7562,181300.0,<1H OCEAN +-118.19,33.97,34.0,2700.0,763.0,2815.0,767.0,2.4196,178400.0,<1H OCEAN +-118.19,33.98,36.0,4179.0,,4582.0,1196.0,2.0087,172100.0,<1H OCEAN +-118.2,33.98,32.0,1403.0,399.0,1506.0,375.0,2.0,172700.0,<1H OCEAN +-118.2,33.98,30.0,2369.0,753.0,3259.0,770.0,2.1964,158500.0,<1H OCEAN +-118.2,33.97,30.0,1911.0,562.0,2055.0,534.0,2.3917,154600.0,<1H OCEAN +-118.18,33.99,36.0,988.0,337.0,1508.0,351.0,2.4375,154800.0,<1H OCEAN +-118.18,33.99,38.0,1010.0,315.0,1157.0,301.0,1.6341,161800.0,<1H OCEAN +-118.17,33.98,27.0,1871.0,556.0,2542.0,581.0,2.8427,164400.0,<1H OCEAN +-118.18,33.98,24.0,1880.0,642.0,2646.0,605.0,2.1836,162000.0,<1H OCEAN +-118.18,33.98,30.0,1735.0,573.0,2237.0,545.0,2.3444,156100.0,<1H OCEAN +-118.18,33.99,35.0,1230.0,407.0,1512.0,364.0,2.152,170800.0,<1H OCEAN +-118.17,33.98,41.0,428.0,111.0,585.0,139.0,3.1786,132100.0,<1H OCEAN +-118.17,33.97,31.0,3388.0,1059.0,3558.0,957.0,2.4049,159000.0,<1H OCEAN +-118.17,33.97,33.0,2410.0,641.0,2106.0,593.0,2.2422,168200.0,<1H OCEAN +-118.17,33.98,36.0,627.0,177.0,834.0,175.0,2.9844,163600.0,<1H OCEAN +-118.17,33.98,41.0,756.0,,873.0,212.0,2.7321,156000.0,<1H OCEAN +-118.18,33.98,36.0,903.0,266.0,1068.0,251.0,3.0398,165400.0,<1H OCEAN +-118.18,33.97,30.0,2887.0,866.0,2806.0,830.0,2.2122,169400.0,<1H OCEAN +-118.18,33.97,34.0,3214.0,899.0,3086.0,808.0,2.0057,189400.0,<1H OCEAN +-118.18,33.98,40.0,1698.0,431.0,1280.0,405.0,2.625,206300.0,<1H OCEAN +-118.18,33.98,38.0,1477.0,374.0,1514.0,408.0,2.5703,178600.0,<1H OCEAN +-118.15,33.98,37.0,1184.0,290.0,1320.0,276.0,2.3,165600.0,<1H OCEAN +-118.15,33.97,32.0,1174.0,373.0,1758.0,361.0,2.4263,158100.0,<1H OCEAN +-118.15,33.97,33.0,1903.0,469.0,1882.0,435.0,2.4071,170500.0,<1H OCEAN +-118.16,33.97,23.0,1516.0,457.0,1977.0,435.0,2.3068,157800.0,<1H OCEAN +-118.16,33.97,30.0,2419.0,715.0,3208.0,719.0,2.1743,176000.0,<1H OCEAN +-118.14,33.97,29.0,1846.0,530.0,2576.0,528.0,2.63,156000.0,<1H OCEAN +-118.14,33.97,31.0,1161.0,267.0,1175.0,282.0,3.0114,177000.0,<1H OCEAN +-118.14,33.96,38.0,590.0,139.0,620.0,132.0,2.1731,143800.0,<1H OCEAN +-118.15,33.97,32.0,927.0,250.0,970.0,248.0,2.1591,181500.0,<1H OCEAN +-118.14,33.97,31.0,2064.0,612.0,2461.0,573.0,2.0524,160800.0,<1H OCEAN +-118.14,33.97,36.0,1407.0,385.0,1763.0,350.0,2.6364,150000.0,<1H OCEAN +-118.16,33.98,33.0,1196.0,313.0,1448.0,320.0,2.9375,162500.0,<1H OCEAN +-118.16,33.97,39.0,1444.0,447.0,1890.0,416.0,2.1181,176600.0,<1H OCEAN +-118.16,33.97,32.0,1347.0,434.0,1756.0,438.0,1.9464,190600.0,<1H OCEAN +-118.16,33.97,31.0,1363.0,428.0,1897.0,364.0,2.3929,191100.0,<1H OCEAN +-118.16,33.97,13.0,221.0,63.0,286.0,64.0,1.9063,175000.0,<1H OCEAN +-118.17,33.98,31.0,1236.0,329.0,1486.0,337.0,3.0938,155400.0,<1H OCEAN +-118.15,33.96,33.0,1201.0,340.0,1482.0,334.0,2.4821,150000.0,<1H OCEAN +-118.15,33.96,33.0,1471.0,451.0,2272.0,482.0,2.5385,160900.0,<1H OCEAN +-118.17,33.96,25.0,2249.0,681.0,2621.0,628.0,2.3,164200.0,<1H OCEAN +-118.16,33.96,24.0,1635.0,507.0,2480.0,481.0,2.4432,187500.0,<1H OCEAN +-118.17,33.96,25.0,3297.0,1066.0,5027.0,1041.0,2.2817,164200.0,<1H OCEAN +-118.17,33.96,29.0,2913.0,787.0,3803.0,740.0,2.5556,146500.0,<1H OCEAN +-118.18,33.96,20.0,427.0,118.0,402.0,105.0,1.4167,137500.0,<1H OCEAN +-118.19,33.96,28.0,3507.0,969.0,3740.0,970.0,2.0162,142000.0,<1H OCEAN +-118.18,33.97,26.0,6895.0,1877.0,8551.0,1808.0,2.3175,154500.0,<1H OCEAN +-118.19,33.97,27.0,2911.0,972.0,3559.0,945.0,1.9485,146300.0,<1H OCEAN +-118.2,33.97,28.0,2474.0,702.0,2830.0,694.0,2.754,166200.0,<1H OCEAN +-118.2,33.97,43.0,825.0,212.0,820.0,184.0,1.8897,174300.0,<1H OCEAN +-118.2,33.96,44.0,3114.0,779.0,2959.0,776.0,3.1875,171700.0,<1H OCEAN +-118.21,33.96,38.0,2090.0,519.0,1871.0,504.0,2.4688,169000.0,<1H OCEAN +-118.21,33.97,49.0,1409.0,313.0,1268.0,317.0,3.9408,170600.0,<1H OCEAN +-118.21,33.97,43.0,1751.0,400.0,1558.0,379.0,3.0313,166100.0,<1H OCEAN +-118.21,33.97,52.0,4220.0,908.0,3731.0,892.0,3.1901,167600.0,<1H OCEAN +-118.22,33.97,43.0,381.0,67.0,259.0,60.0,3.0313,166100.0,<1H OCEAN +-118.22,33.97,47.0,1147.0,297.0,1097.0,307.0,2.6384,162900.0,<1H OCEAN +-118.23,33.97,44.0,2748.0,715.0,2962.0,703.0,2.6951,169300.0,<1H OCEAN +-118.23,33.96,44.0,3186.0,876.0,3913.0,842.0,3.0143,148200.0,<1H OCEAN +-118.22,33.97,47.0,1688.0,386.0,1663.0,381.0,4.0609,171300.0,<1H OCEAN +-118.22,33.97,47.0,1058.0,295.0,1097.0,274.0,2.881,183300.0,<1H OCEAN +-118.23,33.97,47.0,932.0,295.0,1226.0,264.0,1.6065,111400.0,<1H OCEAN +-118.24,33.97,38.0,1657.0,467.0,2033.0,443.0,2.1429,118500.0,<1H OCEAN +-118.24,33.97,43.0,1357.0,349.0,1657.0,331.0,2.0819,111800.0,<1H OCEAN +-118.24,33.97,41.0,1182.0,346.0,1644.0,346.0,2.1473,115100.0,<1H OCEAN +-118.24,33.97,37.0,1053.0,263.0,1354.0,292.0,2.5833,112500.0,<1H OCEAN +-118.25,33.97,32.0,879.0,257.0,1057.0,230.0,1.6776,114800.0,<1H OCEAN +-118.25,33.97,36.0,1026.0,294.0,1316.0,268.0,1.7708,102600.0,<1H OCEAN +-118.25,33.97,39.0,1346.0,380.0,1520.0,356.0,1.1635,108700.0,<1H OCEAN +-118.25,33.97,43.0,1735.0,535.0,2288.0,524.0,1.9119,98800.0,<1H OCEAN +-118.24,33.97,37.0,1212.0,314.0,1403.0,279.0,2.5536,117200.0,<1H OCEAN +-118.24,33.96,30.0,859.0,221.0,912.0,191.0,1.9041,105100.0,<1H OCEAN +-118.25,33.97,37.0,794.0,210.0,814.0,213.0,2.2917,112000.0,<1H OCEAN +-118.25,33.96,43.0,1876.0,454.0,1571.0,458.0,2.0323,112500.0,<1H OCEAN +-118.25,33.97,38.0,1231.0,346.0,1217.0,354.0,1.8661,106600.0,<1H OCEAN +-118.24,33.96,34.0,1724.0,432.0,1876.0,416.0,2.1078,100600.0,<1H OCEAN +-118.25,33.96,48.0,1052.0,234.0,793.0,216.0,1.6585,92900.0,<1H OCEAN +-118.25,33.96,42.0,1326.0,295.0,918.0,258.0,2.3864,98800.0,<1H OCEAN +-118.25,33.96,43.0,2015.0,419.0,1543.0,399.0,1.8672,98100.0,<1H OCEAN +-118.25,33.95,48.0,1766.0,424.0,1655.0,420.0,0.9751,95500.0,<1H OCEAN +-118.25,33.95,41.0,1576.0,339.0,1252.0,302.0,1.9798,98100.0,<1H OCEAN +-118.23,33.96,39.0,405.0,163.0,686.0,164.0,1.695,94800.0,<1H OCEAN +-118.23,33.96,36.0,1062.0,270.0,1136.0,273.0,1.6597,109100.0,<1H OCEAN +-118.24,33.96,44.0,1338.0,366.0,1765.0,388.0,1.7778,109900.0,<1H OCEAN +-118.24,33.96,39.0,643.0,186.0,821.0,191.0,2.5729,97300.0,<1H OCEAN +-118.24,33.96,34.0,946.0,254.0,1101.0,239.0,1.7396,105900.0,<1H OCEAN +-118.24,33.96,37.0,1602.0,388.0,1553.0,342.0,2.0655,93400.0,<1H OCEAN +-118.23,33.95,42.0,705.0,173.0,739.0,140.0,0.9166,99000.0,<1H OCEAN +-118.23,33.95,27.0,504.0,142.0,789.0,167.0,0.9518,91400.0,<1H OCEAN +-118.21,33.96,39.0,2050.0,529.0,1959.0,485.0,2.1389,168900.0,<1H OCEAN +-118.21,33.96,39.0,2265.0,628.0,2323.0,599.0,2.1522,155300.0,<1H OCEAN +-118.22,33.96,32.0,2232.0,603.0,2361.0,608.0,2.5966,170900.0,<1H OCEAN +-118.22,33.96,36.0,1542.0,458.0,1711.0,468.0,1.9028,164200.0,<1H OCEAN +-118.22,33.96,35.0,1437.0,474.0,2113.0,484.0,2.6179,158800.0,<1H OCEAN +-118.22,33.96,42.0,1380.0,331.0,1290.0,288.0,2.8,161800.0,<1H OCEAN +-118.21,33.95,38.0,1889.0,565.0,2087.0,559.0,1.7778,154000.0,<1H OCEAN +-118.22,33.95,36.0,1679.0,483.0,2249.0,487.0,2.8167,160400.0,<1H OCEAN +-118.22,33.95,42.0,3896.0,981.0,4496.0,993.0,3.153,150900.0,<1H OCEAN +-118.23,33.96,42.0,1977.0,570.0,2406.0,557.0,2.5913,151600.0,<1H OCEAN +-118.23,33.95,43.0,1683.0,520.0,2190.0,494.0,2.2391,152800.0,<1H OCEAN +-118.22,33.94,42.0,1046.0,287.0,1218.0,289.0,2.6538,143400.0,<1H OCEAN +-118.22,33.94,42.0,1115.0,297.0,1412.0,325.0,3.0903,153500.0,<1H OCEAN +-118.22,33.94,38.0,788.0,224.0,1155.0,208.0,3.3542,153800.0,<1H OCEAN +-118.22,33.94,41.0,928.0,249.0,1108.0,236.0,3.4323,144600.0,<1H OCEAN +-118.2,33.96,44.0,2144.0,477.0,1760.0,452.0,2.3221,161600.0,<1H OCEAN +-118.2,33.96,43.0,1233.0,306.0,1190.0,282.0,2.8371,161300.0,<1H OCEAN +-118.2,33.96,41.0,1512.0,400.0,1690.0,367.0,3.055,167000.0,<1H OCEAN +-118.2,33.96,37.0,2127.0,533.0,2021.0,480.0,2.9773,164600.0,<1H OCEAN +-118.21,33.96,43.0,1686.0,446.0,1590.0,474.0,2.3241,159300.0,<1H OCEAN +-118.21,33.96,48.0,284.0,104.0,422.0,119.0,1.2826,145500.0,<1H OCEAN +-118.21,33.95,43.0,1500.0,419.0,1726.0,440.0,1.8641,165100.0,<1H OCEAN +-118.2,33.95,35.0,1924.0,520.0,2101.0,541.0,2.4267,151500.0,<1H OCEAN +-118.2,33.95,41.0,679.0,184.0,788.0,185.0,2.1406,165300.0,<1H OCEAN +-118.21,33.95,32.0,1116.0,328.0,1265.0,302.0,2.295,155200.0,<1H OCEAN +-118.21,33.95,35.0,2134.0,650.0,2248.0,587.0,2.2988,153400.0,<1H OCEAN +-118.21,33.95,35.0,2129.0,614.0,2376.0,618.0,2.0372,160800.0,<1H OCEAN +-118.2,33.94,42.0,618.0,163.0,680.0,179.0,3.3472,154200.0,<1H OCEAN +-118.2,33.94,45.0,1818.0,408.0,1705.0,373.0,4.0441,157500.0,<1H OCEAN +-118.21,33.94,40.0,2227.0,594.0,2244.0,580.0,2.4459,143800.0,<1H OCEAN +-118.21,33.94,41.0,1807.0,442.0,1628.0,443.0,2.84,156100.0,<1H OCEAN +-118.19,33.95,44.0,1436.0,271.0,850.0,269.0,3.2768,179100.0,<1H OCEAN +-118.19,33.94,45.0,1871.0,371.0,1315.0,382.0,3.3661,160800.0,<1H OCEAN +-118.19,33.94,45.0,1403.0,315.0,1111.0,311.0,3.3846,168100.0,<1H OCEAN +-118.19,33.95,41.0,1368.0,309.0,1244.0,312.0,3.0833,164800.0,<1H OCEAN +-118.19,33.95,42.0,1651.0,463.0,1559.0,436.0,2.3882,148100.0,<1H OCEAN +-118.2,33.94,44.0,1413.0,298.0,1200.0,307.0,3.5125,169300.0,<1H OCEAN +-118.2,33.94,45.0,1570.0,328.0,1321.0,300.0,3.7361,171800.0,<1H OCEAN +-118.2,33.94,43.0,1934.0,511.0,1895.0,493.0,2.5029,159700.0,<1H OCEAN +-118.19,33.96,40.0,979.0,296.0,934.0,292.0,2.6354,151800.0,<1H OCEAN +-118.19,33.95,42.0,2309.0,685.0,2609.0,673.0,2.7206,162100.0,<1H OCEAN +-118.16,33.94,32.0,2210.0,456.0,1270.0,484.0,4.7708,178600.0,<1H OCEAN +-118.16,33.93,35.0,757.0,151.0,474.0,132.0,3.7361,179800.0,<1H OCEAN +-118.18,33.94,44.0,1337.0,245.0,968.0,240.0,3.4688,183600.0,<1H OCEAN +-118.18,33.95,39.0,2121.0,579.0,1991.0,528.0,2.9094,152200.0,<1H OCEAN +-118.18,33.95,42.0,2608.0,610.0,2062.0,616.0,3.5341,167500.0,<1H OCEAN +-118.18,33.94,43.0,2724.0,612.0,2340.0,570.0,2.7,165000.0,<1H OCEAN +-118.17,33.94,17.0,1145.0,209.0,499.0,202.0,4.6389,165500.0,<1H OCEAN +-118.17,33.95,23.0,1991.0,584.0,1380.0,535.0,1.9107,181900.0,<1H OCEAN +-118.17,33.92,36.0,2447.0,503.0,1532.0,498.0,4.3667,171800.0,<1H OCEAN +-118.17,33.92,43.0,2099.0,398.0,1276.0,387.0,3.1528,166800.0,<1H OCEAN +-118.16,33.92,44.0,1368.0,277.0,899.0,271.0,3.5938,161300.0,<1H OCEAN +-118.16,33.91,41.0,1806.0,408.0,1146.0,374.0,2.9643,162200.0,<1H OCEAN +-118.17,33.91,39.0,1157.0,273.0,877.0,305.0,3.1087,171000.0,<1H OCEAN +-118.18,33.92,32.0,2035.0,519.0,2282.0,480.0,3.2734,136400.0,<1H OCEAN +-118.18,33.92,29.0,749.0,185.0,708.0,196.0,2.4583,136900.0,<1H OCEAN +-118.19,33.92,36.0,1356.0,314.0,1469.0,300.0,2.0785,139800.0,<1H OCEAN +-118.18,33.93,31.0,1516.0,400.0,1820.0,398.0,2.1641,122900.0,<1H OCEAN +-118.18,33.93,35.0,952.0,271.0,949.0,261.0,2.4297,147200.0,<1H OCEAN +-118.19,33.93,40.0,1334.0,276.0,1226.0,278.0,3.4712,144300.0,<1H OCEAN +-118.19,33.93,42.0,1829.0,391.0,1614.0,377.0,3.1912,146400.0,<1H OCEAN +-118.2,33.93,40.0,1929.0,417.0,1780.0,419.0,3.4402,149400.0,<1H OCEAN +-118.19,33.93,44.0,1613.0,345.0,1227.0,342.0,3.1667,145700.0,<1H OCEAN +-118.19,33.92,43.0,2339.0,487.0,1732.0,449.0,3.0987,139400.0,<1H OCEAN +-118.2,33.92,42.0,1411.0,314.0,1432.0,322.0,3.0871,138800.0,<1H OCEAN +-118.2,33.93,38.0,1626.0,307.0,1280.0,295.0,3.5313,146500.0,<1H OCEAN +-118.21,33.94,34.0,892.0,318.0,1443.0,341.0,2.1903,162500.0,<1H OCEAN +-118.21,33.94,34.0,710.0,205.0,1134.0,233.0,2.7734,141100.0,<1H OCEAN +-118.21,33.93,30.0,2831.0,862.0,3649.0,883.0,1.9668,152100.0,<1H OCEAN +-118.2,33.93,36.0,2210.0,634.0,2341.0,553.0,2.1715,131100.0,<1H OCEAN +-118.21,33.93,33.0,2739.0,801.0,3423.0,741.0,2.2847,132700.0,<1H OCEAN +-118.2,33.93,41.0,857.0,201.0,934.0,227.0,2.6339,145700.0,<1H OCEAN +-118.2,33.93,36.0,1191.0,345.0,1193.0,295.0,2.5185,138800.0,<1H OCEAN +-118.21,33.93,36.0,1337.0,382.0,1769.0,393.0,2.6953,121000.0,<1H OCEAN +-118.21,33.93,39.0,354.0,73.0,184.0,58.0,2.7679,108900.0,<1H OCEAN +-118.22,33.93,39.0,1921.0,483.0,2286.0,470.0,3.0167,130000.0,<1H OCEAN +-118.22,33.94,40.0,930.0,258.0,1203.0,244.0,2.5938,115400.0,<1H OCEAN +-118.23,33.93,23.0,545.0,131.0,610.0,126.0,1.4861,95100.0,<1H OCEAN +-118.23,33.93,30.0,1147.0,260.0,1219.0,210.0,2.0658,93200.0,<1H OCEAN +-118.22,33.93,30.0,443.0,170.0,903.0,189.0,2.1964,125000.0,<1H OCEAN +-118.21,33.93,41.0,619.0,138.0,636.0,145.0,2.5083,118100.0,<1H OCEAN +-118.21,33.92,37.0,1705.0,403.0,1839.0,410.0,2.5833,132700.0,<1H OCEAN +-118.21,33.92,35.0,1669.0,445.0,1870.0,412.0,3.0417,117300.0,<1H OCEAN +-118.21,33.92,28.0,2949.0,1003.0,4551.0,930.0,1.9026,131900.0,<1H OCEAN +-118.22,33.92,43.0,1195.0,256.0,1251.0,262.0,3.4539,125000.0,<1H OCEAN +-118.23,33.93,37.0,239.0,49.0,308.0,52.0,1.4028,105400.0,<1H OCEAN +-118.23,33.93,35.0,1149.0,277.0,909.0,214.0,1.7411,96700.0,<1H OCEAN +-118.23,33.92,32.0,2698.0,640.0,1953.0,613.0,1.2222,107200.0,<1H OCEAN +-118.24,33.93,19.0,325.0,74.0,354.0,87.0,2.75,90600.0,<1H OCEAN +-118.24,33.92,42.0,328.0,100.0,605.0,87.0,2.4464,97400.0,<1H OCEAN +-118.24,33.92,44.0,1079.0,210.0,601.0,182.0,2.2411,106400.0,<1H OCEAN +-118.25,33.93,38.0,180.0,43.0,246.0,56.0,2.85,90000.0,<1H OCEAN +-118.25,33.93,27.0,581.0,135.0,647.0,131.0,3.2917,83100.0,<1H OCEAN +-118.25,33.93,42.0,763.0,191.0,754.0,174.0,2.0486,101800.0,<1H OCEAN +-118.25,33.92,46.0,723.0,154.0,411.0,165.0,2.0893,96500.0,<1H OCEAN +-118.25,33.92,44.0,1737.0,363.0,1184.0,343.0,2.5363,95900.0,<1H OCEAN +-118.25,33.92,44.0,1137.0,235.0,747.0,225.0,2.0,92600.0,<1H OCEAN +-118.26,33.92,42.0,3320.0,682.0,2105.0,632.0,1.9809,104600.0,<1H OCEAN +-118.26,33.91,44.0,892.0,139.0,440.0,159.0,2.8859,120800.0,<1H OCEAN +-118.27,33.92,34.0,1178.0,260.0,1166.0,244.0,1.9185,93300.0,<1H OCEAN +-118.27,33.92,35.0,1818.0,374.0,1444.0,372.0,2.745,106800.0,<1H OCEAN +-118.28,33.92,39.0,1472.0,302.0,1036.0,318.0,3.0,110000.0,<1H OCEAN +-118.28,33.92,37.0,742.0,151.0,729.0,144.0,3.055,105400.0,<1H OCEAN +-118.27,33.91,42.0,1786.0,358.0,1318.0,373.0,2.625,101100.0,<1H OCEAN +-118.27,33.91,37.0,3018.0,547.0,1720.0,512.0,2.7269,124100.0,<1H OCEAN +-118.27,33.91,32.0,2238.0,471.0,1292.0,467.0,1.1705,110600.0,<1H OCEAN +-118.27,33.89,32.0,1969.0,397.0,1349.0,370.0,4.4659,138100.0,<1H OCEAN +-118.27,33.87,21.0,6108.0,1130.0,3244.0,1113.0,4.2768,181400.0,<1H OCEAN +-118.25,33.9,42.0,1386.0,320.0,1163.0,319.0,2.4271,89500.0,<1H OCEAN +-118.26,33.9,38.0,1566.0,318.0,981.0,318.0,4.0234,111900.0,<1H OCEAN +-118.26,33.9,22.0,894.0,232.0,754.0,222.0,2.0096,110700.0,<1H OCEAN +-118.25,33.92,36.0,949.0,164.0,502.0,163.0,4.1042,124400.0,<1H OCEAN +-118.25,33.91,36.0,1950.0,365.0,1125.0,374.0,3.1111,119300.0,<1H OCEAN +-118.25,33.9,36.0,1135.0,231.0,614.0,227.0,2.5521,113100.0,<1H OCEAN +-118.25,33.91,35.0,1479.0,272.0,963.0,292.0,3.4917,109500.0,<1H OCEAN +-118.26,33.91,39.0,935.0,210.0,711.0,193.0,2.4375,101900.0,<1H OCEAN +-118.26,33.91,33.0,954.0,241.0,655.0,218.0,2.5882,92800.0,<1H OCEAN +-118.26,33.91,39.0,967.0,256.0,903.0,256.0,1.9038,93100.0,<1H OCEAN +-118.24,33.91,40.0,972.0,240.0,761.0,225.0,1.4688,88200.0,<1H OCEAN +-118.24,33.91,38.0,745.0,152.0,721.0,160.0,1.875,102900.0,<1H OCEAN +-118.24,33.91,36.0,1446.0,316.0,1286.0,314.0,2.7083,103600.0,<1H OCEAN +-118.24,33.91,37.0,1607.0,377.0,1526.0,375.0,1.7158,94300.0,<1H OCEAN +-118.24,33.92,40.0,1772.0,369.0,1122.0,324.0,3.2768,96100.0,<1H OCEAN +-118.23,33.92,32.0,1735.0,430.0,1699.0,386.0,1.1793,103800.0,<1H OCEAN +-118.23,33.91,34.0,661.0,146.0,742.0,143.0,2.1734,88200.0,<1H OCEAN +-118.23,33.91,33.0,677.0,182.0,984.0,174.0,2.5893,88900.0,<1H OCEAN +-118.23,33.91,34.0,789.0,200.0,1041.0,191.0,3.119,90300.0,<1H OCEAN +-118.23,33.91,27.0,1694.0,393.0,1890.0,373.0,3.0341,89100.0,<1H OCEAN +-118.22,33.92,32.0,1263.0,333.0,1789.0,346.0,1.9957,89300.0,<1H OCEAN +-118.22,33.91,31.0,571.0,153.0,841.0,158.0,2.6154,89200.0,<1H OCEAN +-118.23,33.91,34.0,1060.0,276.0,1215.0,250.0,2.0804,84700.0,<1H OCEAN +-118.23,33.92,24.0,1555.0,406.0,1665.0,361.0,1.6437,98800.0,<1H OCEAN +-118.22,33.92,23.0,926.0,409.0,1856.0,408.0,2.1366,100000.0,<1H OCEAN +-118.21,33.91,24.0,1545.0,391.0,1807.0,388.0,2.6429,105300.0,<1H OCEAN +-118.21,33.91,26.0,2422.0,632.0,2601.0,583.0,1.7824,110200.0,<1H OCEAN +-118.22,33.9,38.0,796.0,159.0,679.0,167.0,3.6607,110400.0,<1H OCEAN +-118.22,33.91,28.0,1847.0,500.0,2263.0,473.0,1.5161,103200.0,<1H OCEAN +-118.2,33.9,26.0,1000.0,275.0,1178.0,263.0,2.12,105000.0,<1H OCEAN +-118.21,33.9,35.0,2420.0,579.0,2010.0,540.0,2.0817,104600.0,<1H OCEAN +-118.21,33.9,41.0,941.0,233.0,973.0,253.0,1.9583,102300.0,<1H OCEAN +-118.22,33.9,35.0,1649.0,424.0,1786.0,388.0,1.4091,105600.0,<1H OCEAN +-118.22,33.9,30.0,1007.0,260.0,1112.0,238.0,1.7262,115600.0,<1H OCEAN +-118.2,33.92,36.0,414.0,104.0,477.0,130.0,3.6719,130400.0,<1H OCEAN +-118.2,33.92,45.0,1283.0,,1025.0,248.0,3.2798,141200.0,<1H OCEAN +-118.2,33.92,39.0,1050.0,217.0,895.0,207.0,3.1538,155600.0,<1H OCEAN +-118.21,33.91,37.0,1073.0,265.0,1197.0,250.0,2.7109,133000.0,<1H OCEAN +-118.21,33.92,41.0,1722.0,363.0,1432.0,326.0,3.2976,151200.0,<1H OCEAN +-118.21,33.92,36.0,602.0,150.0,645.0,145.0,3.1964,115400.0,<1H OCEAN +-118.18,33.91,41.0,1260.0,299.0,1535.0,322.0,3.0134,128100.0,<1H OCEAN +-118.18,33.91,36.0,1138.0,238.0,878.0,224.0,2.0625,134400.0,<1H OCEAN +-118.19,33.91,43.0,1531.0,357.0,1509.0,376.0,2.6354,128100.0,<1H OCEAN +-118.19,33.91,33.0,915.0,225.0,826.0,212.0,2.7708,117400.0,<1H OCEAN +-118.19,33.92,35.0,915.0,241.0,1153.0,252.0,3.305,115800.0,<1H OCEAN +-118.19,33.91,35.0,2695.0,748.0,2935.0,706.0,2.0134,132400.0,<1H OCEAN +-118.2,33.91,43.0,1381.0,278.0,1494.0,298.0,3.5878,118400.0,<1H OCEAN +-118.2,33.9,33.0,1435.0,322.0,1298.0,299.0,2.7813,105100.0,<1H OCEAN +-118.2,33.91,36.0,2283.0,499.0,1836.0,462.0,2.8793,118100.0,<1H OCEAN +-118.19,33.9,36.0,1073.0,271.0,1385.0,288.0,2.3214,104800.0,<1H OCEAN +-118.19,33.9,32.0,2762.0,652.0,2677.0,632.0,2.5719,105600.0,<1H OCEAN +-118.19,33.9,36.0,2326.0,543.0,2073.0,494.0,1.9952,112900.0,<1H OCEAN +-118.19,33.89,31.0,886.0,224.0,1154.0,247.0,2.1071,99500.0,<1H OCEAN +-118.19,33.89,32.0,1696.0,438.0,1639.0,376.0,2.0357,107300.0,<1H OCEAN +-118.2,33.89,37.0,2394.0,568.0,2499.0,551.0,2.5321,105100.0,<1H OCEAN +-118.2,33.9,34.0,1552.0,444.0,2093.0,413.0,2.2125,103200.0,<1H OCEAN +-118.19,33.89,38.0,4018.0,986.0,3702.0,927.0,2.9293,113600.0,<1H OCEAN +-118.2,33.89,40.0,2538.0,564.0,2170.0,541.0,2.7212,107900.0,<1H OCEAN +-118.21,33.89,42.0,1254.0,225.0,929.0,235.0,4.3646,116200.0,<1H OCEAN +-118.21,33.89,39.0,1565.0,364.0,1389.0,360.0,2.7443,113900.0,<1H OCEAN +-118.21,33.89,42.0,1739.0,370.0,1104.0,297.0,2.2125,120700.0,<1H OCEAN +-118.21,33.9,43.0,1810.0,357.0,1335.0,358.0,3.1189,118800.0,<1H OCEAN +-118.21,33.89,45.0,1211.0,234.0,1128.0,261.0,3.4792,110700.0,<1H OCEAN +-118.21,33.88,38.0,929.0,166.0,686.0,183.0,3.4485,119400.0,<1H OCEAN +-118.21,33.88,29.0,1976.0,444.0,1254.0,371.0,2.1782,126800.0,<1H OCEAN +-118.22,33.89,26.0,266.0,75.0,252.0,59.0,2.1211,138100.0,<1H OCEAN +-118.22,33.89,41.0,990.0,228.0,776.0,207.0,2.125,120200.0,<1H OCEAN +-118.22,33.89,37.0,797.0,190.0,485.0,166.0,2.7434,95200.0,<1H OCEAN +-118.22,33.89,36.0,873.0,240.0,1086.0,217.0,2.25,126600.0,<1H OCEAN +-118.23,33.89,16.0,5003.0,1180.0,4145.0,1159.0,2.1389,133400.0,<1H OCEAN +-118.24,33.89,34.0,1479.0,332.0,1166.0,322.0,2.6165,100900.0,<1H OCEAN +-118.22,33.91,27.0,500.0,159.0,732.0,162.0,2.7426,103100.0,<1H OCEAN +-118.22,33.9,22.0,312.0,107.0,583.0,119.0,1.9423,98400.0,<1H OCEAN +-118.22,33.9,40.0,1802.0,496.0,2096.0,468.0,2.3542,97900.0,<1H OCEAN +-118.23,33.9,31.0,2143.0,522.0,2276.0,519.0,1.8095,100800.0,<1H OCEAN +-118.23,33.9,34.0,2462.0,553.0,2334.0,502.0,1.641,96800.0,<1H OCEAN +-118.23,33.9,28.0,1108.0,284.0,1498.0,289.0,2.4706,88800.0,<1H OCEAN +-118.23,33.9,45.0,1285.0,238.0,840.0,211.0,3.4107,112500.0,<1H OCEAN +-118.24,33.9,38.0,2055.0,442.0,1518.0,425.0,2.3382,103000.0,<1H OCEAN +-118.24,33.9,35.0,1079.0,247.0,1055.0,243.0,2.375,93600.0,<1H OCEAN +-118.24,33.9,39.0,642.0,129.0,475.0,123.0,1.2083,92600.0,<1H OCEAN +-118.25,33.9,37.0,2119.0,442.0,1372.0,406.0,1.9605,106200.0,<1H OCEAN +-118.24,33.9,40.0,1308.0,272.0,901.0,257.0,2.8269,98000.0,<1H OCEAN +-118.25,33.9,38.0,1201.0,223.0,733.0,206.0,3.3804,105800.0,<1H OCEAN +-118.25,33.89,35.0,1582.0,391.0,1957.0,404.0,2.4537,91500.0,<1H OCEAN +-118.24,33.89,32.0,1132.0,266.0,1211.0,279.0,2.1838,98300.0,<1H OCEAN +-118.25,33.89,41.0,1476.0,286.0,1086.0,278.0,2.4632,111700.0,<1H OCEAN +-118.25,33.89,36.0,406.0,71.0,268.0,77.0,3.9,115800.0,<1H OCEAN +-118.25,33.89,34.0,1367.0,288.0,1183.0,286.0,2.6812,104100.0,<1H OCEAN +-118.26,33.89,36.0,2230.0,417.0,1395.0,381.0,2.8493,109600.0,<1H OCEAN +-118.26,33.89,36.0,923.0,165.0,603.0,191.0,3.5687,120700.0,<1H OCEAN +-118.24,33.88,37.0,1843.0,366.0,1207.0,351.0,2.4821,111000.0,<1H OCEAN +-118.25,33.88,37.0,1027.0,217.0,1042.0,254.0,2.2121,98600.0,<1H OCEAN +-118.25,33.89,37.0,1042.0,213.0,699.0,196.0,2.9643,103200.0,<1H OCEAN +-118.25,33.89,36.0,1527.0,309.0,1154.0,279.0,3.3095,105500.0,<1H OCEAN +-118.26,33.88,39.0,1756.0,320.0,1055.0,322.0,3.2375,105200.0,<1H OCEAN +-118.26,33.88,40.0,519.0,102.0,330.0,95.0,3.0972,108500.0,<1H OCEAN +-118.26,33.88,36.0,1212.0,222.0,775.0,224.0,5.5591,136500.0,<1H OCEAN +-118.22,33.88,37.0,1149.0,280.0,1016.0,250.0,2.125,101900.0,<1H OCEAN +-118.22,33.88,35.0,998.0,313.0,1335.0,311.0,1.6574,102500.0,<1H OCEAN +-118.23,33.89,35.0,1255.0,344.0,1782.0,343.0,2.1949,95100.0,<1H OCEAN +-118.23,33.88,35.0,842.0,201.0,763.0,189.0,2.6719,109800.0,<1H OCEAN +-118.23,33.88,41.0,1941.0,367.0,1204.0,323.0,3.0417,113700.0,<1H OCEAN +-118.23,33.89,36.0,2598.0,514.0,1872.0,514.0,3.1667,117700.0,<1H OCEAN +-118.22,33.86,16.0,8732.0,1489.0,3944.0,1493.0,5.1948,203500.0,<1H OCEAN +-118.24,33.85,25.0,9594.0,1489.0,5237.0,1496.0,5.9684,193300.0,<1H OCEAN +-118.23,33.84,25.0,1106.0,207.0,888.0,216.0,5.3307,207000.0,<1H OCEAN +-118.24,33.83,22.0,7368.0,1367.0,4721.0,1342.0,4.8438,213100.0,<1H OCEAN +-118.25,33.84,19.0,1731.0,420.0,1032.0,364.0,3.8125,208100.0,<1H OCEAN +-118.25,33.87,18.0,6812.0,1263.0,3704.0,1216.0,4.25,169200.0,<1H OCEAN +-118.25,33.86,26.0,3022.0,476.0,1852.0,452.0,6.0531,186400.0,<1H OCEAN +-118.26,33.85,25.0,2324.0,326.0,1087.0,328.0,5.293,207000.0,<1H OCEAN +-118.26,33.85,24.0,9071.0,1335.0,4558.0,1327.0,5.542,197500.0,<1H OCEAN +-118.27,33.86,33.0,1685.0,333.0,1484.0,318.0,4.3527,167000.0,<1H OCEAN +-118.27,33.86,29.0,2587.0,489.0,2115.0,475.0,3.7466,168600.0,<1H OCEAN +-118.27,33.86,26.0,1097.0,167.0,701.0,188.0,6.5799,196600.0,<1H OCEAN +-118.28,33.85,27.0,489.0,98.0,403.0,97.0,5.144,180800.0,<1H OCEAN +-118.28,33.84,27.0,2326.0,533.0,1697.0,546.0,3.8633,187900.0,<1H OCEAN +-118.28,33.83,18.0,5923.0,1409.0,3887.0,1322.0,3.4712,194400.0,<1H OCEAN +-118.29,33.84,11.0,2274.0,617.0,1897.0,622.0,3.5094,162900.0,<1H OCEAN +-118.29,33.84,33.0,896.0,208.0,843.0,200.0,3.5,183000.0,<1H OCEAN +-118.29,33.84,34.0,2617.0,558.0,1396.0,515.0,5.061,218000.0,<1H OCEAN +-118.29,33.84,23.0,3626.0,799.0,2321.0,731.0,4.7393,237900.0,<1H OCEAN +-118.29,33.83,24.0,4092.0,893.0,2819.0,893.0,4.1378,216500.0,<1H OCEAN +-118.28,33.82,26.0,4586.0,1042.0,3680.0,1027.0,4.174,205100.0,<1H OCEAN +-118.29,33.82,21.0,4383.0,901.0,2689.0,913.0,3.4375,218800.0,<1H OCEAN +-118.29,33.81,19.0,7023.0,1538.0,3993.0,1412.0,5.0532,218200.0,<1H OCEAN +-118.29,33.8,21.0,9944.0,1623.0,4185.0,1582.0,4.526,329400.0,<1H OCEAN +-118.28,33.82,30.0,3615.0,760.0,2813.0,752.0,5.3849,217700.0,<1H OCEAN +-118.28,33.81,29.0,2755.0,508.0,2046.0,488.0,5.2034,212400.0,<1H OCEAN +-118.27,33.82,36.0,1593.0,334.0,1427.0,320.0,4.4015,166900.0,<1H OCEAN +-118.27,33.82,33.0,1596.0,337.0,1650.0,329.0,4.3687,173500.0,<1H OCEAN +-118.27,33.82,37.0,943.0,218.0,803.0,216.0,5.2287,191100.0,<1H OCEAN +-118.27,33.81,10.0,1881.0,571.0,1769.0,553.0,3.9286,114000.0,<1H OCEAN +-118.27,33.81,42.0,865.0,208.0,811.0,218.0,3.8621,165300.0,<1H OCEAN +-118.27,33.81,38.0,1607.0,337.0,1130.0,334.0,4.4821,190700.0,<1H OCEAN +-118.27,33.82,39.0,1357.0,249.0,763.0,229.0,4.25,200300.0,<1H OCEAN +-118.27,33.8,28.0,4698.0,902.0,3287.0,881.0,4.8508,215900.0,<1H OCEAN +-118.27,33.84,24.0,6303.0,1277.0,3728.0,1252.0,3.9227,208600.0,<1H OCEAN +-118.28,33.83,28.0,880.0,168.0,717.0,142.0,4.5469,175700.0,<1H OCEAN +-118.27,33.83,28.0,2152.0,415.0,1623.0,429.0,4.35,200500.0,<1H OCEAN +-118.27,33.83,34.0,1124.0,245.0,717.0,242.0,3.1667,186900.0,<1H OCEAN +-118.26,33.83,24.0,3059.0,,2064.0,629.0,3.5518,184600.0,<1H OCEAN +-118.27,33.82,28.0,1642.0,434.0,1575.0,420.0,4.1292,201900.0,<1H OCEAN +-118.26,33.82,28.0,5091.0,1074.0,4753.0,1033.0,3.6477,117400.0,<1H OCEAN +-118.26,33.83,28.0,4112.0,861.0,3211.0,841.0,4.4539,192200.0,<1H OCEAN +-118.21,33.84,28.0,822.0,205.0,627.0,192.0,3.4583,166300.0,<1H OCEAN +-118.22,33.84,35.0,1131.0,273.0,1007.0,269.0,4.0219,168300.0,<1H OCEAN +-118.22,33.84,38.0,1928.0,429.0,1358.0,399.0,4.0687,160300.0,<1H OCEAN +-118.22,33.83,42.0,1370.0,299.0,1018.0,328.0,4.4474,160200.0,<1H OCEAN +-118.22,33.83,44.0,1792.0,404.0,1115.0,358.0,3.9091,174400.0,<1H OCEAN +-118.22,33.83,43.0,1426.0,272.0,871.0,276.0,3.7083,175200.0,<1H OCEAN +-118.21,33.83,38.0,793.0,193.0,601.0,187.0,2.8837,176100.0,NEAR OCEAN +-118.07,33.93,5.0,906.0,187.0,1453.0,158.0,4.125,171900.0,<1H OCEAN +-118.08,33.93,39.0,859.0,164.0,673.0,172.0,3.7143,158200.0,<1H OCEAN +-118.08,33.93,39.0,1478.0,324.0,1127.0,320.0,3.525,158000.0,<1H OCEAN +-118.08,33.92,38.0,1335.0,,1011.0,269.0,3.6908,157500.0,<1H OCEAN +-118.08,33.92,39.0,1631.0,322.0,1034.0,328.0,4.5382,165700.0,<1H OCEAN +-118.07,33.92,36.0,1560.0,320.0,1348.0,314.0,3.622,174000.0,<1H OCEAN +-118.08,33.92,34.0,2118.0,437.0,1414.0,442.0,3.7238,166800.0,<1H OCEAN +-118.08,33.93,33.0,2263.0,511.0,1626.0,457.0,3.5556,172800.0,<1H OCEAN +-118.08,33.93,34.0,1558.0,375.0,1179.0,337.0,3.2188,165100.0,<1H OCEAN +-118.09,33.92,36.0,2381.0,419.0,1669.0,444.0,4.6976,171100.0,<1H OCEAN +-118.09,33.92,36.0,847.0,185.0,713.0,194.0,4.8542,167400.0,<1H OCEAN +-118.09,33.92,36.0,1226.0,211.0,711.0,219.0,4.5699,170800.0,<1H OCEAN +-118.09,33.92,33.0,879.0,181.0,547.0,169.0,5.3146,168600.0,<1H OCEAN +-118.09,33.92,31.0,1983.0,419.0,1157.0,390.0,3.5455,168300.0,<1H OCEAN +-118.09,33.93,37.0,1950.0,356.0,1183.0,338.0,4.1449,175300.0,<1H OCEAN +-118.1,33.92,35.0,2017.0,383.0,1388.0,386.0,4.0774,171600.0,<1H OCEAN +-118.1,33.93,36.0,1124.0,217.0,707.0,234.0,4.375,174500.0,<1H OCEAN +-118.1,33.93,33.0,1474.0,325.0,1205.0,335.0,3.1397,166800.0,<1H OCEAN +-118.11,33.92,32.0,1016.0,190.0,729.0,177.0,4.3,151300.0,<1H OCEAN +-118.11,33.92,34.0,1414.0,263.0,983.0,264.0,4.1767,156600.0,<1H OCEAN +-118.1,33.94,33.0,639.0,129.0,460.0,118.0,3.1607,189000.0,<1H OCEAN +-118.1,33.93,35.0,1622.0,302.0,845.0,284.0,4.5769,186100.0,<1H OCEAN +-118.1,33.95,34.0,3635.0,781.0,2171.0,720.0,3.7308,196900.0,<1H OCEAN +-118.1,33.95,27.0,1666.0,365.0,995.0,354.0,4.5694,204300.0,<1H OCEAN +-118.11,33.95,36.0,2049.0,334.0,1105.0,363.0,4.8036,261300.0,<1H OCEAN +-118.1,33.94,34.0,1947.0,284.0,841.0,277.0,6.1814,453600.0,<1H OCEAN +-118.11,33.95,34.0,2319.0,334.0,941.0,356.0,6.4319,452300.0,<1H OCEAN +-118.11,33.95,34.0,1723.0,279.0,617.0,252.0,6.7501,400000.0,<1H OCEAN +-118.12,33.97,33.0,3099.0,839.0,2025.0,750.0,3.183,191100.0,<1H OCEAN +-118.12,33.96,38.0,1301.0,264.0,877.0,275.0,4.625,191300.0,<1H OCEAN +-118.11,33.96,29.0,2784.0,582.0,1278.0,550.0,4.3882,261600.0,<1H OCEAN +-118.12,33.95,35.0,1604.0,280.0,802.0,280.0,5.752,291000.0,<1H OCEAN +-118.12,33.96,34.0,2863.0,451.0,1243.0,466.0,6.0723,297200.0,<1H OCEAN +-118.12,33.96,38.0,2105.0,348.0,956.0,350.0,4.4125,246000.0,<1H OCEAN +-118.12,33.96,36.0,1426.0,235.0,698.0,240.0,4.8523,267300.0,<1H OCEAN +-118.12,33.97,35.0,708.0,145.0,471.0,153.0,3.2,197400.0,<1H OCEAN +-118.13,33.97,36.0,1759.0,295.0,837.0,267.0,4.6992,251900.0,<1H OCEAN +-118.13,33.96,36.0,1933.0,341.0,958.0,335.0,4.4732,266000.0,<1H OCEAN +-118.13,33.96,38.0,1040.0,202.0,557.0,228.0,4.0,254700.0,<1H OCEAN +-118.14,33.96,34.0,2744.0,541.0,1333.0,503.0,4.0536,277200.0,<1H OCEAN +-118.13,33.96,35.0,1500.0,250.0,706.0,250.0,4.5625,253500.0,<1H OCEAN +-118.13,33.97,34.0,1736.0,297.0,823.0,292.0,5.4042,241600.0,<1H OCEAN +-118.13,33.95,37.0,1709.0,333.0,778.0,344.0,3.9036,326600.0,<1H OCEAN +-118.14,33.95,44.0,1812.0,338.0,822.0,314.0,6.7744,294100.0,<1H OCEAN +-118.14,33.95,42.0,1413.0,228.0,630.0,219.0,6.8564,300000.0,<1H OCEAN +-118.14,33.95,37.0,1462.0,243.0,600.0,236.0,5.2015,302000.0,<1H OCEAN +-118.14,33.95,36.0,1942.0,355.0,891.0,348.0,3.6635,282100.0,<1H OCEAN +-118.15,33.96,33.0,2418.0,485.0,1397.0,477.0,3.1083,285500.0,<1H OCEAN +-118.15,33.95,31.0,1053.0,230.0,686.0,211.0,4.0,263200.0,<1H OCEAN +-118.12,33.95,36.0,2752.0,459.0,1211.0,452.0,5.0526,269800.0,<1H OCEAN +-118.12,33.94,35.0,1813.0,313.0,825.0,316.0,5.2485,323800.0,<1H OCEAN +-118.12,33.94,33.0,2394.0,576.0,1166.0,548.0,2.7317,264700.0,<1H OCEAN +-118.13,33.94,34.0,522.0,138.0,373.0,139.0,3.5481,265000.0,<1H OCEAN +-118.13,33.95,24.0,6662.0,1852.0,3792.0,1735.0,3.1104,230000.0,<1H OCEAN +-118.11,33.93,35.0,2670.0,493.0,1196.0,488.0,3.8427,283500.0,<1H OCEAN +-118.11,33.94,37.0,1434.0,262.0,786.0,256.0,4.4375,244900.0,<1H OCEAN +-118.11,33.94,32.0,2098.0,378.0,1036.0,385.0,5.0258,255400.0,<1H OCEAN +-118.12,33.94,31.0,2210.0,519.0,1047.0,472.0,3.3292,271300.0,<1H OCEAN +-118.12,33.94,33.0,2206.0,393.0,973.0,364.0,4.675,283000.0,<1H OCEAN +-118.11,33.94,36.0,1949.0,319.0,909.0,325.0,5.1587,296600.0,<1H OCEAN +-118.11,33.93,17.0,1205.0,347.0,736.0,342.0,3.2011,162500.0,<1H OCEAN +-118.12,33.92,27.0,6336.0,1628.0,4673.0,1505.0,2.5893,183700.0,<1H OCEAN +-118.12,33.93,27.0,580.0,143.0,466.0,133.0,3.0909,187500.0,<1H OCEAN +-118.13,33.92,28.0,3069.0,864.0,1932.0,835.0,2.4925,177200.0,<1H OCEAN +-118.13,33.93,38.0,2040.0,458.0,1775.0,445.0,3.5227,202400.0,<1H OCEAN +-118.13,33.92,36.0,984.0,183.0,615.0,206.0,4.1786,201500.0,<1H OCEAN +-118.14,33.92,31.0,3731.0,853.0,2313.0,801.0,3.2237,218200.0,<1H OCEAN +-118.14,33.93,31.0,3205.0,727.0,1647.0,664.0,3.3681,223900.0,<1H OCEAN +-118.14,33.93,32.0,2065.0,438.0,1075.0,442.0,4.4279,226400.0,<1H OCEAN +-118.15,33.93,30.0,3096.0,628.0,1676.0,587.0,4.6583,207300.0,<1H OCEAN +-118.13,33.93,34.0,2122.0,517.0,1578.0,488.0,3.1496,191900.0,<1H OCEAN +-118.13,33.93,19.0,1793.0,447.0,1222.0,452.0,2.6862,195800.0,<1H OCEAN +-118.14,33.94,31.0,2841.0,774.0,1612.0,708.0,2.9205,196600.0,<1H OCEAN +-118.14,33.94,35.0,2987.0,601.0,1561.0,606.0,4.0039,226500.0,<1H OCEAN +-118.15,33.94,36.0,1948.0,341.0,992.0,363.0,4.2594,242400.0,<1H OCEAN +-118.15,33.94,37.0,1594.0,321.0,1003.0,323.0,3.3289,199700.0,<1H OCEAN +-118.15,33.95,35.0,2753.0,702.0,1592.0,614.0,2.7875,209000.0,<1H OCEAN +-118.16,33.94,25.0,3341.0,789.0,1685.0,751.0,3.6936,238300.0,<1H OCEAN +-118.15,33.93,25.0,1948.0,433.0,1128.0,429.0,3.7614,255900.0,<1H OCEAN +-118.16,33.94,25.0,5675.0,1224.0,3317.0,1119.0,3.9352,232900.0,<1H OCEAN +-118.15,33.93,42.0,1839.0,346.0,1034.0,339.0,4.9808,212300.0,<1H OCEAN +-118.15,33.93,34.0,1745.0,404.0,1084.0,410.0,3.3411,220500.0,<1H OCEAN +-118.16,33.92,36.0,2062.0,351.0,1134.0,358.0,4.4881,218900.0,<1H OCEAN +-118.14,33.92,35.0,2378.0,559.0,1799.0,546.0,3.9327,190500.0,<1H OCEAN +-118.15,33.92,36.0,1890.0,400.0,1232.0,386.0,4.375,184200.0,<1H OCEAN +-118.15,33.92,40.0,1335.0,281.0,804.0,282.0,4.3194,198400.0,<1H OCEAN +-118.15,33.92,28.0,1038.0,252.0,912.0,245.0,2.5875,161200.0,<1H OCEAN +-118.15,33.92,30.0,915.0,234.0,646.0,211.0,2.5208,182800.0,<1H OCEAN +-118.11,33.91,19.0,3056.0,759.0,1561.0,740.0,3.1369,196900.0,<1H OCEAN +-118.12,33.91,34.0,682.0,132.0,491.0,144.0,4.6389,173800.0,<1H OCEAN +-118.12,33.91,35.0,620.0,122.0,381.0,124.0,3.7917,183900.0,<1H OCEAN +-118.12,33.91,35.0,1518.0,279.0,857.0,251.0,3.6917,197500.0,<1H OCEAN +-118.13,33.91,35.0,561.0,104.0,261.0,105.0,4.9375,183800.0,<1H OCEAN +-118.13,33.91,34.0,916.0,162.0,552.0,164.0,4.9107,222000.0,<1H OCEAN +-118.14,33.91,36.0,1096.0,204.0,569.0,201.0,4.475,182300.0,<1H OCEAN +-118.14,33.91,34.0,2011.0,472.0,1087.0,423.0,3.0465,187800.0,<1H OCEAN +-118.1,33.91,40.0,513.0,100.0,399.0,99.0,4.875,167600.0,<1H OCEAN +-118.1,33.91,36.0,1080.0,201.0,719.0,201.0,4.2679,175800.0,<1H OCEAN +-118.1,33.91,36.0,726.0,,490.0,130.0,3.6389,167600.0,<1H OCEAN +-118.1,33.9,35.0,1151.0,248.0,809.0,246.0,4.7813,160000.0,<1H OCEAN +-118.11,33.91,29.0,889.0,166.0,597.0,163.0,4.9609,186700.0,<1H OCEAN +-118.11,33.91,22.0,1981.0,472.0,1231.0,457.0,4.0878,153700.0,<1H OCEAN +-118.1,33.91,29.0,505.0,113.0,411.0,113.0,2.6397,164400.0,<1H OCEAN +-118.09,33.91,14.0,2369.0,604.0,1546.0,464.0,3.7969,159400.0,<1H OCEAN +-118.09,33.91,34.0,1582.0,343.0,1356.0,324.0,3.4211,141100.0,<1H OCEAN +-118.09,33.91,36.0,1442.0,271.0,990.0,268.0,4.0517,162200.0,<1H OCEAN +-118.09,33.92,35.0,1994.0,419.0,1491.0,428.0,3.7383,166200.0,<1H OCEAN +-118.1,33.91,35.0,1592.0,335.0,1238.0,320.0,4.9732,165000.0,<1H OCEAN +-118.08,33.91,36.0,1551.0,297.0,1100.0,322.0,5.1187,168100.0,<1H OCEAN +-118.08,33.91,30.0,1366.0,460.0,920.0,410.0,0.9946,159900.0,<1H OCEAN +-118.09,33.9,36.0,1215.0,279.0,862.0,285.0,3.7604,158700.0,<1H OCEAN +-118.09,33.9,37.0,1112.0,222.0,771.0,224.0,4.2132,164600.0,<1H OCEAN +-118.1,33.91,35.0,1653.0,325.0,1072.0,301.0,3.2708,159700.0,<1H OCEAN +-118.08,33.91,30.0,3259.0,942.0,2744.0,895.0,2.8608,165600.0,<1H OCEAN +-118.07,33.91,29.0,2387.0,570.0,1978.0,548.0,3.1957,159200.0,<1H OCEAN +-118.08,33.91,18.0,1573.0,396.0,1200.0,365.0,2.895,146900.0,<1H OCEAN +-118.06,33.91,24.0,4880.0,1044.0,4516.0,1050.0,4.1387,157700.0,<1H OCEAN +-118.06,33.91,21.0,2863.0,701.0,1489.0,621.0,3.2031,180700.0,<1H OCEAN +-118.06,33.91,36.0,1360.0,271.0,909.0,275.0,4.6731,173300.0,<1H OCEAN +-118.07,33.91,35.0,2228.0,463.0,1558.0,427.0,4.023,157700.0,<1H OCEAN +-118.05,33.9,41.0,550.0,129.0,642.0,125.0,1.875,119900.0,<1H OCEAN +-118.05,33.9,36.0,1047.0,227.0,975.0,239.0,3.1897,155000.0,<1H OCEAN +-118.06,33.9,37.0,1161.0,254.0,882.0,236.0,4.4167,158000.0,<1H OCEAN +-118.06,33.89,26.0,2483.0,412.0,1538.0,449.0,5.1104,220500.0,<1H OCEAN +-118.07,33.89,29.0,1138.0,217.0,964.0,222.0,4.537,185300.0,<1H OCEAN +-118.07,33.89,17.0,2223.0,544.0,2008.0,512.0,3.0777,160800.0,<1H OCEAN +-118.07,33.89,35.0,1145.0,274.0,1651.0,265.0,3.125,120300.0,<1H OCEAN +-118.08,33.89,28.0,1035.0,275.0,1545.0,269.0,3.0357,123400.0,<1H OCEAN +-118.08,33.89,35.0,1071.0,290.0,1412.0,274.0,3.1917,114900.0,<1H OCEAN +-118.08,33.89,37.0,1152.0,259.0,981.0,225.0,3.2857,153600.0,<1H OCEAN +-118.07,33.9,39.0,2502.0,546.0,1849.0,518.0,3.8846,164100.0,<1H OCEAN +-118.07,33.9,42.0,1007.0,224.0,776.0,228.0,3.8672,162700.0,<1H OCEAN +-118.07,33.9,45.0,1776.0,353.0,1180.0,337.0,4.6406,169200.0,<1H OCEAN +-118.08,33.9,44.0,1167.0,237.0,733.0,237.0,4.2083,168300.0,<1H OCEAN +-118.08,33.9,42.0,1768.0,372.0,1155.0,368.0,3.558,161100.0,<1H OCEAN +-118.09,33.9,37.0,1147.0,258.0,742.0,242.0,4.0461,153500.0,<1H OCEAN +-118.09,33.9,33.0,3326.0,720.0,2533.0,689.0,3.1441,176300.0,<1H OCEAN +-118.1,33.9,43.0,1237.0,243.0,776.0,246.0,4.325,166000.0,<1H OCEAN +-118.1,33.9,40.0,1880.0,377.0,1229.0,378.0,4.4167,174600.0,<1H OCEAN +-118.08,33.89,41.0,834.0,166.0,603.0,179.0,3.7321,167500.0,<1H OCEAN +-118.09,33.89,42.0,1150.0,215.0,708.0,204.0,3.6875,171500.0,<1H OCEAN +-118.09,33.89,42.0,991.0,,717.0,219.0,4.0926,164400.0,<1H OCEAN +-118.09,33.89,27.0,3399.0,882.0,2465.0,811.0,3.099,166600.0,<1H OCEAN +-118.1,33.89,34.0,2242.0,436.0,1483.0,443.0,4.4934,185600.0,<1H OCEAN +-118.1,33.9,37.0,1061.0,202.0,768.0,206.0,4.75,161900.0,<1H OCEAN +-118.1,33.9,37.0,796.0,175.0,740.0,183.0,3.6,156400.0,<1H OCEAN +-118.1,33.89,36.0,769.0,142.0,498.0,137.0,4.7159,182100.0,<1H OCEAN +-118.1,33.89,35.0,994.0,203.0,602.0,185.0,3.5865,178000.0,<1H OCEAN +-118.11,33.9,35.0,2604.0,495.0,1465.0,470.0,4.4896,184600.0,<1H OCEAN +-118.11,33.9,26.0,4173.0,893.0,2471.0,863.0,3.5052,196000.0,<1H OCEAN +-118.11,33.89,35.0,1139.0,197.0,772.0,233.0,4.375,204700.0,<1H OCEAN +-118.11,33.88,35.0,1623.0,304.0,868.0,272.0,3.5893,276000.0,<1H OCEAN +-118.11,33.89,34.0,2508.0,594.0,1549.0,545.0,3.2069,236500.0,<1H OCEAN +-118.11,33.9,35.0,1323.0,269.0,1084.0,240.0,5.0753,178000.0,<1H OCEAN +-118.11,33.9,36.0,1347.0,278.0,748.0,278.0,5.1423,183100.0,<1H OCEAN +-118.11,33.91,36.0,1088.0,231.0,617.0,211.0,3.8824,193100.0,<1H OCEAN +-118.12,33.91,36.0,1432.0,265.0,749.0,261.0,3.5772,207400.0,<1H OCEAN +-118.12,33.91,36.0,2053.0,386.0,1023.0,394.0,3.0,216600.0,<1H OCEAN +-118.13,33.9,38.0,1475.0,269.0,827.0,265.0,4.7663,191600.0,<1H OCEAN +-118.13,33.91,36.0,1967.0,316.0,910.0,306.0,4.4948,190600.0,<1H OCEAN +-118.14,33.91,37.0,932.0,171.0,578.0,175.0,4.375,177600.0,<1H OCEAN +-118.14,33.9,26.0,2145.0,471.0,1150.0,429.0,3.5972,225800.0,<1H OCEAN +-118.14,33.91,34.0,1766.0,410.0,974.0,404.0,3.0703,180800.0,<1H OCEAN +-118.14,33.91,32.0,1981.0,472.0,1371.0,431.0,3.1204,204200.0,<1H OCEAN +-118.15,33.91,35.0,1590.0,350.0,1299.0,335.0,4.0313,163200.0,<1H OCEAN +-118.15,33.91,38.0,901.0,205.0,760.0,208.0,2.9643,147400.0,<1H OCEAN +-118.15,33.9,20.0,2850.0,737.0,1855.0,662.0,2.809,144600.0,<1H OCEAN +-118.16,33.9,28.0,2410.0,616.0,2399.0,594.0,2.7339,156700.0,<1H OCEAN +-118.16,33.91,28.0,2922.0,739.0,3013.0,673.0,2.9531,127100.0,<1H OCEAN +-118.16,33.91,35.0,1403.0,338.0,1415.0,367.0,3.0967,144000.0,<1H OCEAN +-118.15,33.91,35.0,574.0,116.0,610.0,147.0,3.3182,133300.0,<1H OCEAN +-118.15,33.91,25.0,2053.0,578.0,1721.0,507.0,2.3456,146100.0,<1H OCEAN +-118.16,33.91,6.0,3445.0,847.0,2467.0,712.0,3.1507,144000.0,<1H OCEAN +-118.17,33.9,12.0,3653.0,993.0,3215.0,854.0,2.8681,114200.0,<1H OCEAN +-118.17,33.91,42.0,856.0,167.0,748.0,195.0,3.8,145800.0,<1H OCEAN +-118.17,33.91,37.0,1499.0,288.0,1237.0,344.0,3.9333,162300.0,<1H OCEAN +-118.18,33.9,25.0,1709.0,442.0,1177.0,410.0,2.4333,155000.0,<1H OCEAN +-118.18,33.9,32.0,1452.0,365.0,1888.0,366.0,3.5461,146400.0,<1H OCEAN +-118.18,33.9,32.0,778.0,227.0,933.0,209.0,2.7292,143800.0,<1H OCEAN +-118.18,33.9,31.0,2536.0,603.0,2625.0,576.0,3.0909,150900.0,<1H OCEAN +-118.18,33.9,34.0,1248.0,320.0,1960.0,338.0,3.1012,140400.0,<1H OCEAN +-118.16,33.89,38.0,483.0,113.0,389.0,108.0,2.1859,143800.0,<1H OCEAN +-118.16,33.89,6.0,1655.0,536.0,1201.0,487.0,1.7344,145800.0,<1H OCEAN +-118.17,33.89,52.0,63.0,12.0,47.0,8.0,7.2423,350000.0,<1H OCEAN +-118.17,33.89,11.0,3605.0,880.0,3637.0,873.0,2.6328,160700.0,<1H OCEAN +-118.18,33.89,25.0,5896.0,1464.0,4149.0,1362.0,2.6742,131900.0,<1H OCEAN +-118.15,33.89,30.0,4426.0,995.0,4196.0,921.0,3.274,148300.0,<1H OCEAN +-118.15,33.88,24.0,4232.0,1092.0,2688.0,1035.0,2.52,146000.0,<1H OCEAN +-118.15,33.89,33.0,2848.0,641.0,2319.0,647.0,3.407,190800.0,<1H OCEAN +-118.16,33.89,46.0,940.0,219.0,599.0,214.0,3.2813,190900.0,<1H OCEAN +-118.16,33.88,30.0,1694.0,398.0,1181.0,383.0,2.9779,169500.0,<1H OCEAN +-118.13,33.9,36.0,1814.0,350.0,886.0,347.0,3.4868,208400.0,<1H OCEAN +-118.13,33.89,33.0,3668.0,867.0,2368.0,845.0,2.8906,204900.0,<1H OCEAN +-118.14,33.89,33.0,2867.0,786.0,1774.0,705.0,2.9292,183400.0,<1H OCEAN +-118.13,33.89,36.0,599.0,125.0,361.0,139.0,5.0395,225800.0,<1H OCEAN +-118.13,33.9,36.0,1477.0,305.0,788.0,291.0,3.625,195800.0,<1H OCEAN +-118.14,33.9,39.0,1379.0,282.0,883.0,291.0,3.3375,180100.0,<1H OCEAN +-118.13,33.9,35.0,1458.0,261.0,686.0,236.0,3.9038,202700.0,<1H OCEAN +-118.12,33.9,35.0,3478.0,730.0,1885.0,673.0,2.9375,206500.0,<1H OCEAN +-118.12,33.89,22.0,6876.0,1960.0,5162.0,1879.0,2.9293,170800.0,<1H OCEAN +-118.12,33.89,29.0,2666.0,848.0,2030.0,781.0,2.5432,180900.0,<1H OCEAN +-118.12,33.9,38.0,1222.0,282.0,756.0,256.0,4.125,173900.0,<1H OCEAN +-118.12,33.88,25.0,1768.0,559.0,983.0,488.0,2.6184,243800.0,<1H OCEAN +-118.12,33.88,40.0,2344.0,571.0,1305.0,544.0,3.1923,191900.0,<1H OCEAN +-118.13,33.88,32.0,3088.0,1024.0,1981.0,956.0,2.2027,192700.0,<1H OCEAN +-118.13,33.89,29.0,2823.0,737.0,1723.0,678.0,2.7121,165500.0,<1H OCEAN +-118.14,33.89,37.0,1159.0,238.0,740.0,243.0,4.9107,179600.0,<1H OCEAN +-118.14,33.89,39.0,1744.0,339.0,1048.0,330.0,4.5735,195500.0,<1H OCEAN +-118.14,33.88,30.0,2596.0,580.0,1662.0,539.0,4.0507,179500.0,<1H OCEAN +-118.14,33.89,33.0,1250.0,276.0,866.0,268.0,4.1708,175000.0,<1H OCEAN +-118.14,33.88,41.0,1531.0,343.0,1119.0,341.0,4.3646,161400.0,<1H OCEAN +-118.14,33.88,24.0,3305.0,982.0,2085.0,881.0,2.6641,168200.0,<1H OCEAN +-118.15,33.87,29.0,2690.0,659.0,1747.0,617.0,3.3713,198200.0,<1H OCEAN +-118.11,33.88,19.0,3203.0,708.0,1761.0,667.0,4.0911,239700.0,<1H OCEAN +-118.11,33.87,33.0,1379.0,254.0,795.0,297.0,4.6713,231800.0,<1H OCEAN +-118.11,33.87,15.0,3254.0,598.0,1772.0,618.0,5.0417,240800.0,<1H OCEAN +-118.12,33.87,21.0,3764.0,1081.0,1919.0,977.0,2.5057,156300.0,<1H OCEAN +-118.12,33.88,36.0,1083.0,218.0,557.0,210.0,3.0795,218400.0,<1H OCEAN +-118.13,33.88,32.0,1788.0,459.0,1131.0,461.0,3.5278,166100.0,<1H OCEAN +-118.13,33.87,20.0,3638.0,868.0,2326.0,822.0,3.3304,194600.0,<1H OCEAN +-118.14,33.87,21.0,6618.0,1773.0,4396.0,1649.0,3.0989,171400.0,<1H OCEAN +-118.04,33.88,17.0,4807.0,838.0,3059.0,853.0,5.7619,297300.0,<1H OCEAN +-118.04,33.87,17.0,2358.0,396.0,1387.0,364.0,6.299,285800.0,<1H OCEAN +-118.06,33.88,17.0,7187.0,1073.0,3844.0,1068.0,6.5901,337400.0,<1H OCEAN +-118.05,33.87,18.0,4928.0,773.0,2952.0,754.0,5.8855,313800.0,<1H OCEAN +-118.07,33.88,16.0,4934.0,825.0,2668.0,810.0,5.748,284200.0,<1H OCEAN +-118.07,33.88,17.0,2407.0,539.0,1422.0,524.0,4.2619,139700.0,<1H OCEAN +-118.07,33.88,18.0,2436.0,375.0,1303.0,386.0,6.1968,344700.0,<1H OCEAN +-118.07,33.87,18.0,3405.0,556.0,1945.0,509.0,5.7652,299100.0,<1H OCEAN +-118.08,33.86,17.0,2259.0,383.0,1378.0,386.0,5.8733,287000.0,<1H OCEAN +-118.08,33.85,19.0,4261.0,678.0,2621.0,661.0,6.2427,288700.0,<1H OCEAN +-118.07,33.86,17.0,3666.0,562.0,2104.0,579.0,5.6818,338900.0,<1H OCEAN +-118.07,33.85,16.0,3771.0,606.0,2196.0,564.0,7.0113,319700.0,<1H OCEAN +-118.06,33.86,16.0,5603.0,938.0,3045.0,893.0,5.0778,293700.0,<1H OCEAN +-118.05,33.86,16.0,2851.0,626.0,1985.0,603.0,5.4089,265600.0,<1H OCEAN +-118.03,33.87,16.0,2306.0,393.0,1368.0,387.0,5.93,277600.0,<1H OCEAN +-118.04,33.87,18.0,4626.0,822.0,2794.0,763.0,5.6917,275100.0,<1H OCEAN +-118.04,33.86,21.0,2870.0,437.0,1671.0,470.0,7.2628,322700.0,<1H OCEAN +-118.05,33.86,16.0,2676.0,391.0,1377.0,395.0,6.5513,350400.0,<1H OCEAN +-118.06,33.85,16.0,4851.0,726.0,2527.0,704.0,6.0142,437400.0,<1H OCEAN +-118.1,33.88,18.0,8046.0,1221.0,4276.0,1228.0,6.5515,319600.0,<1H OCEAN +-118.1,33.86,21.0,3052.0,624.0,1588.0,568.0,4.3397,268100.0,<1H OCEAN +-118.09,33.85,19.0,8120.0,1371.0,5026.0,1345.0,6.3093,286500.0,<1H OCEAN +-118.1,33.85,19.0,993.0,174.0,572.0,175.0,5.7039,277600.0,<1H OCEAN +-118.08,33.88,27.0,3065.0,736.0,1840.0,719.0,3.6417,208100.0,<1H OCEAN +-118.09,33.88,27.0,3119.0,635.0,1887.0,567.0,3.8654,195300.0,<1H OCEAN +-118.07,33.89,32.0,1819.0,386.0,1679.0,360.0,3.5562,146000.0,<1H OCEAN +-118.08,33.89,33.0,2131.0,435.0,2045.0,426.0,4.0,145700.0,<1H OCEAN +-118.08,33.88,27.0,923.0,186.0,1014.0,204.0,3.825,159500.0,<1H OCEAN +-118.08,33.88,30.0,1901.0,519.0,2685.0,496.0,3.2639,120100.0,<1H OCEAN +-118.08,33.88,26.0,1507.0,270.0,931.0,275.0,5.1645,244900.0,<1H OCEAN +-118.08,33.87,23.0,2536.0,552.0,2012.0,556.0,4.1406,200800.0,<1H OCEAN +-118.07,33.87,28.0,2399.0,436.0,1613.0,429.0,3.6339,220100.0,<1H OCEAN +-118.09,33.87,31.0,3498.0,728.0,2098.0,697.0,3.9837,246000.0,<1H OCEAN +-118.07,33.86,31.0,2943.0,518.0,1703.0,472.0,3.7091,225900.0,<1H OCEAN +-118.07,33.86,28.0,1789.0,352.0,1347.0,330.0,3.425,189700.0,<1H OCEAN +-118.08,33.86,26.0,778.0,173.0,539.0,186.0,3.2679,236500.0,<1H OCEAN +-118.08,33.86,29.0,3260.0,783.0,1969.0,737.0,3.5268,215500.0,<1H OCEAN +-118.08,33.86,29.0,1018.0,235.0,684.0,248.0,3.3333,198800.0,<1H OCEAN +-118.08,33.84,31.0,2377.0,600.0,2042.0,593.0,3.625,170400.0,<1H OCEAN +-118.08,33.84,31.0,2906.0,578.0,1806.0,553.0,4.8448,194600.0,<1H OCEAN +-118.09,33.84,23.0,4412.0,910.0,2380.0,825.0,4.54,213100.0,<1H OCEAN +-118.09,33.84,27.0,1594.0,295.0,1061.0,320.0,4.7917,217700.0,<1H OCEAN +-118.08,33.85,22.0,1055.0,204.0,682.0,216.0,6.0,191300.0,<1H OCEAN +-118.08,33.84,28.0,4216.0,948.0,2997.0,896.0,3.7961,162700.0,<1H OCEAN +-118.08,33.84,25.0,3696.0,953.0,2827.0,860.0,3.3438,153300.0,<1H OCEAN +-118.06,33.84,26.0,6960.0,1454.0,4367.0,1437.0,4.7953,210900.0,<1H OCEAN +-118.06,33.84,20.0,5643.0,1231.0,3841.0,1195.0,4.0542,168400.0,<1H OCEAN +-118.07,33.82,27.0,3481.0,576.0,1660.0,560.0,5.7965,228200.0,<1H OCEAN +-118.08,33.82,26.0,4259.0,588.0,1644.0,581.0,6.2519,345700.0,<1H OCEAN +-118.08,33.83,30.0,2188.0,556.0,2727.0,525.0,2.7759,136800.0,<1H OCEAN +-118.08,33.82,30.0,2636.0,652.0,3412.0,649.0,2.8095,118300.0,<1H OCEAN +-118.07,33.83,17.0,4822.0,1168.0,3868.0,1117.0,2.5978,142900.0,<1H OCEAN +-118.11,33.86,33.0,2389.0,410.0,1229.0,393.0,5.3889,234900.0,<1H OCEAN +-118.11,33.86,35.0,1255.0,252.0,685.0,279.0,4.2,226900.0,<1H OCEAN +-118.12,33.86,44.0,2663.0,511.0,1277.0,462.0,4.3194,199500.0,<1H OCEAN +-118.12,33.87,43.0,1633.0,355.0,837.0,350.0,3.0405,188000.0,<1H OCEAN +-118.13,33.87,45.0,1606.0,300.0,735.0,295.0,4.6765,198400.0,<1H OCEAN +-118.13,33.86,45.0,1320.0,256.0,645.0,256.0,4.4,209500.0,<1H OCEAN +-118.13,33.86,45.0,1866.0,343.0,919.0,344.0,3.5833,200200.0,<1H OCEAN +-118.14,33.87,44.0,1661.0,315.0,985.0,319.0,4.3942,219500.0,<1H OCEAN +-118.14,33.86,43.0,2104.0,382.0,1071.0,396.0,5.0,208900.0,<1H OCEAN +-118.14,33.86,44.0,1436.0,257.0,745.0,233.0,4.625,213400.0,<1H OCEAN +-118.14,33.86,44.0,1276.0,234.0,538.0,213.0,4.8667,218300.0,<1H OCEAN +-118.14,33.87,44.0,1607.0,271.0,799.0,283.0,5.084,214100.0,<1H OCEAN +-118.15,33.86,36.0,1578.0,312.0,827.0,311.0,4.8942,194100.0,<1H OCEAN +-118.15,33.86,34.0,2403.0,413.0,1385.0,386.0,4.4934,213800.0,<1H OCEAN +-118.16,33.88,33.0,2180.0,522.0,1634.0,467.0,3.0114,167000.0,<1H OCEAN +-118.15,33.87,33.0,2373.0,552.0,1673.0,571.0,3.0685,181800.0,<1H OCEAN +-118.16,33.87,32.0,1854.0,471.0,1363.0,478.0,2.6406,156700.0,<1H OCEAN +-118.16,33.88,18.0,2287.0,662.0,1804.0,537.0,1.9903,170300.0,<1H OCEAN +-118.17,33.88,29.0,815.0,206.0,590.0,183.0,3.0052,166700.0,<1H OCEAN +-118.17,33.88,42.0,1645.0,371.0,1161.0,351.0,3.0893,162700.0,<1H OCEAN +-118.18,33.88,47.0,882.0,185.0,536.0,174.0,4.625,163000.0,<1H OCEAN +-118.18,33.88,44.0,1308.0,267.0,783.0,237.0,4.7361,167700.0,<1H OCEAN +-118.18,33.88,42.0,2326.0,503.0,1832.0,501.0,3.1713,161000.0,<1H OCEAN +-118.19,33.87,27.0,4701.0,1359.0,2571.0,1216.0,2.5417,184100.0,<1H OCEAN +-118.19,33.87,35.0,1769.0,436.0,1166.0,386.0,2.875,178300.0,<1H OCEAN +-118.19,33.86,42.0,1999.0,431.0,1060.0,399.0,3.7031,167100.0,<1H OCEAN +-118.19,33.86,46.0,1824.0,438.0,1200.0,451.0,3.4375,156700.0,<1H OCEAN +-118.19,33.86,38.0,2009.0,524.0,1449.0,451.0,2.7045,155400.0,<1H OCEAN +-118.19,33.86,35.0,1133.0,296.0,774.0,271.0,2.2381,137500.0,<1H OCEAN +-118.19,33.86,36.0,2013.0,546.0,1659.0,522.0,3.1215,153600.0,<1H OCEAN +-118.2,33.86,27.0,2732.0,867.0,1690.0,794.0,2.6465,160200.0,<1H OCEAN +-118.19,33.87,42.0,1213.0,269.0,628.0,229.0,3.6987,152100.0,<1H OCEAN +-118.2,33.88,40.0,1699.0,346.0,1188.0,329.0,4.2083,147300.0,<1H OCEAN +-118.2,33.88,40.0,2945.0,725.0,2858.0,690.0,3.2368,136900.0,<1H OCEAN +-118.21,33.88,31.0,1332.0,417.0,1405.0,363.0,2.0125,143000.0,<1H OCEAN +-118.21,33.88,32.0,1507.0,379.0,1082.0,350.0,3.225,138200.0,<1H OCEAN +-118.2,33.87,26.0,703.0,202.0,757.0,212.0,2.525,155500.0,<1H OCEAN +-118.2,33.87,42.0,1482.0,310.0,1052.0,317.0,3.9469,158200.0,<1H OCEAN +-118.2,33.87,36.0,1554.0,273.0,974.0,264.0,4.2135,161400.0,<1H OCEAN +-118.17,33.87,40.0,2462.0,587.0,1821.0,536.0,3.5646,162600.0,<1H OCEAN +-118.17,33.86,44.0,1701.0,396.0,1091.0,384.0,3.025,162300.0,<1H OCEAN +-118.17,33.87,49.0,1937.0,445.0,1339.0,440.0,3.0319,162800.0,<1H OCEAN +-118.17,33.87,48.0,2258.0,509.0,1395.0,492.0,3.765,164800.0,<1H OCEAN +-118.17,33.87,45.0,2110.0,494.0,1404.0,454.0,2.9803,165900.0,<1H OCEAN +-118.18,33.87,44.0,2137.0,461.0,1126.0,439.0,3.4408,172900.0,<1H OCEAN +-118.18,33.87,44.0,1832.0,401.0,1056.0,405.0,4.0658,175100.0,<1H OCEAN +-118.18,33.87,38.0,2664.0,626.0,1627.0,604.0,3.7527,161900.0,<1H OCEAN +-118.16,33.86,26.0,6607.0,1663.0,4066.0,1558.0,2.5068,156300.0,<1H OCEAN +-118.17,33.86,10.0,1664.0,508.0,1369.0,493.0,2.9886,175000.0,<1H OCEAN +-118.17,33.85,39.0,2247.0,526.0,1670.0,525.0,3.07,173000.0,<1H OCEAN +-118.18,33.85,38.0,3596.0,862.0,2416.0,832.0,3.6897,169800.0,<1H OCEAN +-118.18,33.86,43.0,2752.0,645.0,1674.0,614.0,3.6719,161300.0,<1H OCEAN +-118.18,33.86,39.0,2925.0,732.0,1702.0,642.0,2.375,160800.0,<1H OCEAN +-118.17,33.86,40.0,1301.0,342.0,954.0,336.0,2.3804,158000.0,<1H OCEAN +-118.14,33.86,37.0,1404.0,257.0,652.0,258.0,4.2062,195400.0,<1H OCEAN +-118.15,33.85,30.0,4071.0,1067.0,2144.0,970.0,2.7268,218100.0,<1H OCEAN +-118.15,33.85,36.0,1435.0,249.0,606.0,234.0,4.1439,212600.0,<1H OCEAN +-118.15,33.85,36.0,1491.0,259.0,699.0,266.0,4.0781,217300.0,<1H OCEAN +-118.15,33.86,32.0,2630.0,559.0,1069.0,491.0,2.4659,209000.0,<1H OCEAN +-118.16,33.85,36.0,2668.0,473.0,1315.0,478.0,4.0714,215600.0,<1H OCEAN +-118.16,33.85,36.0,1979.0,339.0,952.0,339.0,4.0815,216200.0,<1H OCEAN +-118.13,33.86,37.0,2259.0,425.0,1183.0,413.0,5.1805,201600.0,<1H OCEAN +-118.13,33.85,36.0,2110.0,416.0,1128.0,403.0,4.6019,208400.0,<1H OCEAN +-118.13,33.85,36.0,1885.0,391.0,1049.0,405.0,3.55,212800.0,<1H OCEAN +-118.14,33.86,36.0,1774.0,348.0,934.0,333.0,4.8571,203300.0,<1H OCEAN +-118.14,33.86,36.0,1703.0,325.0,845.0,308.0,5.0106,210800.0,<1H OCEAN +-118.1,33.85,28.0,2825.0,470.0,1352.0,469.0,5.2639,242000.0,<1H OCEAN +-118.1,33.85,36.0,1473.0,253.0,713.0,257.0,5.9493,228000.0,<1H OCEAN +-118.1,33.85,36.0,956.0,159.0,416.0,157.0,4.6429,223700.0,<1H OCEAN +-118.11,33.85,36.0,887.0,163.0,482.0,157.0,4.125,219500.0,<1H OCEAN +-118.11,33.85,36.0,2418.0,389.0,1138.0,387.0,4.8393,216300.0,<1H OCEAN +-118.11,33.86,36.0,2750.0,487.0,1386.0,458.0,4.9904,221700.0,<1H OCEAN +-118.12,33.86,34.0,2116.0,427.0,972.0,396.0,4.8516,213600.0,<1H OCEAN +-118.12,33.85,37.0,2584.0,453.0,1333.0,481.0,4.3661,219900.0,<1H OCEAN +-118.12,33.85,37.0,2386.0,409.0,1101.0,399.0,4.6908,218200.0,<1H OCEAN +-118.1,33.84,35.0,1790.0,269.0,924.0,263.0,5.296,226200.0,<1H OCEAN +-118.1,33.84,36.0,1915.0,316.0,850.0,319.0,4.7222,225800.0,<1H OCEAN +-118.1,33.83,37.0,2059.0,349.0,825.0,334.0,4.0603,225200.0,<1H OCEAN +-118.11,33.83,36.0,1726.0,287.0,820.0,288.0,5.5767,218100.0,<1H OCEAN +-118.1,33.84,36.0,1557.0,270.0,697.0,251.0,4.5417,219600.0,<1H OCEAN +-118.1,33.84,36.0,2572.0,421.0,1318.0,434.0,5.1836,219700.0,<1H OCEAN +-118.1,33.84,36.0,690.0,109.0,316.0,104.0,3.7813,209100.0,<1H OCEAN +-118.11,33.84,37.0,1588.0,272.0,692.0,245.0,4.8594,220300.0,<1H OCEAN +-118.11,33.84,36.0,1756.0,297.0,798.0,287.0,5.5581,218300.0,<1H OCEAN +-118.12,33.84,37.0,2143.0,382.0,1047.0,377.0,4.4423,216000.0,<1H OCEAN +-118.12,33.84,37.0,2706.0,462.0,1331.0,476.0,5.0719,220000.0,<1H OCEAN +-118.11,33.84,36.0,1074.0,188.0,496.0,196.0,4.625,217400.0,<1H OCEAN +-118.11,33.84,36.0,1523.0,263.0,717.0,278.0,4.875,218900.0,<1H OCEAN +-118.11,33.83,36.0,1784.0,303.0,964.0,299.0,4.2703,220900.0,<1H OCEAN +-118.12,33.83,44.0,1712.0,314.0,691.0,293.0,4.3594,221300.0,<1H OCEAN +-118.12,33.84,37.0,1242.0,221.0,565.0,213.0,4.1094,215800.0,<1H OCEAN +-118.11,33.84,36.0,1463.0,257.0,722.0,260.0,4.8438,226300.0,<1H OCEAN +-118.13,33.84,35.0,3008.0,674.0,1584.0,671.0,3.5465,213200.0,<1H OCEAN +-118.13,33.84,46.0,2439.0,429.0,944.0,374.0,4.2841,312400.0,<1H OCEAN +-118.13,33.83,44.0,1710.0,333.0,786.0,344.0,4.2917,314700.0,<1H OCEAN +-118.14,33.84,43.0,2107.0,439.0,876.0,429.0,3.2024,339400.0,<1H OCEAN +-118.13,33.84,48.0,1895.0,294.0,881.0,293.0,6.3364,307400.0,<1H OCEAN +-118.14,33.84,45.0,1908.0,361.0,890.0,342.0,4.575,336000.0,<1H OCEAN +-118.14,33.84,44.0,3043.0,619.0,1316.0,607.0,4.4286,254900.0,<1H OCEAN +-118.14,33.84,36.0,3002.0,484.0,1322.0,471.0,4.933,228900.0,<1H OCEAN +-118.15,33.84,29.0,2448.0,354.0,894.0,349.0,7.6526,481300.0,<1H OCEAN +-118.15,33.84,36.0,2987.0,491.0,1360.0,497.0,4.8013,224100.0,<1H OCEAN +-118.15,33.84,37.0,1508.0,252.0,635.0,241.0,3.75,221300.0,<1H OCEAN +-118.16,33.84,36.0,2444.0,432.0,1199.0,424.0,4.1538,218800.0,<1H OCEAN +-118.16,33.84,36.0,1348.0,234.0,643.0,221.0,3.6447,211000.0,<1H OCEAN +-118.16,33.84,36.0,2831.0,573.0,1462.0,569.0,3.8646,214600.0,<1H OCEAN +-118.16,33.84,36.0,2220.0,367.0,1002.0,351.0,5.0719,219500.0,<1H OCEAN +-118.17,33.85,37.0,3714.0,708.0,1956.0,694.0,4.2218,200500.0,<1H OCEAN +-118.17,33.84,45.0,1533.0,331.0,791.0,335.0,3.4605,186600.0,<1H OCEAN +-118.17,33.84,29.0,4716.0,1372.0,2515.0,1272.0,2.726,208700.0,<1H OCEAN +-118.17,33.84,45.0,1853.0,328.0,945.0,320.0,5.0787,219200.0,<1H OCEAN +-118.17,33.83,45.0,2019.0,363.0,880.0,339.0,4.1023,217300.0,NEAR OCEAN +-118.18,33.85,40.0,2597.0,582.0,1285.0,559.0,3.975,213800.0,<1H OCEAN +-118.18,33.84,35.0,1415.0,294.0,591.0,291.0,2.9798,315600.0,NEAR OCEAN +-118.19,33.84,44.0,2731.0,577.0,1396.0,555.0,4.1771,219100.0,NEAR OCEAN +-118.19,33.84,24.0,1228.0,320.0,537.0,273.0,2.25,192000.0,NEAR OCEAN +-118.18,33.85,30.0,2548.0,717.0,2086.0,700.0,0.7007,134400.0,<1H OCEAN +-118.18,33.85,44.0,1890.0,465.0,1378.0,430.0,3.8819,143200.0,<1H OCEAN +-118.19,33.85,30.0,3533.0,1061.0,2678.0,1033.0,2.2417,151900.0,NEAR OCEAN +-118.19,33.85,49.0,1073.0,260.0,725.0,272.0,3.8026,149700.0,NEAR OCEAN +-118.19,33.85,45.0,1167.0,302.0,773.0,287.0,3.2798,150300.0,NEAR OCEAN +-118.2,33.85,33.0,2557.0,731.0,2286.0,700.0,2.3041,149100.0,<1H OCEAN +-118.2,33.85,46.0,1854.0,462.0,1360.0,429.0,2.4844,158200.0,<1H OCEAN +-118.2,33.84,35.0,3405.0,779.0,1953.0,671.0,2.7813,159200.0,NEAR OCEAN +-118.2,33.83,35.0,3737.0,613.0,1305.0,583.0,7.2096,490300.0,NEAR OCEAN +-118.19,33.83,43.0,2641.0,411.0,1011.0,444.0,6.4468,444200.0,NEAR OCEAN +-118.19,33.83,42.0,1773.0,360.0,815.0,299.0,4.9,406300.0,NEAR OCEAN +-118.17,33.83,45.0,1808.0,315.0,800.0,302.0,4.8693,277700.0,NEAR OCEAN +-118.17,33.83,46.0,1362.0,214.0,531.0,222.0,4.3125,290500.0,NEAR OCEAN +-118.18,33.83,44.0,1497.0,277.0,542.0,274.0,5.0052,321800.0,NEAR OCEAN +-118.18,33.83,45.0,1535.0,274.0,591.0,276.0,4.2411,371700.0,NEAR OCEAN +-118.18,33.83,39.0,3622.0,745.0,1330.0,648.0,3.3125,425500.0,NEAR OCEAN +-118.18,33.84,43.0,2561.0,544.0,1063.0,537.0,3.835,418600.0,NEAR OCEAN +-118.17,33.82,50.0,3587.0,693.0,1513.0,651.0,5.5106,252200.0,NEAR OCEAN +-118.17,33.82,52.0,2539.0,497.0,1152.0,488.0,4.1354,268200.0,NEAR OCEAN +-118.18,33.83,52.0,2569.0,484.0,1030.0,451.0,4.1301,268400.0,NEAR OCEAN +-118.18,33.82,52.0,2618.0,472.0,943.0,440.0,3.7895,254000.0,NEAR OCEAN +-118.18,33.82,43.0,284.0,65.0,167.0,68.0,4.25,207500.0,NEAR OCEAN +-118.19,33.83,30.0,2246.0,552.0,1032.0,548.0,3.5871,347100.0,NEAR OCEAN +-118.19,33.82,19.0,2953.0,895.0,1914.0,855.0,3.5521,290000.0,NEAR OCEAN +-118.2,33.82,21.0,2251.0,452.0,913.0,420.0,4.6042,272200.0,NEAR OCEAN +-118.2,33.82,43.0,1758.0,347.0,954.0,312.0,5.2606,198900.0,NEAR OCEAN +-118.19,33.82,11.0,872.0,203.0,422.0,221.0,4.6364,156300.0,NEAR OCEAN +-118.19,33.81,21.0,1835.0,427.0,1038.0,384.0,4.4559,198500.0,NEAR OCEAN +-118.2,33.81,43.0,3013.0,574.0,1525.0,529.0,4.95,194000.0,NEAR OCEAN +-118.2,33.82,34.0,2807.0,768.0,2217.0,744.0,2.4286,204800.0,NEAR OCEAN +-118.19,33.81,23.0,954.0,390.0,804.0,373.0,2.5833,181300.0,NEAR OCEAN +-118.2,33.81,45.0,944.0,178.0,533.0,193.0,3.4808,206900.0,NEAR OCEAN +-118.2,33.81,46.0,1388.0,254.0,742.0,241.0,4.6458,212100.0,NEAR OCEAN +-118.2,33.81,47.0,2347.0,437.0,1219.0,420.0,5.3096,209900.0,NEAR OCEAN +-118.21,33.82,34.0,1719.0,398.0,1444.0,372.0,2.8438,139300.0,NEAR OCEAN +-118.21,33.81,43.0,905.0,199.0,764.0,204.0,3.3214,162200.0,NEAR OCEAN +-118.21,33.81,40.0,1815.0,428.0,1807.0,413.0,3.0882,160700.0,NEAR OCEAN +-118.21,33.82,33.0,1278.0,311.0,1157.0,320.0,3.5054,146800.0,NEAR OCEAN +-118.22,33.82,30.0,1680.0,469.0,1779.0,429.0,3.6086,146300.0,NEAR OCEAN +-118.21,33.82,45.0,455.0,92.0,394.0,89.0,4.9562,165700.0,NEAR OCEAN +-118.21,33.82,43.0,1005.0,199.0,723.0,191.0,4.3424,162500.0,NEAR OCEAN +-118.22,33.82,17.0,5357.0,1332.0,3030.0,1266.0,1.9311,138100.0,NEAR OCEAN +-118.21,33.81,45.0,1693.0,337.0,1255.0,333.0,3.6923,159700.0,NEAR OCEAN +-118.21,33.81,45.0,1816.0,398.0,1524.0,388.0,3.8586,157900.0,NEAR OCEAN +-118.22,33.81,38.0,1486.0,359.0,1345.0,326.0,3.3988,147800.0,NEAR OCEAN +-118.22,33.81,41.0,726.0,166.0,602.0,183.0,3.7885,156900.0,NEAR OCEAN +-118.21,33.8,45.0,1160.0,274.0,1095.0,269.0,2.7308,139000.0,NEAR OCEAN +-118.21,33.8,41.0,1251.0,279.0,1053.0,278.0,3.2778,150800.0,NEAR OCEAN +-118.22,33.8,36.0,1285.0,347.0,1291.0,337.0,3.7708,157100.0,NEAR OCEAN +-118.22,33.8,33.0,1984.0,477.0,1764.0,440.0,3.875,165100.0,NEAR OCEAN +-118.22,33.79,28.0,3008.0,629.0,2537.0,596.0,2.3,137500.0,NEAR OCEAN +-118.21,33.79,39.0,1598.0,458.0,1691.0,399.0,2.3605,141800.0,NEAR OCEAN +-118.21,33.79,32.0,2020.0,613.0,2557.0,562.0,2.1397,145300.0,NEAR OCEAN +-118.21,33.8,44.0,1387.0,280.0,984.0,302.0,4.25,143100.0,NEAR OCEAN +-118.19,33.8,38.0,2010.0,595.0,1535.0,525.0,1.9848,160400.0,NEAR OCEAN +-118.19,33.79,29.0,3497.0,1096.0,2994.0,919.0,1.8109,137500.0,NEAR OCEAN +-118.2,33.79,47.0,767.0,195.0,569.0,195.0,2.9514,185200.0,NEAR OCEAN +-118.2,33.79,48.0,2105.0,592.0,1807.0,539.0,2.7183,190400.0,NEAR OCEAN +-118.2,33.79,47.0,2549.0,626.0,1388.0,606.0,3.0135,192700.0,NEAR OCEAN +-118.2,33.8,52.0,1786.0,445.0,1090.0,430.0,2.8988,194900.0,NEAR OCEAN +-118.19,33.8,41.0,2125.0,591.0,1604.0,555.0,2.9943,190600.0,NEAR OCEAN +-118.2,33.8,42.0,4577.0,1146.0,2749.0,1094.0,2.5012,197500.0,NEAR OCEAN +-118.2,33.8,45.0,2456.0,495.0,1300.0,450.0,3.9792,210200.0,NEAR OCEAN +-118.2,33.8,52.0,1009.0,216.0,614.0,231.0,4.0074,200800.0,NEAR OCEAN +-118.18,33.8,42.0,2301.0,621.0,2114.0,561.0,2.0579,132700.0,NEAR OCEAN +-118.19,33.8,36.0,2326.0,729.0,2635.0,657.0,2.1985,141800.0,NEAR OCEAN +-118.18,33.79,42.0,1571.0,435.0,1631.0,417.0,1.6384,128000.0,NEAR OCEAN +-118.19,33.79,41.0,2114.0,612.0,2357.0,529.0,1.7938,142600.0,NEAR OCEAN +-118.19,33.79,43.0,1823.0,600.0,2339.0,560.0,1.6792,130600.0,NEAR OCEAN +-118.18,33.8,30.0,2734.0,758.0,2951.0,691.0,1.7689,117600.0,NEAR OCEAN +-118.17,33.79,36.0,948.0,303.0,1042.0,301.0,1.55,100000.0,NEAR OCEAN +-118.18,33.82,43.0,2210.0,469.0,1042.0,418.0,3.5,216700.0,NEAR OCEAN +-118.18,33.81,27.0,471.0,132.0,315.0,96.0,1.75,154200.0,NEAR OCEAN +-118.16,33.8,9.0,3564.0,835.0,1530.0,807.0,5.1806,175000.0,NEAR OCEAN +-118.16,33.79,25.0,5463.0,1265.0,3010.0,1179.0,3.233,199100.0,NEAR OCEAN +-118.17,33.8,26.0,1589.0,380.0,883.0,366.0,3.5313,187500.0,NEAR OCEAN +-118.18,33.8,15.0,2407.0,589.0,1591.0,506.0,3.0513,148100.0,NEAR OCEAN +-118.12,33.83,45.0,1579.0,278.0,687.0,285.0,5.0424,225900.0,<1H OCEAN +-118.12,33.83,45.0,1734.0,331.0,797.0,293.0,4.8917,222800.0,<1H OCEAN +-118.12,33.82,43.0,1544.0,286.0,701.0,298.0,4.1375,226000.0,<1H OCEAN +-118.12,33.82,42.0,1493.0,277.0,671.0,267.0,3.2794,224500.0,<1H OCEAN +-118.13,33.82,44.0,1619.0,280.0,815.0,284.0,5.5449,232200.0,<1H OCEAN +-118.13,33.82,44.0,1785.0,307.0,779.0,291.0,4.3056,228600.0,<1H OCEAN +-118.13,33.83,45.0,3087.0,574.0,1474.0,567.0,5.5196,227600.0,<1H OCEAN +-118.1,33.83,36.0,1408.0,250.0,702.0,251.0,4.875,222500.0,<1H OCEAN +-118.11,33.83,36.0,1462.0,233.0,664.0,220.0,5.1171,225300.0,<1H OCEAN +-118.11,33.82,36.0,1999.0,390.0,887.0,379.0,3.8162,221900.0,<1H OCEAN +-118.11,33.82,36.0,1742.0,340.0,857.0,341.0,4.6875,218200.0,<1H OCEAN +-118.11,33.83,37.0,1249.0,202.0,517.0,189.0,4.4196,223100.0,<1H OCEAN +-118.11,33.83,36.0,1820.0,313.0,899.0,295.0,4.918,225200.0,<1H OCEAN +-118.09,33.83,36.0,2734.0,448.0,1308.0,441.0,5.9265,227300.0,<1H OCEAN +-118.1,33.82,36.0,2422.0,420.0,1193.0,421.0,4.8462,225700.0,<1H OCEAN +-118.1,33.82,36.0,1930.0,354.0,915.0,328.0,5.2713,244400.0,<1H OCEAN +-118.1,33.83,36.0,2000.0,343.0,956.0,352.0,5.3735,234400.0,<1H OCEAN +-118.08,33.81,20.0,6295.0,937.0,2292.0,874.0,7.6084,402500.0,<1H OCEAN +-118.09,33.82,36.0,2219.0,393.0,1042.0,396.0,5.2299,239800.0,<1H OCEAN +-118.09,33.81,36.0,1878.0,323.0,846.0,325.0,7.1937,254400.0,<1H OCEAN +-118.1,33.81,36.0,1111.0,184.0,444.0,177.0,3.7031,245300.0,<1H OCEAN +-118.1,33.81,36.0,856.0,146.0,451.0,164.0,5.1993,246000.0,<1H OCEAN +-118.11,33.81,36.0,1252.0,209.0,558.0,214.0,3.9722,235600.0,<1H OCEAN +-118.11,33.82,37.0,1987.0,347.0,1095.0,357.0,4.3203,232800.0,<1H OCEAN +-118.1,33.82,36.0,1946.0,346.0,871.0,336.0,5.2155,254800.0,<1H OCEAN +-118.11,33.82,37.0,1756.0,345.0,836.0,335.0,4.375,218200.0,<1H OCEAN +-118.12,33.81,36.0,2565.0,458.0,1155.0,443.0,4.6087,224600.0,<1H OCEAN +-118.12,33.81,37.0,1798.0,331.0,860.0,340.0,4.2143,228500.0,<1H OCEAN +-118.13,33.81,37.0,1013.0,199.0,493.0,183.0,4.7845,231400.0,<1H OCEAN +-118.13,33.81,37.0,1228.0,237.0,572.0,242.0,4.325,223900.0,<1H OCEAN +-118.13,33.82,37.0,1530.0,290.0,711.0,283.0,5.1795,225400.0,<1H OCEAN +-118.13,33.82,36.0,665.0,114.0,273.0,112.0,3.7321,223700.0,<1H OCEAN +-118.13,33.81,34.0,1903.0,343.0,928.0,349.0,5.395,241900.0,<1H OCEAN +-118.13,33.81,36.0,1749.0,322.0,855.0,319.0,4.6473,227100.0,<1H OCEAN +-118.13,33.8,36.0,1026.0,182.0,505.0,176.0,4.3438,233600.0,<1H OCEAN +-118.13,33.8,36.0,1496.0,271.0,743.0,265.0,4.4312,226000.0,<1H OCEAN +-118.13,33.8,41.0,1509.0,325.0,821.0,314.0,4.0893,223000.0,<1H OCEAN +-118.15,33.8,44.0,1886.0,399.0,1167.0,372.0,3.1042,219800.0,NEAR OCEAN +-118.12,33.81,36.0,1774.0,299.0,784.0,298.0,5.0447,249200.0,<1H OCEAN +-118.12,33.81,36.0,1665.0,291.0,721.0,294.0,4.6875,250700.0,<1H OCEAN +-118.12,33.8,35.0,1835.0,435.0,774.0,418.0,2.7092,256300.0,<1H OCEAN +-118.12,33.8,36.0,1257.0,205.0,530.0,211.0,5.3701,251400.0,<1H OCEAN +-118.11,33.8,36.0,1837.0,319.0,810.0,305.0,4.3897,235000.0,<1H OCEAN +-118.11,33.79,36.0,1993.0,354.0,884.0,337.0,5.587,244900.0,<1H OCEAN +-118.11,33.79,36.0,2223.0,370.0,1039.0,370.0,5.7942,257000.0,<1H OCEAN +-118.09,33.81,36.0,1371.0,250.0,666.0,257.0,5.0795,243300.0,<1H OCEAN +-118.09,33.8,36.0,1724.0,322.0,838.0,328.0,4.4831,253900.0,<1H OCEAN +-118.11,33.8,36.0,1680.0,291.0,744.0,280.0,4.66,244800.0,<1H OCEAN +-118.11,33.8,35.0,1034.0,180.0,444.0,177.0,5.4602,231600.0,<1H OCEAN +-118.11,33.81,37.0,1694.0,280.0,776.0,271.0,6.2187,257900.0,<1H OCEAN +-118.1,33.81,36.0,1962.0,325.0,786.0,315.0,5.62,239600.0,<1H OCEAN +-118.1,33.8,37.0,1814.0,329.0,850.0,328.0,5.0574,240800.0,<1H OCEAN +-118.09,33.79,36.0,4210.0,657.0,1911.0,631.0,5.8491,247300.0,<1H OCEAN +-118.1,33.78,35.0,4466.0,740.0,2134.0,743.0,5.7389,251800.0,<1H OCEAN +-118.1,33.79,35.0,2370.0,379.0,996.0,380.0,5.7368,287200.0,<1H OCEAN +-118.1,33.79,36.0,3359.0,596.0,1522.0,565.0,5.1805,249400.0,<1H OCEAN +-118.11,33.78,16.0,3985.0,567.0,1327.0,564.0,7.9767,500001.0,<1H OCEAN +-118.13,33.79,29.0,2937.0,524.0,1132.0,528.0,4.6133,500001.0,NEAR OCEAN +-118.13,33.78,31.0,3039.0,739.0,1199.0,697.0,3.7232,500001.0,NEAR OCEAN +-118.13,33.79,36.0,1245.0,211.0,508.0,221.0,5.3441,480600.0,NEAR OCEAN +-118.12,33.79,43.0,1471.0,301.0,767.0,311.0,4.3317,232400.0,<1H OCEAN +-118.12,33.79,41.0,1762.0,314.0,738.0,300.0,4.1687,240700.0,<1H OCEAN +-118.13,33.79,44.0,2153.0,375.0,947.0,364.0,5.0072,236200.0,NEAR OCEAN +-118.13,33.79,45.0,2317.0,448.0,1057.0,428.0,4.375,234800.0,NEAR OCEAN +-118.14,33.79,45.0,1519.0,263.0,681.0,267.0,4.6452,212500.0,NEAR OCEAN +-118.13,33.79,20.0,6678.0,1797.0,3625.0,1599.0,3.7716,242900.0,NEAR OCEAN +-118.14,33.8,43.0,2506.0,531.0,1230.0,543.0,3.4211,203900.0,NEAR OCEAN +-118.15,33.79,5.0,3700.0,993.0,1657.0,848.0,3.7826,196300.0,NEAR OCEAN +-118.14,33.79,23.0,2573.0,688.0,1478.0,604.0,3.4833,209400.0,NEAR OCEAN +-118.14,33.79,44.0,2388.0,619.0,1461.0,592.0,3.1711,215400.0,NEAR OCEAN +-118.14,33.78,44.0,2101.0,496.0,1038.0,500.0,3.108,217900.0,NEAR OCEAN +-118.15,33.79,25.0,4013.0,1097.0,2297.0,969.0,3.0453,185900.0,NEAR OCEAN +-118.15,33.78,17.0,1584.0,435.0,904.0,406.0,2.0875,181300.0,NEAR OCEAN +-118.16,33.78,14.0,1709.0,558.0,1939.0,520.0,1.9808,139100.0,NEAR OCEAN +-118.16,33.78,33.0,2048.0,585.0,2074.0,597.0,2.0156,152700.0,NEAR OCEAN +-118.16,33.79,25.0,3742.0,1180.0,3916.0,1063.0,2.4,153700.0,NEAR OCEAN +-118.16,33.79,26.0,3061.0,844.0,2135.0,769.0,2.875,164000.0,NEAR OCEAN +-118.17,33.79,32.0,2171.0,672.0,3002.0,648.0,2.375,139700.0,NEAR OCEAN +-118.17,33.79,30.0,1349.0,519.0,2646.0,552.0,1.9318,115900.0,NEAR OCEAN +-118.18,33.78,36.0,1697.0,550.0,1379.0,434.0,1.2746,129700.0,NEAR OCEAN +-118.18,33.79,27.0,1580.0,510.0,1896.0,448.0,2.0186,130000.0,NEAR OCEAN +-118.17,33.79,28.0,1219.0,408.0,1816.0,348.0,1.7589,118300.0,NEAR OCEAN +-118.18,33.79,20.0,1255.0,360.0,1201.0,318.0,1.2206,162500.0,NEAR OCEAN +-118.19,33.78,29.0,1170.0,369.0,1398.0,373.0,2.2543,156300.0,NEAR OCEAN +-118.19,33.79,37.0,1834.0,551.0,1967.0,476.0,2.137,126600.0,NEAR OCEAN +-118.19,33.79,30.0,3107.0,994.0,3543.0,850.0,1.9387,141700.0,NEAR OCEAN +-118.19,33.78,24.0,225.0,72.0,439.0,71.0,2.8533,137500.0,NEAR OCEAN +-118.2,33.79,25.0,2851.0,968.0,3744.0,906.0,2.0675,116700.0,NEAR OCEAN +-118.21,33.79,33.0,32.0,18.0,96.0,36.0,4.5938,112500.0,NEAR OCEAN +-118.21,33.79,44.0,121.0,29.0,153.0,30.0,2.1964,150000.0,NEAR OCEAN +-118.22,33.79,48.0,143.0,41.0,222.0,50.0,1.7,104200.0,NEAR OCEAN +-118.23,33.76,21.0,49.0,14.0,29.0,16.0,5.0,87500.0,NEAR OCEAN +-118.19,33.78,21.0,2741.0,1029.0,2924.0,969.0,1.3274,218800.0,NEAR OCEAN +-118.19,33.78,35.0,1511.0,593.0,914.0,539.0,0.9318,187500.0,NEAR OCEAN +-118.2,33.78,46.0,1889.0,651.0,1545.0,587.0,1.7064,175000.0,NEAR OCEAN +-118.2,33.78,48.0,1766.0,497.0,1908.0,466.0,1.9872,168800.0,NEAR OCEAN +-118.2,33.78,52.0,2662.0,893.0,3018.0,763.0,2.3305,162500.0,NEAR OCEAN +-118.19,33.77,35.0,1574.0,603.0,820.0,514.0,1.2321,137500.0,NEAR OCEAN +-118.2,33.77,40.0,2034.0,899.0,1257.0,797.0,1.2864,131300.0,NEAR OCEAN +-118.2,33.77,24.0,2404.0,819.0,1566.0,753.0,1.5076,145800.0,NEAR OCEAN +-118.2,33.77,22.0,1118.0,437.0,1190.0,399.0,1.9797,143800.0,NEAR OCEAN +-118.2,33.77,52.0,1375.0,457.0,1089.0,317.0,2.2344,200000.0,NEAR OCEAN +-118.2,33.77,41.0,1158.0,396.0,1209.0,336.0,2.7813,129200.0,NEAR OCEAN +-118.2,33.77,42.0,517.0,233.0,995.0,212.0,2.225,106300.0,NEAR OCEAN +-118.18,33.77,45.0,1434.0,627.0,735.0,518.0,1.5,162500.0,NEAR OCEAN +-118.19,33.76,25.0,1442.0,392.0,632.0,385.0,4.6629,162500.0,NEAR OCEAN +-118.19,33.77,52.0,1562.0,616.0,692.0,512.0,1.4048,200000.0,NEAR OCEAN +-118.18,33.77,39.0,1645.0,547.0,1339.0,499.0,1.5536,155000.0,NEAR OCEAN +-118.18,33.77,36.0,1833.0,688.0,1128.0,620.0,1.1483,112500.0,NEAR OCEAN +-118.19,33.77,21.0,2103.0,727.0,1064.0,603.0,1.6178,137500.0,NEAR OCEAN +-118.19,33.77,31.0,1711.0,691.0,1092.0,568.0,1.0714,150000.0,NEAR OCEAN +-118.18,33.78,20.0,1852.0,556.0,1712.0,556.0,1.4565,152500.0,NEAR OCEAN +-118.18,33.78,17.0,1419.0,436.0,1300.0,360.0,2.0769,100000.0,NEAR OCEAN +-118.18,33.78,52.0,1180.0,381.0,1046.0,332.0,1.5603,162500.0,NEAR OCEAN +-118.19,33.78,31.0,1648.0,484.0,898.0,457.0,1.5844,162500.0,NEAR OCEAN +-118.19,33.78,8.0,992.0,393.0,694.0,331.0,2.5544,162500.0,NEAR OCEAN +-118.19,33.78,29.0,1013.0,392.0,1083.0,316.0,1.8438,162500.0,NEAR OCEAN +-118.19,33.78,42.0,1021.0,300.0,533.0,187.0,1.8036,175000.0,NEAR OCEAN +-118.17,33.78,29.0,2920.0,962.0,3580.0,772.0,1.7393,140200.0,NEAR OCEAN +-118.17,33.78,23.0,3768.0,1261.0,3940.0,1098.0,1.9647,186200.0,NEAR OCEAN +-118.18,33.78,26.0,3042.0,1253.0,4812.0,1141.0,1.7701,146200.0,NEAR OCEAN +-118.17,33.78,44.0,2364.0,746.0,3184.0,672.0,1.918,147500.0,NEAR OCEAN +-118.17,33.77,36.0,2933.0,881.0,2077.0,838.0,2.2538,181300.0,NEAR OCEAN +-118.17,33.77,45.0,2508.0,797.0,1340.0,720.0,2.6786,191100.0,NEAR OCEAN +-118.17,33.77,38.0,2239.0,721.0,984.0,684.0,2.346,165600.0,NEAR OCEAN +-118.17,33.77,39.0,2953.0,878.0,1379.0,785.0,2.1378,180400.0,NEAR OCEAN +-118.17,33.77,12.0,4409.0,1401.0,3068.0,1262.0,2.2808,154700.0,NEAR OCEAN +-118.18,33.77,29.0,1776.0,606.0,1391.0,488.0,1.1295,137500.0,NEAR OCEAN +-118.18,33.77,30.0,1418.0,439.0,720.0,417.0,2.6371,159400.0,NEAR OCEAN +-118.17,33.77,37.0,1127.0,327.0,492.0,331.0,2.675,241700.0,NEAR OCEAN +-118.18,33.74,30.0,5915.0,1750.0,2136.0,1503.0,4.0968,310000.0,NEAR OCEAN +-118.17,33.77,45.0,2151.0,643.0,1047.0,579.0,3.1149,218800.0,NEAR OCEAN +-118.17,33.77,45.0,2143.0,697.0,1004.0,594.0,3.0153,220000.0,NEAR OCEAN +-118.18,33.77,37.0,2653.0,754.0,1087.0,698.0,2.3523,325000.0,NEAR OCEAN +-118.18,33.77,41.0,2048.0,601.0,852.0,533.0,2.5726,193800.0,NEAR OCEAN +-118.18,33.77,49.0,2297.0,759.0,1105.0,629.0,1.8388,175000.0,NEAR OCEAN +-118.16,33.77,49.0,3382.0,787.0,1314.0,756.0,3.8125,382100.0,NEAR OCEAN +-118.17,33.74,36.0,2006.0,453.0,807.0,426.0,3.7838,500001.0,NEAR OCEAN +-118.16,33.77,30.0,4439.0,1105.0,1749.0,1011.0,3.8984,306300.0,NEAR OCEAN +-118.15,33.77,39.0,2428.0,634.0,1312.0,612.0,2.7212,266300.0,NEAR OCEAN +-118.16,33.77,30.0,2800.0,757.0,1292.0,742.0,2.7614,272200.0,NEAR OCEAN +-118.16,33.77,38.0,3235.0,769.0,1284.0,752.0,2.9384,304100.0,NEAR OCEAN +-118.16,33.77,29.0,3078.0,786.0,1460.0,736.0,2.875,232500.0,NEAR OCEAN +-118.17,33.77,25.0,4405.0,1262.0,2178.0,1090.0,3.0503,225000.0,NEAR OCEAN +-118.16,33.78,15.0,4798.0,1374.0,3087.0,1212.0,2.127,163300.0,NEAR OCEAN +-118.16,33.78,39.0,4075.0,1085.0,2470.0,1025.0,2.3317,222500.0,NEAR OCEAN +-118.16,33.78,52.0,3248.0,853.0,1819.0,815.0,3.1739,222900.0,NEAR OCEAN +-118.16,33.78,29.0,3684.0,1301.0,3891.0,1143.0,1.6955,179700.0,NEAR OCEAN +-118.15,33.78,13.0,3056.0,861.0,1600.0,824.0,3.3003,207800.0,NEAR OCEAN +-118.15,33.78,12.0,4436.0,1133.0,2176.0,1002.0,3.5812,198600.0,NEAR OCEAN +-118.15,33.78,35.0,2768.0,752.0,1277.0,651.0,3.6193,250000.0,NEAR OCEAN +-118.14,33.78,42.0,1898.0,488.0,940.0,483.0,3.4107,233300.0,NEAR OCEAN +-118.13,33.78,45.0,1016.0,172.0,361.0,163.0,7.5,434500.0,NEAR OCEAN +-118.14,33.77,49.0,2792.0,690.0,1301.0,648.0,3.2917,307400.0,NEAR OCEAN +-118.14,33.77,51.0,2812.0,621.0,1171.0,566.0,3.875,342900.0,NEAR OCEAN +-118.15,33.77,52.0,2204.0,498.0,899.0,445.0,4.1765,393900.0,NEAR OCEAN +-118.15,33.77,41.0,3448.0,896.0,1621.0,838.0,4.5,339800.0,NEAR OCEAN +-118.15,33.77,27.0,3043.0,787.0,1398.0,747.0,3.5528,271100.0,NEAR OCEAN +-118.14,33.76,37.0,3242.0,698.0,1080.0,629.0,3.901,432500.0,NEAR OCEAN +-118.16,33.72,29.0,2743.0,708.0,1059.0,651.0,3.625,500000.0,NEAR OCEAN +-118.15,33.76,36.0,2916.0,785.0,1183.0,749.0,3.5985,500001.0,NEAR OCEAN +-118.15,33.77,36.0,4366.0,1211.0,1912.0,1172.0,3.5292,361800.0,NEAR OCEAN +-118.13,33.76,52.0,2216.0,526.0,940.0,530.0,4.5469,381000.0,NEAR OCEAN +-118.13,33.76,44.0,1543.0,463.0,652.0,406.0,4.25,439300.0,NEAR OCEAN +-118.14,33.75,39.0,1995.0,634.0,867.0,567.0,4.0795,400000.0,NEAR OCEAN +-118.14,33.76,52.0,2677.0,642.0,1144.0,624.0,4.3889,378000.0,NEAR OCEAN +-118.14,33.76,50.0,2960.0,761.0,1179.0,718.0,3.5214,398100.0,NEAR OCEAN +-118.14,33.76,44.0,1633.0,536.0,741.0,513.0,3.385,408300.0,NEAR OCEAN +-118.14,33.77,52.0,2208.0,409.0,791.0,408.0,5.8408,500000.0,NEAR OCEAN +-118.14,33.76,50.0,914.0,167.0,322.0,165.0,4.7361,418800.0,NEAR OCEAN +-118.13,33.76,46.0,2834.0,673.0,1175.0,670.0,4.7875,363800.0,NEAR OCEAN +-118.13,33.76,44.0,2532.0,621.0,961.0,550.0,3.9352,406900.0,NEAR OCEAN +-118.12,33.76,43.0,3070.0,668.0,1240.0,646.0,3.7813,461500.0,NEAR OCEAN +-118.12,33.75,47.0,3330.0,569.0,1220.0,557.0,7.3672,500001.0,NEAR OCEAN +-118.12,33.76,45.0,3035.0,516.0,1127.0,527.0,7.0796,500001.0,NEAR OCEAN +-118.12,33.75,41.0,2072.0,491.0,742.0,414.0,3.9934,500001.0,NEAR OCEAN +-118.14,33.71,36.0,2484.0,525.0,792.0,446.0,5.1815,500001.0,NEAR OCEAN +-118.1,33.76,15.0,4690.0,1002.0,1879.0,974.0,5.6051,267400.0,NEAR OCEAN +-118.11,33.77,15.0,9103.0,1847.0,3333.0,1712.0,5.1508,367300.0,NEAR OCEAN +-118.12,33.77,20.0,4534.0,954.0,1941.0,892.0,6.0362,463500.0,NEAR OCEAN +-118.12,33.77,10.0,7264.0,1137.0,2528.0,1057.0,10.2233,500001.0,NEAR OCEAN +-118.13,33.77,52.0,3697.0,691.0,1436.0,671.0,4.6852,395200.0,NEAR OCEAN +-118.13,33.77,37.0,4365.0,926.0,1661.0,868.0,5.3046,360700.0,NEAR OCEAN +-118.32,33.35,27.0,1675.0,521.0,744.0,331.0,2.1579,450000.0,ISLAND +-118.33,33.34,52.0,2359.0,591.0,1100.0,431.0,2.8333,414700.0,ISLAND +-118.32,33.33,52.0,2127.0,512.0,733.0,288.0,3.3906,300000.0,ISLAND +-118.32,33.34,52.0,996.0,264.0,341.0,160.0,2.7361,450000.0,ISLAND +-118.48,33.43,29.0,716.0,214.0,422.0,173.0,2.6042,287500.0,ISLAND +-118.29,33.96,32.0,3508.0,917.0,2794.0,839.0,1.554,100000.0,<1H OCEAN +-118.3,33.95,36.0,1786.0,418.0,1367.0,393.0,1.5078,99600.0,<1H OCEAN +-118.29,33.95,31.0,2839.0,792.0,2390.0,729.0,2.0,109800.0,<1H OCEAN +-118.3,33.95,41.0,2057.0,550.0,1805.0,506.0,1.2455,100800.0,<1H OCEAN +-118.3,33.95,27.0,1774.0,444.0,1622.0,402.0,2.2031,96900.0,<1H OCEAN +-118.3,33.95,35.0,1182.0,305.0,977.0,283.0,1.5898,94000.0,<1H OCEAN +-118.29,33.94,38.0,2407.0,630.0,1774.0,562.0,1.5615,108600.0,<1H OCEAN +-118.3,33.94,36.0,3504.0,862.0,2521.0,836.0,2.5679,114900.0,<1H OCEAN +-118.3,33.94,36.0,2041.0,531.0,1390.0,464.0,2.0114,99300.0,<1H OCEAN +-118.29,33.94,32.0,2701.0,708.0,1880.0,590.0,1.6716,123800.0,<1H OCEAN +-118.29,33.93,32.0,1815.0,488.0,1715.0,475.0,1.7244,111200.0,<1H OCEAN +-118.3,33.93,35.0,1300.0,356.0,1216.0,326.0,1.2,99200.0,<1H OCEAN +-118.3,33.93,36.0,2196.0,633.0,2017.0,583.0,1.3962,124300.0,<1H OCEAN +-118.3,33.93,40.0,2434.0,477.0,1646.0,453.0,3.2024,128000.0,<1H OCEAN +-118.31,33.93,37.0,1282.0,244.0,852.0,249.0,4.2917,127900.0,<1H OCEAN +-118.31,33.94,44.0,1854.0,367.0,976.0,335.0,3.6583,126700.0,<1H OCEAN +-118.31,33.94,40.0,1917.0,438.0,1021.0,383.0,2.2448,175000.0,<1H OCEAN +-118.31,33.94,40.0,1323.0,243.0,684.0,229.0,3.2206,145800.0,<1H OCEAN +-118.31,33.94,40.0,1550.0,,798.0,270.0,3.775,153800.0,<1H OCEAN +-118.31,33.93,42.0,1173.0,201.0,602.0,186.0,5.5787,142000.0,<1H OCEAN +-118.31,33.93,43.0,1834.0,292.0,997.0,295.0,4.9464,150300.0,<1H OCEAN +-118.32,33.94,37.0,2740.0,504.0,1468.0,479.0,4.5368,168800.0,<1H OCEAN +-118.32,33.93,37.0,2379.0,462.0,1327.0,445.0,4.25,172100.0,<1H OCEAN +-118.33,33.93,37.0,1831.0,356.0,925.0,338.0,4.4091,148400.0,<1H OCEAN +-118.33,33.93,38.0,694.0,112.0,412.0,119.0,6.0718,156000.0,<1H OCEAN +-118.34,33.93,35.0,1213.0,284.0,742.0,253.0,4.0625,159900.0,<1H OCEAN +-118.32,33.94,37.0,1487.0,296.0,863.0,291.0,3.1563,186200.0,<1H OCEAN +-118.32,33.94,38.0,1067.0,170.0,499.0,169.0,4.6389,183800.0,<1H OCEAN +-118.32,33.94,36.0,1722.0,280.0,830.0,261.0,4.0536,189000.0,<1H OCEAN +-118.32,33.94,36.0,1153.0,224.0,639.0,226.0,4.0,192000.0,<1H OCEAN +-118.33,33.94,31.0,3757.0,1102.0,3288.0,964.0,1.9309,137500.0,<1H OCEAN +-118.32,33.96,47.0,1453.0,247.0,721.0,276.0,5.5176,191000.0,<1H OCEAN +-118.32,33.95,43.0,3819.0,708.0,1505.0,712.0,3.1719,183500.0,<1H OCEAN +-118.33,33.96,24.0,6513.0,1290.0,2636.0,1271.0,4.2099,189800.0,<1H OCEAN +-118.32,33.95,44.0,2023.0,325.0,992.0,326.0,4.6667,175600.0,<1H OCEAN +-118.32,33.95,44.0,2131.0,360.0,1040.0,330.0,5.0912,169800.0,<1H OCEAN +-118.34,33.95,33.0,1923.0,459.0,1412.0,361.0,5.4359,194100.0,<1H OCEAN +-118.32,33.97,52.0,1590.0,302.0,844.0,295.0,2.7139,164900.0,<1H OCEAN +-118.32,33.96,47.0,1885.0,361.0,954.0,357.0,3.8512,171300.0,<1H OCEAN +-118.32,33.96,47.0,1297.0,292.0,704.0,264.0,3.3214,166500.0,<1H OCEAN +-118.32,33.97,46.0,1504.0,270.0,814.0,306.0,4.3919,157100.0,<1H OCEAN +-118.34,33.97,45.0,2230.0,364.0,949.0,344.0,5.5,188200.0,<1H OCEAN +-118.33,33.96,42.0,1686.0,361.0,737.0,319.0,2.3,189200.0,<1H OCEAN +-118.33,33.96,42.0,2084.0,517.0,1062.0,451.0,2.0057,198200.0,<1H OCEAN +-118.35,33.97,33.0,1495.0,474.0,1272.0,447.0,2.0694,143500.0,<1H OCEAN +-118.35,33.97,25.0,1864.0,616.0,1710.0,575.0,2.2303,159400.0,<1H OCEAN +-118.35,33.97,26.0,1725.0,431.0,1130.0,404.0,3.2708,128100.0,<1H OCEAN +-118.35,33.97,26.0,3832.0,1074.0,2340.0,904.0,2.6734,143400.0,<1H OCEAN +-118.35,33.98,33.0,1884.0,477.0,1518.0,449.0,3.1194,152800.0,<1H OCEAN +-118.35,33.98,42.0,3081.0,680.0,1785.0,609.0,3.745,170800.0,<1H OCEAN +-118.34,33.98,47.0,2649.0,684.0,2374.0,607.0,2.3882,137700.0,<1H OCEAN +-118.34,33.98,40.0,2108.0,526.0,1922.0,544.0,3.163,137800.0,<1H OCEAN +-118.34,33.98,45.0,1298.0,294.0,1064.0,268.0,3.7067,136600.0,<1H OCEAN +-118.35,33.97,30.0,1548.0,330.0,757.0,349.0,3.8056,323800.0,<1H OCEAN +-118.35,33.96,21.0,2714.0,881.0,1549.0,853.0,1.2094,157500.0,<1H OCEAN +-118.35,33.96,26.0,2773.0,681.0,1560.0,631.0,3.1354,164300.0,<1H OCEAN +-118.35,33.95,28.0,4770.0,1328.0,3201.0,1196.0,2.681,147700.0,<1H OCEAN +-118.34,33.95,25.0,3762.0,1281.0,4015.0,1178.0,2.1587,143800.0,<1H OCEAN +-118.35,33.95,30.0,2661.0,765.0,2324.0,724.0,3.0519,137500.0,<1H OCEAN +-118.35,33.95,42.0,1779.0,431.0,1507.0,380.0,2.8892,159800.0,<1H OCEAN +-118.35,33.95,45.0,1076.0,213.0,781.0,238.0,3.95,164000.0,<1H OCEAN +-118.36,33.95,42.0,1116.0,303.0,1082.0,299.0,3.7237,170800.0,<1H OCEAN +-118.36,33.96,21.0,1802.0,556.0,1286.0,557.0,2.7284,146900.0,<1H OCEAN +-118.36,33.96,25.0,1849.0,518.0,1498.0,451.0,2.8378,170000.0,<1H OCEAN +-118.36,33.96,26.0,3543.0,,2742.0,951.0,2.5504,151300.0,<1H OCEAN +-118.36,33.95,26.0,3231.0,1089.0,3193.0,1020.0,2.6535,177200.0,<1H OCEAN +-118.36,33.98,45.0,1559.0,305.0,891.0,341.0,4.4038,259400.0,<1H OCEAN +-118.36,33.98,46.0,1425.0,283.0,782.0,273.0,5.057,246300.0,<1H OCEAN +-118.36,33.98,39.0,813.0,185.0,344.0,154.0,3.5833,218800.0,<1H OCEAN +-118.37,33.97,26.0,6672.0,1729.0,3333.0,1557.0,2.9646,179800.0,<1H OCEAN +-118.36,33.97,18.0,1284.0,283.0,990.0,289.0,4.0179,195800.0,<1H OCEAN +-118.37,33.97,21.0,3616.0,1060.0,2515.0,945.0,2.7464,153100.0,<1H OCEAN +-118.36,33.98,29.0,2861.0,816.0,1715.0,775.0,2.7712,160900.0,<1H OCEAN +-118.36,33.97,19.0,4651.0,1281.0,2917.0,1121.0,2.6823,142500.0,<1H OCEAN +-118.36,33.96,17.0,3431.0,934.0,2365.0,810.0,3.0393,129200.0,<1H OCEAN +-118.36,33.96,37.0,2146.0,573.0,2009.0,592.0,3.6583,177300.0,<1H OCEAN +-118.37,33.96,26.0,138.0,23.0,100.0,20.0,4.875,175000.0,<1H OCEAN +-118.37,33.95,35.0,924.0,349.0,1376.0,358.0,2.2297,262500.0,<1H OCEAN +-118.36,33.95,42.0,1139.0,302.0,1283.0,306.0,4.1635,163900.0,<1H OCEAN +-118.36,33.95,42.0,2532.0,627.0,2038.0,591.0,2.875,177500.0,<1H OCEAN +-118.37,33.95,32.0,1067.0,286.0,1053.0,277.0,2.8438,181700.0,<1H OCEAN +-118.37,33.95,52.0,836.0,175.0,747.0,166.0,4.125,174000.0,<1H OCEAN +-118.36,33.94,39.0,1390.0,410.0,1666.0,371.0,3.3056,156800.0,<1H OCEAN +-118.36,33.94,38.0,2169.0,688.0,3036.0,639.0,2.3125,148500.0,<1H OCEAN +-118.37,33.94,29.0,2265.0,813.0,3425.0,781.0,2.3675,149400.0,<1H OCEAN +-118.36,33.93,30.0,1132.0,347.0,1433.0,341.0,2.68,170000.0,<1H OCEAN +-118.36,33.93,40.0,1625.0,500.0,2036.0,476.0,2.6298,156500.0,<1H OCEAN +-118.36,33.94,33.0,939.0,284.0,1309.0,250.0,3.4063,152300.0,<1H OCEAN +-118.34,33.93,36.0,1528.0,486.0,1824.0,470.0,2.2679,153900.0,<1H OCEAN +-118.35,33.93,35.0,1050.0,252.0,918.0,236.0,1.7344,146900.0,<1H OCEAN +-118.35,33.93,34.0,617.0,189.0,810.0,180.0,1.9766,162500.0,<1H OCEAN +-118.35,33.93,33.0,2040.0,576.0,2649.0,561.0,2.3375,170600.0,<1H OCEAN +-118.35,33.94,35.0,1451.0,435.0,1888.0,420.0,2.8462,149100.0,<1H OCEAN +-118.35,33.94,38.0,1794.0,508.0,2188.0,454.0,2.6654,142200.0,<1H OCEAN +-118.35,33.94,36.0,2225.0,601.0,2755.0,610.0,2.5547,150400.0,<1H OCEAN +-118.35,33.94,42.0,1028.0,278.0,1369.0,261.0,3.3125,144600.0,<1H OCEAN +-118.34,33.94,37.0,3107.0,903.0,3456.0,734.0,2.182,147500.0,<1H OCEAN +-118.34,33.94,36.0,2796.0,1041.0,4033.0,944.0,2.4886,160700.0,<1H OCEAN +-118.33,33.93,37.0,4916.0,1134.0,3533.0,1035.0,3.2862,152300.0,<1H OCEAN +-118.34,33.93,33.0,4294.0,1224.0,4512.0,1189.0,2.8304,143700.0,<1H OCEAN +-118.34,33.93,32.0,1254.0,399.0,1281.0,386.0,2.2976,155700.0,<1H OCEAN +-118.34,33.93,37.0,1638.0,407.0,1341.0,369.0,3.0677,167700.0,<1H OCEAN +-118.35,33.93,26.0,3156.0,857.0,2394.0,787.0,3.01,191900.0,<1H OCEAN +-118.35,33.93,31.0,2746.0,697.0,1973.0,598.0,3.5139,192800.0,<1H OCEAN +-118.35,33.93,25.0,2260.0,692.0,1603.0,673.0,2.11,223300.0,<1H OCEAN +-118.36,33.93,27.0,4445.0,1231.0,3340.0,1113.0,3.1656,204500.0,<1H OCEAN +-118.34,33.92,29.0,1475.0,349.0,965.0,370.0,3.3558,199600.0,<1H OCEAN +-118.35,33.92,24.0,2728.0,845.0,2023.0,773.0,2.75,239700.0,<1H OCEAN +-118.35,33.92,29.0,736.0,232.0,584.0,231.0,3.6167,200000.0,<1H OCEAN +-118.36,33.92,26.0,3695.0,1144.0,2308.0,1009.0,2.6667,229300.0,<1H OCEAN +-118.36,33.92,46.0,1231.0,231.0,793.0,256.0,4.1023,226800.0,<1H OCEAN +-118.36,33.92,19.0,2807.0,883.0,1546.0,815.0,2.6375,233800.0,<1H OCEAN +-118.36,33.93,19.0,3103.0,918.0,2033.0,738.0,2.6961,212500.0,<1H OCEAN +-118.37,33.93,10.0,199.0,41.0,61.0,56.0,2.8958,245800.0,<1H OCEAN +-118.37,33.92,44.0,938.0,181.0,502.0,171.0,4.4722,218300.0,<1H OCEAN +-118.37,33.92,36.0,1075.0,197.0,509.0,197.0,4.9688,238900.0,<1H OCEAN +-118.37,33.92,40.0,928.0,187.0,521.0,185.0,5.5255,242700.0,<1H OCEAN +-118.37,33.92,39.0,1073.0,206.0,556.0,204.0,4.8611,245600.0,<1H OCEAN +-118.37,33.93,46.0,1130.0,201.0,503.0,196.0,4.4861,246300.0,<1H OCEAN +-118.37,33.93,46.0,442.0,88.0,255.0,94.0,4.4474,246900.0,<1H OCEAN +-118.36,33.93,44.0,520.0,116.0,392.0,106.0,3.0132,202500.0,<1H OCEAN +-118.36,33.91,41.0,2048.0,439.0,1191.0,429.0,3.8,222500.0,<1H OCEAN +-118.36,33.91,42.0,1949.0,422.0,1184.0,423.0,4.3333,225600.0,<1H OCEAN +-118.36,33.9,42.0,1935.0,388.0,1136.0,379.0,4.74,230000.0,<1H OCEAN +-118.36,33.9,40.0,1271.0,276.0,725.0,234.0,5.0452,231900.0,<1H OCEAN +-118.37,33.91,41.0,1869.0,427.0,1334.0,435.0,3.9355,227800.0,<1H OCEAN +-118.37,33.91,35.0,1742.0,283.0,812.0,282.0,5.6704,303700.0,<1H OCEAN +-118.37,33.9,35.0,1651.0,269.0,707.0,252.0,5.6482,294800.0,<1H OCEAN +-118.37,33.9,32.0,332.0,103.0,177.0,102.0,3.3409,256300.0,<1H OCEAN +-118.38,33.91,36.0,2904.0,515.0,1463.0,534.0,5.8374,289600.0,<1H OCEAN +-118.35,33.91,19.0,1949.0,559.0,1282.0,498.0,2.7813,231300.0,<1H OCEAN +-118.35,33.91,31.0,2583.0,663.0,1675.0,612.0,3.5234,265000.0,<1H OCEAN +-118.35,33.91,28.0,2108.0,534.0,1485.0,536.0,4.0775,241400.0,<1H OCEAN +-118.35,33.91,26.0,2159.0,523.0,1331.0,520.0,3.87,264500.0,<1H OCEAN +-118.35,33.91,25.0,1884.0,554.0,1337.0,549.0,2.8512,272800.0,<1H OCEAN +-118.35,33.9,25.0,3309.0,902.0,2299.0,837.0,3.0417,237000.0,<1H OCEAN +-118.35,33.91,32.0,1660.0,366.0,928.0,398.0,4.3187,269700.0,<1H OCEAN +-118.35,33.91,29.0,2461.0,535.0,1236.0,482.0,4.8409,244000.0,<1H OCEAN +-118.35,33.91,34.0,2055.0,448.0,1134.0,408.0,3.825,235400.0,<1H OCEAN +-118.36,33.91,36.0,2064.0,474.0,1366.0,421.0,4.1,243100.0,<1H OCEAN +-118.35,33.9,32.0,1056.0,225.0,565.0,231.0,3.9485,230000.0,<1H OCEAN +-118.36,33.9,39.0,1166.0,222.0,640.0,206.0,3.5313,230400.0,<1H OCEAN +-118.33,33.92,23.0,969.0,288.0,670.0,251.0,3.267,185400.0,<1H OCEAN +-118.33,33.91,39.0,1224.0,312.0,1106.0,333.0,3.3491,181800.0,<1H OCEAN +-118.34,33.91,17.0,3724.0,1023.0,2536.0,971.0,3.2649,202100.0,<1H OCEAN +-118.33,33.91,35.0,1092.0,302.0,962.0,297.0,3.5903,183300.0,<1H OCEAN +-118.34,33.91,8.0,3937.0,1404.0,2691.0,1142.0,2.4741,185700.0,<1H OCEAN +-118.34,33.92,6.0,1047.0,271.0,740.0,248.0,3.425,193800.0,<1H OCEAN +-118.34,33.91,12.0,9975.0,3638.0,7429.0,3405.0,2.6689,192300.0,<1H OCEAN +-118.33,33.91,8.0,10731.0,3335.0,7211.0,3028.0,2.455,192700.0,<1H OCEAN +-118.31,33.91,31.0,1415.0,339.0,874.0,289.0,3.8173,177900.0,<1H OCEAN +-118.31,33.91,36.0,961.0,173.0,625.0,179.0,4.2596,181100.0,<1H OCEAN +-118.32,33.91,33.0,1729.0,396.0,1073.0,344.0,4.2083,180500.0,<1H OCEAN +-118.32,33.91,35.0,940.0,197.0,640.0,215.0,4.2,181300.0,<1H OCEAN +-118.32,33.91,35.0,881.0,159.0,605.0,170.0,3.6654,184500.0,<1H OCEAN +-118.32,33.91,34.0,3041.0,677.0,1920.0,640.0,4.5304,181300.0,<1H OCEAN +-118.32,33.91,34.0,1068.0,198.0,757.0,231.0,5.7528,180500.0,<1H OCEAN +-118.32,33.9,35.0,3189.0,680.0,1882.0,651.0,3.6625,188000.0,<1H OCEAN +-118.31,33.92,35.0,1307.0,246.0,672.0,219.0,4.8456,146400.0,<1H OCEAN +-118.31,33.93,35.0,1580.0,266.0,926.0,282.0,5.0653,158000.0,<1H OCEAN +-118.32,33.93,34.0,1536.0,273.0,804.0,287.0,4.9615,157800.0,<1H OCEAN +-118.32,33.92,35.0,1281.0,219.0,710.0,184.0,4.8304,152800.0,<1H OCEAN +-118.29,33.93,31.0,3894.0,1017.0,3590.0,962.0,2.0437,137200.0,<1H OCEAN +-118.29,33.92,34.0,1799.0,362.0,1293.0,355.0,3.692,145200.0,<1H OCEAN +-118.29,33.92,34.0,1374.0,240.0,906.0,248.0,5.3292,155500.0,<1H OCEAN +-118.3,33.92,34.0,2053.0,382.0,1258.0,380.0,3.0139,154700.0,<1H OCEAN +-118.3,33.93,29.0,2228.0,396.0,1140.0,352.0,3.7969,169400.0,<1H OCEAN +-118.3,33.91,30.0,1842.0,476.0,1491.0,420.0,3.0147,155100.0,<1H OCEAN +-118.3,33.91,34.0,1617.0,493.0,1530.0,500.0,2.6182,172600.0,<1H OCEAN +-118.31,33.9,28.0,1576.0,400.0,891.0,378.0,2.6312,171300.0,<1H OCEAN +-118.29,33.91,28.0,1501.0,446.0,1028.0,418.0,2.3043,177500.0,<1H OCEAN +-118.29,33.9,27.0,1013.0,394.0,1067.0,400.0,1.7714,159400.0,<1H OCEAN +-118.3,33.9,29.0,2617.0,668.0,1868.0,647.0,3.6,208800.0,<1H OCEAN +-118.3,33.9,27.0,3267.0,762.0,2099.0,647.0,3.4,224100.0,<1H OCEAN +-118.3,33.9,13.0,2455.0,661.0,1975.0,618.0,2.9559,173600.0,<1H OCEAN +-118.3,33.9,19.0,2421.0,689.0,1726.0,660.0,3.287,181400.0,<1H OCEAN +-118.3,33.89,30.0,2756.0,858.0,1806.0,787.0,3.0329,207800.0,<1H OCEAN +-118.3,33.89,37.0,2132.0,565.0,1369.0,565.0,3.285,218100.0,<1H OCEAN +-118.31,33.9,38.0,1400.0,399.0,1131.0,405.0,3.5417,198400.0,<1H OCEAN +-118.29,33.89,33.0,2138.0,567.0,1072.0,528.0,2.7428,208900.0,<1H OCEAN +-118.29,33.89,32.0,2355.0,583.0,1605.0,571.0,4.2171,218200.0,<1H OCEAN +-118.29,33.88,36.0,1751.0,438.0,1175.0,419.0,3.0739,218600.0,<1H OCEAN +-118.29,33.88,21.0,4946.0,1231.0,3186.0,1167.0,3.3281,237000.0,<1H OCEAN +-118.3,33.87,27.0,3144.0,722.0,1510.0,680.0,3.1597,214700.0,<1H OCEAN +-118.3,33.87,31.0,1398.0,261.0,823.0,263.0,5.0641,234900.0,<1H OCEAN +-118.3,33.88,26.0,1221.0,312.0,807.0,330.0,4.0536,253600.0,<1H OCEAN +-118.3,33.88,29.0,850.0,229.0,563.0,204.0,3.7375,247700.0,<1H OCEAN +-118.3,33.88,30.0,1348.0,333.0,885.0,322.0,3.2574,195300.0,<1H OCEAN +-118.3,33.88,35.0,3227.0,749.0,1881.0,696.0,2.8445,242100.0,<1H OCEAN +-118.31,33.88,32.0,2421.0,671.0,1491.0,587.0,3.5644,242300.0,<1H OCEAN +-118.31,33.88,35.0,1939.0,412.0,1036.0,400.0,3.5556,238000.0,<1H OCEAN +-118.31,33.88,21.0,1490.0,430.0,686.0,400.0,2.3812,237500.0,<1H OCEAN +-118.31,33.9,30.0,2407.0,581.0,1724.0,531.0,3.4792,194700.0,<1H OCEAN +-118.31,33.89,37.0,2278.0,508.0,1257.0,498.0,3.7639,220600.0,<1H OCEAN +-118.31,33.89,35.0,2144.0,423.0,1192.0,417.0,4.1458,231500.0,<1H OCEAN +-118.32,33.9,36.0,1520.0,300.0,831.0,291.0,4.0473,212100.0,<1H OCEAN +-118.32,33.9,36.0,1741.0,412.0,1245.0,423.0,4.1344,210300.0,<1H OCEAN +-118.32,33.9,37.0,1664.0,401.0,1316.0,409.0,3.0526,216400.0,<1H OCEAN +-118.32,33.89,45.0,1928.0,453.0,1323.0,458.0,4.2813,210100.0,<1H OCEAN +-118.32,33.89,44.0,1300.0,252.0,695.0,249.0,5.1669,220600.0,<1H OCEAN +-118.32,33.89,34.0,2675.0,560.0,1270.0,492.0,4.5053,242000.0,<1H OCEAN +-118.33,33.9,21.0,6603.0,1984.0,5546.0,1745.0,2.6091,163900.0,<1H OCEAN +-118.34,33.9,23.0,2395.0,498.0,1309.0,493.0,4.9779,224600.0,<1H OCEAN +-118.34,33.9,37.0,542.0,105.0,355.0,118.0,5.5133,227300.0,<1H OCEAN +-118.34,33.9,36.0,1158.0,219.0,628.0,253.0,4.7426,242700.0,<1H OCEAN +-118.34,33.9,36.0,1342.0,259.0,706.0,261.0,4.1776,236600.0,<1H OCEAN +-118.33,33.89,39.0,1880.0,361.0,982.0,357.0,4.1953,226900.0,<1H OCEAN +-118.33,33.89,42.0,1816.0,338.0,897.0,306.0,5.1874,230800.0,<1H OCEAN +-118.34,33.89,36.0,2392.0,444.0,1346.0,445.0,6.0088,245900.0,<1H OCEAN +-118.34,33.89,36.0,2274.0,411.0,1232.0,423.0,5.373,244500.0,<1H OCEAN +-118.35,33.9,13.0,2887.0,853.0,2197.0,800.0,2.8777,207900.0,<1H OCEAN +-118.35,33.9,31.0,1547.0,,956.0,287.0,3.4698,225000.0,<1H OCEAN +-118.35,33.9,31.0,981.0,222.0,734.0,239.0,4.875,232400.0,<1H OCEAN +-118.35,33.89,29.0,2940.0,708.0,2175.0,684.0,3.6486,229000.0,<1H OCEAN +-118.35,33.89,34.0,1740.0,387.0,1249.0,375.0,4.1552,233900.0,<1H OCEAN +-118.36,33.9,41.0,1355.0,349.0,655.0,329.0,2.9551,205000.0,<1H OCEAN +-118.35,33.9,22.0,1127.0,287.0,697.0,241.0,3.3971,220300.0,<1H OCEAN +-118.35,33.89,30.0,1143.0,299.0,776.0,273.0,4.2829,240000.0,<1H OCEAN +-118.36,33.89,37.0,1719.0,426.0,1266.0,424.0,3.375,228000.0,<1H OCEAN +-118.36,33.89,34.0,760.0,174.0,723.0,198.0,5.3169,227600.0,<1H OCEAN +-118.36,33.9,18.0,3380.0,922.0,2276.0,854.0,4.0727,214000.0,<1H OCEAN +-118.36,33.89,27.0,2837.0,684.0,2141.0,648.0,3.1325,215000.0,<1H OCEAN +-118.36,33.88,33.0,2408.0,534.0,1644.0,523.0,4.2454,236800.0,<1H OCEAN +-118.36,33.88,28.0,1313.0,319.0,827.0,308.0,2.65,260800.0,<1H OCEAN +-118.36,33.88,25.0,2845.0,710.0,1611.0,628.0,3.2049,267400.0,<1H OCEAN +-118.36,33.88,22.0,1388.0,336.0,930.0,287.0,2.7981,275000.0,<1H OCEAN +-118.36,33.88,26.0,1375.0,286.0,829.0,278.0,3.9844,230700.0,<1H OCEAN +-118.35,33.89,25.0,1769.0,440.0,1371.0,414.0,3.0833,232700.0,<1H OCEAN +-118.35,33.88,36.0,1583.0,411.0,1097.0,350.0,4.0737,238200.0,<1H OCEAN +-118.34,33.88,42.0,725.0,183.0,493.0,172.0,3.2589,233300.0,<1H OCEAN +-118.35,33.88,44.0,822.0,180.0,480.0,177.0,4.4,225800.0,<1H OCEAN +-118.35,33.88,36.0,1567.0,362.0,1054.0,386.0,3.2594,233900.0,<1H OCEAN +-118.35,33.88,25.0,1459.0,362.0,1150.0,354.0,3.35,237500.0,<1H OCEAN +-118.3,33.74,40.0,1896.0,416.0,950.0,383.0,2.425,255000.0,NEAR OCEAN +-118.3,33.74,28.0,1065.0,215.0,887.0,217.0,3.9375,270500.0,NEAR OCEAN +-118.39,33.92,41.0,80.0,20.0,61.0,23.0,5.25,247200.0,<1H OCEAN +-118.4,33.92,25.0,1453.0,271.0,695.0,283.0,5.9499,345800.0,<1H OCEAN +-118.4,33.92,32.0,2828.0,629.0,1313.0,534.0,4.5987,363800.0,<1H OCEAN +-118.4,33.93,35.0,2217.0,447.0,1000.0,450.0,4.7319,376100.0,<1H OCEAN +-118.41,33.93,38.0,3328.0,625.0,1455.0,619.0,5.0596,363900.0,<1H OCEAN +-118.41,33.92,32.0,2590.0,607.0,1132.0,555.0,4.2333,358000.0,<1H OCEAN +-118.41,33.92,22.0,2340.0,584.0,1141.0,554.0,4.5729,337500.0,<1H OCEAN +-118.41,33.93,22.0,2514.0,605.0,1225.0,568.0,4.1818,339700.0,<1H OCEAN +-118.41,33.92,38.0,1437.0,272.0,590.0,250.0,5.2338,358000.0,<1H OCEAN +-118.41,33.92,29.0,1436.0,401.0,674.0,343.0,3.6389,275000.0,<1H OCEAN +-118.42,33.92,25.0,3521.0,852.0,1524.0,764.0,3.8086,361300.0,<1H OCEAN +-118.42,33.92,41.0,1621.0,279.0,756.0,277.0,5.0594,346000.0,<1H OCEAN +-118.42,33.93,39.0,2988.0,605.0,1466.0,610.0,4.9286,341400.0,<1H OCEAN +-118.42,33.93,28.0,4603.0,993.0,2191.0,943.0,4.5743,382200.0,<1H OCEAN +-118.42,33.9,29.0,1929.0,523.0,686.0,455.0,5.5347,500001.0,<1H OCEAN +-118.43,33.9,27.0,1536.0,377.0,553.0,326.0,5.4088,500001.0,<1H OCEAN +-118.4,33.9,34.0,2674.0,435.0,1087.0,431.0,7.3151,492200.0,<1H OCEAN +-118.4,33.9,37.0,2458.0,400.0,920.0,375.0,7.8924,500001.0,<1H OCEAN +-118.41,33.9,39.0,2311.0,404.0,1044.0,380.0,8.468,472100.0,<1H OCEAN +-118.41,33.9,39.0,2040.0,336.0,926.0,351.0,7.5552,500001.0,<1H OCEAN +-118.44,33.88,35.0,2020.0,451.0,724.0,399.0,6.6494,500001.0,NEAR OCEAN +-118.42,33.9,37.0,1576.0,345.0,662.0,340.0,5.308,500001.0,<1H OCEAN +-118.42,33.9,43.0,1394.0,321.0,552.0,296.0,5.9596,500001.0,<1H OCEAN +-118.41,33.89,31.0,1428.0,320.0,677.0,331.0,7.2316,500001.0,<1H OCEAN +-118.41,33.89,35.0,1194.0,292.0,507.0,295.0,9.0812,500001.0,<1H OCEAN +-118.41,33.89,38.0,4166.0,828.0,1600.0,770.0,6.3861,500001.0,<1H OCEAN +-118.41,33.89,34.0,2959.0,639.0,1143.0,593.0,6.348,500001.0,<1H OCEAN +-118.41,33.89,31.0,702.0,161.0,236.0,144.0,5.0497,500001.0,<1H OCEAN +-118.4,33.9,38.0,2868.0,466.0,1098.0,438.0,7.9059,477100.0,<1H OCEAN +-118.4,33.89,36.0,2334.0,430.0,1033.0,407.0,6.6321,481500.0,<1H OCEAN +-118.4,33.89,31.0,2926.0,492.0,1149.0,476.0,7.9611,500001.0,<1H OCEAN +-118.4,33.89,36.0,2127.0,314.0,807.0,306.0,8.1596,500001.0,<1H OCEAN +-118.39,33.9,7.0,4314.0,725.0,1699.0,718.0,8.2037,500001.0,<1H OCEAN +-118.38,33.89,35.0,1778.0,330.0,732.0,312.0,6.5745,379300.0,<1H OCEAN +-118.39,33.89,30.0,2532.0,464.0,1056.0,419.0,6.3434,460400.0,<1H OCEAN +-118.39,33.89,38.0,1851.0,332.0,750.0,314.0,7.3356,422700.0,<1H OCEAN +-118.39,33.89,40.0,826.0,143.0,389.0,147.0,7.1845,438100.0,<1H OCEAN +-118.36,33.89,40.0,756.0,122.0,371.0,130.0,5.0299,329200.0,<1H OCEAN +-118.36,33.88,44.0,1362.0,237.0,709.0,247.0,4.4271,336200.0,<1H OCEAN +-118.37,33.88,44.0,1325.0,245.0,669.0,253.0,4.4211,324000.0,<1H OCEAN +-118.37,33.88,21.0,966.0,172.0,417.0,158.0,5.5335,342600.0,<1H OCEAN +-118.38,33.88,33.0,1313.0,244.0,561.0,217.0,5.2999,359400.0,<1H OCEAN +-118.37,33.89,21.0,2696.0,548.0,1142.0,473.0,5.6091,356800.0,<1H OCEAN +-118.37,33.88,20.0,2439.0,474.0,1219.0,497.0,5.9619,335900.0,<1H OCEAN +-118.36,33.88,31.0,2518.0,543.0,1107.0,508.0,4.7404,295800.0,<1H OCEAN +-118.36,33.87,19.0,2512.0,575.0,1275.0,544.0,4.9375,293000.0,<1H OCEAN +-118.37,33.87,19.0,757.0,148.0,361.0,141.0,6.02,304200.0,<1H OCEAN +-118.37,33.88,27.0,1688.0,331.0,811.0,327.0,4.5357,334200.0,<1H OCEAN +-118.38,33.87,27.0,2287.0,491.0,1101.0,466.0,4.675,316900.0,<1H OCEAN +-118.38,33.88,27.0,3039.0,606.0,1421.0,564.0,5.5771,345500.0,<1H OCEAN +-118.37,33.88,26.0,2620.0,530.0,1282.0,525.0,4.4828,340700.0,<1H OCEAN +-118.36,33.87,17.0,1082.0,291.0,598.0,281.0,3.9868,281900.0,<1H OCEAN +-118.36,33.87,22.0,2114.0,541.0,1300.0,538.0,3.4208,290000.0,<1H OCEAN +-118.37,33.87,18.0,2516.0,485.0,1128.0,433.0,5.0114,338600.0,<1H OCEAN +-118.37,33.87,13.0,2907.0,726.0,1573.0,694.0,3.5048,294000.0,<1H OCEAN +-118.36,33.86,35.0,2126.0,434.0,1044.0,433.0,5.5456,297400.0,<1H OCEAN +-118.36,33.86,37.0,1768.0,314.0,802.0,290.0,5.0784,295900.0,<1H OCEAN +-118.36,33.86,34.0,1865.0,345.0,963.0,302.0,5.543,305900.0,<1H OCEAN +-118.37,33.86,28.0,2685.0,581.0,1243.0,529.0,4.119,324000.0,<1H OCEAN +-118.37,33.87,23.0,1829.0,331.0,891.0,356.0,6.5755,359900.0,<1H OCEAN +-118.38,33.87,21.0,4151.0,1018.0,2054.0,925.0,4.9821,292900.0,<1H OCEAN +-118.38,33.87,17.0,2791.0,579.0,1467.0,583.0,5.7415,321900.0,<1H OCEAN +-118.38,33.87,23.0,2387.0,418.0,1008.0,415.0,5.8518,337900.0,<1H OCEAN +-118.39,33.87,19.0,3303.0,584.0,1329.0,569.0,7.521,340400.0,<1H OCEAN +-118.38,33.86,12.0,4235.0,735.0,1798.0,683.0,6.4242,365500.0,<1H OCEAN +-118.38,33.86,29.0,2787.0,475.0,1182.0,444.0,6.7613,352700.0,<1H OCEAN +-118.38,33.86,24.0,3124.0,560.0,1312.0,542.0,6.3021,333800.0,<1H OCEAN +-118.38,33.86,15.0,1778.0,311.0,908.0,330.0,7.674,329300.0,<1H OCEAN +-118.38,33.87,33.0,1993.0,371.0,918.0,361.0,6.9021,337600.0,<1H OCEAN +-118.38,33.88,39.0,1489.0,282.0,743.0,270.0,4.8611,456100.0,<1H OCEAN +-118.38,33.88,34.0,1830.0,315.0,822.0,307.0,5.0602,453700.0,<1H OCEAN +-118.39,33.88,33.0,2496.0,387.0,1098.0,404.0,7.6685,474300.0,<1H OCEAN +-118.39,33.88,34.0,1973.0,367.0,843.0,345.0,6.077,472700.0,<1H OCEAN +-118.39,33.88,33.0,2543.0,439.0,1098.0,416.0,5.9683,495500.0,<1H OCEAN +-118.39,33.88,31.0,1448.0,244.0,607.0,259.0,8.1513,500001.0,<1H OCEAN +-118.39,33.88,35.0,1267.0,216.0,521.0,191.0,6.0441,470000.0,<1H OCEAN +-118.38,33.88,36.0,2501.0,443.0,1031.0,422.0,4.75,442100.0,<1H OCEAN +-118.4,33.88,36.0,3022.0,482.0,1278.0,494.0,7.2651,500001.0,<1H OCEAN +-118.4,33.88,36.0,1543.0,214.0,474.0,187.0,9.3399,500001.0,<1H OCEAN +-118.4,33.88,35.0,1753.0,296.0,615.0,275.0,7.5,500001.0,<1H OCEAN +-118.41,33.88,34.0,540.0,107.0,213.0,104.0,6.3403,500001.0,<1H OCEAN +-118.4,33.88,35.0,1060.0,191.0,444.0,196.0,8.0015,500001.0,<1H OCEAN +-118.41,33.88,43.0,2492.0,449.0,1033.0,437.0,7.9614,500001.0,<1H OCEAN +-118.41,33.88,40.0,925.0,254.0,371.0,227.0,5.2533,500001.0,<1H OCEAN +-118.41,33.88,34.0,1471.0,308.0,498.0,264.0,7.0842,500001.0,<1H OCEAN +-118.43,33.87,41.0,847.0,173.0,344.0,170.0,6.822,500001.0,NEAR OCEAN +-118.4,33.87,26.0,6712.0,1441.0,2803.0,1394.0,5.2276,434500.0,<1H OCEAN +-118.39,33.87,34.0,2395.0,469.0,1087.0,438.0,5.9683,394600.0,<1H OCEAN +-118.43,33.86,34.0,358.0,87.0,162.0,84.0,7.1264,500001.0,NEAR OCEAN +-118.4,33.88,42.0,1516.0,341.0,634.0,327.0,6.2356,472700.0,<1H OCEAN +-118.4,33.87,40.0,1679.0,372.0,719.0,385.0,6.435,479500.0,<1H OCEAN +-118.4,33.87,38.0,2398.0,431.0,911.0,392.0,5.2319,500001.0,<1H OCEAN +-118.4,33.87,45.0,2093.0,497.0,842.0,472.0,6.3231,500001.0,<1H OCEAN +-118.4,33.87,34.0,3145.0,786.0,1352.0,727.0,5.0976,469800.0,<1H OCEAN +-118.4,33.87,45.0,2181.0,505.0,965.0,471.0,5.3816,500001.0,<1H OCEAN +-118.39,33.86,34.0,2361.0,442.0,915.0,437.0,5.687,392400.0,<1H OCEAN +-118.39,33.86,28.0,3619.0,764.0,1735.0,789.0,6.1404,368400.0,<1H OCEAN +-118.39,33.86,24.0,2386.0,582.0,1152.0,568.0,4.8971,400700.0,<1H OCEAN +-118.4,33.86,18.0,5152.0,1365.0,2286.0,1243.0,5.1677,380800.0,<1H OCEAN +-118.4,33.85,29.0,2085.0,533.0,919.0,489.0,5.6017,430000.0,<1H OCEAN +-118.4,33.86,41.0,2237.0,597.0,938.0,523.0,4.7105,500001.0,<1H OCEAN +-118.42,33.85,43.0,1584.0,477.0,799.0,433.0,5.0322,435000.0,NEAR OCEAN +-118.38,33.85,28.0,4430.0,928.0,2131.0,885.0,4.9384,378100.0,<1H OCEAN +-118.38,33.85,31.0,3533.0,729.0,1647.0,679.0,5.5843,384600.0,<1H OCEAN +-118.39,33.85,24.0,4373.0,871.0,1830.0,824.0,5.7128,366200.0,<1H OCEAN +-118.41,33.85,16.0,6123.0,1989.0,2853.0,1789.0,4.425,336400.0,NEAR OCEAN +-118.39,33.85,17.0,1610.0,379.0,670.0,341.0,4.3594,349000.0,<1H OCEAN +-118.38,33.84,25.0,5775.0,1149.0,2637.0,1117.0,5.4968,379800.0,<1H OCEAN +-118.38,33.83,20.0,2270.0,498.0,1070.0,521.0,4.4615,384800.0,<1H OCEAN +-118.38,33.83,40.0,3070.0,570.0,1264.0,506.0,5.1626,432700.0,<1H OCEAN +-118.38,33.84,26.0,2869.0,567.0,1157.0,538.0,6.0382,355300.0,<1H OCEAN +-118.39,33.84,16.0,2472.0,572.0,965.0,529.0,5.137,348600.0,<1H OCEAN +-118.43,33.83,19.0,6206.0,1611.0,2455.0,1472.0,5.145,420200.0,NEAR OCEAN +-118.39,33.83,32.0,2075.0,539.0,954.0,519.0,5.637,500001.0,NEAR OCEAN +-118.39,33.82,30.0,3433.0,918.0,1526.0,828.0,4.5817,500001.0,NEAR OCEAN +-118.43,33.82,34.0,2112.0,614.0,946.0,574.0,4.6048,500001.0,NEAR OCEAN +-118.37,33.82,32.0,2815.0,607.0,1338.0,609.0,4.5687,381200.0,<1H OCEAN +-118.38,33.82,35.0,3053.0,623.0,1311.0,589.0,5.1589,439200.0,NEAR OCEAN +-118.38,33.82,38.0,1318.0,237.0,547.0,225.0,6.0308,416700.0,NEAR OCEAN +-118.38,33.83,35.0,2152.0,454.0,902.0,414.0,4.5179,427200.0,<1H OCEAN +-118.31,33.88,33.0,2147.0,505.0,1371.0,498.0,2.4219,260700.0,<1H OCEAN +-118.32,33.87,28.0,3763.0,762.0,1967.0,724.0,5.3244,271900.0,<1H OCEAN +-118.32,33.88,35.0,1818.0,339.0,828.0,319.0,4.3036,282100.0,<1H OCEAN +-118.32,33.88,34.0,1803.0,341.0,947.0,333.0,5.5538,280300.0,<1H OCEAN +-118.32,33.88,37.0,1402.0,254.0,722.0,251.0,6.4781,269000.0,<1H OCEAN +-118.33,33.88,30.0,1856.0,444.0,899.0,435.0,3.1505,270000.0,<1H OCEAN +-118.33,33.88,36.0,1271.0,346.0,811.0,345.0,3.2417,283300.0,<1H OCEAN +-118.33,33.87,44.0,724.0,133.0,373.0,133.0,3.9167,265600.0,<1H OCEAN +-118.34,33.87,28.0,4605.0,1188.0,2558.0,1093.0,3.6988,266600.0,<1H OCEAN +-118.34,33.88,31.0,3122.0,727.0,1885.0,715.0,3.8657,298400.0,<1H OCEAN +-118.31,33.87,27.0,3348.0,695.0,1545.0,625.0,4.7543,296300.0,<1H OCEAN +-118.31,33.86,29.0,2243.0,361.0,1051.0,352.0,6.6632,325200.0,<1H OCEAN +-118.32,33.86,32.0,3485.0,678.0,1715.0,649.0,4.6563,291700.0,<1H OCEAN +-118.32,33.87,35.0,2380.0,404.0,1212.0,422.0,5.6254,283800.0,<1H OCEAN +-118.34,33.87,34.0,1069.0,217.0,601.0,212.0,4.6406,255900.0,<1H OCEAN +-118.33,33.87,36.0,2219.0,406.0,1219.0,403.0,4.2614,267100.0,<1H OCEAN +-118.33,33.87,35.0,743.0,128.0,385.0,137.0,6.4891,278100.0,<1H OCEAN +-118.32,33.86,34.0,495.0,90.0,269.0,93.0,6.4391,252300.0,<1H OCEAN +-118.33,33.86,38.0,914.0,176.0,519.0,174.0,6.0335,255400.0,<1H OCEAN +-118.33,33.86,36.0,854.0,160.0,473.0,150.0,6.3992,259600.0,<1H OCEAN +-118.33,33.86,38.0,1059.0,218.0,561.0,205.0,4.0,248600.0,<1H OCEAN +-118.34,33.86,36.0,2223.0,360.0,1162.0,376.0,5.259,279400.0,<1H OCEAN +-118.34,33.86,35.0,1936.0,343.0,1008.0,346.0,5.4791,285900.0,<1H OCEAN +-118.34,33.87,28.0,2948.0,566.0,1445.0,524.0,5.3743,286500.0,<1H OCEAN +-118.35,33.87,37.0,1420.0,286.0,886.0,290.0,4.5833,261300.0,<1H OCEAN +-118.35,33.87,34.0,2823.0,500.0,1429.0,483.0,5.5,279600.0,<1H OCEAN +-118.35,33.87,28.0,2319.0,579.0,1369.0,564.0,3.6169,257000.0,<1H OCEAN +-118.35,33.86,28.0,2075.0,463.0,1216.0,446.0,3.9732,281500.0,<1H OCEAN +-118.35,33.86,24.0,2139.0,481.0,971.0,418.0,4.3859,271300.0,<1H OCEAN +-118.34,33.84,36.0,1561.0,252.0,740.0,253.0,6.2778,309700.0,<1H OCEAN +-118.33,33.84,36.0,1364.0,251.0,668.0,245.0,5.3131,314100.0,<1H OCEAN +-118.34,33.84,36.0,1407.0,231.0,676.0,231.0,5.269,331900.0,<1H OCEAN +-118.34,33.83,34.0,1761.0,329.0,965.0,329.0,5.399,358500.0,<1H OCEAN +-118.34,33.83,35.0,1818.0,353.0,853.0,321.0,5.8972,350900.0,<1H OCEAN +-118.36,33.86,37.0,1249.0,218.0,583.0,214.0,5.7422,330700.0,<1H OCEAN +-118.35,33.85,34.0,1770.0,291.0,916.0,289.0,5.0,354200.0,<1H OCEAN +-118.35,33.85,35.0,1248.0,206.0,551.0,185.0,5.6426,348200.0,<1H OCEAN +-118.36,33.85,36.0,1390.0,230.0,683.0,219.0,4.8906,334400.0,<1H OCEAN +-118.36,33.86,36.0,681.0,122.0,360.0,128.0,5.2799,332600.0,<1H OCEAN +-118.37,33.85,34.0,2415.0,404.0,1278.0,414.0,6.1599,341200.0,<1H OCEAN +-118.36,33.85,34.0,1086.0,197.0,509.0,158.0,6.1133,349300.0,<1H OCEAN +-118.37,33.85,25.0,5622.0,998.0,2537.0,1009.0,5.785,395300.0,<1H OCEAN +-118.35,33.84,22.0,13133.0,3680.0,7180.0,3522.0,3.5414,354700.0,<1H OCEAN +-118.36,33.84,22.0,11016.0,3170.0,6664.0,2838.0,3.703,361300.0,<1H OCEAN +-118.37,33.85,29.0,3662.0,586.0,1626.0,611.0,6.3974,410000.0,<1H OCEAN +-118.37,33.84,27.0,3245.0,605.0,1572.0,556.0,5.3773,379000.0,<1H OCEAN +-118.35,33.83,36.0,1102.0,193.0,522.0,172.0,6.1187,342000.0,<1H OCEAN +-118.36,33.83,36.0,1660.0,300.0,943.0,300.0,5.1984,353600.0,<1H OCEAN +-118.36,33.84,35.0,1577.0,279.0,743.0,274.0,5.7654,343000.0,<1H OCEAN +-118.37,33.84,35.0,1792.0,322.0,978.0,326.0,4.9583,342800.0,<1H OCEAN +-118.36,33.83,35.0,1378.0,247.0,645.0,217.0,5.9143,343400.0,<1H OCEAN +-118.36,33.83,35.0,2828.0,487.0,1439.0,490.0,5.6013,350200.0,<1H OCEAN +-118.37,33.83,35.0,1207.0,207.0,601.0,213.0,4.7308,353400.0,<1H OCEAN +-118.37,33.84,32.0,1751.0,328.0,819.0,323.0,6.7105,339000.0,<1H OCEAN +-118.33,33.83,5.0,13038.0,2679.0,5272.0,2523.0,5.5023,286400.0,<1H OCEAN +-118.32,33.85,42.0,3146.0,770.0,1859.0,740.0,3.5073,234800.0,<1H OCEAN +-118.31,33.84,52.0,1819.0,464.0,1068.0,424.0,3.625,270700.0,<1H OCEAN +-118.32,33.83,51.0,2399.0,516.0,1160.0,514.0,3.8456,318900.0,<1H OCEAN +-118.32,33.84,42.0,1486.0,420.0,897.0,377.0,1.6228,376100.0,<1H OCEAN +-118.31,33.83,50.0,696.0,311.0,382.0,234.0,2.775,225000.0,<1H OCEAN +-118.31,33.83,45.0,2929.0,755.0,1635.0,652.0,2.9375,273000.0,<1H OCEAN +-118.31,33.82,35.0,3462.0,814.0,1902.0,700.0,3.402,279900.0,<1H OCEAN +-118.32,33.83,19.0,3792.0,790.0,2105.0,834.0,5.2363,310000.0,<1H OCEAN +-118.31,33.82,39.0,2198.0,425.0,1160.0,436.0,4.1406,323700.0,<1H OCEAN +-118.31,33.82,26.0,2345.0,408.0,1195.0,377.0,5.4925,361700.0,<1H OCEAN +-118.31,33.81,23.0,3942.0,748.0,1679.0,711.0,4.1169,362600.0,<1H OCEAN +-118.31,33.81,30.0,1773.0,356.0,905.0,352.0,4.3056,336000.0,<1H OCEAN +-118.32,33.82,25.0,2587.0,512.0,1219.0,509.0,4.4271,382100.0,<1H OCEAN +-118.32,33.82,22.0,2508.0,402.0,1254.0,395.0,7.0935,379500.0,<1H OCEAN +-118.32,33.81,28.0,2142.0,445.0,1140.0,422.0,4.8438,346200.0,<1H OCEAN +-118.32,33.81,27.0,2113.0,380.0,1109.0,360.0,4.7062,357000.0,<1H OCEAN +-118.33,33.82,26.0,5591.0,934.0,2824.0,939.0,6.5861,417800.0,<1H OCEAN +-118.34,33.8,25.0,4177.0,832.0,2123.0,789.0,5.0814,446800.0,<1H OCEAN +-118.35,33.82,28.0,7591.0,1710.0,3420.0,1635.0,4.0708,328900.0,<1H OCEAN +-118.36,33.82,36.0,1784.0,311.0,901.0,293.0,6.2247,339000.0,<1H OCEAN +-118.37,33.82,39.0,2794.0,444.0,1319.0,441.0,5.878,387800.0,<1H OCEAN +-118.37,33.82,36.0,2463.0,447.0,1125.0,424.0,6.0176,352700.0,<1H OCEAN +-118.37,33.82,36.0,2416.0,394.0,1115.0,386.0,6.256,366900.0,<1H OCEAN +-118.36,33.82,36.0,1083.0,187.0,522.0,187.0,5.7765,339500.0,<1H OCEAN +-118.36,33.82,26.0,5166.0,1313.0,2738.0,1239.0,3.3565,360800.0,<1H OCEAN +-118.36,33.82,28.0,67.0,15.0,49.0,11.0,6.1359,330000.0,<1H OCEAN +-118.36,33.81,25.0,9042.0,2022.0,4458.0,1944.0,4.5592,378800.0,<1H OCEAN +-118.36,33.81,26.0,1575.0,300.0,881.0,309.0,5.1778,359900.0,<1H OCEAN +-118.37,33.81,36.0,2031.0,339.0,817.0,337.0,5.1271,458300.0,NEAR OCEAN +-118.38,33.81,33.0,2349.0,407.0,954.0,373.0,6.4956,483600.0,NEAR OCEAN +-118.38,33.81,20.0,1975.0,306.0,703.0,292.0,8.5491,410300.0,NEAR OCEAN +-118.44,33.81,33.0,3994.0,990.0,1647.0,931.0,5.0106,500001.0,NEAR OCEAN +-118.38,33.82,34.0,1822.0,364.0,750.0,366.0,5.9907,500001.0,NEAR OCEAN +-118.36,33.81,34.0,2211.0,502.0,1113.0,488.0,4.7026,356800.0,<1H OCEAN +-118.37,33.81,33.0,5057.0,790.0,2021.0,748.0,6.8553,482200.0,NEAR OCEAN +-118.37,33.81,36.0,1283.0,209.0,563.0,209.0,6.9296,500001.0,NEAR OCEAN +-118.38,33.81,41.0,1889.0,301.0,802.0,278.0,6.015,488500.0,NEAR OCEAN +-118.38,33.81,39.0,2400.0,373.0,877.0,372.0,5.7361,500001.0,NEAR OCEAN +-118.39,33.81,35.0,1008.0,165.0,391.0,167.0,3.7778,487500.0,NEAR OCEAN +-118.38,33.81,36.0,1018.0,148.0,329.0,169.0,10.5045,500001.0,NEAR OCEAN +-118.33,33.79,29.0,4389.0,873.0,2069.0,901.0,4.1071,365600.0,<1H OCEAN +-118.34,33.79,36.0,716.0,123.0,388.0,124.0,5.0254,350000.0,<1H OCEAN +-118.34,33.8,34.0,1730.0,427.0,1008.0,393.0,3.9408,327700.0,<1H OCEAN +-118.34,33.8,33.0,2194.0,469.0,987.0,397.0,5.0951,318900.0,<1H OCEAN +-118.35,33.8,32.0,1434.0,296.0,672.0,285.0,4.875,311700.0,<1H OCEAN +-118.35,33.8,19.0,6224.0,1105.0,3152.0,1076.0,5.9541,500001.0,<1H OCEAN +-118.31,33.8,29.0,2795.0,572.0,1469.0,557.0,3.7167,308900.0,<1H OCEAN +-118.32,33.8,29.0,3254.0,717.0,1593.0,680.0,4.0536,285800.0,<1H OCEAN +-118.31,33.79,35.0,2290.0,563.0,1374.0,530.0,3.2472,254700.0,<1H OCEAN +-118.31,33.8,31.0,4464.0,991.0,2420.0,947.0,4.0425,277900.0,<1H OCEAN +-118.32,33.8,39.0,1415.0,298.0,729.0,278.0,3.1648,244800.0,<1H OCEAN +-118.32,33.79,35.0,2924.0,658.0,1675.0,602.0,3.8287,279900.0,<1H OCEAN +-118.32,33.79,32.0,2381.0,467.0,1264.0,488.0,4.1477,315100.0,<1H OCEAN +-118.32,33.8,29.0,4317.0,1037.0,2102.0,959.0,3.1275,286400.0,<1H OCEAN +-118.31,33.79,38.0,1601.0,352.0,711.0,304.0,3.3958,250000.0,<1H OCEAN +-118.31,33.78,30.0,4573.0,819.0,2411.0,819.0,3.5804,383800.0,<1H OCEAN +-118.32,33.79,21.0,6638.0,1634.0,3240.0,1568.0,3.6797,271100.0,<1H OCEAN +-118.34,33.78,25.0,11016.0,1626.0,4168.0,1584.0,8.1782,500001.0,NEAR OCEAN +-118.36,33.79,34.0,5166.0,704.0,2071.0,668.0,8.3609,500001.0,NEAR OCEAN +-118.37,33.79,36.0,1596.0,234.0,654.0,223.0,8.2064,500001.0,NEAR OCEAN +-118.36,33.8,38.0,2553.0,400.0,1042.0,393.0,6.9742,500001.0,NEAR OCEAN +-118.36,33.8,34.0,2629.0,369.0,966.0,375.0,10.1241,500001.0,NEAR OCEAN +-118.38,33.8,36.0,4421.0,702.0,1433.0,624.0,8.0838,500001.0,NEAR OCEAN +-118.45,33.8,31.0,4803.0,575.0,1490.0,577.0,11.9993,500001.0,NEAR OCEAN +-118.39,33.79,30.0,4402.0,563.0,1582.0,551.0,10.898,500001.0,NEAR OCEAN +-118.4,33.78,24.0,4787.0,562.0,1653.0,548.0,12.9758,500001.0,NEAR OCEAN +-118.44,33.79,27.0,2141.0,260.0,635.0,240.0,11.6648,500001.0,NEAR OCEAN +-118.41,33.77,22.0,7554.0,991.0,2808.0,946.0,10.06,500001.0,NEAR OCEAN +-118.46,33.77,28.0,3065.0,406.0,1101.0,391.0,10.5536,500001.0,NEAR OCEAN +-118.42,33.78,36.0,2093.0,303.0,802.0,300.0,8.0957,500001.0,NEAR OCEAN +-118.37,33.77,26.0,6339.0,876.0,2540.0,880.0,10.1447,500001.0,NEAR OCEAN +-118.38,33.77,21.0,11353.0,1537.0,4649.0,1504.0,9.821,500001.0,NEAR OCEAN +-118.38,33.77,17.0,10950.0,2207.0,4713.0,2043.0,6.3064,418300.0,NEAR OCEAN +-118.38,33.79,32.0,10445.0,1620.0,4474.0,1576.0,7.7042,500001.0,NEAR OCEAN +-118.4,33.78,26.0,5005.0,776.0,2357.0,790.0,8.5421,500001.0,NEAR OCEAN +-118.42,33.75,22.0,17591.0,2604.0,6897.0,2492.0,8.2831,500001.0,NEAR OCEAN +-118.34,33.76,34.0,5586.0,674.0,1871.0,636.0,15.0001,500001.0,NEAR OCEAN +-118.35,33.74,25.0,8272.0,1132.0,3392.0,1132.0,10.0973,500001.0,NEAR OCEAN +-118.38,33.75,23.0,8277.0,1290.0,3176.0,1159.0,7.6986,500001.0,NEAR OCEAN +-118.39,33.71,18.0,1193.0,233.0,475.0,228.0,7.5594,500001.0,NEAR OCEAN +-118.41,33.75,4.0,311.0,51.0,128.0,46.0,9.8091,500001.0,NEAR OCEAN +-118.31,33.77,20.0,5776.0,956.0,2757.0,936.0,6.6447,416800.0,<1H OCEAN +-118.31,33.76,26.0,4486.0,709.0,1873.0,719.0,6.5704,414700.0,<1H OCEAN +-118.31,33.75,36.0,2715.0,474.0,1303.0,457.0,4.6042,357300.0,NEAR OCEAN +-118.31,33.75,34.0,2338.0,393.0,1031.0,373.0,6.287,396400.0,NEAR OCEAN +-118.33,33.77,33.0,4244.0,595.0,1534.0,557.0,9.8214,500001.0,NEAR OCEAN +-118.32,33.75,33.0,2996.0,398.0,1048.0,387.0,9.267,500001.0,NEAR OCEAN +-118.32,33.75,37.0,1080.0,135.0,366.0,142.0,11.6677,500001.0,NEAR OCEAN +-118.32,33.74,24.0,6097.0,794.0,2248.0,806.0,10.1357,500001.0,NEAR OCEAN +-118.32,33.77,37.0,627.0,95.0,259.0,106.0,6.887,500001.0,<1H OCEAN +-118.34,34.09,37.0,1442.0,501.0,998.0,503.0,2.4432,200000.0,<1H OCEAN +-118.35,34.09,35.0,1989.0,634.0,1108.0,593.0,1.6081,288900.0,<1H OCEAN +-118.35,34.09,35.0,2705.0,785.0,1526.0,793.0,3.0349,266700.0,<1H OCEAN +-118.35,34.09,35.0,2234.0,689.0,1334.0,662.0,2.5444,236100.0,<1H OCEAN +-118.36,34.09,34.0,2832.0,883.0,1594.0,843.0,1.7558,312500.0,<1H OCEAN +-118.36,34.09,36.0,1616.0,465.0,773.0,429.0,2.6,313600.0,<1H OCEAN +-118.36,34.09,33.0,3463.0,1170.0,1845.0,1134.0,2.0205,243800.0,<1H OCEAN +-118.36,34.09,30.0,2353.0,728.0,1365.0,718.0,2.0702,283300.0,<1H OCEAN +-118.36,34.1,37.0,7097.0,2010.0,2913.0,1939.0,2.875,300000.0,<1H OCEAN +-118.36,34.09,36.0,1390.0,458.0,874.0,468.0,2.5812,200000.0,<1H OCEAN +-118.36,34.09,28.0,1111.0,300.0,526.0,294.0,2.6136,383300.0,<1H OCEAN +-118.37,34.09,38.0,1349.0,344.0,547.0,309.0,3.2159,383300.0,<1H OCEAN +-118.37,34.09,38.0,4408.0,1295.0,1690.0,1229.0,3.0156,300000.0,<1H OCEAN +-118.37,34.09,33.0,3180.0,865.0,1347.0,841.0,4.0651,500001.0,<1H OCEAN +-118.37,34.09,31.0,6348.0,1827.0,2559.0,1755.0,3.2818,225000.0,<1H OCEAN +-118.37,34.09,22.0,4247.0,1253.0,1766.0,1170.0,3.1517,341700.0,<1H OCEAN +-118.37,34.09,24.0,630.0,172.0,257.0,147.0,5.5224,400000.0,<1H OCEAN +-118.37,34.08,28.0,4376.0,1202.0,1847.0,1128.0,2.6713,312500.0,<1H OCEAN +-118.38,34.08,52.0,1479.0,360.0,652.0,346.0,2.945,431400.0,<1H OCEAN +-118.38,34.08,30.0,4524.0,1312.0,1910.0,1243.0,2.8889,335300.0,<1H OCEAN +-118.39,34.08,52.0,1244.0,304.0,444.0,282.0,3.5114,430800.0,<1H OCEAN +-118.38,34.08,48.0,1226.0,288.0,370.0,264.0,3.9375,450000.0,<1H OCEAN +-118.38,34.09,24.0,8264.0,2437.0,3148.0,2274.0,3.5659,281300.0,<1H OCEAN +-118.38,34.09,28.0,4001.0,1352.0,1799.0,1220.0,2.5784,272900.0,<1H OCEAN +-118.39,34.09,27.0,4312.0,1214.0,1634.0,1097.0,3.6207,362500.0,<1H OCEAN +-118.39,34.09,28.0,2347.0,608.0,785.0,548.0,4.4167,425000.0,<1H OCEAN +-118.39,34.08,28.0,833.0,230.0,349.0,210.0,3.067,375000.0,<1H OCEAN +-118.4,34.1,27.0,3979.0,510.0,1351.0,520.0,15.0001,500001.0,<1H OCEAN +-118.4,34.09,45.0,2686.0,283.0,857.0,259.0,15.0001,500001.0,<1H OCEAN +-118.39,34.08,52.0,3759.0,464.0,1407.0,422.0,15.0001,500001.0,<1H OCEAN +-118.4,34.08,52.0,3815.0,439.0,1266.0,413.0,15.0001,500001.0,<1H OCEAN +-118.41,34.09,37.0,2716.0,302.0,809.0,291.0,15.0001,500001.0,<1H OCEAN +-118.42,34.09,40.0,3552.0,392.0,1024.0,370.0,15.0001,500001.0,<1H OCEAN +-118.42,34.08,48.0,2413.0,261.0,770.0,248.0,15.0001,500001.0,<1H OCEAN +-118.41,34.07,52.0,3562.0,394.0,1163.0,361.0,15.0001,500001.0,<1H OCEAN +-118.41,34.07,52.0,1202.0,142.0,408.0,138.0,15.0001,500001.0,<1H OCEAN +-118.38,34.07,48.0,2799.0,596.0,1235.0,561.0,4.4896,500001.0,<1H OCEAN +-118.39,34.07,33.0,5301.0,1281.0,2243.0,1159.0,4.2386,500001.0,<1H OCEAN +-118.39,34.07,45.0,3143.0,553.0,1153.0,564.0,5.7762,500001.0,<1H OCEAN +-118.39,34.08,27.0,6605.0,1710.0,2665.0,1520.0,3.8088,500001.0,<1H OCEAN +-118.4,34.07,22.0,2170.0,593.0,850.0,520.0,2.9107,500001.0,<1H OCEAN +-118.37,34.06,36.0,1661.0,395.0,690.0,365.0,3.3438,500001.0,<1H OCEAN +-118.38,34.06,50.0,1509.0,291.0,690.0,259.0,6.2344,500001.0,<1H OCEAN +-118.39,34.06,52.0,1213.0,194.0,503.0,194.0,8.0095,500001.0,<1H OCEAN +-118.38,34.06,52.0,1311.0,217.0,578.0,205.0,7.6771,500001.0,<1H OCEAN +-118.39,34.06,43.0,1879.0,397.0,873.0,382.0,3.8158,500001.0,<1H OCEAN +-118.39,34.06,37.0,2975.0,705.0,1291.0,654.0,5.3316,500001.0,<1H OCEAN +-118.39,34.06,39.0,3299.0,831.0,1649.0,759.0,3.3295,500001.0,<1H OCEAN +-118.4,34.06,37.0,3781.0,873.0,1725.0,838.0,4.1455,500001.0,<1H OCEAN +-118.4,34.06,47.0,3652.0,967.0,1438.0,887.0,3.6964,500001.0,<1H OCEAN +-118.4,34.06,52.0,1871.0,326.0,646.0,284.0,8.2961,500001.0,<1H OCEAN +-118.4,34.06,52.0,2501.0,362.0,748.0,349.0,6.6343,500001.0,<1H OCEAN +-118.41,34.06,43.0,2665.0,556.0,1015.0,506.0,4.1411,500001.0,<1H OCEAN +-118.41,34.06,43.0,4994.0,1057.0,1830.0,969.0,5.5321,500001.0,<1H OCEAN +-118.41,34.07,47.0,2979.0,626.0,1076.0,571.0,3.9904,500001.0,<1H OCEAN +-118.45,34.06,52.0,204.0,34.0,1154.0,28.0,9.337,500001.0,<1H OCEAN +-118.49,34.05,52.0,2416.0,291.0,810.0,270.0,13.8556,500001.0,<1H OCEAN +-118.49,34.04,50.0,2597.0,340.0,964.0,339.0,13.3036,500001.0,<1H OCEAN +-118.49,34.04,48.0,2381.0,345.0,859.0,306.0,8.0257,500001.0,<1H OCEAN +-118.5,34.04,52.0,3000.0,374.0,1143.0,375.0,15.0001,500001.0,<1H OCEAN +-118.5,34.04,52.0,2233.0,317.0,769.0,277.0,8.3839,500001.0,<1H OCEAN +-118.49,34.04,31.0,4066.0,951.0,1532.0,868.0,4.8125,500001.0,<1H OCEAN +-118.49,34.03,30.0,4061.0,927.0,1487.0,865.0,4.1827,435100.0,<1H OCEAN +-118.51,34.04,40.0,1382.0,167.0,483.0,178.0,11.7045,500001.0,<1H OCEAN +-118.5,34.03,52.0,1506.0,208.0,547.0,186.0,7.8705,500001.0,<1H OCEAN +-118.5,34.03,52.0,1711.0,245.0,671.0,242.0,7.7572,500001.0,<1H OCEAN +-118.5,34.03,44.0,2146.0,394.0,851.0,355.0,6.48,500001.0,<1H OCEAN +-118.51,34.03,37.0,4072.0,905.0,1468.0,923.0,3.8571,500001.0,<1H OCEAN +-118.52,34.02,24.0,7418.0,1755.0,2713.0,1577.0,5.0867,500001.0,<1H OCEAN +-118.49,34.03,31.0,4949.0,1293.0,1985.0,1244.0,4.252,436700.0,<1H OCEAN +-118.5,34.03,32.0,6365.0,1784.0,2767.0,1698.0,3.6451,383300.0,<1H OCEAN +-118.5,34.02,28.0,5109.0,1482.0,2313.0,1451.0,3.3266,483300.0,<1H OCEAN +-118.5,34.02,24.0,2924.0,1013.0,1492.0,943.0,2.775,291700.0,<1H OCEAN +-118.5,34.02,35.0,2914.0,934.0,1334.0,870.0,2.9934,350000.0,<1H OCEAN +-118.52,34.01,25.0,2757.0,738.0,1014.0,633.0,3.1433,500001.0,<1H OCEAN +-118.49,34.03,32.0,3851.0,900.0,1456.0,836.0,4.5208,442100.0,<1H OCEAN +-118.49,34.03,31.0,3155.0,808.0,1208.0,745.0,3.6769,450000.0,<1H OCEAN +-118.49,34.02,27.0,4725.0,1185.0,1945.0,1177.0,4.1365,470800.0,<1H OCEAN +-118.48,34.03,32.0,1793.0,476.0,1143.0,448.0,2.8981,353600.0,<1H OCEAN +-118.49,34.02,28.0,2545.0,752.0,1548.0,679.0,2.9125,475000.0,<1H OCEAN +-118.49,34.02,29.0,2709.0,799.0,1238.0,793.0,3.1563,330000.0,<1H OCEAN +-118.48,34.04,47.0,1956.0,277.0,724.0,277.0,8.9616,500001.0,<1H OCEAN +-118.48,34.04,49.0,3780.0,741.0,1435.0,690.0,4.3158,500001.0,<1H OCEAN +-118.48,34.04,40.0,1395.0,285.0,610.0,262.0,3.9659,500001.0,<1H OCEAN +-118.48,34.04,36.0,2539.0,535.0,979.0,500.0,3.6667,500001.0,<1H OCEAN +-118.47,34.04,32.0,2909.0,748.0,1310.0,706.0,4.516,350000.0,<1H OCEAN +-118.47,34.03,32.0,3024.0,784.0,1323.0,740.0,3.3889,347900.0,<1H OCEAN +-118.48,34.03,39.0,1530.0,401.0,1074.0,375.0,3.5076,381800.0,<1H OCEAN +-118.47,34.03,29.0,3287.0,882.0,1523.0,823.0,3.7381,290600.0,<1H OCEAN +-118.47,34.03,31.0,2642.0,681.0,1303.0,625.0,3.5987,340500.0,<1H OCEAN +-118.48,34.03,19.0,902.0,284.0,414.0,272.0,1.3333,310000.0,<1H OCEAN +-118.48,34.02,22.0,1249.0,483.0,1106.0,481.0,2.5261,375000.0,<1H OCEAN +-118.48,34.02,29.0,1585.0,542.0,1019.0,487.0,2.7072,375000.0,<1H OCEAN +-118.49,34.02,30.0,2075.0,687.0,1026.0,592.0,3.1635,366700.0,<1H OCEAN +-118.46,34.03,27.0,1965.0,631.0,1042.0,596.0,2.75,327300.0,<1H OCEAN +-118.46,34.03,39.0,1244.0,283.0,886.0,284.0,3.125,325000.0,<1H OCEAN +-118.46,34.03,52.0,523.0,,317.0,130.0,2.2794,337500.0,<1H OCEAN +-118.46,34.02,29.0,2329.0,833.0,1953.0,800.0,2.6639,233300.0,<1H OCEAN +-118.47,34.02,38.0,2163.0,651.0,1759.0,584.0,2.3382,297500.0,<1H OCEAN +-118.48,34.02,11.0,72.0,16.0,150.0,20.0,2.625,250000.0,<1H OCEAN +-118.47,34.02,35.0,3057.0,774.0,2223.0,732.0,2.0745,332500.0,<1H OCEAN +-118.48,34.02,30.0,2027.0,609.0,1425.0,562.0,2.2917,330800.0,<1H OCEAN +-118.48,34.02,25.0,1583.0,460.0,983.0,422.0,2.7019,293800.0,<1H OCEAN +-118.49,34.02,28.0,1394.0,582.0,716.0,543.0,1.5132,450000.0,<1H OCEAN +-118.49,34.01,28.0,651.0,252.0,333.0,174.0,1.9722,500001.0,<1H OCEAN +-118.51,34.0,52.0,1241.0,502.0,679.0,459.0,2.3098,500001.0,<1H OCEAN +-118.48,34.01,31.0,2851.0,804.0,1410.0,782.0,4.0893,381500.0,<1H OCEAN +-118.48,34.0,41.0,2584.0,743.0,1058.0,668.0,3.2061,370000.0,<1H OCEAN +-118.48,34.01,30.0,3078.0,954.0,1561.0,901.0,3.4852,425000.0,<1H OCEAN +-118.49,34.0,32.0,3407.0,1071.0,1463.0,986.0,3.0369,500001.0,<1H OCEAN +-118.48,34.01,31.0,1829.0,458.0,719.0,392.0,4.4,353800.0,<1H OCEAN +-118.47,34.0,28.0,1259.0,302.0,668.0,280.0,4.2813,384400.0,<1H OCEAN +-118.47,34.0,42.0,1271.0,301.0,574.0,312.0,3.1304,340500.0,<1H OCEAN +-118.48,34.0,25.0,4149.0,1067.0,1749.0,1000.0,3.9722,450000.0,<1H OCEAN +-118.48,34.0,29.0,1727.0,479.0,741.0,431.0,3.6121,500000.0,<1H OCEAN +-118.48,34.0,52.0,1359.0,395.0,521.0,368.0,2.6736,500001.0,<1H OCEAN +-118.5,33.99,22.0,3484.0,975.0,1268.0,952.0,3.2609,500001.0,<1H OCEAN +-118.47,34.02,41.0,2136.0,549.0,986.0,557.0,2.7254,444400.0,<1H OCEAN +-118.47,34.01,44.0,2175.0,475.0,1019.0,448.0,4.793,470800.0,<1H OCEAN +-118.47,34.01,41.0,2704.0,557.0,1047.0,478.0,4.4211,462900.0,<1H OCEAN +-118.48,34.01,40.0,2198.0,611.0,1023.0,567.0,3.755,398300.0,<1H OCEAN +-118.47,34.01,41.0,752.0,201.0,482.0,207.0,2.5417,418200.0,<1H OCEAN +-118.46,34.01,48.0,1640.0,322.0,664.0,301.0,4.0,500001.0,<1H OCEAN +-118.46,34.01,46.0,1379.0,239.0,688.0,269.0,6.8901,500001.0,<1H OCEAN +-118.47,34.01,44.0,2017.0,343.0,958.0,382.0,6.1014,480100.0,<1H OCEAN +-118.47,34.01,43.0,1160.0,304.0,393.0,250.0,2.9167,461100.0,<1H OCEAN +-118.47,34.01,27.0,1782.0,471.0,837.0,422.0,3.7727,413000.0,<1H OCEAN +-118.45,34.02,41.0,2956.0,700.0,1212.0,645.0,3.4583,421900.0,<1H OCEAN +-118.45,34.02,45.0,1230.0,201.0,565.0,219.0,6.3521,493400.0,<1H OCEAN +-118.46,34.02,45.0,3803.0,970.0,1690.0,871.0,3.0476,456200.0,<1H OCEAN +-118.46,34.02,46.0,2571.0,502.0,1225.0,501.0,6.0436,473000.0,<1H OCEAN +-118.46,34.02,39.0,3599.0,776.0,1569.0,763.0,5.2571,405400.0,<1H OCEAN +-118.37,34.03,39.0,213.0,44.0,138.0,52.0,2.125,196400.0,<1H OCEAN +-118.38,34.03,44.0,1913.0,441.0,1295.0,432.0,3.9537,266400.0,<1H OCEAN +-118.38,34.02,45.0,2098.0,486.0,1343.0,481.0,3.9615,268600.0,<1H OCEAN +-118.39,34.02,38.0,2447.0,636.0,1312.0,574.0,3.5909,279400.0,<1H OCEAN +-118.39,34.02,45.0,1577.0,421.0,1042.0,375.0,3.4375,314500.0,<1H OCEAN +-118.38,34.01,18.0,9528.0,2075.0,3922.0,1920.0,4.7612,304100.0,<1H OCEAN +-118.39,34.01,25.0,1101.0,285.0,543.0,294.0,2.3571,340600.0,<1H OCEAN +-118.39,34.02,38.0,2521.0,647.0,1091.0,597.0,4.1296,322900.0,<1H OCEAN +-118.39,34.01,35.0,4424.0,918.0,2101.0,888.0,3.9688,355100.0,<1H OCEAN +-118.4,34.01,44.0,1494.0,262.0,618.0,266.0,5.4035,356300.0,<1H OCEAN +-118.4,34.02,40.0,593.0,137.0,371.0,132.0,4.6932,332800.0,<1H OCEAN +-118.39,34.0,40.0,1565.0,269.0,826.0,268.0,5.2035,485700.0,<1H OCEAN +-118.39,33.99,32.0,2612.0,418.0,1030.0,402.0,6.603,369200.0,<1H OCEAN +-118.39,33.99,43.0,612.0,135.0,402.0,142.0,5.1322,314900.0,<1H OCEAN +-118.39,34.0,35.0,1465.0,386.0,1104.0,345.0,4.056,339100.0,<1H OCEAN +-118.4,34.0,34.0,1816.0,335.0,872.0,339.0,4.85,329400.0,<1H OCEAN +-118.4,34.0,37.0,1534.0,258.0,751.0,259.0,5.444,336000.0,<1H OCEAN +-118.4,33.99,36.0,1280.0,240.0,704.0,217.0,5.9632,328100.0,<1H OCEAN +-118.4,33.99,36.0,1225.0,213.0,591.0,227.0,5.4663,326700.0,<1H OCEAN +-118.4,34.0,44.0,2122.0,385.0,1012.0,367.0,4.6687,344300.0,<1H OCEAN +-118.4,34.01,48.0,1427.0,253.0,693.0,268.0,5.7405,351600.0,<1H OCEAN +-118.41,34.01,44.0,2010.0,394.0,961.0,365.0,4.5982,333500.0,<1H OCEAN +-118.41,34.0,37.0,1426.0,259.0,689.0,261.0,5.5284,331000.0,<1H OCEAN +-118.41,34.01,26.0,2503.0,449.0,1218.0,426.0,5.3683,500001.0,<1H OCEAN +-118.41,34.01,43.0,2000.0,529.0,1290.0,514.0,4.7031,302500.0,<1H OCEAN +-118.41,34.01,33.0,3306.0,974.0,2475.0,924.0,2.8797,285300.0,<1H OCEAN +-118.42,34.01,42.0,1700.0,438.0,997.0,436.0,2.9213,305000.0,<1H OCEAN +-118.41,34.0,38.0,324.0,70.0,268.0,73.0,2.55,271400.0,<1H OCEAN +-118.42,34.0,45.0,1807.0,355.0,883.0,371.0,5.0357,329800.0,<1H OCEAN +-118.41,34.0,46.0,105.0,20.0,69.0,19.0,3.9643,275000.0,<1H OCEAN +-118.42,34.0,33.0,1139.0,299.0,734.0,257.0,3.2708,325000.0,<1H OCEAN +-118.43,34.0,37.0,1340.0,358.0,1008.0,340.0,3.7614,314300.0,<1H OCEAN +-118.43,33.99,45.0,2092.0,451.0,1190.0,429.0,3.8021,323000.0,<1H OCEAN +-118.44,33.99,44.0,305.0,72.0,156.0,70.0,5.9641,275000.0,<1H OCEAN +-118.44,33.98,21.0,18132.0,5419.0,7431.0,4930.0,5.3359,500001.0,<1H OCEAN +-118.38,33.99,21.0,11308.0,3039.0,5127.0,2839.0,4.6277,228300.0,<1H OCEAN +-118.37,33.99,32.0,4018.0,564.0,1400.0,568.0,8.6718,439100.0,<1H OCEAN +-118.36,33.99,35.0,3702.0,648.0,1449.0,614.0,5.3194,313700.0,<1H OCEAN +-118.37,33.99,36.0,3228.0,543.0,1305.0,520.0,5.1695,397000.0,<1H OCEAN +-118.38,33.98,25.0,7105.0,1012.0,2519.0,1004.0,6.8112,500001.0,<1H OCEAN +-118.35,34.0,30.0,1879.0,226.0,740.0,266.0,6.431,492500.0,<1H OCEAN +-118.35,34.0,46.0,3402.0,503.0,1389.0,504.0,5.3462,270400.0,<1H OCEAN +-118.35,33.99,48.0,2741.0,439.0,1115.0,459.0,5.0514,269100.0,<1H OCEAN +-118.36,33.99,43.0,2657.0,548.0,1145.0,524.0,4.1375,287100.0,<1H OCEAN +-118.36,33.99,45.0,2005.0,368.0,909.0,364.0,4.6406,268900.0,<1H OCEAN +-118.35,33.99,45.0,1764.0,401.0,679.0,334.0,3.2021,222100.0,<1H OCEAN +-118.34,34.0,44.0,3183.0,513.0,1183.0,473.0,5.0407,314900.0,<1H OCEAN +-118.34,34.0,49.0,2863.0,411.0,1108.0,406.0,5.8993,313300.0,<1H OCEAN +-118.33,34.0,52.0,1114.0,169.0,486.0,176.0,4.2917,247600.0,<1H OCEAN +-118.34,34.0,49.0,2465.0,372.0,1018.0,359.0,4.0,296800.0,<1H OCEAN +-118.34,33.99,47.0,1107.0,199.0,437.0,178.0,3.7344,179400.0,<1H OCEAN +-118.34,33.99,48.0,1172.0,205.0,497.0,190.0,3.825,183000.0,<1H OCEAN +-118.35,34.0,40.0,2894.0,395.0,1063.0,409.0,6.939,372000.0,<1H OCEAN +-118.6,34.13,20.0,14291.0,1934.0,5452.0,1875.0,9.1232,472000.0,<1H OCEAN +-118.58,34.12,42.0,718.0,140.0,324.0,131.0,6.4018,500001.0,<1H OCEAN +-118.59,34.11,35.0,2396.0,472.0,1054.0,457.0,6.4504,407000.0,<1H OCEAN +-118.6,34.09,43.0,2228.0,438.0,960.0,395.0,7.6091,438500.0,<1H OCEAN +-118.6,34.08,40.0,866.0,181.0,399.0,176.0,6.91,380000.0,<1H OCEAN +-118.6,34.07,16.0,319.0,59.0,149.0,64.0,4.625,433300.0,<1H OCEAN +-118.69,34.08,23.0,204.0,40.0,117.0,41.0,9.7646,500001.0,NEAR OCEAN +-118.66,34.1,12.0,2560.0,365.0,907.0,366.0,10.076,500001.0,NEAR OCEAN +-118.63,34.11,35.0,3795.0,690.0,1521.0,653.0,5.8735,448100.0,<1H OCEAN +-118.67,34.16,17.0,16544.0,2206.0,6214.0,2118.0,9.1228,500001.0,<1H OCEAN +-118.68,34.08,18.0,102.0,17.0,55.0,21.0,3.9934,500001.0,NEAR OCEAN +-118.68,34.13,9.0,11251.0,1594.0,3029.0,1227.0,6.7273,500001.0,<1H OCEAN +-118.76,34.13,10.0,4355.0,716.0,2030.0,674.0,6.5571,500001.0,NEAR OCEAN +-118.75,34.1,34.0,2255.0,402.0,857.0,317.0,4.5333,377300.0,NEAR OCEAN +-118.72,34.14,7.0,23866.0,4407.0,9873.0,4012.0,5.4032,318500.0,NEAR OCEAN +-118.78,34.16,9.0,30405.0,4093.0,12873.0,3931.0,8.0137,399200.0,NEAR OCEAN +-118.8,34.15,9.0,1143.0,179.0,647.0,180.0,6.8474,356700.0,NEAR OCEAN +-118.75,34.17,16.0,2950.0,387.0,1228.0,379.0,5.3749,346100.0,NEAR OCEAN +-118.84,34.11,12.0,7508.0,1058.0,2484.0,965.0,5.8788,500001.0,NEAR OCEAN +-118.82,34.14,22.0,11668.0,1730.0,4054.0,1671.0,6.9935,385500.0,NEAR OCEAN +-118.79,34.14,7.0,3003.0,504.0,1143.0,466.0,5.8548,500001.0,NEAR OCEAN +-118.74,34.05,19.0,3487.0,686.0,2782.0,584.0,7.9184,500001.0,NEAR OCEAN +-118.86,34.07,16.0,1409.0,244.0,970.0,172.0,8.0144,500001.0,NEAR OCEAN +-118.88,34.02,19.0,15990.0,2611.0,5175.0,2173.0,7.7848,500001.0,NEAR OCEAN +-118.85,34.04,21.0,3837.0,578.0,1509.0,509.0,8.4476,500001.0,NEAR OCEAN +-118.78,34.05,28.0,1343.0,215.0,487.0,199.0,6.83,500001.0,NEAR OCEAN +-118.58,34.06,25.0,4440.0,693.0,1560.0,636.0,8.8666,500001.0,<1H OCEAN +-118.6,34.02,36.0,2043.0,467.0,606.0,326.0,8.4331,500001.0,NEAR OCEAN +-118.62,34.06,25.0,3546.0,584.0,1530.0,601.0,7.4001,500001.0,NEAR OCEAN +-118.66,34.02,23.0,8798.0,1465.0,2750.0,1208.0,8.7364,500001.0,NEAR OCEAN +-117.76,34.71,15.0,2981.0,625.0,1694.0,540.0,2.9541,106700.0,INLAND +-117.84,34.63,5.0,6739.0,1251.0,4614.0,1266.0,4.002,115100.0,INLAND +-117.78,34.58,6.0,10263.0,1864.0,6163.0,1781.0,3.8803,120000.0,INLAND +-117.96,34.71,32.0,3511.0,646.0,1733.0,510.0,3.46,123900.0,INLAND +-118.09,34.74,34.0,1218.0,285.0,797.0,248.0,2.4348,104800.0,INLAND +-118.06,34.71,14.0,2606.0,514.0,1228.0,512.0,2.5764,150000.0,INLAND +-118.09,34.68,4.0,23386.0,4171.0,10493.0,3671.0,4.0211,144000.0,INLAND +-118.11,34.68,6.0,7430.0,1184.0,3489.0,1115.0,5.3267,140100.0,INLAND +-118.12,34.69,17.0,2479.0,390.0,1219.0,363.0,4.6417,125700.0,INLAND +-118.12,34.68,12.0,5319.0,875.0,2439.0,779.0,4.6629,131500.0,INLAND +-118.13,34.69,34.0,2156.0,397.0,1269.0,388.0,2.75,96800.0,INLAND +-118.13,34.68,28.0,718.0,124.0,347.0,121.0,4.025,102600.0,INLAND +-118.1,34.65,33.0,873.0,177.0,425.0,142.0,2.67,187500.0,INLAND +-118.09,34.71,5.0,5807.0,1182.0,2602.0,1007.0,2.4012,159400.0,INLAND +-118.1,34.7,5.0,10356.0,1647.0,4562.0,1427.0,4.9806,141100.0,INLAND +-118.09,34.7,6.0,4558.0,804.0,1543.0,563.0,2.8548,138500.0,INLAND +-118.1,34.71,16.0,3914.0,819.0,1524.0,795.0,2.415,137500.0,INLAND +-118.12,34.71,26.0,4230.0,823.0,2789.0,793.0,2.5179,104000.0,INLAND +-118.12,34.71,46.0,40.0,10.0,14.0,7.0,1.125,225000.0,INLAND +-118.12,34.7,7.0,4915.0,885.0,2833.0,874.0,4.3229,130000.0,INLAND +-118.13,34.7,34.0,1943.0,500.0,1078.0,446.0,1.1296,93800.0,INLAND +-118.13,34.69,32.0,3670.0,765.0,1986.0,673.0,3.682,108800.0,INLAND +-118.12,34.69,27.0,3019.0,501.0,1580.0,523.0,3.7804,113500.0,INLAND +-118.14,34.68,31.0,2666.0,662.0,1337.0,602.0,2.4432,101100.0,INLAND +-118.14,34.69,35.0,2118.0,374.0,1108.0,360.0,3.4327,100300.0,INLAND +-118.14,34.68,33.0,2815.0,485.0,1447.0,489.0,4.2679,119600.0,INLAND +-118.14,34.68,25.0,1703.0,342.0,775.0,309.0,4.5455,126500.0,INLAND +-118.16,34.68,17.0,2994.0,832.0,1571.0,695.0,2.5902,85400.0,INLAND +-118.15,34.69,32.0,1300.0,234.0,712.0,249.0,3.25,107500.0,INLAND +-118.16,34.68,9.0,4303.0,900.0,2240.0,861.0,3.7807,110900.0,INLAND +-118.15,34.67,5.0,12317.0,2953.0,6291.0,2654.0,3.5732,146900.0,INLAND +-118.14,34.65,20.0,1257.0,201.0,551.0,186.0,4.6591,247200.0,INLAND +-118.14,34.72,15.0,2181.0,361.0,1057.0,300.0,4.625,118100.0,INLAND +-118.16,34.71,27.0,6007.0,998.0,2680.0,882.0,4.1719,117200.0,INLAND +-118.15,34.71,36.0,1338.0,250.0,709.0,250.0,3.5625,101400.0,INLAND +-118.14,34.71,33.0,2347.0,461.0,1482.0,374.0,2.8194,93000.0,INLAND +-118.14,34.71,32.0,1164.0,248.0,588.0,270.0,1.1917,86900.0,INLAND +-118.15,34.71,35.0,1503.0,309.0,842.0,300.0,2.5278,97700.0,INLAND +-118.14,34.7,36.0,1205.0,317.0,678.0,290.0,2.0182,98400.0,INLAND +-118.14,34.7,12.0,1984.0,614.0,1071.0,574.0,1.2532,102100.0,INLAND +-118.15,34.7,36.0,2696.0,454.0,1192.0,452.0,3.9615,116300.0,INLAND +-118.16,34.7,33.0,2918.0,494.0,1365.0,478.0,4.8787,127700.0,INLAND +-118.16,34.69,35.0,3114.0,583.0,1974.0,545.0,3.9028,126800.0,INLAND +-118.14,34.69,34.0,1439.0,327.0,708.0,298.0,3.2699,100000.0,INLAND +-118.14,34.69,48.0,1379.0,327.0,696.0,304.0,2.1167,94900.0,INLAND +-118.28,34.76,19.0,3430.0,601.0,1817.0,571.0,4.7875,163600.0,INLAND +-118.19,34.77,16.0,2035.0,370.0,704.0,330.0,2.1979,146400.0,INLAND +-118.2,34.69,5.0,9076.0,1503.0,7694.0,1278.0,4.875,163400.0,INLAND +-118.17,34.69,12.0,4881.0,803.0,2188.0,724.0,4.1667,171900.0,INLAND +-118.17,34.68,13.0,5341.0,773.0,2288.0,724.0,6.6772,185600.0,INLAND +-118.19,34.67,8.0,11275.0,1822.0,5731.0,1692.0,5.0285,167900.0,INLAND +-118.17,34.67,5.0,8352.0,1555.0,3723.0,1389.0,4.5659,140300.0,INLAND +-118.19,34.65,33.0,1781.0,326.0,913.0,314.0,3.9963,126800.0,INLAND +-118.17,34.66,9.0,1561.0,253.0,731.0,233.0,5.7049,173200.0,INLAND +-118.22,34.67,28.0,2357.0,408.0,1162.0,384.0,4.3636,179700.0,INLAND +-118.23,34.66,25.0,2627.0,387.0,1059.0,338.0,3.6382,138200.0,INLAND +-118.22,34.66,17.0,3810.0,662.0,1867.0,586.0,4.9,152400.0,INLAND +-118.21,34.65,17.0,4001.0,814.0,2313.0,756.0,3.0441,140100.0,INLAND +-118.23,34.65,17.0,1827.0,348.0,766.0,335.0,3.5673,136300.0,INLAND +-118.27,34.68,19.0,552.0,129.0,314.0,106.0,3.2125,185400.0,INLAND +-118.29,34.65,18.0,6893.0,1372.0,2837.0,1221.0,3.3173,218400.0,INLAND +-118.32,34.62,31.0,1398.0,273.0,884.0,299.0,4.8409,264900.0,INLAND +-118.38,34.58,18.0,1859.0,375.0,913.0,372.0,4.3456,148900.0,INLAND +-118.61,34.73,25.0,3080.0,587.0,1558.0,510.0,5.0839,156700.0,INLAND +-118.4,34.7,10.0,4122.0,814.0,2164.0,710.0,4.2941,151600.0,INLAND +-117.92,34.63,34.0,81.0,26.0,53.0,14.0,1.4091,137500.0,INLAND +-117.92,34.59,7.0,681.0,125.0,485.0,104.0,2.7396,125600.0,INLAND +-117.93,34.57,5.0,5613.0,1060.0,3569.0,999.0,3.1946,132700.0,INLAND +-117.9,34.53,8.0,3484.0,647.0,2169.0,619.0,3.9766,135800.0,INLAND +-117.96,34.53,10.0,2907.0,559.0,1681.0,531.0,3.8594,141000.0,INLAND +-117.98,34.53,13.0,2815.0,535.0,1492.0,491.0,4.0945,135700.0,INLAND +-118.09,34.63,31.0,1537.0,416.0,1239.0,397.0,1.9722,99200.0,INLAND +-118.02,34.62,38.0,248.0,55.0,261.0,53.0,2.1413,96900.0,INLAND +-118.18,34.63,19.0,3562.0,606.0,1677.0,578.0,4.1573,228100.0,INLAND +-118.17,34.61,7.0,2465.0,336.0,978.0,332.0,7.1381,292200.0,INLAND +-118.16,34.6,2.0,11008.0,1549.0,4098.0,1367.0,6.4865,204400.0,INLAND +-118.12,34.6,33.0,2189.0,497.0,1459.0,443.0,2.3958,94500.0,INLAND +-118.15,34.59,33.0,2111.0,429.0,1067.0,397.0,3.7344,111400.0,INLAND +-118.16,34.6,5.0,7294.0,1139.0,3123.0,930.0,4.9904,154100.0,INLAND +-118.21,34.56,12.0,2472.0,408.0,1048.0,380.0,4.7097,262100.0,INLAND +-118.22,34.63,4.0,14348.0,2145.0,5839.0,1806.0,5.3799,222400.0,INLAND +-118.21,34.64,16.0,2573.0,427.0,1273.0,426.0,5.9508,181100.0,INLAND +-118.12,34.58,13.0,2614.0,650.0,1949.0,537.0,2.0547,102600.0,INLAND +-118.13,34.58,29.0,2370.0,475.0,1746.0,483.0,3.7464,113500.0,INLAND +-118.14,34.57,6.0,9882.0,1892.0,4892.0,1621.0,3.7636,167600.0,INLAND +-118.12,34.56,5.0,6446.0,1154.0,3427.0,1104.0,3.9936,148500.0,INLAND +-118.1,34.58,32.0,1489.0,306.0,774.0,267.0,3.275,103500.0,INLAND +-118.1,34.58,29.0,2843.0,603.0,1517.0,573.0,2.6658,106900.0,INLAND +-118.1,34.57,7.0,20377.0,4335.0,11973.0,3933.0,3.3086,138100.0,INLAND +-118.09,34.57,4.0,9761.0,1683.0,4970.0,1535.0,4.5266,142900.0,INLAND +-118.08,34.58,5.0,1113.0,186.0,631.0,168.0,4.1719,146600.0,INLAND +-118.07,34.58,34.0,3416.0,601.0,1929.0,567.0,4.0147,107400.0,INLAND +-118.06,34.58,36.0,1493.0,258.0,899.0,260.0,3.86,109300.0,INLAND +-118.08,34.58,12.0,3851.0,857.0,2169.0,811.0,3.0101,116300.0,INLAND +-118.07,34.56,5.0,10264.0,1821.0,5871.0,1790.0,4.2329,145500.0,INLAND +-118.08,34.56,14.0,5144.0,887.0,2846.0,824.0,4.5615,137200.0,INLAND +-118.03,34.58,4.0,9849.0,1780.0,4546.0,1598.0,4.0729,154300.0,INLAND +-118.02,34.57,4.0,10655.0,1706.0,5391.0,1529.0,5.083,151300.0,INLAND +-118.01,34.55,2.0,2701.0,530.0,1368.0,430.0,4.071,137400.0,INLAND +-118.08,34.55,5.0,16181.0,2971.0,8152.0,2651.0,4.5237,141800.0,INLAND +-118.07,34.51,14.0,2798.0,459.0,1236.0,404.0,4.8667,239900.0,INLAND +-118.37,34.43,11.0,17339.0,2866.0,8721.0,2803.0,5.9507,225200.0,INLAND +-118.4,34.41,22.0,4443.0,560.0,1573.0,496.0,10.0285,500001.0,<1H OCEAN +-118.35,34.52,14.0,3490.0,592.0,1710.0,580.0,5.9171,333300.0,INLAND +-118.22,34.52,7.0,4524.0,735.0,2298.0,717.0,6.5538,311600.0,INLAND +-118.26,34.5,6.0,5813.0,908.0,2275.0,790.0,4.7778,340400.0,INLAND +-118.27,34.46,10.0,2184.0,405.0,1119.0,370.0,4.7437,294000.0,INLAND +-118.13,34.44,10.0,2726.0,465.0,1773.0,459.0,4.8295,319100.0,INLAND +-117.89,34.49,12.0,3449.0,598.0,1502.0,540.0,3.7043,150800.0,INLAND +-117.96,34.48,32.0,1896.0,342.0,806.0,299.0,4.5769,159400.0,INLAND +-117.79,34.45,18.0,2986.0,597.0,1355.0,472.0,3.2765,165000.0,INLAND +-118.46,34.4,12.0,25957.0,4798.0,10475.0,4490.0,4.542,195300.0,<1H OCEAN +-118.5,34.45,25.0,1290.0,190.0,689.0,216.0,6.0097,220200.0,<1H OCEAN +-118.5,34.52,3.0,6577.0,1056.0,3032.0,1004.0,5.9263,251800.0,INLAND +-118.48,34.47,36.0,84.0,12.0,29.0,17.0,3.375,187500.0,<1H OCEAN +-118.5,34.46,17.0,10267.0,,4956.0,1483.0,5.5061,239400.0,<1H OCEAN +-118.52,34.44,26.0,934.0,148.0,519.0,162.0,5.3209,185000.0,<1H OCEAN +-118.53,34.44,19.0,3013.0,507.0,1356.0,484.0,5.1163,233200.0,<1H OCEAN +-118.53,34.45,26.0,828.0,149.0,508.0,158.0,5.2374,185500.0,<1H OCEAN +-118.53,34.44,19.0,1285.0,195.0,650.0,193.0,6.0398,217800.0,<1H OCEAN +-118.52,34.46,5.0,15341.0,2527.0,7270.0,2320.0,6.1281,236200.0,<1H OCEAN +-118.53,34.45,10.0,5509.0,969.0,3002.0,959.0,5.5981,220100.0,<1H OCEAN +-118.51,34.43,15.0,8510.0,1258.0,3733.0,1233.0,6.1082,253700.0,<1H OCEAN +-118.46,34.42,25.0,2988.0,525.0,1884.0,513.0,4.7007,169500.0,<1H OCEAN +-118.44,34.5,5.0,1514.0,220.0,1355.0,215.0,8.1344,359000.0,INLAND +-118.45,34.44,16.0,13406.0,2574.0,7030.0,2440.0,4.6861,187900.0,<1H OCEAN +-118.49,34.43,15.0,8244.0,1409.0,4453.0,1357.0,5.4829,199600.0,<1H OCEAN +-118.49,34.42,23.0,4166.0,756.0,2082.0,743.0,4.4107,213400.0,<1H OCEAN +-118.48,34.42,21.0,1375.0,259.0,728.0,258.0,5.0166,229000.0,<1H OCEAN +-118.47,34.42,17.0,913.0,228.0,530.0,201.0,3.038,238500.0,<1H OCEAN +-118.47,34.42,25.0,3223.0,524.0,1763.0,508.0,5.2887,183000.0,<1H OCEAN +-118.43,34.42,13.0,3600.0,580.0,1799.0,576.0,6.2971,218300.0,<1H OCEAN +-118.43,34.43,5.0,21113.0,4386.0,9842.0,3886.0,4.2037,194600.0,<1H OCEAN +-118.55,34.44,14.0,15348.0,2366.0,7087.0,2169.0,6.3277,237700.0,INLAND +-118.56,34.42,2.0,966.0,270.0,233.0,169.0,1.9667,450000.0,<1H OCEAN +-118.61,34.59,5.0,4028.0,896.0,2062.0,826.0,4.0579,167100.0,INLAND +-118.7,34.53,5.0,14275.0,2474.0,7158.0,2311.0,5.4284,236300.0,INLAND +-118.66,34.43,9.0,2356.0,469.0,1556.0,386.0,3.775,155000.0,INLAND +-118.59,34.47,5.0,538.0,98.0,8733.0,105.0,4.2391,154600.0,INLAND +-118.61,34.31,4.0,1949.0,458.0,868.0,398.0,5.0151,285200.0,<1H OCEAN +-118.52,34.39,21.0,5477.0,1275.0,3384.0,1222.0,3.6625,228100.0,<1H OCEAN +-118.53,34.38,18.0,2288.0,607.0,2305.0,597.0,3.227,136100.0,<1H OCEAN +-118.54,34.38,18.0,2096.0,309.0,1044.0,328.0,6.8299,262100.0,<1H OCEAN +-118.52,34.4,5.0,7748.0,1557.0,4768.0,1393.0,5.305,311200.0,<1H OCEAN +-118.53,34.37,8.0,3839.0,852.0,1342.0,593.0,3.9118,333700.0,<1H OCEAN +-118.54,34.37,27.0,2051.0,301.0,917.0,287.0,7.6059,323700.0,<1H OCEAN +-118.52,34.36,5.0,4222.0,712.0,2024.0,646.0,5.8703,500001.0,<1H OCEAN +-118.55,34.37,21.0,7010.0,1063.0,3331.0,1038.0,6.776,278100.0,<1H OCEAN +-118.56,34.37,23.0,3927.0,728.0,1984.0,707.0,4.8536,202600.0,<1H OCEAN +-118.55,34.41,8.0,21086.0,3945.0,9936.0,3790.0,5.8602,265100.0,<1H OCEAN +-118.55,34.38,24.0,6246.0,1028.0,2803.0,999.0,6.3002,282900.0,<1H OCEAN +-118.56,34.41,4.0,17313.0,3224.0,6902.0,2707.0,5.6798,320900.0,<1H OCEAN +-118.55,34.39,16.0,8726.0,1317.0,3789.0,1279.0,6.8419,323300.0,<1H OCEAN +-118.61,34.38,2.0,5989.0,883.0,1787.0,613.0,6.6916,329500.0,INLAND +-117.86,34.24,52.0,803.0,267.0,628.0,225.0,4.1932,14999.0,INLAND +-118.12,34.23,52.0,433.0,69.0,147.0,53.0,3.9583,162500.0,INLAND +-118.35,34.32,52.0,102.0,29.0,54.0,32.0,1.9875,191700.0,<1H OCEAN +-118.38,34.3,39.0,1622.0,355.0,903.0,314.0,4.1125,183000.0,<1H OCEAN +-118.29,34.36,34.0,503.0,99.0,275.0,68.0,4.5491,375000.0,INLAND +-119.53,37.34,26.0,4047.0,702.0,571.0,199.0,2.3482,179500.0,INLAND +-119.51,37.32,14.0,362.0,78.0,88.0,39.0,3.5893,214300.0,INLAND +-119.56,37.29,14.0,2391.0,451.0,798.0,308.0,3.0924,114600.0,INLAND +-119.45,37.21,17.0,3538.0,726.0,1603.0,629.0,2.9449,95600.0,INLAND +-119.65,37.09,17.0,1280.0,254.0,707.0,267.0,3.55,106300.0,INLAND +-119.59,37.39,19.0,3273.0,611.0,1164.0,481.0,3.5446,106500.0,INLAND +-119.66,37.39,10.0,2106.0,410.0,1003.0,397.0,2.7813,124100.0,INLAND +-119.68,37.35,13.0,2307.0,386.0,925.0,347.0,3.1326,119800.0,INLAND +-119.72,37.38,16.0,2131.0,424.0,989.0,369.0,2.6071,103700.0,INLAND +-119.65,37.32,11.0,2161.0,448.0,820.0,405.0,2.3565,122300.0,INLAND +-119.64,37.31,15.0,2654.0,530.0,1267.0,489.0,2.8393,104400.0,INLAND +-119.6,37.29,13.0,1722.0,325.0,712.0,269.0,2.625,137500.0,INLAND +-119.62,37.33,7.0,3389.0,621.0,1268.0,474.0,3.0224,147800.0,INLAND +-119.91,37.23,17.0,2171.0,389.0,1042.0,375.0,3.625,94400.0,INLAND +-119.85,37.1,8.0,828.0,168.0,413.0,146.0,3.375,80700.0,INLAND +-119.68,37.19,10.0,3113.0,589.0,1508.0,512.0,2.8167,96100.0,INLAND +-119.77,37.19,8.0,5212.0,872.0,2383.0,857.0,4.1099,113600.0,INLAND +-119.67,37.27,13.0,5087.0,981.0,2284.0,913.0,2.7413,123100.0,INLAND +-120.31,37.11,38.0,1696.0,301.0,985.0,278.0,2.4054,112500.0,INLAND +-120.35,37.04,37.0,1495.0,292.0,858.0,275.0,2.9306,46300.0,INLAND +-120.25,37.04,21.0,1724.0,317.0,1006.0,290.0,3.2868,91700.0,INLAND +-120.16,37.12,29.0,1995.0,392.0,1261.0,354.0,1.9073,79200.0,INLAND +-120.27,37.11,18.0,1277.0,234.0,674.0,238.0,2.6694,75900.0,INLAND +-120.25,37.11,20.0,2062.0,466.0,1285.0,456.0,1.5319,50500.0,INLAND +-120.26,37.11,33.0,1097.0,254.0,627.0,253.0,1.2794,50700.0,INLAND +-120.27,37.12,42.0,1142.0,236.0,597.0,210.0,1.7279,52300.0,INLAND +-120.27,37.12,36.0,1219.0,258.0,639.0,245.0,1.9464,57000.0,INLAND +-120.27,37.12,17.0,3328.0,628.0,1580.0,619.0,2.9861,81500.0,INLAND +-120.26,37.13,33.0,1239.0,250.0,648.0,227.0,2.0278,58800.0,INLAND +-120.43,36.99,16.0,1027.0,199.0,673.0,193.0,2.9688,63800.0,INLAND +-120.29,36.88,34.0,1391.0,297.0,943.0,281.0,2.4219,83900.0,INLAND +-120.06,36.95,24.0,646.0,134.0,454.0,149.0,2.125,61900.0,INLAND +-120.06,36.94,19.0,901.0,183.0,700.0,190.0,2.2375,64300.0,INLAND +-120.04,36.93,11.0,3606.0,699.0,2074.0,644.0,2.6941,63300.0,INLAND +-120.05,36.95,18.0,2287.0,534.0,1339.0,505.0,2.2527,65200.0,INLAND +-120.21,36.98,21.0,1667.0,303.0,861.0,276.0,2.6012,92200.0,INLAND +-120.16,36.96,18.0,508.0,104.0,393.0,114.0,3.0,156300.0,INLAND +-120.11,36.96,17.0,3344.0,570.0,1624.0,536.0,3.8952,95300.0,INLAND +-120.08,37.06,18.0,402.0,76.0,213.0,71.0,1.9063,95800.0,INLAND +-120.09,37.0,11.0,3761.0,675.0,2374.0,673.0,3.4598,74600.0,INLAND +-120.06,37.02,13.0,6301.0,1080.0,3840.0,1033.0,3.5258,84900.0,INLAND +-119.94,37.04,14.0,1636.0,253.0,766.0,225.0,3.125,88500.0,INLAND +-120.09,37.02,9.0,1608.0,297.0,1057.0,295.0,3.7143,81600.0,INLAND +-119.95,36.96,18.0,1996.0,379.0,1327.0,356.0,2.6087,96000.0,INLAND +-120.02,36.95,25.0,2115.0,482.0,1976.0,474.0,1.8431,53900.0,INLAND +-119.9,36.94,11.0,2513.0,408.0,1360.0,415.0,4.277,98500.0,INLAND +-119.85,36.97,13.0,2872.0,477.0,1607.0,481.0,4.475,102400.0,INLAND +-119.88,36.93,12.0,3174.0,520.0,1590.0,488.0,4.5347,101200.0,INLAND +-119.87,36.93,13.0,1429.0,209.0,702.0,205.0,4.3625,111800.0,INLAND +-120.07,36.98,12.0,1790.0,379.0,1399.0,397.0,2.5388,59600.0,INLAND +-120.06,36.98,12.0,2710.0,575.0,1724.0,516.0,1.4712,60400.0,INLAND +-120.05,36.98,16.0,3705.0,739.0,2463.0,697.0,2.5288,61800.0,INLAND +-120.05,36.97,20.0,2029.0,427.0,983.0,401.0,1.8444,47100.0,INLAND +-120.06,36.97,38.0,1542.0,364.0,1220.0,334.0,1.625,52800.0,INLAND +-120.07,36.97,28.0,1563.0,403.0,1564.0,408.0,1.5662,48000.0,INLAND +-120.07,36.96,34.0,1457.0,239.0,557.0,226.0,3.6181,96500.0,INLAND +-120.08,36.97,13.0,3356.0,589.0,1458.0,601.0,3.8257,94200.0,INLAND +-120.1,36.96,20.0,2100.0,317.0,910.0,274.0,4.8187,90900.0,INLAND +-120.09,36.95,16.0,3222.0,511.0,1425.0,503.0,4.1544,119400.0,INLAND +-120.08,36.96,36.0,2074.0,349.0,954.0,363.0,3.1136,73800.0,INLAND +-120.08,36.95,41.0,1164.0,211.0,476.0,171.0,2.4196,70700.0,INLAND +-120.07,36.97,27.0,968.0,240.0,587.0,231.0,1.6071,55000.0,INLAND +-120.06,36.97,35.0,1859.0,428.0,1208.0,399.0,1.4044,61700.0,INLAND +-120.05,36.96,37.0,1000.0,261.0,1092.0,233.0,1.4267,52300.0,INLAND +-120.05,36.95,31.0,696.0,254.0,913.0,248.0,1.4,52500.0,INLAND +-120.06,36.96,44.0,1288.0,295.0,723.0,287.0,1.6534,61400.0,INLAND +-120.07,36.96,42.0,963.0,216.0,471.0,211.0,2.2898,66100.0,INLAND +-120.07,36.96,32.0,1268.0,283.0,549.0,273.0,1.4511,65200.0,INLAND +-120.04,36.97,20.0,2129.0,526.0,1845.0,522.0,1.8973,51600.0,INLAND +-120.04,36.96,23.0,2126.0,506.0,2091.0,491.0,1.3713,51800.0,INLAND +-120.04,36.95,36.0,1528.0,347.0,1334.0,304.0,1.3594,48300.0,INLAND +-119.98,36.9,26.0,1284.0,239.0,820.0,254.0,2.5833,62300.0,INLAND +-119.81,36.92,14.0,4795.0,710.0,2047.0,640.0,4.665,121300.0,INLAND +-119.98,36.86,31.0,2366.0,482.0,1933.0,433.0,3.0234,65000.0,INLAND +-120.13,36.87,32.0,2089.0,468.0,1765.0,427.0,2.234,61700.0,INLAND +-122.49,38.1,43.0,1226.0,244.0,491.0,205.0,4.9286,307000.0,NEAR BAY +-122.54,38.14,16.0,4431.0,603.0,1659.0,630.0,7.5412,392100.0,NEAR BAY +-122.55,38.1,26.0,5188.0,892.0,2341.0,906.0,5.0029,255600.0,NEAR BAY +-122.62,38.15,14.0,2259.0,341.0,1127.0,346.0,6.4092,334900.0,<1H OCEAN +-122.59,38.13,20.0,1589.0,231.0,601.0,224.0,5.3755,290900.0,<1H OCEAN +-122.58,38.15,9.0,1302.0,177.0,682.0,190.0,7.5,423200.0,<1H OCEAN +-122.57,38.11,24.0,2863.0,734.0,1583.0,682.0,3.1981,215300.0,NEAR BAY +-122.57,38.11,32.0,3521.0,748.0,1706.0,723.0,3.4705,228600.0,NEAR BAY +-122.59,38.12,25.0,7784.0,1145.0,3445.0,1166.0,6.0132,287900.0,<1H OCEAN +-122.58,38.12,13.0,5027.0,871.0,1912.0,770.0,4.9286,309500.0,NEAR BAY +-122.6,38.11,19.0,1752.0,328.0,873.0,336.0,3.8068,201600.0,<1H OCEAN +-122.6,38.11,23.0,8642.0,1294.0,3594.0,1253.0,5.3962,301500.0,<1H OCEAN +-122.65,38.11,21.0,3891.0,616.0,1968.0,632.0,5.5524,279200.0,<1H OCEAN +-122.61,38.09,18.0,6205.0,821.0,2311.0,756.0,6.9081,368700.0,<1H OCEAN +-122.58,38.1,22.0,11872.0,2300.0,5600.0,2200.0,4.6463,276300.0,NEAR BAY +-122.58,38.08,27.0,10839.0,1637.0,4406.0,1623.0,5.615,285600.0,NEAR BAY +-122.55,38.07,5.0,1495.0,235.0,555.0,201.0,6.7232,345000.0,NEAR BAY +-122.56,38.09,17.0,9614.0,2123.0,4684.0,2060.0,4.1705,209800.0,NEAR BAY +-122.56,38.06,19.0,15622.0,2721.0,6109.0,2615.0,5.0965,295300.0,NEAR BAY +-122.55,38.07,38.0,3392.0,709.0,1894.0,713.0,3.0573,350800.0,NEAR BAY +-122.41,38.07,20.0,4536.0,708.0,1812.0,701.0,6.0433,435900.0,NEAR BAY +-122.51,38.06,24.0,9493.0,1935.0,5162.0,1880.0,3.0742,118800.0,NEAR BAY +-122.53,38.01,16.0,1495.0,292.0,472.0,284.0,3.4432,67500.0,NEAR BAY +-122.44,38.03,13.0,4284.0,1042.0,2146.0,937.0,4.1289,179200.0,NEAR BAY +-122.45,38.01,36.0,4501.0,832.0,2196.0,800.0,4.3182,252700.0,NEAR BAY +-122.53,38.01,27.0,3121.0,531.0,1318.0,489.0,5.4781,310900.0,NEAR BAY +-122.51,38.0,17.0,2449.0,536.0,1157.0,543.0,3.9519,274200.0,NEAR BAY +-122.49,38.0,26.0,48.0,8.0,19.0,8.0,7.7197,400000.0,NEAR BAY +-122.55,38.03,29.0,7174.0,1169.0,3063.0,1172.0,6.0902,293200.0,NEAR BAY +-122.57,38.03,24.0,2330.0,322.0,911.0,320.0,6.5253,387700.0,NEAR BAY +-122.56,38.03,34.0,1887.0,290.0,815.0,283.0,6.5249,324800.0,NEAR BAY +-122.59,38.04,25.0,3412.0,455.0,1238.0,406.0,8.3646,397300.0,NEAR BAY +-122.57,38.02,33.0,9531.0,1487.0,3798.0,1409.0,5.6512,314000.0,NEAR BAY +-122.56,38.01,21.0,2144.0,400.0,840.0,398.0,4.6,239500.0,NEAR BAY +-122.55,38.02,27.0,4985.0,711.0,1928.0,742.0,6.4978,361500.0,NEAR BAY +-122.55,38.01,27.0,3966.0,577.0,1657.0,611.0,6.3314,342200.0,NEAR BAY +-122.54,38.0,28.0,3416.0,826.0,1694.0,800.0,3.18,277000.0,NEAR BAY +-122.55,38.0,18.0,3119.0,803.0,1395.0,722.0,3.9265,301100.0,NEAR BAY +-122.54,37.99,32.0,2236.0,348.0,818.0,330.0,7.3521,444000.0,NEAR BAY +-122.52,37.98,31.0,6555.0,1571.0,2962.0,1464.0,2.8903,324200.0,NEAR BAY +-122.54,37.98,52.0,1758.0,316.0,607.0,264.0,5.5083,371900.0,NEAR BAY +-122.55,37.99,34.0,3306.0,555.0,1398.0,585.0,4.8993,319900.0,NEAR BAY +-122.53,37.98,32.0,2390.0,336.0,810.0,354.0,8.5759,500001.0,NEAR BAY +-122.55,37.98,31.0,3807.0,828.0,1581.0,795.0,3.293,337500.0,NEAR BAY +-122.51,37.99,32.0,4138.0,632.0,1541.0,626.0,5.5791,433300.0,NEAR BAY +-122.51,37.98,37.0,4801.0,699.0,1830.0,679.0,6.0762,487800.0,NEAR BAY +-122.51,37.97,37.0,4296.0,1089.0,2100.0,1025.0,3.2462,329400.0,NEAR BAY +-122.47,37.99,22.0,7274.0,1002.0,2468.0,957.0,7.494,439200.0,NEAR BAY +-122.46,37.98,10.0,1325.0,189.0,427.0,162.0,12.0933,500001.0,NEAR BAY +-122.49,37.99,27.0,5470.0,755.0,1916.0,764.0,6.994,420800.0,NEAR BAY +-122.49,37.98,34.0,1256.0,178.0,460.0,174.0,6.4271,451700.0,NEAR BAY +-122.53,37.97,52.0,205.0,119.0,228.0,132.0,1.9063,200000.0,NEAR BAY +-122.53,37.97,52.0,1560.0,451.0,700.0,419.0,2.5125,270800.0,NEAR BAY +-122.53,37.97,44.0,3595.0,953.0,1831.0,910.0,2.6036,287500.0,NEAR BAY +-122.54,37.97,39.0,4193.0,762.0,1833.0,737.0,5.6263,352100.0,NEAR BAY +-122.52,37.97,33.0,563.0,194.0,265.0,169.0,2.75,231300.0,NEAR BAY +-122.51,37.96,39.0,3302.0,684.0,1574.0,653.0,3.6863,263800.0,NEAR BAY +-122.52,37.96,35.0,2012.0,346.0,818.0,352.0,5.2818,331000.0,NEAR BAY +-122.53,37.97,37.0,1340.0,322.0,621.0,314.0,3.5588,268800.0,NEAR BAY +-122.52,37.95,37.0,350.0,57.0,179.0,69.0,6.2862,500001.0,NEAR BAY +-122.53,37.96,35.0,908.0,194.0,413.0,197.0,3.9917,290800.0,NEAR BAY +-122.47,37.95,16.0,3769.0,839.0,1986.0,815.0,3.9712,187500.0,NEAR BAY +-122.5,37.96,16.0,100.0,20.0,45.0,25.0,6.1359,212500.0,NEAR BAY +-122.5,37.97,25.0,6526.0,1902.0,5917.0,1812.0,2.7273,187500.0,NEAR BAY +-122.64,38.01,36.0,1336.0,258.0,678.0,249.0,5.5789,292000.0,NEAR OCEAN +-122.64,38.01,36.0,1199.0,232.0,551.0,229.0,3.7321,266700.0,NEAR OCEAN +-122.68,38.01,41.0,1865.0,392.0,825.0,369.0,4.2011,255400.0,NEAR OCEAN +-122.7,38.03,42.0,1410.0,308.0,624.0,292.0,4.1379,309100.0,NEAR OCEAN +-122.65,38.01,40.0,1428.0,280.0,708.0,255.0,5.0766,305400.0,NEAR OCEAN +-122.59,37.97,46.0,4036.0,856.0,1872.0,833.0,4.5625,275200.0,NEAR OCEAN +-122.61,37.99,40.0,7737.0,1488.0,3108.0,1349.0,4.4375,289600.0,NEAR OCEAN +-122.62,37.97,52.0,370.0,62.0,150.0,56.0,7.7006,316700.0,NEAR OCEAN +-122.59,37.99,36.0,4869.0,871.0,1899.0,827.0,4.1659,302000.0,NEAR BAY +-122.6,38.0,21.0,2198.0,462.0,1100.0,449.0,4.1098,246600.0,<1H OCEAN +-122.59,38.01,35.0,8814.0,1307.0,3450.0,1258.0,6.1724,414300.0,NEAR BAY +-122.57,37.99,45.0,2404.0,425.0,926.0,400.0,4.9674,320100.0,NEAR BAY +-122.57,37.99,38.0,5587.0,996.0,2466.0,1027.0,4.1711,336900.0,NEAR BAY +-122.57,37.98,49.0,2860.0,552.0,1178.0,522.0,4.625,355000.0,NEAR BAY +-122.58,37.98,52.0,3675.0,649.0,1553.0,639.0,4.6905,316300.0,NEAR BAY +-122.58,37.98,52.0,1180.0,216.0,467.0,197.0,4.9615,292200.0,NEAR BAY +-122.56,37.98,36.0,2649.0,542.0,1111.0,557.0,4.8056,345700.0,NEAR BAY +-122.56,37.97,52.0,1833.0,324.0,735.0,306.0,4.6944,398900.0,NEAR BAY +-122.57,37.97,47.0,5416.0,1115.0,2177.0,1027.0,3.5055,382100.0,NEAR BAY +-122.55,37.97,52.0,2232.0,291.0,731.0,253.0,7.1155,500001.0,NEAR BAY +-122.57,37.96,52.0,3458.0,468.0,1449.0,471.0,9.1834,500001.0,NEAR BAY +-122.56,37.95,34.0,2677.0,411.0,933.0,410.0,6.1444,500001.0,NEAR OCEAN +-122.56,37.94,36.0,2023.0,242.0,653.0,241.0,10.6272,500001.0,NEAR BAY +-122.64,37.96,29.0,377.0,58.0,151.0,67.0,9.5551,500001.0,NEAR OCEAN +-122.54,37.96,44.0,1552.0,204.0,596.0,208.0,10.129,500001.0,NEAR BAY +-122.54,37.96,33.0,2534.0,495.0,996.0,449.0,4.3083,500001.0,NEAR BAY +-122.54,37.95,38.0,2310.0,400.0,971.0,386.0,5.697,435700.0,NEAR BAY +-122.52,37.95,33.0,4448.0,631.0,1675.0,628.0,7.8904,468800.0,NEAR BAY +-122.53,37.95,22.0,7446.0,1979.0,2980.0,1888.0,3.5838,271300.0,NEAR BAY +-122.53,37.96,36.0,4385.0,620.0,1549.0,626.0,8.3935,470500.0,NEAR BAY +-122.53,37.93,42.0,2171.0,362.0,887.0,347.0,6.6125,393200.0,NEAR BAY +-122.54,37.93,43.0,2998.0,470.0,970.0,430.0,5.5385,431800.0,NEAR BAY +-122.54,37.94,39.0,3670.0,775.0,1519.0,788.0,4.4081,435200.0,NEAR BAY +-122.54,37.94,26.0,3990.0,804.0,1550.0,792.0,5.1834,405500.0,NEAR BAY +-122.52,37.94,18.0,1804.0,284.0,600.0,241.0,5.9582,500001.0,NEAR BAY +-122.53,37.94,18.0,878.0,255.0,384.0,247.0,4.7344,200000.0,NEAR BAY +-122.52,37.93,34.0,2782.0,502.0,1219.0,507.0,5.0779,333900.0,NEAR BAY +-122.51,37.92,32.0,2622.0,541.0,1022.0,464.0,3.7647,375000.0,NEAR BAY +-122.52,37.92,24.0,421.0,64.0,163.0,75.0,14.5833,500001.0,NEAR BAY +-122.53,37.92,42.0,1741.0,301.0,723.0,306.0,5.5379,410500.0,NEAR BAY +-122.53,37.93,37.0,1722.0,352.0,648.0,337.0,4.125,310300.0,NEAR BAY +-122.53,37.92,45.0,1530.0,324.0,608.0,328.0,3.875,390800.0,NEAR BAY +-122.52,37.92,47.0,793.0,163.0,334.0,151.0,5.8509,317800.0,NEAR BAY +-122.5,37.92,32.0,2639.0,415.0,1013.0,408.0,6.1632,349200.0,NEAR BAY +-122.5,37.92,30.0,2270.0,359.0,974.0,351.0,5.5926,300900.0,NEAR BAY +-122.49,37.92,26.0,2170.0,347.0,849.0,318.0,6.2953,386200.0,NEAR BAY +-122.51,37.91,2.0,647.0,136.0,203.0,118.0,6.641,310000.0,NEAR BAY +-122.48,37.93,16.0,2947.0,802.0,1385.0,743.0,3.6731,318000.0,NEAR BAY +-122.46,37.88,35.0,2492.0,409.0,812.0,373.0,8.8386,500001.0,NEAR BAY +-122.47,37.87,36.0,4471.0,618.0,1315.0,582.0,11.5706,500001.0,NEAR BAY +-122.45,37.91,27.0,2682.0,382.0,935.0,369.0,10.0791,500001.0,NEAR BAY +-122.5,37.91,31.0,7001.0,1282.0,2755.0,1267.0,5.4851,441100.0,NEAR BAY +-122.49,37.89,23.0,1650.0,403.0,541.0,336.0,6.0238,500001.0,NEAR BAY +-122.47,37.89,23.0,10774.0,1736.0,3895.0,1683.0,7.2905,500001.0,NEAR BAY +-122.45,37.9,30.0,3763.0,717.0,1292.0,632.0,8.4888,500001.0,NEAR BAY +-122.5,37.88,28.0,5448.0,1089.0,2100.0,1023.0,4.7475,474600.0,NEAR BAY +-122.51,37.89,27.0,2674.0,565.0,1233.0,547.0,3.4485,458300.0,NEAR BAY +-122.53,37.91,37.0,2524.0,398.0,999.0,417.0,7.9892,500001.0,NEAR BAY +-122.53,37.9,44.0,2846.0,551.0,1232.0,537.0,3.8839,327200.0,NEAR BAY +-122.54,37.9,48.0,2491.0,460.0,937.0,455.0,4.4375,370000.0,NEAR BAY +-122.54,37.91,48.0,2924.0,489.0,1159.0,505.0,5.6302,489000.0,NEAR BAY +-122.55,37.92,52.0,2303.0,350.0,859.0,359.0,6.1085,500001.0,NEAR BAY +-122.52,37.91,30.0,4174.0,739.0,1818.0,705.0,5.5951,402900.0,NEAR BAY +-122.52,37.89,17.0,4363.0,1041.0,1640.0,989.0,3.9531,417600.0,NEAR BAY +-122.52,37.9,16.0,1704.0,402.0,689.0,348.0,4.4239,267100.0,NEAR BAY +-122.54,37.9,41.0,3170.0,622.0,1091.0,528.0,3.7813,389200.0,NEAR BAY +-122.55,37.9,34.0,1431.0,224.0,503.0,220.0,7.9606,453400.0,NEAR BAY +-122.56,37.9,48.0,1550.0,253.0,641.0,276.0,8.634,463500.0,NEAR BAY +-122.56,37.91,52.0,1972.0,327.0,755.0,345.0,7.1924,500001.0,NEAR BAY +-122.56,37.92,37.0,1926.0,290.0,721.0,298.0,8.9248,500001.0,NEAR BAY +-122.55,37.91,48.0,1283.0,278.0,567.0,255.0,3.2794,460000.0,NEAR BAY +-122.53,37.88,25.0,4921.0,866.0,1913.0,834.0,6.8742,413100.0,NEAR BAY +-122.54,37.88,30.0,4382.0,732.0,1775.0,745.0,6.7809,414400.0,NEAR BAY +-122.53,37.87,20.0,1814.0,282.0,658.0,253.0,7.9977,400000.0,NEAR BAY +-122.53,37.88,36.0,2688.0,485.0,1064.0,449.0,4.4583,308600.0,NEAR BAY +-122.56,37.9,36.0,1760.0,283.0,562.0,246.0,6.7546,402400.0,NEAR BAY +-122.54,37.89,33.0,4971.0,836.0,1907.0,795.0,6.1275,424400.0,NEAR BAY +-122.53,37.89,35.0,4127.0,689.0,1596.0,707.0,5.9073,400400.0,NEAR BAY +-122.56,37.9,24.0,221.0,41.0,75.0,38.0,5.1292,362500.0,NEAR BAY +-122.51,37.87,21.0,3904.0,980.0,1949.0,919.0,2.862,258400.0,NEAR BAY +-122.47,37.85,19.0,1926.0,593.0,881.0,546.0,2.9145,140400.0,NEAR BAY +-122.5,37.87,17.0,4333.0,947.0,1650.0,919.0,6.3066,346100.0,NEAR BAY +-122.49,37.86,35.0,2729.0,538.0,969.0,528.0,6.7669,500001.0,NEAR BAY +-122.49,37.86,52.0,2175.0,510.0,809.0,503.0,4.5398,442000.0,NEAR BAY +-122.48,37.86,52.0,3914.0,752.0,1177.0,670.0,6.2113,500001.0,NEAR BAY +-122.48,37.85,42.0,6297.0,1307.0,2096.0,1205.0,6.4752,500001.0,NEAR BAY +-122.49,37.85,38.0,240.0,29.0,63.0,34.0,12.2547,500001.0,NEAR BAY +-122.52,37.88,52.0,176.0,50.0,88.0,46.0,3.8068,275000.0,NEAR BAY +-122.62,37.85,30.0,833.0,164.0,358.0,143.0,6.8198,493800.0,NEAR OCEAN +-122.53,37.86,38.0,1183.0,196.0,628.0,205.0,3.75,478600.0,NEAR BAY +-122.66,37.93,42.0,1505.0,324.0,553.0,277.0,4.1792,350000.0,NEAR OCEAN +-122.71,37.88,21.0,2845.0,552.0,599.0,250.0,4.3125,495800.0,NEAR OCEAN +-122.69,37.91,43.0,1730.0,326.0,629.0,279.0,4.3194,238700.0,NEAR OCEAN +-122.71,37.9,23.0,1250.0,257.0,437.0,188.0,3.115,242600.0,NEAR OCEAN +-122.86,38.1,44.0,2602.0,509.0,691.0,343.0,4.3125,261500.0,NEAR OCEAN +-122.84,38.07,31.0,1858.0,367.0,701.0,297.0,3.8269,270700.0,NEAR OCEAN +-122.93,38.02,28.0,1284.0,265.0,628.0,219.0,3.5469,200000.0,NEAR OCEAN +-122.68,38.07,26.0,1445.0,244.0,510.0,207.0,5.6305,430000.0,NEAR OCEAN +-122.9,38.28,52.0,1275.0,218.0,627.0,185.0,2.3482,163500.0,NEAR OCEAN +-122.96,38.26,20.0,1982.0,358.0,308.0,132.0,3.1429,240900.0,NEAR OCEAN +-122.81,38.08,19.0,1615.0,366.0,815.0,337.0,3.4609,238800.0,NEAR OCEAN +-122.8,38.18,36.0,2378.0,476.0,957.0,362.0,3.625,253100.0,NEAR OCEAN +-120.19,37.53,25.0,1470.0,341.0,706.0,283.0,1.7614,71300.0,INLAND +-120.02,37.57,17.0,2116.0,425.0,909.0,319.0,2.7188,113100.0,INLAND +-119.99,37.51,14.0,2878.0,617.0,1011.0,509.0,1.398,103800.0,INLAND +-119.95,37.47,32.0,1312.0,315.0,600.0,265.0,1.5,91500.0,INLAND +-119.98,37.43,12.0,2776.0,592.0,1236.0,489.0,2.5551,105000.0,INLAND +-120.07,37.34,16.0,1667.0,372.0,762.0,283.0,1.75,87500.0,INLAND +-120.31,37.64,11.0,2403.0,497.0,890.0,344.0,3.0,120800.0,INLAND +-120.15,37.69,13.0,866.0,252.0,369.0,165.0,2.875,70200.0,INLAND +-120.02,37.72,17.0,2806.0,600.0,990.0,410.0,2.3818,88100.0,INLAND +-119.81,37.67,24.0,172.0,42.0,79.0,30.0,3.8333,93800.0,INLAND +-119.82,37.57,13.0,1713.0,340.0,643.0,241.0,2.662,92400.0,INLAND +-119.9,37.49,13.0,2230.0,443.0,920.0,361.0,3.0,112000.0,INLAND +-119.84,37.48,17.0,2582.0,553.0,1087.0,423.0,2.5,104200.0,INLAND +-119.8,37.5,15.0,989.0,184.0,406.0,151.0,3.1771,121900.0,INLAND +-119.72,37.46,13.0,1999.0,375.0,750.0,308.0,2.875,96000.0,INLAND +-119.85,37.39,14.0,2744.0,555.0,1153.0,474.0,2.753,111100.0,INLAND +-119.55,37.75,30.0,2165.0,536.0,1500.0,414.0,3.5391,55900.0,INLAND +-119.64,37.61,30.0,2857.0,661.0,291.0,135.0,2.6838,164600.0,INLAND +-123.15,39.74,23.0,608.0,143.0,281.0,108.0,2.9306,70000.0,INLAND +-123.24,39.81,25.0,1435.0,304.0,746.0,259.0,1.7788,57900.0,INLAND +-123.23,39.77,25.0,2075.0,435.0,991.0,377.0,1.2281,60300.0,INLAND +-123.47,39.8,18.0,2130.0,545.0,863.0,346.0,2.3571,79200.0,INLAND +-123.71,39.88,42.0,1518.0,383.0,656.0,303.0,1.4952,69800.0,NEAR OCEAN +-123.84,39.83,19.0,1461.0,340.0,515.0,227.0,1.5278,145800.0,NEAR OCEAN +-123.58,39.66,15.0,1839.0,489.0,887.0,332.0,2.2429,100000.0,<1H OCEAN +-123.5,39.67,22.0,2124.0,450.0,1122.0,446.0,2.1793,71500.0,INLAND +-123.64,39.45,21.0,3359.0,677.0,1908.0,642.0,3.0433,140700.0,<1H OCEAN +-123.79,39.5,24.0,1421.0,291.0,588.0,274.0,2.325,157300.0,<1H OCEAN +-123.8,39.47,28.0,2492.0,507.0,1202.0,460.0,2.7857,150300.0,<1H OCEAN +-123.73,39.44,32.0,790.0,151.0,380.0,142.0,2.7,165000.0,<1H OCEAN +-123.84,39.46,47.0,1150.0,244.0,552.0,201.0,2.5192,110400.0,<1H OCEAN +-123.8,39.46,35.0,1718.0,345.0,698.0,299.0,2.9243,131600.0,<1H OCEAN +-123.8,39.44,52.0,1533.0,336.0,754.0,340.0,1.9213,95000.0,<1H OCEAN +-123.79,39.44,49.0,2290.0,482.0,1201.0,479.0,3.5,113300.0,<1H OCEAN +-123.8,39.44,33.0,2024.0,459.0,1019.0,422.0,1.9208,93600.0,<1H OCEAN +-123.79,39.44,36.0,1330.0,273.0,761.0,286.0,2.7813,105800.0,<1H OCEAN +-123.79,39.44,16.0,2017.0,423.0,1177.0,414.0,3.2171,116200.0,<1H OCEAN +-123.85,39.42,11.0,1804.0,506.0,895.0,451.0,1.7574,150000.0,<1H OCEAN +-123.34,39.5,15.0,2342.0,535.0,1064.0,433.0,1.8967,96600.0,INLAND +-123.4,39.46,10.0,4086.0,831.0,2111.0,758.0,3.2156,104400.0,<1H OCEAN +-123.32,39.42,22.0,2085.0,432.0,1133.0,402.0,2.3906,92600.0,<1H OCEAN +-123.38,39.37,18.0,3946.0,813.0,1899.0,730.0,2.6424,124600.0,<1H OCEAN +-123.35,39.42,18.0,1619.0,346.0,904.0,295.0,2.1625,77200.0,<1H OCEAN +-123.37,39.43,32.0,2780.0,470.0,1281.0,479.0,3.588,96000.0,<1H OCEAN +-123.36,39.41,46.0,1748.0,362.0,808.0,330.0,2.9183,76900.0,<1H OCEAN +-123.35,39.4,27.0,1321.0,338.0,779.0,327.0,1.85,71800.0,<1H OCEAN +-123.36,39.4,21.0,1081.0,254.0,715.0,275.0,1.5625,71500.0,<1H OCEAN +-123.34,39.39,18.0,2821.0,628.0,1636.0,615.0,2.3333,84000.0,<1H OCEAN +-123.1,39.36,19.0,1056.0,248.0,611.0,226.0,1.746,105000.0,INLAND +-123.23,39.33,20.0,804.0,121.0,448.0,140.0,3.9632,147100.0,<1H OCEAN +-123.15,39.31,19.0,1026.0,205.0,424.0,152.0,2.8833,154200.0,INLAND +-123.11,39.32,20.0,2745.0,504.0,1421.0,430.0,3.3431,137500.0,INLAND +-123.18,39.26,25.0,3066.0,570.0,1558.0,535.0,3.788,134200.0,<1H OCEAN +-123.22,39.28,16.0,5569.0,1106.0,3148.0,1088.0,3.1455,142900.0,<1H OCEAN +-123.36,39.25,17.0,1087.0,254.0,522.0,202.0,2.5875,144500.0,<1H OCEAN +-123.18,39.23,18.0,243.0,55.0,115.0,54.0,2.125,175000.0,<1H OCEAN +-123.21,39.2,17.0,3145.0,693.0,1560.0,647.0,2.2926,149300.0,<1H OCEAN +-123.19,39.21,22.0,1542.0,291.0,821.0,285.0,3.5917,118800.0,<1H OCEAN +-123.2,39.23,26.0,786.0,168.0,494.0,161.0,2.3583,105400.0,<1H OCEAN +-123.75,39.37,16.0,1377.0,296.0,830.0,279.0,3.25,151400.0,<1H OCEAN +-123.85,39.39,23.0,4671.0,912.0,2095.0,857.0,3.184,140500.0,<1H OCEAN +-123.81,39.34,17.0,1981.0,371.0,773.0,325.0,3.1563,277000.0,<1H OCEAN +-123.7,39.32,18.0,1652.0,352.0,711.0,292.0,3.1071,213200.0,<1H OCEAN +-123.81,39.31,23.0,2754.0,577.0,887.0,432.0,3.3654,225000.0,NEAR OCEAN +-123.73,39.17,20.0,4620.0,1042.0,1745.0,794.0,2.375,158800.0,NEAR OCEAN +-123.53,38.93,38.0,1706.0,355.0,506.0,211.0,2.5625,165600.0,NEAR OCEAN +-123.69,38.9,17.0,2206.0,478.0,1140.0,428.0,2.1985,95300.0,NEAR OCEAN +-123.59,38.8,17.0,5202.0,1037.0,1742.0,803.0,3.1201,176100.0,NEAR OCEAN +-123.54,39.17,18.0,2251.0,510.0,1032.0,369.0,2.2946,101000.0,<1H OCEAN +-123.39,38.99,28.0,1416.0,294.0,812.0,258.0,3.4063,109400.0,<1H OCEAN +-123.36,39.01,35.0,1551.0,321.0,857.0,288.0,2.7232,115400.0,<1H OCEAN +-123.21,39.18,17.0,2772.0,576.0,1501.0,584.0,2.6275,142100.0,<1H OCEAN +-123.34,39.1,24.0,5372.0,1051.0,3002.0,992.0,3.0652,131100.0,<1H OCEAN +-123.21,39.07,17.0,1890.0,342.0,877.0,312.0,3.7833,159800.0,<1H OCEAN +-123.22,39.15,45.0,1348.0,265.0,639.0,270.0,3.3667,115200.0,<1H OCEAN +-123.22,39.16,32.0,1149.0,187.0,499.0,208.0,3.6587,154600.0,<1H OCEAN +-123.23,39.13,33.0,1176.0,211.0,529.0,217.0,3.8958,144000.0,<1H OCEAN +-123.22,39.15,36.0,1166.0,216.0,504.0,203.0,3.5938,122100.0,<1H OCEAN +-123.21,39.15,52.0,1370.0,258.0,617.0,228.0,2.55,112900.0,<1H OCEAN +-123.21,39.14,39.0,1419.0,262.0,661.0,278.0,3.0,114600.0,<1H OCEAN +-123.21,39.13,27.0,1531.0,266.0,822.0,234.0,4.0469,127400.0,<1H OCEAN +-123.2,39.16,14.0,1908.0,484.0,1195.0,467.0,1.7929,82300.0,<1H OCEAN +-123.22,39.16,29.0,6121.0,1222.0,3595.0,1189.0,2.631,109600.0,<1H OCEAN +-123.2,39.15,27.0,990.0,238.0,592.0,225.0,2.0074,96200.0,<1H OCEAN +-123.19,39.15,16.0,2577.0,495.0,1232.0,488.0,2.6012,125600.0,<1H OCEAN +-123.21,39.15,31.0,2685.0,675.0,1367.0,626.0,1.6571,108900.0,<1H OCEAN +-123.2,39.14,17.0,1620.0,396.0,878.0,399.0,1.8042,109200.0,<1H OCEAN +-123.2,39.13,26.0,1474.0,417.0,1065.0,401.0,1.375,84400.0,<1H OCEAN +-123.21,39.14,15.0,2235.0,545.0,1376.0,516.0,1.9032,100000.0,<1H OCEAN +-123.1,39.15,32.0,1143.0,208.0,454.0,188.0,3.8333,116100.0,<1H OCEAN +-123.17,39.18,14.0,2240.0,327.0,1030.0,308.0,5.9585,214900.0,<1H OCEAN +-123.17,39.15,30.0,1904.0,331.0,816.0,325.0,4.425,161900.0,<1H OCEAN +-123.16,39.13,33.0,1320.0,303.0,1048.0,303.0,1.7813,94700.0,<1H OCEAN +-123.16,39.1,31.0,418.0,82.0,327.0,81.0,2.775,120800.0,<1H OCEAN +-123.19,39.12,38.0,267.0,57.0,196.0,60.0,2.3125,70000.0,<1H OCEAN +-123.15,38.94,22.0,2163.0,436.0,1048.0,358.0,2.7171,95800.0,<1H OCEAN +-123.1,38.97,36.0,1211.0,247.0,697.0,251.0,2.5761,94900.0,<1H OCEAN +-120.46,37.51,22.0,2704.0,497.0,1432.0,399.0,2.9,83100.0,INLAND +-120.68,37.47,33.0,1028.0,226.0,658.0,197.0,2.3043,66300.0,INLAND +-120.75,37.44,27.0,2295.0,424.0,1252.0,350.0,3.6182,123200.0,INLAND +-120.76,37.44,18.0,2003.0,398.0,1333.0,411.0,2.7562,90500.0,INLAND +-120.77,37.42,27.0,949.0,224.0,888.0,241.0,2.3333,72800.0,INLAND +-120.79,37.43,17.0,2534.0,517.0,1764.0,502.0,2.8519,80700.0,INLAND +-120.79,37.41,35.0,2436.0,466.0,1730.0,469.0,2.2071,85900.0,INLAND +-120.71,37.39,11.0,1479.0,341.0,1476.0,327.0,3.2721,73800.0,INLAND +-120.71,37.39,40.0,680.0,160.0,785.0,175.0,2.6058,72700.0,INLAND +-120.69,37.4,46.0,860.0,130.0,496.0,147.0,3.5167,137500.0,INLAND +-120.74,37.33,30.0,2390.0,470.0,1409.0,428.0,2.1484,81300.0,INLAND +-120.75,37.37,32.0,1656.0,317.0,1037.0,286.0,2.4964,88800.0,INLAND +-120.73,37.38,37.0,653.0,176.0,827.0,176.0,1.9236,64400.0,INLAND +-120.72,37.38,22.0,1311.0,319.0,1455.0,340.0,2.2813,67300.0,INLAND +-120.73,37.38,23.0,1451.0,292.0,1052.0,265.0,2.8698,72900.0,INLAND +-120.71,37.38,14.0,1979.0,432.0,1756.0,382.0,2.6923,71400.0,INLAND +-120.84,37.4,7.0,2773.0,530.0,1374.0,505.0,2.6214,103800.0,INLAND +-120.86,37.4,17.0,3511.0,636.0,1904.0,617.0,3.1111,113900.0,INLAND +-120.84,37.43,32.0,2892.0,521.0,1580.0,484.0,3.7784,164500.0,INLAND +-120.94,37.4,32.0,1175.0,208.0,774.0,222.0,3.0,109400.0,INLAND +-120.88,37.37,24.0,1294.0,222.0,684.0,221.0,2.6908,103100.0,INLAND +-120.89,37.33,27.0,2692.0,481.0,1518.0,447.0,2.0417,94200.0,INLAND +-120.64,37.38,21.0,3157.0,637.0,2268.0,620.0,2.567,70400.0,INLAND +-120.64,37.38,19.0,2256.0,449.0,1469.0,435.0,2.5129,84600.0,INLAND +-120.65,37.33,25.0,1731.0,311.0,810.0,266.0,4.1058,107600.0,INLAND +-120.59,37.39,16.0,4717.0,1119.0,3589.0,1017.0,2.1061,72800.0,INLAND +-120.63,37.41,27.0,2083.0,444.0,1462.0,479.0,2.6439,69100.0,INLAND +-120.57,37.43,39.0,2235.0,412.0,1268.0,402.0,2.6758,74600.0,INLAND +-120.6,37.37,10.0,3075.0,498.0,1368.0,487.0,4.6667,130100.0,INLAND +-120.6,37.36,27.0,2521.0,484.0,1307.0,456.0,3.0911,86900.0,INLAND +-120.63,37.36,16.0,1605.0,282.0,866.0,284.0,4.0694,110200.0,INLAND +-120.62,37.35,18.0,874.0,203.0,572.0,190.0,1.6833,71000.0,INLAND +-120.62,37.36,15.0,3455.0,729.0,2014.0,659.0,3.2656,83500.0,INLAND +-120.62,37.37,8.0,2608.0,428.0,1530.0,435.0,3.968,102100.0,INLAND +-120.59,37.36,11.0,3946.0,978.0,2814.0,953.0,2.0179,87300.0,INLAND +-120.6,37.35,34.0,1722.0,316.0,904.0,315.0,2.4653,66100.0,INLAND +-120.61,37.35,34.0,1900.0,401.0,1009.0,385.0,2.2222,75000.0,INLAND +-120.62,37.35,20.0,1457.0,372.0,1000.0,346.0,1.4615,69200.0,INLAND +-120.61,37.32,18.0,5009.0,826.0,2497.0,805.0,4.25,146300.0,INLAND +-120.6,37.34,34.0,1830.0,431.0,1304.0,415.0,2.1182,68900.0,INLAND +-120.61,37.36,16.0,638.0,,380.0,132.0,1.9135,87500.0,INLAND +-120.57,37.35,18.0,704.0,176.0,520.0,154.0,3.003,101300.0,INLAND +-120.6,37.35,19.0,3874.0,676.0,2441.0,707.0,3.2955,88600.0,INLAND +-120.59,37.35,15.0,3249.0,613.0,1569.0,595.0,3.5393,88000.0,INLAND +-120.58,37.36,33.0,3564.0,716.0,2603.0,696.0,2.2179,67500.0,INLAND +-120.64,37.2,16.0,2236.0,438.0,1361.0,393.0,2.0066,125000.0,INLAND +-120.55,37.32,21.0,1410.0,229.0,590.0,205.0,3.3194,141400.0,INLAND +-120.49,37.26,28.0,2159.0,416.0,1283.0,378.0,1.8939,83000.0,INLAND +-120.5,37.37,18.0,8606.0,1678.0,5303.0,1644.0,2.4012,79700.0,INLAND +-120.41,37.16,21.0,1684.0,341.0,1052.0,312.0,2.0809,95800.0,INLAND +-120.51,37.32,13.0,2109.0,477.0,1108.0,466.0,2.3099,89600.0,INLAND +-120.49,37.32,10.0,1275.0,255.0,620.0,240.0,3.0263,118300.0,INLAND +-120.5,37.32,13.0,1936.0,384.0,1158.0,367.0,2.75,83200.0,INLAND +-120.49,37.32,13.0,3474.0,927.0,2149.0,821.0,1.9528,85300.0,INLAND +-120.48,37.32,13.0,3641.0,897.0,1737.0,788.0,2.1418,130600.0,INLAND +-120.47,37.32,15.0,3952.0,984.0,2024.0,1026.0,2.558,121600.0,INLAND +-120.5,37.34,16.0,1245.0,231.0,956.0,219.0,3.4559,108000.0,INLAND +-120.48,37.34,8.0,6146.0,1017.0,2821.0,987.0,4.67,127600.0,INLAND +-120.47,37.34,9.0,2934.0,511.0,1227.0,501.0,3.6742,117200.0,INLAND +-120.43,37.32,16.0,1170.0,178.0,566.0,181.0,5.2522,125300.0,INLAND +-120.45,37.32,21.0,1318.0,202.0,618.0,197.0,4.8214,117800.0,INLAND +-120.45,37.32,19.0,3136.0,466.0,1631.0,484.0,3.6471,101400.0,INLAND +-120.46,37.33,4.0,786.0,116.0,368.0,109.0,6.3215,138200.0,INLAND +-120.46,37.33,17.0,6111.0,1171.0,2950.0,1104.0,3.2852,98800.0,INLAND +-120.44,37.31,16.0,3369.0,532.0,1770.0,574.0,5.2662,126200.0,INLAND +-120.45,37.31,20.0,4379.0,753.0,2055.0,716.0,3.7652,133500.0,INLAND +-120.46,37.31,26.0,3170.0,572.0,1524.0,565.0,3.48,95300.0,INLAND +-120.48,37.31,42.0,2361.0,512.0,1684.0,511.0,2.355,75600.0,INLAND +-120.5,37.31,36.0,2162.0,433.0,1048.0,451.0,2.6797,81800.0,INLAND +-120.49,37.31,45.0,1834.0,421.0,1405.0,407.0,2.0521,72400.0,INLAND +-120.48,37.3,49.0,2919.0,719.0,1956.0,679.0,1.5427,88500.0,INLAND +-120.48,37.3,39.0,1015.0,356.0,875.0,313.0,1.5,67000.0,INLAND +-120.49,37.3,50.0,985.0,309.0,621.0,250.0,1.3125,60900.0,INLAND +-120.44,37.31,21.0,6911.0,1341.0,3967.0,1297.0,3.0515,95200.0,INLAND +-120.46,37.31,35.0,2042.0,378.0,953.0,356.0,2.7344,87800.0,INLAND +-120.47,37.3,40.0,3693.0,771.0,2102.0,742.0,2.1838,75000.0,INLAND +-120.46,37.3,36.0,3346.0,739.0,2151.0,713.0,2.3095,68300.0,INLAND +-120.51,37.29,20.0,4927.0,1042.0,4205.0,1009.0,1.7679,79800.0,INLAND +-120.5,37.3,29.0,1572.0,456.0,1697.0,429.0,1.76,63200.0,INLAND +-120.49,37.3,35.0,1313.0,324.0,1350.0,343.0,1.75,57600.0,INLAND +-120.49,37.29,17.0,2414.0,594.0,2487.0,582.0,1.0955,62700.0,INLAND +-120.47,37.29,16.0,749.0,222.0,1277.0,224.0,1.2054,60900.0,INLAND +-120.48,37.29,17.0,2266.0,693.0,3200.0,664.0,1.5635,60400.0,INLAND +-120.47,37.28,19.0,1548.0,319.0,1227.0,309.0,1.7756,73300.0,INLAND +-120.49,37.28,11.0,1721.0,381.0,1708.0,373.0,1.9535,57100.0,INLAND +-120.44,37.28,12.0,2855.0,598.0,1658.0,586.0,2.3929,81100.0,INLAND +-120.44,37.29,18.0,1260.0,268.0,576.0,263.0,1.7222,101500.0,INLAND +-120.46,37.29,30.0,2972.0,635.0,1940.0,590.0,2.3594,72300.0,INLAND +-120.43,37.35,15.0,1613.0,203.0,673.0,213.0,5.9378,212200.0,INLAND +-120.4,37.3,28.0,1401.0,,967.0,257.0,1.5917,89400.0,INLAND +-120.3,37.34,33.0,993.0,186.0,556.0,175.0,2.4286,103600.0,INLAND +-120.32,37.29,38.0,576.0,,478.0,112.0,2.3382,59600.0,INLAND +-120.31,37.29,40.0,1542.0,341.0,1283.0,341.0,1.6929,55900.0,INLAND +-120.31,37.29,36.0,969.0,206.0,732.0,175.0,1.5938,57600.0,INLAND +-120.32,37.29,9.0,695.0,188.0,810.0,190.0,1.6172,56300.0,INLAND +-120.25,37.23,34.0,1656.0,328.0,1110.0,332.0,2.1845,59900.0,INLAND +-120.24,37.21,31.0,2447.0,465.0,1313.0,352.0,3.3929,93800.0,INLAND +-120.35,37.31,17.0,605.0,159.0,416.0,83.0,2.0,87500.0,INLAND +-121.0,37.25,31.0,1923.0,341.0,806.0,349.0,3.1738,97600.0,INLAND +-121.0,37.26,45.0,1750.0,371.0,847.0,354.0,1.7062,77400.0,INLAND +-121.0,37.25,21.0,1937.0,389.0,1002.0,373.0,2.6087,96200.0,INLAND +-121.01,37.25,16.0,2216.0,458.0,1135.0,424.0,2.7316,97500.0,INLAND +-121.06,37.18,30.0,2603.0,507.0,1491.0,473.0,3.0909,123400.0,INLAND +-120.89,37.21,25.0,3301.0,678.0,994.0,306.0,3.2262,97200.0,INLAND +-121.02,37.09,17.0,1118.0,270.0,560.0,244.0,2.0216,112500.0,INLAND +-121.02,36.94,33.0,1541.0,313.0,880.0,272.0,2.5074,117700.0,INLAND +-120.77,37.01,28.0,1689.0,378.0,1057.0,267.0,3.125,156300.0,INLAND +-120.95,37.09,43.0,1116.0,222.0,801.0,207.0,2.875,97200.0,INLAND +-120.85,37.08,3.0,3425.0,611.0,1588.0,459.0,4.1779,147800.0,INLAND +-120.85,37.07,16.0,1795.0,362.0,1642.0,340.0,2.5363,86300.0,INLAND +-120.84,37.07,24.0,1520.0,335.0,882.0,306.0,2.2019,100000.0,INLAND +-120.84,37.06,14.0,1506.0,380.0,1096.0,352.0,1.1301,78500.0,INLAND +-120.85,37.06,31.0,2609.0,645.0,1796.0,629.0,1.5479,82000.0,INLAND +-120.87,37.07,26.0,2036.0,401.0,1343.0,414.0,3.6331,88600.0,INLAND +-120.87,37.05,29.0,4176.0,779.0,2092.0,741.0,2.595,104200.0,INLAND +-120.85,37.05,32.0,2893.0,481.0,1198.0,466.0,3.1719,140600.0,INLAND +-120.84,37.05,8.0,1944.0,283.0,814.0,276.0,5.3988,165500.0,INLAND +-120.79,37.08,9.0,97.0,20.0,91.0,22.0,2.9063,55000.0,INLAND +-120.83,37.07,16.0,3736.0,761.0,1942.0,730.0,2.5598,120200.0,INLAND +-120.82,37.05,15.0,1385.0,288.0,775.0,255.0,1.933,140600.0,INLAND +-120.65,37.09,22.0,886.0,173.0,595.0,161.0,2.4398,150000.0,INLAND +-120.61,37.03,34.0,1841.0,354.0,1019.0,356.0,1.7841,67500.0,INLAND +-120.7,36.99,32.0,320.0,73.0,222.0,78.0,2.9271,87500.0,INLAND +-120.65,36.98,26.0,1787.0,364.0,1548.0,362.0,1.7188,49500.0,INLAND +-120.63,36.98,20.0,2380.0,489.0,1581.0,505.0,2.0595,61300.0,INLAND +-120.64,36.99,23.0,2363.0,449.0,1168.0,410.0,2.2794,75700.0,INLAND +-120.62,36.99,32.0,2455.0,508.0,1344.0,492.0,1.9732,69400.0,INLAND +-120.67,37.37,18.0,164.0,30.0,104.0,32.0,1.6607,87500.0,INLAND +-121.16,41.78,42.0,2918.0,576.0,1182.0,440.0,2.1434,44000.0,INLAND +-121.18,41.31,22.0,2124.0,432.0,829.0,313.0,2.4519,57500.0,INLAND +-120.87,41.54,21.0,1091.0,208.0,660.0,188.0,2.2321,34600.0,INLAND +-120.51,41.35,16.0,2843.0,564.0,892.0,386.0,2.5074,69100.0,INLAND +-120.48,41.82,20.0,1367.0,284.0,429.0,181.0,2.0227,47500.0,INLAND +-120.08,41.79,34.0,1355.0,262.0,434.0,178.0,2.0903,56100.0,INLAND +-120.12,41.4,33.0,2820.0,515.0,976.0,403.0,2.6062,52600.0,INLAND +-120.55,41.61,22.0,9047.0,1831.0,4276.0,1622.0,2.0802,47900.0,INLAND +-119.54,38.51,14.0,1250.0,272.0,721.0,234.0,2.35,95700.0,INLAND +-119.44,38.53,20.0,1963.0,434.0,682.0,273.0,1.5817,97800.0,INLAND +-119.3,38.26,19.0,3325.0,660.0,750.0,286.0,2.9509,114800.0,INLAND +-118.98,38.03,15.0,991.0,277.0,419.0,170.0,3.5469,82500.0,INLAND +-119.07,37.8,12.0,1736.0,352.0,330.0,123.0,3.5294,160700.0,INLAND +-119.08,37.78,17.0,1631.0,335.0,285.0,128.0,2.7656,130000.0,INLAND +-118.45,37.7,15.0,2199.0,453.0,899.0,347.0,2.35,107800.0,INLAND +-118.74,37.58,20.0,3301.0,779.0,1085.0,448.0,3.7315,159300.0,INLAND +-118.96,37.64,11.0,3934.0,697.0,901.0,345.0,4.2381,242700.0,INLAND +-119.02,37.64,14.0,5919.0,1278.0,265.0,112.0,3.2431,221400.0,INLAND +-118.98,37.65,18.0,1795.0,416.0,483.0,208.0,4.5375,169800.0,INLAND +-118.99,37.65,20.0,2474.0,625.0,338.0,141.0,5.01,195500.0,INLAND +-118.98,37.64,17.0,3769.0,908.0,1160.0,453.0,3.05,188900.0,INLAND +-118.97,37.64,13.0,1907.0,544.0,575.0,234.0,3.0685,162500.0,INLAND +-118.97,37.64,14.0,2284.0,622.0,342.0,137.0,3.0921,87500.0,INLAND +-118.97,37.64,14.0,1847.0,439.0,238.0,98.0,3.6042,137500.0,INLAND +-118.99,37.63,10.0,7744.0,1573.0,483.0,224.0,3.2917,231800.0,INLAND +-121.64,36.72,17.0,4203.0,816.0,2900.0,827.0,4.1742,159900.0,<1H OCEAN +-121.63,36.71,19.0,5015.0,1013.0,3251.0,940.0,3.9818,152900.0,<1H OCEAN +-121.62,36.71,24.0,4195.0,706.0,2200.0,647.0,4.3451,177800.0,<1H OCEAN +-121.62,36.74,30.0,1337.0,253.0,838.0,247.0,5.0374,165400.0,<1H OCEAN +-121.64,36.7,32.0,4089.0,735.0,2927.0,713.0,4.1675,142500.0,<1H OCEAN +-121.65,36.7,29.0,4964.0,1056.0,2773.0,1036.0,3.0827,148100.0,<1H OCEAN +-121.66,36.71,27.0,4131.0,886.0,2002.0,815.0,3.2929,157500.0,<1H OCEAN +-121.66,36.7,33.0,3252.0,630.0,2010.0,641.0,3.4222,158100.0,<1H OCEAN +-121.65,36.69,21.0,7884.0,2011.0,4907.0,1919.0,2.7367,160300.0,<1H OCEAN +-121.64,36.68,16.0,6568.0,1603.0,6012.0,1565.0,2.3463,156100.0,<1H OCEAN +-121.63,36.68,24.0,2591.0,739.0,3243.0,702.0,2.1766,108500.0,<1H OCEAN +-121.61,36.68,37.0,3149.0,833.0,3456.0,788.0,2.8542,127600.0,<1H OCEAN +-121.62,36.68,43.0,2534.0,592.0,2448.0,603.0,2.4884,130500.0,<1H OCEAN +-121.61,36.69,19.0,9899.0,2617.0,11272.0,2528.0,2.0244,118500.0,<1H OCEAN +-121.61,36.67,39.0,3260.0,821.0,3130.0,793.0,2.5224,119200.0,<1H OCEAN +-121.62,36.67,45.0,1827.0,408.0,1507.0,410.0,2.8942,129000.0,<1H OCEAN +-121.62,36.67,31.0,2697.0,690.0,2220.0,665.0,2.5329,135200.0,<1H OCEAN +-121.63,36.67,34.0,2486.0,560.0,2443.0,557.0,2.5263,130400.0,<1H OCEAN +-121.64,36.67,28.0,256.0,66.0,214.0,60.0,3.0197,137500.0,<1H OCEAN +-121.63,36.65,44.0,309.0,121.0,315.0,80.0,1.6071,112500.0,<1H OCEAN +-121.64,36.66,24.0,3174.0,506.0,1466.0,535.0,5.2285,248100.0,<1H OCEAN +-121.65,36.66,30.0,3745.0,767.0,1762.0,748.0,3.2355,214200.0,<1H OCEAN +-121.65,36.66,42.0,4261.0,840.0,2013.0,801.0,3.5288,221000.0,<1H OCEAN +-121.65,36.67,52.0,2351.0,459.0,1169.0,439.0,2.8924,169600.0,<1H OCEAN +-121.65,36.67,28.0,1926.0,556.0,1717.0,535.0,1.9385,123200.0,<1H OCEAN +-121.66,36.68,10.0,913.0,265.0,508.0,251.0,0.9914,147500.0,<1H OCEAN +-121.66,36.67,40.0,2878.0,592.0,1444.0,564.0,3.1439,192300.0,<1H OCEAN +-121.66,36.67,40.0,2497.0,520.0,1275.0,508.0,3.1071,193100.0,<1H OCEAN +-121.67,36.66,19.0,9371.0,1980.0,4259.0,1882.0,3.6875,189700.0,<1H OCEAN +-121.67,36.67,24.0,3071.0,544.0,1477.0,560.0,3.9219,222500.0,<1H OCEAN +-121.68,36.67,26.0,5745.0,1017.0,2780.0,996.0,5.0,202300.0,<1H OCEAN +-121.67,36.68,38.0,5561.0,1292.0,3523.0,1253.0,2.8289,168300.0,<1H OCEAN +-121.66,36.69,6.0,10613.0,2485.0,7249.0,2375.0,3.7912,168900.0,<1H OCEAN +-121.79,36.85,28.0,1049.0,235.0,705.0,208.0,2.7321,150000.0,NEAR OCEAN +-121.77,36.87,37.0,424.0,65.0,266.0,64.0,3.3472,293800.0,NEAR OCEAN +-121.73,36.9,23.0,2392.0,721.0,3074.0,718.0,2.5195,136900.0,<1H OCEAN +-121.71,36.9,16.0,1680.0,285.0,1103.0,275.0,4.6125,253800.0,<1H OCEAN +-121.68,36.9,13.0,833.0,130.0,405.0,127.0,5.2729,322900.0,<1H OCEAN +-121.66,36.89,15.0,2608.0,458.0,1531.0,457.0,5.5148,253500.0,<1H OCEAN +-121.76,36.83,28.0,1445.0,268.0,1017.0,284.0,3.6693,211000.0,<1H OCEAN +-121.73,36.86,28.0,827.0,178.0,703.0,144.0,4.4271,175700.0,<1H OCEAN +-121.71,36.88,19.0,2528.0,554.0,2332.0,492.0,3.7766,177000.0,<1H OCEAN +-121.73,36.85,22.0,1304.0,278.0,887.0,227.0,3.6607,206300.0,<1H OCEAN +-121.7,36.84,19.0,2511.0,465.0,1551.0,450.0,4.9107,231900.0,<1H OCEAN +-121.65,36.85,20.0,2606.0,424.0,1361.0,426.0,4.5787,245100.0,<1H OCEAN +-121.69,36.8,19.0,2164.0,410.0,1309.0,426.0,3.338,185300.0,<1H OCEAN +-121.74,36.79,16.0,3841.0,620.0,1799.0,611.0,4.3814,245300.0,<1H OCEAN +-121.72,36.81,18.0,1984.0,379.0,1078.0,359.0,3.2969,229900.0,<1H OCEAN +-121.69,36.81,18.0,2837.0,522.0,1454.0,458.0,4.5272,221000.0,<1H OCEAN +-121.66,36.82,17.0,3921.0,654.0,1895.0,641.0,5.0092,238700.0,<1H OCEAN +-121.64,36.82,18.0,1819.0,283.0,919.0,295.0,4.1696,222500.0,<1H OCEAN +-121.76,36.75,21.0,1141.0,257.0,671.0,195.0,3.8424,155700.0,<1H OCEAN +-121.7,36.77,21.0,2294.0,478.0,1306.0,430.0,3.0347,227200.0,<1H OCEAN +-121.76,36.77,27.0,1608.0,503.0,2031.0,498.0,2.3384,121000.0,<1H OCEAN +-121.75,36.77,25.0,1851.0,418.0,1678.0,390.0,3.2937,135300.0,<1H OCEAN +-121.75,36.76,32.0,1740.0,399.0,1563.0,389.0,2.7694,132400.0,<1H OCEAN +-121.64,36.74,30.0,2628.0,444.0,1372.0,432.0,4.1696,175000.0,<1H OCEAN +-121.64,36.8,18.0,5915.0,1000.0,2975.0,975.0,4.5812,255200.0,<1H OCEAN +-121.6,36.81,18.0,1575.0,230.0,751.0,219.0,5.2203,286500.0,<1H OCEAN +-121.65,36.77,15.0,2191.0,358.0,1150.0,330.0,4.7969,227500.0,<1H OCEAN +-121.68,36.72,12.0,19234.0,4492.0,12153.0,4372.0,3.2652,152800.0,<1H OCEAN +-121.7,36.67,37.0,641.0,129.0,458.0,142.0,3.3456,252600.0,<1H OCEAN +-121.62,36.63,52.0,1437.0,298.0,836.0,257.0,3.6286,165500.0,<1H OCEAN +-121.54,36.7,12.0,6758.0,1241.0,3918.0,1100.0,3.525,201700.0,<1H OCEAN +-121.62,36.69,11.0,4712.0,1098.0,5982.0,1105.0,2.5986,135700.0,<1H OCEAN +-121.62,36.69,12.0,512.0,144.0,767.0,149.0,2.2667,72900.0,<1H OCEAN +-121.69,36.62,19.0,1907.0,323.0,681.0,270.0,6.0332,244900.0,<1H OCEAN +-121.7,36.6,19.0,3562.0,530.0,1607.0,505.0,5.0162,283100.0,<1H OCEAN +-121.67,36.58,11.0,5892.0,837.0,2327.0,812.0,6.1551,291800.0,<1H OCEAN +-121.59,36.55,34.0,737.0,140.0,362.0,138.0,5.1788,270000.0,<1H OCEAN +-121.7,36.55,21.0,3905.0,583.0,1528.0,586.0,7.6245,336600.0,<1H OCEAN +-121.69,36.52,15.0,4037.0,586.0,1596.0,557.0,8.0922,390100.0,<1H OCEAN +-121.43,36.5,14.0,1835.0,468.0,1867.0,461.0,2.3879,129800.0,<1H OCEAN +-121.44,36.51,31.0,1636.0,380.0,1468.0,339.0,3.2219,114700.0,<1H OCEAN +-121.45,36.51,29.0,1045.0,311.0,1245.0,273.0,1.775,112500.0,<1H OCEAN +-121.42,36.57,13.0,2685.0,621.0,2474.0,573.0,2.8775,134100.0,<1H OCEAN +-121.48,36.49,28.0,1006.0,228.0,738.0,193.0,1.9722,210700.0,<1H OCEAN +-121.74,36.49,33.0,2952.0,565.0,1264.0,517.0,4.4209,274600.0,<1H OCEAN +-121.73,36.5,27.0,3184.0,520.0,1121.0,493.0,5.6383,377000.0,<1H OCEAN +-121.74,36.47,28.0,1973.0,343.0,970.0,349.0,4.25,279100.0,<1H OCEAN +-121.7,36.48,19.0,2150.0,479.0,1052.0,428.0,3.5039,288400.0,<1H OCEAN +-121.62,36.43,20.0,1335.0,290.0,717.0,243.0,4.7891,230600.0,<1H OCEAN +-121.66,36.37,9.0,1580.0,287.0,465.0,208.0,6.1668,405800.0,<1H OCEAN +-121.31,36.42,21.0,2740.0,615.0,2630.0,564.0,2.6629,102700.0,<1H OCEAN +-121.32,36.42,20.0,1054.0,269.0,1219.0,273.0,3.0437,76600.0,<1H OCEAN +-121.32,36.43,22.0,2927.0,637.0,2546.0,618.0,2.7153,114300.0,<1H OCEAN +-121.33,36.43,40.0,622.0,194.0,902.0,196.0,2.625,109100.0,<1H OCEAN +-121.4,36.38,39.0,2288.0,529.0,1449.0,410.0,3.3289,190600.0,<1H OCEAN +-121.23,36.33,23.0,2095.0,536.0,1858.0,457.0,3.0543,92400.0,<1H OCEAN +-121.25,36.32,12.0,4776.0,1082.0,4601.0,1066.0,2.9184,100500.0,<1H OCEAN +-121.26,36.32,30.0,146.0,41.0,164.0,40.0,2.3,206300.0,<1H OCEAN +-121.24,36.33,13.0,1642.0,418.0,1534.0,388.0,3.1222,125500.0,<1H OCEAN +-121.24,36.34,33.0,1691.0,308.0,792.0,262.0,2.6648,164600.0,<1H OCEAN +-121.12,36.21,16.0,1720.0,473.0,1427.0,291.0,2.1107,76200.0,<1H OCEAN +-121.13,36.21,27.0,1476.0,352.0,1156.0,358.0,3.1929,137900.0,<1H OCEAN +-121.13,36.21,30.0,1484.0,414.0,1200.0,351.0,1.7548,95800.0,<1H OCEAN +-121.13,36.21,34.0,2504.0,550.0,1810.0,547.0,3.4821,113700.0,<1H OCEAN +-121.13,36.2,16.0,1868.0,443.0,1323.0,436.0,2.9559,163200.0,<1H OCEAN +-121.02,36.24,12.0,2198.0,507.0,1971.0,502.0,2.6801,100000.0,<1H OCEAN +-121.2,36.14,12.0,3738.0,710.0,2337.0,664.0,3.9647,135000.0,<1H OCEAN +-121.39,36.16,28.0,1057.0,249.0,288.0,130.0,3.0526,146900.0,NEAR OCEAN +-121.32,35.95,31.0,372.0,68.0,479.0,67.0,3.5547,200000.0,NEAR OCEAN +-121.0,35.94,16.0,3077.0,628.0,1479.0,536.0,3.3724,114600.0,<1H OCEAN +-120.79,36.06,29.0,1916.0,386.0,1019.0,314.0,2.4881,87500.0,<1H OCEAN +-120.51,35.91,39.0,768.0,162.0,264.0,118.0,5.3245,250000.0,INLAND +-121.91,36.42,14.0,1078.0,261.0,382.0,171.0,3.7083,210000.0,NEAR OCEAN +-121.84,36.25,20.0,958.0,245.0,590.0,189.0,2.6094,362500.0,NEAR OCEAN +-121.62,36.14,25.0,726.0,274.0,411.0,214.0,3.2375,450000.0,NEAR OCEAN +-121.87,36.55,20.0,10053.0,1768.0,3083.0,1621.0,5.1506,387500.0,NEAR OCEAN +-121.82,36.54,22.0,1746.0,363.0,886.0,364.0,5.5469,378800.0,<1H OCEAN +-121.77,36.53,18.0,2321.0,358.0,803.0,341.0,10.1854,426000.0,<1H OCEAN +-121.84,36.52,18.0,3165.0,533.0,1312.0,434.0,6.5234,357400.0,NEAR OCEAN +-121.88,36.49,28.0,2830.0,458.0,898.0,370.0,5.8142,500001.0,NEAR OCEAN +-121.92,36.57,42.0,3944.0,738.0,1374.0,598.0,4.174,394400.0,NEAR OCEAN +-121.91,36.55,39.0,5468.0,834.0,1782.0,712.0,5.7248,398800.0,NEAR OCEAN +-121.92,36.54,33.0,5323.0,887.0,1670.0,740.0,3.9792,468000.0,NEAR OCEAN +-121.92,36.56,40.0,2124.0,449.0,643.0,341.0,5.5164,369100.0,NEAR OCEAN +-121.94,36.55,30.0,2722.0,584.0,628.0,384.0,3.4048,487100.0,NEAR OCEAN +-121.92,36.56,39.0,2144.0,538.0,749.0,419.0,2.7039,364000.0,NEAR OCEAN +-121.92,36.55,37.0,2190.0,419.0,490.0,300.0,3.7852,465800.0,NEAR OCEAN +-121.92,36.55,44.0,3494.0,635.0,693.0,415.0,3.6,452800.0,NEAR OCEAN +-121.92,36.55,52.0,2616.0,483.0,582.0,313.0,3.275,500001.0,NEAR OCEAN +-121.95,36.61,31.0,1736.0,250.0,497.0,170.0,6.3835,407800.0,NEAR OCEAN +-121.93,36.59,25.0,2201.0,353.0,622.0,295.0,5.0621,386500.0,NEAR OCEAN +-121.95,36.6,32.0,3152.0,504.0,793.0,426.0,7.1198,469900.0,NEAR OCEAN +-121.95,36.59,22.0,3553.0,530.0,1108.0,441.0,5.8505,417100.0,NEAR OCEAN +-121.94,36.58,23.0,4911.0,693.0,1480.0,606.0,6.777,500000.0,NEAR OCEAN +-121.94,36.57,28.0,3153.0,409.0,569.0,271.0,14.4113,500001.0,NEAR OCEAN +-121.93,36.6,33.0,3455.0,683.0,1704.0,663.0,4.0154,225700.0,NEAR OCEAN +-121.92,36.61,29.0,3735.0,808.0,1873.0,757.0,3.1543,253800.0,NEAR OCEAN +-121.93,36.62,34.0,2351.0,,1063.0,428.0,3.725,278000.0,NEAR OCEAN +-121.92,36.61,27.0,3044.0,661.0,1229.0,618.0,3.1359,268000.0,NEAR OCEAN +-121.93,36.62,39.0,869.0,173.0,406.0,165.0,4.0313,253800.0,NEAR OCEAN +-121.92,36.62,52.0,974.0,190.0,403.0,181.0,4.3281,236500.0,NEAR OCEAN +-121.92,36.62,52.0,1001.0,191.0,425.0,184.0,3.7614,241700.0,NEAR OCEAN +-121.92,36.62,47.0,1811.0,401.0,948.0,375.0,3.0379,249300.0,NEAR OCEAN +-121.91,36.62,52.0,1431.0,300.0,657.0,293.0,3.2865,240100.0,<1H OCEAN +-121.92,36.62,52.0,867.0,199.0,391.0,187.0,2.6713,234600.0,NEAR OCEAN +-121.92,36.62,52.0,1410.0,303.0,578.0,285.0,2.5625,235400.0,NEAR OCEAN +-121.92,36.62,52.0,728.0,161.0,313.0,142.0,3.4327,254500.0,NEAR OCEAN +-121.91,36.62,40.0,1292.0,271.0,504.0,230.0,2.475,258300.0,<1H OCEAN +-121.91,36.62,30.0,724.0,167.0,325.0,155.0,3.3333,247900.0,<1H OCEAN +-121.71,36.78,19.0,2371.0,324.0,944.0,332.0,5.9175,240200.0,<1H OCEAN +-121.92,36.62,52.0,2584.0,599.0,790.0,444.0,2.5263,286400.0,NEAR OCEAN +-121.91,36.62,52.0,541.0,157.0,240.0,145.0,3.5865,290000.0,<1H OCEAN +-121.91,36.62,52.0,1220.0,267.0,488.0,265.0,3.7454,243800.0,<1H OCEAN +-121.91,36.63,42.0,817.0,194.0,391.0,193.0,2.1776,279200.0,<1H OCEAN +-121.93,36.63,28.0,3983.0,852.0,1582.0,778.0,3.5147,313900.0,NEAR OCEAN +-121.93,36.63,33.0,1740.0,342.0,638.0,329.0,3.1912,319800.0,NEAR OCEAN +-121.92,36.63,40.0,1076.0,193.0,406.0,180.0,3.4943,311100.0,<1H OCEAN +-121.93,36.63,41.0,1049.0,198.0,428.0,183.0,4.3571,287500.0,NEAR OCEAN +-121.92,36.63,36.0,877.0,175.0,349.0,168.0,3.4167,339100.0,<1H OCEAN +-121.89,36.63,20.0,1834.0,554.0,971.0,514.0,3.0383,217300.0,<1H OCEAN +-121.9,36.61,29.0,3412.0,827.0,1574.0,759.0,2.9309,217100.0,NEAR OCEAN +-121.91,36.61,30.0,2755.0,597.0,1519.0,554.0,3.2952,234600.0,NEAR OCEAN +-121.92,36.61,27.0,1619.0,352.0,831.0,344.0,4.3,226400.0,NEAR OCEAN +-121.92,36.61,21.0,1242.0,340.0,834.0,362.0,2.4922,243800.0,NEAR OCEAN +-121.9,36.6,39.0,1629.0,423.0,804.0,386.0,2.4663,236500.0,NEAR OCEAN +-121.9,36.6,33.0,2461.0,649.0,1234.0,601.0,2.8727,225000.0,NEAR OCEAN +-121.9,36.6,45.0,2249.0,412.0,944.0,429.0,3.0625,260300.0,NEAR OCEAN +-121.9,36.59,42.0,2689.0,510.0,1023.0,459.0,4.6182,301000.0,NEAR OCEAN +-121.9,36.58,31.0,1431.0,,704.0,393.0,3.1977,289300.0,NEAR OCEAN +-121.91,36.59,31.0,2034.0,335.0,966.0,322.0,4.6964,291300.0,NEAR OCEAN +-121.91,36.6,35.0,2605.0,410.0,1110.0,406.0,5.5519,329500.0,NEAR OCEAN +-121.91,36.59,17.0,5039.0,833.0,1678.0,710.0,6.2323,339100.0,NEAR OCEAN +-121.89,36.6,40.0,626.0,164.0,337.0,150.0,2.7917,225000.0,<1H OCEAN +-121.89,36.6,19.0,656.0,200.0,248.0,173.0,1.2656,500000.0,<1H OCEAN +-121.88,36.6,30.0,1671.0,469.0,760.0,375.0,2.5164,178100.0,<1H OCEAN +-121.88,36.59,30.0,1822.0,505.0,932.0,496.0,2.6894,179500.0,<1H OCEAN +-121.89,36.59,18.0,2700.0,937.0,1042.0,744.0,3.1364,150000.0,NEAR OCEAN +-121.89,36.59,32.0,784.0,112.0,262.0,114.0,6.918,500001.0,NEAR OCEAN +-121.88,36.58,29.0,4910.0,871.0,3438.0,904.0,4.0432,450000.0,NEAR OCEAN +-121.86,36.58,20.0,6332.0,991.0,2668.0,955.0,5.7578,347700.0,<1H OCEAN +-121.81,36.57,13.0,3030.0,413.0,1027.0,363.0,6.9615,500001.0,<1H OCEAN +-121.87,36.61,21.0,1616.0,400.0,688.0,384.0,4.2109,278800.0,<1H OCEAN +-121.86,36.6,31.0,1044.0,285.0,762.0,301.0,3.038,195300.0,<1H OCEAN +-121.86,36.6,21.0,3634.0,1011.0,1985.0,917.0,2.9085,156300.0,<1H OCEAN +-121.86,36.6,33.0,1409.0,307.0,633.0,290.0,3.5568,191200.0,<1H OCEAN +-121.85,36.6,21.0,2381.0,701.0,1264.0,659.0,2.5372,218000.0,<1H OCEAN +-121.85,36.59,42.0,891.0,203.0,525.0,212.0,3.3156,186300.0,<1H OCEAN +-121.84,36.59,34.0,3852.0,733.0,1661.0,696.0,4.3269,221300.0,<1H OCEAN +-121.83,36.61,27.0,5665.0,1281.0,3612.0,1191.0,3.0542,142100.0,<1H OCEAN +-121.83,36.6,30.0,2748.0,502.0,1491.0,535.0,4.3472,185000.0,<1H OCEAN +-121.84,36.61,26.0,2902.0,761.0,2258.0,719.0,2.5663,128900.0,<1H OCEAN +-121.84,36.6,30.0,2958.0,691.0,1616.0,666.0,3.4643,191800.0,<1H OCEAN +-121.84,36.61,21.0,2876.0,802.0,2487.0,795.0,2.2007,112800.0,<1H OCEAN +-121.84,36.61,15.0,2190.0,586.0,1570.0,510.0,1.875,122300.0,<1H OCEAN +-121.82,36.61,24.0,2437.0,438.0,1430.0,444.0,3.8015,169100.0,<1H OCEAN +-121.83,36.61,26.0,3723.0,789.0,2563.0,747.0,3.4531,133100.0,<1H OCEAN +-121.83,36.61,27.0,2248.0,466.0,1644.0,453.0,3.2545,131200.0,<1H OCEAN +-121.83,36.62,33.0,2938.0,576.0,1516.0,568.0,3.5,162400.0,<1H OCEAN +-121.83,36.62,33.0,1771.0,398.0,1037.0,388.0,2.7708,161800.0,<1H OCEAN +-121.85,36.6,41.0,3138.0,717.0,1890.0,642.0,2.4864,140400.0,<1H OCEAN +-121.85,36.61,38.0,238.0,,191.0,67.0,1.3897,125000.0,<1H OCEAN +-121.86,36.63,37.0,338.0,109.0,231.0,100.0,2.5313,108300.0,<1H OCEAN +-121.84,36.62,26.0,32.0,8.0,27.0,10.0,2.225,150000.0,<1H OCEAN +-121.79,36.64,11.0,32627.0,6445.0,28566.0,6082.0,2.3087,118800.0,<1H OCEAN +-121.8,36.68,18.0,8581.0,1957.0,6071.0,1889.0,3.0,162200.0,<1H OCEAN +-121.79,36.68,22.0,6912.0,1513.0,3794.0,1455.0,3.0608,168300.0,<1H OCEAN +-121.8,36.72,14.0,2493.0,407.0,1296.0,418.0,5.4508,190000.0,<1H OCEAN +-121.8,36.69,12.0,3877.0,914.0,2274.0,858.0,3.4239,194800.0,<1H OCEAN +-121.77,36.71,18.0,6601.0,1395.0,3562.0,1299.0,3.512,174800.0,<1H OCEAN +-122.29,38.3,52.0,144.0,54.0,89.0,48.0,1.0096,162500.0,NEAR BAY +-122.29,38.3,52.0,935.0,224.0,315.0,207.0,1.8287,146900.0,NEAR BAY +-122.3,38.3,21.0,1108.0,269.0,524.0,274.0,2.7619,154600.0,NEAR BAY +-122.3,38.3,52.0,1128.0,207.0,450.0,197.0,3.3542,154600.0,NEAR BAY +-122.29,38.3,52.0,1219.0,288.0,847.0,283.0,1.6691,183300.0,NEAR BAY +-122.28,38.29,23.0,1398.0,388.0,1112.0,406.0,2.2366,140200.0,NEAR BAY +-122.29,38.29,52.0,3217.0,742.0,1670.0,671.0,2.4398,163100.0,NEAR BAY +-122.3,38.29,48.0,2278.0,477.0,1219.0,453.0,2.9643,154000.0,NEAR BAY +-122.3,38.29,40.0,1739.0,318.0,744.0,312.0,2.6518,156100.0,NEAR BAY +-122.29,38.28,38.0,2308.0,425.0,1272.0,406.0,3.6083,134200.0,NEAR BAY +-122.26,38.29,10.0,969.0,160.0,482.0,180.0,6.5799,218100.0,NEAR BAY +-122.27,38.29,36.0,1446.0,306.0,678.0,295.0,2.8409,153000.0,NEAR BAY +-122.28,38.3,23.0,526.0,152.0,245.0,130.0,2.0134,142500.0,NEAR BAY +-122.28,38.29,19.0,531.0,112.0,139.0,80.0,1.9875,325000.0,NEAR BAY +-122.27,38.29,20.0,3870.0,795.0,2088.0,774.0,3.3021,152700.0,NEAR BAY +-122.26,38.28,24.0,2831.0,502.0,1462.0,503.0,4.5,158300.0,NEAR BAY +-122.27,38.28,37.0,1170.0,303.0,766.0,302.0,2.6618,136200.0,NEAR BAY +-122.26,38.31,33.0,4518.0,704.0,1776.0,669.0,5.2444,281100.0,NEAR BAY +-122.27,38.32,31.0,1267.0,319.0,545.0,297.0,1.9946,206800.0,NEAR BAY +-122.27,38.31,44.0,3030.0,589.0,1373.0,582.0,2.9054,155200.0,NEAR BAY +-122.28,38.32,12.0,4609.0,1005.0,2293.0,960.0,3.4543,194500.0,NEAR BAY +-122.29,38.32,23.0,4312.0,993.0,2317.0,934.0,2.7667,153200.0,NEAR BAY +-122.3,38.32,20.0,2063.0,486.0,1045.0,460.0,2.5035,153200.0,NEAR BAY +-122.3,38.31,34.0,1797.0,395.0,1162.0,407.0,3.455,137500.0,NEAR BAY +-122.29,38.31,25.0,4927.0,1005.0,2756.0,998.0,2.7325,162900.0,NEAR BAY +-122.28,38.31,52.0,58.0,18.0,48.0,22.0,1.76,166700.0,NEAR BAY +-122.29,38.31,45.0,3075.0,754.0,1635.0,723.0,2.2721,139800.0,NEAR BAY +-122.3,38.3,44.0,3690.0,809.0,1922.0,736.0,2.6346,139800.0,NEAR BAY +-122.31,38.34,19.0,4187.0,684.0,1827.0,605.0,4.5293,210400.0,NEAR BAY +-122.31,38.33,21.0,1922.0,344.0,1051.0,342.0,3.6042,183300.0,NEAR BAY +-122.3,38.33,15.0,4741.0,956.0,2043.0,856.0,4.1862,183600.0,NEAR BAY +-122.31,38.33,26.0,2155.0,339.0,956.0,365.0,4.0132,174700.0,NEAR BAY +-122.31,38.32,33.0,2463.0,421.0,1235.0,465.0,3.7045,161500.0,NEAR BAY +-122.32,38.33,17.0,851.0,118.0,370.0,123.0,5.0877,209300.0,NEAR BAY +-122.33,38.33,15.0,3193.0,468.0,1303.0,426.0,5.3017,202600.0,NEAR BAY +-122.32,38.32,19.0,2922.0,417.0,1221.0,442.0,5.8002,238700.0,NEAR BAY +-122.32,38.32,22.0,2483.0,528.0,1478.0,492.0,4.0878,164400.0,NEAR BAY +-122.31,38.32,35.0,3997.0,762.0,2074.0,703.0,3.285,138100.0,NEAR BAY +-122.32,38.32,26.0,2710.0,498.0,1439.0,484.0,5.0,175200.0,NEAR BAY +-122.33,38.31,14.0,6778.0,947.0,2768.0,1014.0,6.1953,258900.0,NEAR BAY +-122.31,38.3,25.0,3883.0,740.0,1641.0,676.0,3.9,187300.0,NEAR BAY +-122.31,38.31,32.0,2577.0,458.0,1172.0,447.0,3.8796,175500.0,NEAR BAY +-122.31,38.3,45.0,3023.0,659.0,1789.0,657.0,3.6039,126000.0,NEAR BAY +-122.32,38.29,21.0,1607.0,356.0,834.0,352.0,2.3787,177900.0,NEAR BAY +-122.33,38.29,14.0,3541.0,499.0,1577.0,459.0,5.3351,269900.0,NEAR BAY +-122.3,38.29,20.0,1789.0,434.0,1113.0,398.0,2.4728,139700.0,NEAR BAY +-122.3,38.29,25.0,1701.0,427.0,1021.0,399.0,3.0404,142100.0,NEAR BAY +-122.3,38.28,31.0,1633.0,316.0,944.0,300.0,3.3977,158700.0,NEAR BAY +-122.31,38.27,34.0,1748.0,284.0,783.0,303.0,4.3585,194400.0,NEAR BAY +-122.3,38.27,4.0,1051.0,263.0,455.0,248.0,3.6389,130200.0,NEAR BAY +-122.3,38.25,18.0,3548.0,880.0,1476.0,699.0,3.7188,163400.0,NEAR BAY +-122.21,38.28,35.0,1273.0,210.0,555.0,181.0,4.4861,269300.0,NEAR BAY +-122.24,38.25,33.0,213.0,36.0,91.0,33.0,4.9167,187500.0,NEAR BAY +-122.28,38.22,42.0,106.0,18.0,40.0,25.0,7.5197,275000.0,NEAR BAY +-122.29,38.19,13.0,7065.0,1259.0,3864.0,1221.0,4.7472,148600.0,NEAR BAY +-122.25,38.17,34.0,778.0,137.0,406.0,136.0,4.2955,121300.0,NEAR BAY +-122.23,38.17,45.0,350.0,,225.0,72.0,1.8942,216700.0,NEAR BAY +-122.25,38.16,17.0,4459.0,944.0,1812.0,888.0,2.9375,106700.0,NEAR BAY +-122.26,38.16,23.0,2840.0,491.0,1586.0,466.0,4.0337,130400.0,NEAR BAY +-122.39,38.37,33.0,1066.0,191.0,403.0,163.0,6.8,240800.0,<1H OCEAN +-122.37,38.33,29.0,1868.0,291.0,764.0,284.0,4.825,195100.0,NEAR BAY +-122.35,38.3,18.0,3735.0,557.0,1504.0,521.0,5.6304,243100.0,NEAR BAY +-122.33,38.21,33.0,2017.0,370.0,949.0,342.0,4.625,228600.0,NEAR BAY +-122.4,38.34,33.0,1408.0,273.0,520.0,212.0,3.5781,242500.0,<1H OCEAN +-122.33,38.38,28.0,1020.0,169.0,504.0,164.0,4.5694,287500.0,INLAND +-122.4,38.41,20.0,4867.0,1015.0,1725.0,1015.0,2.5685,267600.0,INLAND +-122.32,38.35,20.0,3494.0,549.0,1673.0,541.0,5.5718,185200.0,INLAND +-122.36,38.41,18.0,1808.0,400.0,968.0,370.0,3.7067,175000.0,INLAND +-122.36,38.4,16.0,2716.0,546.0,898.0,500.0,2.2536,201200.0,INLAND +-122.18,38.35,24.0,407.0,68.0,175.0,61.0,6.0266,216700.0,INLAND +-122.21,38.41,12.0,4270.0,654.0,1624.0,598.0,5.5266,331300.0,INLAND +-122.29,38.4,28.0,2024.0,340.0,844.0,309.0,4.7833,361100.0,INLAND +-122.33,38.39,36.0,831.0,122.0,272.0,109.0,6.3427,304800.0,INLAND +-122.28,38.34,44.0,1066.0,190.0,416.0,174.0,3.6389,304000.0,NEAR BAY +-122.26,38.36,25.0,1821.0,344.0,349.0,179.0,6.9931,398800.0,INLAND +-122.26,38.33,34.0,2048.0,316.0,780.0,267.0,5.815,339200.0,NEAR BAY +-122.23,38.33,31.0,3440.0,574.0,1538.0,537.0,5.5368,325900.0,NEAR BAY +-122.24,38.31,38.0,1938.0,301.0,823.0,285.0,6.1089,280800.0,NEAR BAY +-122.52,38.53,35.0,1227.0,236.0,548.0,207.0,4.875,336700.0,INLAND +-122.48,38.48,29.0,2278.0,397.0,765.0,322.0,4.6379,348200.0,INLAND +-122.4,38.46,33.0,2542.0,466.0,1099.0,420.0,4.635,248500.0,INLAND +-122.47,38.51,18.0,2487.0,516.0,980.0,503.0,3.5506,187500.0,INLAND +-122.47,38.51,25.0,928.0,195.0,413.0,184.0,3.4904,196900.0,INLAND +-122.48,38.51,49.0,1977.0,393.0,741.0,339.0,3.1312,247600.0,INLAND +-122.48,38.5,37.0,3049.0,,1287.0,439.0,4.3125,276500.0,INLAND +-122.47,38.5,23.0,2191.0,415.0,959.0,361.0,4.1993,214500.0,INLAND +-122.45,38.51,18.0,1297.0,337.0,610.0,312.0,1.9441,184400.0,INLAND +-122.4,38.53,24.0,1741.0,289.0,564.0,231.0,3.6118,248400.0,INLAND +-122.44,38.57,26.0,2101.0,390.0,2171.0,360.0,3.6429,159700.0,INLAND +-122.45,38.58,34.0,2517.0,483.0,1324.0,464.0,3.0938,189400.0,INLAND +-122.47,38.6,20.0,1036.0,202.0,589.0,194.0,5.3698,303300.0,INLAND +-122.48,38.54,37.0,1898.0,359.0,973.0,340.0,4.2096,256600.0,INLAND +-122.46,38.53,32.0,1735.0,331.0,785.0,309.0,3.6641,275800.0,INLAND +-122.27,38.68,18.0,742.0,142.0,343.0,119.0,3.1563,98400.0,INLAND +-122.26,38.57,22.0,509.0,103.0,139.0,73.0,2.1979,152800.0,INLAND +-122.27,38.53,22.0,678.0,137.0,336.0,103.0,4.4,142500.0,INLAND +-122.18,38.49,15.0,1743.0,366.0,655.0,264.0,3.3393,146900.0,INLAND +-122.52,38.67,35.0,1705.0,321.0,708.0,253.0,3.4539,300000.0,INLAND +-122.59,38.56,43.0,2088.0,379.0,721.0,293.0,4.65,245000.0,<1H OCEAN +-122.57,38.58,18.0,2083.0,506.0,926.0,487.0,1.9925,225000.0,INLAND +-122.58,38.59,33.0,1239.0,262.0,539.0,246.0,3.5208,195800.0,INLAND +-122.58,38.58,32.0,2723.0,637.0,1549.0,556.0,2.3942,183100.0,INLAND +-122.59,38.58,18.0,3753.0,752.0,1454.0,668.0,3.7585,185700.0,<1H OCEAN +-121.07,39.15,15.0,6828.0,1319.0,3002.0,1318.0,2.4726,143400.0,INLAND +-121.07,39.09,17.0,1878.0,345.0,892.0,299.0,2.8864,143100.0,INLAND +-121.1,39.08,13.0,1110.0,216.0,602.0,209.0,2.5887,144400.0,INLAND +-121.11,39.09,16.0,1000.0,197.0,508.0,190.0,2.3062,138800.0,INLAND +-121.12,39.03,17.0,838.0,161.0,388.0,142.0,3.6563,163500.0,INLAND +-121.05,39.13,10.0,3063.0,497.0,1168.0,507.0,4.4375,185100.0,INLAND +-121.03,39.14,10.0,3138.0,524.0,1275.0,511.0,4.0775,164500.0,INLAND +-121.07,39.13,8.0,4839.0,832.0,1977.0,762.0,4.0848,155900.0,INLAND +-121.05,39.11,7.0,2767.0,423.0,1143.0,382.0,3.6333,170200.0,INLAND +-121.04,39.08,8.0,2870.0,526.0,1307.0,451.0,3.463,201700.0,INLAND +-121.0,39.09,7.0,439.0,84.0,246.0,80.0,3.0781,162500.0,INLAND +-121.08,39.02,13.0,1839.0,275.0,752.0,270.0,4.2031,209600.0,INLAND +-121.07,39.05,10.0,1813.0,311.0,827.0,287.0,3.6087,182100.0,INLAND +-121.07,39.04,9.0,2374.0,372.0,884.0,333.0,4.5042,206400.0,INLAND +-121.03,39.05,12.0,1875.0,307.0,806.0,283.0,3.9185,195200.0,INLAND +-121.06,39.04,14.0,1651.0,279.0,633.0,261.0,4.2802,194800.0,INLAND +-121.06,39.04,15.0,1999.0,287.0,585.0,246.0,5.5161,361900.0,INLAND +-121.06,39.03,11.0,1887.0,303.0,775.0,283.0,3.8417,187200.0,INLAND +-121.22,39.11,14.0,1405.0,269.0,660.0,228.0,3.0804,156800.0,INLAND +-121.19,39.05,14.0,1131.0,193.0,520.0,178.0,3.9,180400.0,INLAND +-121.14,39.1,13.0,1085.0,227.0,629.0,214.0,5.0389,171500.0,INLAND +-121.12,39.2,9.0,1431.0,254.0,681.0,221.0,3.045,170400.0,INLAND +-121.1,39.15,10.0,680.0,143.0,354.0,140.0,4.0333,161500.0,INLAND +-121.08,39.18,19.0,2323.0,397.0,963.0,379.0,3.7426,162700.0,INLAND +-121.18,39.26,14.0,811.0,161.0,352.0,121.0,3.5938,140300.0,INLAND +-121.18,39.25,9.0,3415.0,562.0,1208.0,479.0,4.3646,185900.0,INLAND +-121.2,39.25,5.0,906.0,144.0,376.0,141.0,4.3523,188200.0,INLAND +-121.18,39.23,8.0,2112.0,360.0,782.0,344.0,3.7125,175000.0,INLAND +-121.21,39.24,7.0,4194.0,673.0,1355.0,566.0,4.3702,226100.0,INLAND +-121.2,39.23,9.0,2802.0,447.0,955.0,418.0,5.2359,213300.0,INLAND +-121.18,39.19,16.0,1528.0,351.0,729.0,319.0,2.4688,138800.0,INLAND +-121.16,39.18,14.0,1006.0,187.0,462.0,185.0,3.1042,152000.0,INLAND +-121.25,39.17,9.0,999.0,189.0,411.0,176.0,2.125,151800.0,INLAND +-121.2,39.2,16.0,1039.0,182.0,554.0,184.0,2.9688,128300.0,INLAND +-121.15,39.23,13.0,3883.0,763.0,1816.0,682.0,2.8102,144400.0,INLAND +-121.24,39.22,14.0,983.0,163.0,399.0,161.0,2.2917,145100.0,INLAND +-121.23,39.27,11.0,1265.0,224.0,573.0,205.0,3.3603,162500.0,INLAND +-121.07,39.23,39.0,2099.0,433.0,929.0,423.0,1.9886,113800.0,INLAND +-121.04,39.24,48.0,1188.0,227.0,471.0,219.0,2.3125,125700.0,INLAND +-121.05,39.23,20.0,1634.0,374.0,1053.0,390.0,1.5313,154900.0,INLAND +-121.06,39.23,10.0,2229.0,537.0,982.0,512.0,2.186,132700.0,INLAND +-121.06,39.22,52.0,1749.0,422.0,837.0,391.0,2.325,109700.0,INLAND +-121.09,39.23,35.0,2637.0,511.0,1181.0,480.0,2.7813,109200.0,INLAND +-121.07,39.22,52.0,2432.0,495.0,928.0,435.0,2.425,121100.0,INLAND +-121.08,39.22,30.0,2188.0,,1033.0,437.0,2.1419,105200.0,INLAND +-121.08,39.21,17.0,3033.0,590.0,1319.0,583.0,2.4811,111800.0,INLAND +-121.09,39.22,25.0,2200.0,439.0,1045.0,419.0,2.6042,116700.0,INLAND +-121.07,39.2,45.0,204.0,62.0,133.0,51.0,1.0,90600.0,INLAND +-121.02,39.23,16.0,1427.0,319.0,642.0,333.0,1.4241,125000.0,INLAND +-121.04,39.22,14.0,1889.0,471.0,853.0,399.0,2.25,112500.0,INLAND +-121.03,39.21,28.0,2843.0,535.0,1310.0,525.0,3.2337,123100.0,INLAND +-121.05,39.2,48.0,1759.0,389.0,716.0,350.0,2.3125,108300.0,INLAND +-121.06,39.21,52.0,1452.0,309.0,637.0,299.0,2.2083,103900.0,INLAND +-121.05,39.21,43.0,1264.0,273.0,611.0,260.0,2.535,117100.0,INLAND +-120.94,39.22,12.0,1321.0,268.0,661.0,232.0,4.0062,153800.0,INLAND +-120.83,39.27,14.0,3338.0,608.0,1373.0,562.0,3.67,160100.0,INLAND +-121.0,39.23,15.0,2809.0,450.0,1267.0,408.0,4.0426,191700.0,INLAND +-120.99,39.22,16.0,1497.0,275.0,737.0,243.0,2.8942,182500.0,INLAND +-120.99,39.2,15.0,2993.0,562.0,1296.0,518.0,3.3009,156800.0,INLAND +-120.93,39.17,13.0,2331.0,464.0,1110.0,419.0,3.6563,164900.0,INLAND +-120.99,39.13,14.0,770.0,116.0,285.0,116.0,3.6434,155400.0,INLAND +-120.99,39.18,23.0,2550.0,457.0,1016.0,405.0,3.6607,153000.0,INLAND +-121.0,39.16,10.0,1170.0,225.0,537.0,194.0,3.2813,163200.0,INLAND +-121.04,39.19,17.0,856.0,167.0,518.0,170.0,3.5859,144300.0,INLAND +-121.02,39.17,17.0,2277.0,459.0,1149.0,476.0,3.2303,149500.0,INLAND +-121.02,39.27,52.0,3720.0,707.0,1424.0,609.0,3.2,155000.0,INLAND +-121.03,39.26,49.0,3739.0,759.0,1422.0,606.0,2.4283,143100.0,INLAND +-121.0,39.26,14.0,810.0,151.0,302.0,138.0,3.1094,136100.0,INLAND +-121.02,39.25,52.0,1549.0,275.0,604.0,249.0,2.2278,155400.0,INLAND +-121.06,39.29,14.0,1864.0,331.0,894.0,332.0,3.4028,171800.0,INLAND +-120.94,39.32,14.0,3120.0,595.0,1569.0,556.0,3.5385,157400.0,INLAND +-121.06,39.25,17.0,3127.0,539.0,1390.0,520.0,3.9537,172800.0,INLAND +-120.89,39.3,17.0,2282.0,431.0,974.0,371.0,3.5417,155100.0,INLAND +-120.99,39.26,16.0,2616.0,422.0,1090.0,425.0,3.7917,179200.0,INLAND +-120.91,39.39,16.0,352.0,105.0,226.0,82.0,1.6094,79500.0,INLAND +-121.03,39.37,15.0,1337.0,326.0,1172.0,306.0,2.6341,85000.0,INLAND +-121.13,39.31,17.0,3442.0,705.0,1693.0,619.0,2.8102,128900.0,INLAND +-120.74,39.39,18.0,453.0,117.0,152.0,77.0,1.3523,85700.0,INLAND +-120.09,39.4,17.0,1076.0,283.0,171.0,64.0,2.125,83900.0,INLAND +-120.17,39.33,18.0,1046.0,204.0,486.0,179.0,4.119,110900.0,INLAND +-120.2,39.33,26.0,1988.0,379.0,905.0,321.0,3.7841,109500.0,INLAND +-120.19,39.32,16.0,1536.0,298.0,646.0,208.0,2.3594,155700.0,INLAND +-120.17,39.32,14.0,2421.0,489.0,1000.0,354.0,3.5652,119800.0,INLAND +-120.17,39.33,10.0,614.0,141.0,195.0,95.0,0.9283,116300.0,INLAND +-120.1,39.37,10.0,2325.0,410.0,1016.0,373.0,4.5208,117300.0,INLAND +-120.1,39.33,9.0,2738.0,510.0,1193.0,412.0,4.3958,124800.0,INLAND +-120.15,39.36,9.0,2254.0,400.0,694.0,243.0,5.6856,138100.0,INLAND +-120.26,39.32,24.0,6012.0,1227.0,780.0,358.0,3.0043,122100.0,INLAND +-120.35,39.34,29.0,1986.0,474.0,337.0,100.0,4.0278,95800.0,INLAND +-120.27,39.35,11.0,2520.0,401.0,397.0,165.0,4.665,145600.0,INLAND +-120.25,39.34,9.0,2739.0,555.0,294.0,110.0,3.1842,162500.0,INLAND +-120.24,39.35,8.0,4195.0,725.0,291.0,115.0,3.4792,180800.0,INLAND +-120.23,39.36,7.0,2045.0,358.0,245.0,92.0,4.0481,152300.0,INLAND +-120.22,39.35,8.0,1872.0,281.0,203.0,71.0,4.5882,198400.0,INLAND +-120.21,39.35,7.0,914.0,159.0,85.0,34.0,4.7917,187500.0,INLAND +-120.19,39.35,7.0,2611.0,395.0,482.0,159.0,5.0622,174100.0,INLAND +-117.95,33.94,28.0,2851.0,496.0,1287.0,496.0,5.0782,264100.0,<1H OCEAN +-117.96,33.94,34.0,2228.0,399.0,1159.0,378.0,4.8906,228900.0,<1H OCEAN +-117.97,33.94,36.0,1870.0,338.0,947.0,324.0,4.1205,217000.0,<1H OCEAN +-117.97,33.94,34.0,1632.0,263.0,690.0,268.0,5.5608,255800.0,<1H OCEAN +-117.97,33.94,35.0,1928.0,360.0,1056.0,366.0,4.0893,215700.0,<1H OCEAN +-117.97,33.93,31.0,1975.0,373.0,918.0,347.0,4.4107,202000.0,<1H OCEAN +-117.97,33.93,33.0,1700.0,369.0,981.0,362.0,4.5461,194000.0,<1H OCEAN +-117.96,33.93,31.0,1471.0,321.0,841.0,330.0,3.46,232800.0,<1H OCEAN +-117.96,33.93,29.0,2316.0,522.0,1275.0,501.0,3.776,192600.0,<1H OCEAN +-117.96,33.94,31.0,2397.0,518.0,1407.0,476.0,2.6641,185200.0,<1H OCEAN +-117.94,33.93,33.0,1770.0,370.0,1346.0,366.0,4.0833,162500.0,<1H OCEAN +-117.94,33.93,34.0,1475.0,319.0,698.0,293.0,3.8194,186000.0,<1H OCEAN +-117.94,33.93,14.0,999.0,232.0,1037.0,244.0,2.7125,166100.0,<1H OCEAN +-117.95,33.93,25.0,3445.0,801.0,2400.0,750.0,3.4702,161900.0,<1H OCEAN +-117.95,33.93,37.0,2633.0,630.0,1904.0,630.0,2.6123,161300.0,<1H OCEAN +-117.96,33.93,15.0,2014.0,419.0,839.0,390.0,4.7446,175400.0,<1H OCEAN +-117.97,33.92,32.0,2620.0,398.0,1296.0,429.0,5.7796,241300.0,<1H OCEAN +-117.97,33.93,35.0,1887.0,328.0,989.0,351.0,4.1321,198100.0,<1H OCEAN +-117.97,33.92,24.0,2017.0,416.0,900.0,436.0,3.0,251400.0,<1H OCEAN +-117.96,33.92,18.0,3744.0,1027.0,1654.0,912.0,3.2158,215000.0,<1H OCEAN +-117.95,33.92,18.0,2825.0,660.0,1590.0,643.0,3.6106,153600.0,<1H OCEAN +-117.94,33.92,28.0,639.0,179.0,1062.0,169.0,3.0588,145200.0,<1H OCEAN +-117.95,33.92,32.0,1661.0,312.0,1201.0,302.0,4.0,178200.0,<1H OCEAN +-117.95,33.92,11.0,3127.0,706.0,1594.0,694.0,4.3426,141300.0,<1H OCEAN +-117.94,33.92,32.0,1053.0,207.0,1038.0,222.0,4.6696,165500.0,<1H OCEAN +-117.95,33.92,13.0,2312.0,592.0,2038.0,559.0,3.1378,137000.0,<1H OCEAN +-117.94,33.94,25.0,3250.0,546.0,1452.0,501.0,5.1084,303800.0,<1H OCEAN +-117.94,33.94,30.0,1596.0,307.0,845.0,309.0,4.5096,241100.0,<1H OCEAN +-117.95,33.94,31.0,2237.0,431.0,1135.0,434.0,4.45,267900.0,<1H OCEAN +-117.94,33.94,26.0,1962.0,540.0,1236.0,520.0,2.2156,145000.0,<1H OCEAN +-117.93,33.94,30.0,2658.0,382.0,1135.0,392.0,6.0516,245000.0,<1H OCEAN +-117.93,33.94,28.0,3664.0,719.0,1820.0,657.0,4.225,224700.0,<1H OCEAN +-117.93,33.93,25.0,2431.0,534.0,1702.0,523.0,3.7933,184400.0,<1H OCEAN +-117.92,33.94,27.0,4566.0,620.0,2045.0,664.0,5.583,267700.0,<1H OCEAN +-117.92,33.94,30.0,2506.0,394.0,1255.0,421.0,4.7813,198200.0,<1H OCEAN +-117.93,33.92,34.0,2271.0,437.0,1393.0,433.0,4.2443,174400.0,<1H OCEAN +-117.93,33.93,37.0,1128.0,273.0,931.0,234.0,2.8,137500.0,<1H OCEAN +-117.93,33.93,33.0,1626.0,378.0,1062.0,356.0,2.1944,139600.0,<1H OCEAN +-117.92,33.93,12.0,4415.0,890.0,1532.0,854.0,3.75,166300.0,<1H OCEAN +-117.91,33.93,21.0,2578.0,363.0,1207.0,350.0,6.2452,291700.0,<1H OCEAN +-117.91,33.94,15.0,5799.0,842.0,2314.0,787.0,6.3433,350500.0,<1H OCEAN +-117.89,33.94,20.0,3349.0,685.0,1822.0,675.0,4.7216,227000.0,<1H OCEAN +-117.88,33.93,17.0,6100.0,861.0,2771.0,866.0,7.6486,306700.0,<1H OCEAN +-117.9,33.93,12.0,4325.0,1191.0,1897.0,1080.0,3.3173,247400.0,<1H OCEAN +-117.89,33.92,17.0,2936.0,555.0,1381.0,535.0,5.4617,190300.0,<1H OCEAN +-117.9,33.92,27.0,698.0,116.0,391.0,126.0,5.9177,267600.0,<1H OCEAN +-117.91,33.92,21.0,380.0,91.0,398.0,70.0,4.7222,208300.0,<1H OCEAN +-117.91,33.91,27.0,2181.0,501.0,1555.0,488.0,3.6106,196400.0,<1H OCEAN +-117.91,33.91,34.0,1763.0,303.0,894.0,297.0,5.0096,221700.0,<1H OCEAN +-117.91,33.91,32.0,1530.0,301.0,666.0,276.0,4.125,230200.0,<1H OCEAN +-117.91,33.91,24.0,2249.0,379.0,1015.0,385.0,4.9766,267100.0,<1H OCEAN +-117.89,33.92,34.0,1473.0,312.0,1025.0,315.0,3.8333,170400.0,<1H OCEAN +-117.89,33.91,33.0,1264.0,224.0,527.0,227.0,3.7321,216500.0,<1H OCEAN +-117.9,33.91,36.0,1376.0,257.0,687.0,221.0,3.5403,195400.0,<1H OCEAN +-117.89,33.92,8.0,2120.0,544.0,1281.0,470.0,3.4954,159500.0,<1H OCEAN +-117.89,33.92,14.0,1562.0,373.0,609.0,328.0,2.3935,125000.0,<1H OCEAN +-117.89,33.9,16.0,1426.0,216.0,652.0,226.0,6.5284,288700.0,<1H OCEAN +-117.89,33.9,23.0,1533.0,226.0,693.0,230.0,7.898,258200.0,<1H OCEAN +-117.9,33.9,19.0,2176.0,414.0,1002.0,402.0,4.9743,193500.0,<1H OCEAN +-117.9,33.91,26.0,2885.0,476.0,1227.0,439.0,4.9524,226600.0,<1H OCEAN +-117.9,33.91,33.0,4181.0,804.0,2049.0,834.0,4.3103,201600.0,<1H OCEAN +-117.92,33.92,19.0,2181.0,400.0,1272.0,337.0,5.1952,302100.0,<1H OCEAN +-117.92,33.91,33.0,2868.0,382.0,1204.0,412.0,6.1825,336900.0,<1H OCEAN +-117.92,33.91,27.0,2558.0,310.0,891.0,316.0,9.5561,411800.0,<1H OCEAN +-117.91,33.9,27.0,829.0,114.0,383.0,133.0,9.3125,293500.0,<1H OCEAN +-117.92,33.89,18.0,2895.0,487.0,1116.0,429.0,5.4716,400000.0,<1H OCEAN +-117.92,33.9,13.0,1814.0,320.0,1010.0,313.0,6.3489,337900.0,<1H OCEAN +-117.93,33.91,24.0,1698.0,297.0,676.0,273.0,5.2017,364600.0,<1H OCEAN +-117.9,33.9,18.0,3821.0,576.0,1430.0,568.0,6.9399,349600.0,<1H OCEAN +-117.9,33.88,28.0,2696.0,346.0,947.0,356.0,9.0055,375400.0,<1H OCEAN +-117.89,33.89,17.0,1671.0,192.0,678.0,206.0,13.1107,467600.0,<1H OCEAN +-117.92,33.89,12.0,1859.0,393.0,622.0,316.0,5.0258,161800.0,<1H OCEAN +-117.97,33.91,19.0,8096.0,1318.0,3853.0,1313.0,6.0076,269500.0,<1H OCEAN +-117.96,33.9,9.0,1899.0,284.0,1070.0,293.0,7.2532,381500.0,<1H OCEAN +-117.95,33.9,15.0,3057.0,479.0,1679.0,498.0,6.8429,372600.0,<1H OCEAN +-117.96,33.9,10.0,2423.0,356.0,1213.0,347.0,6.5635,346900.0,<1H OCEAN +-117.98,33.9,6.0,1537.0,347.0,506.0,280.0,4.8264,146800.0,<1H OCEAN +-117.96,33.88,25.0,3578.0,461.0,1588.0,466.0,6.2556,341300.0,<1H OCEAN +-117.95,33.89,17.0,1665.0,247.0,755.0,254.0,6.5764,349000.0,<1H OCEAN +-117.96,33.89,24.0,1332.0,252.0,625.0,230.0,4.4375,334100.0,<1H OCEAN +-117.94,33.91,18.0,8836.0,1527.0,3946.0,1451.0,5.6441,313000.0,<1H OCEAN +-117.93,33.9,30.0,2629.0,331.0,956.0,319.0,9.9071,500001.0,<1H OCEAN +-117.94,33.89,30.0,2577.0,404.0,1076.0,374.0,6.7528,459600.0,<1H OCEAN +-117.94,33.88,35.0,2159.0,343.0,833.0,335.0,5.3738,365100.0,<1H OCEAN +-117.94,33.9,27.0,2029.0,242.0,711.0,254.0,9.7956,500001.0,<1H OCEAN +-117.98,33.87,25.0,2037.0,515.0,1435.0,496.0,3.3199,188800.0,<1H OCEAN +-117.98,33.87,29.0,1310.0,332.0,937.0,294.0,3.8068,158700.0,<1H OCEAN +-117.98,33.86,25.0,1025.0,266.0,726.0,183.0,3.875,137500.0,<1H OCEAN +-117.98,33.86,26.0,1240.0,285.0,781.0,315.0,4.1287,205800.0,<1H OCEAN +-117.97,33.87,28.0,1784.0,440.0,1255.0,433.0,3.7054,169200.0,<1H OCEAN +-117.97,33.86,34.0,2138.0,490.0,1682.0,463.0,3.6006,161700.0,<1H OCEAN +-117.97,33.86,35.0,1691.0,367.0,1265.0,378.0,3.5855,174300.0,<1H OCEAN +-117.97,33.86,12.0,1370.0,367.0,1022.0,296.0,3.6471,141700.0,<1H OCEAN +-117.96,33.86,35.0,2146.0,430.0,1230.0,429.0,3.7813,184900.0,<1H OCEAN +-117.96,33.86,35.0,2181.0,371.0,1249.0,358.0,4.2937,183200.0,<1H OCEAN +-117.96,33.87,35.0,1972.0,367.0,1152.0,356.0,3.7222,187500.0,<1H OCEAN +-117.95,33.86,35.0,2375.0,439.0,1343.0,424.0,4.53,193500.0,<1H OCEAN +-117.95,33.86,35.0,2478.0,431.0,1333.0,427.0,5.2099,191400.0,<1H OCEAN +-117.96,33.86,32.0,2366.0,505.0,1283.0,477.0,3.3516,190000.0,<1H OCEAN +-117.94,33.88,46.0,1747.0,312.0,770.0,296.0,5.4217,256000.0,<1H OCEAN +-117.95,33.87,34.0,1599.0,296.0,938.0,307.0,4.285,184900.0,<1H OCEAN +-117.95,33.87,35.0,1854.0,383.0,1115.0,381.0,4.4784,185200.0,<1H OCEAN +-117.95,33.87,22.0,1432.0,335.0,746.0,296.0,2.0227,55000.0,<1H OCEAN +-117.96,33.87,27.0,890.0,289.0,416.0,200.0,3.141,167500.0,<1H OCEAN +-117.96,33.87,37.0,1785.0,360.0,1155.0,403.0,4.7984,175800.0,<1H OCEAN +-117.95,33.88,34.0,1939.0,355.0,817.0,314.0,3.6705,275000.0,<1H OCEAN +-117.94,33.86,36.0,2824.0,493.0,1394.0,507.0,4.6477,194700.0,<1H OCEAN +-117.94,33.86,33.0,1013.0,312.0,706.0,266.0,2.1432,197500.0,<1H OCEAN +-117.95,33.86,36.0,2038.0,343.0,1066.0,346.0,5.197,195700.0,<1H OCEAN +-117.93,33.86,36.0,1672.0,318.0,1173.0,337.0,4.5774,182100.0,<1H OCEAN +-117.93,33.86,35.0,1216.0,225.0,893.0,228.0,4.0288,184000.0,<1H OCEAN +-117.94,33.86,35.0,1235.0,227.0,875.0,220.0,4.6964,183100.0,<1H OCEAN +-117.94,33.86,35.0,2127.0,417.0,1247.0,378.0,4.75,185600.0,<1H OCEAN +-117.93,33.88,52.0,2157.0,362.0,1001.0,373.0,5.1237,240000.0,<1H OCEAN +-117.93,33.87,10.0,1277.0,488.0,730.0,417.0,1.4803,137500.0,<1H OCEAN +-117.94,33.87,46.0,2066.0,450.0,1275.0,448.0,3.9375,187000.0,<1H OCEAN +-117.94,33.88,35.0,1694.0,296.0,679.0,282.0,4.3333,239300.0,<1H OCEAN +-117.92,33.87,44.0,308.0,87.0,301.0,100.0,2.1991,191100.0,<1H OCEAN +-117.92,33.87,36.0,1125.0,285.0,966.0,257.0,2.8438,162500.0,<1H OCEAN +-117.93,33.87,52.0,950.0,229.0,429.0,185.0,2.315,182100.0,<1H OCEAN +-117.93,33.88,45.0,1306.0,293.0,585.0,260.0,4.0812,241700.0,<1H OCEAN +-117.93,33.88,32.0,2458.0,359.0,967.0,409.0,7.2893,293500.0,<1H OCEAN +-117.92,33.88,52.0,1270.0,276.0,609.0,211.0,3.75,232500.0,<1H OCEAN +-117.91,33.88,34.0,1851.0,291.0,784.0,290.0,5.2336,235600.0,<1H OCEAN +-117.92,33.88,32.0,1683.0,273.0,719.0,263.0,5.3649,243600.0,<1H OCEAN +-117.92,33.88,32.0,1632.0,244.0,575.0,235.0,5.3986,318700.0,<1H OCEAN +-117.91,33.89,30.0,1631.0,212.0,523.0,216.0,7.875,351900.0,<1H OCEAN +-117.9,33.88,35.0,2062.0,353.0,991.0,357.0,5.2897,230400.0,<1H OCEAN +-117.9,33.88,34.0,1396.0,245.0,661.0,261.0,4.675,215400.0,<1H OCEAN +-117.9,33.87,28.0,2315.0,538.0,1360.0,504.0,2.9861,218600.0,<1H OCEAN +-117.9,33.87,34.0,1411.0,292.0,1040.0,299.0,3.4338,195200.0,<1H OCEAN +-117.91,33.87,29.0,1121.0,,762.0,276.0,2.5,143800.0,<1H OCEAN +-117.91,33.87,52.0,2031.0,506.0,1191.0,463.0,2.9076,177300.0,<1H OCEAN +-117.88,33.89,18.0,1616.0,532.0,866.0,496.0,3.6435,119100.0,<1H OCEAN +-117.88,33.89,16.0,959.0,176.0,353.0,185.0,4.5,173300.0,<1H OCEAN +-117.88,33.88,15.0,957.0,360.0,615.0,370.0,3.0263,162500.0,<1H OCEAN +-117.89,33.88,15.0,1655.0,626.0,1549.0,582.0,1.9127,175000.0,<1H OCEAN +-117.89,33.88,33.0,1582.0,256.0,771.0,240.0,5.3836,229600.0,<1H OCEAN +-117.89,33.88,27.0,2091.0,336.0,1037.0,332.0,5.7519,243400.0,<1H OCEAN +-117.89,33.87,25.0,1492.0,439.0,755.0,389.0,3.0893,188200.0,<1H OCEAN +-117.89,33.87,32.0,1133.0,216.0,693.0,228.0,3.3594,202100.0,<1H OCEAN +-117.88,33.87,35.0,1919.0,349.0,1302.0,345.0,5.6409,190900.0,<1H OCEAN +-117.89,33.87,32.0,1569.0,422.0,835.0,386.0,3.0465,148900.0,<1H OCEAN +-117.93,33.87,45.0,1006.0,230.0,1237.0,237.0,3.3472,168000.0,<1H OCEAN +-117.93,33.86,36.0,931.0,279.0,778.0,303.0,2.6563,155000.0,<1H OCEAN +-117.93,33.86,17.0,1627.0,398.0,1216.0,369.0,3.3438,186600.0,<1H OCEAN +-117.93,33.86,35.0,931.0,181.0,516.0,174.0,5.5867,182500.0,<1H OCEAN +-117.93,33.87,29.0,1221.0,371.0,1822.0,326.0,1.7935,162500.0,<1H OCEAN +-117.89,33.86,28.0,1395.0,398.0,1220.0,362.0,3.3008,193800.0,<1H OCEAN +-117.91,33.86,26.0,2296.0,570.0,1415.0,527.0,2.4732,165800.0,<1H OCEAN +-117.92,33.86,26.0,745.0,161.0,247.0,151.0,3.6375,133900.0,<1H OCEAN +-117.92,33.87,33.0,1597.0,,1888.0,423.0,3.055,157800.0,<1H OCEAN +-117.87,33.91,16.0,2434.0,455.0,1017.0,476.0,4.2188,176300.0,<1H OCEAN +-117.88,33.9,21.0,3180.0,434.0,1413.0,391.0,6.5945,277300.0,<1H OCEAN +-117.88,33.9,15.0,1705.0,478.0,759.0,479.0,3.5333,114400.0,<1H OCEAN +-117.88,33.89,19.0,3583.0,911.0,2300.0,871.0,3.0214,218400.0,<1H OCEAN +-117.88,33.89,17.0,3218.0,923.0,1701.0,824.0,3.6946,265500.0,<1H OCEAN +-117.87,33.89,25.0,1142.0,162.0,486.0,150.0,7.1472,270100.0,<1H OCEAN +-117.86,33.91,16.0,2889.0,423.0,1227.0,401.0,6.4514,270800.0,<1H OCEAN +-117.86,33.9,17.0,1452.0,188.0,630.0,194.0,6.9113,285200.0,<1H OCEAN +-117.86,33.9,25.0,3205.0,409.0,1291.0,408.0,7.2478,299200.0,<1H OCEAN +-117.87,33.9,21.0,3181.0,447.0,1416.0,469.0,6.8268,280300.0,<1H OCEAN +-117.86,33.89,22.0,4386.0,593.0,1915.0,592.0,6.6897,289800.0,<1H OCEAN +-117.86,33.89,24.0,2002.0,253.0,820.0,241.0,6.9612,274500.0,<1H OCEAN +-117.87,33.89,19.0,1674.0,243.0,786.0,234.0,6.4218,275000.0,<1H OCEAN +-117.86,33.88,19.0,1621.0,328.0,871.0,322.0,3.7361,201400.0,<1H OCEAN +-117.87,33.89,17.0,1441.0,530.0,769.0,456.0,2.425,171700.0,<1H OCEAN +-117.87,33.89,22.0,2340.0,664.0,1382.0,546.0,3.343,184600.0,<1H OCEAN +-117.87,33.88,25.0,1808.0,440.0,1342.0,454.0,3.025,156900.0,<1H OCEAN +-117.87,33.88,24.0,2655.0,702.0,1519.0,708.0,3.3036,183900.0,<1H OCEAN +-117.87,33.88,28.0,3333.0,752.0,2026.0,722.0,3.5667,190700.0,<1H OCEAN +-117.87,33.88,28.0,2612.0,602.0,1682.0,563.0,3.6417,204300.0,<1H OCEAN +-117.86,33.87,12.0,1600.0,251.0,685.0,256.0,5.1784,254000.0,<1H OCEAN +-117.87,33.85,33.0,45.0,11.0,34.0,10.0,5.2949,350000.0,<1H OCEAN +-117.85,33.86,18.0,329.0,72.0,209.0,71.0,4.6806,187500.0,<1H OCEAN +-117.85,33.89,22.0,4020.0,655.0,1486.0,635.0,5.9639,262300.0,<1H OCEAN +-117.85,33.88,14.0,4753.0,681.0,2138.0,678.0,7.3658,288500.0,<1H OCEAN +-117.86,33.88,20.0,3977.0,540.0,1886.0,541.0,6.5843,272200.0,<1H OCEAN +-117.85,33.87,15.0,5078.0,806.0,2569.0,759.0,5.6549,301900.0,<1H OCEAN +-117.85,33.9,20.0,4026.0,648.0,1997.0,650.0,5.5918,260500.0,<1H OCEAN +-117.85,33.9,25.0,1548.0,256.0,811.0,263.0,5.2037,242200.0,<1H OCEAN +-117.84,33.89,24.0,3935.0,625.0,1912.0,593.0,5.7951,226900.0,<1H OCEAN +-117.85,33.89,24.0,3326.0,503.0,1616.0,494.0,5.7457,240600.0,<1H OCEAN +-117.88,33.87,21.0,1519.0,388.0,1203.0,366.0,3.2083,145300.0,<1H OCEAN +-117.87,33.86,19.0,2232.0,448.0,1149.0,417.0,3.1534,324400.0,<1H OCEAN +-117.87,33.87,7.0,2663.0,642.0,1367.0,677.0,4.6563,162400.0,<1H OCEAN +-117.87,33.87,15.0,1898.0,476.0,1766.0,455.0,2.4929,158500.0,<1H OCEAN +-117.87,33.87,16.0,1332.0,368.0,1534.0,295.0,3.0227,297100.0,<1H OCEAN +-117.86,33.87,19.0,1591.0,279.0,891.0,237.0,5.6573,216000.0,<1H OCEAN +-117.88,33.85,18.0,2705.0,713.0,2726.0,674.0,2.7759,200000.0,<1H OCEAN +-117.87,33.86,28.0,2292.0,531.0,2197.0,509.0,3.4856,142800.0,<1H OCEAN +-117.88,33.85,22.0,1105.0,241.0,971.0,249.0,3.1667,113900.0,<1H OCEAN +-117.81,33.89,13.0,3252.0,583.0,1546.0,557.0,5.8243,297900.0,<1H OCEAN +-117.82,33.88,18.0,1982.0,300.0,1027.0,324.0,7.0526,327500.0,<1H OCEAN +-117.82,33.89,24.0,2168.0,421.0,1050.0,397.0,4.6172,238300.0,<1H OCEAN +-117.81,33.88,19.0,2968.0,503.0,1430.0,459.0,5.3339,371700.0,<1H OCEAN +-117.82,33.89,21.0,3079.0,509.0,1431.0,480.0,4.0714,278900.0,<1H OCEAN +-117.78,33.86,16.0,3471.0,708.0,1769.0,691.0,4.1064,246100.0,<1H OCEAN +-117.76,33.87,16.0,3973.0,595.0,1971.0,575.0,6.4265,263700.0,<1H OCEAN +-117.83,33.9,23.0,2446.0,360.0,1196.0,359.0,6.5755,272800.0,<1H OCEAN +-117.84,33.9,24.0,1723.0,223.0,707.0,219.0,7.0352,299600.0,<1H OCEAN +-117.83,33.89,25.0,1737.0,270.0,840.0,265.0,4.625,245700.0,<1H OCEAN +-117.83,33.88,23.0,2365.0,355.0,1209.0,347.0,6.0132,259400.0,<1H OCEAN +-117.84,33.89,19.0,3544.0,542.0,1787.0,560.0,6.7837,264300.0,<1H OCEAN +-117.83,33.88,18.0,2112.0,340.0,1048.0,315.0,6.9308,231700.0,<1H OCEAN +-117.82,33.88,15.0,5392.0,895.0,2531.0,827.0,6.2185,280300.0,<1H OCEAN +-117.83,33.87,5.0,6971.0,1449.0,3521.0,1423.0,5.2131,243900.0,<1H OCEAN +-117.81,33.88,19.0,2265.0,283.0,904.0,279.0,9.2327,461300.0,<1H OCEAN +-117.81,33.87,19.0,4491.0,680.0,2457.0,702.0,6.0591,233500.0,<1H OCEAN +-117.8,33.87,16.0,5954.0,1281.0,3107.0,1209.0,4.2566,206100.0,<1H OCEAN +-117.81,33.86,18.0,133.0,29.0,95.0,23.0,3.5625,235000.0,<1H OCEAN +-117.87,33.92,14.0,4039.0,669.0,1905.0,670.0,6.3303,303000.0,<1H OCEAN +-117.88,33.92,13.0,3292.0,727.0,1565.0,698.0,5.457,308800.0,<1H OCEAN +-117.85,33.92,11.0,3331.0,410.0,1460.0,416.0,8.0287,371800.0,<1H OCEAN +-117.87,33.92,17.0,4575.0,764.0,2054.0,737.0,6.0571,272400.0,<1H OCEAN +-117.83,33.93,14.0,1956.0,282.0,671.0,269.0,6.5841,306400.0,<1H OCEAN +-117.8,33.92,16.0,5819.0,986.0,2306.0,914.0,4.6315,277500.0,<1H OCEAN +-117.8,33.89,25.0,3121.0,381.0,1278.0,389.0,7.0217,357900.0,<1H OCEAN +-117.79,33.88,17.0,8562.0,1351.0,3822.0,1316.0,6.0829,252600.0,<1H OCEAN +-117.78,33.87,16.0,5609.0,952.0,2624.0,934.0,5.3307,169600.0,<1H OCEAN +-117.78,33.88,16.0,1800.0,238.0,871.0,234.0,6.6678,301900.0,<1H OCEAN +-117.78,33.9,14.0,6239.0,901.0,2923.0,904.0,6.5437,268200.0,<1H OCEAN +-117.82,33.9,25.0,1137.0,170.0,524.0,164.0,7.5744,259300.0,<1H OCEAN +-117.8,33.9,22.0,3760.0,482.0,1485.0,461.0,7.8537,354900.0,<1H OCEAN +-117.74,33.89,4.0,37937.0,5471.0,16122.0,5189.0,7.4947,366300.0,<1H OCEAN +-117.76,33.88,9.0,4838.0,759.0,2090.0,695.0,6.6536,307800.0,<1H OCEAN +-117.77,33.88,8.0,4874.0,627.0,2070.0,619.0,8.1117,410200.0,<1H OCEAN +-117.78,33.89,7.0,9729.0,1210.0,4160.0,1214.0,8.9088,415300.0,<1H OCEAN +-117.8,33.85,23.0,3038.0,470.0,1568.0,438.0,5.6403,233000.0,<1H OCEAN +-117.82,33.85,21.0,2603.0,404.0,1350.0,390.0,6.057,235900.0,<1H OCEAN +-117.82,33.85,18.0,1810.0,305.0,1189.0,326.0,5.2227,213500.0,<1H OCEAN +-117.8,33.85,16.0,4151.0,637.0,1558.0,604.0,5.806,304900.0,<1H OCEAN +-117.82,33.84,25.0,1788.0,203.0,676.0,217.0,10.1299,454300.0,<1H OCEAN +-117.81,33.84,17.0,4343.0,515.0,1605.0,484.0,10.5981,460100.0,<1H OCEAN +-117.79,33.84,9.0,10484.0,1603.0,4005.0,1419.0,8.3931,365300.0,<1H OCEAN +-117.78,33.85,16.0,3781.0,504.0,1665.0,499.0,7.2554,335600.0,<1H OCEAN +-117.78,33.86,16.0,4390.0,660.0,2146.0,633.0,6.1504,266000.0,<1H OCEAN +-117.76,33.87,16.0,3182.0,429.0,1663.0,428.0,7.0592,288200.0,<1H OCEAN +-117.78,33.81,23.0,1986.0,278.0,826.0,260.0,7.7752,380000.0,<1H OCEAN +-117.77,33.8,16.0,3973.0,483.0,1373.0,452.0,9.8074,417000.0,<1H OCEAN +-117.8,33.79,13.0,2021.0,362.0,1081.0,341.0,4.3269,231400.0,<1H OCEAN +-117.79,33.8,11.0,10535.0,1620.0,4409.0,1622.0,6.67,283200.0,<1H OCEAN +-117.77,33.85,13.0,5415.0,827.0,2061.0,714.0,7.3681,353100.0,<1H OCEAN +-117.76,33.84,15.0,3764.0,510.0,1448.0,468.0,8.7124,410500.0,<1H OCEAN +-117.75,33.84,16.0,3491.0,502.0,1496.0,509.0,6.6207,270500.0,<1H OCEAN +-117.76,33.83,15.0,3086.0,457.0,1262.0,436.0,6.4415,300700.0,<1H OCEAN +-117.77,33.84,5.0,4380.0,715.0,1913.0,741.0,6.7274,266400.0,<1H OCEAN +-117.76,33.86,14.0,3666.0,442.0,1400.0,433.0,10.1316,500001.0,<1H OCEAN +-117.75,33.83,14.0,2452.0,296.0,954.0,275.0,8.2375,388300.0,<1H OCEAN +-117.74,33.85,4.0,5416.0,820.0,1753.0,583.0,6.9544,314000.0,<1H OCEAN +-117.78,33.82,12.0,6208.0,750.0,2443.0,739.0,9.1808,413700.0,<1H OCEAN +-117.76,33.81,2.0,582.0,70.0,199.0,64.0,7.1193,500001.0,<1H OCEAN +-117.81,33.8,25.0,2765.0,475.0,1666.0,474.0,6.0531,230700.0,<1H OCEAN +-117.81,33.79,25.0,5950.0,1155.0,4528.0,1064.0,4.2564,204600.0,<1H OCEAN +-117.8,33.81,14.0,1206.0,142.0,572.0,149.0,8.847,388700.0,<1H OCEAN +-117.8,33.78,18.0,3548.0,474.0,1506.0,449.0,6.925,290300.0,<1H OCEAN +-117.8,33.78,17.0,4138.0,805.0,2442.0,780.0,4.7804,242000.0,<1H OCEAN +-117.69,33.8,5.0,3178.0,631.0,1467.0,581.0,5.2541,237100.0,<1H OCEAN +-117.66,33.61,16.0,2022.0,254.0,789.0,270.0,8.4112,286900.0,<1H OCEAN +-117.66,33.62,16.0,4065.0,661.0,1962.0,636.0,6.2177,256600.0,<1H OCEAN +-117.67,33.61,24.0,3859.0,661.0,1972.0,624.0,5.7871,227400.0,<1H OCEAN +-117.66,33.61,17.0,3464.0,519.0,1713.0,530.0,6.0471,248400.0,<1H OCEAN +-117.66,33.61,21.0,1932.0,266.0,860.0,286.0,7.1497,274000.0,<1H OCEAN +-117.66,33.6,24.0,1684.0,232.0,781.0,230.0,6.8667,279600.0,<1H OCEAN +-117.66,33.6,25.0,3745.0,522.0,1648.0,496.0,7.5488,278100.0,<1H OCEAN +-117.67,33.61,23.0,3588.0,577.0,1695.0,569.0,6.1401,243200.0,<1H OCEAN +-117.68,33.63,16.0,5218.0,1187.0,2701.0,1125.0,3.929,143100.0,<1H OCEAN +-117.68,33.63,13.0,5830.0,921.0,2897.0,891.0,6.2403,257400.0,<1H OCEAN +-117.67,33.63,9.0,5774.0,1320.0,3086.0,1265.0,4.4063,202200.0,<1H OCEAN +-117.62,33.77,43.0,1911.0,439.0,930.0,433.0,4.6369,186400.0,<1H OCEAN +-117.6,33.72,36.0,1317.0,228.0,531.0,214.0,5.6346,272500.0,<1H OCEAN +-117.67,33.6,25.0,3164.0,449.0,1517.0,453.0,6.7921,266000.0,<1H OCEAN +-117.66,33.59,18.0,4552.0,706.0,1918.0,671.0,7.5791,288100.0,<1H OCEAN +-117.67,33.6,20.0,1213.0,171.0,565.0,170.0,7.2592,314800.0,<1H OCEAN +-117.66,33.58,16.0,3016.0,394.0,1172.0,382.0,7.5196,315600.0,<1H OCEAN +-117.67,33.57,18.0,1614.0,210.0,692.0,209.0,7.9294,280300.0,<1H OCEAN +-117.66,33.57,16.0,4277.0,565.0,1642.0,549.0,8.0082,286600.0,<1H OCEAN +-117.7,33.62,16.0,9653.0,2000.0,4732.0,1922.0,3.7361,197200.0,<1H OCEAN +-117.69,33.62,18.0,4265.0,581.0,2025.0,544.0,6.4598,282700.0,<1H OCEAN +-117.68,33.61,19.0,2962.0,405.0,1295.0,440.0,6.0689,248000.0,<1H OCEAN +-117.69,33.61,16.0,3010.0,580.0,1649.0,538.0,4.0221,236200.0,<1H OCEAN +-117.68,33.6,19.0,3913.0,460.0,1646.0,454.0,7.2147,303900.0,<1H OCEAN +-117.65,33.65,16.0,1538.0,260.0,835.0,259.0,5.5779,234800.0,<1H OCEAN +-117.66,33.64,17.0,3173.0,501.0,1555.0,520.0,6.7079,250800.0,<1H OCEAN +-117.67,33.64,11.0,2722.0,554.0,1565.0,508.0,5.1645,164100.0,<1H OCEAN +-117.66,33.65,13.0,8527.0,1364.0,4597.0,1393.0,6.2242,237900.0,<1H OCEAN +-117.65,33.65,15.0,3485.0,519.0,1740.0,485.0,6.7543,251900.0,<1H OCEAN +-117.65,33.63,16.0,3388.0,425.0,1395.0,427.0,8.4471,351300.0,<1H OCEAN +-117.65,33.65,15.0,4713.0,671.0,2197.0,673.0,7.5426,294800.0,<1H OCEAN +-117.66,33.63,16.0,3299.0,610.0,1967.0,604.0,5.5085,223300.0,<1H OCEAN +-117.63,33.65,10.0,3580.0,491.0,1688.0,467.0,7.7814,288700.0,<1H OCEAN +-117.62,33.64,2.0,7826.0,893.0,2985.0,790.0,10.1531,484100.0,<1H OCEAN +-117.64,33.63,10.0,4814.0,643.0,1808.0,588.0,8.798,436600.0,<1H OCEAN +-117.64,33.64,11.0,2422.0,429.0,810.0,395.0,6.1935,293200.0,<1H OCEAN +-117.64,33.65,4.0,6842.0,1512.0,3256.0,1439.0,5.4132,216600.0,<1H OCEAN +-117.63,33.62,9.0,4257.0,785.0,1293.0,745.0,3.7139,196700.0,<1H OCEAN +-117.63,33.63,6.0,3068.0,549.0,985.0,536.0,4.2009,238000.0,<1H OCEAN +-117.65,33.62,15.0,2708.0,410.0,1140.0,389.0,6.2899,275000.0,<1H OCEAN +-117.64,33.62,16.0,3970.0,771.0,1202.0,734.0,3.4115,184800.0,<1H OCEAN +-117.66,33.62,16.0,5175.0,799.0,2717.0,813.0,6.1493,257800.0,<1H OCEAN +-117.65,33.6,15.0,5736.0,,2529.0,762.0,6.4114,278700.0,<1H OCEAN +-117.64,33.61,14.0,5232.0,810.0,3041.0,839.0,5.826,247900.0,<1H OCEAN +-117.65,33.6,13.0,2319.0,430.0,1004.0,380.0,5.133,316100.0,<1H OCEAN +-117.64,33.59,4.0,3274.0,383.0,1312.0,390.0,8.1611,348000.0,<1H OCEAN +-117.66,33.58,6.0,4186.0,,1794.0,541.0,9.6986,357600.0,<1H OCEAN +-117.65,33.57,5.0,1998.0,500.0,1185.0,446.0,4.3542,195600.0,<1H OCEAN +-117.65,33.58,2.0,2411.0,354.0,703.0,217.0,7.8061,331400.0,<1H OCEAN +-117.66,33.57,16.0,2483.0,443.0,1357.0,400.0,5.5545,214200.0,<1H OCEAN +-117.65,33.59,8.0,2649.0,340.0,1238.0,354.0,8.0409,337900.0,<1H OCEAN +-117.67,33.54,16.0,2102.0,350.0,1003.0,328.0,4.7981,170800.0,<1H OCEAN +-117.67,33.54,15.0,2423.0,435.0,1366.0,423.0,4.8906,181800.0,<1H OCEAN +-117.67,33.55,6.0,3157.0,721.0,1695.0,710.0,3.7609,222300.0,<1H OCEAN +-117.67,33.56,4.0,3289.0,728.0,1345.0,632.0,4.6863,184400.0,<1H OCEAN +-117.64,33.51,15.0,1743.0,254.0,943.0,274.0,5.9339,286000.0,<1H OCEAN +-117.64,33.51,14.0,1343.0,175.0,650.0,184.0,7.2648,363200.0,<1H OCEAN +-117.55,33.52,15.0,426.0,62.0,133.0,45.0,5.136,447400.0,<1H OCEAN +-117.59,33.61,3.0,2993.0,429.0,991.0,390.0,10.0765,378200.0,<1H OCEAN +-117.58,33.6,5.0,5348.0,659.0,1862.0,555.0,11.0567,495400.0,<1H OCEAN +-117.49,33.64,3.0,8874.0,1302.0,3191.0,1027.0,6.8588,302000.0,<1H OCEAN +-117.59,33.67,29.0,1223.0,215.0,633.0,204.0,6.5143,279800.0,<1H OCEAN +-117.53,33.69,6.0,454.0,102.0,213.0,43.0,10.9704,483300.0,<1H OCEAN +-117.59,33.66,3.0,1206.0,256.0,563.0,287.0,5.1589,167800.0,<1H OCEAN +-117.58,33.66,4.0,3305.0,644.0,1693.0,597.0,5.2497,215000.0,<1H OCEAN +-117.58,33.65,4.0,2000.0,422.0,833.0,386.0,5.7709,190300.0,<1H OCEAN +-117.59,33.66,4.0,1318.0,218.0,673.0,225.0,6.0722,260800.0,<1H OCEAN +-117.59,33.65,2.0,4860.0,1193.0,2332.0,1073.0,4.5022,151900.0,<1H OCEAN +-117.6,33.65,4.0,3134.0,504.0,1599.0,485.0,6.2464,233900.0,<1H OCEAN +-117.61,33.67,3.0,4541.0,720.0,1600.0,583.0,6.8004,284900.0,<1H OCEAN +-117.64,33.66,6.0,5221.0,1217.0,2597.0,1119.0,4.6076,204000.0,<1H OCEAN +-117.59,33.65,4.0,1793.0,390.0,897.0,386.0,4.2463,182800.0,<1H OCEAN +-117.58,33.65,4.0,1606.0,498.0,815.0,426.0,3.375,500001.0,<1H OCEAN +-117.61,33.63,2.0,4678.0,817.0,1970.0,712.0,6.1078,219000.0,<1H OCEAN +-117.65,33.53,7.0,6814.0,785.0,2175.0,681.0,10.49,500001.0,<1H OCEAN +-117.62,33.42,23.0,2656.0,515.0,998.0,435.0,4.0294,500001.0,NEAR OCEAN +-117.63,33.38,12.0,5744.0,1054.0,2104.0,847.0,5.1482,500001.0,NEAR OCEAN +-117.61,33.41,35.0,2556.0,404.0,946.0,399.0,6.1557,402900.0,NEAR OCEAN +-117.61,33.42,31.0,3959.0,856.0,1919.0,775.0,4.0313,282000.0,NEAR OCEAN +-117.6,33.41,29.0,2193.0,389.0,922.0,387.0,4.5476,309200.0,NEAR OCEAN +-117.62,33.47,4.0,1812.0,255.0,661.0,211.0,6.487,294200.0,NEAR OCEAN +-117.63,33.45,5.0,3549.0,604.0,1571.0,534.0,5.3705,363500.0,NEAR OCEAN +-117.63,33.47,4.0,1969.0,280.0,805.0,271.0,7.6012,310800.0,NEAR OCEAN +-117.61,33.45,6.0,950.0,184.0,426.0,186.0,4.7237,220700.0,NEAR OCEAN +-117.63,33.46,7.0,7684.0,1088.0,2812.0,1057.0,6.3401,387300.0,NEAR OCEAN +-117.64,33.45,26.0,1528.0,,607.0,218.0,6.2871,325500.0,NEAR OCEAN +-117.65,33.42,25.0,2174.0,428.0,603.0,352.0,3.3967,249400.0,NEAR OCEAN +-117.64,33.45,27.0,334.0,56.0,130.0,46.0,4.875,284100.0,NEAR OCEAN +-117.62,33.43,27.0,1835.0,413.0,1221.0,377.0,3.2232,247100.0,NEAR OCEAN +-117.62,33.43,27.0,3858.0,1062.0,2321.0,873.0,3.3155,231000.0,NEAR OCEAN +-117.62,33.43,24.0,1296.0,384.0,850.0,367.0,2.7545,231300.0,NEAR OCEAN +-117.65,33.4,17.0,2737.0,654.0,910.0,492.0,3.5729,370800.0,NEAR OCEAN +-117.62,33.43,23.0,4052.0,955.0,1950.0,859.0,4.0647,240600.0,NEAR OCEAN +-117.61,33.43,33.0,1150.0,383.0,604.0,317.0,2.3545,187500.0,NEAR OCEAN +-117.62,33.42,27.0,1005.0,266.0,460.0,243.0,3.1029,190600.0,NEAR OCEAN +-117.62,33.42,27.0,1444.0,412.0,597.0,311.0,3.1395,310000.0,NEAR OCEAN +-117.6,33.45,4.0,2369.0,566.0,996.0,435.0,5.4031,243800.0,NEAR OCEAN +-117.59,33.44,3.0,5813.0,1264.0,2363.0,1041.0,4.3897,341300.0,NEAR OCEAN +-117.59,33.4,22.0,3167.0,743.0,1797.0,642.0,4.0076,252100.0,NEAR OCEAN +-117.59,33.41,17.0,2248.0,448.0,878.0,423.0,5.1298,246000.0,NEAR OCEAN +-117.6,33.42,23.0,2482.0,461.0,1048.0,425.0,4.665,280600.0,NEAR OCEAN +-117.61,33.43,24.0,2303.0,399.0,851.0,379.0,3.9875,346500.0,NEAR OCEAN +-117.6,33.43,21.0,3951.0,562.0,1392.0,543.0,5.1439,414000.0,NEAR OCEAN +-117.61,33.44,17.0,2036.0,272.0,713.0,265.0,6.5954,346200.0,NEAR OCEAN +-117.59,33.43,14.0,3223.0,484.0,1230.0,488.0,6.5964,358800.0,NEAR OCEAN +-117.67,33.47,22.0,2728.0,616.0,1081.0,566.0,1.6393,500001.0,<1H OCEAN +-117.67,33.46,24.0,3571.0,722.0,1409.0,543.0,4.6518,277800.0,<1H OCEAN +-117.67,33.44,25.0,2994.0,519.0,903.0,410.0,6.6852,500001.0,<1H OCEAN +-117.67,33.46,18.0,1679.0,271.0,783.0,257.0,5.3999,300000.0,<1H OCEAN +-117.66,33.46,26.0,2073.0,370.0,952.0,340.0,5.0877,288100.0,<1H OCEAN +-117.66,33.46,28.0,1261.0,233.0,609.0,242.0,5.1024,312700.0,<1H OCEAN +-117.66,33.48,22.0,809.0,180.0,334.0,157.0,2.3846,500001.0,<1H OCEAN +-117.65,33.49,16.0,2223.0,454.0,628.0,382.0,4.3603,248800.0,<1H OCEAN +-117.64,33.49,3.0,2516.0,429.0,781.0,337.0,5.6197,271600.0,<1H OCEAN +-117.65,33.48,10.0,3484.0,582.0,1469.0,556.0,5.4188,402200.0,<1H OCEAN +-117.65,33.48,6.0,1638.0,188.0,572.0,174.0,13.0502,500001.0,<1H OCEAN +-117.63,33.5,12.0,3619.0,536.0,1506.0,492.0,7.2013,353600.0,<1H OCEAN +-117.63,33.47,4.0,2320.0,405.0,1408.0,477.0,6.3369,256000.0,NEAR OCEAN +-117.65,33.46,19.0,7034.0,1139.0,2824.0,1068.0,6.0873,277300.0,<1H OCEAN +-117.64,33.48,12.0,2007.0,397.0,1033.0,373.0,5.6754,275900.0,<1H OCEAN +-117.65,33.45,15.0,7468.0,1275.0,3033.0,1217.0,5.49,239300.0,NEAR OCEAN +-117.73,33.49,31.0,5112.0,778.0,1530.0,648.0,10.3983,500001.0,<1H OCEAN +-117.76,33.48,38.0,3832.0,809.0,1332.0,636.0,5.0044,381200.0,<1H OCEAN +-117.74,33.51,29.0,1720.0,269.0,612.0,258.0,7.8239,500001.0,<1H OCEAN +-117.73,33.53,3.0,6388.0,920.0,2129.0,819.0,7.8915,420600.0,<1H OCEAN +-117.72,33.54,13.0,4866.0,812.0,1909.0,733.0,4.9821,244800.0,<1H OCEAN +-117.72,33.53,14.0,1672.0,295.0,704.0,293.0,5.1129,251300.0,<1H OCEAN +-117.72,33.51,17.0,3617.0,597.0,1176.0,571.0,5.133,324000.0,<1H OCEAN +-117.72,33.49,4.0,3623.0,734.0,1129.0,530.0,5.7281,500001.0,<1H OCEAN +-117.73,33.49,17.0,2168.0,290.0,654.0,279.0,9.8321,500001.0,<1H OCEAN +-117.73,33.51,5.0,4549.0,786.0,1238.0,632.0,6.1785,295900.0,<1H OCEAN +-117.69,33.6,19.0,3562.0,439.0,1584.0,470.0,6.4211,288100.0,<1H OCEAN +-117.68,33.6,24.0,1956.0,262.0,969.0,256.0,6.8154,265900.0,<1H OCEAN +-117.69,33.6,17.0,2150.0,361.0,1194.0,335.0,5.4622,227000.0,<1H OCEAN +-117.7,33.6,16.0,2092.0,489.0,877.0,392.0,3.0461,216900.0,<1H OCEAN +-117.69,33.6,16.0,2205.0,393.0,1333.0,402.0,3.475,279500.0,<1H OCEAN +-117.69,33.6,12.0,3258.0,421.0,1464.0,435.0,6.5413,332000.0,<1H OCEAN +-117.69,33.59,13.0,3320.0,426.0,1432.0,431.0,7.9283,348100.0,<1H OCEAN +-117.68,33.59,12.0,3473.0,466.0,1569.0,450.0,8.8636,314000.0,<1H OCEAN +-117.69,33.58,5.0,6678.0,1011.0,2877.0,982.0,7.5177,330000.0,<1H OCEAN +-117.68,33.59,8.0,2327.0,263.0,899.0,236.0,14.9009,500001.0,<1H OCEAN +-117.69,33.58,8.0,2887.0,351.0,1176.0,351.0,10.3953,500001.0,<1H OCEAN +-117.68,33.47,7.0,4458.0,731.0,1731.0,704.0,6.126,285600.0,<1H OCEAN +-117.68,33.48,15.0,1786.0,299.0,727.0,293.0,5.0527,231400.0,<1H OCEAN +-117.68,33.49,17.0,2232.0,372.0,1072.0,385.0,4.245,214500.0,<1H OCEAN +-117.68,33.49,16.0,3084.0,724.0,2557.0,690.0,2.8357,106300.0,<1H OCEAN +-117.67,33.49,15.0,2782.0,579.0,983.0,525.0,2.1935,183300.0,<1H OCEAN +-117.67,33.49,10.0,366.0,61.0,128.0,61.0,8.163,250000.0,<1H OCEAN +-117.68,33.51,19.0,2930.0,428.0,1481.0,430.0,6.323,480800.0,<1H OCEAN +-117.68,33.49,18.0,4173.0,625.0,1649.0,634.0,6.3568,294300.0,<1H OCEAN +-117.69,33.48,25.0,3240.0,481.0,1462.0,497.0,6.1815,288500.0,<1H OCEAN +-117.69,33.47,13.0,2020.0,378.0,679.0,290.0,5.756,305600.0,<1H OCEAN +-117.66,33.51,18.0,2626.0,,1302.0,522.0,4.0167,189600.0,<1H OCEAN +-117.66,33.5,16.0,1956.0,346.0,862.0,326.0,4.4732,186300.0,<1H OCEAN +-117.67,33.51,17.0,2112.0,480.0,1893.0,433.0,4.0388,120400.0,<1H OCEAN +-117.67,33.51,18.0,1645.0,393.0,1490.0,355.0,3.4792,126400.0,<1H OCEAN +-117.67,33.51,19.0,1258.0,246.0,545.0,227.0,2.9762,184400.0,<1H OCEAN +-117.69,33.47,23.0,3499.0,722.0,1480.0,634.0,3.86,300000.0,<1H OCEAN +-117.7,33.47,20.0,1577.0,363.0,764.0,333.0,4.1563,320800.0,<1H OCEAN +-117.7,33.47,21.0,2208.0,534.0,1423.0,482.0,3.5915,305600.0,<1H OCEAN +-117.69,33.47,19.0,2595.0,621.0,1728.0,571.0,3.668,243800.0,<1H OCEAN +-117.7,33.47,21.0,1857.0,399.0,881.0,380.0,3.8403,350000.0,<1H OCEAN +-117.72,33.43,5.0,1889.0,359.0,616.0,246.0,3.8992,500001.0,<1H OCEAN +-117.68,33.55,5.0,2262.0,427.0,1016.0,402.0,6.065,315500.0,<1H OCEAN +-117.68,33.54,5.0,2840.0,403.0,1363.0,403.0,7.618,341400.0,<1H OCEAN +-117.68,33.52,5.0,3621.0,632.0,1546.0,567.0,5.753,322800.0,<1H OCEAN +-117.69,33.55,9.0,3856.0,571.0,1646.0,576.0,6.8007,318300.0,<1H OCEAN +-117.69,33.54,20.0,1767.0,280.0,801.0,284.0,6.5394,272000.0,<1H OCEAN +-117.69,33.53,17.0,5041.0,778.0,2396.0,801.0,6.0868,282900.0,<1H OCEAN +-117.69,33.52,4.0,2142.0,625.0,1176.0,483.0,3.4455,325000.0,<1H OCEAN +-117.7,33.51,2.0,5261.0,763.0,1460.0,599.0,6.8279,279000.0,<1H OCEAN +-117.69,33.52,3.0,7374.0,1444.0,3214.0,1279.0,4.538,278200.0,<1H OCEAN +-117.7,33.53,5.0,6698.0,1254.0,2834.0,1139.0,5.9088,288500.0,<1H OCEAN +-117.71,33.52,17.0,2486.0,417.0,876.0,361.0,6.1007,340900.0,<1H OCEAN +-117.71,33.51,11.0,2198.0,252.0,883.0,281.0,13.1477,487000.0,<1H OCEAN +-117.71,33.51,12.0,4676.0,698.0,1543.0,598.0,6.379,500001.0,<1H OCEAN +-117.68,33.57,2.0,10008.0,1453.0,3550.0,1139.0,10.1122,500001.0,<1H OCEAN +-117.69,33.55,4.0,1764.0,220.0,705.0,224.0,8.3275,384200.0,<1H OCEAN +-117.69,33.55,3.0,1618.0,266.0,710.0,246.0,6.0743,274300.0,<1H OCEAN +-117.7,33.54,4.0,4956.0,693.0,1802.0,625.0,7.9338,354700.0,<1H OCEAN +-117.7,33.55,12.0,2459.0,390.0,1054.0,391.0,7.1736,262100.0,<1H OCEAN +-117.7,33.56,2.0,2112.0,305.0,703.0,261.0,6.9343,298500.0,<1H OCEAN +-117.7,33.56,3.0,2443.0,637.0,1033.0,548.0,4.1379,183300.0,<1H OCEAN +-117.7,33.57,4.0,3283.0,911.0,1512.0,782.0,3.3125,138500.0,<1H OCEAN +-117.71,33.54,7.0,4907.0,577.0,1883.0,556.0,10.4415,453800.0,<1H OCEAN +-117.71,33.54,15.0,2460.0,368.0,962.0,320.0,7.3878,318300.0,<1H OCEAN +-117.71,33.58,2.0,2530.0,562.0,1066.0,510.0,4.6336,187500.0,<1H OCEAN +-117.7,33.57,9.0,1204.0,355.0,469.0,293.0,3.6196,119900.0,<1H OCEAN +-117.71,33.57,4.0,3289.0,753.0,1285.0,651.0,4.045,226000.0,<1H OCEAN +-117.71,33.57,6.0,3673.0,881.0,1846.0,768.0,4.877,144300.0,<1H OCEAN +-117.68,33.51,4.0,2428.0,401.0,959.0,386.0,6.2661,268500.0,<1H OCEAN +-117.69,33.51,4.0,1223.0,275.0,505.0,244.0,4.6607,173000.0,<1H OCEAN +-117.7,33.5,4.0,2351.0,445.0,834.0,397.0,5.5677,245400.0,<1H OCEAN +-117.71,33.49,5.0,1680.0,254.0,617.0,231.0,8.583,397700.0,<1H OCEAN +-117.7,33.5,4.0,7474.0,1037.0,2969.0,1007.0,8.7591,434700.0,<1H OCEAN +-117.7,33.48,10.0,3458.0,638.0,1156.0,470.0,6.3579,336700.0,<1H OCEAN +-117.7,33.48,6.0,16590.0,2696.0,6223.0,2357.0,6.3088,340300.0,<1H OCEAN +-117.71,33.47,14.0,3894.0,672.0,1490.0,629.0,6.5206,368500.0,<1H OCEAN +-117.74,33.46,9.0,6564.0,1316.0,1720.0,904.0,4.89,454100.0,<1H OCEAN +-117.71,33.47,17.0,2681.0,454.0,830.0,410.0,5.5507,345700.0,<1H OCEAN +-117.7,33.68,29.0,5650.0,1084.0,3985.0,1056.0,2.8192,162500.0,<1H OCEAN +-117.76,33.71,14.0,4321.0,582.0,2025.0,578.0,8.3634,355100.0,<1H OCEAN +-117.75,33.71,15.0,2849.0,537.0,878.0,520.0,3.2841,158300.0,<1H OCEAN +-117.76,33.7,12.0,4025.0,574.0,2042.0,588.0,7.9125,344900.0,<1H OCEAN +-117.77,33.71,15.0,2102.0,295.0,1060.0,303.0,7.3141,337100.0,<1H OCEAN +-117.77,33.7,3.0,3636.0,749.0,1486.0,696.0,5.5464,207500.0,<1H OCEAN +-117.77,33.7,4.0,2446.0,622.0,1315.0,560.0,3.7147,137500.0,<1H OCEAN +-117.69,33.65,16.0,5805.0,852.0,2356.0,795.0,6.1062,274600.0,<1H OCEAN +-117.71,33.65,16.0,3774.0,456.0,1587.0,430.0,8.6088,307400.0,<1H OCEAN +-117.7,33.65,16.0,3388.0,492.0,1249.0,463.0,6.1863,355600.0,<1H OCEAN +-117.71,33.64,14.0,2945.0,356.0,1293.0,335.0,8.111,308900.0,<1H OCEAN +-117.71,33.63,16.0,1565.0,274.0,950.0,280.0,5.8399,220600.0,<1H OCEAN +-117.71,33.63,16.0,2497.0,500.0,1357.0,456.0,4.5909,241800.0,<1H OCEAN +-117.71,33.63,16.0,1641.0,354.0,945.0,318.0,3.4261,219700.0,<1H OCEAN +-117.7,33.63,16.0,4428.0,745.0,1525.0,682.0,5.2325,286800.0,<1H OCEAN +-117.72,33.64,16.0,1230.0,242.0,380.0,246.0,2.2969,67500.0,<1H OCEAN +-117.7,33.62,19.0,2957.0,492.0,1639.0,495.0,5.0686,225600.0,<1H OCEAN +-117.7,33.63,23.0,3038.0,473.0,1501.0,436.0,5.5584,241700.0,<1H OCEAN +-117.71,33.62,22.0,2520.0,387.0,1338.0,391.0,5.8898,242800.0,<1H OCEAN +-117.76,33.72,11.0,4508.0,618.0,1993.0,573.0,10.4498,386100.0,<1H OCEAN +-117.76,33.72,14.0,3011.0,388.0,1359.0,371.0,7.9739,368700.0,<1H OCEAN +-117.75,33.72,10.0,2464.0,347.0,1241.0,366.0,8.7603,362500.0,<1H OCEAN +-117.76,33.72,15.0,941.0,266.0,366.0,248.0,4.3636,148400.0,<1H OCEAN +-117.76,33.71,15.0,1010.0,350.0,470.0,342.0,3.2229,108300.0,<1H OCEAN +-117.74,33.73,18.0,328.0,68.0,391.0,60.0,4.1167,87500.0,<1H OCEAN +-117.69,33.66,11.0,2630.0,327.0,1256.0,352.0,8.2953,350500.0,<1H OCEAN +-117.69,33.66,5.0,4246.0,689.0,1933.0,722.0,6.9501,225700.0,<1H OCEAN +-117.67,33.67,5.0,10534.0,2035.0,4656.0,1863.0,5.7797,309200.0,<1H OCEAN +-117.67,33.66,4.0,10175.0,2181.0,4762.0,1929.0,4.7341,237400.0,<1H OCEAN +-117.68,33.65,6.0,10395.0,1915.0,4783.0,1811.0,5.928,239900.0,<1H OCEAN +-117.64,33.68,4.0,5687.0,970.0,2677.0,938.0,6.5069,243400.0,<1H OCEAN +-117.7,33.72,6.0,211.0,51.0,125.0,44.0,1.9659,500001.0,<1H OCEAN +-117.69,33.65,15.0,5394.0,748.0,2383.0,706.0,7.5619,302000.0,<1H OCEAN +-117.7,33.64,15.0,5743.0,773.0,2380.0,773.0,8.1926,326600.0,<1H OCEAN +-117.69,33.63,23.0,1444.0,260.0,792.0,253.0,4.9079,273800.0,<1H OCEAN +-117.69,33.64,18.0,3783.0,654.0,1843.0,623.0,5.7559,215800.0,<1H OCEAN +-117.69,33.64,16.0,2592.0,372.0,1279.0,383.0,6.9741,262000.0,<1H OCEAN +-117.82,33.71,9.0,5206.0,992.0,4660.0,978.0,2.885,162500.0,<1H OCEAN +-117.82,33.72,24.0,3260.0,458.0,1383.0,442.0,6.5987,272800.0,<1H OCEAN +-117.81,33.73,17.0,1063.0,189.0,363.0,183.0,2.1719,261300.0,<1H OCEAN +-117.8,33.72,16.0,2617.0,506.0,1317.0,511.0,4.821,201400.0,<1H OCEAN +-117.81,33.71,16.0,2666.0,387.0,1227.0,347.0,7.3769,302400.0,<1H OCEAN +-117.82,33.72,24.0,3477.0,462.0,1593.0,484.0,6.8634,276500.0,<1H OCEAN +-117.77,33.7,15.0,1392.0,267.0,681.0,263.0,5.4248,187200.0,<1H OCEAN +-117.77,33.69,14.0,1413.0,372.0,744.0,338.0,3.7988,184100.0,<1H OCEAN +-117.77,33.69,15.0,500.0,113.0,261.0,116.0,5.0631,154000.0,<1H OCEAN +-117.77,33.69,16.0,1666.0,341.0,479.0,336.0,2.1406,55000.0,<1H OCEAN +-117.78,33.69,16.0,4702.0,806.0,2529.0,814.0,5.1299,238900.0,<1H OCEAN +-117.78,33.68,19.0,2500.0,331.0,1027.0,327.0,6.115,315600.0,<1H OCEAN +-117.78,33.69,16.0,3400.0,501.0,1575.0,488.0,6.0961,295500.0,<1H OCEAN +-117.8,33.69,16.0,2745.0,447.0,1429.0,411.0,6.8219,325500.0,<1H OCEAN +-117.79,33.69,16.0,1532.0,240.0,679.0,248.0,5.7115,313900.0,<1H OCEAN +-117.79,33.68,16.0,1998.0,308.0,818.0,299.0,6.8722,326100.0,<1H OCEAN +-117.8,33.68,14.0,2635.0,516.0,1150.0,499.0,4.4391,306700.0,<1H OCEAN +-117.8,33.69,14.0,1800.0,362.0,874.0,373.0,4.2083,251000.0,<1H OCEAN +-117.8,33.69,15.0,2099.0,322.0,873.0,307.0,7.9887,328000.0,<1H OCEAN +-117.8,33.68,5.0,623.0,146.0,396.0,136.0,3.631,225000.0,<1H OCEAN +-117.8,33.68,8.0,2032.0,349.0,862.0,340.0,6.9133,274100.0,<1H OCEAN +-117.81,33.67,8.0,2098.0,342.0,908.0,329.0,7.7589,342900.0,<1H OCEAN +-117.81,33.67,8.0,2440.0,502.0,1113.0,483.0,4.6019,242500.0,<1H OCEAN +-117.81,33.67,9.0,1567.0,299.0,675.0,294.0,5.2124,199600.0,<1H OCEAN +-117.81,33.67,9.0,2435.0,396.0,1194.0,385.0,7.2025,275000.0,<1H OCEAN +-117.81,33.67,9.0,3279.0,530.0,1447.0,510.0,7.4581,296600.0,<1H OCEAN +-117.81,33.68,8.0,1964.0,413.0,913.0,406.0,5.1583,192200.0,<1H OCEAN +-117.78,33.68,15.0,1834.0,330.0,841.0,309.0,6.0634,234300.0,<1H OCEAN +-117.78,33.68,14.0,1750.0,336.0,852.0,300.0,4.6793,236800.0,<1H OCEAN +-117.79,33.68,13.0,2636.0,416.0,1137.0,404.0,7.2118,311500.0,<1H OCEAN +-117.78,33.68,11.0,1994.0,477.0,849.0,411.0,4.0187,235600.0,<1H OCEAN +-117.79,33.68,9.0,1633.0,295.0,928.0,297.0,5.7858,265900.0,<1H OCEAN +-117.79,33.68,10.0,2106.0,319.0,1002.0,332.0,8.735,375300.0,<1H OCEAN +-117.8,33.67,5.0,2638.0,521.0,1179.0,480.0,5.7759,240000.0,<1H OCEAN +-117.8,33.67,5.0,2487.0,388.0,1147.0,397.0,8.284,302500.0,<1H OCEAN +-117.8,33.67,4.0,3345.0,552.0,1525.0,539.0,6.7962,329100.0,<1H OCEAN +-117.81,33.69,5.0,1256.0,256.0,880.0,288.0,2.4233,450000.0,<1H OCEAN +-117.81,33.68,4.0,1545.0,304.0,788.0,296.0,4.5469,500001.0,<1H OCEAN +-117.82,33.68,4.0,1346.0,213.0,603.0,219.0,8.7974,360600.0,<1H OCEAN +-117.82,33.68,3.0,3068.0,494.0,1357.0,486.0,7.9187,333600.0,<1H OCEAN +-117.82,33.67,17.0,2895.0,439.0,1588.0,450.0,6.276,290700.0,<1H OCEAN +-117.83,33.68,4.0,3226.0,838.0,1666.0,800.0,4.1652,184500.0,<1H OCEAN +-117.82,33.68,3.0,7105.0,1459.0,3068.0,1241.0,6.1395,358000.0,<1H OCEAN +-117.77,33.67,12.0,4329.0,1068.0,1913.0,978.0,4.5094,160200.0,<1H OCEAN +-117.77,33.72,10.0,2815.0,431.0,1181.0,398.0,6.5743,278700.0,<1H OCEAN +-117.77,33.72,9.0,2153.0,316.0,954.0,324.0,7.8139,304700.0,<1H OCEAN +-117.77,33.71,13.0,1939.0,247.0,928.0,244.0,8.1111,379800.0,<1H OCEAN +-117.77,33.71,5.0,4050.0,584.0,1986.0,598.0,7.5847,375700.0,<1H OCEAN +-117.77,33.71,4.0,1646.0,321.0,859.0,300.0,5.5631,227800.0,<1H OCEAN +-117.78,33.71,16.0,2207.0,291.0,1081.0,308.0,7.3518,331200.0,<1H OCEAN +-117.78,33.71,4.0,974.0,232.0,428.0,203.0,4.6141,195400.0,<1H OCEAN +-117.79,33.73,3.0,8240.0,1410.0,3318.0,1270.0,7.2074,291300.0,<1H OCEAN +-117.78,33.7,16.0,1663.0,250.0,597.0,204.0,5.409,233900.0,<1H OCEAN +-117.79,33.7,16.0,6259.0,1098.0,3785.0,1114.0,6.3298,247100.0,<1H OCEAN +-117.79,33.71,16.0,3114.0,463.0,1641.0,469.0,6.2162,283200.0,<1H OCEAN +-117.79,33.71,16.0,6339.0,862.0,3132.0,825.0,7.1069,313400.0,<1H OCEAN +-117.79,33.7,6.0,1593.0,371.0,832.0,379.0,4.4286,239500.0,<1H OCEAN +-117.8,33.7,5.0,1549.0,378.0,735.0,355.0,5.2923,194000.0,<1H OCEAN +-117.79,33.7,16.0,1416.0,249.0,636.0,244.0,5.1741,227700.0,<1H OCEAN +-117.79,33.69,15.0,1875.0,316.0,890.0,316.0,6.5783,244800.0,<1H OCEAN +-117.79,33.69,16.0,3067.0,396.0,1275.0,372.0,8.7385,340000.0,<1H OCEAN +-117.8,33.69,13.0,1161.0,289.0,630.0,296.0,3.3438,333300.0,<1H OCEAN +-117.8,33.55,38.0,1757.0,464.0,821.0,426.0,4.1304,433300.0,<1H OCEAN +-117.79,33.56,36.0,2057.0,329.0,658.0,309.0,7.866,500001.0,<1H OCEAN +-117.81,33.56,24.0,6258.0,1003.0,1730.0,752.0,10.9601,500001.0,<1H OCEAN +-117.8,33.55,35.0,2067.0,428.0,724.0,377.0,5.8371,500001.0,<1H OCEAN +-117.77,33.6,33.0,247.0,80.0,167.0,70.0,3.7059,237500.0,<1H OCEAN +-117.8,33.53,41.0,2017.0,489.0,783.0,403.0,4.1591,500001.0,<1H OCEAN +-117.78,33.54,29.0,1421.0,462.0,520.0,339.0,2.2969,450000.0,<1H OCEAN +-117.79,33.55,39.0,5066.0,1292.0,1915.0,1117.0,3.821,452100.0,<1H OCEAN +-117.75,33.54,21.0,8711.0,1544.0,3173.0,1396.0,5.0907,378200.0,<1H OCEAN +-117.77,33.51,29.0,3590.0,772.0,1070.0,603.0,4.4464,500001.0,<1H OCEAN +-117.77,33.55,28.0,2024.0,297.0,617.0,274.0,6.7861,499100.0,<1H OCEAN +-117.73,33.57,5.0,11976.0,2495.0,4327.0,2009.0,4.8488,194400.0,<1H OCEAN +-117.86,33.67,16.0,20.0,5.0,15.0,5.0,3.875,450000.0,<1H OCEAN +-117.82,33.67,15.0,1010.0,274.0,649.0,261.0,2.5197,350000.0,<1H OCEAN +-117.83,33.67,17.0,2634.0,641.0,1454.0,560.0,3.7976,275000.0,<1H OCEAN +-117.83,33.66,15.0,2355.0,438.0,747.0,450.0,6.5356,272800.0,<1H OCEAN +-117.83,33.66,16.0,1574.0,385.0,515.0,363.0,5.3423,291700.0,<1H OCEAN +-117.81,33.67,24.0,3930.0,661.0,1831.0,616.0,6.3767,269000.0,<1H OCEAN +-117.8,33.66,16.0,2542.0,498.0,1022.0,494.0,4.0,223400.0,<1H OCEAN +-117.81,33.66,16.0,1414.0,191.0,635.0,230.0,10.0757,383900.0,<1H OCEAN +-117.81,33.66,20.0,2851.0,490.0,1192.0,463.0,5.8752,274200.0,<1H OCEAN +-117.82,33.66,24.0,4227.0,641.0,1605.0,589.0,6.4238,278400.0,<1H OCEAN +-117.84,33.64,11.0,6840.0,1689.0,6083.0,1629.0,2.4132,198300.0,<1H OCEAN +-117.87,33.61,25.0,2267.0,359.0,866.0,348.0,7.79,500001.0,<1H OCEAN +-117.86,33.61,15.0,3191.0,482.0,930.0,447.0,8.6001,500001.0,<1H OCEAN +-117.88,33.55,27.0,2278.0,316.0,772.0,304.0,10.1275,500001.0,<1H OCEAN +-117.84,33.6,21.0,4281.0,582.0,1443.0,576.0,9.0519,500001.0,<1H OCEAN +-117.86,33.62,23.0,3166.0,411.0,1092.0,345.0,7.9367,500001.0,<1H OCEAN +-117.86,33.62,17.0,2975.0,371.0,1247.0,398.0,10.1989,500001.0,<1H OCEAN +-117.85,33.62,18.0,729.0,105.0,316.0,108.0,10.3893,500001.0,<1H OCEAN +-117.85,33.61,14.0,4340.0,741.0,1505.0,670.0,7.5674,500001.0,<1H OCEAN +-117.85,33.62,13.0,5192.0,658.0,1865.0,662.0,15.0001,500001.0,<1H OCEAN +-117.86,33.63,17.0,3095.0,551.0,1175.0,534.0,5.3099,500001.0,<1H OCEAN +-117.77,33.54,28.0,3404.0,497.0,1134.0,466.0,7.2217,500001.0,<1H OCEAN +-117.76,33.54,28.0,2250.0,329.0,826.0,323.0,6.9257,466400.0,<1H OCEAN +-117.77,33.54,47.0,3090.0,652.0,1105.0,582.0,4.1699,373700.0,<1H OCEAN +-117.77,33.53,46.0,1033.0,223.0,462.0,224.0,3.2708,384700.0,<1H OCEAN +-117.8,33.52,50.0,1152.0,341.0,519.0,225.0,3.053,500001.0,<1H OCEAN +-117.76,33.53,28.0,3085.0,499.0,1176.0,480.0,7.9794,426100.0,<1H OCEAN +-117.76,33.53,18.0,3224.0,561.0,1310.0,580.0,8.4614,391900.0,<1H OCEAN +-117.76,33.53,24.0,2105.0,346.0,712.0,332.0,10.6349,500001.0,<1H OCEAN +-117.77,33.53,32.0,3116.0,661.0,1105.0,543.0,5.1837,445600.0,<1H OCEAN +-117.78,33.51,44.0,1833.0,331.0,515.0,268.0,6.6178,500001.0,<1H OCEAN +-117.73,33.63,15.0,2874.0,592.0,1382.0,586.0,5.5137,161800.0,<1H OCEAN +-117.74,33.62,16.0,4134.0,740.0,2103.0,745.0,5.6877,231400.0,<1H OCEAN +-117.75,33.64,9.0,2499.0,492.0,1111.0,542.0,5.5342,182300.0,<1H OCEAN +-117.72,33.62,21.0,2322.0,518.0,662.0,457.0,3.1679,110000.0,<1H OCEAN +-117.72,33.62,19.0,1144.0,268.0,365.0,279.0,2.8583,105800.0,<1H OCEAN +-117.71,33.61,25.0,3004.0,718.0,891.0,626.0,2.395,80300.0,<1H OCEAN +-117.72,33.63,15.0,1362.0,255.0,378.0,202.0,1.9,162500.0,<1H OCEAN +-117.72,33.62,19.0,5777.0,1261.0,1711.0,1225.0,2.7634,86900.0,<1H OCEAN +-117.73,33.61,16.0,590.0,130.0,178.0,121.0,4.8611,186800.0,<1H OCEAN +-117.74,33.62,16.0,1889.0,590.0,686.0,537.0,3.4706,241700.0,<1H OCEAN +-117.74,33.61,16.0,2753.0,576.0,857.0,546.0,3.7422,229800.0,<1H OCEAN +-117.74,33.61,17.0,2116.0,474.0,662.0,443.0,3.5625,180800.0,<1H OCEAN +-117.75,33.61,17.0,2499.0,566.0,781.0,522.0,3.1779,186500.0,<1H OCEAN +-117.75,33.6,5.0,4944.0,1164.0,1727.0,948.0,4.9,255600.0,<1H OCEAN +-117.75,33.61,16.0,2270.0,488.0,709.0,489.0,3.2845,227600.0,<1H OCEAN +-117.73,33.61,17.0,2612.0,582.0,832.0,564.0,2.6759,120600.0,<1H OCEAN +-117.7,33.61,16.0,2371.0,725.0,1738.0,686.0,3.6484,322600.0,<1H OCEAN +-117.7,33.6,26.0,2283.0,506.0,634.0,469.0,2.3774,74300.0,<1H OCEAN +-117.71,33.6,8.0,3329.0,753.0,1312.0,629.0,3.5521,229800.0,<1H OCEAN +-117.71,33.6,25.0,3011.0,714.0,893.0,654.0,2.3387,74800.0,<1H OCEAN +-117.72,33.61,26.0,2033.0,463.0,618.0,450.0,2.5685,80400.0,<1H OCEAN +-117.72,33.61,26.0,2653.0,621.0,774.0,584.0,2.49,81100.0,<1H OCEAN +-117.71,33.61,26.0,3046.0,726.0,888.0,663.0,2.6848,74100.0,<1H OCEAN +-117.71,33.61,26.0,2280.0,550.0,669.0,502.0,2.3438,72300.0,<1H OCEAN +-117.71,33.6,25.0,1949.0,459.0,602.0,428.0,2.7601,72500.0,<1H OCEAN +-117.7,33.6,26.0,1021.0,230.0,301.0,208.0,2.625,80600.0,<1H OCEAN +-117.7,33.6,25.0,1321.0,295.0,396.0,278.0,3.1131,77100.0,<1H OCEAN +-117.7,33.59,11.0,8039.0,1717.0,3445.0,1571.0,4.1678,190900.0,<1H OCEAN +-117.84,33.66,5.0,665.0,171.0,384.0,171.0,4.5833,230400.0,<1H OCEAN +-117.84,33.66,5.0,1688.0,430.0,857.0,402.0,3.7857,231600.0,<1H OCEAN +-117.84,33.65,4.0,1649.0,456.0,1030.0,411.0,2.2262,225000.0,<1H OCEAN +-117.83,33.66,4.0,1011.0,198.0,511.0,198.0,7.9217,296200.0,<1H OCEAN +-117.83,33.65,9.0,638.0,266.0,426.0,234.0,3.7875,187500.0,<1H OCEAN +-117.83,33.65,8.0,2149.0,426.0,950.0,399.0,4.1103,250400.0,<1H OCEAN +-117.82,33.66,15.0,2460.0,447.0,1049.0,398.0,6.4967,387500.0,<1H OCEAN +-117.81,33.63,17.0,4477.0,610.0,1798.0,612.0,8.1093,410400.0,<1H OCEAN +-117.82,33.65,18.0,2105.0,302.0,830.0,286.0,6.3822,362500.0,<1H OCEAN +-117.8,33.63,8.0,32.0,9.0,26.0,11.0,4.1944,270800.0,<1H OCEAN +-117.8,33.64,8.0,4447.0,713.0,1680.0,705.0,8.8693,450400.0,<1H OCEAN +-117.8,33.63,15.0,3236.0,451.0,1289.0,416.0,11.1121,493000.0,<1H OCEAN +-117.82,33.64,18.0,1974.0,260.0,808.0,278.0,9.8589,500001.0,<1H OCEAN +-117.81,33.64,16.0,2404.0,349.0,868.0,329.0,11.0138,442100.0,<1H OCEAN +-117.81,33.64,4.0,1741.0,225.0,811.0,233.0,12.3411,500001.0,<1H OCEAN +-117.88,33.6,31.0,5488.0,1055.0,1938.0,964.0,8.8742,500001.0,<1H OCEAN +-117.87,33.6,20.0,3212.0,572.0,1064.0,526.0,6.6155,500001.0,<1H OCEAN +-117.87,33.6,35.0,1598.0,398.0,782.0,411.0,5.1155,500000.0,<1H OCEAN +-117.87,33.59,44.0,2499.0,396.0,910.0,374.0,6.6544,500001.0,<1H OCEAN +-117.87,33.6,33.0,3120.0,602.0,1155.0,553.0,5.2949,500001.0,<1H OCEAN +-117.86,33.6,30.0,1891.0,364.0,635.0,314.0,6.6265,500001.0,<1H OCEAN +-117.87,33.6,34.0,3415.0,779.0,1275.0,718.0,4.498,482900.0,<1H OCEAN +-117.89,33.6,36.0,1496.0,247.0,441.0,203.0,7.8164,500001.0,<1H OCEAN +-117.9,33.61,41.0,1521.0,328.0,527.0,275.0,4.0764,500001.0,<1H OCEAN +-117.91,33.61,40.0,2790.0,531.0,952.0,424.0,4.8,500001.0,<1H OCEAN +-117.91,33.6,37.0,2088.0,510.0,673.0,390.0,5.1048,500001.0,<1H OCEAN +-117.92,33.57,37.0,3355.0,492.0,921.0,366.0,7.2988,500001.0,NEAR OCEAN +-117.9,33.6,25.0,2465.0,585.0,906.0,472.0,3.6538,500001.0,<1H OCEAN +-117.92,33.61,23.0,1808.0,408.0,539.0,300.0,3.5682,500001.0,<1H OCEAN +-117.91,33.61,38.0,1232.0,178.0,410.0,171.0,11.075,500001.0,<1H OCEAN +-117.92,33.61,37.0,1244.0,173.0,394.0,154.0,10.3682,500001.0,<1H OCEAN +-117.92,33.61,36.0,1025.0,150.0,316.0,126.0,10.3048,500001.0,<1H OCEAN +-117.91,33.61,36.0,3082.0,455.0,771.0,365.0,11.216,500001.0,<1H OCEAN +-117.88,33.63,21.0,9565.0,2289.0,3162.0,1831.0,4.7024,345400.0,<1H OCEAN +-117.89,33.62,24.0,1016.0,238.0,465.0,236.0,3.0625,93800.0,<1H OCEAN +-117.88,33.64,16.0,3615.0,570.0,1209.0,559.0,8.5574,392200.0,<1H OCEAN +-117.9,33.61,19.0,2897.0,413.0,860.0,367.0,13.1738,500001.0,<1H OCEAN +-117.89,33.61,16.0,2413.0,559.0,656.0,423.0,6.3017,350000.0,<1H OCEAN +-117.89,33.61,41.0,1790.0,361.0,540.0,284.0,6.0247,500001.0,<1H OCEAN +-117.89,33.61,42.0,1301.0,280.0,539.0,249.0,5.0,500001.0,<1H OCEAN +-117.89,33.61,44.0,2126.0,423.0,745.0,332.0,5.1923,500001.0,<1H OCEAN +-117.89,33.6,40.0,1639.0,352.0,498.0,278.0,5.6336,500001.0,<1H OCEAN +-117.89,33.61,45.0,1883.0,419.0,653.0,328.0,4.2222,500001.0,<1H OCEAN +-117.9,33.61,44.0,1469.0,312.0,507.0,266.0,3.4937,500001.0,<1H OCEAN +-117.87,33.64,26.0,3521.0,455.0,1336.0,451.0,10.2849,500001.0,<1H OCEAN +-117.86,33.65,4.0,3618.0,767.0,1326.0,714.0,5.4284,500001.0,<1H OCEAN +-117.87,33.63,9.0,6163.0,1004.0,1912.0,903.0,10.8289,500001.0,<1H OCEAN +-117.87,33.62,15.0,2209.0,275.0,735.0,274.0,15.0001,500001.0,<1H OCEAN +-117.87,33.62,8.0,1266.0,,375.0,183.0,9.802,500001.0,<1H OCEAN +-117.88,33.65,24.0,4879.0,756.0,1777.0,754.0,5.9055,477300.0,<1H OCEAN +-117.9,33.63,26.0,4486.0,554.0,1598.0,549.0,10.1454,500001.0,<1H OCEAN +-117.91,33.63,20.0,3442.0,1526.0,1427.0,977.0,3.1985,106300.0,<1H OCEAN +-117.9,33.63,32.0,3556.0,521.0,1381.0,537.0,6.1426,450700.0,<1H OCEAN +-117.9,33.63,26.0,1632.0,376.0,598.0,375.0,3.2125,455000.0,<1H OCEAN +-117.9,33.63,28.0,2370.0,352.0,832.0,347.0,7.1148,500001.0,<1H OCEAN +-117.88,33.66,26.0,6017.0,1244.0,2673.0,1135.0,3.5426,295400.0,<1H OCEAN +-117.89,33.66,33.0,3595.0,785.0,1621.0,732.0,4.1372,265200.0,<1H OCEAN +-117.9,33.66,13.0,1642.0,423.0,841.0,368.0,3.6042,226000.0,<1H OCEAN +-117.9,33.65,24.0,4496.0,877.0,1928.0,855.0,4.6808,245500.0,<1H OCEAN +-117.89,33.66,32.0,2736.0,550.0,1279.0,534.0,5.5422,253100.0,<1H OCEAN +-117.9,33.65,27.0,3310.0,598.0,1402.0,563.0,6.632,441100.0,<1H OCEAN +-117.9,33.64,28.0,2466.0,507.0,1081.0,465.0,3.9375,339800.0,<1H OCEAN +-117.9,33.65,28.0,2043.0,430.0,1108.0,452.0,5.2549,261800.0,<1H OCEAN +-117.9,33.65,30.0,2196.0,486.0,1131.0,460.0,4.4135,272300.0,<1H OCEAN +-117.91,33.65,24.0,885.0,321.0,590.0,254.0,2.625,217900.0,<1H OCEAN +-117.9,33.65,30.0,1634.0,373.0,771.0,364.0,3.4125,284100.0,<1H OCEAN +-117.91,33.65,17.0,1328.0,377.0,762.0,344.0,2.2222,276800.0,<1H OCEAN +-117.91,33.64,37.0,1998.0,472.0,1030.0,436.0,3.9306,268400.0,<1H OCEAN +-117.9,33.64,36.0,2017.0,357.0,850.0,348.0,5.0532,310900.0,<1H OCEAN +-117.91,33.64,29.0,1652.0,310.0,832.0,326.0,4.8098,325400.0,<1H OCEAN +-117.91,33.64,40.0,1958.0,333.0,876.0,364.0,3.6406,326100.0,<1H OCEAN +-117.91,33.63,32.0,1901.0,400.0,946.0,418.0,2.7264,311100.0,<1H OCEAN +-117.92,33.63,34.0,2479.0,491.0,1131.0,490.0,4.9643,317900.0,<1H OCEAN +-117.91,33.63,30.0,2071.0,412.0,1081.0,412.0,4.9125,335700.0,<1H OCEAN +-117.92,33.64,25.0,2224.0,580.0,985.0,516.0,3.1305,268800.0,<1H OCEAN +-117.91,33.64,38.0,2222.0,542.0,1067.0,512.0,2.8553,307600.0,<1H OCEAN +-117.92,33.63,24.0,1562.0,441.0,696.0,347.0,3.5161,236400.0,<1H OCEAN +-117.91,33.63,32.0,1122.0,233.0,557.0,223.0,3.5388,407000.0,<1H OCEAN +-117.92,33.62,37.0,2038.0,379.0,837.0,381.0,5.2416,471300.0,<1H OCEAN +-117.92,33.63,39.0,1469.0,226.0,553.0,225.0,7.8496,490800.0,<1H OCEAN +-117.92,33.62,35.0,1821.0,335.0,727.0,316.0,6.5842,458500.0,<1H OCEAN +-117.91,33.61,27.0,1797.0,343.0,435.0,203.0,5.9196,500001.0,<1H OCEAN +-117.91,33.62,32.0,1997.0,427.0,944.0,426.0,4.4063,500001.0,<1H OCEAN +-117.91,33.62,35.0,2426.0,359.0,937.0,387.0,9.2175,500001.0,<1H OCEAN +-117.92,33.61,18.0,1538.0,425.0,425.0,288.0,5.3369,312500.0,<1H OCEAN +-117.93,33.62,33.0,1890.0,416.0,859.0,329.0,4.5658,500001.0,<1H OCEAN +-117.93,33.62,34.0,2125.0,498.0,1052.0,468.0,5.6315,484600.0,<1H OCEAN +-117.94,33.62,28.0,1765.0,390.0,832.0,349.0,6.5928,439100.0,<1H OCEAN +-117.95,33.63,29.0,1496.0,282.0,463.0,215.0,6.0516,500001.0,<1H OCEAN +-117.96,33.6,34.0,959.0,230.0,384.0,197.0,5.2333,471400.0,NEAR OCEAN +-117.93,33.61,27.0,1806.0,465.0,791.0,358.0,3.8125,366700.0,<1H OCEAN +-117.93,33.62,37.0,2204.0,428.0,807.0,410.0,7.0516,500001.0,<1H OCEAN +-117.94,33.62,25.0,1188.0,264.0,569.0,249.0,3.6607,500001.0,<1H OCEAN +-117.94,33.65,20.0,5476.0,1073.0,2327.0,963.0,5.6637,222100.0,<1H OCEAN +-117.93,33.65,35.0,2133.0,413.0,1473.0,402.0,4.4211,215200.0,<1H OCEAN +-117.93,33.64,31.0,1291.0,356.0,1252.0,373.0,2.7143,185400.0,<1H OCEAN +-117.94,33.64,18.0,1867.0,426.0,871.0,399.0,2.6221,272000.0,<1H OCEAN +-117.93,33.64,24.0,1395.0,396.0,1478.0,404.0,2.5301,192900.0,<1H OCEAN +-117.92,33.64,24.0,2539.0,695.0,1623.0,611.0,3.0708,188700.0,<1H OCEAN +-117.94,33.64,24.0,1097.0,307.0,470.0,333.0,1.6389,225000.0,<1H OCEAN +-117.93,33.64,15.0,1707.0,514.0,1335.0,434.0,2.7543,177800.0,<1H OCEAN +-117.95,33.63,27.0,2489.0,481.0,1082.0,443.0,5.8777,358800.0,<1H OCEAN +-117.95,33.63,27.0,891.0,183.0,513.0,171.0,6.0,381500.0,<1H OCEAN +-117.93,33.63,10.0,2766.0,732.0,1332.0,646.0,4.6161,226300.0,<1H OCEAN +-117.95,33.63,17.0,6745.0,1547.0,2688.0,1535.0,3.9917,271600.0,<1H OCEAN +-117.91,33.65,19.0,1589.0,421.0,1118.0,394.0,4.1029,213400.0,<1H OCEAN +-117.92,33.64,5.0,949.0,287.0,497.0,244.0,2.75,225000.0,<1H OCEAN +-117.92,33.65,15.0,1309.0,477.0,1330.0,424.0,3.4417,182500.0,<1H OCEAN +-117.93,33.65,29.0,1253.0,375.0,1198.0,362.0,3.5179,225000.0,<1H OCEAN +-117.91,33.65,24.0,1494.0,494.0,814.0,459.0,2.1074,181300.0,<1H OCEAN +-117.92,33.65,28.0,1087.0,423.0,807.0,425.0,0.9702,225400.0,<1H OCEAN +-117.92,33.65,25.0,1679.0,470.0,1314.0,473.0,4.1026,211500.0,<1H OCEAN +-117.92,33.65,20.0,1391.0,393.0,856.0,360.0,3.184,220000.0,<1H OCEAN +-117.93,33.65,27.0,1283.0,406.0,1063.0,376.0,2.75,275000.0,<1H OCEAN +-117.92,33.68,28.0,3397.0,597.0,1397.0,560.0,4.8125,244600.0,<1H OCEAN +-117.93,33.67,27.0,3512.0,472.0,1391.0,481.0,8.1001,336500.0,<1H OCEAN +-117.94,33.67,26.0,2552.0,314.0,925.0,323.0,8.1839,367000.0,<1H OCEAN +-117.94,33.66,16.0,2095.0,450.0,963.0,411.0,5.5,224100.0,<1H OCEAN +-117.94,33.65,15.0,2016.0,443.0,1015.0,419.0,5.2732,209700.0,<1H OCEAN +-117.93,33.65,34.0,2141.0,425.0,1559.0,429.0,4.2036,220100.0,<1H OCEAN +-117.93,33.69,19.0,2602.0,439.0,1156.0,424.0,5.01,263800.0,<1H OCEAN +-117.93,33.69,26.0,2822.0,473.0,1258.0,469.0,6.4441,261000.0,<1H OCEAN +-117.92,33.68,25.0,2017.0,454.0,1024.0,428.0,4.4732,245600.0,<1H OCEAN +-117.93,33.68,33.0,2664.0,432.0,1197.0,429.0,5.069,264200.0,<1H OCEAN +-117.94,33.68,26.0,4183.0,539.0,1504.0,520.0,7.4056,374200.0,<1H OCEAN +-117.92,33.67,14.0,6224.0,1679.0,3148.0,1589.0,4.2071,430900.0,<1H OCEAN +-117.93,33.66,18.0,2043.0,250.0,702.0,246.0,9.6062,414700.0,<1H OCEAN +-117.93,33.65,26.0,5831.0,1546.0,4738.0,1477.0,3.1483,213000.0,<1H OCEAN +-117.91,33.69,30.0,2704.0,426.0,1289.0,423.0,5.2815,229500.0,<1H OCEAN +-117.91,33.67,16.0,7961.0,2276.0,5014.0,2116.0,3.512,218400.0,<1H OCEAN +-117.9,33.68,25.0,7060.0,1159.0,3903.0,1139.0,4.8359,249200.0,<1H OCEAN +-117.9,33.67,26.0,2507.0,393.0,1333.0,392.0,6.1601,266100.0,<1H OCEAN +-117.89,33.68,26.0,2905.0,504.0,1452.0,491.0,5.0853,260300.0,<1H OCEAN +-117.9,33.67,25.0,639.0,98.0,311.0,93.0,6.6833,275900.0,<1H OCEAN +-117.91,33.67,32.0,3058.0,562.0,1475.0,569.0,4.4625,253500.0,<1H OCEAN +-117.91,33.66,26.0,5761.0,1326.0,2681.0,1116.0,4.0341,243300.0,<1H OCEAN +-117.91,33.65,14.0,2598.0,759.0,1584.0,703.0,4.0417,180900.0,<1H OCEAN +-117.91,33.66,21.0,1708.0,505.0,1099.0,434.0,3.225,193800.0,<1H OCEAN +-117.9,33.66,22.0,3568.0,938.0,1952.0,938.0,3.1667,161000.0,<1H OCEAN +-117.9,33.66,4.0,456.0,91.0,623.0,84.0,6.6369,192600.0,<1H OCEAN +-117.9,33.69,13.0,9947.0,1675.0,4071.0,1582.0,5.422,316600.0,<1H OCEAN +-117.87,33.69,4.0,2337.0,768.0,983.0,655.0,3.7174,275000.0,<1H OCEAN +-117.89,33.68,8.0,5278.0,1575.0,2389.0,1371.0,3.3409,181300.0,<1H OCEAN +-117.88,33.69,20.0,5330.0,976.0,2734.0,1000.0,5.2138,233100.0,<1H OCEAN +-117.86,33.71,21.0,1795.0,406.0,2246.0,400.0,3.152,152800.0,<1H OCEAN +-117.86,33.71,36.0,191.0,42.0,208.0,37.0,3.375,157500.0,<1H OCEAN +-117.87,33.71,16.0,3397.0,686.0,1924.0,621.0,4.9148,155500.0,<1H OCEAN +-117.87,33.71,13.0,1087.0,340.0,817.0,342.0,3.5326,262500.0,<1H OCEAN +-117.87,33.7,17.0,3216.0,607.0,1916.0,618.0,4.9153,266400.0,<1H OCEAN +-117.87,33.7,21.0,3648.0,654.0,2266.0,628.0,5.0956,246000.0,<1H OCEAN +-117.88,33.71,27.0,1596.0,297.0,1703.0,289.0,4.1,184900.0,<1H OCEAN +-117.88,33.71,30.0,1739.0,359.0,1914.0,369.0,3.5551,185200.0,<1H OCEAN +-117.88,33.71,20.0,1738.0,509.0,1403.0,411.0,3.1742,245000.0,<1H OCEAN +-117.88,33.7,18.0,2135.0,373.0,1464.0,405.0,5.4836,225800.0,<1H OCEAN +-117.88,33.7,17.0,5122.0,1544.0,2966.0,1339.0,3.4835,116700.0,<1H OCEAN +-117.88,33.7,24.0,534.0,88.0,249.0,74.0,5.3254,240500.0,<1H OCEAN +-117.88,33.7,16.0,1505.0,358.0,835.0,339.0,3.8029,205400.0,<1H OCEAN +-117.9,33.72,36.0,443.0,117.0,577.0,115.0,3.6875,137500.0,<1H OCEAN +-117.91,33.72,32.0,2436.0,504.0,2839.0,516.0,4.5607,182100.0,<1H OCEAN +-117.9,33.72,33.0,2613.0,562.0,3150.0,543.0,4.3899,180700.0,<1H OCEAN +-117.9,33.73,31.0,1171.0,306.0,1690.0,301.0,3.2639,155200.0,<1H OCEAN +-117.89,33.72,25.0,4343.0,847.0,3872.0,850.0,4.65,197800.0,<1H OCEAN +-117.89,33.72,23.0,2305.0,538.0,2493.0,502.0,3.6618,183500.0,<1H OCEAN +-117.88,33.73,32.0,1947.0,355.0,1786.0,332.0,4.5726,177500.0,<1H OCEAN +-117.88,33.72,38.0,1421.0,300.0,1236.0,263.0,3.9844,165300.0,<1H OCEAN +-117.88,33.72,36.0,1910.0,352.0,1593.0,329.0,3.89,170000.0,<1H OCEAN +-117.9,33.71,16.0,4208.0,630.0,2592.0,662.0,6.1966,260500.0,<1H OCEAN +-117.89,33.71,23.0,1422.0,260.0,1092.0,263.0,4.7422,202400.0,<1H OCEAN +-117.89,33.71,24.0,4365.0,804.0,2663.0,753.0,4.5814,233300.0,<1H OCEAN +-117.9,33.71,16.0,1917.0,317.0,1324.0,351.0,6.2488,252000.0,<1H OCEAN +-117.89,33.71,16.0,1591.0,225.0,926.0,239.0,6.2452,266300.0,<1H OCEAN +-117.9,33.71,15.0,539.0,71.0,287.0,66.0,6.3427,305200.0,<1H OCEAN +-117.92,33.7,15.0,3201.0,,1510.0,622.0,4.2708,161700.0,<1H OCEAN +-117.91,33.71,16.0,3113.0,783.0,1719.0,715.0,3.6505,145700.0,<1H OCEAN +-117.89,33.7,13.0,1857.0,572.0,838.0,525.0,3.2386,129200.0,<1H OCEAN +-117.9,33.7,12.0,4695.0,1110.0,2153.0,989.0,4.6483,190800.0,<1H OCEAN +-117.9,33.7,15.0,2289.0,686.0,982.0,634.0,4.5757,162500.0,<1H OCEAN +-117.86,33.73,31.0,1115.0,268.0,1369.0,259.0,3.5694,150500.0,<1H OCEAN +-117.86,33.72,31.0,1194.0,297.0,1602.0,306.0,2.3333,157700.0,<1H OCEAN +-117.87,33.72,39.0,3167.0,669.0,2789.0,619.0,3.5902,165900.0,<1H OCEAN +-117.87,33.72,37.0,2216.0,497.0,2445.0,506.0,3.8421,174000.0,<1H OCEAN +-117.86,33.72,37.0,1429.0,428.0,2089.0,399.0,3.413,150600.0,<1H OCEAN +-117.86,33.72,32.0,1461.0,340.0,1909.0,346.0,3.5511,159100.0,<1H OCEAN +-117.85,33.73,28.0,1499.0,574.0,3328.0,595.0,2.4539,115000.0,<1H OCEAN +-117.84,33.73,20.0,2572.0,732.0,1534.0,669.0,2.4211,175000.0,<1H OCEAN +-117.84,33.74,22.0,6072.0,1802.0,4715.0,1666.0,3.1353,121400.0,<1H OCEAN +-117.84,33.74,24.0,1752.0,407.0,910.0,427.0,3.3611,134600.0,<1H OCEAN +-117.84,33.74,25.0,1818.0,577.0,1426.0,532.0,3.2104,112500.0,<1H OCEAN +-117.83,33.74,23.0,1818.0,522.0,958.0,485.0,2.6771,131500.0,<1H OCEAN +-117.86,33.75,5.0,187.0,49.0,207.0,51.0,1.8,154200.0,<1H OCEAN +-117.86,33.75,31.0,1761.0,515.0,1810.0,468.0,1.9309,173400.0,<1H OCEAN +-117.86,33.75,6.0,1565.0,599.0,3157.0,629.0,2.9271,123200.0,<1H OCEAN +-117.86,33.76,15.0,851.0,297.0,1326.0,254.0,2.8289,117500.0,<1H OCEAN +-117.85,33.74,19.0,1248.0,357.0,1214.0,328.0,2.7059,159800.0,<1H OCEAN +-117.85,33.75,27.0,2311.0,632.0,2936.0,609.0,2.5651,171400.0,<1H OCEAN +-117.86,33.74,9.0,525.0,171.0,1257.0,165.0,3.375,165300.0,<1H OCEAN +-117.86,33.74,32.0,691.0,151.0,926.0,148.0,4.125,175900.0,<1H OCEAN +-117.85,33.74,26.0,2589.0,1003.0,5756.0,983.0,2.1992,170800.0,<1H OCEAN +-117.86,33.73,23.0,407.0,108.0,647.0,96.0,3.775,177400.0,<1H OCEAN +-117.86,33.73,30.0,2651.0,572.0,3249.0,552.0,3.7202,182100.0,<1H OCEAN +-117.86,33.73,26.0,1702.0,456.0,2776.0,463.0,2.6385,180200.0,<1H OCEAN +-117.87,33.74,31.0,2338.0,652.0,3289.0,631.0,2.6734,158500.0,<1H OCEAN +-117.87,33.73,45.0,2264.0,,1970.0,499.0,3.4193,177000.0,<1H OCEAN +-117.87,33.74,52.0,2411.0,526.0,2165.0,521.0,3.415,172500.0,<1H OCEAN +-117.86,33.74,38.0,2415.0,642.0,3242.0,599.0,3.425,165600.0,<1H OCEAN +-117.86,33.73,38.0,2284.0,511.0,2451.0,504.0,3.3125,159100.0,<1H OCEAN +-117.86,33.74,34.0,2254.0,630.0,2984.0,625.0,2.5,162500.0,<1H OCEAN +-117.89,33.73,33.0,1308.0,375.0,2175.0,347.0,3.0824,177400.0,<1H OCEAN +-117.9,33.73,32.0,2930.0,833.0,5116.0,854.0,3.7147,164100.0,<1H OCEAN +-117.9,33.73,30.0,746.0,172.0,1048.0,163.0,4.1,166400.0,<1H OCEAN +-117.88,33.73,33.0,2291.0,594.0,3232.0,589.0,3.2037,163500.0,<1H OCEAN +-117.88,33.73,36.0,2471.0,498.0,2594.0,475.0,3.75,170500.0,<1H OCEAN +-117.89,33.75,31.0,1205.0,280.0,1476.0,301.0,4.0231,139200.0,<1H OCEAN +-117.89,33.74,32.0,1562.0,365.0,2145.0,347.0,2.9167,158400.0,<1H OCEAN +-117.89,33.74,34.0,1759.0,353.0,2083.0,330.0,3.2292,160600.0,<1H OCEAN +-117.9,33.75,28.0,1346.0,291.0,1575.0,278.0,3.425,159500.0,<1H OCEAN +-117.9,33.74,19.0,1566.0,379.0,1032.0,330.0,2.2105,180400.0,<1H OCEAN +-117.9,33.74,18.0,1884.0,442.0,1915.0,442.0,2.3783,166700.0,<1H OCEAN +-117.91,33.74,25.0,4273.0,965.0,2946.0,922.0,2.9926,183200.0,<1H OCEAN +-117.91,33.73,26.0,2413.0,512.0,2867.0,509.0,4.7639,179900.0,<1H OCEAN +-117.9,33.73,26.0,1324.0,314.0,1804.0,311.0,3.9659,178500.0,<1H OCEAN +-117.9,33.74,24.0,2932.0,955.0,5516.0,911.0,2.7535,111000.0,<1H OCEAN +-117.9,33.74,25.0,808.0,163.0,1066.0,189.0,4.7679,173100.0,<1H OCEAN +-117.9,33.74,24.0,1435.0,494.0,3171.0,504.0,3.0833,151700.0,<1H OCEAN +-117.89,33.74,32.0,660.0,145.0,959.0,113.0,3.75,159000.0,<1H OCEAN +-117.89,33.74,33.0,619.0,139.0,1217.0,146.0,4.6875,154400.0,<1H OCEAN +-117.89,33.73,32.0,728.0,134.0,837.0,135.0,4.0769,163900.0,<1H OCEAN +-117.88,33.75,10.0,1823.0,590.0,2176.0,548.0,1.5026,151800.0,<1H OCEAN +-117.88,33.74,29.0,720.0,174.0,1045.0,181.0,3.1964,151900.0,<1H OCEAN +-117.88,33.74,16.0,1444.0,446.0,2329.0,441.0,3.1691,159400.0,<1H OCEAN +-117.88,33.74,31.0,1120.0,296.0,1718.0,268.0,2.8077,140300.0,<1H OCEAN +-117.87,33.74,16.0,1243.0,365.0,1925.0,376.0,2.7632,158900.0,<1H OCEAN +-117.88,33.74,19.0,2261.0,642.0,3545.0,635.0,2.5224,148500.0,<1H OCEAN +-117.88,33.74,25.0,1799.0,557.0,3416.0,538.0,3.0083,163500.0,<1H OCEAN +-117.87,33.76,6.0,2992.0,1194.0,3800.0,1130.0,2.246,183300.0,<1H OCEAN +-117.87,33.75,14.0,5526.0,1916.0,6799.0,1796.0,2.6561,144400.0,<1H OCEAN +-117.87,33.75,18.0,697.0,255.0,812.0,221.0,2.6635,162500.0,<1H OCEAN +-117.86,33.75,39.0,275.0,87.0,554.0,103.0,3.5972,158000.0,<1H OCEAN +-117.86,33.75,13.0,1632.0,598.0,3356.0,659.0,1.5054,137500.0,<1H OCEAN +-117.87,33.75,12.0,2782.0,1077.0,1968.0,795.0,0.971,102500.0,<1H OCEAN +-117.87,33.75,26.0,411.0,114.0,448.0,95.0,1.7019,350000.0,<1H OCEAN +-117.88,33.76,37.0,2988.0,677.0,2354.0,666.0,3.4345,235500.0,<1H OCEAN +-117.88,33.76,17.0,1768.0,474.0,1079.0,436.0,1.7823,205300.0,<1H OCEAN +-117.88,33.75,50.0,1344.0,228.0,747.0,234.0,4.5125,195400.0,<1H OCEAN +-117.88,33.75,34.0,3004.0,673.0,5477.0,640.0,2.8342,187200.0,<1H OCEAN +-117.9,33.76,26.0,2678.0,702.0,3262.0,685.0,3.6953,176800.0,<1H OCEAN +-117.9,33.75,32.0,1893.0,431.0,2245.0,426.0,3.7143,163000.0,<1H OCEAN +-117.89,33.76,36.0,2656.0,572.0,2370.0,571.0,3.8056,177200.0,<1H OCEAN +-117.89,33.75,34.0,2753.0,654.0,3117.0,631.0,3.1713,170100.0,<1H OCEAN +-117.88,33.78,26.0,1813.0,421.0,1235.0,343.0,3.5972,187500.0,<1H OCEAN +-117.88,33.77,31.0,2549.0,355.0,1044.0,362.0,6.9737,288800.0,<1H OCEAN +-117.88,33.78,26.0,3141.0,670.0,1572.0,724.0,3.3472,237400.0,<1H OCEAN +-117.89,33.77,32.0,2342.0,570.0,1445.0,453.0,4.1951,195000.0,<1H OCEAN +-117.89,33.77,35.0,1799.0,343.0,1239.0,368.0,3.9219,189600.0,<1H OCEAN +-117.89,33.76,34.0,1050.0,210.0,723.0,201.0,4.8,192700.0,<1H OCEAN +-117.87,33.77,52.0,2512.0,356.0,978.0,365.0,8.0784,320300.0,<1H OCEAN +-117.87,33.76,37.0,4943.0,851.0,2164.0,788.0,4.1071,311300.0,<1H OCEAN +-117.86,33.77,39.0,4159.0,655.0,1669.0,651.0,4.6111,240300.0,<1H OCEAN +-117.86,33.76,34.0,3153.0,561.0,1679.0,532.0,4.7083,205300.0,<1H OCEAN +-117.84,33.76,14.0,1458.0,423.0,615.0,365.0,4.2798,218800.0,<1H OCEAN +-117.85,33.76,26.0,2312.0,525.0,1273.0,437.0,2.8828,204700.0,<1H OCEAN +-117.84,33.76,16.0,238.0,51.0,93.0,50.0,5.375,215700.0,<1H OCEAN +-117.84,33.76,22.0,378.0,78.0,196.0,81.0,3.6806,219400.0,<1H OCEAN +-117.84,33.75,16.0,4367.0,1161.0,2164.0,1005.0,4.0214,139500.0,<1H OCEAN +-117.85,33.76,33.0,1866.0,327.0,1053.0,371.0,4.5461,213800.0,<1H OCEAN +-117.84,33.77,14.0,4412.0,952.0,1656.0,874.0,4.3292,206500.0,<1H OCEAN +-117.85,33.77,23.0,5928.0,1204.0,3570.0,1150.0,4.0398,233100.0,<1H OCEAN +-117.84,33.77,26.0,3350.0,581.0,1314.0,550.0,3.5195,249100.0,<1H OCEAN +-117.84,33.76,26.0,2110.0,409.0,1146.0,407.0,4.3698,229600.0,<1H OCEAN +-117.83,33.75,22.0,6433.0,1174.0,2703.0,1125.0,4.9957,296400.0,<1H OCEAN +-117.82,33.75,30.0,2910.0,535.0,1270.0,489.0,4.6161,236500.0,<1H OCEAN +-117.82,33.75,24.0,893.0,209.0,342.0,197.0,2.8261,146500.0,<1H OCEAN +-117.82,33.74,25.0,2720.0,680.0,1559.0,631.0,3.0958,137800.0,<1H OCEAN +-117.83,33.75,34.0,2660.0,601.0,1475.0,567.0,3.4152,210200.0,<1H OCEAN +-117.81,33.75,23.0,3498.0,636.0,1574.0,642.0,5.021,252200.0,<1H OCEAN +-117.8,33.74,30.0,3569.0,551.0,1540.0,537.0,5.2998,247200.0,<1H OCEAN +-117.81,33.73,19.0,5471.0,1345.0,2828.0,1247.0,3.5719,252800.0,<1H OCEAN +-117.81,33.74,24.0,2696.0,649.0,1908.0,626.0,3.3047,216900.0,<1H OCEAN +-117.81,33.73,19.0,4022.0,975.0,2334.0,954.0,3.0305,140600.0,<1H OCEAN +-117.81,33.73,23.0,3056.0,556.0,1508.0,555.0,4.7273,234200.0,<1H OCEAN +-117.82,33.73,23.0,2542.0,772.0,1720.0,675.0,3.8703,137000.0,<1H OCEAN +-117.82,33.73,24.0,845.0,190.0,482.0,190.0,4.7039,225000.0,<1H OCEAN +-117.82,33.73,27.0,1270.0,258.0,809.0,264.0,5.0162,223000.0,<1H OCEAN +-117.83,33.74,23.0,6114.0,1623.0,4088.0,1521.0,3.0382,183600.0,<1H OCEAN +-117.83,33.73,20.0,5768.0,1597.0,4853.0,1465.0,3.5387,160400.0,<1H OCEAN +-117.8,33.76,27.0,2655.0,345.0,1017.0,335.0,6.9014,366800.0,<1H OCEAN +-117.79,33.76,25.0,2037.0,252.0,796.0,249.0,11.0546,487200.0,<1H OCEAN +-117.79,33.75,26.0,2893.0,345.0,983.0,326.0,13.466,500001.0,<1H OCEAN +-117.79,33.75,26.0,2955.0,377.0,1074.0,373.0,9.3845,500001.0,<1H OCEAN +-117.8,33.75,29.0,3058.0,488.0,1197.0,474.0,5.3903,286600.0,<1H OCEAN +-117.8,33.74,33.0,2890.0,453.0,1300.0,452.0,6.5616,290200.0,<1H OCEAN +-117.81,33.75,25.0,2365.0,471.0,1197.0,458.0,3.7031,227800.0,<1H OCEAN +-117.79,33.77,23.0,3596.0,451.0,1292.0,458.0,8.5403,451300.0,<1H OCEAN +-117.79,33.77,21.0,4349.0,553.0,1680.0,519.0,6.9014,439000.0,<1H OCEAN +-117.78,33.76,25.0,2260.0,261.0,719.0,254.0,11.4537,500001.0,<1H OCEAN +-117.78,33.78,6.0,9792.0,1283.0,3744.0,1179.0,10.1714,481500.0,<1H OCEAN +-117.76,33.79,4.0,8974.0,1268.0,3754.0,1241.0,8.2653,374000.0,<1H OCEAN +-117.77,33.76,19.0,3532.0,402.0,1200.0,426.0,11.0124,500001.0,<1H OCEAN +-117.82,33.77,32.0,2308.0,301.0,967.0,320.0,7.0565,324600.0,<1H OCEAN +-117.83,33.77,22.0,2956.0,642.0,1342.0,558.0,4.1151,203200.0,<1H OCEAN +-117.83,33.77,26.0,4931.0,853.0,2249.0,818.0,4.275,285400.0,<1H OCEAN +-117.82,33.76,27.0,3230.0,449.0,1193.0,448.0,6.5308,287800.0,<1H OCEAN +-117.82,33.77,27.0,2578.0,314.0,976.0,340.0,7.1882,359200.0,<1H OCEAN +-117.82,33.76,33.0,2774.0,428.0,1229.0,407.0,6.2944,265600.0,<1H OCEAN +-117.81,33.76,32.0,2053.0,339.0,835.0,323.0,5.5654,281800.0,<1H OCEAN +-117.8,33.77,29.0,5436.0,707.0,2046.0,685.0,8.7496,349500.0,<1H OCEAN +-117.81,33.77,31.0,4624.0,624.0,1852.0,635.0,7.2392,334600.0,<1H OCEAN +-117.81,33.83,8.0,7326.0,884.0,2569.0,798.0,10.157,477100.0,<1H OCEAN +-117.83,33.83,13.0,3759.0,489.0,1496.0,499.0,8.3818,377600.0,<1H OCEAN +-117.83,33.83,23.0,2775.0,547.0,1226.0,510.0,3.6707,231400.0,<1H OCEAN +-117.82,33.8,15.0,3207.0,647.0,1414.0,595.0,4.0484,165600.0,<1H OCEAN +-117.83,33.79,29.0,1454.0,236.0,724.0,262.0,4.8542,218100.0,<1H OCEAN +-117.82,33.79,26.0,2641.0,633.0,3657.0,617.0,4.1339,222300.0,<1H OCEAN +-117.83,33.8,30.0,4713.0,758.0,2271.0,730.0,5.8622,221000.0,<1H OCEAN +-117.83,33.8,31.0,2016.0,409.0,1095.0,405.0,3.8681,196000.0,<1H OCEAN +-117.84,33.79,37.0,2733.0,460.0,1378.0,476.0,5.3041,235700.0,<1H OCEAN +-117.83,33.79,25.0,2070.0,513.0,1078.0,460.0,2.9312,220100.0,<1H OCEAN +-117.84,33.79,34.0,2590.0,603.0,1658.0,608.0,2.378,199600.0,<1H OCEAN +-117.84,33.78,26.0,2577.0,434.0,1086.0,432.0,4.6125,229200.0,<1H OCEAN +-117.84,33.78,24.0,3817.0,787.0,1656.0,713.0,4.25,248000.0,<1H OCEAN +-117.81,33.79,23.0,3114.0,610.0,2045.0,577.0,3.75,211900.0,<1H OCEAN +-117.82,33.78,25.0,4977.0,645.0,2061.0,646.0,6.58,318500.0,<1H OCEAN +-117.81,33.78,27.0,3589.0,507.0,1484.0,495.0,5.7934,270500.0,<1H OCEAN +-117.82,33.78,28.0,4485.0,667.0,2048.0,685.0,5.4562,274700.0,<1H OCEAN +-117.81,33.82,20.0,2819.0,319.0,1019.0,319.0,12.2092,500001.0,<1H OCEAN +-117.8,33.83,17.0,2971.0,350.0,1180.0,346.0,11.1228,500001.0,<1H OCEAN +-117.82,33.82,22.0,3173.0,372.0,1181.0,355.0,8.3637,500001.0,<1H OCEAN +-117.81,33.81,19.0,3154.0,390.0,1404.0,384.0,8.9257,431800.0,<1H OCEAN +-117.81,33.82,22.0,2898.0,335.0,1057.0,324.0,10.8111,500001.0,<1H OCEAN +-117.82,33.81,19.0,2556.0,304.0,822.0,260.0,9.9055,456900.0,<1H OCEAN +-117.83,33.82,26.0,3259.0,456.0,1354.0,459.0,5.7817,267600.0,<1H OCEAN +-117.83,33.82,23.0,1100.0,285.0,940.0,267.0,3.6953,150000.0,<1H OCEAN +-117.83,33.81,24.0,3550.0,895.0,2828.0,834.0,2.8403,225600.0,<1H OCEAN +-117.82,33.81,25.0,2662.0,402.0,1247.0,401.0,5.4395,244000.0,<1H OCEAN +-117.83,33.81,28.0,1972.0,315.0,970.0,326.0,5.4298,234200.0,<1H OCEAN +-117.82,33.81,30.0,2260.0,345.0,1182.0,341.0,6.0705,236700.0,<1H OCEAN +-117.85,33.79,46.0,1846.0,383.0,867.0,336.0,3.4234,200000.0,<1H OCEAN +-117.85,33.79,52.0,2102.0,403.0,898.0,365.0,3.6827,236800.0,<1H OCEAN +-117.86,33.79,31.0,3523.0,922.0,2660.0,949.0,3.1792,146400.0,<1H OCEAN +-117.85,33.79,52.0,1963.0,430.0,1197.0,415.0,3.8929,211000.0,<1H OCEAN +-117.85,33.78,23.0,3187.0,870.0,1977.0,852.0,3.3939,212100.0,<1H OCEAN +-117.86,33.78,25.0,2635.0,660.0,1710.0,634.0,3.125,215000.0,<1H OCEAN +-117.85,33.77,16.0,2186.0,511.0,908.0,466.0,4.575,225000.0,<1H OCEAN +-117.85,33.79,40.0,1251.0,336.0,729.0,343.0,2.4688,236400.0,<1H OCEAN +-117.86,33.79,34.0,1883.0,408.0,1227.0,424.0,3.8929,187500.0,<1H OCEAN +-117.86,33.78,21.0,2713.0,731.0,1952.0,722.0,2.6959,178800.0,<1H OCEAN +-117.87,33.78,21.0,2487.0,573.0,1515.0,494.0,4.3039,168500.0,<1H OCEAN +-117.87,33.78,19.0,2813.0,567.0,1334.0,596.0,4.7208,173500.0,<1H OCEAN +-117.87,33.78,30.0,2022.0,522.0,1196.0,463.0,3.7454,186000.0,<1H OCEAN +-117.86,33.8,35.0,1683.0,347.0,1242.0,335.0,3.5172,190400.0,<1H OCEAN +-117.86,33.79,42.0,1024.0,191.0,483.0,187.0,4.105,194500.0,<1H OCEAN +-117.87,33.79,25.0,2546.0,545.0,1543.0,521.0,4.192,219900.0,<1H OCEAN +-117.88,33.79,32.0,1484.0,295.0,928.0,295.0,5.1418,190300.0,<1H OCEAN +-117.89,33.78,16.0,6352.0,1747.0,5085.0,1649.0,2.8835,193800.0,<1H OCEAN +-117.9,33.78,25.0,10336.0,2596.0,7111.0,2419.0,3.3627,197900.0,<1H OCEAN +-117.85,33.84,26.0,2095.0,280.0,793.0,261.0,6.6719,271700.0,<1H OCEAN +-117.86,33.84,19.0,1725.0,392.0,920.0,400.0,3.0087,159400.0,<1H OCEAN +-117.85,33.84,17.0,2830.0,502.0,1370.0,459.0,5.1785,247300.0,<1H OCEAN +-117.85,33.83,26.0,1904.0,292.0,945.0,303.0,5.6784,232400.0,<1H OCEAN +-117.86,33.83,23.0,2377.0,403.0,1101.0,408.0,5.3439,227100.0,<1H OCEAN +-117.84,33.84,23.0,4388.0,864.0,2526.0,846.0,4.5217,219400.0,<1H OCEAN +-117.86,33.8,34.0,1793.0,480.0,1722.0,441.0,2.8235,153100.0,<1H OCEAN +-117.85,33.81,26.0,4186.0,767.0,2447.0,777.0,4.9917,248100.0,<1H OCEAN +-117.85,33.81,32.0,1766.0,322.0,876.0,330.0,4.0417,234500.0,<1H OCEAN +-117.85,33.8,34.0,1593.0,283.0,872.0,255.0,3.825,216700.0,<1H OCEAN +-117.85,33.8,40.0,1461.0,286.0,1322.0,264.0,4.3269,194100.0,<1H OCEAN +-117.84,33.81,26.0,5574.0,1025.0,2607.0,988.0,4.0324,244900.0,<1H OCEAN +-117.84,33.8,35.0,1490.0,251.0,629.0,257.0,4.3661,222100.0,<1H OCEAN +-117.84,33.8,34.0,2004.0,331.0,843.0,328.0,3.59,230600.0,<1H OCEAN +-117.86,33.82,9.0,1682.0,291.0,1015.0,271.0,6.6603,230900.0,<1H OCEAN +-117.84,33.82,24.0,10281.0,1689.0,4926.0,1629.0,4.7946,251200.0,<1H OCEAN +-117.84,33.84,23.0,6157.0,1129.0,2817.0,1073.0,5.0629,232600.0,<1H OCEAN +-117.89,33.84,35.0,3315.0,744.0,2425.0,687.0,3.5521,182800.0,<1H OCEAN +-117.89,33.83,35.0,2984.0,446.0,1435.0,455.0,5.6276,200800.0,<1H OCEAN +-117.9,33.83,33.0,3065.0,611.0,2204.0,606.0,3.8456,211800.0,<1H OCEAN +-117.89,33.82,21.0,1591.0,298.0,904.0,297.0,4.8906,179100.0,<1H OCEAN +-117.89,33.8,38.0,51.0,12.0,41.0,10.0,6.0224,187500.0,<1H OCEAN +-117.89,33.82,24.0,1268.0,210.0,700.0,224.0,5.0605,216200.0,<1H OCEAN +-117.89,33.82,18.0,3197.0,809.0,1894.0,726.0,3.6761,140500.0,<1H OCEAN +-117.87,33.81,15.0,3082.0,536.0,1268.0,531.0,3.7604,280100.0,<1H OCEAN +-117.87,33.84,10.0,3381.0,729.0,1584.0,636.0,5.3812,235400.0,<1H OCEAN +-117.88,33.84,26.0,1499.0,290.0,755.0,277.0,3.5893,238500.0,<1H OCEAN +-117.88,33.84,31.0,3301.0,712.0,1532.0,682.0,3.7303,223800.0,<1H OCEAN +-117.87,33.83,27.0,2287.0,,1140.0,351.0,5.6163,231000.0,<1H OCEAN +-117.88,33.83,22.0,3522.0,543.0,1706.0,524.0,6.4685,241200.0,<1H OCEAN +-117.88,33.83,25.0,1785.0,248.0,750.0,251.0,6.8407,266700.0,<1H OCEAN +-117.88,33.82,17.0,2247.0,705.0,1382.0,618.0,3.8631,225000.0,<1H OCEAN +-117.88,33.82,26.0,1783.0,298.0,1048.0,306.0,6.0488,232000.0,<1H OCEAN +-117.87,33.82,26.0,2435.0,346.0,1088.0,350.0,5.9397,249400.0,<1H OCEAN +-117.88,33.85,26.0,3924.0,781.0,2332.0,725.0,3.7772,223900.0,<1H OCEAN +-117.88,33.85,34.0,1127.0,185.0,588.0,181.0,4.375,224700.0,<1H OCEAN +-117.88,33.84,34.0,1410.0,214.0,837.0,240.0,6.1168,213900.0,<1H OCEAN +-117.88,33.84,33.0,1526.0,237.0,906.0,245.0,5.1782,225000.0,<1H OCEAN +-117.9,33.85,31.0,3413.0,764.0,2326.0,728.0,4.325,187100.0,<1H OCEAN +-117.9,33.85,35.0,1756.0,328.0,1026.0,332.0,3.6,193500.0,<1H OCEAN +-117.89,33.85,18.0,2036.0,414.0,1292.0,380.0,3.875,273000.0,<1H OCEAN +-117.9,33.85,32.0,1605.0,314.0,986.0,306.0,3.3375,186200.0,<1H OCEAN +-117.89,33.85,13.0,1583.0,474.0,1672.0,432.0,3.2303,201300.0,<1H OCEAN +-117.9,33.84,31.0,2043.0,468.0,1524.0,454.0,3.5329,187400.0,<1H OCEAN +-117.89,33.84,33.0,1587.0,374.0,1159.0,331.0,2.8021,195100.0,<1H OCEAN +-117.88,33.85,25.0,1234.0,351.0,507.0,285.0,2.3173,225000.0,<1H OCEAN +-117.88,33.84,25.0,1781.0,349.0,918.0,378.0,3.9286,262700.0,<1H OCEAN +-117.87,33.84,23.0,1678.0,369.0,912.0,347.0,4.5,237300.0,<1H OCEAN +-117.87,33.84,25.0,1928.0,414.0,961.0,385.0,4.0724,231400.0,<1H OCEAN +-117.87,33.84,16.0,1545.0,354.0,730.0,350.0,4.5112,139000.0,<1H OCEAN +-117.87,33.84,17.0,2395.0,410.0,1224.0,399.0,5.1182,249200.0,<1H OCEAN +-117.85,33.85,17.0,4678.0,1065.0,2427.0,1020.0,4.2276,254100.0,<1H OCEAN +-117.86,33.85,17.0,1131.0,236.0,622.0,244.0,4.9306,158500.0,<1H OCEAN +-117.92,33.85,38.0,2082.0,532.0,1592.0,510.0,2.3704,166100.0,<1H OCEAN +-117.92,33.84,45.0,2019.0,394.0,1549.0,377.0,4.6111,223000.0,<1H OCEAN +-117.92,33.85,44.0,1231.0,258.0,682.0,244.0,3.2344,170100.0,<1H OCEAN +-117.91,33.85,35.0,932.0,258.0,1147.0,267.0,2.7014,156700.0,<1H OCEAN +-117.91,33.84,35.0,1244.0,324.0,1603.0,322.0,2.9583,175400.0,<1H OCEAN +-117.91,33.85,22.0,1178.0,289.0,865.0,294.0,3.025,180000.0,<1H OCEAN +-117.91,33.84,29.0,1570.0,482.0,1849.0,430.0,2.6563,162500.0,<1H OCEAN +-117.93,33.85,27.0,1962.0,544.0,1492.0,481.0,1.9621,118100.0,<1H OCEAN +-117.94,33.85,26.0,1888.0,429.0,1550.0,458.0,3.3393,168600.0,<1H OCEAN +-117.93,33.85,33.0,2489.0,546.0,1857.0,444.0,2.9474,178400.0,<1H OCEAN +-117.93,33.85,31.0,2149.0,465.0,966.0,302.0,3.875,183900.0,<1H OCEAN +-117.93,33.85,25.0,1026.0,288.0,1646.0,283.0,4.2019,163900.0,<1H OCEAN +-117.93,33.85,36.0,2147.0,416.0,1011.0,392.0,3.2188,196900.0,<1H OCEAN +-117.94,33.85,37.0,588.0,121.0,436.0,104.0,4.275,186200.0,<1H OCEAN +-117.93,33.84,23.0,2870.0,653.0,1680.0,598.0,3.2301,189900.0,<1H OCEAN +-117.95,33.85,13.0,6963.0,1426.0,3892.0,1375.0,4.1325,203500.0,<1H OCEAN +-117.96,33.85,35.0,1175.0,191.0,568.0,186.0,4.125,189200.0,<1H OCEAN +-117.97,33.85,30.0,2513.0,476.0,1611.0,472.0,4.0061,182900.0,<1H OCEAN +-117.96,33.85,36.0,1951.0,365.0,1254.0,358.0,4.8438,185700.0,<1H OCEAN +-117.95,33.84,32.0,1378.0,492.0,1202.0,448.0,3.4028,183700.0,<1H OCEAN +-117.95,33.84,19.0,1749.0,406.0,969.0,391.0,3.75,173400.0,<1H OCEAN +-117.95,33.84,34.0,1229.0,215.0,1035.0,218.0,3.5455,180000.0,<1H OCEAN +-117.94,33.84,25.0,4016.0,831.0,2166.0,774.0,3.1884,135400.0,<1H OCEAN +-117.94,33.84,28.0,604.0,207.0,615.0,212.0,3.6214,182100.0,<1H OCEAN +-117.98,33.85,23.0,2089.0,377.0,1085.0,362.0,4.765,181500.0,<1H OCEAN +-117.98,33.84,33.0,2291.0,439.0,1187.0,405.0,3.9539,191100.0,<1H OCEAN +-117.98,33.84,35.0,984.0,179.0,661.0,199.0,5.0747,189600.0,<1H OCEAN +-117.97,33.85,45.0,818.0,147.0,546.0,152.0,5.1057,170700.0,<1H OCEAN +-117.96,33.84,31.0,2265.0,537.0,1617.0,507.0,3.4583,186300.0,<1H OCEAN +-117.97,33.84,34.0,874.0,153.0,549.0,153.0,4.8667,186800.0,<1H OCEAN +-117.97,33.84,35.0,793.0,128.0,589.0,137.0,5.25,190200.0,<1H OCEAN +-117.97,33.84,25.0,2471.0,518.0,1539.0,500.0,4.2679,191700.0,<1H OCEAN +-117.97,33.84,18.0,1063.0,209.0,462.0,223.0,2.8348,219000.0,<1H OCEAN +-117.99,33.84,31.0,2982.0,547.0,1895.0,570.0,4.9115,255500.0,<1H OCEAN +-117.97,33.83,16.0,2035.0,564.0,1118.0,503.0,3.2546,187500.0,<1H OCEAN +-117.98,33.84,31.0,1252.0,225.0,714.0,226.0,4.6042,220700.0,<1H OCEAN +-117.98,33.83,17.0,3506.0,992.0,2104.0,893.0,3.3006,185800.0,<1H OCEAN +-118.0,33.82,21.0,2253.0,580.0,1536.0,500.0,3.2326,204700.0,<1H OCEAN +-118.01,33.82,31.0,1960.0,380.0,1356.0,356.0,4.0625,225900.0,<1H OCEAN +-118.01,33.83,24.0,4639.0,1374.0,3093.0,1257.0,2.5577,202300.0,<1H OCEAN +-118.01,33.83,23.0,1086.0,268.0,825.0,250.0,2.4609,219600.0,<1H OCEAN +-118.0,33.83,26.0,1718.0,385.0,1022.0,368.0,3.9333,196100.0,<1H OCEAN +-118.0,33.83,24.0,2578.0,580.0,1217.0,529.0,2.2401,212500.0,<1H OCEAN +-118.0,33.82,18.0,2947.0,559.0,1820.0,551.0,4.5294,224800.0,<1H OCEAN +-117.99,33.83,25.0,3434.0,835.0,1749.0,657.0,3.2539,199000.0,<1H OCEAN +-117.99,33.82,19.0,1991.0,528.0,1202.0,460.0,3.1538,252100.0,<1H OCEAN +-117.99,33.83,35.0,1484.0,252.0,916.0,248.0,5.2657,191400.0,<1H OCEAN +-117.99,33.82,33.0,2342.0,475.0,1367.0,509.0,4.1167,215500.0,<1H OCEAN +-117.98,33.83,17.0,3419.0,932.0,2460.0,766.0,3.2823,228500.0,<1H OCEAN +-117.98,33.82,34.0,1038.0,175.0,578.0,174.0,4.9219,200000.0,<1H OCEAN +-117.98,33.82,34.0,1290.0,220.0,867.0,241.0,5.5486,218100.0,<1H OCEAN +-117.98,33.83,32.0,1133.0,166.0,523.0,187.0,6.213,230800.0,<1H OCEAN +-117.97,33.83,22.0,3310.0,688.0,1807.0,674.0,4.0185,200900.0,<1H OCEAN +-117.97,33.82,26.0,2335.0,504.0,1121.0,502.0,2.9891,205200.0,<1H OCEAN +-117.97,33.82,26.0,4013.0,985.0,2442.0,922.0,3.7655,197700.0,<1H OCEAN +-117.96,33.83,30.0,2838.0,649.0,1758.0,593.0,3.3831,197400.0,<1H OCEAN +-117.96,33.83,18.0,2067.0,770.0,870.0,541.0,3.1315,137500.0,<1H OCEAN +-117.96,33.83,29.0,1194.0,176.0,474.0,170.0,6.1001,298900.0,<1H OCEAN +-117.95,33.84,18.0,3418.0,815.0,1961.0,773.0,3.65,171400.0,<1H OCEAN +-117.94,33.83,20.0,812.0,192.0,494.0,172.0,3.25,350000.0,<1H OCEAN +-117.95,33.83,31.0,2421.0,389.0,1348.0,413.0,4.9394,217800.0,<1H OCEAN +-117.94,33.82,34.0,1347.0,212.0,676.0,201.0,3.8828,215400.0,<1H OCEAN +-117.94,33.82,27.0,1366.0,326.0,878.0,325.0,3.4,196900.0,<1H OCEAN +-117.95,33.82,29.0,2929.0,640.0,1618.0,584.0,3.6875,213200.0,<1H OCEAN +-117.95,33.83,35.0,1107.0,207.0,641.0,210.0,5.0599,216700.0,<1H OCEAN +-117.96,33.83,34.0,982.0,148.0,498.0,156.0,6.3214,220800.0,<1H OCEAN +-117.95,33.83,36.0,1380.0,237.0,690.0,234.0,3.8214,210900.0,<1H OCEAN +-117.93,33.83,32.0,1792.0,411.0,1131.0,381.0,2.4942,186300.0,<1H OCEAN +-117.92,33.82,36.0,2360.0,405.0,1479.0,386.0,4.3583,187200.0,<1H OCEAN +-117.94,33.82,29.0,1422.0,409.0,1057.0,390.0,2.3347,208100.0,<1H OCEAN +-117.94,33.82,24.0,4735.0,955.0,2600.0,868.0,5.0764,228600.0,<1H OCEAN +-117.93,33.82,28.0,2444.0,555.0,1848.0,567.0,3.0179,198800.0,<1H OCEAN +-117.92,33.84,38.0,1316.0,263.0,671.0,278.0,3.2969,220000.0,<1H OCEAN +-117.92,33.83,6.0,3136.0,990.0,1894.0,859.0,2.5564,171300.0,<1H OCEAN +-117.93,33.83,30.0,1561.0,381.0,1104.0,391.0,3.375,201900.0,<1H OCEAN +-117.93,33.84,34.0,2160.0,298.0,852.0,305.0,6.0531,287100.0,<1H OCEAN +-117.93,33.84,26.0,2811.0,612.0,1374.0,566.0,3.475,282500.0,<1H OCEAN +-117.91,33.84,26.0,1156.0,393.0,1880.0,400.0,2.2716,350000.0,<1H OCEAN +-117.9,33.83,23.0,2459.0,689.0,2720.0,598.0,2.8072,164700.0,<1H OCEAN +-117.91,33.83,9.0,1160.0,368.0,735.0,325.0,1.119,175000.0,<1H OCEAN +-117.92,33.83,17.0,382.0,86.0,272.0,81.0,1.425,212500.0,<1H OCEAN +-117.91,33.84,16.0,919.0,253.0,912.0,249.0,1.5903,165400.0,<1H OCEAN +-117.91,33.84,25.0,1021.0,252.0,975.0,258.0,3.125,168100.0,<1H OCEAN +-117.91,33.83,47.0,504.0,113.0,375.0,109.0,3.6607,160600.0,<1H OCEAN +-117.91,33.83,37.0,1039.0,260.0,719.0,243.0,3.0288,161400.0,<1H OCEAN +-117.92,33.83,36.0,1072.0,193.0,639.0,196.0,5.0275,179300.0,<1H OCEAN +-117.92,33.83,52.0,1514.0,301.0,855.0,293.0,3.6042,166400.0,<1H OCEAN +-117.91,33.83,32.0,1855.0,527.0,2568.0,504.0,2.5509,170800.0,<1H OCEAN +-117.9,33.82,32.0,1187.0,302.0,1003.0,275.0,2.4931,166900.0,<1H OCEAN +-117.92,33.82,10.0,1548.0,506.0,1535.0,424.0,4.5057,152400.0,<1H OCEAN +-117.91,33.82,32.0,2696.0,640.0,2330.0,626.0,2.9479,184600.0,<1H OCEAN +-117.91,33.82,29.0,1444.0,326.0,1038.0,271.0,2.3843,182900.0,<1H OCEAN +-117.91,33.81,18.0,1181.0,353.0,781.0,340.0,2.5625,153100.0,<1H OCEAN +-117.91,33.82,32.0,1408.0,307.0,1331.0,284.0,3.7014,179600.0,<1H OCEAN +-117.93,33.81,18.0,3291.0,587.0,1640.0,563.0,4.8981,166300.0,<1H OCEAN +-117.92,33.81,34.0,988.0,173.0,759.0,184.0,5.6047,205100.0,<1H OCEAN +-117.93,33.8,34.0,3903.0,717.0,2054.0,716.0,4.2731,218000.0,<1H OCEAN +-117.92,33.8,17.0,1317.0,256.0,679.0,272.0,4.6696,159500.0,<1H OCEAN +-117.9,33.8,21.0,1342.0,326.0,748.0,335.0,2.9231,45000.0,<1H OCEAN +-117.9,33.8,22.0,2964.0,829.0,2639.0,771.0,2.4833,157500.0,<1H OCEAN +-117.9,33.8,23.0,1368.0,397.0,1940.0,358.0,3.0789,350000.0,<1H OCEAN +-117.9,33.8,27.0,2176.0,442.0,1440.0,418.0,4.375,212500.0,<1H OCEAN +-117.94,33.81,33.0,1891.0,334.0,932.0,343.0,4.2759,238000.0,<1H OCEAN +-117.94,33.81,25.0,1731.0,482.0,1127.0,455.0,3.256,214300.0,<1H OCEAN +-117.94,33.81,34.0,1290.0,203.0,664.0,204.0,5.8461,227400.0,<1H OCEAN +-117.94,33.81,26.0,1589.0,259.0,735.0,315.0,4.5714,243200.0,<1H OCEAN +-117.94,33.8,28.0,2914.0,489.0,1500.0,499.0,4.9429,254800.0,<1H OCEAN +-117.94,33.81,24.0,4602.0,1131.0,3003.0,1014.0,3.6771,172200.0,<1H OCEAN +-117.93,33.8,29.0,1672.0,267.0,891.0,281.0,4.8611,231900.0,<1H OCEAN +-117.95,33.82,35.0,1068.0,190.0,514.0,174.0,4.0735,208700.0,<1H OCEAN +-117.95,33.82,35.0,1117.0,181.0,496.0,168.0,4.3269,224700.0,<1H OCEAN +-117.96,33.82,32.0,2856.0,622.0,1499.0,601.0,3.63,183400.0,<1H OCEAN +-117.96,33.82,32.0,2726.0,556.0,1513.0,531.0,3.7917,197400.0,<1H OCEAN +-117.96,33.8,30.0,729.0,131.0,488.0,139.0,4.7667,195200.0,<1H OCEAN +-117.96,33.81,35.0,1153.0,192.0,884.0,208.0,5.2384,177400.0,<1H OCEAN +-117.96,33.81,34.0,1416.0,277.0,980.0,284.0,4.7772,182500.0,<1H OCEAN +-117.96,33.81,35.0,1996.0,326.0,1409.0,330.0,4.7738,180000.0,<1H OCEAN +-117.96,33.82,29.0,2176.0,468.0,1632.0,428.0,3.707,180400.0,<1H OCEAN +-117.96,33.82,19.0,1199.0,251.0,730.0,276.0,3.6422,209400.0,<1H OCEAN +-117.95,33.81,33.0,1724.0,291.0,943.0,285.0,5.118,195200.0,<1H OCEAN +-117.96,33.81,34.0,1941.0,356.0,1021.0,339.0,4.4663,183900.0,<1H OCEAN +-117.95,33.81,24.0,2749.0,498.0,1367.0,460.0,4.025,240700.0,<1H OCEAN +-118.0,33.81,33.0,2970.0,547.0,1869.0,539.0,4.3636,201800.0,<1H OCEAN +-118.0,33.81,22.0,2642.0,640.0,1702.0,588.0,3.5268,174700.0,<1H OCEAN +-118.01,33.81,25.0,1831.0,345.0,809.0,339.0,4.5179,177100.0,<1H OCEAN +-118.0,33.82,24.0,3002.0,644.0,1495.0,634.0,3.1087,202800.0,<1H OCEAN +-118.0,33.81,13.0,2782.0,605.0,1749.0,628.0,4.1276,153800.0,<1H OCEAN +-118.0,33.81,17.0,2142.0,436.0,946.0,412.0,3.7059,146300.0,<1H OCEAN +-117.99,33.8,18.0,383.0,94.0,487.0,98.0,3.975,162500.0,<1H OCEAN +-118.0,33.81,17.0,1530.0,404.0,883.0,344.0,2.8835,196500.0,<1H OCEAN +-117.99,33.82,21.0,2281.0,557.0,1510.0,460.0,2.8625,189600.0,<1H OCEAN +-117.99,33.81,23.0,3284.0,795.0,3257.0,758.0,2.4526,182900.0,<1H OCEAN +-117.99,33.81,42.0,161.0,40.0,157.0,50.0,2.2,153100.0,<1H OCEAN +-117.99,33.81,46.0,38.0,8.0,66.0,14.0,4.1667,162500.0,<1H OCEAN +-117.98,33.81,28.0,3528.0,816.0,2304.0,764.0,2.582,181800.0,<1H OCEAN +-117.98,33.81,18.0,3751.0,878.0,2281.0,815.0,3.7201,183100.0,<1H OCEAN +-117.98,33.81,35.0,897.0,156.0,479.0,161.0,5.152,215600.0,<1H OCEAN +-117.97,33.81,26.0,4022.0,1081.0,2457.0,1001.0,2.8042,206300.0,<1H OCEAN +-117.97,33.81,30.0,2406.0,462.0,1753.0,456.0,4.485,180600.0,<1H OCEAN +-117.99,33.8,25.0,3179.0,639.0,2526.0,623.0,3.3281,180800.0,<1H OCEAN +-117.99,33.79,33.0,2064.0,324.0,1384.0,315.0,4.5263,169000.0,<1H OCEAN +-117.99,33.79,29.0,2470.0,560.0,1589.0,513.0,3.1801,190500.0,<1H OCEAN +-117.99,33.79,35.0,2301.0,467.0,2272.0,454.0,3.9566,167800.0,<1H OCEAN +-117.98,33.8,35.0,2114.0,341.0,1077.0,343.0,5.4876,227500.0,<1H OCEAN +-117.98,33.79,35.0,2356.0,478.0,1659.0,480.0,4.1115,179700.0,<1H OCEAN +-117.98,33.8,32.0,2161.0,432.0,1503.0,402.0,4.3036,191400.0,<1H OCEAN +-117.97,33.8,35.0,2985.0,474.0,1614.0,453.0,5.4631,225600.0,<1H OCEAN +-117.97,33.79,33.0,3268.0,641.0,1704.0,591.0,3.6849,211400.0,<1H OCEAN +-118.0,33.79,18.0,3679.0,694.0,1820.0,652.0,3.6531,143500.0,<1H OCEAN +-117.99,33.78,15.0,4273.0,993.0,2300.0,946.0,3.5313,213000.0,<1H OCEAN +-117.99,33.79,21.0,2695.0,707.0,1888.0,683.0,3.2857,213300.0,<1H OCEAN +-117.98,33.78,31.0,2825.0,546.0,1908.0,563.0,3.9798,187500.0,<1H OCEAN +-117.97,33.79,34.0,2456.0,410.0,1289.0,442.0,4.1818,224200.0,<1H OCEAN +-117.99,33.78,19.0,7399.0,1698.0,3554.0,1593.0,3.1049,173900.0,<1H OCEAN +-117.97,33.78,35.0,3148.0,597.0,2110.0,587.0,3.9479,203800.0,<1H OCEAN +-117.98,33.78,22.0,4255.0,971.0,2901.0,920.0,3.2636,180200.0,<1H OCEAN +-117.96,33.8,33.0,1984.0,420.0,1119.0,387.0,3.4821,231300.0,<1H OCEAN +-117.96,33.79,36.0,2398.0,403.0,1261.0,402.0,5.2816,221800.0,<1H OCEAN +-117.96,33.8,35.0,1493.0,267.0,811.0,272.0,5.244,218000.0,<1H OCEAN +-117.96,33.8,33.0,2362.0,394.0,1185.0,387.0,4.425,188400.0,<1H OCEAN +-117.95,33.79,34.0,2584.0,408.0,1233.0,405.0,5.6935,218300.0,<1H OCEAN +-117.95,33.78,26.0,4115.0,883.0,2184.0,825.0,3.9536,191000.0,<1H OCEAN +-117.96,33.79,29.0,1813.0,501.0,1170.0,482.0,2.0677,214500.0,<1H OCEAN +-117.96,33.78,35.0,1330.0,201.0,658.0,217.0,6.37,229200.0,<1H OCEAN +-117.94,33.8,23.0,2757.0,734.0,1811.0,707.0,2.8,214300.0,<1H OCEAN +-117.95,33.79,34.0,2912.0,520.0,1625.0,501.0,4.4667,190600.0,<1H OCEAN +-117.95,33.8,34.0,1654.0,285.0,905.0,292.0,4.6389,214600.0,<1H OCEAN +-117.95,33.8,32.0,1219.0,192.0,634.0,197.0,5.237,215700.0,<1H OCEAN +-117.94,33.79,24.0,4179.0,784.0,1902.0,733.0,4.7986,236500.0,<1H OCEAN +-117.93,33.78,36.0,2169.0,359.0,1018.0,370.0,4.3906,231300.0,<1H OCEAN +-117.94,33.78,34.0,2627.0,468.0,1409.0,450.0,4.7731,199200.0,<1H OCEAN +-117.93,33.79,36.0,2363.0,403.0,1240.0,391.0,4.0909,190800.0,<1H OCEAN +-117.93,33.79,34.0,3592.0,616.0,2138.0,605.0,5.2129,193400.0,<1H OCEAN +-117.92,33.79,35.0,1785.0,288.0,1033.0,297.0,4.5739,190500.0,<1H OCEAN +-117.92,33.79,29.0,3692.0,969.0,2683.0,881.0,3.1726,198700.0,<1H OCEAN +-117.92,33.79,26.0,2737.0,614.0,1877.0,606.0,2.8622,184300.0,<1H OCEAN +-117.91,33.79,22.0,4417.0,1054.0,2759.0,983.0,4.25,170300.0,<1H OCEAN +-117.91,33.78,33.0,2729.0,549.0,2223.0,535.0,4.0362,177900.0,<1H OCEAN +-117.93,33.78,28.0,4380.0,820.0,2187.0,835.0,3.9018,182300.0,<1H OCEAN +-117.92,33.77,28.0,3614.0,960.0,3282.0,889.0,3.522,190300.0,<1H OCEAN +-117.91,33.78,26.0,4297.0,1037.0,3596.0,967.0,3.045,184000.0,<1H OCEAN +-117.92,33.78,35.0,1654.0,323.0,1065.0,354.0,3.4837,186500.0,<1H OCEAN +-117.95,33.78,9.0,3553.0,1035.0,2017.0,986.0,2.9726,133800.0,<1H OCEAN +-117.94,33.77,32.0,714.0,142.0,654.0,154.0,4.5052,170800.0,<1H OCEAN +-117.94,33.77,33.0,2964.0,747.0,2235.0,718.0,3.2591,175900.0,<1H OCEAN +-117.94,33.78,11.0,2880.0,745.0,1806.0,722.0,3.8056,171100.0,<1H OCEAN +-117.94,33.78,40.0,299.0,68.0,163.0,70.0,3.0125,166100.0,<1H OCEAN +-117.93,33.77,36.0,3157.0,582.0,1842.0,561.0,4.5833,190700.0,<1H OCEAN +-117.96,33.78,26.0,2136.0,557.0,1528.0,537.0,2.4931,236100.0,<1H OCEAN +-117.95,33.78,32.0,2296.0,560.0,1376.0,532.0,3.7303,188500.0,<1H OCEAN +-117.96,33.78,33.0,1520.0,,658.0,242.0,4.875,269300.0,<1H OCEAN +-117.95,33.77,38.0,1476.0,308.0,1114.0,309.0,4.1917,181800.0,<1H OCEAN +-117.95,33.77,38.0,989.0,246.0,691.0,204.0,3.2632,180900.0,<1H OCEAN +-117.96,33.77,32.0,4398.0,905.0,2777.0,884.0,4.1321,222800.0,<1H OCEAN +-117.97,33.77,20.0,1988.0,424.0,1277.0,425.0,2.9414,162200.0,<1H OCEAN +-117.97,33.77,25.0,1295.0,417.0,856.0,342.0,2.7157,350000.0,<1H OCEAN +-117.97,33.77,22.0,2244.0,575.0,1543.0,533.0,2.6618,179600.0,<1H OCEAN +-117.99,33.77,15.0,2081.0,531.0,1617.0,561.0,3.4955,160900.0,<1H OCEAN +-117.98,33.77,7.0,2252.0,570.0,1576.0,550.0,3.6333,169800.0,<1H OCEAN +-117.97,33.76,18.0,1862.0,399.0,1301.0,369.0,3.1771,194000.0,<1H OCEAN +-117.98,33.77,22.0,3236.0,673.0,2034.0,662.0,4.0955,174200.0,<1H OCEAN +-117.98,33.76,29.0,1518.0,312.0,1086.0,317.0,4.32,196900.0,<1H OCEAN +-117.97,33.76,28.0,1386.0,272.0,901.0,294.0,4.7464,187500.0,<1H OCEAN +-117.96,33.76,24.0,1328.0,290.0,1012.0,306.0,4.2813,189500.0,<1H OCEAN +-117.96,33.76,22.0,2520.0,556.0,2126.0,527.0,3.7734,193900.0,<1H OCEAN +-117.96,33.75,14.0,2509.0,611.0,1814.0,547.0,2.7986,176100.0,<1H OCEAN +-117.95,33.76,29.0,1829.0,366.0,1703.0,343.0,4.1295,188000.0,<1H OCEAN +-117.94,33.76,27.0,2512.0,506.0,1861.0,511.0,4.2386,184200.0,<1H OCEAN +-117.94,33.76,33.0,1441.0,337.0,1233.0,331.0,3.7232,176200.0,<1H OCEAN +-117.95,33.76,24.0,3956.0,812.0,3196.0,795.0,4.3512,191400.0,<1H OCEAN +-117.94,33.75,30.0,5268.0,1093.0,4480.0,1050.0,4.015,186700.0,<1H OCEAN +-117.96,33.75,25.0,1323.0,208.0,852.0,229.0,4.6167,237300.0,<1H OCEAN +-117.96,33.75,22.0,2300.0,539.0,1625.0,542.0,2.78,196300.0,<1H OCEAN +-117.95,33.75,19.0,1983.0,283.0,1098.0,275.0,6.6355,276100.0,<1H OCEAN +-117.95,33.75,24.0,2027.0,358.0,1405.0,341.0,5.1416,231400.0,<1H OCEAN +-117.97,33.76,27.0,1712.0,325.0,1036.0,345.0,4.0508,183900.0,<1H OCEAN +-117.97,33.75,26.0,3361.0,722.0,2709.0,648.0,3.9107,190700.0,<1H OCEAN +-117.97,33.75,32.0,1564.0,270.0,973.0,290.0,3.75,190400.0,<1H OCEAN +-117.93,33.76,24.0,3202.0,703.0,3308.0,714.0,4.1577,174100.0,<1H OCEAN +-117.93,33.75,24.0,1380.0,339.0,1472.0,304.0,4.2219,162800.0,<1H OCEAN +-117.93,33.75,15.0,2448.0,602.0,1666.0,575.0,3.5967,141600.0,<1H OCEAN +-117.93,33.76,17.0,3341.0,803.0,3381.0,825.0,3.371,161800.0,<1H OCEAN +-117.93,33.76,21.0,2884.0,662.0,2613.0,645.0,4.05,177900.0,<1H OCEAN +-117.92,33.75,8.0,2325.0,598.0,1511.0,565.0,3.3629,137500.0,<1H OCEAN +-117.92,33.75,19.0,1920.0,471.0,1413.0,432.0,4.0313,147500.0,<1H OCEAN +-117.89,33.77,29.0,2577.0,445.0,1849.0,470.0,4.4732,194800.0,<1H OCEAN +-117.9,33.77,35.0,2002.0,378.0,1726.0,387.0,3.9613,182300.0,<1H OCEAN +-117.91,33.77,26.0,5556.0,1398.0,4545.0,1333.0,3.0902,190400.0,<1H OCEAN +-117.91,33.76,22.0,7531.0,1569.0,5254.0,1523.0,3.8506,167400.0,<1H OCEAN +-117.92,33.76,26.0,784.0,177.0,662.0,169.0,2.8438,174300.0,<1H OCEAN +-117.91,33.76,20.0,4413.0,,4818.0,1063.0,2.8594,215100.0,<1H OCEAN +-117.92,33.75,23.0,893.0,223.0,1149.0,216.0,2.6442,156300.0,<1H OCEAN +-117.92,33.75,32.0,790.0,199.0,1196.0,201.0,3.0625,142800.0,<1H OCEAN +-117.91,33.75,8.0,2346.0,679.0,3842.0,674.0,3.0635,160000.0,<1H OCEAN +-117.93,33.74,15.0,1206.0,282.0,677.0,270.0,3.9219,142600.0,<1H OCEAN +-117.93,33.74,30.0,1654.0,434.0,1843.0,467.0,3.1403,153000.0,<1H OCEAN +-117.93,33.74,5.0,639.0,197.0,666.0,197.0,3.3017,87500.0,<1H OCEAN +-117.92,33.74,13.0,4620.0,1265.0,3385.0,1109.0,3.1773,186500.0,<1H OCEAN +-117.92,33.74,18.0,1639.0,491.0,2513.0,458.0,2.1838,159700.0,<1H OCEAN +-117.91,33.74,15.0,715.0,214.0,1394.0,244.0,3.3846,162500.0,<1H OCEAN +-117.92,33.74,24.0,5321.0,1063.0,4011.0,1047.0,4.3882,189300.0,<1H OCEAN +-117.93,33.73,27.0,3662.0,834.0,3009.0,743.0,3.9816,179500.0,<1H OCEAN +-117.94,33.74,24.0,4248.0,840.0,3118.0,798.0,4.2222,207200.0,<1H OCEAN +-117.94,33.73,24.0,4197.0,718.0,2468.0,714.0,5.2563,211400.0,<1H OCEAN +-117.95,33.74,16.0,2768.0,600.0,1182.0,563.0,3.7162,201200.0,<1H OCEAN +-117.95,33.74,25.0,1393.0,243.0,976.0,245.0,5.4485,225200.0,<1H OCEAN +-117.95,33.74,21.0,3576.0,554.0,1846.0,538.0,5.9838,271900.0,<1H OCEAN +-117.98,33.7,17.0,1989.0,411.0,1401.0,453.0,4.1603,160500.0,<1H OCEAN +-117.98,33.71,24.0,2308.0,464.0,1101.0,407.0,4.4766,230000.0,<1H OCEAN +-117.99,33.71,19.0,1967.0,487.0,1251.0,404.0,3.6696,218800.0,<1H OCEAN +-117.98,33.71,26.0,1905.0,373.0,1098.0,368.0,4.8611,229600.0,<1H OCEAN +-117.96,33.68,26.0,1374.0,234.0,731.0,244.0,6.0905,224800.0,<1H OCEAN +-117.97,33.68,23.0,1722.0,316.0,865.0,309.0,4.6452,273800.0,<1H OCEAN +-117.96,33.68,25.0,2004.0,349.0,1085.0,343.0,4.7656,230700.0,<1H OCEAN +-117.96,33.68,18.0,2594.0,539.0,817.0,485.0,2.3674,219200.0,<1H OCEAN +-117.96,33.68,24.0,6517.0,1279.0,3441.0,1198.0,4.25,152100.0,<1H OCEAN +-117.97,33.68,26.0,3653.0,568.0,1930.0,585.0,5.7301,260900.0,<1H OCEAN +-117.95,33.69,26.0,1417.0,264.0,817.0,261.0,4.875,230400.0,<1H OCEAN +-117.95,33.68,26.0,2249.0,344.0,1311.0,373.0,5.0287,265000.0,<1H OCEAN +-117.95,33.68,27.0,1732.0,303.0,1115.0,308.0,5.5312,239200.0,<1H OCEAN +-117.95,33.68,19.0,1028.0,191.0,340.0,159.0,3.6364,252800.0,<1H OCEAN +-117.95,33.67,25.0,1611.0,383.0,554.0,327.0,3.0417,137300.0,<1H OCEAN +-117.95,33.67,25.0,1799.0,233.0,810.0,265.0,8.289,372400.0,<1H OCEAN +-117.95,33.66,26.0,1787.0,227.0,639.0,224.0,6.8226,329800.0,<1H OCEAN +-117.95,33.66,22.0,2785.0,441.0,1086.0,392.0,7.3719,337400.0,<1H OCEAN +-117.98,33.65,22.0,3335.0,754.0,1500.0,719.0,3.7315,197900.0,<1H OCEAN +-117.98,33.65,18.0,1027.0,206.0,436.0,180.0,4.2159,211300.0,<1H OCEAN +-117.98,33.65,22.0,3592.0,527.0,1598.0,523.0,6.5501,294900.0,<1H OCEAN +-117.98,33.64,20.0,1851.0,495.0,792.0,363.0,3.8187,137500.0,NEAR OCEAN +-117.97,33.74,16.0,1735.0,380.0,784.0,360.0,4.2566,139200.0,<1H OCEAN +-117.97,33.74,18.0,2814.0,539.0,1439.0,493.0,3.599,262000.0,<1H OCEAN +-117.97,33.73,27.0,2097.0,325.0,1217.0,331.0,5.7121,222500.0,<1H OCEAN +-117.97,33.73,26.0,1694.0,260.0,885.0,279.0,5.0875,224200.0,<1H OCEAN +-117.96,33.74,19.0,1783.0,415.0,1025.0,383.0,4.1484,230000.0,<1H OCEAN +-117.96,33.73,22.0,3479.0,455.0,1454.0,488.0,6.6324,347600.0,<1H OCEAN +-117.97,33.73,19.0,4154.0,560.0,2130.0,589.0,7.2845,301800.0,<1H OCEAN +-117.97,33.72,24.0,2991.0,500.0,1437.0,453.0,5.4286,273400.0,<1H OCEAN +-117.95,33.72,21.0,3107.0,483.0,1688.0,503.0,5.9582,288000.0,<1H OCEAN +-117.96,33.72,23.0,3929.0,559.0,1858.0,538.0,6.8645,318200.0,<1H OCEAN +-117.93,33.73,19.0,4021.0,557.0,1872.0,545.0,6.7919,295600.0,<1H OCEAN +-117.93,33.72,17.0,4461.0,585.0,2095.0,580.0,7.6709,319500.0,<1H OCEAN +-117.92,33.73,17.0,1692.0,293.0,934.0,280.0,4.4728,205800.0,<1H OCEAN +-117.92,33.73,14.0,5147.0,1182.0,3171.0,1126.0,3.9929,225800.0,<1H OCEAN +-117.92,33.72,17.0,3318.0,502.0,1520.0,498.0,5.5501,274200.0,<1H OCEAN +-117.96,33.71,19.0,4328.0,849.0,2243.0,808.0,5.5702,342600.0,<1H OCEAN +-117.95,33.71,16.0,6058.0,1715.0,3285.0,1495.0,3.4133,290900.0,<1H OCEAN +-117.96,33.71,19.0,1624.0,221.0,782.0,228.0,4.5962,304500.0,<1H OCEAN +-117.95,33.71,20.0,2781.0,407.0,1242.0,408.0,6.1092,306500.0,<1H OCEAN +-117.94,33.71,18.0,3695.0,602.0,1779.0,572.0,5.9449,276500.0,<1H OCEAN +-117.93,33.71,10.0,2775.0,717.0,1581.0,633.0,4.1366,158800.0,<1H OCEAN +-117.94,33.7,18.0,4827.0,718.0,2471.0,716.0,6.1181,284500.0,<1H OCEAN +-117.95,33.69,24.0,4269.0,618.0,1954.0,597.0,6.9261,284600.0,<1H OCEAN +-117.95,33.7,17.0,5781.0,924.0,2585.0,915.0,5.343,231900.0,<1H OCEAN +-117.98,33.69,22.0,3957.0,520.0,1774.0,527.0,7.0907,350200.0,<1H OCEAN +-117.97,33.69,21.0,4112.0,580.0,1886.0,581.0,6.799,292000.0,<1H OCEAN +-117.98,33.7,16.0,5127.0,631.0,2142.0,596.0,7.8195,390500.0,<1H OCEAN +-117.96,33.7,23.0,4417.0,740.0,1865.0,693.0,5.3428,279300.0,<1H OCEAN +-117.96,33.7,23.0,2622.0,445.0,1103.0,407.0,4.725,289600.0,<1H OCEAN +-117.96,33.69,20.0,3123.0,441.0,1319.0,432.0,6.091,290400.0,<1H OCEAN +-117.96,33.69,17.0,2500.0,343.0,1242.0,368.0,7.7313,316700.0,<1H OCEAN +-117.98,33.7,24.0,3451.0,504.0,1736.0,493.0,6.3749,278000.0,<1H OCEAN +-117.98,33.71,24.0,3430.0,548.0,1601.0,512.0,5.6825,264600.0,<1H OCEAN +-117.97,33.71,26.0,2553.0,405.0,1337.0,411.0,5.3737,252900.0,<1H OCEAN +-117.97,33.71,25.0,3273.0,478.0,1645.0,497.0,5.8195,286100.0,<1H OCEAN +-117.99,33.7,25.0,2017.0,357.0,1063.0,369.0,4.0345,229400.0,<1H OCEAN +-117.98,33.7,17.0,1997.0,340.0,952.0,341.0,4.4148,239200.0,<1H OCEAN +-117.99,33.69,17.0,3386.0,729.0,1715.0,666.0,3.7479,213000.0,<1H OCEAN +-117.98,33.69,16.0,2437.0,438.0,986.0,422.0,5.7117,247200.0,<1H OCEAN +-117.97,33.67,25.0,3906.0,660.0,1809.0,622.0,5.6765,265100.0,<1H OCEAN +-117.97,33.66,22.0,3914.0,600.0,1871.0,607.0,5.8541,281500.0,<1H OCEAN +-117.96,33.67,16.0,5143.0,652.0,2209.0,637.0,7.0173,382100.0,<1H OCEAN +-117.96,33.66,19.0,5925.0,744.0,2302.0,729.0,7.5699,333300.0,<1H OCEAN +-117.96,33.65,23.0,5379.0,684.0,1826.0,555.0,7.0151,350600.0,<1H OCEAN +-117.97,33.65,26.0,2379.0,336.0,988.0,346.0,5.3674,339300.0,<1H OCEAN +-117.97,33.63,25.0,2482.0,360.0,960.0,352.0,6.1572,344000.0,NEAR OCEAN +-117.96,33.65,24.0,4462.0,689.0,1943.0,712.0,5.7395,289800.0,<1H OCEAN +-117.96,33.65,21.0,2030.0,318.0,910.0,311.0,7.8453,343300.0,<1H OCEAN +-117.96,33.65,18.0,3603.0,879.0,1549.0,756.0,4.0229,363100.0,<1H OCEAN +-117.98,33.61,17.0,2054.0,291.0,836.0,288.0,6.8939,383900.0,NEAR OCEAN +-117.97,33.73,18.0,3698.0,574.0,2046.0,614.0,6.2984,269800.0,<1H OCEAN +-117.98,33.73,18.0,3833.0,,2192.0,996.0,3.4679,219700.0,<1H OCEAN +-117.98,33.72,24.0,2826.0,547.0,1738.0,546.0,6.0494,240400.0,<1H OCEAN +-117.98,33.72,28.0,3109.0,561.0,1891.0,562.0,5.2655,243100.0,<1H OCEAN +-117.98,33.67,7.0,5664.0,1174.0,2493.0,1101.0,5.8252,264700.0,<1H OCEAN +-117.98,33.66,26.0,3527.0,547.0,1615.0,542.0,6.1624,279400.0,<1H OCEAN +-117.97,33.67,17.0,4466.0,640.0,2166.0,666.0,6.979,330700.0,<1H OCEAN +-117.97,33.66,14.0,6090.0,1338.0,1974.0,1248.0,2.8061,180300.0,<1H OCEAN +-117.98,33.68,14.0,3396.0,477.0,1542.0,472.0,7.3982,369100.0,<1H OCEAN +-117.98,33.68,24.0,4177.0,,1704.0,606.0,6.2473,281900.0,<1H OCEAN +-117.98,33.68,17.0,2603.0,373.0,1265.0,382.0,6.8039,332900.0,<1H OCEAN +-117.97,33.68,16.0,4508.0,598.0,2221.0,623.0,7.3731,390800.0,<1H OCEAN +-117.97,33.68,26.0,1616.0,292.0,700.0,241.0,5.5105,232100.0,<1H OCEAN +-118.01,33.67,13.0,2902.0,536.0,1125.0,490.0,5.888,447700.0,NEAR OCEAN +-118.01,33.67,16.0,3581.0,780.0,1644.0,774.0,5.041,397600.0,NEAR OCEAN +-118.01,33.66,19.0,4559.0,1045.0,1949.0,910.0,4.355,429200.0,NEAR OCEAN +-118.0,33.66,25.0,4041.0,903.0,1689.0,784.0,4.2289,442700.0,NEAR OCEAN +-118.02,33.65,38.0,2548.0,646.0,755.0,399.0,2.8352,408300.0,NEAR OCEAN +-117.99,33.68,13.0,4000.0,883.0,1999.0,881.0,4.7245,273600.0,<1H OCEAN +-117.99,33.68,18.0,2024.0,462.0,1047.0,451.0,3.5848,186900.0,<1H OCEAN +-117.99,33.67,15.0,3141.0,664.0,1729.0,633.0,4.2165,234600.0,<1H OCEAN +-117.99,33.68,14.0,3305.0,841.0,2272.0,769.0,3.4899,216700.0,<1H OCEAN +-117.99,33.67,19.0,3808.0,790.0,1776.0,756.0,4.625,282200.0,<1H OCEAN +-117.99,33.67,12.0,2228.0,479.0,1122.0,488.0,4.0385,350000.0,<1H OCEAN +-117.99,33.67,17.0,1692.0,427.0,903.0,423.0,3.5859,262500.0,<1H OCEAN +-118.0,33.66,16.0,2809.0,708.0,1260.0,638.0,3.2353,252900.0,NEAR OCEAN +-117.99,33.66,29.0,1330.0,293.0,613.0,236.0,4.6591,353100.0,<1H OCEAN +-117.99,33.66,14.0,3155.0,653.0,951.0,575.0,3.0625,268800.0,<1H OCEAN +-118.02,33.62,11.0,3969.0,834.0,1508.0,754.0,4.3409,271400.0,NEAR OCEAN +-118.05,33.65,5.0,7017.0,935.0,2427.0,867.0,10.1154,477700.0,NEAR OCEAN +-118.0,33.68,12.0,5241.0,985.0,2048.0,943.0,6.4858,285400.0,<1H OCEAN +-118.0,33.67,34.0,3712.0,667.0,1521.0,632.0,4.8125,387800.0,<1H OCEAN +-118.0,33.71,19.0,4808.0,1029.0,2422.0,971.0,4.0121,279700.0,<1H OCEAN +-117.99,33.71,18.0,1994.0,578.0,3031.0,577.0,2.7614,237500.0,<1H OCEAN +-117.99,33.71,17.0,1600.0,458.0,1803.0,432.0,2.7865,216700.0,<1H OCEAN +-118.02,33.71,23.0,5554.0,995.0,2408.0,936.0,5.3886,331900.0,<1H OCEAN +-118.02,33.7,23.0,5069.0,770.0,2473.0,769.0,6.3047,285700.0,<1H OCEAN +-118.02,33.72,22.0,8844.0,1706.0,4404.0,1594.0,4.4453,267800.0,<1H OCEAN +-118.01,33.73,23.0,4095.0,578.0,1766.0,589.0,6.7418,302500.0,<1H OCEAN +-118.02,33.73,24.0,6393.0,1141.0,2743.0,1057.0,5.1384,336900.0,<1H OCEAN +-118.03,33.72,24.0,5203.0,957.0,2465.0,946.0,5.163,261000.0,<1H OCEAN +-118.04,33.72,24.0,7141.0,1330.0,3418.0,1268.0,4.6649,237800.0,<1H OCEAN +-117.99,33.73,24.0,2104.0,421.0,1181.0,414.0,3.8365,250900.0,<1H OCEAN +-118.0,33.73,26.0,2236.0,280.0,809.0,282.0,6.7395,342800.0,<1H OCEAN +-117.99,33.73,20.0,3182.0,884.0,1770.0,817.0,3.1912,220800.0,<1H OCEAN +-117.99,33.72,26.0,1787.0,275.0,801.0,270.0,5.5514,255700.0,<1H OCEAN +-117.99,33.72,17.0,2801.0,649.0,1473.0,535.0,4.2875,134800.0,<1H OCEAN +-117.99,33.72,14.0,2127.0,537.0,1338.0,475.0,3.628,188500.0,<1H OCEAN +-118.01,33.71,18.0,6565.0,1357.0,3079.0,1248.0,4.7515,295600.0,<1H OCEAN +-118.01,33.7,24.0,3856.0,567.0,1741.0,588.0,7.248,302700.0,<1H OCEAN +-118.01,33.69,3.0,945.0,115.0,337.0,123.0,11.5199,500001.0,<1H OCEAN +-117.99,33.7,13.0,4013.0,903.0,1999.0,859.0,4.625,248800.0,<1H OCEAN +-117.99,33.69,16.0,1476.0,294.0,886.0,270.0,5.3259,216400.0,<1H OCEAN +-117.99,33.69,12.0,2480.0,858.0,1441.0,788.0,1.6705,350000.0,<1H OCEAN +-118.02,33.71,24.0,2598.0,443.0,1184.0,435.0,5.8623,287800.0,<1H OCEAN +-118.03,33.7,15.0,3244.0,421.0,1259.0,413.0,7.7854,395300.0,<1H OCEAN +-118.03,33.71,26.0,1483.0,251.0,738.0,235.0,6.0,271400.0,<1H OCEAN +-118.07,33.67,13.0,5126.0,711.0,2429.0,718.0,9.5268,437900.0,NEAR OCEAN +-118.04,33.72,14.0,4494.0,1048.0,2222.0,963.0,4.7821,169400.0,<1H OCEAN +-118.05,33.72,14.0,2673.0,687.0,1192.0,656.0,4.1862,188900.0,<1H OCEAN +-118.04,33.72,15.0,1836.0,490.0,942.0,477.0,4.0238,182500.0,<1H OCEAN +-118.09,33.7,13.0,4770.0,969.0,2261.0,972.0,5.883,295100.0,NEAR OCEAN +-118.04,33.71,12.0,4014.0,868.0,1605.0,769.0,6.0102,396900.0,<1H OCEAN +-118.09,33.75,32.0,6239.0,974.0,2615.0,950.0,6.6188,380000.0,NEAR OCEAN +-118.1,33.74,37.0,997.0,262.0,531.0,282.0,4.7773,400000.0,NEAR OCEAN +-118.11,33.75,15.0,2569.0,812.0,785.0,477.0,5.4011,346400.0,NEAR OCEAN +-118.11,33.74,43.0,1222.0,303.0,565.0,309.0,4.8482,500001.0,NEAR OCEAN +-118.09,33.74,44.0,1671.0,390.0,871.0,367.0,4.6369,422200.0,NEAR OCEAN +-118.11,33.75,24.0,1608.0,314.0,592.0,314.0,5.0926,390500.0,NEAR OCEAN +-118.1,33.74,33.0,2119.0,524.0,872.0,465.0,4.537,495500.0,NEAR OCEAN +-118.1,33.74,31.0,1310.0,342.0,563.0,310.0,4.6528,457100.0,NEAR OCEAN +-118.11,33.73,32.0,1258.0,333.0,645.0,334.0,5.0476,500001.0,NEAR OCEAN +-118.1,33.74,32.0,2035.0,,934.0,512.0,4.2287,500001.0,NEAR OCEAN +-118.07,33.72,24.0,1240.0,296.0,513.0,254.0,4.9044,485000.0,NEAR OCEAN +-118.07,33.72,32.0,1179.0,250.0,369.0,209.0,5.1824,500001.0,NEAR OCEAN +-118.09,33.71,19.0,1397.0,271.0,491.0,197.0,8.7397,500001.0,NEAR OCEAN +-118.06,33.72,17.0,4573.0,937.0,1619.0,796.0,5.7704,500001.0,NEAR OCEAN +-118.05,33.71,25.0,4150.0,570.0,1424.0,547.0,8.8281,461600.0,NEAR OCEAN +-118.06,33.72,22.0,4311.0,531.0,1426.0,533.0,9.8177,500001.0,NEAR OCEAN +-118.07,33.73,13.0,1822.0,313.0,643.0,303.0,9.8346,401700.0,NEAR OCEAN +-118.06,33.72,14.0,2665.0,331.0,964.0,319.0,15.0001,500001.0,NEAR OCEAN +-118.06,33.73,16.0,4392.0,602.0,1490.0,578.0,10.5424,500001.0,<1H OCEAN +-118.08,33.72,14.0,2021.0,396.0,696.0,367.0,7.1673,340700.0,NEAR OCEAN +-118.05,33.73,25.0,2472.0,450.0,1301.0,467.0,5.0699,266100.0,<1H OCEAN +-118.05,33.72,17.0,1875.0,472.0,900.0,406.0,5.2589,226100.0,<1H OCEAN +-118.05,33.72,22.0,5416.0,1271.0,2260.0,1184.0,3.8038,174500.0,<1H OCEAN +-118.09,33.77,26.0,1388.0,409.0,515.0,392.0,1.8015,62000.0,<1H OCEAN +-118.08,33.77,26.0,2461.0,562.0,971.0,544.0,2.1944,87500.0,<1H OCEAN +-118.08,33.77,26.0,2013.0,551.0,664.0,510.0,2.2708,67500.0,<1H OCEAN +-118.08,33.77,26.0,3083.0,806.0,960.0,723.0,1.9074,68500.0,<1H OCEAN +-118.08,33.76,25.0,1995.0,637.0,743.0,597.0,1.4617,46900.0,<1H OCEAN +-118.09,33.76,26.0,1625.0,440.0,533.0,414.0,1.808,58500.0,<1H OCEAN +-118.09,33.77,26.0,5359.0,1508.0,1829.0,1393.0,1.7675,61300.0,<1H OCEAN +-118.08,33.76,26.0,1967.0,577.0,692.0,538.0,1.6111,54300.0,<1H OCEAN +-118.08,33.76,26.0,996.0,364.0,366.0,313.0,1.2813,46700.0,<1H OCEAN +-118.08,33.76,27.0,529.0,159.0,193.0,155.0,2.0952,71300.0,<1H OCEAN +-118.09,33.77,27.0,2301.0,640.0,847.0,627.0,1.7208,67500.0,<1H OCEAN +-118.0,33.76,26.0,1876.0,455.0,1499.0,436.0,2.925,176000.0,<1H OCEAN +-118.01,33.75,30.0,3380.0,722.0,2269.0,652.0,4.525,186000.0,<1H OCEAN +-118.0,33.75,26.0,1382.0,387.0,1977.0,368.0,2.7589,137500.0,<1H OCEAN +-118.0,33.74,25.0,2767.0,346.0,1148.0,372.0,6.394,316700.0,<1H OCEAN +-118.02,33.76,27.0,2905.0,587.0,1781.0,561.0,4.25,214800.0,<1H OCEAN +-118.02,33.75,26.0,2989.0,479.0,1596.0,475.0,5.7157,231200.0,<1H OCEAN +-118.03,33.76,25.0,4650.0,849.0,2503.0,790.0,5.742,221900.0,<1H OCEAN +-118.04,33.76,16.0,2070.0,263.0,878.0,297.0,7.0879,338800.0,<1H OCEAN +-118.04,33.75,16.0,3757.0,650.0,1291.0,614.0,5.2001,235600.0,<1H OCEAN +-118.04,33.74,26.0,2532.0,421.0,1274.0,441.0,5.3559,235800.0,<1H OCEAN +-118.02,33.74,26.0,3842.0,609.0,1961.0,595.0,6.128,248200.0,<1H OCEAN +-118.02,33.73,26.0,3711.0,610.0,1902.0,597.0,5.5599,234100.0,<1H OCEAN +-118.01,33.74,25.0,8110.0,1264.0,3613.0,1232.0,6.0609,264900.0,<1H OCEAN +-117.98,33.75,24.0,3865.0,802.0,2670.0,772.0,3.8158,180000.0,<1H OCEAN +-117.98,33.75,37.0,1264.0,274.0,783.0,273.0,3.3438,199600.0,<1H OCEAN +-117.99,33.75,30.0,1859.0,462.0,1314.0,418.0,3.0909,184400.0,<1H OCEAN +-117.98,33.74,29.0,3443.0,635.0,2257.0,620.0,4.7404,207500.0,<1H OCEAN +-117.99,33.74,26.0,4065.0,741.0,1960.0,739.0,4.506,240000.0,<1H OCEAN +-117.98,33.74,16.0,4636.0,908.0,2341.0,825.0,4.4261,304700.0,<1H OCEAN +-117.99,33.73,17.0,5239.0,1045.0,2440.0,985.0,4.375,248100.0,<1H OCEAN +-117.98,33.73,22.0,4232.0,624.0,2408.0,660.0,6.6539,284900.0,<1H OCEAN +-117.99,33.77,29.0,1312.0,267.0,922.0,255.0,3.1902,202400.0,<1H OCEAN +-117.98,33.76,28.0,3215.0,652.0,2066.0,636.0,4.0194,197400.0,<1H OCEAN +-117.99,33.76,30.0,1572.0,362.0,1351.0,359.0,3.369,190900.0,<1H OCEAN +-117.99,33.76,17.0,2545.0,737.0,1468.0,699.0,1.9439,177700.0,<1H OCEAN +-117.99,33.75,22.0,3024.0,754.0,2357.0,743.0,3.3125,191800.0,<1H OCEAN +-117.98,33.76,23.0,1553.0,518.0,1988.0,474.0,2.1375,150000.0,<1H OCEAN +-117.98,33.76,24.0,1880.0,405.0,967.0,418.0,4.4545,192500.0,<1H OCEAN +-117.98,33.75,27.0,2343.0,415.0,1537.0,426.0,5.1345,210600.0,<1H OCEAN +-118.02,33.77,34.0,2115.0,352.0,1253.0,338.0,5.1507,207500.0,<1H OCEAN +-118.02,33.77,33.0,2683.0,436.0,1520.0,456.0,5.0091,211500.0,<1H OCEAN +-118.02,33.76,25.0,1759.0,404.0,1404.0,385.0,3.6289,195800.0,<1H OCEAN +-118.01,33.77,33.0,1387.0,238.0,890.0,264.0,5.422,204100.0,<1H OCEAN +-118.01,33.77,32.0,1771.0,296.0,995.0,272.0,5.8362,217500.0,<1H OCEAN +-118.01,33.76,35.0,2072.0,349.0,1249.0,317.0,3.9855,191900.0,<1H OCEAN +-118.01,33.76,26.0,2141.0,597.0,2038.0,585.0,2.2981,177700.0,<1H OCEAN +-118.0,33.77,24.0,1324.0,267.0,687.0,264.0,3.4327,192800.0,<1H OCEAN +-118.0,33.76,29.0,1982.0,503.0,1426.0,502.0,3.0263,194200.0,<1H OCEAN +-118.0,33.77,28.0,2401.0,503.0,1155.0,456.0,3.5139,211700.0,<1H OCEAN +-118.0,33.76,14.0,1120.0,319.0,982.0,307.0,2.9083,179200.0,<1H OCEAN +-118.0,33.76,12.0,1250.0,331.0,1047.0,334.0,3.0625,208800.0,<1H OCEAN +-118.03,33.77,21.0,3803.0,898.0,1511.0,829.0,3.0,221200.0,<1H OCEAN +-118.02,33.77,7.0,586.0,118.0,232.0,107.0,5.2077,181300.0,<1H OCEAN +-118.03,33.77,27.0,2000.0,310.0,880.0,294.0,5.635,218900.0,<1H OCEAN +-118.03,33.77,24.0,3810.0,579.0,1818.0,590.0,5.8053,255900.0,<1H OCEAN +-118.03,33.76,32.0,2980.0,494.0,1370.0,481.0,5.0866,223500.0,<1H OCEAN +-118.04,33.76,25.0,4061.0,545.0,1623.0,527.0,7.1572,294900.0,<1H OCEAN +-118.03,33.79,26.0,5321.0,889.0,2932.0,896.0,5.8914,237600.0,<1H OCEAN +-118.03,33.79,32.0,3191.0,634.0,1718.0,611.0,4.1548,216600.0,<1H OCEAN +-118.01,33.79,30.0,2460.0,403.0,1277.0,395.0,5.4372,223200.0,<1H OCEAN +-118.02,33.78,28.0,3375.0,559.0,1754.0,554.0,5.5446,228900.0,<1H OCEAN +-118.01,33.78,19.0,2648.0,478.0,1160.0,452.0,5.9357,207400.0,<1H OCEAN +-118.03,33.78,26.0,2001.0,302.0,836.0,298.0,5.1061,257500.0,<1H OCEAN +-118.01,33.78,26.0,2343.0,377.0,1166.0,373.0,6.0,233100.0,<1H OCEAN +-118.03,33.78,25.0,3554.0,528.0,1600.0,537.0,6.6453,270100.0,<1H OCEAN +-118.04,33.78,26.0,3642.0,557.0,1623.0,569.0,5.8426,259400.0,<1H OCEAN +-118.04,33.78,25.0,3715.0,575.0,1640.0,572.0,5.7705,247100.0,<1H OCEAN +-118.08,33.8,29.0,3675.0,613.0,1457.0,591.0,6.0553,369400.0,<1H OCEAN +-118.07,33.8,34.0,3486.0,507.0,1311.0,503.0,7.1221,384500.0,<1H OCEAN +-118.08,33.79,34.0,2840.0,395.0,1127.0,396.0,7.6144,376200.0,<1H OCEAN +-118.09,33.78,26.0,2146.0,298.0,852.0,296.0,6.6137,342700.0,<1H OCEAN +-118.07,33.79,34.0,2473.0,383.0,967.0,353.0,5.8283,362400.0,<1H OCEAN +-118.09,33.79,31.0,4231.0,617.0,1694.0,623.0,6.6312,360100.0,<1H OCEAN +-118.08,33.78,34.0,2287.0,347.0,1051.0,346.0,5.5767,372000.0,<1H OCEAN +-118.08,33.78,30.0,2879.0,403.0,1109.0,414.0,6.9324,364700.0,<1H OCEAN +-118.08,33.78,25.0,5321.0,967.0,1969.0,903.0,5.0102,340100.0,<1H OCEAN +-118.02,33.79,23.0,6368.0,1030.0,3281.0,1001.0,6.1142,240400.0,<1H OCEAN +-118.01,33.79,23.0,2663.0,430.0,1499.0,403.0,5.7837,258000.0,<1H OCEAN +-118.02,33.8,24.0,84.0,14.0,32.0,8.0,5.875,193800.0,<1H OCEAN +-118.02,33.8,16.0,2956.0,393.0,1379.0,429.0,8.4952,359600.0,<1H OCEAN +-118.01,33.8,16.0,4021.0,701.0,1488.0,650.0,5.32,219500.0,<1H OCEAN +-118.05,33.78,18.0,3414.0,434.0,1272.0,454.0,8.7015,390900.0,<1H OCEAN +-118.05,33.78,25.0,3112.0,435.0,1098.0,401.0,6.0,353500.0,<1H OCEAN +-118.05,33.78,25.0,2356.0,330.0,937.0,326.0,6.6264,359100.0,<1H OCEAN +-118.06,33.78,22.0,4048.0,562.0,1637.0,541.0,7.3463,355600.0,<1H OCEAN +-118.04,33.8,33.0,2685.0,466.0,1359.0,476.0,5.0261,245100.0,<1H OCEAN +-118.06,33.8,21.0,2196.0,504.0,1215.0,477.0,4.8,196900.0,<1H OCEAN +-118.07,33.79,26.0,4422.0,624.0,1936.0,625.0,6.4288,320700.0,<1H OCEAN +-118.06,33.8,22.0,1892.0,442.0,1015.0,404.0,4.1379,212500.0,<1H OCEAN +-118.06,33.8,20.0,1379.0,333.0,937.0,304.0,3.6217,195300.0,<1H OCEAN +-118.07,33.8,17.0,2439.0,554.0,1161.0,532.0,3.6442,193100.0,<1H OCEAN +-118.05,33.79,19.0,1863.0,355.0,1260.0,317.0,3.2465,277400.0,<1H OCEAN +-118.04,33.84,21.0,6623.0,1204.0,3193.0,1129.0,4.5395,256000.0,<1H OCEAN +-118.05,33.84,21.0,4890.0,653.0,2295.0,654.0,6.983,329700.0,<1H OCEAN +-118.04,33.83,19.0,4526.0,830.0,2318.0,748.0,4.6681,320700.0,<1H OCEAN +-118.04,33.82,26.0,4105.0,637.0,2072.0,648.0,5.844,273900.0,<1H OCEAN +-118.04,33.83,20.0,1488.0,312.0,972.0,283.0,4.055,201900.0,<1H OCEAN +-118.05,33.82,25.0,1548.0,279.0,732.0,265.0,5.123,159600.0,<1H OCEAN +-118.06,33.82,25.0,2637.0,462.0,965.0,415.0,4.5833,190900.0,<1H OCEAN +-118.06,33.81,25.0,3497.0,513.0,1839.0,544.0,5.4216,263000.0,<1H OCEAN +-118.07,33.81,22.0,2711.0,352.0,1305.0,368.0,8.5407,398800.0,<1H OCEAN +-118.07,33.8,22.0,1391.0,338.0,810.0,295.0,3.8792,218200.0,<1H OCEAN +-118.08,33.81,21.0,1189.0,281.0,577.0,264.0,3.3155,237500.0,<1H OCEAN +-118.03,33.82,17.0,1851.0,346.0,770.0,310.0,5.6093,244400.0,<1H OCEAN +-118.03,33.82,17.0,2178.0,477.0,1077.0,457.0,3.6815,245300.0,<1H OCEAN +-118.03,33.82,20.0,2662.0,464.0,1275.0,472.0,6.0162,318500.0,<1H OCEAN +-118.02,33.82,19.0,2485.0,437.0,1286.0,431.0,4.7466,258300.0,<1H OCEAN +-118.02,33.83,16.0,1139.0,328.0,665.0,290.0,3.2933,260000.0,<1H OCEAN +-118.03,33.83,34.0,3203.0,653.0,2072.0,691.0,4.225,198400.0,<1H OCEAN +-118.03,33.83,25.0,3030.0,532.0,1668.0,509.0,4.625,229600.0,<1H OCEAN +-118.03,33.83,25.0,768.0,195.0,529.0,184.0,3.175,132800.0,<1H OCEAN +-118.06,33.83,22.0,5290.0,1054.0,2812.0,1021.0,4.53,226400.0,<1H OCEAN +-118.05,33.83,24.0,4316.0,678.0,2286.0,665.0,5.7018,286700.0,<1H OCEAN +-118.06,33.83,21.0,3941.0,655.0,1897.0,670.0,4.88,343900.0,<1H OCEAN +-118.05,33.82,21.0,2997.0,372.0,1323.0,372.0,8.6123,386700.0,<1H OCEAN +-118.06,33.83,17.0,1973.0,516.0,1112.0,501.0,3.8512,163800.0,<1H OCEAN +-118.06,33.82,24.0,3983.0,675.0,1568.0,638.0,4.6458,213400.0,<1H OCEAN +-118.04,33.81,22.0,4057.0,624.0,2204.0,643.0,5.8527,241000.0,<1H OCEAN +-118.04,33.81,27.0,2990.0,515.0,1849.0,497.0,5.6846,216100.0,<1H OCEAN +-118.05,33.81,26.0,2523.0,437.0,1377.0,450.0,5.2542,234600.0,<1H OCEAN +-118.03,33.81,26.0,3635.0,567.0,1779.0,543.0,5.7089,237400.0,<1H OCEAN +-118.03,33.86,19.0,1795.0,328.0,1014.0,322.0,4.535,289300.0,<1H OCEAN +-118.04,33.85,24.0,2233.0,347.0,1162.0,355.0,5.6094,279200.0,<1H OCEAN +-118.04,33.85,23.0,3132.0,469.0,1646.0,478.0,5.777,315900.0,<1H OCEAN +-118.05,33.85,25.0,2856.0,388.0,1212.0,362.0,6.1737,313100.0,<1H OCEAN +-118.04,33.85,18.0,3628.0,546.0,1922.0,544.0,7.5057,328500.0,<1H OCEAN +-118.03,33.85,16.0,1831.0,390.0,1347.0,389.0,3.8426,344400.0,<1H OCEAN +-118.01,33.83,29.0,3963.0,772.0,2104.0,743.0,4.9803,208600.0,<1H OCEAN +-118.01,33.84,29.0,3740.0,691.0,1724.0,638.0,3.9628,215600.0,<1H OCEAN +-118.03,33.84,28.0,3857.0,857.0,2328.0,830.0,4.0156,196000.0,<1H OCEAN +-118.02,33.83,26.0,3616.0,892.0,2257.0,821.0,3.1497,217600.0,<1H OCEAN +-118.02,33.82,21.0,2052.0,456.0,1173.0,432.0,3.7885,204500.0,<1H OCEAN +-118.01,33.82,10.0,3897.0,893.0,1992.0,693.0,4.1591,192300.0,<1H OCEAN +-118.01,33.81,18.0,5238.0,1083.0,3032.0,1065.0,4.4583,190100.0,<1H OCEAN +-118.02,33.81,34.0,3482.0,614.0,2227.0,641.0,5.1155,200900.0,<1H OCEAN +-118.02,33.86,26.0,2342.0,383.0,1290.0,394.0,5.6677,220700.0,<1H OCEAN +-118.02,33.85,31.0,1922.0,329.0,1030.0,353.0,5.3416,213000.0,<1H OCEAN +-118.03,33.85,30.0,2320.0,448.0,1434.0,452.0,4.0865,203700.0,<1H OCEAN +-118.03,33.85,23.0,5495.0,1141.0,2873.0,1004.0,3.9156,224100.0,<1H OCEAN +-118.01,33.85,29.0,2064.0,447.0,1265.0,400.0,3.8864,209300.0,<1H OCEAN +-118.01,33.85,29.0,3061.0,612.0,2396.0,640.0,4.6326,195200.0,<1H OCEAN +-118.0,33.85,34.0,1078.0,205.0,575.0,206.0,4.5083,188000.0,<1H OCEAN +-118.01,33.86,29.0,2307.0,452.0,1218.0,402.0,3.4306,194200.0,<1H OCEAN +-118.01,33.84,28.0,4097.0,838.0,2112.0,803.0,4.5,202100.0,<1H OCEAN +-118.01,33.84,35.0,4166.0,713.0,2354.0,709.0,5.1775,213400.0,<1H OCEAN +-118.02,33.84,35.0,3473.0,563.0,2091.0,580.0,4.4821,214100.0,<1H OCEAN +-118.03,33.84,30.0,4781.0,831.0,2568.0,797.0,5.4746,226400.0,<1H OCEAN +-117.99,33.86,36.0,1138.0,228.0,725.0,219.0,3.4167,187200.0,<1H OCEAN +-117.99,33.85,34.0,1948.0,306.0,957.0,304.0,4.9777,212600.0,<1H OCEAN +-118.0,33.85,33.0,2053.0,418.0,1154.0,405.0,4.0455,197200.0,<1H OCEAN +-118.0,33.86,32.0,1162.0,196.0,563.0,178.0,3.875,203000.0,<1H OCEAN +-117.99,33.85,35.0,1661.0,272.0,949.0,276.0,5.2548,192600.0,<1H OCEAN +-117.99,33.84,34.0,2079.0,343.0,1379.0,352.0,5.103,207000.0,<1H OCEAN +-118.0,33.84,30.0,1549.0,325.0,885.0,299.0,4.0039,195100.0,<1H OCEAN +-118.0,33.84,29.0,2641.0,637.0,2413.0,619.0,2.8169,165100.0,<1H OCEAN +-118.01,33.87,25.0,6348.0,1615.0,4188.0,1497.0,3.139,185700.0,<1H OCEAN +-117.99,33.86,20.0,3540.0,906.0,2898.0,876.0,3.0252,178000.0,<1H OCEAN +-118.0,33.88,28.0,1624.0,289.0,755.0,280.0,4.7083,268100.0,<1H OCEAN +-118.01,33.88,19.0,1434.0,391.0,1088.0,341.0,3.369,269600.0,<1H OCEAN +-117.99,33.88,15.0,2298.0,567.0,1261.0,527.0,4.2422,159400.0,<1H OCEAN +-117.99,33.88,42.0,1461.0,302.0,986.0,314.0,3.9559,161100.0,<1H OCEAN +-118.0,33.88,18.0,2628.0,720.0,2276.0,649.0,2.735,170800.0,<1H OCEAN +-117.99,33.87,16.0,1689.0,499.0,1260.0,453.0,3.1205,174000.0,<1H OCEAN +-118.0,33.87,13.0,2086.0,544.0,1356.0,462.0,2.95,165600.0,<1H OCEAN +-117.99,33.87,17.0,2334.0,537.0,1662.0,535.0,3.0147,217000.0,<1H OCEAN +-117.99,33.87,34.0,1239.0,307.0,869.0,291.0,3.59,161900.0,<1H OCEAN +-117.99,33.86,20.0,2303.0,612.0,1607.0,564.0,2.9,176100.0,<1H OCEAN +-117.98,33.89,18.0,2939.0,437.0,1278.0,435.0,7.1425,393700.0,<1H OCEAN +-117.99,33.88,25.0,3401.0,509.0,1503.0,498.0,6.6704,240600.0,<1H OCEAN +-117.99,33.89,21.0,5195.0,1020.0,2539.0,988.0,4.5033,160500.0,<1H OCEAN +-117.99,33.89,23.0,2111.0,306.0,979.0,288.0,8.5621,347800.0,<1H OCEAN +-117.97,33.89,17.0,1851.0,344.0,764.0,339.0,5.1315,181800.0,<1H OCEAN +-117.97,33.89,17.0,1740.0,445.0,1158.0,412.0,2.8649,137500.0,<1H OCEAN +-117.97,33.88,9.0,1344.0,279.0,530.0,265.0,5.0731,185100.0,<1H OCEAN +-117.97,33.88,11.0,1454.0,247.0,635.0,236.0,6.2427,218500.0,<1H OCEAN +-117.97,33.89,15.0,3801.0,542.0,1992.0,526.0,9.0683,367400.0,<1H OCEAN +-117.97,33.88,16.0,2003.0,300.0,1172.0,318.0,6.0394,321600.0,<1H OCEAN +-117.97,33.89,14.0,923.0,136.0,420.0,130.0,10.2252,462800.0,<1H OCEAN +-120.1,39.17,33.0,1849.0,384.0,218.0,92.0,1.7083,143800.0,INLAND +-120.06,39.09,30.0,2979.0,583.0,316.0,124.0,2.1987,124000.0,INLAND +-120.06,39.15,22.0,2213.0,372.0,98.0,42.0,1.1912,170000.0,INLAND +-120.2,39.12,15.0,2146.0,361.0,197.0,76.0,4.1316,200000.0,INLAND +-120.18,39.14,25.0,2171.0,386.0,248.0,116.0,3.0375,171900.0,INLAND +-120.16,39.14,21.0,2484.0,460.0,309.0,144.0,3.9722,127800.0,INLAND +-120.18,39.17,18.0,1703.0,360.0,354.0,163.0,3.6563,146900.0,INLAND +-120.15,39.17,32.0,1684.0,359.0,454.0,209.0,2.9125,145800.0,INLAND +-120.15,39.15,25.0,1669.0,348.0,163.0,78.0,5.75,176600.0,INLAND +-120.15,39.2,14.0,1382.0,242.0,141.0,66.0,4.1016,283300.0,INLAND +-120.12,39.18,17.0,2839.0,525.0,390.0,189.0,3.5667,179200.0,INLAND +-120.1,39.19,18.0,3824.0,559.0,241.0,106.0,5.5456,360000.0,INLAND +-120.1,39.19,17.0,1480.0,241.0,202.0,80.0,3.9375,213200.0,INLAND +-120.1,39.2,20.0,1703.0,294.0,409.0,174.0,3.087,196900.0,INLAND +-120.11,39.21,18.0,2245.0,392.0,421.0,162.0,4.5795,158300.0,INLAND +-120.11,39.24,21.0,3005.0,574.0,385.0,150.0,3.1193,153300.0,INLAND +-120.08,39.23,19.0,1746.0,306.0,251.0,104.0,4.8182,146900.0,INLAND +-120.07,39.24,20.0,3729.0,614.0,365.0,152.0,4.962,169500.0,INLAND +-120.06,39.25,21.0,2459.0,525.0,584.0,233.0,3.01,163500.0,INLAND +-120.04,39.24,30.0,2369.0,469.0,510.0,213.0,2.65,123800.0,INLAND +-120.04,39.27,24.0,2237.0,491.0,264.0,95.0,4.1364,154500.0,INLAND +-120.02,39.24,24.0,1602.0,426.0,751.0,257.0,1.7609,99300.0,INLAND +-120.02,39.24,22.0,2309.0,571.0,919.0,342.0,3.0057,93600.0,INLAND +-120.02,39.24,32.0,1347.0,444.0,825.0,303.0,1.8269,225000.0,INLAND +-120.01,39.26,26.0,1930.0,391.0,307.0,138.0,2.6023,139300.0,INLAND +-120.91,38.98,13.0,7689.0,1415.0,3264.0,1198.0,3.653,146800.0,INLAND +-120.81,39.02,30.0,806.0,189.0,326.0,146.0,2.8155,101000.0,INLAND +-120.69,39.12,19.0,1048.0,262.0,493.0,184.0,2.2917,118200.0,INLAND +-120.83,39.02,15.0,1117.0,242.0,551.0,229.0,2.6319,97700.0,INLAND +-121.06,38.91,18.0,6501.0,1416.0,2954.0,1373.0,2.5373,143000.0,INLAND +-121.08,38.9,27.0,3436.0,755.0,1568.0,709.0,2.4273,138400.0,INLAND +-121.06,38.88,17.0,7635.0,1284.0,3096.0,1227.0,4.2917,184300.0,INLAND +-121.08,38.89,41.0,3471.0,753.0,1680.0,710.0,2.6701,139000.0,INLAND +-121.07,38.9,52.0,1280.0,281.0,523.0,266.0,1.7375,122200.0,INLAND +-121.15,38.89,20.0,2024.0,313.0,879.0,309.0,5.2903,239400.0,INLAND +-121.12,38.86,17.0,3949.0,717.0,1683.0,686.0,3.3802,216500.0,INLAND +-121.13,38.87,48.0,1127.0,,530.0,186.0,3.0917,128100.0,INLAND +-121.15,38.91,23.0,1654.0,299.0,787.0,299.0,4.2723,193100.0,INLAND +-121.08,38.85,10.0,2509.0,422.0,1037.0,389.0,6.0,220100.0,INLAND +-121.16,38.74,17.0,3353.0,463.0,1417.0,447.0,5.1721,237100.0,INLAND +-121.14,38.77,15.0,10282.0,1333.0,3868.0,1300.0,6.4789,287800.0,INLAND +-121.16,38.75,27.0,771.0,108.0,315.0,111.0,8.4882,276600.0,INLAND +-121.14,38.84,22.0,2750.0,433.0,1161.0,428.0,4.2143,236500.0,INLAND +-121.14,38.82,22.0,1816.0,278.0,832.0,278.0,5.07,233000.0,INLAND +-121.15,38.8,20.0,2104.0,370.0,745.0,314.0,4.1685,217500.0,INLAND +-121.18,38.78,13.0,3480.0,528.0,1432.0,532.0,6.1642,277800.0,INLAND +-121.18,38.8,18.0,2541.0,414.0,1276.0,405.0,5.1857,220100.0,INLAND +-121.21,38.76,16.0,1608.0,296.0,792.0,286.0,3.1583,239200.0,INLAND +-121.21,38.75,11.0,4552.0,639.0,2006.0,623.0,4.3962,264400.0,INLAND +-121.17,38.76,14.0,2028.0,255.0,781.0,251.0,6.5322,394000.0,INLAND +-121.2,38.73,11.0,4897.0,636.0,1931.0,616.0,7.7499,334800.0,INLAND +-121.18,38.73,16.0,1584.0,264.0,613.0,226.0,6.0302,273100.0,INLAND +-121.18,38.75,16.0,2807.0,459.0,1201.0,429.0,4.7941,247600.0,INLAND +-121.24,38.75,5.0,9137.0,1368.0,3667.0,1294.0,5.4896,229600.0,INLAND +-121.24,38.72,12.0,3605.0,576.0,1556.0,549.0,4.9,203700.0,INLAND +-121.27,38.74,19.0,3869.0,887.0,2086.0,685.0,2.6065,154900.0,INLAND +-121.26,38.73,14.0,3323.0,499.0,1527.0,540.0,5.3451,172100.0,INLAND +-121.26,38.74,22.0,7173.0,1314.0,3526.0,1316.0,3.3941,135900.0,INLAND +-121.28,38.73,6.0,4223.0,672.0,1747.0,631.0,5.419,267400.0,INLAND +-121.27,38.72,6.0,4664.0,644.0,2105.0,663.0,6.0804,198700.0,INLAND +-121.25,38.72,10.0,7277.0,1168.0,3507.0,1131.0,4.485,179400.0,INLAND +-121.27,38.75,21.0,4812.0,1117.0,1985.0,1045.0,2.5083,128500.0,INLAND +-121.28,38.74,33.0,4384.0,778.0,1775.0,789.0,4.05,134700.0,INLAND +-121.3,38.73,9.0,5558.0,1099.0,2717.0,1043.0,3.6455,139200.0,INLAND +-121.36,38.73,21.0,2253.0,416.0,1050.0,411.0,3.141,220100.0,INLAND +-121.32,38.74,14.0,1449.0,228.0,670.0,232.0,4.3897,186300.0,INLAND +-121.31,38.75,7.0,4185.0,750.0,2147.0,706.0,4.0519,129200.0,INLAND +-121.3,38.75,36.0,3903.0,885.0,2313.0,804.0,2.655,86300.0,INLAND +-121.28,38.75,52.0,493.0,89.0,189.0,94.0,2.108,83800.0,INLAND +-121.3,38.74,41.0,4374.0,1039.0,2387.0,959.0,2.3611,87900.0,INLAND +-121.33,38.77,3.0,20214.0,3559.0,8361.0,3112.0,4.2259,169300.0,INLAND +-121.28,38.76,47.0,2901.0,631.0,1276.0,578.0,2.1366,101900.0,INLAND +-121.27,38.75,43.0,1292.0,307.0,647.0,249.0,2.7188,85300.0,INLAND +-121.29,38.76,12.0,1198.0,174.0,443.0,170.0,6.0097,187500.0,INLAND +-121.28,38.77,6.0,3819.0,550.0,1738.0,587.0,5.8718,201400.0,INLAND +-121.28,38.8,7.0,9003.0,1739.0,4445.0,1591.0,3.816,147900.0,INLAND +-121.24,38.78,11.0,1851.0,352.0,1049.0,369.0,3.5288,141100.0,INLAND +-121.24,38.78,18.0,549.0,143.0,249.0,136.0,0.8691,136500.0,INLAND +-121.23,38.78,13.0,3813.0,871.0,1513.0,783.0,2.0807,142600.0,INLAND +-121.22,38.78,8.0,3418.0,514.0,1312.0,409.0,6.3914,218000.0,INLAND +-121.24,38.82,5.0,12259.0,1643.0,4819.0,1582.0,5.4498,217300.0,INLAND +-121.25,38.8,14.0,5094.0,729.0,1974.0,705.0,5.5205,188700.0,INLAND +-121.24,38.79,15.0,2615.0,485.0,1063.0,428.0,3.7904,173200.0,INLAND +-121.24,38.79,23.0,1419.0,261.0,706.0,269.0,3.1875,110200.0,INLAND +-121.23,38.79,45.0,907.0,176.0,463.0,190.0,2.2292,92000.0,INLAND +-121.22,38.8,11.0,2521.0,521.0,1390.0,477.0,3.5265,124800.0,INLAND +-121.19,38.87,20.0,3118.0,500.0,1405.0,519.0,6.0,209400.0,INLAND +-121.21,38.83,21.0,3691.0,640.0,1758.0,603.0,3.5607,151900.0,INLAND +-121.19,38.85,8.0,4114.0,710.0,2268.0,716.0,4.4085,139400.0,INLAND +-121.18,38.83,15.0,4488.0,859.0,2114.0,805.0,2.9484,124400.0,INLAND +-121.39,38.85,19.0,3568.0,646.0,1714.0,590.0,4.0862,162700.0,INLAND +-121.3,39.0,16.0,3155.0,541.0,1630.0,540.0,4.0282,126400.0,INLAND +-121.31,38.97,16.0,1210.0,228.0,726.0,222.0,2.7083,82100.0,INLAND +-121.22,38.92,19.0,2531.0,461.0,1206.0,429.0,4.4958,192600.0,INLAND +-121.27,38.87,16.0,2094.0,358.0,1092.0,357.0,4.4769,191400.0,INLAND +-121.29,38.9,45.0,2019.0,394.0,1104.0,407.0,3.1691,108700.0,INLAND +-121.28,38.9,31.0,1297.0,259.0,765.0,240.0,2.7656,93600.0,INLAND +-121.29,38.89,10.0,653.0,120.0,407.0,146.0,3.3889,110800.0,INLAND +-121.3,38.89,23.0,1750.0,297.0,1012.0,315.0,3.4706,99300.0,INLAND +-121.3,38.89,45.0,1529.0,317.0,793.0,281.0,2.9866,91300.0,INLAND +-121.32,38.89,9.0,5927.0,1269.0,3369.0,1176.0,2.8194,111300.0,INLAND +-121.14,38.92,16.0,2069.0,312.0,889.0,299.0,4.6771,212000.0,INLAND +-121.1,38.92,21.0,4064.0,871.0,1847.0,859.0,3.0321,135500.0,INLAND +-121.11,38.91,24.0,2558.0,423.0,1149.0,403.0,4.0679,190500.0,INLAND +-121.1,38.94,42.0,410.0,117.0,706.0,112.0,1.0179,125000.0,INLAND +-121.07,38.92,15.0,5301.0,884.0,2335.0,831.0,4.515,164000.0,INLAND +-121.05,38.92,34.0,2144.0,372.0,899.0,378.0,3.3021,158800.0,INLAND +-121.15,39.0,15.0,4145.0,691.0,1872.0,680.0,4.3553,220600.0,INLAND +-121.19,38.95,16.0,2544.0,431.0,1199.0,412.0,4.5129,196300.0,INLAND +-121.11,38.95,14.0,3888.0,890.0,1830.0,844.0,1.8238,158600.0,INLAND +-121.1,38.95,17.0,1475.0,403.0,943.0,363.0,2.1287,55300.0,INLAND +-121.06,38.98,14.0,2267.0,355.0,1140.0,369.0,4.7019,212800.0,INLAND +-121.05,38.97,12.0,3676.0,550.0,1572.0,510.0,4.8214,201900.0,INLAND +-121.09,38.97,13.0,1467.0,221.0,688.0,231.0,5.2536,191900.0,INLAND +-121.1,39.0,16.0,1106.0,195.0,505.0,187.0,5.0126,192300.0,INLAND +-121.08,38.95,18.0,1931.0,380.0,1271.0,377.0,2.7463,156100.0,INLAND +-121.08,38.93,14.0,4239.0,824.0,1729.0,794.0,2.4278,167700.0,INLAND +-121.07,38.94,14.0,1710.0,294.0,839.0,297.0,4.7143,150700.0,INLAND +-121.04,38.95,22.0,1931.0,445.0,1009.0,407.0,2.75,153200.0,INLAND +-120.99,39.04,17.0,2289.0,450.0,1182.0,397.0,2.3696,166800.0,INLAND +-120.98,38.99,17.0,3403.0,661.0,1540.0,622.0,3.6354,162900.0,INLAND +-121.04,39.0,21.0,4059.0,730.0,1874.0,693.0,4.8051,174300.0,INLAND +-121.02,39.01,17.0,4786.0,799.0,2066.0,770.0,3.9734,185400.0,INLAND +-121.0,39.0,4.0,170.0,23.0,93.0,27.0,10.9891,312500.0,INLAND +-120.87,39.18,25.0,2691.0,598.0,964.0,373.0,3.9196,142700.0,INLAND +-120.87,39.15,17.0,1819.0,389.0,736.0,283.0,2.8603,128900.0,INLAND +-120.58,39.27,15.0,4126.0,903.0,723.0,266.0,3.0147,118800.0,INLAND +-120.33,39.3,16.0,868.0,178.0,44.0,21.0,3.0,175000.0,INLAND +-120.18,39.28,14.0,10098.0,1545.0,701.0,254.0,4.0819,141300.0,INLAND +-120.22,39.2,22.0,8259.0,1409.0,845.0,353.0,3.3699,244000.0,INLAND +-120.96,39.12,24.0,2069.0,436.0,909.0,374.0,2.5326,139100.0,INLAND +-120.98,39.08,20.0,4570.0,906.0,2125.0,815.0,3.0403,148000.0,INLAND +-120.94,39.05,8.0,3758.0,717.0,1744.0,661.0,3.1972,151500.0,INLAND +-120.98,39.93,25.0,2220.0,511.0,912.0,449.0,1.8914,87800.0,INLAND +-120.95,39.93,26.0,2023.0,385.0,922.0,365.0,2.8125,83500.0,INLAND +-120.93,39.9,20.0,1511.0,328.0,791.0,320.0,2.0221,70900.0,INLAND +-120.9,39.93,23.0,2679.0,546.0,1424.0,529.0,2.8812,81900.0,INLAND +-120.9,39.95,20.0,1349.0,238.0,601.0,203.0,3.5417,96600.0,INLAND +-120.93,39.96,15.0,1666.0,351.0,816.0,316.0,2.9559,118800.0,INLAND +-120.92,40.02,35.0,383.0,92.0,202.0,72.0,2.6458,102500.0,INLAND +-120.74,39.9,23.0,1017.0,218.0,387.0,152.0,2.2656,88200.0,INLAND +-120.57,39.78,15.0,1291.0,283.0,582.0,242.0,2.1216,102000.0,INLAND +-120.66,39.72,15.0,3763.0,784.0,717.0,348.0,2.2019,130500.0,INLAND +-120.74,39.82,9.0,1955.0,398.0,294.0,122.0,3.9583,126500.0,INLAND +-121.0,39.75,8.0,1116.0,214.0,27.0,39.0,2.5893,83000.0,INLAND +-121.14,39.86,16.0,2534.0,557.0,638.0,244.0,2.2101,88800.0,INLAND +-120.53,39.79,18.0,1234.0,266.0,543.0,201.0,2.5156,71900.0,INLAND +-120.48,39.78,11.0,513.0,104.0,204.0,86.0,2.375,100000.0,INLAND +-120.45,39.8,47.0,2149.0,456.0,965.0,419.0,1.7829,55900.0,INLAND +-120.46,39.83,18.0,3406.0,673.0,1567.0,617.0,2.2717,75900.0,INLAND +-120.38,39.82,10.0,1262.0,258.0,510.0,209.0,2.1667,92800.0,INLAND +-120.15,39.8,19.0,785.0,151.0,366.0,140.0,3.0625,82500.0,INLAND +-120.94,40.17,22.0,1334.0,261.0,597.0,222.0,2.2132,89200.0,INLAND +-120.91,40.08,24.0,1629.0,313.0,641.0,274.0,2.2067,69600.0,INLAND +-120.94,40.14,31.0,3127.0,664.0,1345.0,580.0,1.5774,58000.0,INLAND +-121.23,40.01,38.0,725.0,190.0,219.0,115.0,1.625,75000.0,INLAND +-120.71,40.13,19.0,897.0,180.0,276.0,110.0,2.9554,89400.0,INLAND +-121.25,40.27,25.0,958.0,245.0,28.0,16.0,2.625,67500.0,INLAND +-121.24,40.31,36.0,1597.0,301.0,632.0,262.0,3.5962,93600.0,INLAND +-121.23,40.29,21.0,3229.0,667.0,1501.0,582.0,2.1524,77100.0,INLAND +-121.19,40.23,10.0,1572.0,232.0,247.0,104.0,5.8453,193800.0,INLAND +-121.08,40.19,11.0,919.0,199.0,69.0,43.0,1.6944,137500.0,INLAND +-121.06,40.23,23.0,1127.0,225.0,215.0,85.0,3.4844,143800.0,INLAND +-121.09,40.3,15.0,1717.0,336.0,501.0,206.0,3.6477,113400.0,INLAND +-121.14,40.29,17.0,1944.0,394.0,384.0,172.0,1.6875,111500.0,INLAND +-121.15,40.25,14.0,5156.0,880.0,616.0,281.0,3.3462,145200.0,INLAND +-117.35,34.0,38.0,1214.0,254.0,723.0,236.0,2.5469,87800.0,INLAND +-117.36,33.99,42.0,1178.0,261.0,804.0,283.0,2.9688,92900.0,INLAND +-117.37,34.0,36.0,730.0,155.0,476.0,142.0,2.4306,88900.0,INLAND +-117.37,34.0,41.0,1248.0,278.0,770.0,250.0,3.025,90600.0,INLAND +-117.36,34.0,19.0,4592.0,895.0,2769.0,838.0,3.3622,105100.0,INLAND +-117.37,34.01,15.0,1386.0,247.0,703.0,185.0,3.6415,124200.0,INLAND +-117.38,34.0,45.0,2881.0,514.0,1470.0,515.0,3.3687,123800.0,INLAND +-117.38,33.99,52.0,1797.0,332.0,905.0,313.0,2.7054,141700.0,INLAND +-117.38,33.98,52.0,2274.0,571.0,1167.0,504.0,2.0284,101600.0,INLAND +-117.39,33.98,37.0,2337.0,452.0,948.0,437.0,3.145,169100.0,INLAND +-117.41,33.97,24.0,950.0,183.0,383.0,182.0,3.0694,125000.0,INLAND +-117.37,33.98,43.0,2862.0,772.0,1878.0,675.0,2.1151,96700.0,INLAND +-117.38,33.97,29.0,1157.0,297.0,2027.0,253.0,1.6389,155000.0,INLAND +-117.38,33.98,10.0,642.0,176.0,462.0,186.0,2.1528,162500.0,INLAND +-117.37,33.98,27.0,1342.0,547.0,844.0,484.0,1.1194,95800.0,INLAND +-117.37,33.99,44.0,917.0,224.0,666.0,220.0,1.685,114200.0,INLAND +-117.36,33.98,46.0,1680.0,453.0,1570.0,435.0,2.0436,82300.0,INLAND +-117.37,33.97,34.0,3676.0,697.0,2653.0,682.0,2.5804,92400.0,INLAND +-117.37,33.97,38.0,1156.0,241.0,877.0,200.0,1.4514,79900.0,INLAND +-117.37,33.97,40.0,1166.0,250.0,976.0,244.0,1.95,84800.0,INLAND +-117.37,33.98,52.0,201.0,44.0,130.0,24.0,2.025,125000.0,INLAND +-117.35,33.99,45.0,131.0,28.0,89.0,31.0,2.6071,112500.0,INLAND +-117.35,33.98,31.0,4163.0,1242.0,3928.0,1076.0,1.6943,85900.0,INLAND +-117.35,33.97,27.0,3960.0,886.0,2807.0,838.0,3.024,122500.0,INLAND +-117.36,33.97,32.0,1625.0,335.0,1212.0,327.0,2.7596,82200.0,INLAND +-117.36,33.98,33.0,2070.0,469.0,1851.0,467.0,2.4667,80700.0,INLAND +-117.37,33.96,33.0,3974.0,548.0,1398.0,528.0,7.2519,216600.0,INLAND +-117.35,33.96,25.0,2396.0,316.0,951.0,314.0,8.2405,235200.0,INLAND +-117.35,33.95,28.0,1650.0,210.0,557.0,211.0,7.6632,204800.0,INLAND +-117.37,33.94,14.0,9286.0,1269.0,3565.0,1238.0,6.6635,219600.0,INLAND +-117.36,33.92,7.0,9376.0,1181.0,3570.0,1107.0,8.5326,315200.0,INLAND +-117.39,33.97,52.0,3307.0,553.0,1269.0,529.0,4.3176,136200.0,INLAND +-117.38,33.97,30.0,2953.0,703.0,1406.0,580.0,2.6895,150000.0,INLAND +-117.39,33.96,52.0,1992.0,345.0,948.0,358.0,3.2917,129300.0,INLAND +-117.4,33.96,51.0,1806.0,322.0,709.0,298.0,3.575,125500.0,INLAND +-117.39,33.97,48.0,1915.0,348.0,1060.0,376.0,3.4044,117900.0,INLAND +-117.4,33.97,38.0,1383.0,238.0,649.0,232.0,5.0194,148900.0,INLAND +-117.4,33.97,41.0,1707.0,276.0,660.0,269.0,3.8618,134800.0,INLAND +-117.41,33.96,32.0,2837.0,617.0,1393.0,595.0,2.3798,118800.0,INLAND +-117.41,33.96,24.0,4481.0,901.0,2398.0,823.0,3.864,123400.0,INLAND +-117.41,33.97,34.0,2316.0,365.0,956.0,389.0,4.337,157800.0,INLAND +-117.44,33.96,29.0,124.0,22.0,50.0,18.0,12.5381,112500.0,INLAND +-117.43,33.96,28.0,3747.0,651.0,2399.0,646.0,3.8682,116500.0,INLAND +-117.44,33.95,31.0,914.0,177.0,556.0,161.0,3.7344,115300.0,INLAND +-117.4,33.95,46.0,2189.0,423.0,866.0,389.0,3.1384,111500.0,INLAND +-117.4,33.95,32.0,1979.0,491.0,954.0,444.0,2.4408,117300.0,INLAND +-117.41,33.95,37.0,1586.0,283.0,675.0,305.0,2.9583,132100.0,INLAND +-117.41,33.95,37.0,1462.0,257.0,849.0,287.0,3.0542,123900.0,INLAND +-117.42,33.95,32.0,4251.0,848.0,2494.0,798.0,2.8173,110800.0,INLAND +-117.42,33.96,33.0,2275.0,469.0,1691.0,459.0,2.7452,98100.0,INLAND +-117.41,33.96,27.0,2341.0,418.0,1272.0,415.0,3.0208,112700.0,INLAND +-117.38,33.96,30.0,3153.0,623.0,1544.0,575.0,3.4491,133800.0,INLAND +-117.39,33.95,36.0,1380.0,269.0,598.0,262.0,3.1667,122900.0,INLAND +-117.39,33.95,35.0,1599.0,284.0,721.0,287.0,4.125,120700.0,INLAND +-117.4,33.95,43.0,633.0,166.0,292.0,135.0,1.1601,121400.0,INLAND +-117.39,33.96,49.0,2527.0,461.0,1344.0,451.0,4.0833,114400.0,INLAND +-117.37,33.95,32.0,2215.0,351.0,771.0,311.0,4.3542,142600.0,INLAND +-117.37,33.94,20.0,1682.0,296.0,706.0,291.0,4.0966,140100.0,INLAND +-117.38,33.94,21.0,2468.0,380.0,1164.0,385.0,4.0625,136800.0,INLAND +-117.39,33.93,26.0,3014.0,494.0,1832.0,485.0,4.8333,127900.0,INLAND +-117.39,33.95,35.0,3306.0,680.0,1742.0,673.0,3.7109,109100.0,INLAND +-117.4,33.94,30.0,1198.0,251.0,1019.0,214.0,3.0509,82700.0,INLAND +-117.4,33.93,35.0,1468.0,298.0,1168.0,261.0,2.2222,81300.0,INLAND +-117.41,33.93,35.0,793.0,150.0,669.0,128.0,4.0156,89300.0,INLAND +-117.4,33.94,37.0,987.0,187.0,551.0,191.0,3.5865,112000.0,INLAND +-117.4,33.94,42.0,943.0,171.0,466.0,203.0,3.1458,116000.0,INLAND +-117.41,33.94,33.0,2074.0,476.0,911.0,420.0,2.87,117600.0,INLAND +-117.41,33.94,29.0,3181.0,714.0,1603.0,706.0,3.25,112500.0,INLAND +-117.42,33.93,32.0,2885.0,595.0,1509.0,590.0,3.1795,125600.0,INLAND +-117.41,33.94,22.0,4179.0,1081.0,2096.0,1013.0,2.4435,118500.0,INLAND +-117.42,33.94,26.0,2420.0,532.0,1383.0,469.0,3.5403,113500.0,INLAND +-117.42,33.94,35.0,1764.0,325.0,1094.0,353.0,4.1528,113900.0,INLAND +-117.43,33.95,36.0,2284.0,444.0,1425.0,405.0,4.0526,104500.0,INLAND +-117.43,33.93,36.0,2386.0,396.0,1176.0,374.0,4.5122,113300.0,INLAND +-117.43,33.93,15.0,4836.0,1368.0,3012.0,1240.0,2.1865,129300.0,INLAND +-117.43,33.93,31.0,1273.0,262.0,686.0,254.0,2.4922,109400.0,INLAND +-117.44,33.93,34.0,1577.0,272.0,880.0,284.0,4.6327,116000.0,INLAND +-117.45,33.94,12.0,3539.0,869.0,1987.0,859.0,2.1023,103700.0,INLAND +-117.44,33.94,32.0,2349.0,452.0,1479.0,425.0,3.9118,114100.0,INLAND +-117.44,33.94,30.0,2992.0,516.0,1521.0,507.0,3.9128,126900.0,INLAND +-117.44,33.94,32.0,1814.0,320.0,903.0,306.0,4.1776,118700.0,INLAND +-117.44,33.93,33.0,1371.0,236.0,715.0,227.0,4.375,129900.0,INLAND +-117.45,33.93,20.0,5998.0,1320.0,3185.0,1199.0,3.2731,113900.0,INLAND +-117.44,33.92,33.0,2433.0,525.0,1466.0,517.0,3.0437,110800.0,INLAND +-117.45,33.91,29.0,2320.0,422.0,1358.0,415.0,3.7333,121400.0,INLAND +-117.45,33.92,35.0,2552.0,588.0,1840.0,551.0,2.2548,113300.0,INLAND +-117.39,33.92,25.0,2886.0,583.0,2327.0,577.0,2.3851,113700.0,INLAND +-117.4,33.9,32.0,1263.0,178.0,508.0,180.0,3.6667,314100.0,INLAND +-117.44,33.9,23.0,4487.0,754.0,2609.0,778.0,4.2788,148700.0,INLAND +-117.43,33.91,15.0,14281.0,2511.0,7540.0,2245.0,4.3222,138000.0,INLAND +-117.42,33.89,4.0,80.0,10.0,55.0,13.0,7.7197,193800.0,INLAND +-117.4,34.01,25.0,1858.0,366.0,1311.0,331.0,2.7083,87800.0,INLAND +-117.41,34.01,34.0,1231.0,216.0,841.0,199.0,2.6442,92000.0,INLAND +-117.43,34.02,33.0,3084.0,570.0,1753.0,449.0,3.05,97800.0,INLAND +-117.42,34.02,9.0,5455.0,882.0,3015.0,858.0,4.2321,162800.0,INLAND +-117.4,34.0,24.0,2316.0,599.0,1829.0,532.0,1.6955,86800.0,INLAND +-117.4,34.0,31.0,1192.0,307.0,1013.0,283.0,2.0742,76200.0,INLAND +-117.41,34.0,38.0,2228.0,571.0,1697.0,530.0,1.9052,83400.0,INLAND +-117.43,33.98,21.0,2634.0,421.0,1376.0,406.0,4.2589,152200.0,INLAND +-117.42,33.98,16.0,10072.0,2043.0,5913.0,1909.0,3.0606,119500.0,INLAND +-117.45,34.01,26.0,3042.0,598.0,1720.0,551.0,2.76,95200.0,INLAND +-117.43,34.01,34.0,2101.0,426.0,1150.0,377.0,3.0909,98300.0,INLAND +-117.41,34.0,26.0,2372.0,621.0,1647.0,612.0,1.4719,88600.0,INLAND +-117.42,34.0,32.0,1617.0,346.0,1153.0,385.0,3.016,96600.0,INLAND +-117.43,33.99,18.0,3307.0,547.0,1738.0,457.0,4.566,116900.0,INLAND +-117.44,33.99,12.0,9966.0,1517.0,5008.0,1492.0,4.5625,171300.0,INLAND +-117.5,34.0,15.0,1929.0,317.0,1237.0,316.0,4.4063,128500.0,INLAND +-117.49,33.99,21.0,2050.0,392.0,1153.0,336.0,4.84,116400.0,INLAND +-117.48,33.98,20.0,2451.0,475.0,1785.0,456.0,3.3966,115000.0,INLAND +-117.49,33.98,17.0,2727.0,462.0,1691.0,448.0,4.8371,160600.0,INLAND +-117.5,33.98,21.0,2394.0,416.0,1291.0,381.0,4.2099,138700.0,INLAND +-117.47,33.98,8.0,12106.0,1913.0,5810.0,1717.0,4.9886,158100.0,INLAND +-117.48,34.01,23.0,2000.0,376.0,1361.0,388.0,4.369,121100.0,INLAND +-117.49,34.02,35.0,2051.0,427.0,1466.0,425.0,3.6711,108200.0,INLAND +-117.49,34.02,21.0,3736.0,738.0,2021.0,640.0,4.4545,142400.0,INLAND +-117.51,34.02,24.0,7779.0,1835.0,3996.0,1765.0,2.1764,135300.0,INLAND +-117.48,34.0,12.0,6751.0,1153.0,3266.0,1134.0,3.8529,145500.0,INLAND +-117.51,34.0,36.0,3791.0,746.0,2258.0,672.0,3.2067,124700.0,INLAND +-117.52,33.99,14.0,13562.0,2057.0,7600.0,2086.0,5.2759,182900.0,INLAND +-117.53,33.97,34.0,1293.0,215.0,774.0,217.0,3.8906,141000.0,INLAND +-117.53,33.97,29.0,1430.0,273.0,872.0,283.0,4.0833,141000.0,INLAND +-117.51,33.97,35.0,352.0,62.0,184.0,57.0,3.6691,137500.0,INLAND +-117.53,34.02,19.0,256.0,34.0,101.0,28.0,5.3269,375000.0,INLAND +-117.6,33.94,26.0,2925.0,575.0,1921.0,501.0,3.1859,153100.0,INLAND +-117.55,34.0,17.0,3583.0,700.0,1587.0,719.0,2.6979,75000.0,INLAND +-117.53,33.94,21.0,5675.0,935.0,2834.0,865.0,4.2263,203200.0,INLAND +-117.55,33.94,30.0,5398.0,926.0,2672.0,864.0,4.4762,163900.0,INLAND +-117.56,33.94,29.0,266.0,42.0,136.0,40.0,1.625,164300.0,INLAND +-117.56,33.94,6.0,575.0,73.0,318.0,88.0,7.0215,257100.0,INLAND +-117.57,33.93,3.0,1240.0,151.0,519.0,146.0,7.5408,271900.0,INLAND +-117.55,33.95,17.0,3196.0,444.0,1581.0,462.0,5.9333,229400.0,INLAND +-117.59,33.91,7.0,10223.0,1491.0,5205.0,1509.0,5.4872,203400.0,INLAND +-117.57,33.9,7.0,3797.0,850.0,2369.0,720.0,3.5525,137600.0,INLAND +-117.56,33.89,16.0,693.0,185.0,365.0,176.0,2.3417,191700.0,INLAND +-117.55,33.89,25.0,2999.0,439.0,1396.0,458.0,5.6973,164800.0,INLAND +-117.52,33.89,2.0,17978.0,3217.0,7305.0,2463.0,5.1695,220800.0,INLAND +-117.6,33.91,15.0,1864.0,271.0,1006.0,288.0,7.2379,251000.0,INLAND +-117.55,33.93,25.0,5187.0,934.0,2725.0,860.0,4.1865,154300.0,INLAND +-117.55,33.92,24.0,2807.0,501.0,1653.0,509.0,4.8167,163300.0,INLAND +-117.55,33.9,21.0,1839.0,324.0,871.0,307.0,3.4459,198800.0,INLAND +-117.53,33.92,12.0,2290.0,319.0,728.0,228.0,6.1561,233500.0,INLAND +-117.58,33.92,16.0,4157.0,586.0,2036.0,594.0,6.155,246400.0,INLAND +-117.57,33.91,22.0,2620.0,396.0,1324.0,362.0,5.3735,214600.0,INLAND +-117.59,33.93,17.0,338.0,47.0,200.0,46.0,7.8118,244200.0,INLAND +-117.5,33.93,19.0,4741.0,835.0,2903.0,796.0,4.3723,135600.0,INLAND +-117.49,33.91,17.0,5364.0,1020.0,3754.0,936.0,3.2857,139100.0,INLAND +-117.5,33.92,31.0,2529.0,513.0,1504.0,426.0,2.9821,115600.0,INLAND +-117.5,33.92,28.0,2101.0,337.0,1061.0,348.0,4.55,146800.0,INLAND +-117.51,33.95,12.0,9016.0,1486.0,4285.0,1457.0,4.9984,169100.0,INLAND +-117.46,33.95,34.0,1565.0,296.0,1142.0,328.0,3.6979,99600.0,INLAND +-117.47,33.95,15.0,6248.0,1249.0,3795.0,1128.0,4.1264,124600.0,INLAND +-117.5,33.96,12.0,7923.0,1470.0,4861.0,1385.0,4.2985,139200.0,INLAND +-117.5,33.95,29.0,932.0,153.0,711.0,172.0,4.8214,143400.0,INLAND +-117.46,33.94,26.0,2481.0,620.0,2411.0,552.0,1.7059,85800.0,INLAND +-117.47,33.94,34.0,559.0,139.0,532.0,137.0,3.0687,88500.0,INLAND +-117.48,33.94,19.0,1891.0,465.0,1693.0,416.0,2.7813,112900.0,INLAND +-117.48,33.94,29.0,1625.0,336.0,1046.0,320.0,3.1985,117300.0,INLAND +-117.49,33.94,28.0,2787.0,490.0,1684.0,467.0,4.0256,127100.0,INLAND +-117.46,33.93,16.0,4112.0,880.0,2821.0,857.0,3.0122,114700.0,INLAND +-117.46,33.93,19.0,4780.0,861.0,3043.0,766.0,3.7431,132800.0,INLAND +-117.46,33.92,21.0,713.0,142.0,476.0,142.0,3.5208,121100.0,INLAND +-117.47,33.93,33.0,919.0,208.0,724.0,235.0,3.4028,110500.0,INLAND +-117.47,33.94,34.0,2086.0,417.0,1501.0,395.0,3.2311,105600.0,INLAND +-117.46,33.94,35.0,1566.0,294.0,1056.0,279.0,3.5227,105400.0,INLAND +-117.48,33.93,31.0,2191.0,459.0,1564.0,450.0,2.6776,122000.0,INLAND +-117.47,33.92,18.0,3869.0,773.0,2500.0,726.0,3.6583,126100.0,INLAND +-117.49,33.93,26.0,2970.0,576.0,2156.0,558.0,3.9522,124600.0,INLAND +-117.47,33.91,21.0,3491.0,760.0,1920.0,669.0,2.2241,127300.0,INLAND +-117.46,33.9,10.0,9738.0,2130.0,4936.0,1840.0,3.3187,144800.0,INLAND +-117.48,33.89,14.0,10395.0,1799.0,6295.0,1855.0,4.7295,149900.0,INLAND +-117.49,33.9,7.0,10235.0,2238.0,5271.0,2094.0,3.6071,159100.0,INLAND +-117.48,33.91,22.0,3611.0,666.0,1869.0,649.0,4.2207,141100.0,INLAND +-117.44,33.88,5.0,2589.0,351.0,1109.0,360.0,6.8089,334100.0,INLAND +-117.51,33.89,16.0,5418.0,1005.0,2690.0,1088.0,4.0556,158000.0,INLAND +-117.51,33.88,24.0,3044.0,602.0,2541.0,564.0,4.131,123800.0,INLAND +-117.52,33.88,21.0,722.0,178.0,770.0,165.0,2.5656,102500.0,INLAND +-117.53,33.88,22.0,2855.0,667.0,2453.0,624.0,3.1312,91000.0,INLAND +-117.5,33.87,4.0,6755.0,1017.0,2866.0,850.0,5.0493,239800.0,INLAND +-117.56,33.88,36.0,838.0,210.0,722.0,180.0,2.4861,96200.0,INLAND +-117.58,33.89,14.0,1731.0,404.0,1269.0,351.0,2.3654,107900.0,INLAND +-117.55,33.88,19.0,2472.0,618.0,2143.0,610.0,2.2372,108800.0,INLAND +-117.57,33.87,33.0,2076.0,517.0,1374.0,480.0,2.2197,138200.0,INLAND +-117.56,33.88,40.0,1196.0,294.0,1052.0,258.0,2.0682,113000.0,INLAND +-117.57,33.88,35.0,1755.0,446.0,1453.0,428.0,2.316,119400.0,INLAND +-117.57,33.88,39.0,679.0,164.0,769.0,179.0,2.3036,110600.0,INLAND +-117.58,33.87,42.0,765.0,171.0,590.0,177.0,1.6875,113500.0,INLAND +-117.59,33.88,7.0,3586.0,959.0,2695.0,877.0,2.4387,117000.0,INLAND +-117.59,33.88,13.0,3239.0,849.0,2751.0,813.0,2.6111,107000.0,INLAND +-117.58,33.88,16.0,1739.0,478.0,1235.0,420.0,2.2969,116100.0,INLAND +-117.57,33.87,37.0,621.0,156.0,443.0,135.0,2.3333,122800.0,INLAND +-117.57,33.87,27.0,1786.0,287.0,939.0,278.0,5.1929,165000.0,INLAND +-117.58,33.87,17.0,2772.0,449.0,1685.0,461.0,5.0464,163900.0,INLAND +-117.58,33.87,30.0,701.0,131.0,356.0,125.0,3.2917,144300.0,INLAND +-117.58,33.87,34.0,1511.0,272.0,773.0,265.0,3.5313,142100.0,INLAND +-117.55,33.85,4.0,8207.0,1373.0,3887.0,1304.0,4.8686,195300.0,INLAND +-117.56,33.83,28.0,895.0,127.0,346.0,115.0,5.4788,339300.0,INLAND +-117.58,33.85,6.0,16431.0,2640.0,8222.0,2553.0,5.2861,195100.0,INLAND +-117.54,33.82,6.0,202.0,29.0,75.0,28.0,4.125,216700.0,INLAND +-117.55,33.83,6.0,502.0,76.0,228.0,65.0,4.2386,500001.0,INLAND +-117.6,33.85,9.0,6538.0,955.0,2928.0,892.0,5.3006,221400.0,<1H OCEAN +-117.56,33.86,25.0,6964.0,1066.0,3240.0,1036.0,5.2898,177100.0,INLAND +-117.55,33.87,18.0,8136.0,1584.0,4976.0,1516.0,3.9414,137100.0,INLAND +-117.64,33.88,13.0,8010.0,1366.0,3920.0,1309.0,5.536,204800.0,<1H OCEAN +-117.6,33.87,18.0,6450.0,1165.0,3716.0,1113.0,4.2721,150300.0,INLAND +-117.6,33.86,23.0,2949.0,473.0,1671.0,477.0,5.195,161000.0,INLAND +-117.6,33.87,15.0,7626.0,1570.0,3823.0,1415.0,3.4419,138100.0,INLAND +-117.64,33.87,2.0,17470.0,2727.0,5964.0,1985.0,6.2308,257900.0,<1H OCEAN +-117.52,33.84,20.0,688.0,146.0,575.0,144.0,3.55,111000.0,INLAND +-117.52,33.83,22.0,2397.0,400.0,1347.0,403.0,4.46,189800.0,INLAND +-117.53,33.83,7.0,2191.0,324.0,1156.0,310.0,5.5362,195600.0,INLAND +-117.54,33.76,5.0,5846.0,1035.0,3258.0,1001.0,4.7965,160800.0,<1H OCEAN +-117.52,33.82,14.0,3776.0,580.0,1877.0,559.0,5.1365,215000.0,INLAND +-117.36,33.88,15.0,2857.0,421.0,1361.0,382.0,4.6875,189800.0,INLAND +-117.33,33.9,2.0,12837.0,1842.0,4636.0,1453.0,5.1512,187800.0,INLAND +-117.34,33.89,17.0,2678.0,394.0,1225.0,367.0,5.363,211300.0,INLAND +-117.38,33.89,12.0,3964.0,524.0,1707.0,549.0,5.1624,267900.0,INLAND +-117.36,33.88,10.0,5600.0,848.0,2573.0,788.0,5.0346,240500.0,INLAND +-117.26,33.86,16.0,1171.0,235.0,659.0,216.0,3.1103,110000.0,INLAND +-117.33,33.87,14.0,2300.0,335.0,1001.0,311.0,5.1045,161300.0,INLAND +-117.3,33.85,15.0,3991.0,751.0,2317.0,657.0,2.9542,127900.0,INLAND +-117.28,33.85,16.0,3498.0,702.0,2372.0,672.0,2.3229,118000.0,INLAND +-117.43,33.81,13.0,4770.0,718.0,1985.0,662.0,4.2273,295200.0,INLAND +-117.4,33.76,8.0,1954.0,330.0,973.0,321.0,4.4875,249100.0,INLAND +-117.4,33.85,9.0,7538.0,1125.0,3450.0,1077.0,5.4625,223600.0,INLAND +-117.26,33.84,12.0,1159.0,209.0,523.0,159.0,2.7232,123200.0,INLAND +-117.32,33.87,15.0,826.0,138.0,440.0,134.0,4.8125,173900.0,INLAND +-117.28,33.89,33.0,6982.0,1371.0,5650.0,1195.0,2.5379,152700.0,INLAND +-117.34,33.96,15.0,6437.0,1298.0,2805.0,1205.0,4.1883,184500.0,INLAND +-117.32,33.96,19.0,3216.0,666.0,1363.0,629.0,3.7585,144500.0,INLAND +-117.34,33.94,20.0,4589.0,594.0,1660.0,595.0,7.4141,236500.0,INLAND +-117.34,33.94,13.0,7910.0,,3382.0,1176.0,5.5563,214500.0,INLAND +-117.31,33.94,7.0,11232.0,1791.0,4218.0,1644.0,5.2713,216500.0,INLAND +-117.33,33.98,52.0,1417.0,353.0,881.0,300.0,1.9531,162500.0,INLAND +-117.33,33.97,8.0,152.0,19.0,1275.0,20.0,1.625,162500.0,INLAND +-117.34,34.0,27.0,321.0,64.0,214.0,67.0,3.175,101600.0,INLAND +-117.34,33.98,10.0,17286.0,4952.0,9851.0,4616.0,1.7579,103400.0,INLAND +-117.32,33.99,27.0,5464.0,850.0,2400.0,836.0,4.711,133500.0,INLAND +-117.31,33.97,28.0,3420.0,691.0,1502.0,656.0,3.4896,140300.0,INLAND +-117.29,33.97,4.0,18767.0,3032.0,8805.0,2723.0,4.6667,160600.0,INLAND +-117.35,34.01,23.0,3707.0,769.0,1938.0,658.0,2.725,95300.0,INLAND +-117.34,34.02,28.0,2683.0,708.0,2047.0,636.0,2.275,85400.0,INLAND +-117.32,34.01,23.0,3021.0,527.0,1580.0,533.0,4.4063,129900.0,INLAND +-117.24,33.95,11.0,6617.0,1118.0,3710.0,1087.0,4.7877,132600.0,INLAND +-117.23,33.94,7.0,13195.0,2696.0,6763.0,2437.0,3.5851,142000.0,INLAND +-117.25,33.95,5.0,13096.0,2208.0,6780.0,2180.0,4.2775,138700.0,INLAND +-117.23,33.96,5.0,9179.0,1361.0,4573.0,1294.0,5.253,163300.0,INLAND +-117.21,33.95,5.0,8403.0,1240.0,3962.0,1150.0,5.2174,155500.0,INLAND +-117.14,33.94,5.0,4873.0,639.0,1947.0,568.0,6.3223,223200.0,INLAND +-117.21,33.97,3.0,18356.0,2537.0,8437.0,2342.0,5.6409,197700.0,INLAND +-117.28,33.94,10.0,972.0,212.0,773.0,219.0,1.3125,135700.0,INLAND +-117.28,33.92,35.0,3623.0,841.0,2721.0,766.0,2.1574,86900.0,INLAND +-117.27,33.92,13.0,8443.0,1744.0,4885.0,1470.0,3.0907,127200.0,INLAND +-117.27,33.93,2.0,337.0,55.0,115.0,49.0,3.1042,164800.0,INLAND +-117.24,33.94,15.0,1569.0,423.0,1123.0,369.0,1.6111,113900.0,INLAND +-117.24,33.93,12.0,7105.0,1447.0,4520.0,1333.0,3.2705,113200.0,INLAND +-117.25,33.93,8.0,10110.0,1761.0,5804.0,1703.0,4.2654,137600.0,INLAND +-117.25,33.92,7.0,9812.0,1914.0,5595.0,1729.0,4.1482,124600.0,INLAND +-117.23,33.91,9.0,11654.0,2100.0,7596.0,2127.0,4.0473,127200.0,INLAND +-117.23,33.89,5.0,11775.0,2031.0,6686.0,1911.0,4.1953,136600.0,INLAND +-117.23,33.94,8.0,2405.0,537.0,1594.0,517.0,3.0789,114200.0,INLAND +-117.22,33.93,14.0,5104.0,1026.0,3513.0,972.0,3.2148,117000.0,INLAND +-117.22,33.92,5.0,16884.0,2865.0,9509.0,2688.0,4.0938,130900.0,INLAND +-117.21,33.93,4.0,10002.0,1468.0,5439.0,1397.0,5.0223,152600.0,INLAND +-117.16,33.92,12.0,3236.0,502.0,1610.0,502.0,4.7568,143500.0,INLAND +-117.22,33.9,8.0,8302.0,1461.0,5155.0,1370.0,4.0467,121500.0,INLAND +-117.13,33.89,4.0,1611.0,239.0,275.0,84.0,3.5781,244400.0,INLAND +-117.19,33.9,3.0,21060.0,3366.0,9623.0,2812.0,4.189,143000.0,INLAND +-117.22,33.87,16.0,56.0,7.0,39.0,14.0,2.625,500001.0,INLAND +-117.24,33.85,8.0,1031.0,201.0,606.0,179.0,2.8194,136300.0,INLAND +-117.17,33.83,7.0,77.0,12.0,64.0,15.0,4.6,187500.0,INLAND +-117.2,33.83,14.0,1265.0,230.0,621.0,173.0,3.6618,161300.0,INLAND +-117.23,33.83,2.0,1424.0,251.0,681.0,192.0,4.0833,100000.0,INLAND +-117.21,33.82,2.0,4198.0,805.0,1943.0,673.0,3.9052,122100.0,INLAND +-117.22,33.81,4.0,9911.0,1946.0,5145.0,1661.0,3.4237,113700.0,INLAND +-117.21,33.71,16.0,8476.0,1758.0,2711.0,1427.0,2.1848,97900.0,<1H OCEAN +-117.2,33.72,8.0,5528.0,1073.0,1674.0,918.0,2.5335,110100.0,<1H OCEAN +-117.2,33.72,16.0,5373.0,1079.0,1573.0,933.0,1.9912,98600.0,<1H OCEAN +-117.2,33.71,24.0,4210.0,920.0,1283.0,829.0,2.0881,83300.0,<1H OCEAN +-117.2,33.7,23.0,6323.0,1196.0,1984.0,1124.0,2.3276,92400.0,<1H OCEAN +-117.19,33.7,24.0,5783.0,1256.0,1990.0,1151.0,1.9014,83500.0,<1H OCEAN +-117.19,33.69,3.0,6484.0,1037.0,3295.0,1074.0,4.5881,136400.0,<1H OCEAN +-117.27,33.68,8.0,26322.0,4072.0,9360.0,3361.0,5.3238,228900.0,<1H OCEAN +-117.25,33.7,10.0,5156.0,941.0,2294.0,747.0,3.58,113400.0,<1H OCEAN +-117.23,33.68,10.0,3659.0,650.0,1476.0,515.0,3.8869,125900.0,<1H OCEAN +-117.22,33.66,12.0,1869.0,356.0,1007.0,323.0,3.125,117200.0,<1H OCEAN +-117.17,33.66,2.0,7401.0,1187.0,2826.0,839.0,4.1386,177300.0,<1H OCEAN +-117.07,33.67,11.0,939.0,187.0,557.0,190.0,2.375,145800.0,INLAND +-117.11,33.83,14.0,2715.0,500.0,1540.0,464.0,3.8036,139600.0,INLAND +-117.11,33.78,13.0,1914.0,339.0,930.0,304.0,4.1875,161200.0,INLAND +-117.08,33.82,6.0,1771.0,293.0,935.0,279.0,4.065,148200.0,INLAND +-117.18,33.78,7.0,1697.0,424.0,808.0,354.0,1.3417,169300.0,INLAND +-117.11,33.75,17.0,4174.0,851.0,1845.0,780.0,2.2618,96100.0,INLAND +-117.16,33.76,11.0,4934.0,929.0,2508.0,840.0,2.625,155400.0,INLAND +-117.22,33.74,7.0,1810.0,386.0,931.0,355.0,2.5221,109200.0,<1H OCEAN +-117.06,33.78,17.0,2813.0,565.0,1345.0,488.0,2.5847,145300.0,INLAND +-117.14,33.81,13.0,4496.0,756.0,2044.0,695.0,3.2778,148800.0,INLAND +-117.22,33.8,3.0,5284.0,920.0,2703.0,729.0,4.0717,126500.0,INLAND +-117.09,33.71,13.0,1974.0,426.0,1276.0,408.0,1.972,90500.0,INLAND +-117.07,33.72,16.0,4928.0,960.0,2132.0,853.0,2.7983,112500.0,INLAND +-117.11,33.74,18.0,4799.0,1035.0,1966.0,944.0,2.1182,71300.0,INLAND +-117.15,33.7,2.0,6305.0,1265.0,2489.0,1152.0,3.1319,111500.0,INLAND +-117.16,33.73,10.0,2381.0,454.0,1323.0,477.0,2.6322,140700.0,INLAND +-117.23,33.79,17.0,3318.0,759.0,2016.0,673.0,2.2969,89300.0,INLAND +-117.23,33.78,23.0,3465.0,703.0,2672.0,607.0,1.9767,81500.0,INLAND +-117.23,33.77,5.0,2108.0,496.0,1666.0,461.0,2.0,83000.0,INLAND +-117.29,33.83,15.0,4173.0,804.0,2393.0,713.0,2.4662,118300.0,INLAND +-117.32,33.8,11.0,3196.0,576.0,1757.0,552.0,4.0982,173300.0,INLAND +-117.26,33.81,22.0,4249.0,922.0,2405.0,846.0,2.1549,146500.0,INLAND +-117.24,33.77,9.0,6907.0,1379.0,3665.0,1290.0,2.8401,104200.0,INLAND +-117.31,33.75,19.0,3173.0,678.0,2204.0,606.0,2.1484,129200.0,<1H OCEAN +-117.27,33.77,16.0,2876.0,576.0,1859.0,545.0,2.0878,101300.0,<1H OCEAN +-117.29,33.72,19.0,2248.0,427.0,1207.0,368.0,2.817,110000.0,<1H OCEAN +-117.28,33.72,11.0,1161.0,235.0,640.0,210.0,2.1667,114600.0,<1H OCEAN +-117.39,33.69,5.0,6529.0,997.0,3464.0,1006.0,5.3275,168700.0,<1H OCEAN +-117.37,33.7,8.0,4345.0,865.0,2425.0,785.0,3.2481,123800.0,<1H OCEAN +-117.34,33.71,10.0,2591.0,486.0,1255.0,425.0,3.1513,154300.0,<1H OCEAN +-117.31,33.67,9.0,981.0,169.0,596.0,156.0,3.1832,157400.0,<1H OCEAN +-117.35,33.69,11.0,1229.0,236.0,581.0,190.0,3.102,111300.0,<1H OCEAN +-117.33,33.67,27.0,4376.0,1003.0,2667.0,870.0,1.9194,100600.0,<1H OCEAN +-117.35,33.68,10.0,516.0,107.0,282.0,96.0,4.2788,125000.0,<1H OCEAN +-117.38,33.67,9.0,13288.0,2728.0,7235.0,2350.0,3.375,131800.0,<1H OCEAN +-117.38,33.67,17.0,10145.0,2306.0,4776.0,1749.0,2.2423,132600.0,<1H OCEAN +-117.35,33.64,23.0,6859.0,1535.0,3405.0,1351.0,2.5395,109200.0,<1H OCEAN +-117.29,33.63,7.0,16010.0,2726.0,7139.0,2426.0,3.8056,162200.0,<1H OCEAN +-117.28,33.66,15.0,4573.0,928.0,2513.0,832.0,2.6949,163600.0,<1H OCEAN +-117.43,33.55,8.0,446.0,62.0,188.0,68.0,9.4356,465600.0,<1H OCEAN +-117.36,33.6,10.0,4097.0,813.0,2082.0,731.0,3.2258,159300.0,<1H OCEAN +-117.25,33.65,10.0,1652.0,316.0,725.0,233.0,3.5125,155600.0,<1H OCEAN +-117.19,33.64,12.0,1481.0,265.0,757.0,243.0,3.235,210700.0,<1H OCEAN +-117.21,33.61,7.0,7722.0,1324.0,2975.0,1161.0,3.6273,150900.0,<1H OCEAN +-117.2,33.58,2.0,30450.0,5033.0,9419.0,3197.0,4.5936,174300.0,<1H OCEAN +-117.16,33.61,3.0,2744.0,428.0,1223.0,366.0,4.7944,215300.0,<1H OCEAN +-117.12,33.61,2.0,2569.0,431.0,1232.0,388.0,4.3651,145600.0,<1H OCEAN +-117.16,33.57,2.0,20391.0,3245.0,7132.0,2716.0,3.9443,187300.0,<1H OCEAN +-117.16,33.54,4.0,4952.0,1000.0,2912.0,943.0,3.7538,147500.0,<1H OCEAN +-117.05,33.52,5.0,3471.0,530.0,1541.0,502.0,4.8083,347700.0,<1H OCEAN +-116.96,33.52,9.0,2802.0,471.0,1155.0,421.0,4.125,392100.0,INLAND +-117.1,33.56,6.0,1868.0,289.0,750.0,247.0,4.3833,307600.0,<1H OCEAN +-117.02,33.6,7.0,1972.0,352.0,964.0,317.0,3.244,337200.0,INLAND +-116.96,33.62,8.0,1003.0,167.0,388.0,140.0,4.2917,221900.0,INLAND +-117.22,33.48,5.0,1585.0,247.0,510.0,181.0,6.9136,493300.0,<1H OCEAN +-117.19,33.53,6.0,108.0,18.0,43.0,17.0,3.475,187500.0,<1H OCEAN +-117.18,33.51,13.0,270.0,42.0,120.0,42.0,6.993,500001.0,<1H OCEAN +-117.12,33.49,4.0,21988.0,4055.0,8824.0,3252.0,3.9963,191100.0,<1H OCEAN +-117.12,33.52,4.0,30401.0,4957.0,13251.0,4339.0,4.5841,212300.0,<1H OCEAN +-117.15,33.45,4.0,9089.0,1413.0,3886.0,1243.0,4.6904,174200.0,<1H OCEAN +-116.99,33.46,13.0,1614.0,410.0,846.0,270.0,2.83,43000.0,<1H OCEAN +-117.23,33.57,6.0,13724.0,2269.0,5860.0,1986.0,3.9617,183000.0,<1H OCEAN +-117.27,33.55,4.0,6112.0,890.0,2088.0,712.0,5.5351,429000.0,<1H OCEAN +-117.32,33.51,4.0,966.0,133.0,311.0,92.0,5.2066,500001.0,<1H OCEAN +-117.02,33.71,6.0,8278.0,1579.0,3062.0,1446.0,3.0043,134700.0,INLAND +-116.91,33.71,19.0,6807.0,1164.0,2703.0,1055.0,3.1591,189700.0,INLAND +-116.89,33.73,15.0,2094.0,316.0,937.0,277.0,5.3623,201300.0,INLAND +-116.95,33.68,11.0,1183.0,178.0,543.0,147.0,4.4792,173900.0,INLAND +-116.9,33.65,15.0,652.0,149.0,248.0,97.0,2.1071,93800.0,INLAND +-116.92,33.63,18.0,397.0,89.0,239.0,80.0,2.8125,143800.0,INLAND +-116.99,33.73,13.0,16148.0,3474.0,6159.0,3232.0,1.9961,97800.0,INLAND +-116.9,33.74,14.0,2281.0,426.0,894.0,430.0,2.3712,127900.0,INLAND +-116.95,33.75,19.0,2238.0,573.0,1190.0,507.0,2.0714,85800.0,INLAND +-116.95,33.75,23.0,4676.0,1096.0,2770.0,1057.0,1.7847,109500.0,INLAND +-116.93,33.75,14.0,6027.0,1148.0,3136.0,1036.0,2.964,121500.0,INLAND +-116.93,33.74,15.0,3757.0,666.0,1693.0,654.0,3.6806,112800.0,INLAND +-116.95,33.74,20.0,2233.0,431.0,1024.0,399.0,2.4554,89400.0,INLAND +-116.96,33.73,20.0,4735.0,973.0,2306.0,904.0,3.069,87000.0,INLAND +-116.95,33.73,21.0,4587.0,810.0,2233.0,765.0,3.2371,94500.0,INLAND +-116.95,33.74,18.0,1996.0,405.0,1270.0,400.0,2.7083,91200.0,INLAND +-116.94,33.74,19.0,2901.0,445.0,1414.0,475.0,4.6406,118900.0,INLAND +-116.94,33.73,17.0,5160.0,851.0,2344.0,781.0,3.7175,120000.0,INLAND +-116.93,33.73,13.0,3603.0,573.0,1644.0,515.0,4.0433,132300.0,INLAND +-116.96,33.75,35.0,3269.0,757.0,2328.0,705.0,2.5898,76300.0,INLAND +-116.97,33.74,31.0,2712.0,628.0,1519.0,629.0,1.942,86200.0,INLAND +-116.97,33.75,22.0,3740.0,965.0,2011.0,824.0,1.3039,77500.0,INLAND +-116.99,33.75,18.0,9601.0,2401.0,4002.0,2106.0,1.4366,77000.0,INLAND +-116.98,33.74,25.0,4952.0,1062.0,1589.0,1024.0,1.8446,85700.0,INLAND +-116.97,33.74,20.0,3674.0,792.0,1498.0,758.0,2.2161,76900.0,INLAND +-116.96,33.74,19.0,3649.0,755.0,1717.0,696.0,2.2115,87600.0,INLAND +-116.94,33.77,14.0,7240.0,1410.0,2708.0,1240.0,2.4145,137600.0,INLAND +-117.01,33.75,15.0,2873.0,903.0,1094.0,659.0,1.8015,105100.0,INLAND +-116.95,33.76,10.0,6890.0,1702.0,3141.0,1451.0,1.7079,95900.0,INLAND +-116.98,33.77,12.0,5829.0,1309.0,2711.0,1118.0,1.9707,107900.0,INLAND +-116.99,33.76,12.0,7626.0,1704.0,2823.0,1554.0,2.1722,69400.0,INLAND +-117.0,33.74,8.0,5330.0,1529.0,2143.0,1107.0,2.1103,94400.0,INLAND +-117.02,33.73,14.0,3700.0,750.0,1171.0,695.0,1.9476,112500.0,INLAND +-116.99,33.77,7.0,10352.0,2007.0,3559.0,1689.0,2.2925,113100.0,INLAND +-117.02,33.76,20.0,1317.0,203.0,453.0,158.0,2.8393,120700.0,INLAND +-116.98,33.83,15.0,2228.0,472.0,653.0,350.0,2.683,139300.0,INLAND +-117.02,33.81,10.0,6317.0,1335.0,2625.0,1094.0,2.3,108900.0,INLAND +-116.95,33.79,8.0,10997.0,2205.0,5060.0,1949.0,2.1979,95300.0,INLAND +-116.95,33.79,20.0,2399.0,546.0,1726.0,542.0,1.8845,77700.0,INLAND +-116.96,33.79,21.0,2990.0,691.0,2108.0,660.0,2.0135,83000.0,INLAND +-116.97,33.78,24.0,2680.0,606.0,1728.0,527.0,2.535,74800.0,INLAND +-116.95,33.78,24.0,3409.0,804.0,1939.0,739.0,1.7303,74000.0,INLAND +-116.89,33.79,12.0,701.0,130.0,434.0,110.0,2.0577,56700.0,INLAND +-116.87,33.76,5.0,4116.0,761.0,1714.0,717.0,2.5612,130800.0,INLAND +-116.88,33.74,20.0,3111.0,623.0,1000.0,508.0,1.5982,140000.0,INLAND +-116.89,33.75,23.0,2719.0,538.0,930.0,485.0,2.0154,81700.0,INLAND +-116.91,33.75,13.0,10886.0,2127.0,4266.0,1955.0,2.3169,123400.0,INLAND +-116.86,33.73,13.0,2604.0,443.0,978.0,417.0,2.933,170700.0,INLAND +-117.04,34.0,25.0,3750.0,781.0,1594.0,785.0,2.4167,104900.0,INLAND +-117.06,34.0,33.0,1575.0,326.0,879.0,282.0,2.5357,94400.0,INLAND +-117.04,34.0,21.0,4624.0,852.0,2174.0,812.0,3.5255,132100.0,INLAND +-116.99,33.99,22.0,4227.0,658.0,1849.0,619.0,4.7356,195900.0,INLAND +-117.01,33.97,18.0,4775.0,886.0,1868.0,836.0,2.3355,118800.0,INLAND +-116.95,33.97,14.0,5320.0,974.0,1947.0,843.0,3.1393,116300.0,INLAND +-116.97,33.96,12.0,5876.0,1222.0,2992.0,1151.0,2.4322,112100.0,INLAND +-117.11,33.98,25.0,1254.0,312.0,715.0,301.0,2.7344,149000.0,INLAND +-117.02,33.95,5.0,1822.0,367.0,798.0,313.0,2.8783,105200.0,INLAND +-117.03,33.89,6.0,78.0,11.0,27.0,10.0,3.125,187500.0,INLAND +-116.96,33.94,22.0,1999.0,497.0,1304.0,479.0,1.4063,81900.0,INLAND +-116.99,33.92,26.0,503.0,69.0,293.0,59.0,3.7083,147500.0,INLAND +-116.86,33.97,11.0,658.0,131.0,376.0,120.0,2.3977,58000.0,INLAND +-116.79,33.99,16.0,319.0,68.0,212.0,67.0,1.4688,90000.0,INLAND +-116.77,33.92,19.0,2307.0,525.0,1266.0,437.0,1.6875,63000.0,INLAND +-116.81,33.9,17.0,2009.0,469.0,820.0,381.0,1.3286,81800.0,INLAND +-116.89,33.86,2.0,6900.0,1238.0,1950.0,980.0,3.0417,146300.0,INLAND +-116.95,33.86,1.0,6.0,2.0,8.0,2.0,1.625,55000.0,INLAND +-116.86,33.84,18.0,521.0,118.0,174.0,74.0,2.7788,91100.0,INLAND +-116.98,33.94,27.0,3459.0,640.0,1760.0,654.0,3.4545,89800.0,INLAND +-116.98,33.93,40.0,2277.0,498.0,1391.0,453.0,1.9472,73200.0,INLAND +-116.97,33.94,29.0,3197.0,632.0,1722.0,603.0,3.0432,91200.0,INLAND +-116.97,33.93,29.0,2793.0,722.0,1583.0,626.0,1.424,73200.0,INLAND +-116.98,33.93,33.0,376.0,83.0,267.0,88.0,2.1581,68300.0,INLAND +-116.9,33.98,30.0,3915.0,672.0,1820.0,643.0,3.6339,98600.0,INLAND +-116.93,33.93,13.0,7804.0,1594.0,3297.0,1469.0,2.0549,95600.0,INLAND +-116.89,33.93,29.0,4549.0,916.0,2494.0,912.0,2.0976,72600.0,INLAND +-116.88,33.93,37.0,1495.0,429.0,865.0,342.0,1.2188,55000.0,INLAND +-116.9,33.93,34.0,3183.0,738.0,1820.0,647.0,2.2321,71800.0,INLAND +-116.91,34.0,18.0,553.0,100.0,215.0,82.0,5.5,193800.0,INLAND +-116.87,33.94,35.0,4448.0,906.0,2736.0,843.0,2.218,73400.0,INLAND +-116.87,33.93,32.0,3141.0,812.0,2589.0,721.0,1.4556,54600.0,INLAND +-116.87,33.91,37.0,1858.0,361.0,1632.0,310.0,2.7536,73100.0,INLAND +-116.89,33.92,10.0,2653.0,621.0,1967.0,598.0,2.6643,81000.0,INLAND +-116.75,33.83,16.0,5277.0,1070.0,657.0,276.0,3.3333,143400.0,INLAND +-116.8,33.8,35.0,324.0,63.0,158.0,39.0,3.4167,100000.0,INLAND +-116.71,33.75,25.0,10665.0,2161.0,1874.0,852.0,3.0625,150500.0,INLAND +-116.68,33.71,21.0,3460.0,711.0,658.0,255.0,3.5882,161100.0,INLAND +-116.74,33.62,11.0,2385.0,661.0,682.0,242.0,2.9141,214300.0,INLAND +-116.8,33.52,3.0,830.0,145.0,272.0,104.0,3.8281,163500.0,INLAND +-116.89,33.48,14.0,1016.0,219.0,443.0,169.0,2.8071,137500.0,INLAND +-116.87,33.57,12.0,1153.0,265.0,446.0,195.0,3.038,128100.0,INLAND +-116.72,33.56,13.0,3166.0,682.0,1250.0,475.0,2.355,122900.0,INLAND +-116.48,33.61,8.0,1294.0,272.0,457.0,199.0,2.9167,115300.0,INLAND +-116.57,33.64,10.0,489.0,82.0,183.0,74.0,6.2702,345500.0,INLAND +-116.76,33.46,6.0,1251.0,268.0,544.0,216.0,3.0694,173400.0,INLAND +-116.42,33.51,26.0,186.0,48.0,102.0,39.0,2.5625,103100.0,INLAND +-116.6,33.49,16.0,3730.0,827.0,1346.0,592.0,2.183,113500.0,INLAND +-116.69,33.5,13.0,1187.0,255.0,442.0,179.0,1.9107,155700.0,INLAND +-116.39,33.82,15.0,11115.0,2257.0,4122.0,1653.0,2.7219,74400.0,INLAND +-116.71,33.94,12.0,549.0,109.0,209.0,90.0,3.0208,66300.0,INLAND +-116.51,33.89,21.0,1284.0,306.0,537.0,233.0,1.95,61000.0,INLAND +-116.61,33.93,35.0,321.0,71.0,157.0,61.0,2.8056,68100.0,INLAND +-116.57,33.94,29.0,551.0,166.0,224.0,107.0,1.1917,50000.0,INLAND +-116.57,34.0,20.0,260.0,67.0,69.0,50.0,3.5208,76600.0,INLAND +-116.44,33.93,17.0,5293.0,1266.0,1201.0,599.0,1.6849,88400.0,INLAND +-116.36,33.88,11.0,12557.0,3098.0,2453.0,1232.0,1.7844,78500.0,INLAND +-116.52,33.97,13.0,3921.0,754.0,1902.0,665.0,3.3616,89600.0,INLAND +-116.51,33.96,16.0,4913.0,1395.0,2518.0,1132.0,1.4665,61100.0,INLAND +-116.53,33.95,18.0,2990.0,648.0,1280.0,532.0,2.625,68200.0,INLAND +-116.5,33.95,10.0,7249.0,1882.0,4274.0,1621.0,1.6983,66600.0,INLAND +-116.51,33.94,12.0,3369.0,780.0,1315.0,584.0,1.7388,66000.0,INLAND +-116.48,33.96,11.0,1381.0,300.0,644.0,248.0,2.3382,89400.0,INLAND +-116.47,33.94,18.0,2233.0,471.0,919.0,388.0,3.2578,85200.0,INLAND +-116.48,33.94,10.0,3254.0,913.0,923.0,486.0,1.8,81000.0,INLAND +-116.5,33.98,5.0,4332.0,868.0,1420.0,567.0,4.0417,146400.0,INLAND +-116.51,33.84,16.0,980.0,193.0,454.0,185.0,4.0729,100000.0,INLAND +-116.63,33.89,22.0,1540.0,364.0,610.0,268.0,1.5227,71000.0,INLAND +-116.52,33.84,17.0,4465.0,859.0,853.0,445.0,3.6875,130400.0,INLAND +-116.54,33.87,16.0,3648.0,1035.0,1687.0,581.0,1.9167,70400.0,INLAND +-116.57,33.84,18.0,7962.0,1652.0,2009.0,921.0,3.3897,230200.0,INLAND +-116.53,33.85,16.0,10077.0,2186.0,3048.0,1337.0,2.9647,110900.0,INLAND +-116.55,33.84,28.0,2992.0,562.0,676.0,346.0,5.7613,500001.0,INLAND +-116.53,33.84,28.0,8399.0,1839.0,3470.0,1340.0,2.5885,159000.0,INLAND +-116.52,33.85,13.0,7559.0,1444.0,3189.0,1105.0,3.4886,112500.0,INLAND +-116.5,33.82,16.0,343.0,85.0,29.0,14.0,2.1042,87500.0,INLAND +-116.49,33.82,27.0,3316.0,636.0,2362.0,532.0,2.9569,65900.0,INLAND +-116.52,33.82,21.0,10227.0,2315.0,3623.0,1734.0,2.5212,145200.0,INLAND +-116.54,33.82,12.0,9482.0,2501.0,2725.0,1300.0,1.5595,115600.0,INLAND +-116.56,33.83,36.0,1765.0,399.0,451.0,264.0,2.6083,321900.0,INLAND +-116.48,33.8,15.0,3004.0,615.0,437.0,210.0,3.6667,90000.0,INLAND +-116.5,33.81,26.0,5032.0,1229.0,3086.0,1183.0,2.5399,94800.0,INLAND +-116.52,33.81,12.0,12396.0,2552.0,2548.0,1265.0,3.4394,162200.0,INLAND +-116.54,33.81,31.0,6814.0,1714.0,2628.0,1341.0,2.1176,124100.0,INLAND +-116.54,33.81,24.0,6087.0,1217.0,1721.0,833.0,3.1493,199400.0,INLAND +-116.49,33.8,13.0,8789.0,1875.0,1274.0,688.0,3.7396,148900.0,INLAND +-116.54,33.8,22.0,6050.0,1387.0,1432.0,890.0,2.2216,183900.0,INLAND +-116.57,33.76,25.0,2616.0,547.0,581.0,343.0,3.1364,301600.0,INLAND +-116.5,33.69,20.0,4810.0,1074.0,1304.0,740.0,2.25,248100.0,INLAND +-116.54,33.79,18.0,9374.0,1780.0,1678.0,919.0,3.9737,235600.0,INLAND +-116.53,33.78,18.0,2547.0,463.0,411.0,214.0,2.5489,220500.0,INLAND +-116.53,33.88,5.0,4423.0,763.0,1906.0,667.0,4.6855,125200.0,INLAND +-116.48,33.84,5.0,5480.0,1371.0,1050.0,485.0,1.7204,137500.0,INLAND +-116.48,33.79,14.0,9425.0,2020.0,1711.0,1000.0,2.6298,145200.0,INLAND +-116.47,33.84,3.0,9169.0,1512.0,3838.0,1270.0,4.3111,142500.0,INLAND +-116.46,33.82,6.0,4863.0,920.0,3010.0,828.0,3.9508,104200.0,INLAND +-116.47,33.81,7.0,10105.0,2481.0,6274.0,2095.0,2.4497,90900.0,INLAND +-116.46,33.79,10.0,6960.0,1487.0,1130.0,661.0,2.1411,136400.0,INLAND +-116.43,33.81,8.0,6710.0,1343.0,2069.0,781.0,3.5223,115100.0,INLAND +-116.42,33.79,12.0,7095.0,1260.0,1179.0,570.0,4.9444,285000.0,INLAND +-116.43,33.78,17.0,4293.0,712.0,1091.0,464.0,6.1437,232100.0,INLAND +-116.45,33.78,16.0,5228.0,992.0,1177.0,639.0,3.0859,134600.0,INLAND +-116.42,33.76,14.0,16921.0,2837.0,2524.0,1262.0,7.6281,341700.0,INLAND +-116.4,33.78,8.0,3059.0,500.0,612.0,208.0,6.8729,259200.0,INLAND +-116.45,33.8,9.0,5534.0,1206.0,2283.0,1008.0,3.6161,99100.0,INLAND +-116.36,33.78,6.0,24121.0,4522.0,4176.0,2221.0,3.3799,239300.0,INLAND +-116.38,33.74,7.0,17579.0,3479.0,3581.0,1820.0,4.084,194500.0,INLAND +-116.33,33.75,5.0,19107.0,3923.0,2880.0,1376.0,4.036,158500.0,INLAND +-116.31,33.73,19.0,12467.0,2508.0,4086.0,1761.0,3.2846,131900.0,INLAND +-116.46,33.78,25.0,1137.0,414.0,604.0,240.0,1.3801,55000.0,INLAND +-116.46,33.78,33.0,2565.0,745.0,2301.0,638.0,2.5477,83000.0,INLAND +-116.47,33.77,26.0,4300.0,767.0,1557.0,669.0,4.4107,122500.0,INLAND +-116.47,33.78,27.0,1781.0,441.0,759.0,340.0,3.3162,113600.0,INLAND +-116.38,33.73,10.0,11836.0,2405.0,3811.0,1570.0,4.0079,134500.0,INLAND +-116.37,33.72,17.0,8626.0,1859.0,3497.0,1337.0,3.312,121300.0,INLAND +-116.39,33.72,19.0,7646.0,1618.0,2496.0,1075.0,3.5569,128000.0,INLAND +-116.38,33.71,17.0,12509.0,2460.0,2737.0,1423.0,4.5556,258100.0,INLAND +-116.39,33.69,10.0,11659.0,2007.0,2186.0,1083.0,6.9833,238800.0,INLAND +-116.37,33.72,19.0,6190.0,1355.0,2242.0,1043.0,3.0021,152300.0,INLAND +-116.44,33.77,18.0,4872.0,1110.0,955.0,656.0,2.2439,97500.0,INLAND +-116.43,33.75,24.0,2596.0,438.0,473.0,237.0,3.7727,500001.0,INLAND +-116.44,33.74,5.0,846.0,249.0,117.0,67.0,7.9885,403300.0,INLAND +-116.41,33.74,25.0,2475.0,476.0,910.0,387.0,3.3639,168800.0,INLAND +-116.41,33.74,17.0,4289.0,893.0,958.0,440.0,2.4659,177800.0,INLAND +-116.42,33.68,15.0,3895.0,782.0,900.0,529.0,2.2208,138300.0,INLAND +-116.37,33.69,7.0,8806.0,1542.0,858.0,448.0,7.8005,318100.0,INLAND +-116.33,33.72,11.0,12327.0,2000.0,2450.0,1139.0,7.4382,353100.0,INLAND +-116.29,33.67,12.0,5048.0,842.0,883.0,391.0,5.6918,231300.0,INLAND +-116.3,33.68,10.0,2387.0,481.0,863.0,304.0,2.8882,137500.0,INLAND +-116.31,33.67,15.0,2214.0,410.0,1152.0,350.0,2.9187,93400.0,INLAND +-116.31,33.67,11.0,4686.0,851.0,2466.0,731.0,3.3333,91800.0,INLAND +-116.31,33.66,7.0,4497.0,831.0,2248.0,713.0,3.6354,98000.0,INLAND +-116.31,33.65,8.0,3079.0,558.0,1572.0,474.0,4.5938,102600.0,INLAND +-116.26,33.72,10.0,9404.0,1827.0,3208.0,1283.0,3.1086,105800.0,INLAND +-116.25,33.69,5.0,1664.0,444.0,907.0,374.0,2.7667,92900.0,INLAND +-116.22,33.7,9.0,3861.0,849.0,825.0,401.0,3.2833,124700.0,INLAND +-116.24,33.76,9.0,1961.0,595.0,966.0,275.0,3.8125,96700.0,INLAND +-116.29,33.74,6.0,12991.0,2555.0,4571.0,1926.0,4.7195,199300.0,INLAND +-116.29,33.72,5.0,3584.0,760.0,1097.0,470.0,3.1771,167400.0,INLAND +-116.25,33.81,24.0,880.0,187.0,507.0,169.0,3.4583,67500.0,INLAND +-116.25,33.75,33.0,278.0,91.0,375.0,81.0,2.025,50000.0,INLAND +-116.24,33.72,25.0,5236.0,1039.0,2725.0,935.0,3.775,93400.0,INLAND +-116.24,33.71,10.0,9033.0,2224.0,5525.0,1845.0,2.7598,95000.0,INLAND +-116.24,33.73,14.0,2774.0,566.0,1530.0,505.0,3.0682,104100.0,INLAND +-116.22,33.74,26.0,4120.0,858.0,2918.0,815.0,3.3107,69400.0,INLAND +-116.21,33.75,22.0,894.0,,830.0,202.0,3.0673,68200.0,INLAND +-116.21,33.72,28.0,2488.0,714.0,2891.0,676.0,2.3169,68900.0,INLAND +-116.22,33.73,38.0,1695.0,352.0,1279.0,305.0,2.1217,68500.0,INLAND +-116.23,33.73,29.0,1133.0,221.0,918.0,239.0,2.8648,72100.0,INLAND +-116.21,33.71,19.0,3114.0,787.0,3157.0,772.0,1.7083,82200.0,INLAND +-116.22,33.72,28.0,826.0,258.0,979.0,245.0,1.7172,58800.0,INLAND +-116.2,33.7,26.0,2399.0,625.0,2654.0,535.0,2.2989,60600.0,INLAND +-116.23,33.72,32.0,4981.0,1326.0,3779.0,1186.0,1.7805,76900.0,INLAND +-116.23,33.71,17.0,4874.0,1349.0,5032.0,1243.0,2.444,90000.0,INLAND +-116.15,33.69,22.0,197.0,54.0,331.0,70.0,2.9286,112500.0,INLAND +-116.11,33.64,20.0,1273.0,354.0,1548.0,355.0,2.0871,84700.0,INLAND +-116.15,33.64,10.0,1711.0,499.0,1896.0,443.0,1.6557,65400.0,INLAND +-116.2,33.63,23.0,1152.0,273.0,1077.0,235.0,2.5,96300.0,INLAND +-116.21,33.66,19.0,1596.0,295.0,1201.0,282.0,3.8846,100900.0,INLAND +-116.21,33.68,34.0,584.0,176.0,625.0,166.0,1.5809,100000.0,INLAND +-116.25,33.68,16.0,926.0,189.0,238.0,118.0,3.0114,366700.0,INLAND +-116.26,33.65,3.0,7437.0,1222.0,574.0,302.0,10.2948,382400.0,INLAND +-116.17,33.53,13.0,1713.0,512.0,1978.0,442.0,2.1287,58600.0,INLAND +-116.12,33.53,17.0,2421.0,820.0,2971.0,685.0,1.654,100000.0,INLAND +-116.01,33.51,24.0,2985.0,958.0,4042.0,905.0,1.7344,66400.0,INLAND +-115.84,33.49,20.0,1660.0,379.0,637.0,250.0,2.0347,68900.0,INLAND +-116.16,33.68,12.0,1230.0,277.0,1334.0,260.0,2.2679,61400.0,INLAND +-116.17,33.67,18.0,3585.0,800.0,3873.0,788.0,2.5714,65900.0,INLAND +-116.17,33.66,22.0,639.0,203.0,664.0,153.0,1.9306,47500.0,INLAND +-116.19,33.67,16.0,1859.0,476.0,1994.0,477.0,1.7297,67500.0,INLAND +-116.18,33.67,25.0,2888.0,654.0,2940.0,660.0,2.2141,66700.0,INLAND +-116.18,33.69,17.0,89.0,19.0,79.0,21.0,2.375,155000.0,INLAND +-116.19,33.69,11.0,5692.0,1346.0,5682.0,1273.0,2.5383,74000.0,INLAND +-116.08,33.86,16.0,381.0,89.0,182.0,75.0,2.425,76100.0,INLAND +-115.22,33.54,18.0,1706.0,397.0,3424.0,283.0,1.625,53500.0,INLAND +-114.67,33.92,17.0,97.0,24.0,29.0,15.0,1.2656,27500.0,INLAND +-115.58,33.88,21.0,1161.0,282.0,724.0,186.0,3.1827,71700.0,INLAND +-114.98,33.82,15.0,644.0,129.0,137.0,52.0,3.2097,71300.0,INLAND +-114.49,33.97,17.0,2809.0,635.0,83.0,45.0,1.6154,87500.0,INLAND +-114.65,33.6,28.0,1678.0,322.0,666.0,256.0,2.9653,94900.0,INLAND +-114.68,33.49,20.0,1491.0,360.0,1135.0,303.0,1.6395,44400.0,INLAND +-114.56,33.69,17.0,720.0,174.0,333.0,117.0,1.6509,85700.0,INLAND +-114.57,33.64,14.0,1501.0,337.0,515.0,226.0,3.1917,73400.0,INLAND +-114.57,33.57,20.0,1454.0,326.0,624.0,262.0,1.925,65500.0,INLAND +-114.57,33.52,27.0,173.0,35.0,117.0,34.0,2.0833,45000.0,INLAND +-114.59,33.61,34.0,4789.0,1175.0,3134.0,1056.0,2.1782,58400.0,INLAND +-114.61,33.62,16.0,1187.0,261.0,1115.0,242.0,2.1759,61500.0,INLAND +-114.6,33.62,16.0,3741.0,801.0,2434.0,824.0,2.6797,86500.0,INLAND +-114.58,33.63,29.0,1387.0,236.0,671.0,239.0,3.3438,74000.0,INLAND +-114.62,33.62,26.0,18.0,3.0,5.0,3.0,0.536,275000.0,INLAND +-114.58,33.61,25.0,2907.0,680.0,1841.0,633.0,2.6768,82400.0,INLAND +-114.6,33.6,21.0,1988.0,483.0,1182.0,437.0,1.625,62000.0,INLAND +-121.43,38.58,35.0,5298.0,954.0,1933.0,918.0,3.9167,155700.0,INLAND +-121.43,38.57,38.0,2507.0,446.0,888.0,448.0,4.0972,163700.0,INLAND +-121.42,38.57,38.0,1878.0,338.0,710.0,342.0,3.7731,161400.0,INLAND +-121.44,38.58,43.0,1806.0,339.0,764.0,341.0,3.9271,147100.0,INLAND +-121.43,38.57,46.0,2443.0,476.0,939.0,457.0,3.5893,142000.0,INLAND +-121.44,38.57,52.0,3080.0,545.0,975.0,495.0,3.776,164500.0,INLAND +-121.44,38.58,42.0,2334.0,435.0,892.0,446.0,3.0208,148800.0,INLAND +-121.45,38.58,44.0,2314.0,415.0,796.0,388.0,3.4914,153900.0,INLAND +-121.45,38.57,48.0,1962.0,356.0,704.0,362.0,3.5313,147900.0,INLAND +-121.46,38.58,52.0,4408.0,807.0,1604.0,777.0,3.8914,181600.0,INLAND +-121.46,38.58,40.0,1394.0,397.0,689.0,353.0,1.7765,109800.0,INLAND +-121.47,38.58,44.0,2092.0,555.0,878.0,528.0,1.5922,115100.0,INLAND +-121.47,38.58,43.0,3807.0,952.0,1484.0,850.0,2.3266,137500.0,INLAND +-121.47,38.58,52.0,2035.0,483.0,904.0,459.0,2.6976,109300.0,INLAND +-121.48,38.58,52.0,576.0,146.0,273.0,127.0,2.01,94300.0,INLAND +-121.48,38.58,48.0,2434.0,744.0,1281.0,662.0,1.6277,140600.0,INLAND +-121.49,38.58,52.0,2151.0,664.0,1146.0,603.0,1.4034,90300.0,INLAND +-121.48,38.59,52.0,1186.0,341.0,1038.0,320.0,1.6116,70500.0,INLAND +-121.49,38.59,20.0,463.0,180.0,486.0,190.0,1.0313,85000.0,INLAND +-121.49,38.58,52.0,1000.0,324.0,456.0,250.0,1.4375,168800.0,INLAND +-121.5,38.58,5.0,761.0,306.0,2031.0,295.0,0.7526,162500.0,INLAND +-121.5,38.58,20.0,4018.0,1220.0,1570.0,1122.0,2.5821,125000.0,INLAND +-121.5,38.57,9.0,745.0,175.0,297.0,160.0,3.358,77500.0,INLAND +-121.49,38.58,52.0,569.0,405.0,509.0,367.0,0.9196,137500.0,INLAND +-121.48,38.58,42.0,1823.0,566.0,761.0,503.0,1.245,137500.0,INLAND +-121.48,38.57,47.0,2438.0,804.0,1148.0,747.0,1.4301,141700.0,INLAND +-121.48,38.57,52.0,567.0,193.0,272.0,187.0,1.625,187500.0,INLAND +-121.49,38.57,49.0,1334.0,492.0,634.0,421.0,1.7568,93800.0,INLAND +-121.49,38.57,38.0,2410.0,967.0,1091.0,829.0,1.2209,87900.0,INLAND +-121.47,38.57,39.0,1360.0,368.0,589.0,338.0,2.1691,150000.0,INLAND +-121.47,38.57,48.0,3136.0,926.0,1443.0,877.0,1.9034,123900.0,INLAND +-121.48,38.57,38.0,2809.0,805.0,1243.0,785.0,1.8512,114100.0,INLAND +-121.47,38.57,52.0,438.0,103.0,176.0,99.0,3.0217,200000.0,INLAND +-121.47,38.57,50.0,3233.0,968.0,1223.0,837.0,1.2041,168100.0,INLAND +-121.48,38.58,52.0,2501.0,757.0,1081.0,708.0,1.5872,157500.0,INLAND +-121.45,38.57,52.0,2006.0,412.0,825.0,384.0,3.2963,236100.0,INLAND +-121.45,38.56,52.0,3170.0,476.0,1027.0,457.0,4.63,233800.0,INLAND +-121.46,38.56,52.0,1750.0,372.0,764.0,369.0,2.9191,111800.0,INLAND +-121.46,38.57,52.0,810.0,172.0,326.0,151.0,3.1583,140000.0,INLAND +-121.46,38.57,52.0,893.0,159.0,367.0,160.0,3.2386,213200.0,INLAND +-121.46,38.57,52.0,1917.0,367.0,722.0,358.0,3.1484,158900.0,INLAND +-121.46,38.57,52.0,1625.0,419.0,614.0,383.0,2.0549,156700.0,INLAND +-121.43,38.56,41.0,1105.0,227.0,443.0,210.0,3.1827,131700.0,INLAND +-121.44,38.56,45.0,2423.0,466.0,873.0,438.0,3.7167,131900.0,INLAND +-121.44,38.56,52.0,906.0,165.0,257.0,166.0,2.8542,139400.0,INLAND +-121.43,38.56,50.0,1533.0,288.0,532.0,257.0,2.5417,125900.0,INLAND +-121.43,38.56,46.0,1316.0,244.0,452.0,245.0,3.0938,137800.0,INLAND +-121.45,38.57,52.0,3994.0,635.0,1295.0,625.0,5.1169,232500.0,INLAND +-121.45,38.56,52.0,3420.0,555.0,1301.0,530.0,4.0417,173800.0,INLAND +-121.42,38.55,35.0,182.0,39.0,115.0,43.0,2.6417,98900.0,INLAND +-121.43,38.55,44.0,3514.0,714.0,1509.0,656.0,2.7333,100100.0,INLAND +-121.45,38.55,19.0,3374.0,808.0,1412.0,753.0,1.4889,77600.0,INLAND +-121.46,38.56,52.0,1878.0,393.0,722.0,381.0,3.3348,122800.0,INLAND +-121.45,38.56,51.0,1250.0,235.0,452.0,232.0,2.625,121200.0,INLAND +-121.44,38.55,46.0,1698.0,383.0,726.0,386.0,2.9821,97000.0,INLAND +-121.47,38.56,52.0,889.0,162.0,273.0,145.0,3.125,85600.0,INLAND +-121.46,38.56,52.0,907.0,180.0,479.0,177.0,2.2125,104000.0,INLAND +-121.46,38.55,52.0,3126.0,648.0,1789.0,558.0,1.7616,84100.0,INLAND +-121.46,38.55,52.0,2094.0,463.0,1364.0,407.0,1.2235,68500.0,INLAND +-121.47,38.55,48.0,1091.0,403.0,926.0,336.0,1.1458,65400.0,INLAND +-121.47,38.56,52.0,1532.0,408.0,782.0,369.0,1.8911,85900.0,INLAND +-121.47,38.56,51.0,2083.0,559.0,874.0,524.0,2.0221,95800.0,INLAND +-121.47,38.56,44.0,1986.0,573.0,1044.0,490.0,1.7328,88100.0,INLAND +-121.48,38.56,44.0,1151.0,263.0,518.0,258.0,2.0089,113600.0,INLAND +-121.48,38.56,46.0,1476.0,344.0,688.0,353.0,2.7316,134700.0,INLAND +-121.48,38.57,38.0,1145.0,324.0,596.0,288.0,1.78,114300.0,INLAND +-121.49,38.56,42.0,900.0,239.0,506.0,231.0,1.2813,87500.0,INLAND +-121.49,38.56,35.0,1521.0,457.0,987.0,455.0,1.9013,86900.0,INLAND +-121.49,38.57,51.0,1492.0,385.0,736.0,365.0,1.7155,108800.0,INLAND +-121.5,38.57,41.0,1124.0,344.0,807.0,316.0,1.4712,94600.0,INLAND +-121.5,38.57,44.0,1375.0,351.0,766.0,321.0,2.1719,87500.0,INLAND +-121.51,38.57,36.0,613.0,166.0,425.0,147.0,2.2031,93800.0,INLAND +-121.5,38.57,45.0,858.0,254.0,510.0,200.0,1.0114,80000.0,INLAND +-121.5,38.56,46.0,2646.0,645.0,1684.0,616.0,1.128,123100.0,INLAND +-121.51,38.56,43.0,1048.0,312.0,1320.0,294.0,1.0649,137500.0,INLAND +-121.51,38.55,45.0,3032.0,631.0,1341.0,597.0,2.8417,137900.0,INLAND +-121.51,38.55,46.0,1485.0,278.0,531.0,291.0,2.7885,137200.0,INLAND +-121.49,38.56,52.0,1844.0,392.0,667.0,353.0,3.0033,103500.0,INLAND +-121.49,38.55,52.0,2515.0,460.0,836.0,442.0,3.3844,151100.0,INLAND +-121.5,38.55,52.0,2784.0,455.0,957.0,448.0,5.6402,209800.0,INLAND +-121.49,38.56,52.0,1777.0,368.0,624.0,350.0,3.6729,137800.0,INLAND +-121.49,38.54,47.0,2313.0,536.0,779.0,442.0,2.5639,123000.0,INLAND +-121.5,38.54,52.0,1145.0,133.0,334.0,138.0,8.338,405800.0,INLAND +-121.49,38.55,51.0,4280.0,632.0,1486.0,621.0,5.0359,224100.0,INLAND +-121.5,38.55,49.0,4094.0,634.0,1363.0,659.0,5.2362,236800.0,INLAND +-121.5,38.54,44.0,1167.0,201.0,452.0,209.0,3.7344,179800.0,INLAND +-121.48,38.55,52.0,2508.0,360.0,832.0,345.0,7.1035,228700.0,INLAND +-121.48,38.55,52.0,2037.0,358.0,811.0,375.0,4.3929,162500.0,INLAND +-121.48,38.56,50.0,1587.0,448.0,877.0,380.0,2.0833,94300.0,INLAND +-121.48,38.55,52.0,1684.0,309.0,675.0,296.0,4.1467,175000.0,INLAND +-121.48,38.55,52.0,2216.0,333.0,714.0,327.0,4.8603,191900.0,INLAND +-121.48,38.56,52.0,814.0,216.0,327.0,181.0,2.8542,125000.0,INLAND +-121.47,38.55,48.0,968.0,310.0,706.0,274.0,0.9948,65400.0,INLAND +-121.47,38.55,29.0,1303.0,308.0,861.0,263.0,1.0208,55800.0,INLAND +-121.47,38.54,47.0,2085.0,464.0,1346.0,402.0,1.2679,56700.0,INLAND +-121.47,38.55,24.0,979.0,287.0,546.0,291.0,1.186,67000.0,INLAND +-121.47,38.55,52.0,1384.0,295.0,561.0,244.0,2.0242,94600.0,INLAND +-121.45,38.54,47.0,1159.0,250.0,810.0,244.0,2.7787,56000.0,INLAND +-121.45,38.54,41.0,1278.0,308.0,839.0,280.0,1.4702,58300.0,INLAND +-121.46,38.54,48.0,1001.0,205.0,605.0,175.0,1.8333,58200.0,INLAND +-121.46,38.55,40.0,2077.0,435.0,1454.0,385.0,2.0074,57000.0,INLAND +-121.42,38.54,29.0,1407.0,265.0,556.0,235.0,3.0521,108000.0,INLAND +-121.43,38.54,43.0,2084.0,417.0,912.0,410.0,2.9769,92700.0,INLAND +-121.43,38.54,44.0,1879.0,359.0,791.0,345.0,3.15,101500.0,INLAND +-121.44,38.54,44.0,2570.0,509.0,1145.0,503.0,2.5694,92400.0,INLAND +-121.45,38.54,48.0,3421.0,734.0,1441.0,727.0,1.9485,86600.0,INLAND +-121.42,38.54,18.0,2525.0,501.0,1726.0,468.0,2.398,87600.0,INLAND +-121.42,38.54,29.0,2358.0,493.0,1071.0,470.0,2.925,94300.0,INLAND +-121.43,38.54,42.0,3321.0,688.0,1346.0,658.0,2.4618,101300.0,INLAND +-121.44,38.54,39.0,2855.0,,1217.0,562.0,3.2404,93600.0,INLAND +-121.44,38.54,47.0,2518.0,501.0,1308.0,471.0,2.5389,75700.0,INLAND +-121.41,38.53,35.0,2061.0,371.0,1110.0,342.0,3.1944,79000.0,INLAND +-121.41,38.53,37.0,1058.0,224.0,588.0,231.0,2.9737,72100.0,INLAND +-121.42,38.53,37.0,1958.0,367.0,1171.0,366.0,2.8298,71200.0,INLAND +-121.42,38.53,36.0,1581.0,288.0,832.0,291.0,3.4083,71800.0,INLAND +-121.43,38.53,36.0,1488.0,294.0,846.0,279.0,3.1208,82700.0,INLAND +-121.43,38.53,36.0,2430.0,426.0,1199.0,437.0,3.1667,81900.0,INLAND +-121.44,38.53,37.0,1951.0,432.0,1089.0,411.0,2.3272,80600.0,INLAND +-121.41,38.52,25.0,3087.0,720.0,2529.0,708.0,1.8689,66800.0,INLAND +-121.42,38.51,21.0,3249.0,666.0,2611.0,663.0,1.9423,87800.0,INLAND +-121.42,38.52,32.0,2828.0,556.0,1655.0,485.0,2.5574,72600.0,INLAND +-121.43,38.52,43.0,2089.0,399.0,955.0,385.0,2.5898,72100.0,INLAND +-121.43,38.52,30.0,3657.0,945.0,2925.0,899.0,1.3927,78300.0,INLAND +-121.44,38.52,38.0,2080.0,388.0,995.0,380.0,2.7697,76600.0,INLAND +-121.5,38.53,39.0,3184.0,593.0,1188.0,572.0,4.6923,192000.0,INLAND +-121.5,38.53,37.0,3642.0,684.0,1508.0,657.0,3.5231,114300.0,INLAND +-121.51,38.53,34.0,1613.0,265.0,631.0,266.0,4.25,191900.0,INLAND +-121.51,38.53,36.0,2603.0,408.0,966.0,419.0,5.3135,216600.0,INLAND +-121.5,38.52,37.0,2008.0,466.0,1261.0,427.0,2.2574,59100.0,INLAND +-121.51,38.51,33.0,2918.0,439.0,1085.0,427.0,5.5208,171300.0,INLAND +-121.51,38.51,31.0,1595.0,217.0,542.0,236.0,6.6112,251600.0,INLAND +-121.51,38.52,30.0,3236.0,588.0,1167.0,569.0,4.0972,181400.0,INLAND +-121.48,38.53,38.0,1451.0,315.0,786.0,340.0,2.3487,101600.0,INLAND +-121.49,38.53,40.0,2966.0,536.0,1225.0,505.0,3.125,130600.0,INLAND +-121.49,38.54,37.0,1655.0,393.0,841.0,355.0,1.6932,78400.0,INLAND +-121.48,38.53,43.0,1378.0,280.0,708.0,280.0,2.3542,103900.0,INLAND +-121.48,38.52,36.0,1824.0,357.0,906.0,356.0,2.9911,96400.0,INLAND +-121.49,38.52,37.0,1902.0,413.0,955.0,384.0,3.1014,96800.0,INLAND +-121.49,38.53,42.0,1468.0,281.0,571.0,271.0,3.3906,124200.0,INLAND +-121.48,38.54,41.0,3364.0,685.0,1841.0,626.0,2.1975,73500.0,INLAND +-121.48,38.53,37.0,1704.0,361.0,902.0,356.0,1.9837,62300.0,INLAND +-121.47,38.54,36.0,2099.0,510.0,1845.0,483.0,1.4138,52500.0,INLAND +-121.47,38.53,43.0,3215.0,725.0,2400.0,625.0,1.4625,54400.0,INLAND +-121.47,38.53,44.0,543.0,146.0,506.0,125.0,1.3646,65400.0,INLAND +-121.49,38.51,18.0,700.0,169.0,260.0,128.0,2.9219,152900.0,INLAND +-121.49,38.5,32.0,2364.0,439.0,1331.0,449.0,3.319,84500.0,INLAND +-121.49,38.5,30.0,1715.0,271.0,842.0,263.0,3.0313,87900.0,INLAND +-121.5,38.5,29.0,2049.0,330.0,787.0,309.0,3.7414,98500.0,INLAND +-121.49,38.51,30.0,3166.0,607.0,1857.0,579.0,3.1768,79500.0,INLAND +-121.51,38.54,34.0,2815.0,479.0,1075.0,471.0,3.9792,164800.0,INLAND +-121.52,38.53,31.0,3089.0,585.0,1366.0,561.0,4.2885,160300.0,INLAND +-121.52,38.53,30.0,3377.0,623.0,1289.0,594.0,3.5737,171200.0,INLAND +-121.52,38.51,23.0,6876.0,1456.0,2942.0,1386.0,3.0963,156900.0,INLAND +-121.51,38.49,21.0,4426.0,790.0,1856.0,761.0,4.1,158300.0,INLAND +-121.51,38.5,25.0,4719.0,745.0,1857.0,739.0,5.0371,180200.0,INLAND +-121.55,38.51,14.0,5490.0,851.0,2415.0,837.0,6.5253,216800.0,INLAND +-121.55,38.5,9.0,4868.0,738.0,2036.0,750.0,5.7621,204600.0,INLAND +-121.54,38.5,15.0,6093.0,1051.0,2415.0,997.0,4.2075,183600.0,INLAND +-121.54,38.51,17.0,8482.0,1590.0,3362.0,1513.0,4.2216,217900.0,INLAND +-121.53,38.5,17.0,3087.0,477.0,1365.0,495.0,6.4667,216800.0,INLAND +-121.53,38.51,20.0,6132.0,1324.0,2595.0,1174.0,3.1607,178900.0,INLAND +-121.52,38.5,19.0,4900.0,805.0,2519.0,855.0,4.8497,184400.0,INLAND +-121.53,38.48,5.0,27870.0,5027.0,11935.0,4855.0,4.8811,212200.0,INLAND +-121.52,38.49,5.0,3344.0,800.0,1341.0,670.0,3.6196,152800.0,INLAND +-121.54,38.49,6.0,9104.0,1535.0,3759.0,1481.0,5.1442,174500.0,INLAND +-121.48,38.52,34.0,2561.0,497.0,1583.0,530.0,3.1583,95800.0,INLAND +-121.48,38.51,24.0,979.0,201.0,723.0,205.0,2.5926,72300.0,INLAND +-121.48,38.5,23.0,2679.0,792.0,1740.0,659.0,1.3679,70300.0,INLAND +-121.49,38.49,26.0,1557.0,301.0,986.0,300.0,2.6613,77700.0,INLAND +-121.5,38.49,29.0,3606.0,690.0,2317.0,696.0,2.7368,78200.0,INLAND +-121.5,38.49,32.0,4013.0,725.0,2032.0,675.0,3.3689,83400.0,INLAND +-121.48,38.49,26.0,3165.0,806.0,2447.0,752.0,1.5908,78600.0,INLAND +-121.49,38.49,26.0,4629.0,832.0,2902.0,816.0,2.735,74600.0,INLAND +-121.47,38.49,17.0,3595.0,790.0,2760.0,770.0,2.3233,78800.0,INLAND +-121.47,38.48,25.0,2969.0,551.0,1745.0,487.0,2.6382,76200.0,INLAND +-121.49,38.47,26.0,6121.0,1185.0,4224.0,1105.0,2.3496,68000.0,INLAND +-121.47,38.48,24.0,2359.0,462.0,2048.0,476.0,3.2702,67300.0,INLAND +-121.45,38.54,38.0,1865.0,384.0,1052.0,354.0,1.7891,60500.0,INLAND +-121.45,38.53,38.0,1746.0,388.0,1142.0,315.0,1.7714,69900.0,INLAND +-121.45,38.53,34.0,1893.0,415.0,884.0,395.0,2.1679,75400.0,INLAND +-121.45,38.53,34.0,1717.0,354.0,848.0,306.0,2.4741,87000.0,INLAND +-121.46,38.54,39.0,1453.0,324.0,843.0,281.0,1.7692,63900.0,INLAND +-121.46,38.53,37.0,2745.0,588.0,1607.0,556.0,1.8007,65400.0,INLAND +-121.46,38.54,36.0,1825.0,411.0,1226.0,391.0,1.5292,55700.0,INLAND +-121.47,38.52,26.0,2177.0,638.0,1971.0,560.0,1.2575,66800.0,INLAND +-121.46,38.51,18.0,2123.0,606.0,1576.0,599.0,1.5735,110000.0,INLAND +-121.45,38.5,25.0,3033.0,665.0,1559.0,627.0,2.7101,99500.0,INLAND +-121.47,38.5,17.0,1895.0,424.0,620.0,417.0,1.7188,137500.0,INLAND +-121.47,38.51,52.0,20.0,4.0,74.0,9.0,3.625,80000.0,INLAND +-121.47,38.52,42.0,2316.0,515.0,1597.0,522.0,1.8205,60400.0,INLAND +-121.44,38.52,36.0,3446.0,950.0,2460.0,847.0,1.6521,69700.0,INLAND +-121.45,38.51,29.0,4221.0,901.0,2294.0,850.0,2.2245,75900.0,INLAND +-121.45,38.52,37.0,1705.0,325.0,827.0,326.0,2.6288,71200.0,INLAND +-121.45,38.52,37.0,1477.0,321.0,888.0,312.0,2.5592,70300.0,INLAND +-121.46,38.52,29.0,3873.0,797.0,2237.0,706.0,2.1736,72100.0,INLAND +-121.46,38.51,32.0,2437.0,592.0,1596.0,557.0,1.68,84100.0,INLAND +-121.46,38.52,34.0,1279.0,285.0,963.0,268.0,2.71,65600.0,INLAND +-121.44,38.51,27.0,7212.0,1606.0,4828.0,1549.0,2.214,82400.0,INLAND +-121.44,38.5,27.0,2527.0,439.0,1089.0,415.0,4.088,96800.0,INLAND +-121.44,38.5,20.0,2033.0,586.0,1281.0,521.0,1.4007,97500.0,INLAND +-121.42,38.51,15.0,7901.0,1422.0,4769.0,1418.0,2.8139,90400.0,INLAND +-121.42,38.5,24.0,7740.0,1539.0,4333.0,1397.0,3.025,87900.0,INLAND +-121.46,38.49,15.0,10211.0,1995.0,5656.0,1752.0,2.575,107900.0,INLAND +-121.45,38.49,34.0,3573.0,662.0,1540.0,620.0,3.5323,109800.0,INLAND +-121.44,38.49,31.0,4297.0,788.0,2083.0,771.0,3.3878,109300.0,INLAND +-121.45,38.48,28.0,2780.0,510.0,1638.0,533.0,2.9571,103100.0,INLAND +-121.43,38.48,12.0,4602.0,930.0,2299.0,860.0,3.0625,90500.0,INLAND +-121.44,38.48,12.0,4929.0,1010.0,2621.0,870.0,2.7262,109800.0,INLAND +-121.45,38.48,24.0,1766.0,340.0,1028.0,372.0,3.5402,98700.0,INLAND +-121.46,38.48,8.0,3593.0,659.0,1710.0,530.0,3.5227,93100.0,INLAND +-121.42,38.49,17.0,13180.0,2444.0,7235.0,2335.0,3.363,103000.0,INLAND +-121.42,38.48,13.0,7880.0,1992.0,4749.0,1882.0,1.9657,116000.0,INLAND +-121.4,38.49,12.0,7290.0,1283.0,3960.0,1248.0,3.5968,106300.0,INLAND +-121.38,38.49,11.0,8537.0,1643.0,4224.0,1648.0,2.9647,108900.0,INLAND +-121.39,38.51,19.0,1808.0,375.0,758.0,320.0,2.0062,92000.0,INLAND +-121.42,38.56,21.0,2066.0,748.0,2548.0,734.0,1.3571,55000.0,INLAND +-121.39,38.56,19.0,8507.0,1470.0,3517.0,1453.0,4.3644,137400.0,INLAND +-121.38,38.55,23.0,2790.0,430.0,1407.0,460.0,4.3288,133700.0,INLAND +-121.38,38.55,26.0,1532.0,264.0,781.0,285.0,4.6944,130900.0,INLAND +-121.39,38.55,25.0,2171.0,431.0,1053.0,422.0,3.5278,126200.0,INLAND +-121.39,38.55,18.0,1734.0,467.0,783.0,447.0,1.9044,154300.0,INLAND +-121.4,38.55,26.0,2697.0,398.0,1088.0,389.0,5.0,142500.0,INLAND +-121.41,38.55,14.0,2534.0,705.0,1495.0,583.0,1.9167,156300.0,INLAND +-121.4,38.55,19.0,2497.0,494.0,748.0,442.0,2.925,142400.0,INLAND +-121.4,38.53,38.0,152.0,30.0,65.0,35.0,0.9274,67500.0,INLAND +-121.48,38.59,43.0,987.0,240.0,1253.0,237.0,0.9204,82100.0,INLAND +-121.5,38.59,43.0,88.0,21.0,119.0,19.0,1.725,67500.0,INLAND +-121.44,38.6,16.0,2987.0,864.0,1240.0,755.0,2.8231,137500.0,INLAND +-121.41,38.56,17.0,7228.0,1369.0,2455.0,1365.0,5.1385,179500.0,INLAND +-121.37,38.57,22.0,4899.0,847.0,1701.0,826.0,5.2449,387000.0,INLAND +-121.39,38.57,33.0,2648.0,357.0,863.0,359.0,8.4016,338700.0,INLAND +-121.4,38.57,25.0,2022.0,295.0,639.0,278.0,5.8416,297600.0,INLAND +-121.41,38.57,16.0,4429.0,1124.0,1538.0,960.0,3.2443,190700.0,INLAND +-121.4,38.56,22.0,2623.0,357.0,838.0,368.0,7.143,327800.0,INLAND +-121.42,38.6,23.0,3713.0,1078.0,2194.0,1018.0,1.7451,89600.0,INLAND +-121.42,38.6,35.0,1166.0,193.0,574.0,190.0,2.2452,102800.0,INLAND +-121.42,38.6,36.0,1327.0,209.0,613.0,230.0,3.8672,111400.0,INLAND +-121.43,38.61,33.0,2289.0,576.0,1100.0,503.0,2.1694,95700.0,INLAND +-121.44,38.61,34.0,172.0,38.0,149.0,55.0,2.6442,55000.0,INLAND +-121.41,38.61,36.0,3099.0,605.0,1322.0,623.0,3.4784,105500.0,INLAND +-121.41,38.6,16.0,5407.0,1467.0,2523.0,1265.0,2.0471,104200.0,INLAND +-121.41,38.59,18.0,5527.0,1446.0,2883.0,1305.0,2.6485,114500.0,INLAND +-121.41,38.59,17.0,12355.0,3630.0,5692.0,3073.0,2.5245,99100.0,INLAND +-121.41,38.58,18.0,6955.0,1882.0,2803.0,1740.0,3.089,141400.0,INLAND +-121.39,38.61,36.0,2396.0,536.0,1225.0,515.0,2.9559,136600.0,INLAND +-121.39,38.6,22.0,5773.0,1320.0,2607.0,1250.0,2.5238,118800.0,INLAND +-121.4,38.61,37.0,1994.0,347.0,782.0,355.0,4.1488,136400.0,INLAND +-121.38,38.59,36.0,1239.0,237.0,764.0,222.0,3.0156,103000.0,INLAND +-121.39,38.59,33.0,2091.0,468.0,1053.0,470.0,2.2264,108100.0,INLAND +-121.39,38.59,34.0,1151.0,234.0,563.0,251.0,2.8,113600.0,INLAND +-121.4,38.59,25.0,2228.0,534.0,1130.0,481.0,2.5363,124600.0,INLAND +-121.4,38.59,18.0,2614.0,624.0,1181.0,616.0,2.0432,156800.0,INLAND +-121.38,38.59,36.0,2253.0,434.0,1018.0,426.0,3.2596,98700.0,INLAND +-121.39,38.58,36.0,2019.0,369.0,878.0,356.0,2.8462,93400.0,INLAND +-121.39,38.58,41.0,2577.0,365.0,913.0,339.0,6.3406,448300.0,INLAND +-121.37,38.6,35.0,3137.0,544.0,1312.0,549.0,3.788,136800.0,INLAND +-121.37,38.6,36.0,1119.0,144.0,414.0,150.0,5.8336,283300.0,INLAND +-121.38,38.6,36.0,1249.0,159.0,362.0,143.0,6.8469,446400.0,INLAND +-121.38,38.61,34.0,2888.0,496.0,1168.0,479.0,3.6053,148600.0,INLAND +-121.37,38.59,36.0,2523.0,401.0,927.0,398.0,3.5179,207800.0,INLAND +-121.37,38.58,37.0,2839.0,390.0,1006.0,400.0,7.3343,280400.0,INLAND +-121.38,38.58,38.0,2968.0,475.0,1176.0,454.0,5.0497,191700.0,INLAND +-121.38,38.59,38.0,1839.0,287.0,685.0,276.0,4.5313,189400.0,INLAND +-121.37,38.59,36.0,2388.0,369.0,838.0,356.0,4.775,194100.0,INLAND +-121.35,38.61,27.0,3900.0,776.0,1549.0,761.0,2.7788,115700.0,INLAND +-121.35,38.6,27.0,4314.0,611.0,1662.0,575.0,5.0997,170100.0,INLAND +-121.36,38.6,35.0,1930.0,328.0,805.0,338.0,4.4643,133000.0,INLAND +-121.36,38.6,36.0,1275.0,227.0,530.0,245.0,3.875,133600.0,INLAND +-121.36,38.61,35.0,2355.0,365.0,993.0,354.0,5.0492,144100.0,INLAND +-121.35,38.59,29.0,1285.0,193.0,460.0,206.0,5.3243,265700.0,INLAND +-121.36,38.59,32.0,3303.0,480.0,1185.0,436.0,5.0508,225700.0,INLAND +-121.36,38.58,25.0,3196.0,406.0,978.0,419.0,8.4699,344000.0,INLAND +-121.35,38.58,20.0,2992.0,378.0,1105.0,368.0,8.6572,320200.0,INLAND +-121.34,38.58,18.0,1631.0,228.0,599.0,228.0,7.8031,267200.0,INLAND +-121.34,38.59,23.0,2912.0,421.0,1132.0,410.0,5.9174,225900.0,INLAND +-121.34,38.59,22.0,3273.0,480.0,1151.0,463.0,8.05,380000.0,INLAND +-121.36,38.64,24.0,6540.0,1008.0,2667.0,1031.0,5.5632,175200.0,INLAND +-121.36,38.63,28.0,6119.0,985.0,2631.0,934.0,4.875,146400.0,INLAND +-121.35,38.62,28.0,4175.0,796.0,2032.0,830.0,3.4299,164000.0,INLAND +-121.35,38.61,25.0,4916.0,1243.0,2140.0,1136.0,2.5511,134100.0,INLAND +-121.36,38.61,37.0,2191.0,394.0,951.0,362.0,3.8882,159500.0,INLAND +-121.36,38.62,34.0,2447.0,503.0,1077.0,456.0,3.058,133000.0,INLAND +-121.36,38.63,30.0,2619.0,370.0,940.0,359.0,4.7283,164500.0,INLAND +-121.37,38.64,36.0,322.0,48.0,133.0,59.0,4.6111,139300.0,INLAND +-121.38,38.64,19.0,4563.0,1069.0,2256.0,926.0,2.1472,143400.0,INLAND +-121.37,38.63,32.0,3658.0,797.0,1452.0,715.0,2.6623,120700.0,INLAND +-121.37,38.63,37.0,494.0,86.0,253.0,99.0,4.8194,141100.0,INLAND +-121.37,38.63,30.0,5996.0,1018.0,2532.0,1049.0,4.6127,151800.0,INLAND +-121.37,38.62,27.0,1743.0,380.0,697.0,368.0,1.6678,166100.0,INLAND +-121.38,38.62,34.0,2352.0,610.0,1127.0,592.0,2.2,116500.0,INLAND +-121.38,38.62,41.0,774.0,144.0,356.0,150.0,3.5625,115300.0,INLAND +-121.37,38.62,43.0,1077.0,199.0,447.0,182.0,3.0139,115600.0,INLAND +-121.37,38.61,42.0,945.0,193.0,460.0,193.0,3.7569,127100.0,INLAND +-121.37,38.61,39.0,823.0,146.0,329.0,144.0,3.0833,114100.0,INLAND +-121.38,38.61,27.0,2375.0,537.0,863.0,452.0,3.0086,126900.0,INLAND +-121.39,38.63,30.0,2930.0,739.0,1661.0,668.0,2.7813,118900.0,INLAND +-121.39,38.63,34.0,1226.0,180.0,359.0,167.0,3.8068,150400.0,INLAND +-121.39,38.61,35.0,2024.0,359.0,786.0,364.0,2.4632,156900.0,INLAND +-121.39,38.62,27.0,5693.0,1487.0,2334.0,1387.0,2.2844,170500.0,INLAND +-121.39,38.62,45.0,2696.0,624.0,1059.0,582.0,1.8176,160900.0,INLAND +-121.4,38.63,30.0,3626.0,834.0,1577.0,806.0,2.517,130400.0,INLAND +-121.4,38.63,31.0,1540.0,452.0,1079.0,444.0,1.8571,98700.0,INLAND +-121.4,38.62,28.0,3671.0,886.0,1733.0,820.0,2.2292,113200.0,INLAND +-121.4,38.61,33.0,3512.0,825.0,1515.0,782.0,1.9908,118800.0,INLAND +-121.41,38.62,21.0,3260.0,763.0,1735.0,736.0,2.5162,97500.0,INLAND +-121.42,38.62,33.0,3171.0,832.0,1591.0,695.0,2.0786,88600.0,INLAND +-121.42,38.61,34.0,1126.0,256.0,589.0,243.0,2.1776,84400.0,INLAND +-121.43,38.61,40.0,1134.0,252.0,675.0,249.0,1.3696,65200.0,INLAND +-121.42,38.62,41.0,1087.0,272.0,462.0,219.0,2.0224,64900.0,INLAND +-121.42,38.63,42.0,1385.0,273.0,740.0,274.0,2.6055,78000.0,INLAND +-121.43,38.63,43.0,1009.0,225.0,604.0,218.0,1.6641,67000.0,INLAND +-121.42,38.63,42.0,2217.0,536.0,1203.0,507.0,1.9412,73100.0,INLAND +-121.43,38.62,36.0,1765.0,438.0,1008.0,382.0,2.0639,73000.0,INLAND +-121.44,38.61,41.0,1404.0,313.0,765.0,330.0,1.8792,63300.0,INLAND +-121.41,38.64,41.0,1578.0,317.0,897.0,333.0,2.3214,66800.0,INLAND +-121.41,38.64,38.0,1384.0,287.0,682.0,280.0,1.9167,64400.0,INLAND +-121.42,38.64,42.0,1720.0,382.0,1069.0,362.0,1.8611,60500.0,INLAND +-121.42,38.64,44.0,1728.0,367.0,1042.0,349.0,1.6033,58500.0,INLAND +-121.42,38.65,21.0,2274.0,495.0,1157.0,445.0,2.098,49800.0,INLAND +-121.43,38.65,18.0,909.0,198.0,661.0,176.0,3.1696,77400.0,INLAND +-121.43,38.64,34.0,2010.0,411.0,1501.0,422.0,2.0417,65900.0,INLAND +-121.44,38.64,18.0,1756.0,442.0,837.0,320.0,1.125,70500.0,INLAND +-121.44,38.64,25.0,1678.0,367.0,971.0,307.0,1.0398,62100.0,INLAND +-121.44,38.65,28.0,1219.0,240.0,559.0,212.0,3.8295,122200.0,INLAND +-121.44,38.63,38.0,1673.0,399.0,1116.0,382.0,1.3302,62200.0,INLAND +-121.44,38.63,33.0,1077.0,271.0,753.0,236.0,1.3462,55900.0,INLAND +-121.44,38.63,38.0,1402.0,370.0,970.0,382.0,1.6343,71000.0,INLAND +-121.44,38.62,37.0,1607.0,385.0,972.0,354.0,1.9107,64700.0,INLAND +-121.44,38.62,37.0,3009.0,733.0,1513.0,588.0,1.4387,61000.0,INLAND +-121.45,38.65,5.0,2680.0,502.0,1885.0,498.0,2.6369,110000.0,INLAND +-121.46,38.65,8.0,3746.0,767.0,2161.0,744.0,3.2039,103400.0,INLAND +-121.46,38.65,14.0,3167.0,551.0,1787.0,533.0,3.8125,92600.0,INLAND +-121.45,38.64,23.0,1481.0,343.0,1079.0,315.0,1.867,60600.0,INLAND +-121.46,38.64,20.0,1517.0,323.0,1287.0,328.0,1.6607,67000.0,INLAND +-121.46,38.63,26.0,3185.0,658.0,2444.0,626.0,1.56,67600.0,INLAND +-121.45,38.63,28.0,1246.0,295.0,884.0,258.0,1.4397,51700.0,INLAND +-121.45,38.62,37.0,1534.0,315.0,1147.0,322.0,2.5643,59800.0,INLAND +-121.45,38.62,38.0,2419.0,605.0,1696.0,503.0,1.4861,63100.0,INLAND +-121.45,38.61,32.0,2436.0,612.0,1509.0,618.0,1.0424,81400.0,INLAND +-121.46,38.61,43.0,705.0,178.0,464.0,159.0,2.4205,60900.0,INLAND +-121.46,38.62,35.0,3326.0,696.0,2511.0,649.0,1.9871,60900.0,INLAND +-121.44,38.61,33.0,1591.0,466.0,1000.0,418.0,1.0467,70100.0,INLAND +-121.45,38.6,44.0,2324.0,413.0,823.0,375.0,4.6625,158900.0,INLAND +-121.45,38.61,46.0,1758.0,511.0,1094.0,484.0,1.0685,70000.0,INLAND +-121.46,38.61,43.0,1111.0,269.0,613.0,290.0,1.2917,66300.0,INLAND +-121.46,38.6,29.0,1978.0,538.0,823.0,490.0,1.9688,135600.0,INLAND +-121.45,38.61,34.0,438.0,116.0,263.0,100.0,0.9379,67500.0,INLAND +-121.47,38.63,29.0,2197.0,520.0,1374.0,483.0,2.1889,69300.0,INLAND +-121.47,38.61,31.0,1072.0,,781.0,281.0,1.6563,65800.0,INLAND +-121.47,38.61,35.0,1372.0,360.0,850.0,328.0,1.6331,67500.0,INLAND +-121.52,38.65,17.0,1269.0,233.0,494.0,231.0,3.9615,331300.0,INLAND +-121.53,38.61,5.0,8149.0,1913.0,2933.0,1616.0,3.6788,178800.0,INLAND +-121.49,38.63,6.0,12197.0,2617.0,5634.0,2329.0,3.7449,129300.0,INLAND +-121.5,38.62,8.0,16679.0,3457.0,7919.0,3329.0,3.7188,134500.0,INLAND +-121.5,38.61,5.0,1395.0,373.0,638.0,322.0,2.6745,225000.0,INLAND +-121.5,38.63,6.0,693.0,143.0,276.0,151.0,3.1944,117000.0,INLAND +-121.49,38.62,8.0,15309.0,2996.0,7463.0,2885.0,3.9143,129700.0,INLAND +-121.49,38.61,6.0,4391.0,974.0,1982.0,914.0,3.4291,105300.0,INLAND +-121.48,38.62,23.0,7709.0,1279.0,4147.0,1262.0,3.8272,96600.0,INLAND +-121.48,38.61,18.0,1511.0,315.0,1062.0,304.0,2.3438,89400.0,INLAND +-121.51,38.69,28.0,800.0,149.0,450.0,158.0,2.1029,108600.0,INLAND +-121.59,38.69,32.0,541.0,82.0,229.0,98.0,8.0379,383300.0,INLAND +-121.42,38.72,10.0,3054.0,528.0,1932.0,510.0,3.0903,91900.0,INLAND +-121.44,38.73,25.0,1287.0,224.0,727.0,236.0,4.7396,135500.0,INLAND +-121.47,38.72,26.0,1708.0,299.0,911.0,290.0,4.0227,99800.0,INLAND +-121.44,38.71,25.0,2336.0,406.0,1172.0,408.0,3.5129,101200.0,INLAND +-121.42,38.7,10.0,2562.0,460.0,1478.0,433.0,4.0625,96200.0,INLAND +-121.45,38.7,24.0,2159.0,369.0,1141.0,355.0,3.9853,90400.0,INLAND +-121.46,38.7,32.0,965.0,183.0,568.0,188.0,3.8611,93900.0,INLAND +-121.43,38.69,28.0,927.0,165.0,542.0,148.0,2.5,96200.0,INLAND +-121.44,38.68,19.0,2476.0,534.0,1355.0,463.0,2.0625,94400.0,INLAND +-121.42,38.68,32.0,2118.0,345.0,1019.0,338.0,3.725,112200.0,INLAND +-121.41,38.69,28.0,1601.0,308.0,848.0,305.0,3.6429,105200.0,INLAND +-121.44,38.69,24.0,3124.0,556.0,1512.0,555.0,3.1942,94900.0,INLAND +-121.45,38.69,32.0,2962.0,526.0,1542.0,521.0,2.2243,89200.0,INLAND +-121.46,38.68,35.0,1299.0,254.0,705.0,245.0,2.8333,103000.0,INLAND +-121.47,38.68,19.0,946.0,182.0,474.0,173.0,5.0155,97300.0,INLAND +-121.46,38.69,11.0,3335.0,658.0,1963.0,622.0,3.3125,96800.0,INLAND +-121.47,38.7,31.0,1007.0,181.0,563.0,185.0,3.625,91300.0,INLAND +-121.43,38.66,35.0,1814.0,367.0,1076.0,372.0,2.7179,81100.0,INLAND +-121.46,38.66,3.0,3438.0,603.0,1602.0,554.0,3.9914,120500.0,INLAND +-121.4,38.66,50.0,880.0,150.0,1148.0,148.0,2.5062,112500.0,INLAND +-121.37,38.69,29.0,2103.0,380.0,1124.0,387.0,3.0833,87000.0,INLAND +-121.37,38.68,34.0,1086.0,187.0,663.0,190.0,3.3074,84200.0,INLAND +-121.38,38.68,35.0,1643.0,298.0,831.0,305.0,4.0673,84200.0,INLAND +-121.37,38.68,36.0,1775.0,296.0,937.0,305.0,3.1786,83400.0,INLAND +-121.37,38.69,35.0,1851.0,327.0,1007.0,286.0,3.2361,84000.0,INLAND +-121.38,38.69,35.0,2943.0,554.0,1460.0,510.0,2.6713,84400.0,INLAND +-121.39,38.69,38.0,300.0,47.0,154.0,51.0,4.0909,108300.0,INLAND +-121.37,38.69,35.0,1093.0,192.0,590.0,190.0,2.7009,80200.0,INLAND +-121.37,38.68,29.0,3757.0,646.0,2022.0,611.0,3.5429,88200.0,INLAND +-121.37,38.68,35.0,1620.0,276.0,939.0,277.0,2.5542,72900.0,INLAND +-121.38,38.68,35.0,1565.0,290.0,861.0,277.0,2.4844,77000.0,INLAND +-121.38,38.68,40.0,67.0,17.0,50.0,32.0,1.7596,93800.0,INLAND +-121.37,38.67,36.0,1354.0,258.0,771.0,267.0,2.2723,78800.0,INLAND +-121.37,38.67,36.0,1786.0,338.0,974.0,319.0,2.555,72700.0,INLAND +-121.38,38.67,37.0,2176.0,460.0,1067.0,357.0,2.3958,78400.0,INLAND +-121.38,38.67,38.0,1001.0,228.0,597.0,226.0,2.2788,73400.0,INLAND +-121.39,38.67,35.0,562.0,174.0,240.0,106.0,0.9338,112500.0,INLAND +-121.37,38.7,18.0,3938.0,649.0,1861.0,606.0,3.6484,95000.0,INLAND +-121.38,38.7,25.0,3919.0,764.0,2203.0,783.0,2.2402,89500.0,INLAND +-121.39,38.69,30.0,2897.0,506.0,1508.0,478.0,3.865,88400.0,INLAND +-121.37,38.7,26.0,2230.0,410.0,1155.0,377.0,3.4911,88200.0,INLAND +-121.34,38.69,16.0,2686.0,516.0,1553.0,529.0,3.7857,112700.0,INLAND +-121.34,38.69,17.0,1968.0,364.0,996.0,331.0,3.7031,114300.0,INLAND +-121.35,38.68,20.0,7085.0,1222.0,3455.0,1229.0,4.3118,120000.0,INLAND +-121.35,38.68,18.0,7923.0,1558.0,3789.0,1473.0,3.5403,98600.0,INLAND +-121.35,38.72,2.0,21897.0,3513.0,8652.0,2873.0,4.5432,151300.0,INLAND +-121.38,38.71,7.0,4842.0,935.0,2857.0,907.0,3.9318,133000.0,INLAND +-121.4,38.71,15.0,4680.0,758.0,2626.0,729.0,3.8355,107000.0,INLAND +-121.36,38.69,13.0,6850.0,1400.0,4251.0,1421.0,3.6989,93300.0,INLAND +-121.35,38.7,5.0,14414.0,2979.0,7608.0,2832.0,3.5802,129600.0,INLAND +-121.36,38.67,17.0,2770.0,684.0,1471.0,624.0,2.3683,82500.0,INLAND +-121.36,38.67,5.0,5819.0,1507.0,3237.0,1356.0,2.2339,116600.0,INLAND +-121.37,38.66,9.0,3184.0,779.0,1929.0,769.0,2.3844,86000.0,INLAND +-121.36,38.66,22.0,2878.0,599.0,1362.0,541.0,2.7955,96500.0,INLAND +-121.37,38.66,17.0,4866.0,1056.0,2371.0,1030.0,2.4574,103300.0,INLAND +-121.38,38.66,17.0,3778.0,939.0,2393.0,862.0,1.8972,100500.0,INLAND +-121.38,38.65,34.0,825.0,173.0,355.0,130.0,3.1858,109500.0,INLAND +-121.39,38.64,33.0,1503.0,282.0,652.0,229.0,3.6937,99300.0,INLAND +-121.34,38.68,28.0,3379.0,552.0,1543.0,556.0,4.2743,124000.0,INLAND +-121.34,38.67,34.0,1503.0,264.0,731.0,285.0,4.0352,118500.0,INLAND +-121.34,38.67,35.0,643.0,117.0,331.0,134.0,3.0417,120700.0,INLAND +-121.34,38.66,16.0,3154.0,860.0,1837.0,793.0,1.9805,92900.0,INLAND +-121.35,38.66,8.0,3322.0,805.0,1694.0,774.0,2.7011,130700.0,INLAND +-121.34,38.66,17.0,1149.0,257.0,583.0,243.0,2.8092,137500.0,INLAND +-121.34,38.66,18.0,4164.0,963.0,2032.0,898.0,2.119,133100.0,INLAND +-121.35,38.66,24.0,3313.0,769.0,1631.0,681.0,2.5556,105700.0,INLAND +-121.36,38.66,14.0,756.0,141.0,424.0,155.0,3.6953,116100.0,INLAND +-121.37,38.64,27.0,1672.0,299.0,757.0,282.0,3.6786,159700.0,INLAND +-121.35,38.65,20.0,2498.0,546.0,1185.0,506.0,3.2243,107900.0,INLAND +-121.33,38.66,15.0,4371.0,908.0,1842.0,818.0,2.7797,105500.0,INLAND +-121.33,38.65,23.0,2446.0,523.0,1132.0,513.0,2.6266,198500.0,INLAND +-121.34,38.65,27.0,1595.0,246.0,610.0,253.0,4.6,199000.0,INLAND +-121.33,38.65,24.0,3533.0,741.0,1496.0,723.0,2.8106,183200.0,INLAND +-121.34,38.64,12.0,2772.0,578.0,1335.0,565.0,3.8068,161000.0,INLAND +-121.33,38.64,27.0,2203.0,493.0,1158.0,492.0,2.4342,119500.0,INLAND +-121.34,38.64,17.0,2761.0,501.0,1128.0,482.0,3.7562,139700.0,INLAND +-121.34,38.63,13.0,3033.0,540.0,1363.0,519.0,4.0036,161700.0,INLAND +-121.33,38.63,23.0,1947.0,409.0,866.0,400.0,2.7181,156800.0,INLAND +-121.33,38.62,19.0,1853.0,415.0,772.0,397.0,2.2574,135800.0,INLAND +-121.34,38.62,20.0,4021.0,864.0,1658.0,730.0,2.4537,153000.0,INLAND +-121.34,38.61,22.0,1778.0,408.0,875.0,375.0,2.6023,142200.0,INLAND +-121.34,38.61,11.0,1716.0,404.0,722.0,415.0,2.0926,166100.0,INLAND +-121.33,38.61,21.0,2453.0,518.0,1326.0,505.0,2.7079,148000.0,INLAND +-121.34,38.61,20.0,5801.0,1148.0,2586.0,1063.0,3.9063,162100.0,INLAND +-121.33,38.6,25.0,4260.0,607.0,1635.0,640.0,6.2817,288200.0,INLAND +-121.29,38.63,24.0,2868.0,527.0,1284.0,487.0,3.3182,213000.0,INLAND +-121.3,38.63,31.0,1817.0,372.0,992.0,339.0,3.0972,150000.0,INLAND +-121.32,38.63,20.0,7003.0,1409.0,3107.0,1315.0,3.0348,150500.0,INLAND +-121.31,38.62,31.0,3114.0,430.0,1121.0,456.0,6.244,240000.0,INLAND +-121.32,38.62,29.0,2430.0,448.0,1087.0,394.0,3.0864,177900.0,INLAND +-121.32,38.62,33.0,898.0,190.0,470.0,201.0,2.6897,148300.0,INLAND +-121.32,38.61,22.0,3902.0,845.0,1870.0,763.0,2.774,190200.0,INLAND +-121.31,38.61,17.0,992.0,151.0,316.0,159.0,6.6238,326700.0,INLAND +-121.3,38.64,20.0,5001.0,830.0,2330.0,830.0,4.0833,160000.0,INLAND +-121.31,38.64,19.0,5407.0,838.0,1927.0,804.0,4.6302,195400.0,INLAND +-121.32,38.64,19.0,8501.0,1558.0,3576.0,1467.0,3.6523,158500.0,INLAND +-121.31,38.66,27.0,1713.0,282.0,761.0,295.0,5.2081,136400.0,INLAND +-121.31,38.66,26.0,1604.0,245.0,751.0,267.0,4.7381,140500.0,INLAND +-121.32,38.66,26.0,1149.0,193.0,500.0,194.0,5.078,163400.0,INLAND +-121.32,38.66,21.0,1276.0,208.0,501.0,205.0,3.95,143600.0,INLAND +-121.32,38.65,23.0,2628.0,499.0,1210.0,453.0,3.0952,157700.0,INLAND +-121.31,38.65,21.0,2759.0,409.0,1053.0,374.0,5.5,165700.0,INLAND +-121.3,38.66,21.0,3824.0,634.0,1818.0,600.0,3.712,139000.0,INLAND +-121.3,38.66,28.0,3391.0,550.0,1546.0,553.0,4.2188,139200.0,INLAND +-121.3,38.65,26.0,3192.0,447.0,1132.0,418.0,4.5278,144300.0,INLAND +-121.3,38.65,36.0,1665.0,293.0,846.0,306.0,3.5852,121600.0,INLAND +-121.21,38.66,15.0,6940.0,1019.0,2829.0,990.0,5.4889,232300.0,INLAND +-121.21,38.65,14.0,3443.0,510.0,1413.0,505.0,5.6529,196000.0,INLAND +-121.24,38.64,13.0,4491.0,689.0,1657.0,667.0,5.259,249400.0,INLAND +-121.23,38.65,19.0,2926.0,476.0,1349.0,480.0,4.6437,212900.0,INLAND +-121.23,38.66,19.0,3243.0,546.0,1334.0,515.0,4.8088,169500.0,INLAND +-121.24,38.66,14.0,3335.0,440.0,1329.0,429.0,6.2082,250300.0,INLAND +-121.28,38.66,17.0,7741.0,1401.0,3153.0,1331.0,3.7869,216100.0,INLAND +-121.25,38.66,26.0,3670.0,556.0,1616.0,550.0,5.02,169600.0,INLAND +-121.26,38.66,19.0,3170.0,444.0,1344.0,452.0,6.1183,221600.0,INLAND +-121.27,38.66,19.0,1891.0,266.0,678.0,255.0,6.1872,188700.0,INLAND +-121.27,38.66,15.0,2642.0,520.0,1032.0,475.0,4.1382,189800.0,INLAND +-121.25,38.64,21.0,2764.0,363.0,902.0,360.0,5.6864,258700.0,INLAND +-121.26,38.65,17.0,2655.0,421.0,991.0,384.0,4.6484,270600.0,INLAND +-121.27,38.65,25.0,2787.0,601.0,1247.0,522.0,2.9016,159800.0,INLAND +-121.27,38.64,22.0,1597.0,280.0,657.0,273.0,4.3098,213500.0,INLAND +-121.26,38.64,40.0,1098.0,175.0,415.0,160.0,4.8375,217400.0,INLAND +-121.27,38.65,33.0,1984.0,289.0,842.0,276.0,5.2949,173300.0,INLAND +-121.29,38.65,27.0,2744.0,464.0,1340.0,452.0,3.8816,147300.0,INLAND +-121.28,38.64,24.0,3459.0,573.0,1336.0,544.0,4.8661,186200.0,INLAND +-121.28,38.63,36.0,120.0,16.0,30.0,14.0,10.2264,350000.0,INLAND +-121.28,38.64,19.0,3574.0,669.0,1373.0,643.0,3.6298,242100.0,INLAND +-121.28,38.71,8.0,4053.0,912.0,2033.0,897.0,2.8973,117100.0,INLAND +-121.28,38.7,14.0,5827.0,1246.0,2578.0,1038.0,3.0212,112900.0,INLAND +-121.28,38.71,35.0,3095.0,594.0,1550.0,576.0,3.575,113500.0,INLAND +-121.28,38.7,15.0,5828.0,1051.0,2868.0,1037.0,3.7813,143200.0,INLAND +-121.28,38.68,14.0,11442.0,2690.0,6068.0,2435.0,2.6016,121200.0,INLAND +-121.3,38.7,18.0,7334.0,1332.0,3339.0,1271.0,3.235,124700.0,INLAND +-121.3,38.69,21.0,6575.0,1105.0,3358.0,1098.0,4.0739,115400.0,INLAND +-121.32,38.69,11.0,13796.0,2372.0,6000.0,2250.0,3.8776,124500.0,INLAND +-121.33,38.68,13.0,5826.0,1411.0,2244.0,1219.0,1.9093,142900.0,INLAND +-121.3,38.71,17.0,5434.0,1106.0,2755.0,1047.0,2.8226,99900.0,INLAND +-121.29,38.71,32.0,1875.0,361.0,1027.0,343.0,3.5769,103800.0,INLAND +-121.3,38.72,15.0,2514.0,482.0,1166.0,503.0,2.2813,131900.0,INLAND +-121.31,38.72,11.0,2306.0,420.0,1308.0,418.0,3.9506,122200.0,INLAND +-121.32,38.71,14.0,4594.0,774.0,2474.0,782.0,4.5245,127500.0,INLAND +-121.31,38.71,18.0,3998.0,744.0,2071.0,660.0,4.3836,102000.0,INLAND +-121.32,38.7,17.0,3214.0,551.0,1879.0,562.0,4.3643,124900.0,INLAND +-121.32,38.7,16.0,2966.0,578.0,1365.0,480.0,3.2444,118400.0,INLAND +-121.32,38.7,16.0,3592.0,642.0,1740.0,629.0,3.0703,126000.0,INLAND +-121.33,38.7,15.0,2226.0,421.0,1004.0,417.0,2.7868,117800.0,INLAND +-121.33,38.69,15.0,3137.0,509.0,1635.0,544.0,4.6923,122700.0,INLAND +-121.32,38.68,25.0,1252.0,207.0,587.0,217.0,3.5893,146400.0,INLAND +-121.32,38.67,10.0,3908.0,890.0,1898.0,798.0,2.8426,130600.0,INLAND +-121.32,38.67,21.0,3455.0,706.0,1605.0,704.0,3.1382,91600.0,INLAND +-121.31,38.67,26.0,1387.0,226.0,807.0,244.0,4.1563,135700.0,INLAND +-121.33,38.67,17.0,2683.0,704.0,1410.0,659.0,1.962,130200.0,INLAND +-121.33,38.66,17.0,2767.0,584.0,1275.0,568.0,2.5909,125400.0,INLAND +-121.31,38.67,27.0,1998.0,353.0,970.0,343.0,4.8224,115500.0,INLAND +-121.32,38.67,31.0,2532.0,479.0,1396.0,467.0,4.0417,114500.0,INLAND +-121.29,38.68,12.0,5098.0,1094.0,2029.0,1065.0,3.5444,132500.0,INLAND +-121.3,38.69,13.0,2135.0,429.0,779.0,432.0,3.6995,134900.0,INLAND +-121.31,38.68,16.0,5179.0,1271.0,2181.0,1151.0,2.1009,82500.0,INLAND +-121.31,38.68,22.0,1194.0,207.0,545.0,223.0,3.8603,134300.0,INLAND +-121.3,38.67,15.0,4018.0,850.0,2070.0,814.0,3.0733,119800.0,INLAND +-121.3,38.68,19.0,2655.0,438.0,1253.0,454.0,5.2817,140600.0,INLAND +-121.3,38.67,20.0,1234.0,208.0,649.0,211.0,4.8523,143000.0,INLAND +-121.3,38.66,32.0,2915.0,492.0,1292.0,454.0,3.3188,117100.0,INLAND +-121.3,38.67,23.0,2145.0,340.0,1022.0,349.0,4.2037,125400.0,INLAND +-121.27,38.7,16.0,3747.0,586.0,1817.0,590.0,4.6488,145300.0,INLAND +-121.27,38.69,16.0,3389.0,597.0,1674.0,568.0,4.4489,145600.0,INLAND +-121.26,38.68,4.0,3080.0,827.0,1195.0,683.0,2.7477,133000.0,INLAND +-121.24,38.7,13.0,3243.0,488.0,1585.0,480.0,5.7133,166800.0,INLAND +-121.25,38.7,16.0,3262.0,533.0,1794.0,543.0,4.2464,144400.0,INLAND +-121.26,38.69,17.0,3917.0,638.0,1809.0,564.0,5.2586,137000.0,INLAND +-121.25,38.69,17.0,3050.0,481.0,1490.0,489.0,4.5562,134500.0,INLAND +-121.25,38.69,24.0,1014.0,185.0,606.0,194.0,4.1607,112800.0,INLAND +-121.24,38.68,20.0,1402.0,236.0,676.0,236.0,3.7426,135500.0,INLAND +-121.25,38.68,15.0,1497.0,243.0,730.0,242.0,4.9688,135600.0,INLAND +-121.26,38.68,13.0,4256.0,619.0,1948.0,622.0,5.2051,167400.0,INLAND +-121.25,38.68,13.0,503.0,70.0,267.0,77.0,6.1943,276100.0,INLAND +-121.25,38.67,14.0,6155.0,1034.0,2407.0,941.0,4.2262,244300.0,INLAND +-121.26,38.67,18.0,1830.0,313.0,905.0,361.0,4.2273,141800.0,INLAND +-121.27,38.67,16.0,3185.0,886.0,1550.0,802.0,2.5199,149000.0,INLAND +-121.26,38.66,8.0,1145.0,241.0,447.0,216.0,4.0781,124300.0,INLAND +-121.27,38.67,15.0,2116.0,524.0,866.0,519.0,2.7388,111600.0,INLAND +-121.27,38.67,15.0,1701.0,346.0,723.0,352.0,3.8906,128700.0,INLAND +-121.28,38.68,16.0,3467.0,615.0,1478.0,601.0,3.75,147300.0,INLAND +-121.28,38.67,23.0,1727.0,264.0,833.0,258.0,5.4797,160000.0,INLAND +-121.28,38.67,29.0,1087.0,174.0,430.0,174.0,4.3625,158800.0,INLAND +-121.29,38.68,20.0,1881.0,378.0,921.0,360.0,1.8589,144000.0,INLAND +-121.29,38.67,20.0,1992.0,363.0,889.0,346.0,3.6516,130500.0,INLAND +-121.25,38.72,15.0,6838.0,941.0,3166.0,926.0,5.2177,162700.0,INLAND +-121.27,38.71,16.0,4082.0,666.0,1912.0,652.0,4.4609,142900.0,INLAND +-121.25,38.71,14.0,3713.0,637.0,1845.0,635.0,4.3009,143400.0,INLAND +-121.26,38.7,9.0,7812.0,1348.0,3275.0,1178.0,4.3826,146600.0,INLAND +-121.17,38.69,5.0,7138.0,1227.0,2623.0,1139.0,5.6902,243200.0,INLAND +-121.19,38.71,11.0,4415.0,,1520.0,627.0,3.2321,390800.0,INLAND +-121.18,38.69,7.0,7104.0,970.0,2772.0,920.0,6.3528,274500.0,INLAND +-121.2,38.7,28.0,2970.0,471.0,1379.0,463.0,4.3214,131700.0,INLAND +-121.2,38.69,26.0,3077.0,607.0,1603.0,595.0,2.7174,137500.0,INLAND +-121.22,38.68,10.0,6262.0,1278.0,2954.0,1169.0,3.4506,139000.0,INLAND +-121.22,38.71,23.0,1843.0,273.0,818.0,276.0,4.4695,214700.0,INLAND +-121.23,38.71,18.0,4947.0,714.0,2227.0,675.0,4.8542,170500.0,INLAND +-121.23,38.69,19.0,5268.0,849.0,2357.0,849.0,3.9226,148700.0,INLAND +-121.23,38.67,27.0,5266.0,971.0,2432.0,948.0,3.8954,133000.0,INLAND +-121.24,38.67,28.0,3558.0,589.0,1742.0,581.0,4.0182,131700.0,INLAND +-121.2,38.68,9.0,2200.0,422.0,938.0,369.0,3.4896,143800.0,INLAND +-121.21,38.67,11.0,5500.0,956.0,2827.0,946.0,4.1071,145800.0,INLAND +-121.22,38.67,20.0,1412.0,226.0,700.0,227.0,4.05,130700.0,INLAND +-121.21,38.67,19.0,2987.0,626.0,1610.0,605.0,3.0533,112100.0,INLAND +-121.19,38.67,16.0,1754.0,284.0,773.0,277.0,4.817,147000.0,INLAND +-121.2,38.67,26.0,1546.0,287.0,773.0,299.0,2.9803,115400.0,INLAND +-121.2,38.67,10.0,3875.0,668.0,1632.0,593.0,4.6902,171000.0,INLAND +-121.19,38.66,26.0,1937.0,286.0,769.0,274.0,6.1185,179200.0,INLAND +-121.2,38.66,17.0,1605.0,217.0,732.0,241.0,5.47,204800.0,INLAND +-121.15,38.69,52.0,240.0,44.0,6675.0,29.0,6.1359,225000.0,INLAND +-121.17,38.71,15.0,3084.0,557.0,1040.0,562.0,2.5183,293300.0,INLAND +-121.17,38.68,37.0,1252.0,267.0,686.0,256.0,3.0,121900.0,INLAND +-121.18,38.67,42.0,2101.0,480.0,945.0,426.0,2.3333,116000.0,INLAND +-121.16,38.67,21.0,6198.0,1223.0,2827.0,1179.0,3.7796,159000.0,INLAND +-121.15,38.68,6.0,9798.0,1551.0,4583.0,1494.0,5.0159,189600.0,INLAND +-121.16,38.68,21.0,3517.0,667.0,1687.0,655.0,3.1161,131600.0,INLAND +-121.13,38.66,2.0,12360.0,1747.0,4438.0,1470.0,6.2503,222500.0,INLAND +-121.13,38.55,8.0,530.0,109.0,398.0,96.0,4.2031,212500.0,INLAND +-121.06,38.51,6.0,6873.0,959.0,2354.0,931.0,6.8869,263100.0,INLAND +-121.13,38.47,16.0,2574.0,441.0,1041.0,428.0,3.6645,203400.0,INLAND +-121.24,38.63,4.0,11021.0,1565.0,3857.0,1494.0,7.2582,273200.0,INLAND +-121.22,38.58,25.0,394.0,94.0,155.0,83.0,2.233,55000.0,INLAND +-121.28,38.55,35.0,7088.0,1279.0,4885.0,1272.0,2.6981,112500.0,INLAND +-121.31,38.59,35.0,3295.0,560.0,1454.0,536.0,3.1711,101900.0,INLAND +-121.32,38.59,21.0,9774.0,1777.0,4674.0,1712.0,3.6817,136100.0,INLAND +-121.32,38.59,24.0,4378.0,910.0,2149.0,812.0,2.5035,123700.0,INLAND +-121.29,38.61,17.0,13553.0,2474.0,6544.0,2359.0,3.9727,132700.0,INLAND +-121.3,38.61,25.0,2707.0,464.0,1423.0,490.0,4.3235,116900.0,INLAND +-121.3,38.6,32.0,9534.0,1819.0,4951.0,1710.0,3.3926,103400.0,INLAND +-121.27,38.62,13.0,2321.0,539.0,1066.0,497.0,2.7652,95600.0,INLAND +-121.28,38.61,22.0,2938.0,619.0,1501.0,561.0,2.7356,96100.0,INLAND +-121.28,38.61,23.0,2547.0,504.0,1235.0,469.0,2.4722,103300.0,INLAND +-121.29,38.61,26.0,1814.0,299.0,963.0,317.0,4.4519,110500.0,INLAND +-121.27,38.61,17.0,6663.0,1369.0,2840.0,1299.0,2.9452,115600.0,INLAND +-121.28,38.6,25.0,1122.0,198.0,564.0,213.0,3.1654,111600.0,INLAND +-121.28,38.6,17.0,1671.0,378.0,848.0,351.0,3.1194,112500.0,INLAND +-121.29,38.6,29.0,1276.0,225.0,600.0,223.0,4.0938,109100.0,INLAND +-121.32,38.57,15.0,3369.0,499.0,1733.0,470.0,5.31,127500.0,INLAND +-121.33,38.56,17.0,3608.0,682.0,1694.0,666.0,3.311,109400.0,INLAND +-121.32,38.57,25.0,692.0,146.0,504.0,167.0,3.6897,101100.0,INLAND +-121.32,38.56,18.0,1169.0,186.0,614.0,192.0,4.5766,108700.0,INLAND +-121.32,38.54,13.0,4715.0,1090.0,2420.0,1059.0,2.9693,104400.0,INLAND +-121.28,38.53,18.0,224.0,38.0,95.0,41.0,3.1042,165000.0,INLAND +-121.3,38.58,19.0,2653.0,680.0,1419.0,579.0,2.3787,91300.0,INLAND +-121.3,38.58,16.0,1537.0,,1125.0,375.0,2.6471,90700.0,INLAND +-121.31,38.58,10.0,2421.0,580.0,962.0,497.0,2.5035,112500.0,INLAND +-121.31,38.57,9.0,2748.0,521.0,1663.0,565.0,3.5192,113300.0,INLAND +-121.31,38.57,22.0,1229.0,253.0,733.0,250.0,2.5,101600.0,INLAND +-121.33,38.57,17.0,1621.0,350.0,706.0,338.0,2.3684,150000.0,INLAND +-121.28,38.59,3.0,4188.0,1136.0,2081.0,995.0,3.0481,92500.0,INLAND +-121.29,38.59,19.0,2460.0,470.0,1346.0,480.0,3.6563,95600.0,INLAND +-121.3,38.59,25.0,3002.0,718.0,1660.0,613.0,2.1116,89600.0,INLAND +-121.3,38.58,29.0,2748.0,563.0,1619.0,525.0,2.8966,92400.0,INLAND +-121.34,38.56,12.0,2975.0,628.0,1440.0,593.0,2.9896,118600.0,INLAND +-121.34,38.55,11.0,2838.0,498.0,1701.0,504.0,4.1447,114000.0,INLAND +-121.35,38.54,12.0,16239.0,3358.0,8656.0,3234.0,3.5691,116300.0,INLAND +-121.37,38.56,19.0,6308.0,1167.0,3012.0,1112.0,2.9464,113500.0,INLAND +-121.37,38.57,16.0,3895.0,896.0,1762.0,855.0,2.6635,135800.0,INLAND +-121.37,38.56,18.0,2129.0,363.0,815.0,347.0,2.7679,118000.0,INLAND +-121.36,38.57,26.0,1793.0,244.0,653.0,235.0,5.6485,129500.0,INLAND +-121.35,38.56,16.0,2629.0,491.0,1265.0,485.0,4.5066,140200.0,INLAND +-121.34,38.58,17.0,1605.0,258.0,748.0,262.0,5.0917,134100.0,INLAND +-121.34,38.57,14.0,5737.0,1008.0,2731.0,983.0,4.4602,134500.0,INLAND +-121.35,38.55,18.0,4481.0,780.0,2211.0,775.0,3.9934,123300.0,INLAND +-121.35,38.55,22.0,2607.0,411.0,1216.0,407.0,5.0427,126900.0,INLAND +-121.36,38.55,33.0,1191.0,198.0,554.0,191.0,2.8021,118800.0,INLAND +-121.35,38.56,16.0,2278.0,370.0,1203.0,371.0,5.0622,132400.0,INLAND +-121.36,38.56,17.0,6225.0,938.0,3064.0,947.0,5.2881,138000.0,INLAND +-121.37,38.55,21.0,2713.0,432.0,1287.0,440.0,4.5815,125500.0,INLAND +-121.36,38.56,20.0,1232.0,332.0,667.0,288.0,1.8288,32500.0,INLAND +-121.37,38.56,27.0,1827.0,509.0,852.0,450.0,2.0901,52500.0,INLAND +-121.3,38.51,19.0,822.0,134.0,457.0,133.0,4.15,157500.0,INLAND +-121.35,38.51,29.0,2337.0,391.0,1054.0,352.0,4.2206,157700.0,INLAND +-121.4,38.47,4.0,20982.0,3392.0,10329.0,3086.0,4.3658,130600.0,INLAND +-121.38,38.47,4.0,14418.0,2282.0,6578.0,2140.0,4.5604,145900.0,INLAND +-121.39,38.43,3.0,2696.0,384.0,990.0,316.0,5.4445,237600.0,INLAND +-121.27,38.44,19.0,2780.0,414.0,1320.0,404.0,5.8831,209900.0,INLAND +-121.35,38.46,2.0,6992.0,1132.0,2816.0,984.0,4.3879,144400.0,INLAND +-121.34,38.44,14.0,3205.0,465.0,1439.0,456.0,5.7452,240900.0,INLAND +-121.32,38.41,17.0,4401.0,655.0,1970.0,639.0,5.8239,247500.0,INLAND +-121.36,38.42,6.0,3254.0,465.0,1168.0,345.0,5.1811,188400.0,INLAND +-121.37,38.41,14.0,3727.0,685.0,1741.0,646.0,3.5625,125700.0,INLAND +-121.37,38.42,18.0,2643.0,502.0,1755.0,541.0,3.3281,91200.0,INLAND +-121.38,38.41,7.0,6091.0,921.0,2916.0,886.0,4.7557,150400.0,INLAND +-121.38,38.41,10.0,3425.0,629.0,1538.0,587.0,4.45,138700.0,INLAND +-121.38,38.4,15.0,4155.0,637.0,1722.0,616.0,4.8831,154400.0,INLAND +-121.37,38.39,15.0,1883.0,254.0,893.0,256.0,6.2575,143500.0,INLAND +-121.35,38.4,11.0,2322.0,459.0,1373.0,424.0,3.175,94400.0,INLAND +-121.36,38.4,18.0,4813.0,849.0,2333.0,843.0,4.175,144400.0,INLAND +-121.36,38.39,10.0,5121.0,763.0,2568.0,758.0,5.2447,148100.0,INLAND +-121.13,38.37,10.0,1034.0,153.0,478.0,155.0,7.0326,241100.0,INLAND +-121.2,38.36,14.0,2634.0,463.0,1402.0,432.0,3.8897,175700.0,INLAND +-121.22,38.4,14.0,2655.0,441.0,1277.0,422.0,4.6989,213800.0,INLAND +-121.22,38.43,20.0,2054.0,339.0,934.0,336.0,4.5368,219300.0,INLAND +-121.29,38.36,17.0,2193.0,386.0,1148.0,372.0,4.5272,191700.0,INLAND +-121.27,38.31,17.0,1144.0,202.0,626.0,178.0,4.4107,151600.0,INLAND +-121.1,38.33,14.0,1357.0,247.0,695.0,224.0,4.1974,157800.0,INLAND +-121.2,38.28,20.0,1732.0,307.0,999.0,305.0,3.9808,160200.0,INLAND +-121.26,38.27,20.0,1314.0,229.0,712.0,219.0,4.4125,144600.0,INLAND +-121.29,38.28,11.0,1554.0,260.0,793.0,233.0,4.8073,156700.0,INLAND +-121.35,38.28,17.0,2756.0,557.0,1986.0,530.0,3.2234,82000.0,INLAND +-121.33,38.28,14.0,980.0,171.0,659.0,183.0,4.4306,170100.0,INLAND +-121.31,38.28,16.0,1708.0,391.0,687.0,378.0,1.9485,155400.0,INLAND +-121.3,38.26,19.0,1403.0,276.0,901.0,290.0,3.215,104600.0,INLAND +-121.31,38.26,22.0,1768.0,396.0,1005.0,420.0,1.8846,88300.0,INLAND +-121.32,38.26,4.0,6125.0,1063.0,3077.0,953.0,4.1179,134600.0,INLAND +-121.3,38.25,27.0,2475.0,548.0,1703.0,517.0,2.5727,86100.0,INLAND +-121.48,38.46,8.0,10505.0,1777.0,6002.0,1694.0,4.0516,121200.0,INLAND +-121.42,38.47,11.0,5665.0,1507.0,3422.0,1299.0,2.3343,97800.0,INLAND +-121.43,38.46,18.0,1378.0,235.0,818.0,262.0,4.0625,100300.0,INLAND +-121.43,38.47,21.0,1787.0,291.0,988.0,301.0,4.35,96200.0,INLAND +-121.44,38.47,16.0,1215.0,223.0,787.0,233.0,4.1597,95900.0,INLAND +-121.44,38.47,5.0,5666.0,1178.0,3139.0,1131.0,3.3608,108900.0,INLAND +-121.44,38.46,10.0,4446.0,897.0,2499.0,884.0,3.5461,103600.0,INLAND +-121.44,38.43,3.0,39320.0,6210.0,16305.0,5358.0,4.9516,153700.0,INLAND +-121.41,38.34,24.0,1605.0,277.0,1966.0,250.0,3.0833,162500.0,INLAND +-121.45,38.37,32.0,1441.0,261.0,629.0,249.0,4.4519,137500.0,INLAND +-121.5,38.34,36.0,1212.0,255.0,569.0,256.0,2.0048,72900.0,INLAND +-121.54,38.29,47.0,1396.0,254.0,630.0,218.0,2.8616,92500.0,INLAND +-121.56,38.26,43.0,1906.0,327.0,996.0,314.0,2.9744,136800.0,INLAND +-121.51,38.26,52.0,910.0,212.0,429.0,212.0,1.6458,52800.0,INLAND +-121.57,38.19,36.0,1395.0,264.0,700.0,244.0,2.4353,162500.0,INLAND +-121.7,38.1,19.0,4896.0,1083.0,2150.0,905.0,3.3398,89700.0,INLAND +-121.29,36.9,17.0,3610.0,593.0,1734.0,559.0,5.8324,374200.0,INLAND +-121.37,36.89,21.0,2471.0,473.0,1753.0,451.0,4.025,293800.0,INLAND +-121.47,36.92,27.0,2049.0,417.0,1230.0,336.0,4.6477,265900.0,INLAND +-121.53,36.85,23.0,3359.0,725.0,1862.0,651.0,2.6719,193600.0,INLAND +-121.51,36.86,36.0,1019.0,168.0,602.0,169.0,2.625,210000.0,INLAND +-121.6,36.88,21.0,3416.0,624.0,1862.0,595.0,4.7813,241500.0,<1H OCEAN +-121.5,36.81,20.0,1345.0,230.0,731.0,217.0,4.2333,363300.0,INLAND +-121.45,36.86,11.0,1613.0,335.0,1617.0,342.0,3.1375,146200.0,INLAND +-121.42,36.86,41.0,440.0,106.0,389.0,94.0,2.6818,225000.0,INLAND +-121.41,36.85,11.0,1708.0,394.0,1474.0,372.0,2.8839,145900.0,INLAND +-121.4,36.85,50.0,2666.0,613.0,1768.0,555.0,2.6598,157300.0,INLAND +-121.4,36.84,52.0,1860.0,400.0,1215.0,367.0,2.9554,136500.0,INLAND +-121.4,36.84,40.0,2352.0,536.0,1430.0,535.0,3.0912,155300.0,INLAND +-121.41,36.84,23.0,1771.0,356.0,1105.0,338.0,3.7049,192200.0,INLAND +-121.4,36.86,36.0,1256.0,270.0,910.0,255.0,1.9405,145400.0,INLAND +-121.38,36.85,13.0,4115.0,782.0,2903.0,747.0,3.7316,192400.0,INLAND +-121.38,36.84,6.0,3769.0,669.0,2061.0,648.0,4.1875,217600.0,INLAND +-121.37,36.84,11.0,1996.0,382.0,1023.0,358.0,3.5714,243000.0,INLAND +-121.38,36.84,17.0,2625.0,512.0,1487.0,481.0,3.6354,221200.0,INLAND +-121.37,36.83,14.0,3658.0,612.0,1951.0,600.0,4.76,216000.0,INLAND +-121.4,36.83,11.0,3701.0,739.0,1749.0,654.0,3.067,207900.0,INLAND +-121.44,36.84,7.0,1644.0,338.0,1143.0,331.0,4.005,180400.0,INLAND +-121.42,36.85,7.0,1626.0,325.0,677.0,304.0,2.3125,170800.0,INLAND +-121.32,36.79,30.0,516.0,90.0,288.0,95.0,3.6333,202500.0,INLAND +-121.36,36.81,7.0,4609.0,741.0,1660.0,720.0,5.0871,290500.0,INLAND +-121.34,36.76,15.0,2638.0,429.0,1289.0,357.0,4.1528,336800.0,INLAND +-121.06,36.72,23.0,395.0,70.0,166.0,52.0,2.2132,100000.0,INLAND +-120.95,36.47,52.0,1691.0,301.0,618.0,239.0,3.2292,225000.0,<1H OCEAN +-117.75,34.01,4.0,22128.0,3522.0,10450.0,3258.0,6.1287,289600.0,<1H OCEAN +-117.78,33.97,2.0,556.0,63.0,179.0,54.0,8.4411,500001.0,<1H OCEAN +-117.72,33.99,14.0,5622.0,861.0,3108.0,821.0,5.7763,206700.0,INLAND +-117.76,33.98,3.0,9662.0,1385.0,2497.0,856.0,6.7172,292400.0,<1H OCEAN +-117.74,33.97,4.0,9755.0,1748.0,4662.0,1583.0,5.6501,254900.0,<1H OCEAN +-117.72,33.97,16.0,13290.0,2062.0,6931.0,2023.0,5.228,187800.0,<1H OCEAN +-117.71,33.97,10.0,10856.0,2278.0,6474.0,2199.0,3.851,137200.0,INLAND +-117.7,33.92,4.0,8301.0,1333.0,3941.0,1236.0,6.2141,252200.0,<1H OCEAN +-117.75,33.95,13.0,984.0,127.0,364.0,119.0,7.5839,426900.0,<1H OCEAN +-117.76,33.94,40.0,1092.0,213.0,457.0,190.0,5.1165,184200.0,<1H OCEAN +-117.69,34.09,28.0,1437.0,295.0,724.0,262.0,2.725,140200.0,INLAND +-117.7,34.08,10.0,1979.0,454.0,1117.0,389.0,3.7802,107300.0,INLAND +-117.7,34.09,25.0,1719.0,331.0,1098.0,324.0,3.625,121800.0,INLAND +-117.71,34.08,29.0,1276.0,283.0,1216.0,316.0,2.5972,134300.0,INLAND +-117.71,34.07,31.0,1840.0,380.0,1187.0,357.0,3.8875,129200.0,INLAND +-117.69,34.08,30.0,4255.0,773.0,2129.0,730.0,4.5185,142500.0,INLAND +-117.69,34.07,35.0,3222.0,559.0,1970.0,550.0,3.7083,131000.0,INLAND +-117.69,34.07,34.0,4055.0,739.0,2470.0,753.0,3.8586,136000.0,INLAND +-117.69,34.08,14.0,4136.0,886.0,2026.0,788.0,3.2344,128200.0,INLAND +-117.71,34.07,24.0,1948.0,362.0,1286.0,364.0,3.6,139300.0,INLAND +-117.7,34.08,33.0,4674.0,791.0,2769.0,784.0,4.1448,137300.0,INLAND +-117.7,34.07,33.0,1552.0,288.0,1326.0,303.0,3.7969,128400.0,INLAND +-117.69,34.06,29.0,873.0,226.0,649.0,198.0,2.7986,114400.0,INLAND +-117.69,34.06,25.0,1881.0,433.0,1337.0,417.0,2.5536,144000.0,INLAND +-117.7,34.06,25.0,2054.0,609.0,2271.0,564.0,2.3049,150000.0,INLAND +-117.7,34.06,7.0,732.0,145.0,431.0,132.0,2.9107,95300.0,INLAND +-117.71,34.06,27.0,2127.0,628.0,1970.0,534.0,1.4722,91300.0,INLAND +-117.68,34.05,25.0,1859.0,463.0,1070.0,374.0,2.5395,187500.0,INLAND +-117.69,34.05,10.0,1875.0,366.0,1055.0,363.0,4.3264,128900.0,INLAND +-117.7,34.05,24.0,2834.0,470.0,1815.0,471.0,4.7357,162500.0,INLAND +-117.71,34.06,16.0,1458.0,295.0,912.0,331.0,3.625,160400.0,INLAND +-117.71,34.05,20.0,2281.0,444.0,1545.0,481.0,2.5735,130500.0,INLAND +-117.72,34.05,31.0,2220.0,526.0,1662.0,472.0,2.7321,104300.0,INLAND +-117.72,34.05,8.0,1841.0,409.0,1243.0,394.0,4.0614,107000.0,INLAND +-117.69,34.04,5.0,4459.0,896.0,2028.0,881.0,4.0096,182600.0,INLAND +-117.7,34.04,13.0,5301.0,1025.0,2870.0,984.0,3.5954,163000.0,INLAND +-117.71,34.04,20.0,1950.0,310.0,1054.0,312.0,4.625,222100.0,INLAND +-117.71,34.04,17.0,4098.0,733.0,1859.0,713.0,2.9811,231800.0,INLAND +-117.72,34.03,17.0,2902.0,476.0,1652.0,479.0,5.6029,161800.0,INLAND +-117.72,34.02,17.0,1781.0,262.0,860.0,256.0,6.5958,236800.0,INLAND +-117.73,34.01,36.0,2340.0,392.0,1213.0,388.0,4.125,213000.0,INLAND +-117.72,34.0,15.0,4363.0,690.0,2410.0,666.0,5.4824,179700.0,INLAND +-117.68,34.0,5.0,3761.0,580.0,2335.0,648.0,5.7338,225400.0,INLAND +-117.69,34.0,28.0,707.0,154.0,561.0,129.0,2.5781,111600.0,INLAND +-117.7,34.0,15.0,4905.0,711.0,2711.0,762.0,5.7021,193100.0,INLAND +-117.71,34.02,17.0,12689.0,2426.0,7343.0,2230.0,3.6361,157700.0,INLAND +-117.71,34.03,11.0,3467.0,749.0,2163.0,676.0,3.4267,164400.0,INLAND +-117.67,34.03,20.0,8561.0,1411.0,4861.0,1450.0,4.7056,165500.0,INLAND +-117.68,34.03,16.0,2859.0,668.0,1946.0,591.0,3.0396,124300.0,INLAND +-117.69,34.03,20.0,6374.0,1412.0,3690.0,1350.0,3.4184,162500.0,INLAND +-117.68,34.01,20.0,7326.0,1555.0,5718.0,1538.0,3.2073,123500.0,INLAND +-117.69,34.01,30.0,2598.0,573.0,2170.0,518.0,2.3,95600.0,INLAND +-117.68,34.15,24.0,1033.0,189.0,486.0,204.0,4.1719,213500.0,INLAND +-117.66,34.15,25.0,3430.0,485.0,1284.0,438.0,8.5282,360100.0,INLAND +-117.64,34.15,16.0,2896.0,404.0,1165.0,379.0,6.4559,392900.0,INLAND +-117.68,34.15,4.0,4082.0,578.0,1996.0,580.0,6.7813,286300.0,INLAND +-117.68,34.14,4.0,4791.0,695.0,1871.0,659.0,6.9532,277000.0,INLAND +-117.66,34.14,11.0,3628.0,469.0,1488.0,463.0,7.0844,325000.0,INLAND +-117.66,34.14,8.0,1692.0,253.0,857.0,251.0,6.9418,310500.0,INLAND +-117.66,34.15,20.0,2524.0,311.0,965.0,285.0,8.0103,395500.0,INLAND +-117.65,34.14,16.0,2196.0,287.0,949.0,289.0,8.6573,354000.0,INLAND +-117.69,34.13,8.0,2915.0,371.0,1271.0,354.0,7.9627,345400.0,INLAND +-117.67,34.13,10.0,2846.0,362.0,1221.0,355.0,7.7234,304100.0,INLAND +-117.66,34.13,17.0,3229.0,405.0,1289.0,407.0,6.3842,307100.0,INLAND +-117.67,34.12,15.0,3162.0,495.0,1145.0,473.0,5.3525,191700.0,INLAND +-117.66,34.13,19.0,3995.0,554.0,1523.0,509.0,6.075,254100.0,INLAND +-117.66,34.12,22.0,2272.0,278.0,933.0,305.0,8.8204,390500.0,INLAND +-117.65,34.14,9.0,3877.0,490.0,1815.0,490.0,8.4839,406700.0,INLAND +-117.65,34.13,24.0,2121.0,296.0,913.0,302.0,5.9328,255900.0,INLAND +-117.65,34.12,17.0,3006.0,427.0,1291.0,406.0,6.2083,242700.0,INLAND +-117.63,34.12,4.0,4323.0,775.0,1479.0,663.0,6.0758,226800.0,INLAND +-117.64,34.12,18.0,3605.0,534.0,1682.0,480.0,5.8407,202900.0,INLAND +-117.65,34.11,29.0,2927.0,634.0,1710.0,623.0,3.6219,176600.0,INLAND +-117.64,34.11,16.0,2129.0,420.0,932.0,379.0,2.5868,146900.0,INLAND +-117.63,34.11,30.0,2674.0,428.0,1404.0,456.0,4.2969,165600.0,INLAND +-117.69,34.11,16.0,2427.0,522.0,794.0,491.0,2.6929,119300.0,INLAND +-117.68,34.12,16.0,2181.0,321.0,1133.0,350.0,5.7214,259400.0,INLAND +-117.68,34.11,16.0,3190.0,471.0,1414.0,464.0,5.5292,208600.0,INLAND +-117.66,34.12,16.0,3853.0,541.0,1726.0,497.0,6.1195,251100.0,INLAND +-117.66,34.11,19.0,3445.0,661.0,1635.0,580.0,5.0681,230500.0,INLAND +-117.65,34.12,27.0,2298.0,340.0,1071.0,369.0,6.5587,239000.0,INLAND +-117.65,34.11,28.0,2788.0,370.0,1140.0,385.0,5.3368,233500.0,INLAND +-117.69,34.1,17.0,3759.0,1035.0,1722.0,847.0,2.6074,137500.0,INLAND +-117.68,34.1,11.0,7392.0,1796.0,3841.0,1621.0,2.8326,163000.0,INLAND +-117.67,34.1,28.0,1263.0,248.0,601.0,219.0,3.875,174000.0,INLAND +-117.67,34.1,19.0,2969.0,605.0,1326.0,573.0,4.3438,155700.0,INLAND +-117.65,34.1,19.0,1688.0,365.0,622.0,322.0,3.6,136400.0,INLAND +-117.66,34.1,37.0,1971.0,345.0,939.0,358.0,3.4634,145300.0,INLAND +-117.66,34.1,26.0,1855.0,553.0,1109.0,536.0,2.2429,150000.0,INLAND +-117.65,34.1,30.0,1461.0,341.0,1014.0,345.0,2.4667,106000.0,INLAND +-117.68,34.09,22.0,1547.0,334.0,773.0,316.0,2.9812,148800.0,INLAND +-117.67,34.09,17.0,4418.0,1256.0,2417.0,1094.0,2.7266,101000.0,INLAND +-117.66,34.09,26.0,1151.0,200.0,593.0,188.0,3.6667,166300.0,INLAND +-117.66,34.09,20.0,2462.0,496.0,1117.0,458.0,3.2321,162500.0,INLAND +-117.66,34.09,23.0,1426.0,313.0,954.0,319.0,3.0357,151500.0,INLAND +-117.65,34.09,33.0,2446.0,396.0,1209.0,412.0,4.3958,145600.0,INLAND +-117.62,34.13,20.0,3216.0,516.0,1655.0,524.0,5.1261,158800.0,INLAND +-117.62,34.11,17.0,1869.0,311.0,831.0,262.0,6.148,243900.0,INLAND +-117.62,34.11,31.0,2561.0,414.0,1204.0,435.0,4.4637,192800.0,INLAND +-117.63,34.1,15.0,4799.0,1209.0,2554.0,1057.0,2.6582,122800.0,INLAND +-117.63,34.09,8.0,3557.0,890.0,2251.0,765.0,2.6818,114100.0,INLAND +-117.64,34.09,34.0,2839.0,659.0,1822.0,631.0,3.05,121300.0,INLAND +-117.65,34.09,46.0,1214.0,281.0,701.0,294.0,2.7083,116300.0,INLAND +-117.65,34.1,44.0,1526.0,337.0,831.0,326.0,3.0284,115800.0,INLAND +-117.65,34.1,44.0,2808.0,585.0,1444.0,550.0,2.7159,139300.0,INLAND +-117.68,34.08,21.0,5662.0,1185.0,3067.0,1055.0,3.3482,137300.0,INLAND +-117.68,34.08,28.0,2459.0,492.0,1230.0,498.0,3.0978,137200.0,INLAND +-117.67,34.07,29.0,1840.0,388.0,1278.0,368.0,3.5036,123400.0,INLAND +-117.68,34.07,24.0,2626.0,692.0,2204.0,647.0,1.7806,135000.0,INLAND +-117.68,34.07,32.0,1775.0,314.0,1067.0,302.0,4.0375,121300.0,INLAND +-117.65,34.08,35.0,2621.0,391.0,1074.0,391.0,4.7176,166400.0,INLAND +-117.65,34.08,38.0,2750.0,572.0,1410.0,483.0,3.3836,144900.0,INLAND +-117.66,34.07,37.0,2454.0,511.0,1165.0,504.0,2.9474,139600.0,INLAND +-117.66,34.06,24.0,4043.0,952.0,2174.0,859.0,2.2244,114900.0,INLAND +-117.66,34.07,36.0,2072.0,408.0,964.0,395.0,2.8702,137000.0,INLAND +-117.66,34.07,33.0,2081.0,409.0,1008.0,375.0,2.587,138100.0,INLAND +-117.66,34.08,36.0,1485.0,236.0,623.0,261.0,3.3036,141000.0,INLAND +-117.66,34.08,33.0,3659.0,590.0,1773.0,615.0,3.9227,157200.0,INLAND +-117.64,34.08,37.0,2576.0,468.0,1284.0,428.0,3.3958,130400.0,INLAND +-117.64,34.07,43.0,1970.0,379.0,1036.0,391.0,3.2083,122800.0,INLAND +-117.65,34.08,52.0,2264.0,439.0,1031.0,437.0,3.375,144300.0,INLAND +-117.65,34.08,40.0,1609.0,258.0,624.0,242.0,5.4689,158200.0,INLAND +-117.64,34.08,35.0,1254.0,241.0,729.0,253.0,3.495,118000.0,INLAND +-117.64,34.08,33.0,1987.0,455.0,1369.0,475.0,2.4464,122600.0,INLAND +-117.63,34.08,38.0,1810.0,371.0,1257.0,354.0,3.8355,111700.0,INLAND +-117.63,34.07,39.0,2650.0,511.0,1537.0,495.0,3.4432,106700.0,INLAND +-117.62,34.07,15.0,4061.0,811.0,2884.0,734.0,3.3936,127000.0,INLAND +-117.62,34.08,30.0,1372.0,235.0,1047.0,225.0,3.1597,116300.0,INLAND +-117.63,34.09,19.0,3490.0,816.0,2818.0,688.0,2.8977,126200.0,INLAND +-117.62,34.09,26.0,3271.0,595.0,2259.0,566.0,4.0139,132000.0,INLAND +-117.62,34.08,22.0,2626.0,631.0,1678.0,557.0,3.125,111800.0,INLAND +-117.62,34.08,24.0,2801.0,554.0,2064.0,529.0,4.4946,136000.0,INLAND +-117.61,34.08,20.0,3550.0,736.0,2229.0,681.0,3.0199,128800.0,INLAND +-117.61,34.09,23.0,1945.0,362.0,1483.0,383.0,4.4205,135500.0,INLAND +-117.61,34.09,11.0,2000.0,391.0,1503.0,426.0,4.6167,144000.0,INLAND +-117.61,34.08,12.0,4427.0,,2400.0,843.0,4.7147,158700.0,INLAND +-117.6,34.08,15.0,2700.0,460.0,1432.0,449.0,4.9063,159800.0,INLAND +-117.65,34.07,35.0,2501.0,651.0,1182.0,591.0,1.4464,113200.0,INLAND +-117.65,34.07,52.0,1041.0,252.0,558.0,231.0,1.9236,117200.0,INLAND +-117.65,34.06,41.0,465.0,130.0,349.0,138.0,2.0893,112500.0,INLAND +-117.62,34.07,16.0,6009.0,1599.0,5110.0,1389.0,2.5677,128900.0,INLAND +-117.64,34.07,30.0,2787.0,713.0,2647.0,693.0,2.2765,98100.0,INLAND +-117.64,34.07,38.0,2450.0,544.0,1823.0,536.0,2.837,111200.0,INLAND +-117.64,34.07,52.0,1644.0,372.0,1269.0,355.0,2.6913,108300.0,INLAND +-117.67,34.06,26.0,1592.0,429.0,1182.0,365.0,2.4583,110400.0,INLAND +-117.66,34.06,39.0,1405.0,339.0,1489.0,336.0,1.608,91800.0,INLAND +-117.65,34.06,41.0,1171.0,334.0,1479.0,334.0,2.25,90500.0,INLAND +-117.64,34.06,43.0,763.0,219.0,851.0,198.0,1.7292,79200.0,INLAND +-117.64,34.06,50.0,637.0,143.0,590.0,147.0,1.9659,85700.0,INLAND +-117.63,34.06,39.0,1210.0,310.0,1294.0,303.0,2.3636,88300.0,INLAND +-117.66,34.05,36.0,2341.0,520.0,2138.0,523.0,2.3347,104000.0,INLAND +-117.66,34.05,33.0,960.0,216.0,831.0,222.0,2.5391,108600.0,INLAND +-117.66,34.05,6.0,5129.0,1119.0,2533.0,949.0,3.625,113600.0,INLAND +-117.67,34.04,16.0,3260.0,501.0,1973.0,535.0,4.6563,162000.0,INLAND +-117.66,34.04,16.0,2081.0,348.0,1332.0,356.0,4.7872,147600.0,INLAND +-117.66,34.05,14.0,2644.0,525.0,2021.0,511.0,3.6467,147500.0,INLAND +-117.65,34.04,15.0,3393.0,,2039.0,611.0,3.9336,151000.0,INLAND +-117.66,34.04,10.0,3657.0,695.0,2079.0,663.0,4.2054,159900.0,INLAND +-117.67,34.05,6.0,2833.0,628.0,1717.0,589.0,3.2062,167500.0,INLAND +-117.67,34.04,13.0,2295.0,374.0,1284.0,378.0,5.2551,194300.0,INLAND +-117.67,34.04,13.0,1543.0,,776.0,358.0,3.0598,99700.0,INLAND +-117.68,34.04,27.0,574.0,103.0,321.0,103.0,3.9107,186500.0,INLAND +-117.65,34.02,9.0,2107.0,411.0,1138.0,389.0,4.4042,159100.0,INLAND +-117.66,34.03,14.0,2137.0,345.0,1151.0,352.0,5.753,185500.0,INLAND +-117.67,34.02,16.0,3042.0,524.0,1516.0,475.0,4.8906,178500.0,INLAND +-117.66,34.02,11.0,3358.0,504.0,1690.0,482.0,6.7544,207900.0,INLAND +-117.65,34.03,15.0,4420.0,903.0,2373.0,858.0,3.449,149100.0,INLAND +-117.65,34.04,28.0,2360.0,607.0,2623.0,592.0,2.5048,100000.0,INLAND +-117.64,34.05,32.0,1129.0,251.0,1378.0,268.0,3.0057,96900.0,INLAND +-117.64,34.05,27.0,1407.0,362.0,1684.0,350.0,2.1944,95700.0,INLAND +-117.64,34.03,11.0,2050.0,382.0,1044.0,371.0,4.8281,137000.0,INLAND +-117.64,34.04,21.0,1801.0,507.0,2556.0,484.0,2.4716,102500.0,INLAND +-117.64,34.03,10.0,3194.0,579.0,2088.0,549.0,4.1779,159100.0,INLAND +-117.64,34.02,10.0,4887.0,930.0,2637.0,831.0,4.0611,158000.0,INLAND +-117.63,34.02,13.0,4864.0,729.0,2780.0,723.0,5.6168,175400.0,INLAND +-117.62,34.02,9.0,4265.0,587.0,2280.0,589.0,5.5632,195100.0,INLAND +-117.62,34.03,15.0,3942.0,661.0,2240.0,621.0,4.8311,176000.0,INLAND +-117.62,34.02,16.0,2040.0,325.0,1207.0,324.0,5.0431,164100.0,INLAND +-117.61,34.02,15.0,1791.0,346.0,1219.0,328.0,3.8125,170300.0,INLAND +-117.6,34.02,16.0,2103.0,348.0,1305.0,356.0,5.2849,160400.0,INLAND +-117.6,34.03,16.0,1499.0,232.0,918.0,239.0,5.5677,175400.0,INLAND +-117.62,34.05,33.0,883.0,211.0,1007.0,210.0,2.8281,103600.0,INLAND +-117.61,34.04,8.0,4116.0,766.0,1785.0,745.0,3.1672,150200.0,INLAND +-117.66,34.02,12.0,5616.0,871.0,3019.0,782.0,5.5425,202300.0,INLAND +-117.64,34.02,6.0,248.0,47.0,119.0,42.0,2.125,416700.0,INLAND +-117.61,34.01,25.0,352.0,41.0,99.0,34.0,3.9696,500000.0,INLAND +-117.61,34.02,8.0,63.0,9.0,25.0,7.0,7.7197,275000.0,INLAND +-117.64,33.99,29.0,1005.0,152.0,513.0,149.0,2.4375,181300.0,INLAND +-117.66,34.0,5.0,1387.0,236.0,855.0,270.0,5.411,201100.0,INLAND +-117.6,33.98,26.0,1225.0,199.0,717.0,204.0,2.7284,225000.0,INLAND +-117.63,33.94,36.0,447.0,95.0,2886.0,85.0,4.2578,183300.0,INLAND +-117.58,34.0,2.0,7544.0,1516.0,2801.0,1001.0,4.0037,245200.0,INLAND +-117.57,34.15,3.0,12806.0,2219.0,4249.0,1499.0,5.485,343100.0,INLAND +-117.57,34.13,5.0,6135.0,879.0,2795.0,781.0,5.9369,225200.0,INLAND +-117.54,34.12,4.0,17577.0,2819.0,7766.0,2473.0,5.1333,181800.0,INLAND +-117.54,34.11,16.0,2114.0,374.0,1463.0,399.0,3.9241,131500.0,INLAND +-117.51,34.14,21.0,2455.0,381.0,1094.0,327.0,4.6437,191700.0,INLAND +-117.5,34.12,2.0,11965.0,1802.0,4436.0,1296.0,5.285,191700.0,INLAND +-117.51,34.16,2.0,718.0,98.0,119.0,50.0,4.1,315000.0,INLAND +-117.55,34.14,3.0,5710.0,919.0,2874.0,886.0,5.3638,206300.0,INLAND +-117.59,34.16,10.0,9467.0,1181.0,3819.0,1122.0,7.8252,361400.0,INLAND +-117.58,34.14,7.0,11818.0,1745.0,5499.0,1600.0,5.3678,231700.0,INLAND +-117.62,34.15,16.0,13556.0,1704.0,5669.0,1668.0,6.5138,311500.0,INLAND +-117.61,34.14,14.0,15809.0,2485.0,7363.0,2410.0,5.5198,245600.0,INLAND +-117.61,34.13,21.0,8416.0,1386.0,4308.0,1341.0,4.4611,164600.0,INLAND +-117.61,34.12,17.0,6709.0,1198.0,3954.0,1161.0,4.6997,156900.0,INLAND +-117.59,34.13,10.0,20263.0,3915.0,9716.0,3744.0,3.8505,169600.0,INLAND +-117.58,34.11,14.0,11635.0,2055.0,6443.0,2009.0,4.7547,157600.0,INLAND +-117.6,34.11,18.0,6025.0,1062.0,3360.0,1028.0,4.8889,155700.0,INLAND +-117.56,34.12,4.0,6956.0,1271.0,3455.0,1228.0,4.7193,178700.0,INLAND +-117.56,34.12,4.0,5351.0,1210.0,2988.0,1101.0,3.7973,181300.0,INLAND +-117.61,34.1,9.0,18956.0,4095.0,10323.0,3832.0,3.6033,132600.0,INLAND +-117.59,34.1,17.0,3646.0,1035.0,1987.0,895.0,2.3603,139300.0,INLAND +-117.58,34.1,4.0,6360.0,1584.0,3359.0,1396.0,3.5186,127800.0,INLAND +-117.58,34.09,27.0,754.0,200.0,746.0,185.0,1.9531,100800.0,INLAND +-117.59,34.09,16.0,2401.0,465.0,1757.0,500.0,3.9755,120400.0,INLAND +-117.57,34.07,4.0,2152.0,580.0,1083.0,441.0,3.1458,118800.0,INLAND +-117.59,34.03,16.0,3443.0,562.0,2130.0,564.0,5.0769,161400.0,INLAND +-117.59,34.02,14.0,1463.0,261.0,881.0,245.0,4.7857,152500.0,INLAND +-117.58,34.02,4.0,5998.0,1092.0,3182.0,1042.0,5.2692,174800.0,INLAND +-117.57,34.02,5.0,6933.0,1311.0,3845.0,1285.0,4.6727,158900.0,INLAND +-117.53,34.06,18.0,5605.0,1303.0,4028.0,1145.0,2.9386,116400.0,INLAND +-117.53,34.1,5.0,2185.0,488.0,1379.0,458.0,3.7917,103000.0,INLAND +-117.42,34.13,4.0,11587.0,1796.0,5804.0,1705.0,4.8283,141900.0,INLAND +-117.43,34.12,7.0,5954.0,1071.0,3567.0,1070.0,3.2056,134100.0,INLAND +-117.45,34.13,16.0,5058.0,965.0,3388.0,878.0,3.6417,119000.0,INLAND +-117.46,34.14,10.0,714.0,131.0,381.0,119.0,0.8926,116100.0,INLAND +-117.47,34.12,6.0,10565.0,1767.0,5690.0,1555.0,4.1797,141000.0,INLAND +-117.46,34.1,35.0,908.0,226.0,667.0,203.0,2.5833,93500.0,INLAND +-117.46,34.1,7.0,1759.0,473.0,1064.0,328.0,1.9583,108800.0,INLAND +-117.46,34.09,8.0,4711.0,963.0,3310.0,988.0,3.5488,101600.0,INLAND +-117.48,34.09,32.0,3170.0,630.0,2612.0,580.0,3.6394,99200.0,INLAND +-117.48,34.09,32.0,1650.0,328.0,1124.0,290.0,3.1838,98600.0,INLAND +-117.48,34.1,30.0,2287.0,531.0,1796.0,503.0,2.5833,90600.0,INLAND +-117.46,34.08,18.0,3830.0,750.0,2767.0,702.0,3.6602,120700.0,INLAND +-117.46,34.07,19.0,3155.0,572.0,2482.0,642.0,2.9973,113400.0,INLAND +-117.48,34.08,28.0,1922.0,382.0,1565.0,340.0,3.915,117400.0,INLAND +-117.48,34.08,17.0,1834.0,390.0,1253.0,357.0,3.1028,106400.0,INLAND +-117.47,34.07,24.0,1017.0,227.0,568.0,187.0,1.5972,112500.0,INLAND +-117.42,34.06,27.0,2532.0,495.0,1305.0,436.0,2.9107,143100.0,INLAND +-117.46,34.06,24.0,2831.0,478.0,1582.0,435.0,4.3397,195600.0,INLAND +-117.47,34.06,33.0,1379.0,273.0,884.0,229.0,2.7574,125000.0,INLAND +-117.49,34.05,20.0,1483.0,249.0,660.0,194.0,3.9464,207700.0,INLAND +-117.5,34.04,5.0,3958.0,665.0,2456.0,666.0,5.1647,154700.0,INLAND +-117.5,34.04,4.0,3428.0,649.0,2158.0,632.0,5.0175,143400.0,INLAND +-117.49,34.04,4.0,6034.0,1170.0,3527.0,1098.0,4.1775,143700.0,INLAND +-117.46,34.04,3.0,12870.0,2315.0,5820.0,1759.0,4.2429,147300.0,INLAND +-117.38,34.14,11.0,10804.0,1493.0,5221.0,1482.0,5.246,161400.0,INLAND +-117.4,34.15,4.0,12156.0,1864.0,5020.0,1524.0,4.7909,149200.0,INLAND +-117.4,34.18,16.0,1769.0,254.0,1778.0,251.0,5.3671,181800.0,INLAND +-117.38,34.2,16.0,193.0,45.0,312.0,76.0,3.7578,137500.0,INLAND +-117.45,34.11,7.0,6356.0,1244.0,4052.0,1164.0,2.9112,121700.0,INLAND +-117.45,34.1,9.0,4288.0,1017.0,3156.0,900.0,2.7827,105800.0,INLAND +-117.45,34.1,6.0,5571.0,1316.0,4048.0,1154.0,2.0308,91100.0,INLAND +-117.42,34.11,25.0,4261.0,893.0,2319.0,702.0,3.3958,111900.0,INLAND +-117.42,34.1,18.0,3977.0,809.0,2231.0,742.0,4.1399,115400.0,INLAND +-117.43,34.1,34.0,1345.0,265.0,834.0,290.0,3.7011,99500.0,INLAND +-117.43,34.11,17.0,4109.0,884.0,2544.0,780.0,2.7757,109800.0,INLAND +-117.43,34.1,43.0,1898.0,418.0,971.0,366.0,2.4735,89900.0,INLAND +-117.44,34.1,43.0,1614.0,400.0,926.0,349.0,2.075,95100.0,INLAND +-117.44,34.09,24.0,3477.0,831.0,2541.0,753.0,2.3682,97400.0,INLAND +-117.44,34.09,12.0,3598.0,828.0,2588.0,781.0,2.375,113800.0,INLAND +-117.44,34.08,15.0,5024.0,992.0,3208.0,981.0,3.6025,116400.0,INLAND +-117.42,34.09,28.0,3193.0,525.0,1750.0,523.0,4.1375,128300.0,INLAND +-117.42,34.08,28.0,2300.0,419.0,1312.0,444.0,3.4844,127700.0,INLAND +-117.43,34.08,31.0,3207.0,560.0,1582.0,538.0,4.263,127400.0,INLAND +-117.43,34.09,18.0,3172.0,632.0,1621.0,573.0,2.7437,120200.0,INLAND +-117.42,34.08,21.0,4460.0,930.0,2657.0,839.0,2.7569,127500.0,INLAND +-117.43,34.08,13.0,4563.0,1187.0,2475.0,1019.0,2.1189,121700.0,INLAND +-117.45,34.07,21.0,3465.0,639.0,2292.0,628.0,3.3553,113500.0,INLAND +-117.43,34.07,18.0,2453.0,537.0,1503.0,500.0,2.3768,95300.0,INLAND +-117.41,34.11,12.0,6758.0,1550.0,3204.0,1279.0,2.5181,105500.0,INLAND +-117.41,34.1,5.0,4937.0,1139.0,2204.0,812.0,2.5272,92000.0,INLAND +-117.4,34.08,21.0,3622.0,667.0,2503.0,720.0,3.8531,105400.0,INLAND +-117.41,34.08,38.0,1541.0,290.0,861.0,299.0,3.5655,95600.0,INLAND +-117.41,34.09,21.0,3300.0,587.0,1896.0,572.0,3.6466,130600.0,INLAND +-117.41,34.1,29.0,1362.0,251.0,776.0,253.0,3.1287,102000.0,INLAND +-117.41,34.11,29.0,3999.0,772.0,2602.0,760.0,3.5481,105500.0,INLAND +-117.4,34.11,14.0,1933.0,347.0,1443.0,376.0,4.2121,128100.0,INLAND +-117.39,34.11,5.0,2987.0,457.0,1821.0,485.0,4.8889,138900.0,INLAND +-117.39,34.11,16.0,1140.0,181.0,627.0,206.0,4.9444,132700.0,INLAND +-117.38,34.11,36.0,1497.0,264.0,894.0,275.0,3.3066,96300.0,INLAND +-117.38,34.11,32.0,3179.0,662.0,1878.0,661.0,3.1375,101200.0,INLAND +-117.39,34.1,12.0,7184.0,1516.0,4862.0,1235.0,2.4492,103800.0,INLAND +-117.39,34.1,19.0,1000.0,211.0,572.0,230.0,2.4028,112500.0,INLAND +-117.39,34.13,9.0,2228.0,398.0,1316.0,370.0,4.1632,119800.0,INLAND +-117.38,34.13,13.0,2903.0,510.0,1844.0,510.0,3.7198,112900.0,INLAND +-117.37,34.13,17.0,2681.0,470.0,1621.0,459.0,3.875,118500.0,INLAND +-117.38,34.13,23.0,1326.0,300.0,722.0,263.0,2.1856,107800.0,INLAND +-117.37,34.13,12.0,1893.0,493.0,1054.0,389.0,2.3456,140800.0,INLAND +-117.38,34.12,17.0,5959.0,1208.0,4115.0,1088.0,2.4053,105200.0,INLAND +-117.39,34.12,7.0,5059.0,780.0,3253.0,801.0,4.9196,140500.0,INLAND +-117.38,34.09,8.0,3955.0,815.0,2184.0,725.0,3.3438,127600.0,INLAND +-117.36,34.09,32.0,3616.0,631.0,2131.0,593.0,3.2879,95500.0,INLAND +-117.37,34.08,17.0,2029.0,404.0,1190.0,437.0,2.9554,115000.0,INLAND +-117.38,34.08,11.0,5684.0,1139.0,3095.0,1036.0,3.6875,112600.0,INLAND +-117.38,34.07,6.0,1156.0,191.0,910.0,234.0,4.9091,122400.0,INLAND +-117.37,34.07,52.0,50.0,9.0,60.0,16.0,4.125,262500.0,INLAND +-117.36,34.08,4.0,8866.0,1832.0,4775.0,1554.0,3.7348,125800.0,INLAND +-117.4,34.09,5.0,6190.0,993.0,3615.0,963.0,4.4034,133200.0,INLAND +-117.39,34.09,10.0,5736.0,945.0,3528.0,932.0,4.3958,130700.0,INLAND +-117.39,34.07,15.0,1966.0,331.0,1118.0,323.0,3.8558,122700.0,INLAND +-117.39,34.07,26.0,1387.0,277.0,664.0,239.0,3.0278,96800.0,INLAND +-117.4,34.07,28.0,2879.0,659.0,1661.0,554.0,2.066,88100.0,INLAND +-117.37,34.1,44.0,2087.0,447.0,1270.0,423.0,2.3889,86100.0,INLAND +-117.37,34.1,10.0,3404.0,855.0,1656.0,675.0,1.6977,91300.0,INLAND +-117.35,34.12,22.0,5640.0,889.0,3157.0,887.0,4.1581,126500.0,INLAND +-117.36,34.11,35.0,2969.0,521.0,1555.0,503.0,3.25,107100.0,INLAND +-117.37,34.12,32.0,3190.0,568.0,1614.0,512.0,3.8398,118200.0,INLAND +-117.37,34.13,18.0,5877.0,1043.0,3114.0,1002.0,4.0294,133200.0,INLAND +-117.35,34.13,26.0,3920.0,570.0,1862.0,552.0,3.7286,132000.0,INLAND +-117.36,34.1,29.0,2819.0,637.0,1683.0,608.0,2.3205,87600.0,INLAND +-117.36,34.1,31.0,2587.0,531.0,1227.0,489.0,2.3578,88600.0,INLAND +-117.36,34.1,33.0,1904.0,343.0,1366.0,338.0,3.6227,92800.0,INLAND +-117.38,34.06,17.0,3139.0,569.0,1612.0,516.0,3.3571,112300.0,INLAND +-117.4,34.06,17.0,5451.0,1008.0,3533.0,940.0,3.9191,101600.0,INLAND +-117.4,34.04,17.0,1906.0,334.0,1550.0,338.0,3.025,81800.0,INLAND +-117.39,34.04,27.0,2919.0,549.0,1841.0,564.0,2.8682,96400.0,INLAND +-117.35,34.04,14.0,2991.0,522.0,1729.0,537.0,3.5139,146800.0,INLAND +-117.35,34.17,28.0,1905.0,372.0,1480.0,341.0,2.9844,79200.0,INLAND +-117.34,34.16,31.0,1606.0,354.0,1049.0,335.0,2.1935,72700.0,INLAND +-117.33,34.15,28.0,1473.0,333.0,1196.0,312.0,1.6993,67800.0,INLAND +-117.32,34.14,32.0,1691.0,353.0,1457.0,329.0,1.8438,66600.0,INLAND +-117.33,34.14,29.0,1646.0,391.0,1296.0,351.0,1.9423,69700.0,INLAND +-117.34,34.14,37.0,1834.0,393.0,1198.0,348.0,2.225,81600.0,INLAND +-117.35,34.15,32.0,2699.0,552.0,2086.0,551.0,2.2974,84500.0,INLAND +-117.35,34.16,36.0,1717.0,348.0,1054.0,279.0,2.4444,73400.0,INLAND +-117.32,34.13,41.0,1837.0,409.0,1430.0,344.0,2.4524,70400.0,INLAND +-117.32,34.12,37.0,2868.0,574.0,2055.0,563.0,2.3508,70500.0,INLAND +-117.32,34.12,39.0,2210.0,498.0,1752.0,477.0,1.4066,66400.0,INLAND +-117.33,34.12,33.0,933.0,219.0,838.0,211.0,1.3417,69000.0,INLAND +-117.33,34.13,30.0,2335.0,363.0,1214.0,311.0,2.2449,93200.0,INLAND +-117.33,34.13,18.0,3009.0,740.0,2317.0,659.0,1.6375,72400.0,INLAND +-117.34,34.13,29.0,1494.0,286.0,991.0,280.0,2.125,70600.0,INLAND +-117.34,34.13,29.0,331.0,85.0,341.0,107.0,0.7069,70300.0,INLAND +-117.32,34.11,38.0,1462.0,337.0,1208.0,324.0,2.2604,68100.0,INLAND +-117.32,34.11,41.0,1229.0,302.0,994.0,270.0,1.4891,67300.0,INLAND +-117.33,34.12,38.0,1703.0,385.0,1356.0,363.0,2.0391,70400.0,INLAND +-117.34,34.12,26.0,1008.0,164.0,568.0,196.0,3.3516,105600.0,INLAND +-117.34,34.11,29.0,2912.0,566.0,2188.0,518.0,3.2656,90600.0,INLAND +-117.35,34.11,34.0,2104.0,388.0,1578.0,365.0,3.0833,88400.0,INLAND +-117.34,34.1,14.0,11827.0,2445.0,6640.0,2299.0,2.4878,103800.0,INLAND +-117.35,34.09,14.0,5983.0,1224.0,3255.0,1150.0,2.5902,111500.0,INLAND +-117.35,34.2,5.0,9269.0,1605.0,4916.0,1519.0,4.4367,133200.0,INLAND +-117.38,34.22,16.0,774.0,122.0,489.0,136.0,5.7628,221300.0,INLAND +-117.41,34.24,20.0,1160.0,181.0,543.0,188.0,5.2072,164300.0,INLAND +-117.41,34.23,17.0,889.0,131.0,439.0,141.0,6.1426,155000.0,INLAND +-117.28,34.17,26.0,3106.0,603.0,1396.0,576.0,3.1736,122200.0,INLAND +-117.28,34.17,26.0,3728.0,888.0,1765.0,727.0,1.7456,86800.0,INLAND +-117.29,34.17,35.0,4174.0,847.0,2127.0,778.0,3.2232,88300.0,INLAND +-117.3,34.18,28.0,2685.0,425.0,1304.0,420.0,4.3676,111100.0,INLAND +-117.3,34.17,30.0,2483.0,573.0,1172.0,438.0,1.875,89700.0,INLAND +-117.31,34.17,25.0,2795.0,596.0,1650.0,569.0,3.0078,87100.0,INLAND +-117.32,34.17,6.0,5661.0,1287.0,2943.0,1162.0,3.6362,106500.0,INLAND +-117.3,34.18,19.0,2526.0,381.0,1176.0,381.0,5.5136,137100.0,INLAND +-117.32,34.19,6.0,1068.0,182.0,999.0,188.0,4.7222,109000.0,INLAND +-117.34,34.18,7.0,2914.0,481.0,1584.0,499.0,4.6312,124900.0,INLAND +-117.33,34.17,5.0,4718.0,1140.0,2564.0,1056.0,2.9877,119900.0,INLAND +-117.33,34.17,13.0,3616.0,665.0,2189.0,620.0,3.7949,106300.0,INLAND +-117.32,34.16,9.0,711.0,139.0,316.0,152.0,4.0156,131000.0,INLAND +-117.31,34.15,7.0,5747.0,1307.0,2578.0,1147.0,3.3281,122200.0,INLAND +-117.3,34.15,33.0,1607.0,282.0,608.0,260.0,4.3438,115000.0,INLAND +-117.3,34.15,38.0,740.0,163.0,332.0,138.0,2.4107,88000.0,INLAND +-117.3,34.15,40.0,961.0,199.0,509.0,182.0,2.06,85500.0,INLAND +-117.3,34.14,39.0,1781.0,335.0,841.0,320.0,1.9432,89000.0,INLAND +-117.31,34.14,44.0,1487.0,273.0,972.0,281.0,3.2292,86100.0,INLAND +-117.31,34.14,38.0,2011.0,448.0,1190.0,403.0,1.8654,89400.0,INLAND +-117.31,34.15,34.0,2037.0,385.0,1195.0,391.0,3.9231,96000.0,INLAND +-117.3,34.15,45.0,942.0,166.0,401.0,174.0,3.8594,90800.0,INLAND +-117.31,34.13,38.0,1287.0,284.0,1047.0,269.0,2.2865,65500.0,INLAND +-117.3,34.12,34.0,1127.0,275.0,971.0,249.0,2.0583,64800.0,INLAND +-117.31,34.12,37.0,1412.0,343.0,1127.0,351.0,1.1667,70900.0,INLAND +-117.31,34.13,35.0,1622.0,393.0,1296.0,362.0,1.9286,68500.0,INLAND +-117.31,34.13,36.0,1076.0,283.0,773.0,224.0,2.6307,66400.0,INLAND +-117.3,34.11,42.0,525.0,111.0,444.0,120.0,2.6771,67000.0,INLAND +-117.31,34.11,38.0,1208.0,321.0,1225.0,317.0,1.4663,64000.0,INLAND +-117.31,34.11,52.0,851.0,190.0,731.0,190.0,1.9044,64900.0,INLAND +-117.31,34.11,41.0,1105.0,257.0,816.0,197.0,1.9375,64100.0,INLAND +-117.31,34.1,52.0,1457.0,415.0,1238.0,341.0,2.0089,68100.0,INLAND +-117.3,34.1,44.0,589.0,130.0,504.0,137.0,1.775,63400.0,INLAND +-117.31,34.1,28.0,2899.0,755.0,2406.0,655.0,1.5208,69500.0,INLAND +-117.32,34.1,27.0,2053.0,461.0,1737.0,463.0,3.1213,78800.0,INLAND +-117.32,34.1,42.0,801.0,176.0,711.0,183.0,1.8681,59700.0,INLAND +-117.3,34.09,40.0,1051.0,244.0,745.0,243.0,2.1842,75200.0,INLAND +-117.31,34.09,34.0,1336.0,345.0,1009.0,311.0,1.608,73700.0,INLAND +-117.27,34.16,32.0,2894.0,427.0,1151.0,446.0,6.2236,159700.0,INLAND +-117.28,34.15,36.0,1734.0,280.0,604.0,259.0,3.8292,122200.0,INLAND +-117.28,34.15,38.0,1981.0,343.0,796.0,344.0,3.8125,97400.0,INLAND +-117.29,34.15,42.0,1811.0,345.0,856.0,352.0,2.9667,97000.0,INLAND +-117.29,34.16,38.0,2458.0,488.0,1135.0,453.0,2.875,99100.0,INLAND +-117.28,34.16,26.0,2469.0,532.0,1068.0,501.0,1.9832,122100.0,INLAND +-117.28,34.16,35.0,2028.0,456.0,972.0,398.0,2.3778,90700.0,INLAND +-117.28,34.15,32.0,2170.0,430.0,815.0,401.0,3.1765,135000.0,INLAND +-117.28,34.14,40.0,2364.0,438.0,968.0,416.0,3.4906,93300.0,INLAND +-117.29,34.14,52.0,1683.0,266.0,646.0,256.0,4.0481,97300.0,INLAND +-117.29,34.15,49.0,1820.0,321.0,757.0,324.0,3.2976,102600.0,INLAND +-117.28,34.14,40.0,2190.0,496.0,1214.0,493.0,2.3947,81900.0,INLAND +-117.29,34.14,45.0,1598.0,314.0,771.0,319.0,2.5417,82900.0,INLAND +-117.29,34.14,48.0,1717.0,307.0,610.0,267.0,3.125,97600.0,INLAND +-117.29,34.14,39.0,1989.0,401.0,805.0,341.0,2.425,90000.0,INLAND +-117.3,34.14,37.0,1454.0,261.0,761.0,248.0,2.3438,88100.0,INLAND +-117.28,34.13,44.0,2469.0,568.0,1363.0,517.0,1.8396,77100.0,INLAND +-117.28,34.13,29.0,2077.0,577.0,1418.0,524.0,1.8281,76800.0,INLAND +-117.3,34.13,52.0,1859.0,395.0,968.0,333.0,1.2034,79500.0,INLAND +-117.29,34.13,52.0,2424.0,528.0,1171.0,455.0,1.4815,77900.0,INLAND +-117.28,34.12,36.0,2991.0,822.0,2378.0,751.0,1.3571,70600.0,INLAND +-117.29,34.12,40.0,2198.0,612.0,1517.0,531.0,1.0951,65800.0,INLAND +-117.29,34.13,44.0,2337.0,563.0,1238.0,467.0,1.5156,75800.0,INLAND +-117.3,34.13,42.0,2115.0,557.0,1532.0,494.0,1.4531,71500.0,INLAND +-117.3,34.12,43.0,1018.0,261.0,736.0,215.0,2.6,66900.0,INLAND +-117.28,34.12,47.0,2456.0,611.0,1653.0,512.0,1.3973,66100.0,INLAND +-117.29,34.12,47.0,1648.0,432.0,1308.0,385.0,1.2069,68200.0,INLAND +-117.29,34.12,45.0,1369.0,351.0,1046.0,274.0,1.8438,72100.0,INLAND +-117.3,34.12,50.0,1629.0,437.0,1581.0,394.0,2.2019,63500.0,INLAND +-117.29,34.11,48.0,1498.0,448.0,1586.0,455.0,1.1687,70800.0,INLAND +-117.29,34.11,35.0,2014.0,677.0,1714.0,612.0,0.7075,78800.0,INLAND +-117.29,34.11,35.0,2426.0,715.0,1920.0,586.0,1.5561,68000.0,INLAND +-117.28,34.11,39.0,1573.0,418.0,1258.0,359.0,1.4896,69500.0,INLAND +-117.29,34.1,19.0,1204.0,405.0,844.0,424.0,0.7235,71300.0,INLAND +-117.29,34.09,24.0,1451.0,387.0,1178.0,330.0,1.1806,68300.0,INLAND +-117.3,34.1,49.0,60.0,11.0,76.0,13.0,2.5625,75000.0,INLAND +-117.28,34.09,44.0,376.0,,273.0,107.0,2.2917,90800.0,INLAND +-117.3,34.07,34.0,567.0,143.0,387.0,138.0,1.7981,73300.0,INLAND +-117.25,34.16,31.0,1516.0,238.0,596.0,255.0,4.3362,159400.0,INLAND +-117.25,34.16,37.0,1709.0,278.0,744.0,274.0,3.7188,116600.0,INLAND +-117.25,34.16,35.0,2707.0,481.0,1595.0,479.0,3.9018,91500.0,INLAND +-117.25,34.15,30.0,1770.0,380.0,990.0,348.0,3.3,97600.0,INLAND +-117.26,34.15,33.0,2271.0,389.0,1100.0,380.0,3.5978,88300.0,INLAND +-117.26,34.16,31.0,3538.0,658.0,1715.0,663.0,3.7125,98000.0,INLAND +-117.26,34.17,30.0,1937.0,351.0,945.0,344.0,3.8906,123700.0,INLAND +-117.27,34.17,16.0,30.0,3.0,49.0,8.0,4.625,250000.0,INLAND +-117.25,34.15,22.0,7935.0,1976.0,4523.0,1791.0,2.1465,88800.0,INLAND +-117.25,34.14,19.0,5163.0,1229.0,2680.0,1141.0,2.2482,114500.0,INLAND +-117.27,34.14,36.0,3795.0,676.0,1742.0,585.0,4.1,96400.0,INLAND +-117.27,34.14,35.0,1517.0,257.0,658.0,245.0,4.4435,97600.0,INLAND +-117.27,34.15,35.0,1490.0,253.0,705.0,253.0,3.3616,95300.0,INLAND +-117.25,34.13,33.0,2898.0,503.0,1374.0,487.0,3.6856,90000.0,INLAND +-117.25,34.13,37.0,2498.0,472.0,1291.0,487.0,3.0,83400.0,INLAND +-117.26,34.13,37.0,2403.0,550.0,1234.0,493.0,2.0,72100.0,INLAND +-117.26,34.13,39.0,3521.0,747.0,2256.0,721.0,2.1375,87500.0,INLAND +-117.27,34.12,31.0,2209.0,636.0,1314.0,562.0,1.7235,78800.0,INLAND +-117.27,34.13,40.0,1298.0,254.0,793.0,268.0,3.0721,83800.0,INLAND +-117.27,34.13,36.0,3337.0,687.0,2388.0,589.0,2.9628,87800.0,INLAND +-117.25,34.13,35.0,861.0,148.0,381.0,138.0,2.5234,88200.0,INLAND +-117.25,34.12,17.0,3107.0,752.0,2160.0,643.0,1.8463,72600.0,INLAND +-117.25,34.11,32.0,2910.0,641.0,2011.0,614.0,2.7473,70800.0,INLAND +-117.27,34.12,27.0,2896.0,684.0,1514.0,668.0,1.462,70200.0,INLAND +-117.27,34.12,52.0,954.0,246.0,943.0,256.0,0.8658,87500.0,INLAND +-117.25,34.11,30.0,2173.0,560.0,1509.0,486.0,1.4079,67700.0,INLAND +-117.26,34.11,33.0,1210.0,288.0,850.0,238.0,1.2171,59300.0,INLAND +-117.27,34.11,44.0,567.0,134.0,565.0,150.0,1.8281,62900.0,INLAND +-117.27,34.1,9.0,3904.0,1042.0,3688.0,896.0,1.8022,78000.0,INLAND +-117.33,34.09,29.0,1960.0,415.0,1681.0,435.0,2.9292,84500.0,INLAND +-117.33,34.08,35.0,2240.0,423.0,1394.0,396.0,3.1799,86700.0,INLAND +-117.33,34.08,37.0,2267.0,405.0,1175.0,403.0,3.75,95200.0,INLAND +-117.33,34.07,32.0,2086.0,458.0,1355.0,412.0,2.5238,89200.0,INLAND +-117.34,34.07,46.0,1851.0,425.0,1100.0,377.0,2.0461,90500.0,INLAND +-117.34,34.08,35.0,1380.0,248.0,730.0,264.0,3.2305,93700.0,INLAND +-117.34,34.08,33.0,4924.0,1007.0,3502.0,953.0,3.233,99400.0,INLAND +-117.32,34.09,38.0,1585.0,345.0,1347.0,368.0,2.375,75300.0,INLAND +-117.32,34.09,30.0,1129.0,251.0,1034.0,237.0,2.3917,78600.0,INLAND +-117.32,34.08,41.0,1359.0,264.0,786.0,244.0,2.5208,85500.0,INLAND +-117.32,34.08,46.0,1308.0,276.0,576.0,244.0,3.1875,84000.0,INLAND +-117.32,34.07,52.0,1226.0,269.0,693.0,272.0,1.9963,76900.0,INLAND +-117.32,34.06,52.0,802.0,160.0,564.0,131.0,2.1591,63500.0,INLAND +-117.33,34.05,26.0,613.0,149.0,431.0,130.0,1.3977,73100.0,INLAND +-117.33,34.06,42.0,530.0,123.0,390.0,124.0,1.0469,67000.0,INLAND +-117.33,34.06,48.0,732.0,149.0,486.0,139.0,2.5673,68200.0,INLAND +-117.33,34.06,36.0,755.0,157.0,625.0,152.0,2.0242,65000.0,INLAND +-117.32,34.06,46.0,476.0,102.0,476.0,91.0,1.4511,73100.0,INLAND +-117.31,34.08,43.0,1697.0,387.0,1181.0,352.0,1.9234,74600.0,INLAND +-117.31,34.08,40.0,2011.0,495.0,1528.0,469.0,1.9375,69900.0,INLAND +-117.31,34.07,40.0,2936.0,732.0,2024.0,676.0,2.1139,70900.0,INLAND +-117.32,34.07,26.0,971.0,245.0,592.0,207.0,2.1125,84000.0,INLAND +-117.31,34.08,37.0,953.0,231.0,611.0,230.0,1.9926,81500.0,INLAND +-117.31,34.05,6.0,7423.0,2111.0,4092.0,1789.0,2.7002,88300.0,INLAND +-117.33,34.04,18.0,1837.0,388.0,727.0,336.0,2.5187,116700.0,INLAND +-117.33,34.03,14.0,1582.0,347.0,825.0,259.0,2.8281,106300.0,INLAND +-117.31,34.04,29.0,2481.0,383.0,1188.0,385.0,4.7344,134600.0,INLAND +-117.31,34.04,5.0,2785.0,577.0,1310.0,536.0,3.39,149500.0,INLAND +-117.3,34.05,6.0,2155.0,,1039.0,391.0,1.6675,95800.0,INLAND +-117.3,34.05,7.0,4672.0,1121.0,2534.0,1046.0,3.4228,115700.0,INLAND +-117.29,34.06,7.0,1971.0,403.0,1336.0,423.0,4.5066,111500.0,INLAND +-117.28,34.06,2.0,1658.0,290.0,868.0,304.0,5.1365,136700.0,INLAND +-117.32,34.02,17.0,1779.0,292.0,1006.0,293.0,4.6708,123100.0,INLAND +-117.33,34.03,18.0,2342.0,402.0,1264.0,382.0,4.7986,123700.0,INLAND +-117.32,34.03,13.0,3853.0,761.0,1685.0,669.0,3.9024,122400.0,INLAND +-117.31,34.03,24.0,1966.0,299.0,786.0,302.0,5.0318,134500.0,INLAND +-117.31,34.03,9.0,1199.0,187.0,629.0,207.0,5.7393,151600.0,INLAND +-117.31,34.02,18.0,1634.0,274.0,899.0,285.0,5.2139,129300.0,INLAND +-117.29,34.03,9.0,8185.0,1525.0,3630.0,1466.0,4.1667,197700.0,INLAND +-117.27,34.09,36.0,848.0,186.0,737.0,169.0,0.9838,79300.0,INLAND +-117.27,34.08,38.0,1093.0,256.0,856.0,212.0,1.4279,73000.0,INLAND +-117.25,34.08,30.0,2981.0,605.0,1784.0,573.0,2.45,85800.0,INLAND +-117.25,34.07,21.0,3067.0,706.0,2140.0,687.0,2.4432,78800.0,INLAND +-117.27,34.07,21.0,418.0,132.0,401.0,120.0,1.7206,82100.0,INLAND +-117.24,34.04,17.0,3362.0,507.0,1520.0,496.0,6.1986,214500.0,INLAND +-117.25,34.04,18.0,5761.0,1063.0,2763.0,1058.0,4.4472,161100.0,INLAND +-117.27,34.05,34.0,1703.0,395.0,849.0,359.0,3.1607,138200.0,INLAND +-117.27,34.06,20.0,5258.0,1514.0,3780.0,1404.0,2.025,85700.0,INLAND +-117.25,34.06,23.0,4503.0,1156.0,3264.0,937.0,1.9821,93000.0,INLAND +-117.25,34.06,18.0,5009.0,1108.0,2948.0,963.0,3.0042,106500.0,INLAND +-117.24,34.04,5.0,1775.0,234.0,726.0,222.0,7.978,223900.0,INLAND +-117.24,34.04,4.0,4289.0,682.0,1981.0,705.0,5.3366,165100.0,INLAND +-117.24,34.06,9.0,3603.0,786.0,1782.0,718.0,3.2604,93300.0,INLAND +-117.23,34.15,17.0,5036.0,817.0,2084.0,833.0,4.6445,137200.0,INLAND +-117.23,34.14,16.0,2577.0,521.0,956.0,472.0,2.5625,129400.0,INLAND +-117.24,34.14,6.0,2383.0,606.0,1301.0,488.0,3.016,107500.0,INLAND +-117.24,34.15,23.0,3847.0,608.0,1621.0,630.0,4.6111,128400.0,INLAND +-117.24,34.15,26.0,2041.0,293.0,936.0,375.0,6.0,140200.0,INLAND +-117.21,34.14,16.0,1613.0,245.0,811.0,267.0,5.2591,140700.0,INLAND +-117.22,34.15,9.0,2524.0,352.0,1139.0,362.0,6.2516,159300.0,INLAND +-117.2,34.15,18.0,1859.0,251.0,747.0,256.0,7.732,173200.0,INLAND +-117.2,34.14,14.0,2647.0,524.0,989.0,479.0,3.1513,160000.0,INLAND +-117.2,34.14,18.0,1920.0,333.0,890.0,323.0,5.159,144800.0,INLAND +-117.24,34.13,24.0,1203.0,310.0,594.0,187.0,1.1522,87500.0,INLAND +-117.24,34.13,26.0,3774.0,716.0,1913.0,620.0,3.3534,98900.0,INLAND +-117.23,34.12,6.0,4464.0,1093.0,2364.0,952.0,2.3848,81600.0,INLAND +-117.23,34.13,10.0,1145.0,293.0,726.0,251.0,1.645,68700.0,INLAND +-117.22,34.13,10.0,5951.0,1330.0,3204.0,1159.0,2.7011,110200.0,INLAND +-117.2,34.13,14.0,3998.0,711.0,1509.0,665.0,3.4138,126700.0,INLAND +-117.22,34.12,34.0,2457.0,499.0,1538.0,507.0,2.809,82500.0,INLAND +-117.21,34.13,31.0,3037.0,565.0,1834.0,575.0,3.3445,92900.0,INLAND +-117.2,34.12,24.0,3532.0,618.0,1681.0,590.0,3.5,113900.0,INLAND +-117.24,34.12,29.0,2654.0,667.0,1822.0,593.0,2.1563,72300.0,INLAND +-117.24,34.11,23.0,1920.0,454.0,1161.0,358.0,2.2109,73200.0,INLAND +-117.23,34.11,22.0,1162.0,221.0,995.0,244.0,2.5875,81300.0,INLAND +-117.23,34.12,18.0,1439.0,319.0,699.0,310.0,2.1071,73500.0,INLAND +-117.23,34.11,33.0,2170.0,500.0,1425.0,472.0,2.0133,78300.0,INLAND +-117.22,34.12,30.0,2512.0,597.0,1390.0,523.0,2.3725,77200.0,INLAND +-117.22,34.11,26.0,2972.0,,1972.0,532.0,2.0388,80400.0,INLAND +-117.21,34.12,32.0,1677.0,354.0,1021.0,339.0,3.6853,90900.0,INLAND +-117.21,34.11,27.0,1245.0,229.0,692.0,234.0,3.2176,89400.0,INLAND +-117.21,34.11,26.0,1757.0,304.0,905.0,281.0,3.4103,90900.0,INLAND +-117.19,34.1,5.0,2167.0,384.0,1174.0,358.0,4.0114,97700.0,INLAND +-117.21,34.08,5.0,5749.0,1385.0,2382.0,1088.0,3.0587,143100.0,INLAND +-117.22,34.07,8.0,3065.0,692.0,1440.0,666.0,3.2368,129200.0,INLAND +-117.17,34.12,2.0,3867.0,573.0,1275.0,433.0,5.4138,164400.0,INLAND +-117.12,34.1,40.0,96.0,14.0,46.0,14.0,3.2708,162500.0,INLAND +-117.17,34.12,3.0,15695.0,2248.0,6080.0,1920.0,6.2178,173900.0,INLAND +-117.18,34.08,28.0,2243.0,399.0,1464.0,379.0,3.2105,90300.0,INLAND +-117.19,34.08,22.0,2467.0,555.0,1567.0,494.0,2.6536,84700.0,INLAND +-117.19,34.08,5.0,4458.0,751.0,2392.0,773.0,4.5938,126500.0,INLAND +-117.18,34.07,14.0,1258.0,245.0,752.0,264.0,3.3924,97400.0,INLAND +-117.18,34.07,28.0,1306.0,279.0,885.0,255.0,2.1154,75300.0,INLAND +-117.18,34.07,7.0,1347.0,301.0,799.0,276.0,2.9485,112500.0,INLAND +-117.18,34.06,26.0,1953.0,446.0,1284.0,414.0,1.3485,85100.0,INLAND +-117.18,34.06,28.0,699.0,180.0,432.0,168.0,2.1875,81900.0,INLAND +-117.19,34.06,37.0,1467.0,348.0,1316.0,339.0,1.448,72800.0,INLAND +-117.19,34.07,40.0,2374.0,500.0,1772.0,455.0,2.189,72500.0,INLAND +-117.18,34.06,52.0,954.0,233.0,533.0,239.0,1.3021,100000.0,INLAND +-117.19,34.06,21.0,6107.0,1559.0,2805.0,1444.0,2.5643,102700.0,INLAND +-117.18,34.05,29.0,3436.0,731.0,1323.0,676.0,2.4943,122300.0,INLAND +-117.17,34.05,29.0,4007.0,700.0,1576.0,696.0,3.1801,149300.0,INLAND +-117.18,34.04,41.0,1766.0,288.0,753.0,278.0,4.9125,140700.0,INLAND +-117.18,34.05,52.0,1820.0,342.0,601.0,315.0,2.6129,137000.0,INLAND +-117.19,34.05,52.0,1949.0,432.0,767.0,392.0,2.5143,117600.0,INLAND +-117.19,34.05,33.0,1688.0,313.0,808.0,298.0,3.2188,117800.0,INLAND +-117.19,34.05,33.0,3007.0,498.0,1252.0,488.0,3.8816,134600.0,INLAND +-117.2,34.04,24.0,1587.0,222.0,676.0,234.0,6.0715,173400.0,INLAND +-117.2,34.04,23.0,1762.0,267.0,1132.0,279.0,5.9915,153200.0,INLAND +-117.21,34.04,14.0,3063.0,426.0,1570.0,419.0,6.2917,224700.0,INLAND +-117.21,34.05,4.0,2904.0,764.0,1250.0,664.0,3.2131,137500.0,INLAND +-117.18,34.04,38.0,2492.0,381.0,1003.0,369.0,3.6875,152800.0,INLAND +-117.19,34.03,36.0,2223.0,361.0,942.0,331.0,4.6806,152400.0,INLAND +-117.19,34.03,25.0,2513.0,340.0,900.0,320.0,6.4962,182400.0,INLAND +-117.19,34.03,20.0,856.0,124.0,395.0,145.0,10.8634,381800.0,INLAND +-117.16,34.08,9.0,5306.0,993.0,2630.0,925.0,4.51,135800.0,INLAND +-117.17,34.07,24.0,6573.0,1235.0,2904.0,1202.0,3.0651,108000.0,INLAND +-117.17,34.08,5.0,1473.0,228.0,842.0,257.0,4.875,138100.0,INLAND +-117.15,34.07,15.0,1852.0,316.0,906.0,298.0,5.3526,129800.0,INLAND +-117.14,34.07,3.0,5542.0,828.0,2506.0,806.0,5.5875,162000.0,INLAND +-117.14,34.06,15.0,3057.0,510.0,1154.0,460.0,3.9741,141100.0,INLAND +-117.15,34.06,25.0,3670.0,644.0,1815.0,634.0,4.0658,127400.0,INLAND +-117.14,34.05,5.0,2634.0,359.0,1173.0,372.0,6.746,204100.0,INLAND +-117.15,34.05,9.0,1442.0,219.0,633.0,230.0,5.0227,162300.0,INLAND +-117.16,34.05,23.0,3215.0,462.0,1411.0,435.0,6.0701,149900.0,INLAND +-117.17,34.05,24.0,2877.0,507.0,1141.0,474.0,4.2059,121500.0,INLAND +-117.15,34.04,14.0,2845.0,420.0,1172.0,377.0,7.5822,283100.0,INLAND +-117.16,34.06,33.0,2101.0,468.0,1997.0,412.0,2.8125,117200.0,INLAND +-117.16,34.06,17.0,2285.0,554.0,1412.0,541.0,1.8152,94300.0,INLAND +-117.14,34.01,26.0,7561.0,1051.0,2909.0,1012.0,7.2972,269600.0,INLAND +-117.15,34.03,32.0,2832.0,393.0,1033.0,385.0,6.5648,237200.0,INLAND +-117.15,34.03,26.0,5305.0,701.0,1818.0,676.0,6.1461,217100.0,INLAND +-117.17,34.03,33.0,4583.0,648.0,1760.0,638.0,6.3308,230600.0,INLAND +-117.09,34.01,37.0,106.0,18.0,27.0,12.0,4.0556,131300.0,INLAND +-117.09,34.07,24.0,6260.0,1271.0,3132.0,1189.0,2.5156,103000.0,INLAND +-117.12,34.06,38.0,281.0,55.0,151.0,52.0,1.3906,120800.0,INLAND +-117.13,34.06,4.0,3078.0,510.0,1341.0,486.0,4.9688,163200.0,INLAND +-117.13,34.07,34.0,2405.0,541.0,1342.0,514.0,2.8031,86900.0,INLAND +-117.08,34.08,34.0,45.0,11.0,39.0,14.0,3.0625,500001.0,INLAND +-117.12,34.04,25.0,2495.0,438.0,1071.0,405.0,4.8173,146600.0,INLAND +-117.07,34.05,14.0,5764.0,1006.0,1876.0,841.0,1.9694,173200.0,INLAND +-117.03,34.07,16.0,3784.0,577.0,1615.0,525.0,4.2333,220300.0,INLAND +-117.02,34.03,19.0,4415.0,648.0,1627.0,619.0,4.2361,191600.0,INLAND +-117.03,34.02,26.0,3909.0,670.0,1884.0,665.0,4.1361,121000.0,INLAND +-117.01,34.01,15.0,5592.0,891.0,2419.0,840.0,4.7193,135200.0,INLAND +-116.98,34.05,6.0,2290.0,312.0,957.0,274.0,7.2708,316700.0,INLAND +-117.05,34.04,23.0,3967.0,766.0,1518.0,698.0,2.29,111800.0,INLAND +-117.1,34.03,24.0,4144.0,826.0,2127.0,772.0,2.5172,96000.0,INLAND +-117.08,34.03,23.0,3862.0,699.0,2082.0,652.0,3.154,115700.0,INLAND +-117.08,34.02,20.0,3111.0,563.0,1453.0,538.0,3.3365,122800.0,INLAND +-117.06,34.02,24.0,3912.0,809.0,1926.0,762.0,2.6875,116300.0,INLAND +-117.05,34.02,21.0,3098.0,646.0,1351.0,614.0,2.598,106700.0,INLAND +-117.05,34.01,27.0,5484.0,1205.0,2645.0,1131.0,2.1927,116700.0,INLAND +-117.04,34.02,24.0,4663.0,1213.0,1851.0,1116.0,1.4418,103500.0,INLAND +-117.05,34.03,28.0,3009.0,698.0,1200.0,626.0,1.3993,104600.0,INLAND +-117.06,34.03,27.0,1945.0,446.0,859.0,418.0,1.5203,126200.0,INLAND +-117.03,34.03,26.0,3501.0,664.0,1860.0,681.0,3.0403,113500.0,INLAND +-117.04,34.03,29.0,3375.0,795.0,1760.0,699.0,2.7028,92000.0,INLAND +-117.04,34.04,30.0,3474.0,735.0,1674.0,691.0,2.5863,98300.0,INLAND +-117.29,35.54,35.0,7922.0,1636.0,3431.0,1329.0,3.4145,40400.0,INLAND +-117.37,34.59,39.0,8193.0,1747.0,6852.0,1597.0,2.3832,35000.0,INLAND +-117.62,34.44,6.0,8884.0,1687.0,3767.0,1334.0,3.599,140200.0,INLAND +-117.56,34.42,6.0,4264.0,749.0,2005.0,666.0,3.4695,138800.0,INLAND +-117.51,34.41,5.0,2884.0,567.0,1396.0,465.0,3.7361,119600.0,INLAND +-117.44,34.45,6.0,6068.0,1137.0,3094.0,947.0,3.5167,130900.0,INLAND +-117.54,34.47,4.0,6712.0,1200.0,3126.0,1026.0,3.2277,126500.0,INLAND +-117.5,34.66,20.0,1319.0,309.0,486.0,196.0,2.0184,84900.0,INLAND +-117.42,34.59,8.0,5445.0,1360.0,3220.0,1214.0,1.7567,69500.0,INLAND +-117.41,34.58,14.0,859.0,212.0,541.0,181.0,1.6838,57900.0,INLAND +-117.4,34.58,18.0,755.0,169.0,483.0,165.0,1.4196,64700.0,INLAND +-117.41,34.58,10.0,2964.0,668.0,1853.0,609.0,1.6047,73400.0,INLAND +-117.54,34.55,5.0,2949.0,671.0,1620.0,530.0,2.9479,83300.0,INLAND +-117.36,34.54,7.0,3940.0,764.0,2140.0,711.0,3.0357,91300.0,INLAND +-117.63,34.37,20.0,7052.0,1306.0,2197.0,810.0,3.7252,167100.0,INLAND +-117.61,34.34,18.0,5210.0,912.0,1301.0,464.0,4.8623,176900.0,INLAND +-117.53,34.28,35.0,1529.0,338.0,688.0,256.0,4.1083,108000.0,INLAND +-117.55,34.25,39.0,1578.0,317.0,872.0,322.0,4.555,153100.0,INLAND +-117.03,34.91,27.0,2718.0,583.0,1472.0,509.0,2.825,76600.0,INLAND +-117.01,34.9,36.0,2181.0,555.0,1404.0,492.0,2.3077,55500.0,INLAND +-117.02,34.9,37.0,1199.0,351.0,782.0,296.0,1.6515,61600.0,INLAND +-117.06,34.9,36.0,2828.0,916.0,1762.0,736.0,1.4318,59600.0,INLAND +-117.01,34.9,34.0,2194.0,519.0,1326.0,515.0,2.1056,72000.0,INLAND +-117.0,34.89,29.0,2637.0,512.0,1188.0,446.0,2.99,69400.0,INLAND +-117.01,34.89,26.0,2599.0,498.0,1332.0,443.0,2.7198,70400.0,INLAND +-117.02,34.89,29.0,3111.0,661.0,1530.0,608.0,2.8281,69300.0,INLAND +-117.04,34.89,37.0,1884.0,366.0,1052.0,353.0,3.175,66800.0,INLAND +-117.05,34.89,36.0,1199.0,260.0,665.0,229.0,3.7065,62000.0,INLAND +-117.22,34.44,5.0,4787.0,910.0,1944.0,806.0,2.6576,98500.0,INLAND +-117.2,34.46,7.0,8414.0,1584.0,5146.0,1517.0,3.2794,92500.0,INLAND +-117.12,34.46,17.0,1613.0,326.0,765.0,300.0,2.6827,110400.0,INLAND +-117.11,34.43,14.0,3026.0,556.0,1349.0,485.0,2.8021,111200.0,INLAND +-117.13,34.39,29.0,2251.0,464.0,855.0,315.0,3.4183,104100.0,INLAND +-117.25,34.49,4.0,2372.0,361.0,1017.0,322.0,5.1112,170900.0,INLAND +-117.23,34.49,9.0,4055.0,536.0,1458.0,478.0,5.4201,170600.0,INLAND +-117.21,34.49,14.0,2125.0,348.0,1067.0,360.0,3.6333,116200.0,INLAND +-117.2,34.5,10.0,4201.0,850.0,2378.0,808.0,2.1781,92200.0,INLAND +-117.17,34.49,13.0,4460.0,925.0,2225.0,840.0,2.0136,94100.0,INLAND +-117.15,34.48,31.0,265.0,55.0,186.0,55.0,2.125,64800.0,INLAND +-117.18,34.48,8.0,3561.0,691.0,2156.0,659.0,2.7778,86900.0,INLAND +-117.2,34.48,7.0,4998.0,953.0,2764.0,891.0,3.205,101900.0,INLAND +-117.22,34.48,7.0,2449.0,447.0,1217.0,408.0,3.6646,109900.0,INLAND +-117.26,34.53,10.0,3103.0,520.0,1283.0,464.0,3.071,151600.0,INLAND +-117.25,34.51,7.0,3200.0,477.0,1522.0,470.0,4.6914,142200.0,INLAND +-117.23,34.51,9.0,5756.0,807.0,2158.0,758.0,5.5875,167800.0,INLAND +-117.21,34.51,17.0,4379.0,629.0,1720.0,595.0,5.086,148400.0,INLAND +-117.25,34.53,13.0,5841.0,955.0,2455.0,915.0,4.1333,158200.0,INLAND +-117.22,34.54,8.0,12526.0,2495.0,6133.0,2324.0,2.9072,119200.0,INLAND +-117.2,34.52,12.0,4476.0,761.0,2255.0,735.0,3.925,118500.0,INLAND +-117.17,34.51,15.0,5151.0,942.0,2896.0,897.0,3.4875,90800.0,INLAND +-117.18,34.54,5.0,3772.0,619.0,2097.0,635.0,3.8194,98500.0,INLAND +-117.3,34.53,38.0,1643.0,489.0,1196.0,406.0,1.2275,64100.0,INLAND +-117.3,34.54,31.0,1174.0,360.0,1161.0,328.0,1.06,56500.0,INLAND +-117.3,34.54,25.0,2546.0,488.0,1338.0,487.0,3.2596,85400.0,INLAND +-117.31,34.53,26.0,2299.0,496.0,1259.0,441.0,2.6125,79900.0,INLAND +-117.32,34.55,18.0,279.0,59.0,188.0,60.0,0.8246,91700.0,INLAND +-117.32,34.54,9.0,5904.0,1165.0,3489.0,1063.0,3.125,92800.0,INLAND +-117.33,34.53,10.0,3781.0,712.0,2044.0,685.0,3.0943,97100.0,INLAND +-117.34,34.51,6.0,5667.0,1385.0,2447.0,1199.0,2.3617,103100.0,INLAND +-117.35,34.5,10.0,2163.0,392.0,1174.0,362.0,3.375,98000.0,INLAND +-117.34,34.49,9.0,3293.0,585.0,1678.0,530.0,3.2941,98300.0,INLAND +-117.36,34.48,3.0,16533.0,2549.0,7588.0,2285.0,3.9792,122100.0,INLAND +-117.3,34.52,34.0,4493.0,838.0,2335.0,779.0,3.1635,74300.0,INLAND +-117.32,34.51,16.0,3072.0,612.0,1283.0,604.0,2.8929,115600.0,INLAND +-117.31,34.51,18.0,2704.0,698.0,1611.0,597.0,2.0243,82300.0,INLAND +-117.28,34.51,10.0,4676.0,884.0,2845.0,812.0,3.0181,100400.0,INLAND +-117.31,34.5,14.0,2443.0,447.0,883.0,465.0,2.1111,116700.0,INLAND +-117.32,34.49,7.0,4584.0,1051.0,2049.0,918.0,1.6232,93400.0,INLAND +-117.29,34.49,3.0,7689.0,1545.0,3804.0,1399.0,3.3871,111800.0,INLAND +-117.32,34.48,8.0,4627.0,887.0,2739.0,846.0,3.0204,93100.0,INLAND +-117.27,34.5,7.0,2045.0,342.0,878.0,292.0,6.0296,194100.0,INLAND +-117.27,34.49,7.0,2344.0,351.0,846.0,314.0,4.7361,174500.0,INLAND +-117.27,34.48,8.0,1794.0,276.0,690.0,271.0,3.662,165300.0,INLAND +-117.26,34.48,6.0,4632.0,753.0,1851.0,694.0,4.1933,163100.0,INLAND +-117.27,34.5,8.0,3567.0,543.0,1133.0,419.0,5.3733,302600.0,INLAND +-117.25,34.41,13.0,3682.0,668.0,1606.0,668.0,2.1875,119700.0,INLAND +-117.28,34.41,14.0,2105.0,396.0,960.0,396.0,2.9934,118200.0,INLAND +-117.29,34.41,11.0,5934.0,1380.0,2756.0,1239.0,1.5758,108300.0,INLAND +-117.3,34.39,11.0,3572.0,592.0,1876.0,507.0,3.6615,105100.0,INLAND +-117.27,34.4,8.0,6042.0,979.0,3031.0,991.0,3.3438,124400.0,INLAND +-117.27,34.39,6.0,6988.0,1121.0,3660.0,1092.0,4.2224,125700.0,INLAND +-117.31,34.35,9.0,2404.0,390.0,1074.0,359.0,5.0198,151900.0,INLAND +-117.31,34.41,14.0,3019.0,643.0,1639.0,582.0,1.5288,103400.0,INLAND +-117.32,34.41,13.0,2032.0,348.0,1038.0,344.0,4.2891,120100.0,INLAND +-117.33,34.41,13.0,3684.0,604.0,1767.0,585.0,3.7478,113500.0,INLAND +-117.34,34.39,8.0,3579.0,672.0,2216.0,630.0,3.4038,100500.0,INLAND +-117.31,34.39,15.0,1703.0,273.0,847.0,266.0,3.7917,123400.0,INLAND +-117.39,34.38,4.0,7151.0,1295.0,3527.0,1170.0,3.5696,129700.0,INLAND +-117.3,34.46,8.0,6246.0,1273.0,3883.0,1264.0,2.7917,98200.0,INLAND +-117.31,34.44,10.0,1731.0,299.0,1056.0,312.0,3.6007,104000.0,INLAND +-117.31,34.43,16.0,5130.0,1172.0,3126.0,1046.0,1.6784,71900.0,INLAND +-117.35,34.44,9.0,11810.0,2181.0,6716.0,2081.0,3.1821,95600.0,INLAND +-117.38,34.44,4.0,5083.0,867.0,2541.0,856.0,4.2414,121400.0,INLAND +-117.34,34.46,9.0,5983.0,1122.0,3515.0,1064.0,3.1505,102000.0,INLAND +-117.27,34.42,9.0,5643.0,1005.0,3166.0,957.0,3.2077,93300.0,INLAND +-117.26,34.43,11.0,4597.0,782.0,2534.0,776.0,3.3368,99300.0,INLAND +-117.27,34.45,8.0,6463.0,1095.0,3213.0,1031.0,3.2215,108800.0,INLAND +-116.72,34.89,14.0,4527.0,875.0,1640.0,590.0,2.8594,81700.0,INLAND +-115.93,35.55,18.0,1321.0,272.0,754.0,226.0,3.4028,67500.0,INLAND +-115.75,35.23,5.0,208.0,78.0,132.0,56.0,2.5333,75000.0,INLAND +-115.53,34.91,12.0,807.0,199.0,246.0,102.0,2.5391,40000.0,INLAND +-116.51,34.85,15.0,3149.0,713.0,1281.0,486.0,2.0,64700.0,INLAND +-116.57,35.43,8.0,9975.0,1743.0,6835.0,1439.0,2.7138,22500.0,INLAND +-116.14,34.45,12.0,8796.0,1721.0,11139.0,1680.0,2.2612,137500.0,INLAND +-116.32,34.1,10.0,4256.0,861.0,1403.0,686.0,2.6618,81000.0,INLAND +-116.27,34.13,37.0,452.0,109.0,184.0,59.0,3.7292,65800.0,INLAND +-116.31,34.13,20.0,2352.0,556.0,1217.0,481.0,1.6063,55400.0,INLAND +-116.35,34.13,9.0,1969.0,406.0,805.0,349.0,1.5491,62300.0,INLAND +-116.32,34.14,18.0,1880.0,487.0,994.0,425.0,1.69,54200.0,INLAND +-116.33,34.15,13.0,1808.0,411.0,735.0,320.0,1.5489,57400.0,INLAND +-116.29,34.18,15.0,4203.0,966.0,1756.0,695.0,2.182,60800.0,INLAND +-116.62,34.23,14.0,6438.0,1719.0,1586.0,691.0,1.6136,67400.0,INLAND +-116.73,34.52,16.0,1247.0,315.0,433.0,159.0,1.0568,75000.0,INLAND +-116.51,34.45,21.0,8502.0,2634.0,2330.0,991.0,1.3811,51300.0,INLAND +-116.56,34.06,15.0,6928.0,1529.0,2568.0,1075.0,2.5405,69600.0,INLAND +-116.44,34.16,19.0,1867.0,361.0,758.0,321.0,2.8929,98100.0,INLAND +-116.38,34.2,14.0,4985.0,1238.0,2517.0,954.0,2.0674,65000.0,INLAND +-116.39,34.15,15.0,5583.0,1149.0,2709.0,964.0,1.9779,73300.0,INLAND +-116.44,34.12,18.0,5584.0,1303.0,2250.0,1158.0,1.5823,72400.0,INLAND +-116.47,34.07,22.0,5473.0,1234.0,2581.0,1098.0,1.9375,65300.0,INLAND +-116.43,34.1,17.0,6683.0,1296.0,2677.0,1227.0,2.4828,84000.0,INLAND +-116.4,34.09,9.0,4855.0,872.0,2098.0,765.0,3.2723,97800.0,INLAND +-116.4,34.12,16.0,5648.0,1089.0,2524.0,1008.0,2.6739,78000.0,INLAND +-116.38,34.1,6.0,2104.0,348.0,841.0,320.0,4.1458,116300.0,INLAND +-116.22,34.21,23.0,1175.0,468.0,355.0,151.0,2.2083,42500.0,INLAND +-116.14,34.22,32.0,3298.0,1228.0,763.0,360.0,1.875,47800.0,INLAND +-116.06,34.2,29.0,1202.0,290.0,383.0,156.0,1.3371,66900.0,INLAND +-116.06,34.15,15.0,10377.0,2331.0,4507.0,1807.0,2.2466,66800.0,INLAND +-116.09,34.15,13.0,9444.0,1997.0,4166.0,1482.0,2.6111,65600.0,INLAND +-116.15,34.14,18.0,3312.0,705.0,1251.0,512.0,3.0139,82600.0,INLAND +-116.05,34.12,19.0,301.0,65.0,150.0,56.0,3.125,65600.0,INLAND +-116.02,34.18,8.0,569.0,97.0,312.0,96.0,4.3021,94500.0,INLAND +-115.85,34.2,34.0,3868.0,1257.0,890.0,423.0,1.3571,41000.0,INLAND +-115.52,34.22,30.0,540.0,136.0,122.0,63.0,1.3333,42500.0,INLAND +-116.0,34.12,32.0,3163.0,712.0,1358.0,544.0,2.125,57700.0,INLAND +-114.94,34.55,20.0,350.0,95.0,119.0,58.0,1.625,50000.0,INLAND +-114.47,34.4,19.0,7650.0,1901.0,1129.0,463.0,1.82,80100.0,INLAND +-114.31,34.19,15.0,5612.0,1283.0,1015.0,472.0,1.4936,66900.0,INLAND +-114.59,34.83,41.0,812.0,,375.0,158.0,1.7083,48500.0,INLAND +-114.65,34.89,17.0,2556.0,587.0,1005.0,401.0,1.6991,69100.0,INLAND +-114.6,34.83,46.0,1497.0,309.0,787.0,271.0,2.1908,48100.0,INLAND +-114.61,34.84,48.0,1291.0,248.0,580.0,211.0,2.1571,48600.0,INLAND +-114.61,34.83,31.0,2478.0,464.0,1346.0,479.0,3.212,70400.0,INLAND +-114.64,34.83,10.0,2502.0,573.0,1152.0,481.0,1.7062,86800.0,INLAND +-117.36,34.28,18.0,3903.0,715.0,1388.0,428.0,4.2386,157200.0,INLAND +-117.28,34.26,18.0,3895.0,,1086.0,375.0,3.3672,133600.0,INLAND +-117.31,34.25,29.0,4610.0,,1569.0,592.0,2.7663,97900.0,INLAND +-117.32,34.24,29.0,1290.0,263.0,323.0,113.0,1.9265,103300.0,INLAND +-117.3,34.24,38.0,4116.0,949.0,1196.0,422.0,3.5625,96500.0,INLAND +-117.28,34.24,16.0,3474.0,633.0,853.0,315.0,5.2185,128600.0,INLAND +-117.27,34.24,34.0,3687.0,756.0,941.0,367.0,2.875,117600.0,INLAND +-117.26,34.24,10.0,4750.0,844.0,1220.0,428.0,4.5536,132400.0,INLAND +-117.27,34.23,26.0,6339.0,1244.0,1177.0,466.0,3.7708,110400.0,INLAND +-117.16,34.26,27.0,9285.0,1621.0,1135.0,410.0,2.5446,135200.0,INLAND +-117.18,34.3,33.0,399.0,87.0,71.0,27.0,1.875,71300.0,INLAND +-117.17,34.28,13.0,4867.0,718.0,780.0,250.0,7.1997,253800.0,INLAND +-117.19,34.27,16.0,7961.0,1147.0,879.0,280.0,5.2146,255200.0,INLAND +-117.21,34.28,16.0,3326.0,569.0,527.0,192.0,5.7421,167600.0,INLAND +-117.2,34.26,17.0,9419.0,1455.0,1382.0,459.0,6.2233,230900.0,INLAND +-117.22,34.26,16.0,8020.0,1432.0,1749.0,540.0,4.9716,162500.0,INLAND +-117.2,34.24,22.0,8106.0,1665.0,1062.0,423.0,3.0434,137200.0,INLAND +-117.17,34.25,15.0,4236.0,753.0,703.0,255.0,3.5625,165500.0,INLAND +-117.21,34.22,31.0,5454.0,1053.0,1408.0,504.0,5.0,161100.0,INLAND +-117.07,34.24,21.0,4773.0,1047.0,337.0,130.0,3.9375,115000.0,INLAND +-117.13,34.24,17.0,2828.0,506.0,673.0,274.0,5.2563,144100.0,INLAND +-117.15,34.22,10.0,1039.0,174.0,317.0,109.0,7.2371,171900.0,INLAND +-117.12,34.21,19.0,4641.0,994.0,1334.0,474.0,4.5972,123900.0,INLAND +-117.1,34.21,22.0,4397.0,931.0,1145.0,445.0,4.5268,108400.0,INLAND +-117.09,34.22,16.0,1347.0,327.0,271.0,91.0,4.0,87500.0,INLAND +-117.06,34.17,21.0,2520.0,582.0,416.0,151.0,2.712,89000.0,INLAND +-117.13,34.17,17.0,1181.0,271.0,248.0,114.0,5.5762,150000.0,INLAND +-116.94,34.24,27.0,12342.0,2630.0,1300.0,566.0,1.998,153500.0,INLAND +-116.91,34.24,23.0,6379.0,1636.0,1350.0,568.0,1.6336,124500.0,INLAND +-116.9,34.25,16.0,3018.0,523.0,556.0,244.0,3.5288,189700.0,INLAND +-116.88,34.24,13.0,4137.0,796.0,573.0,218.0,4.6394,226500.0,INLAND +-116.88,34.25,11.0,1089.0,198.0,230.0,90.0,4.9643,176000.0,INLAND +-116.87,34.24,15.0,4419.0,822.0,622.0,267.0,3.9688,182800.0,INLAND +-116.86,34.24,19.0,5411.0,1042.0,441.0,185.0,3.1324,132000.0,INLAND +-116.86,34.23,13.0,4760.0,938.0,309.0,132.0,5.4618,147800.0,INLAND +-116.99,34.3,29.0,5055.0,1036.0,410.0,191.0,3.5104,157100.0,INLAND +-116.89,34.27,13.0,3661.0,770.0,567.0,228.0,4.4063,152600.0,INLAND +-116.86,34.31,19.0,1649.0,328.0,382.0,151.0,4.0556,133000.0,INLAND +-116.85,34.26,18.0,6988.0,1635.0,2044.0,726.0,2.4308,90600.0,INLAND +-116.85,34.26,19.0,5395.0,1220.0,981.0,366.0,2.6094,92400.0,INLAND +-116.85,34.25,5.0,5806.0,1030.0,569.0,219.0,4.0132,163100.0,INLAND +-116.83,34.25,15.0,8948.0,1985.0,1316.0,514.0,2.7375,90800.0,INLAND +-116.82,34.24,11.0,5799.0,1527.0,713.0,262.0,2.5147,84700.0,INLAND +-116.76,34.29,14.0,3959.0,849.0,1064.0,376.0,2.8214,111400.0,INLAND +-116.76,34.23,10.0,4374.0,989.0,1020.0,376.0,2.6071,89000.0,INLAND +-116.98,34.13,16.0,2098.0,449.0,342.0,143.0,4.0333,133900.0,INLAND +-116.98,34.07,21.0,739.0,125.0,199.0,82.0,4.8958,117500.0,INLAND +-116.88,34.08,52.0,3419.0,777.0,710.0,265.0,3.9028,128600.0,INLAND +-116.76,34.14,4.0,42.0,10.0,9.0,3.0,0.536,42500.0,INLAND +-116.88,34.19,38.0,898.0,259.0,106.0,52.0,1.6875,225000.0,INLAND +-117.46,34.85,7.0,9759.0,1816.0,2933.0,1168.0,3.4912,157700.0,INLAND +-117.28,35.13,32.0,671.0,166.0,856.0,114.0,2.6477,53300.0,INLAND +-116.85,34.98,26.0,3606.0,792.0,1683.0,608.0,2.6587,57400.0,INLAND +-117.14,34.75,33.0,552.0,120.0,347.0,97.0,1.8158,100000.0,INLAND +-117.28,34.68,28.0,1932.0,421.0,1156.0,404.0,1.8958,55600.0,INLAND +-117.06,34.87,14.0,3348.0,619.0,1756.0,557.0,3.5987,91400.0,INLAND +-117.13,34.88,21.0,3254.0,669.0,1548.0,545.0,2.3373,57100.0,INLAND +-117.15,34.83,30.0,5370.0,1062.0,2778.0,944.0,3.099,66800.0,INLAND +-117.19,34.94,31.0,2034.0,444.0,1097.0,367.0,2.1522,60800.0,INLAND +-117.16,34.9,16.0,1579.0,327.0,934.0,298.0,2.7305,73800.0,INLAND +-117.08,34.96,28.0,1777.0,307.0,721.0,259.0,3.6343,79800.0,INLAND +-116.96,34.94,20.0,2355.0,467.0,1198.0,428.0,3.9934,88500.0,INLAND +-116.99,34.89,24.0,2741.0,577.0,1551.0,522.0,3.474,70500.0,INLAND +-116.99,34.88,23.0,6060.0,1165.0,2920.0,1072.0,3.1528,69000.0,INLAND +-117.0,34.87,16.0,6862.0,1292.0,3562.0,1126.0,3.6091,87200.0,INLAND +-117.02,34.88,18.0,2127.0,443.0,1168.0,401.0,3.0313,80000.0,INLAND +-117.03,34.87,7.0,2245.0,407.0,1016.0,364.0,3.9464,101500.0,INLAND +-116.96,34.83,30.0,1211.0,289.0,611.0,230.0,1.6667,44700.0,INLAND +-116.9,34.69,10.0,337.0,102.0,108.0,50.0,0.4999,55000.0,INLAND +-117.24,34.59,4.0,5027.0,797.0,1869.0,686.0,3.5507,186100.0,INLAND +-117.29,34.57,22.0,1054.0,239.0,428.0,239.0,1.2548,68300.0,INLAND +-117.1,34.57,6.0,5110.0,1044.0,1938.0,724.0,3.1917,112800.0,INLAND +-116.9,34.52,20.0,3481.0,840.0,1694.0,587.0,1.4,77700.0,INLAND +-116.94,34.4,20.0,6541.0,1401.0,2631.0,980.0,2.1339,78500.0,INLAND +-117.18,32.76,52.0,2023.0,301.0,649.0,285.0,4.7396,441700.0,NEAR OCEAN +-117.18,32.75,52.0,1539.0,212.0,535.0,224.0,5.392,408500.0,NEAR OCEAN +-117.18,32.75,52.0,1504.0,208.0,518.0,196.0,8.603,459600.0,NEAR OCEAN +-117.19,32.75,52.0,1495.0,230.0,459.0,190.0,8.1548,500001.0,NEAR OCEAN +-117.19,32.75,52.0,1388.0,213.0,513.0,211.0,6.1309,411600.0,NEAR OCEAN +-117.19,32.76,52.0,1294.0,175.0,434.0,180.0,5.7914,500001.0,NEAR OCEAN +-117.17,32.76,45.0,3149.0,639.0,1160.0,661.0,2.7266,354200.0,NEAR OCEAN +-117.17,32.75,38.0,5430.0,1176.0,2357.0,1100.0,3.654,249000.0,NEAR OCEAN +-117.18,32.74,39.0,3132.0,738.0,1200.0,690.0,2.5288,274000.0,NEAR OCEAN +-117.18,32.75,36.0,2282.0,534.0,918.0,531.0,2.7222,284700.0,NEAR OCEAN +-117.17,32.75,52.0,1052.0,,381.0,201.0,3.0726,289600.0,NEAR OCEAN +-117.16,32.75,23.0,2474.0,594.0,1107.0,536.0,2.9705,245500.0,NEAR OCEAN +-117.16,32.75,49.0,1566.0,494.0,643.0,419.0,1.9637,137500.0,NEAR OCEAN +-117.16,32.74,52.0,852.0,262.0,389.0,249.0,2.6042,225000.0,NEAR OCEAN +-117.16,32.74,21.0,1882.0,486.0,903.0,482.0,3.06,243800.0,NEAR OCEAN +-117.16,32.74,27.0,2335.0,604.0,982.0,590.0,3.1921,261500.0,NEAR OCEAN +-117.17,32.75,28.0,1514.0,384.0,540.0,352.0,2.1532,240000.0,NEAR OCEAN +-117.16,32.75,19.0,5430.0,1593.0,2496.0,1484.0,2.9112,199100.0,NEAR OCEAN +-117.16,32.75,34.0,1785.0,558.0,804.0,490.0,2.2687,200000.0,NEAR OCEAN +-117.15,32.76,43.0,2361.0,489.0,824.0,470.0,3.4196,302200.0,NEAR OCEAN +-117.15,32.76,36.0,2644.0,674.0,1211.0,654.0,3.0445,214800.0,NEAR OCEAN +-117.15,32.76,40.0,1809.0,474.0,826.0,456.0,2.6518,179800.0,NEAR OCEAN +-117.15,32.76,37.0,1921.0,502.0,811.0,472.0,2.75,175000.0,NEAR OCEAN +-117.15,32.75,40.0,2261.0,579.0,903.0,525.0,2.465,198700.0,NEAR OCEAN +-117.15,32.75,9.0,2818.0,821.0,851.0,555.0,2.6181,204200.0,NEAR OCEAN +-117.15,32.75,27.0,3166.0,867.0,1332.0,817.0,2.6742,171400.0,NEAR OCEAN +-117.15,32.74,43.0,2383.0,607.0,962.0,587.0,2.2578,263600.0,NEAR OCEAN +-117.15,32.74,26.0,3149.0,832.0,1320.0,808.0,3.0259,211700.0,NEAR OCEAN +-117.14,32.75,35.0,1391.0,329.0,726.0,317.0,2.6818,159400.0,NEAR OCEAN +-117.14,32.74,47.0,1494.0,327.0,689.0,304.0,3.125,172700.0,NEAR OCEAN +-117.14,32.74,16.0,6075.0,1816.0,2592.0,1634.0,2.5553,178100.0,NEAR OCEAN +-117.14,32.75,29.0,1961.0,565.0,1002.0,569.0,2.2813,118100.0,NEAR OCEAN +-117.14,32.75,25.0,1908.0,513.0,956.0,467.0,2.4828,133300.0,NEAR OCEAN +-117.14,32.75,37.0,1832.0,525.0,955.0,488.0,2.7852,129200.0,NEAR OCEAN +-117.14,32.75,19.0,1358.0,613.0,766.0,630.0,1.0353,150000.0,NEAR OCEAN +-117.14,32.75,20.0,1182.0,379.0,678.0,326.0,2.1937,162500.0,NEAR OCEAN +-117.14,32.75,27.0,1551.0,464.0,880.0,400.0,2.4167,131300.0,NEAR OCEAN +-117.14,32.76,28.0,3025.0,756.0,1328.0,695.0,2.694,164100.0,NEAR OCEAN +-117.14,32.76,35.0,2539.0,661.0,1308.0,629.0,2.6777,146400.0,NEAR OCEAN +-117.14,32.76,32.0,2587.0,681.0,1246.0,650.0,2.1727,145500.0,NEAR OCEAN +-117.14,32.76,35.0,1785.0,493.0,965.0,506.0,2.0792,160000.0,NEAR OCEAN +-117.13,32.77,30.0,2582.0,650.0,1098.0,603.0,2.8281,171700.0,NEAR OCEAN +-117.13,32.76,29.0,2568.0,682.0,1191.0,642.0,2.1094,162500.0,NEAR OCEAN +-117.13,32.76,41.0,1545.0,420.0,747.0,415.0,2.375,154400.0,NEAR OCEAN +-117.13,32.76,27.0,2280.0,695.0,1235.0,664.0,1.9392,142900.0,NEAR OCEAN +-117.13,32.76,33.0,1591.0,461.0,794.0,425.0,2.6333,140000.0,NEAR OCEAN +-117.13,32.76,22.0,2623.0,732.0,1283.0,718.0,2.1563,127100.0,NEAR OCEAN +-117.14,32.76,24.0,3523.0,991.0,1775.0,873.0,2.1273,142300.0,NEAR OCEAN +-117.13,32.75,24.0,1877.0,519.0,898.0,483.0,2.2264,112500.0,NEAR OCEAN +-117.13,32.75,28.0,2279.0,671.0,1166.0,623.0,1.95,150000.0,NEAR OCEAN +-117.13,32.75,23.0,3999.0,1182.0,2051.0,1130.0,2.1292,135000.0,NEAR OCEAN +-117.13,32.75,31.0,2336.0,656.0,1186.0,609.0,2.5872,130600.0,NEAR OCEAN +-117.13,32.75,50.0,1476.0,354.0,698.0,354.0,3.0,168800.0,NEAR OCEAN +-117.13,32.74,52.0,1512.0,321.0,651.0,321.0,3.6852,185300.0,NEAR OCEAN +-117.13,32.75,37.0,4142.0,1031.0,1936.0,968.0,2.693,174100.0,NEAR OCEAN +-117.12,32.75,37.0,2344.0,546.0,1134.0,513.0,2.4394,118300.0,NEAR OCEAN +-117.12,32.74,46.0,1898.0,441.0,978.0,439.0,3.2708,155200.0,NEAR OCEAN +-117.12,32.74,52.0,1969.0,389.0,877.0,424.0,3.79,163400.0,NEAR OCEAN +-117.13,32.75,20.0,2271.0,602.0,992.0,520.0,2.2599,157600.0,NEAR OCEAN +-117.12,32.75,15.0,2671.0,724.0,1800.0,646.0,2.1394,106700.0,NEAR OCEAN +-117.12,32.75,17.0,2060.0,633.0,1251.0,602.0,1.9886,119200.0,NEAR OCEAN +-117.12,32.75,20.0,1406.0,413.0,850.0,412.0,2.3261,114600.0,NEAR OCEAN +-117.12,32.75,25.0,2222.0,634.0,1025.0,568.0,1.64,130000.0,NEAR OCEAN +-117.12,32.76,23.0,2681.0,717.0,1279.0,648.0,2.1597,116100.0,NEAR OCEAN +-117.12,32.76,33.0,2279.0,591.0,1250.0,576.0,2.4297,139000.0,NEAR OCEAN +-117.12,32.76,43.0,2336.0,644.0,1203.0,614.0,2.3594,127800.0,NEAR OCEAN +-117.12,32.76,26.0,1221.0,331.0,620.0,296.0,2.4821,123600.0,NEAR OCEAN +-117.11,32.76,29.0,2030.0,545.0,1014.0,518.0,2.2409,114200.0,NEAR OCEAN +-117.12,32.76,28.0,2160.0,608.0,1339.0,571.0,1.9152,128100.0,NEAR OCEAN +-117.12,32.76,27.0,1426.0,364.0,792.0,353.0,2.0673,118800.0,NEAR OCEAN +-117.12,32.76,28.0,1605.0,501.0,936.0,460.0,2.5991,147500.0,NEAR OCEAN +-117.12,32.76,17.0,1559.0,462.0,821.0,428.0,2.0139,150000.0,NEAR OCEAN +-117.12,32.76,41.0,1469.0,421.0,803.0,395.0,2.1856,120500.0,NEAR OCEAN +-117.11,32.77,48.0,1502.0,272.0,590.0,265.0,2.5952,190300.0,NEAR OCEAN +-117.11,32.77,50.0,1729.0,355.0,617.0,337.0,3.6705,167000.0,NEAR OCEAN +-117.12,32.77,48.0,2012.0,422.0,893.0,394.0,2.7928,175000.0,NEAR OCEAN +-117.12,32.77,43.0,2167.0,464.0,977.0,461.0,3.125,192200.0,NEAR OCEAN +-117.11,32.77,52.0,1484.0,224.0,498.0,223.0,6.6053,331400.0,NEAR OCEAN +-117.11,32.77,52.0,1506.0,233.0,478.0,240.0,4.3875,300000.0,NEAR OCEAN +-117.1,32.77,49.0,4449.0,711.0,1606.0,709.0,5.7768,281600.0,NEAR OCEAN +-117.1,32.76,52.0,2606.0,426.0,883.0,380.0,4.2813,270800.0,NEAR OCEAN +-117.09,32.77,38.0,2065.0,374.0,812.0,343.0,3.125,216500.0,NEAR OCEAN +-117.09,32.76,44.0,1139.0,214.0,470.0,217.0,3.5481,203100.0,NEAR OCEAN +-117.09,32.76,43.0,3889.0,711.0,1466.0,663.0,3.5529,223000.0,NEAR OCEAN +-117.11,32.76,31.0,2293.0,549.0,1108.0,557.0,3.3854,204400.0,NEAR OCEAN +-117.1,32.76,30.0,1835.0,474.0,934.0,415.0,2.875,139600.0,NEAR OCEAN +-117.11,32.76,28.0,1457.0,397.0,672.0,342.0,1.9799,122700.0,NEAR OCEAN +-117.11,32.76,21.0,2226.0,600.0,1085.0,533.0,2.2604,126300.0,NEAR OCEAN +-117.11,32.76,19.0,2188.0,616.0,1304.0,607.0,2.0852,114400.0,NEAR OCEAN +-117.1,32.75,17.0,871.0,379.0,955.0,351.0,1.4375,96400.0,NEAR OCEAN +-117.1,32.75,11.0,2393.0,726.0,1905.0,711.0,1.3448,91300.0,NEAR OCEAN +-117.11,32.75,11.0,1607.0,478.0,1384.0,450.0,2.05,100000.0,NEAR OCEAN +-117.11,32.75,21.0,2127.0,658.0,1812.0,603.0,1.6896,100000.0,NEAR OCEAN +-117.11,32.75,18.0,1943.0,587.0,1329.0,522.0,1.7696,103100.0,NEAR OCEAN +-117.09,32.76,29.0,1650.0,496.0,882.0,445.0,2.2287,140000.0,NEAR OCEAN +-117.09,32.76,31.0,1235.0,387.0,816.0,397.0,1.5517,122500.0,NEAR OCEAN +-117.1,32.76,31.0,987.0,267.0,619.0,250.0,2.9286,151800.0,NEAR OCEAN +-117.1,32.75,16.0,2426.0,799.0,1505.0,754.0,1.6444,103400.0,NEAR OCEAN +-117.1,32.75,21.0,2063.0,609.0,1686.0,558.0,1.4828,94800.0,NEAR OCEAN +-117.1,32.75,20.0,2355.0,722.0,1848.0,576.0,2.0036,99200.0,NEAR OCEAN +-117.1,32.75,15.0,2422.0,774.0,2120.0,715.0,1.0617,92400.0,NEAR OCEAN +-117.1,32.75,23.0,1858.0,551.0,1506.0,492.0,1.7446,85200.0,NEAR OCEAN +-117.11,32.75,46.0,695.0,182.0,601.0,195.0,2.4219,90600.0,NEAR OCEAN +-117.11,32.75,20.0,1667.0,469.0,1292.0,445.0,2.0893,101100.0,NEAR OCEAN +-117.11,32.75,34.0,2131.0,594.0,1373.0,562.0,2.113,102100.0,NEAR OCEAN +-117.12,32.75,13.0,2795.0,773.0,1869.0,690.0,2.1767,101800.0,NEAR OCEAN +-117.1,32.74,14.0,2361.0,601.0,1831.0,526.0,1.6102,93400.0,NEAR OCEAN +-117.11,32.74,25.0,2846.0,644.0,2272.0,632.0,2.2,98700.0,NEAR OCEAN +-117.11,32.74,25.0,684.0,190.0,665.0,187.0,2.4524,90300.0,NEAR OCEAN +-117.11,32.74,33.0,1126.0,267.0,621.0,241.0,3.2422,123100.0,NEAR OCEAN +-117.11,32.73,35.0,1689.0,397.0,1135.0,366.0,2.3269,97300.0,NEAR OCEAN +-117.1,32.73,24.0,2927.0,704.0,2005.0,668.0,2.2375,102900.0,NEAR OCEAN +-117.11,32.73,34.0,1096.0,221.0,574.0,223.0,3.8355,126700.0,NEAR OCEAN +-117.11,32.73,27.0,3160.0,627.0,1628.0,612.0,3.8864,132600.0,NEAR OCEAN +-117.09,32.75,30.0,1899.0,546.0,1620.0,493.0,1.6034,84400.0,NEAR OCEAN +-117.09,32.74,23.0,3130.0,779.0,2472.0,744.0,2.32,93200.0,NEAR OCEAN +-117.1,32.74,20.0,3854.0,1046.0,3555.0,966.0,1.6747,100000.0,NEAR OCEAN +-117.1,32.74,30.0,1772.0,500.0,1389.0,447.0,2.3641,94100.0,NEAR OCEAN +-117.1,32.75,11.0,1976.0,548.0,1528.0,512.0,1.4886,89800.0,NEAR OCEAN +-117.08,32.75,20.0,1886.0,586.0,1134.0,525.0,1.5029,100000.0,NEAR OCEAN +-117.08,32.75,16.0,1111.0,328.0,930.0,303.0,1.2347,128100.0,NEAR OCEAN +-117.08,32.75,15.0,1821.0,516.0,1385.0,439.0,2.5101,95300.0,NEAR OCEAN +-117.09,32.75,24.0,1245.0,376.0,1230.0,362.0,1.875,95000.0,NEAR OCEAN +-117.09,32.75,28.0,1220.0,391.0,1286.0,396.0,1.2286,105000.0,NEAR OCEAN +-117.09,32.75,20.0,1701.0,503.0,1482.0,465.0,1.6789,95500.0,NEAR OCEAN +-117.09,32.76,10.0,1922.0,577.0,1595.0,545.0,1.5208,118800.0,NEAR OCEAN +-117.08,32.76,18.0,1704.0,596.0,1639.0,548.0,1.7391,125000.0,NEAR OCEAN +-117.07,32.76,14.0,2523.0,545.0,1297.0,525.0,2.3886,138100.0,NEAR OCEAN +-117.07,32.75,37.0,2690.0,549.0,1219.0,524.0,2.3148,154200.0,NEAR OCEAN +-117.07,32.75,14.0,3073.0,851.0,2000.0,782.0,2.3824,144700.0,NEAR OCEAN +-117.07,32.75,9.0,3464.0,749.0,1687.0,645.0,3.3026,119100.0,NEAR OCEAN +-117.06,32.75,34.0,1917.0,419.0,1181.0,426.0,3.0208,129200.0,NEAR OCEAN +-117.05,32.74,34.0,2178.0,455.0,1193.0,446.0,3.1719,115300.0,NEAR OCEAN +-117.07,32.74,37.0,1042.0,205.0,589.0,208.0,2.6629,116900.0,NEAR OCEAN +-117.07,32.75,31.0,2036.0,501.0,1263.0,442.0,2.5583,120700.0,NEAR OCEAN +-117.08,32.75,20.0,1989.0,508.0,1452.0,462.0,2.0077,118300.0,NEAR OCEAN +-117.08,32.74,26.0,2359.0,622.0,2067.0,581.0,1.8103,124700.0,NEAR OCEAN +-117.09,32.75,19.0,2739.0,707.0,2004.0,622.0,1.6318,117700.0,NEAR OCEAN +-117.09,32.74,42.0,1986.0,472.0,1472.0,475.0,2.1757,110100.0,NEAR OCEAN +-117.08,32.74,33.0,3260.0,673.0,1784.0,666.0,3.5078,126500.0,NEAR OCEAN +-117.08,32.73,36.0,3331.0,643.0,1903.0,622.0,3.6974,122000.0,NEAR OCEAN +-117.07,32.74,38.0,1901.0,392.0,1099.0,406.0,2.7661,113900.0,NEAR OCEAN +-117.08,32.74,35.0,1434.0,253.0,753.0,228.0,2.3812,135100.0,NEAR OCEAN +-117.08,32.73,36.0,1158.0,218.0,619.0,233.0,3.6125,122500.0,NEAR OCEAN +-117.08,32.73,19.0,2935.0,763.0,1953.0,720.0,1.4254,111300.0,NEAR OCEAN +-117.07,32.73,18.0,2968.0,656.0,1149.0,581.0,2.6452,154200.0,NEAR OCEAN +-117.07,32.78,22.0,922.0,240.0,1524.0,235.0,1.6815,218800.0,NEAR OCEAN +-117.09,32.77,31.0,3062.0,,1263.0,539.0,3.0875,291500.0,NEAR OCEAN +-117.08,32.77,31.0,1070.0,155.0,426.0,153.0,6.1628,219200.0,NEAR OCEAN +-117.07,32.77,34.0,2245.0,394.0,1849.0,429.0,3.5446,185500.0,NEAR OCEAN +-117.07,32.77,38.0,3779.0,614.0,1495.0,614.0,4.3529,184000.0,NEAR OCEAN +-117.07,32.76,42.0,1827.0,378.0,880.0,380.0,2.5125,176600.0,NEAR OCEAN +-117.08,32.77,25.0,3911.0,849.0,1580.0,767.0,2.7778,184100.0,NEAR OCEAN +-117.08,32.76,27.0,1221.0,254.0,606.0,259.0,3.0833,155400.0,NEAR OCEAN +-117.09,32.76,31.0,2567.0,624.0,1255.0,582.0,2.5909,159100.0,NEAR OCEAN +-117.08,32.76,20.0,2547.0,785.0,1199.0,643.0,1.7743,140300.0,NEAR OCEAN +-117.04,32.77,21.0,1824.0,447.0,962.0,431.0,2.7826,143800.0,<1H OCEAN +-117.05,32.77,23.0,2556.0,662.0,1200.0,548.0,1.8899,147700.0,NEAR OCEAN +-117.06,32.77,18.0,2269.0,682.0,1329.0,581.0,1.7951,161800.0,NEAR OCEAN +-117.06,32.77,34.0,1730.0,373.0,730.0,350.0,2.0284,161800.0,NEAR OCEAN +-117.07,32.77,38.0,1130.0,228.0,699.0,241.0,2.65,167600.0,NEAR OCEAN +-117.06,32.77,32.0,3888.0,827.0,3868.0,841.0,3.0755,166800.0,NEAR OCEAN +-117.05,32.77,33.0,3535.0,683.0,1568.0,672.0,2.8097,158300.0,NEAR OCEAN +-117.06,32.76,36.0,2785.0,577.0,1275.0,527.0,2.3015,156800.0,NEAR OCEAN +-117.06,32.76,38.0,1549.0,288.0,636.0,278.0,3.2188,150500.0,NEAR OCEAN +-117.05,32.76,46.0,1887.0,359.0,795.0,358.0,3.25,159600.0,NEAR OCEAN +-117.06,32.76,37.0,2356.0,476.0,1231.0,499.0,2.965,155700.0,NEAR OCEAN +-117.06,32.76,24.0,1629.0,587.0,1012.0,488.0,1.7452,156800.0,NEAR OCEAN +-117.05,32.75,36.0,2024.0,,1030.0,390.0,3.8233,139800.0,NEAR OCEAN +-117.06,32.75,34.0,2516.0,611.0,1317.0,594.0,2.2308,125900.0,NEAR OCEAN +-117.05,32.75,35.0,2144.0,388.0,1003.0,383.0,3.0938,137300.0,NEAR OCEAN +-117.07,32.72,18.0,1758.0,286.0,987.0,277.0,4.6875,141800.0,NEAR OCEAN +-117.08,32.72,32.0,2286.0,468.0,1741.0,467.0,3.0446,101900.0,NEAR OCEAN +-117.07,32.71,36.0,2448.0,475.0,1268.0,450.0,2.5682,109100.0,NEAR OCEAN +-117.06,32.73,33.0,3444.0,619.0,1884.0,582.0,3.7891,126700.0,NEAR OCEAN +-117.06,32.72,31.0,2669.0,514.0,1626.0,499.0,3.1923,116900.0,NEAR OCEAN +-117.05,32.72,35.0,1777.0,369.0,1158.0,353.0,3.4107,117000.0,NEAR OCEAN +-117.06,32.71,25.0,2681.0,596.0,1947.0,553.0,2.8964,104300.0,NEAR OCEAN +-117.07,32.71,39.0,2754.0,652.0,2263.0,619.0,2.2454,89600.0,NEAR OCEAN +-117.08,32.7,35.0,1477.0,264.0,852.0,279.0,3.1786,100600.0,NEAR OCEAN +-117.08,32.7,37.0,2176.0,418.0,1301.0,375.0,2.875,98900.0,NEAR OCEAN +-117.08,32.7,36.0,2103.0,390.0,1279.0,392.0,2.4135,97000.0,NEAR OCEAN +-117.06,32.71,21.0,1864.0,388.0,1498.0,389.0,3.8194,125700.0,NEAR OCEAN +-117.06,32.71,11.0,2397.0,523.0,1566.0,514.0,3.8687,145200.0,NEAR OCEAN +-117.08,32.71,27.0,2204.0,598.0,1656.0,521.0,1.4821,86200.0,NEAR OCEAN +-117.07,32.71,26.0,4151.0,823.0,2822.0,697.0,2.8372,123400.0,NEAR OCEAN +-117.07,32.7,14.0,2763.0,456.0,1914.0,465.0,4.1645,143000.0,NEAR OCEAN +-117.07,32.69,20.0,2192.0,406.0,1766.0,393.0,4.0921,135000.0,NEAR OCEAN +-117.06,32.7,12.0,3943.0,737.0,3280.0,751.0,4.112,141400.0,NEAR OCEAN +-117.04,32.71,28.0,5274.0,991.0,3727.0,961.0,3.57,109800.0,NEAR OCEAN +-117.05,32.71,25.0,3292.0,608.0,2266.0,592.0,3.2986,119200.0,NEAR OCEAN +-117.03,32.71,33.0,3126.0,627.0,2300.0,623.0,3.2596,103000.0,NEAR OCEAN +-117.03,32.71,34.0,2328.0,444.0,1684.0,429.0,3.25,99600.0,NEAR OCEAN +-117.02,32.71,20.0,4050.0,745.0,2870.0,761.0,3.7366,121800.0,NEAR OCEAN +-117.02,32.7,22.0,2756.0,516.0,1849.0,486.0,4.1837,125400.0,NEAR OCEAN +-117.02,32.7,18.0,1643.0,283.0,1134.0,269.0,5.1769,133000.0,NEAR OCEAN +-117.02,32.71,30.0,3187.0,592.0,2082.0,631.0,3.5388,118500.0,NEAR OCEAN +-117.01,32.7,25.0,2321.0,398.0,1434.0,386.0,3.5341,120800.0,NEAR OCEAN +-117.05,32.69,8.0,831.0,158.0,740.0,154.0,5.3908,165500.0,NEAR OCEAN +-117.06,32.69,9.0,1520.0,269.0,1250.0,265.0,4.8875,157700.0,NEAR OCEAN +-117.06,32.69,13.0,705.0,149.0,718.0,155.0,4.4375,154900.0,NEAR OCEAN +-117.06,32.69,9.0,521.0,111.0,491.0,110.0,5.1305,158900.0,NEAR OCEAN +-117.03,32.7,19.0,2304.0,572.0,2010.0,556.0,2.2866,109900.0,NEAR OCEAN +-117.04,32.69,27.0,1790.0,356.0,1286.0,347.0,3.5437,115800.0,NEAR OCEAN +-117.04,32.7,7.0,9311.0,1703.0,7302.0,1694.0,4.419,156900.0,NEAR OCEAN +-117.07,32.68,18.0,1475.0,267.0,1149.0,268.0,5.0827,142200.0,NEAR OCEAN +-117.06,32.68,38.0,1481.0,317.0,1080.0,291.0,2.85,125800.0,NEAR OCEAN +-117.06,32.68,36.0,3815.0,796.0,2945.0,728.0,2.0959,125000.0,NEAR OCEAN +-117.05,32.69,21.0,991.0,210.0,695.0,203.0,3.625,144300.0,NEAR OCEAN +-117.06,32.68,41.0,2665.0,515.0,1664.0,512.0,2.375,113500.0,NEAR OCEAN +-117.06,32.67,29.0,4047.0,754.0,2353.0,730.0,4.0505,125000.0,NEAR OCEAN +-117.05,32.68,35.0,3414.0,580.0,1761.0,522.0,3.9922,129800.0,NEAR OCEAN +-117.05,32.67,32.0,4227.0,785.0,2842.0,795.0,3.9646,137800.0,NEAR OCEAN +-117.05,32.68,19.0,1469.0,275.0,1010.0,292.0,3.5664,150400.0,NEAR OCEAN +-117.05,32.67,16.0,2168.0,343.0,1589.0,338.0,5.4863,153800.0,NEAR OCEAN +-117.06,32.66,33.0,3425.0,511.0,1528.0,479.0,5.6889,234600.0,NEAR OCEAN +-117.06,32.66,24.0,2587.0,491.0,1617.0,458.0,3.5066,133400.0,NEAR OCEAN +-117.04,32.66,22.0,3362.0,630.0,1471.0,612.0,4.1442,303900.0,NEAR OCEAN +-117.03,32.67,15.0,5094.0,818.0,2118.0,758.0,5.3505,266600.0,NEAR OCEAN +-117.02,32.68,14.0,3986.0,675.0,2065.0,702.0,5.7192,267400.0,NEAR OCEAN +-117.05,32.69,14.0,1689.0,555.0,1319.0,527.0,3.16,143800.0,NEAR OCEAN +-117.05,32.68,15.0,1828.0,359.0,955.0,248.0,3.2174,165100.0,NEAR OCEAN +-117.04,32.68,13.0,2132.0,425.0,1345.0,432.0,4.0,89300.0,NEAR OCEAN +-117.04,32.68,14.0,1320.0,270.0,943.0,260.0,5.0947,152700.0,NEAR OCEAN +-117.04,32.67,14.0,3464.0,683.0,2139.0,734.0,4.0668,137500.0,NEAR OCEAN +-117.04,32.69,9.0,3417.0,860.0,2521.0,828.0,3.02,158900.0,NEAR OCEAN +-117.04,32.68,9.0,3087.0,609.0,1530.0,556.0,3.775,125000.0,NEAR OCEAN +-117.04,32.68,11.0,1875.0,357.0,1014.0,386.0,4.375,115000.0,NEAR OCEAN +-117.01,32.7,7.0,2327.0,490.0,1304.0,445.0,3.3553,132200.0,NEAR OCEAN +-117.02,32.69,7.0,6055.0,1004.0,3031.0,952.0,4.436,135000.0,NEAR OCEAN +-117.03,32.69,5.0,3201.0,532.0,2061.0,536.0,5.0829,179400.0,NEAR OCEAN +-117.03,32.69,10.0,901.0,163.0,698.0,167.0,4.6648,156100.0,NEAR OCEAN +-117.03,32.69,8.0,2460.0,397.0,1784.0,390.0,4.5662,175500.0,NEAR OCEAN +-117.09,32.71,12.0,3375.0,945.0,2357.0,808.0,1.5,106300.0,NEAR OCEAN +-117.09,32.7,15.0,869.0,217.0,887.0,216.0,1.4583,84200.0,NEAR OCEAN +-117.09,32.7,22.0,2409.0,582.0,1887.0,578.0,1.4089,94200.0,NEAR OCEAN +-117.09,32.69,18.0,1645.0,430.0,1221.0,410.0,1.3269,108000.0,NEAR OCEAN +-117.09,32.69,20.0,1102.0,205.0,852.0,217.0,3.1833,108300.0,NEAR OCEAN +-117.1,32.69,11.0,3071.0,911.0,2812.0,774.0,1.2413,83100.0,NEAR OCEAN +-117.1,32.7,28.0,633.0,137.0,525.0,170.0,3.6042,95600.0,NEAR OCEAN +-117.1,32.7,42.0,2002.0,488.0,1505.0,464.0,1.5057,86300.0,NEAR OCEAN +-117.1,32.71,9.0,1931.0,472.0,1628.0,445.0,2.085,92600.0,NEAR OCEAN +-117.09,32.73,26.0,3114.0,686.0,1948.0,660.0,2.8942,124100.0,NEAR OCEAN +-117.1,32.72,5.0,1615.0,387.0,1094.0,394.0,2.2024,137200.0,NEAR OCEAN +-117.09,32.72,39.0,1273.0,246.0,770.0,242.0,2.0938,102500.0,NEAR OCEAN +-117.09,32.72,33.0,1096.0,240.0,716.0,224.0,1.6944,111800.0,NEAR OCEAN +-117.09,32.73,28.0,3109.0,594.0,1559.0,589.0,3.5789,120300.0,NEAR OCEAN +-117.09,32.71,29.0,2238.0,523.0,2061.0,504.0,2.5559,96800.0,NEAR OCEAN +-117.1,32.71,29.0,3422.0,713.0,2775.0,644.0,1.7075,86900.0,NEAR OCEAN +-117.1,32.71,25.0,939.0,247.0,1003.0,240.0,1.75,87900.0,NEAR OCEAN +-117.11,32.72,25.0,1491.0,348.0,1183.0,316.0,1.9583,88600.0,NEAR OCEAN +-117.11,32.71,30.0,1729.0,457.0,1673.0,460.0,1.7,85900.0,NEAR OCEAN +-117.11,32.7,34.0,2028.0,522.0,1797.0,464.0,1.7402,79400.0,NEAR OCEAN +-117.11,32.7,37.0,2045.0,502.0,1920.0,472.0,1.8125,83300.0,NEAR OCEAN +-117.11,32.7,33.0,1980.0,488.0,1626.0,428.0,1.4856,86400.0,NEAR OCEAN +-117.12,32.7,14.0,819.0,237.0,827.0,237.0,1.3194,90500.0,NEAR OCEAN +-117.12,32.7,36.0,1011.0,253.0,763.0,226.0,1.8187,84100.0,NEAR OCEAN +-117.11,32.71,29.0,1040.0,291.0,1054.0,297.0,1.1818,83200.0,NEAR OCEAN +-117.1,32.69,37.0,1269.0,340.0,1369.0,302.0,2.2102,87200.0,NEAR OCEAN +-117.1,32.69,35.0,1292.0,272.0,1183.0,272.0,2.0547,98000.0,NEAR OCEAN +-117.11,32.69,36.0,1421.0,367.0,1418.0,355.0,1.9425,93400.0,NEAR OCEAN +-117.11,32.69,34.0,1144.0,295.0,1271.0,302.0,2.09,91800.0,NEAR OCEAN +-117.11,32.69,37.0,2395.0,627.0,2489.0,599.0,1.5933,86300.0,NEAR OCEAN +-117.11,32.69,39.0,395.0,159.0,620.0,162.0,2.725,86500.0,NEAR OCEAN +-117.12,32.69,46.0,200.0,77.0,180.0,65.0,1.0658,93800.0,NEAR OCEAN +-117.12,32.69,37.0,1082.0,294.0,1146.0,265.0,2.0673,88500.0,NEAR OCEAN +-117.12,32.7,38.0,818.0,217.0,953.0,231.0,1.0531,65700.0,NEAR OCEAN +-117.12,32.7,37.0,1361.0,348.0,1398.0,328.0,1.1681,78100.0,NEAR OCEAN +-117.13,32.69,36.0,1469.0,400.0,1271.0,340.0,1.043,90100.0,NEAR OCEAN +-117.13,32.7,48.0,786.0,230.0,917.0,231.0,1.875,75600.0,NEAR OCEAN +-117.13,32.7,42.0,1210.0,292.0,945.0,258.0,0.8991,78900.0,NEAR OCEAN +-117.13,32.7,38.0,1445.0,392.0,1286.0,357.0,1.4632,80200.0,NEAR OCEAN +-117.13,32.7,35.0,1179.0,344.0,1372.0,330.0,1.9509,70200.0,NEAR OCEAN +-117.12,32.71,33.0,1256.0,331.0,1315.0,321.0,1.9286,78500.0,NEAR OCEAN +-117.13,32.71,38.0,993.0,246.0,760.0,205.0,1.1563,82700.0,NEAR OCEAN +-117.13,32.71,42.0,1145.0,314.0,1114.0,307.0,1.2614,87500.0,NEAR OCEAN +-117.13,32.71,44.0,1697.0,413.0,1396.0,363.0,1.5474,83300.0,NEAR OCEAN +-117.13,32.72,32.0,2197.0,623.0,1784.0,599.0,1.901,120300.0,NEAR OCEAN +-117.12,32.71,24.0,421.0,101.0,396.0,113.0,0.6433,111300.0,NEAR OCEAN +-117.13,32.72,9.0,2436.0,720.0,1780.0,653.0,1.8299,137500.0,NEAR OCEAN +-117.13,32.72,19.0,1341.0,435.0,1048.0,360.0,1.975,117900.0,NEAR OCEAN +-117.12,32.72,36.0,6096.0,1285.0,3093.0,1229.0,3.37,159100.0,NEAR OCEAN +-117.12,32.73,50.0,2307.0,424.0,887.0,356.0,3.5156,168800.0,NEAR OCEAN +-117.12,32.73,52.0,3976.0,718.0,1750.0,769.0,3.4151,175400.0,NEAR OCEAN +-117.13,32.74,46.0,3355.0,768.0,1457.0,708.0,2.6604,170100.0,NEAR OCEAN +-117.13,32.73,52.0,1148.0,214.0,481.0,215.0,5.454,240900.0,NEAR OCEAN +-117.13,32.73,52.0,2676.0,557.0,1181.0,537.0,3.6058,213100.0,NEAR OCEAN +-117.13,32.74,50.0,1527.0,338.0,728.0,322.0,2.625,203200.0,NEAR OCEAN +-117.13,32.73,43.0,2706.0,667.0,1531.0,614.0,2.1513,145000.0,NEAR OCEAN +-117.13,32.72,43.0,2160.0,504.0,1221.0,452.0,2.4821,140600.0,NEAR OCEAN +-117.13,32.72,52.0,1560.0,307.0,757.0,315.0,2.7083,199100.0,NEAR OCEAN +-117.13,32.73,52.0,1911.0,415.0,777.0,412.0,2.2429,221100.0,NEAR OCEAN +-117.14,32.72,42.0,1558.0,458.0,1227.0,407.0,2.2804,139100.0,NEAR OCEAN +-117.13,32.72,17.0,1285.0,423.0,1208.0,409.0,1.758,126600.0,NEAR OCEAN +-117.14,32.71,34.0,1694.0,455.0,1467.0,425.0,2.1164,139400.0,NEAR OCEAN +-117.14,32.71,32.0,719.0,251.0,894.0,208.0,1.8456,103100.0,NEAR OCEAN +-117.14,32.72,43.0,1073.0,344.0,660.0,279.0,2.0529,168800.0,NEAR OCEAN +-117.14,32.72,45.0,1140.0,310.0,840.0,339.0,1.6156,156300.0,NEAR OCEAN +-117.14,32.72,34.0,2533.0,862.0,2011.0,778.0,2.1199,160400.0,NEAR OCEAN +-117.14,32.71,52.0,1225.0,332.0,955.0,321.0,1.6011,106300.0,NEAR OCEAN +-117.14,32.71,52.0,979.0,314.0,975.0,297.0,1.2375,100000.0,NEAR OCEAN +-117.14,32.71,52.0,800.0,313.0,1337.0,282.0,1.5594,87500.0,NEAR OCEAN +-117.14,32.71,52.0,500.0,,480.0,108.0,1.8696,91100.0,NEAR OCEAN +-117.13,32.71,37.0,1220.0,325.0,1472.0,323.0,1.825,81500.0,NEAR OCEAN +-117.13,32.71,35.0,614.0,180.0,691.0,164.0,1.6953,81300.0,NEAR OCEAN +-117.14,32.71,43.0,966.0,255.0,857.0,208.0,1.2841,72000.0,NEAR OCEAN +-117.14,32.71,39.0,1647.0,478.0,2176.0,479.0,1.7642,82900.0,NEAR OCEAN +-117.14,32.7,32.0,1280.0,353.0,1335.0,330.0,1.6023,77300.0,NEAR OCEAN +-117.13,32.7,35.0,365.0,98.0,463.0,112.0,2.5588,78800.0,NEAR OCEAN +-117.14,32.7,43.0,1126.0,289.0,1132.0,294.0,2.1875,87000.0,NEAR OCEAN +-117.14,32.7,40.0,1227.0,330.0,1199.0,316.0,1.2188,92500.0,NEAR OCEAN +-117.14,32.7,36.0,633.0,148.0,557.0,139.0,1.5729,82700.0,NEAR OCEAN +-117.14,32.7,48.0,510.0,180.0,545.0,132.0,1.8008,86500.0,NEAR OCEAN +-117.14,32.7,44.0,658.0,218.0,869.0,212.0,1.9338,89400.0,NEAR OCEAN +-117.14,32.7,47.0,552.0,161.0,593.0,174.0,0.9589,90000.0,NEAR OCEAN +-117.15,32.7,50.0,475.0,172.0,483.0,120.0,1.3657,162500.0,NEAR OCEAN +-117.15,32.71,52.0,402.0,183.0,557.0,172.0,1.3125,87500.0,NEAR OCEAN +-117.15,32.7,52.0,458.0,148.0,1283.0,166.0,1.2863,86300.0,NEAR OCEAN +-117.15,32.71,52.0,217.0,82.0,531.0,93.0,1.6607,137500.0,NEAR OCEAN +-117.15,32.72,52.0,344.0,177.0,460.0,147.0,1.2292,137500.0,NEAR OCEAN +-117.16,32.72,52.0,788.0,463.0,805.0,391.0,0.9142,162500.0,NEAR OCEAN +-117.16,32.71,52.0,845.0,451.0,1230.0,375.0,1.0918,22500.0,NEAR OCEAN +-117.16,32.71,5.0,2508.0,827.0,2066.0,761.0,1.3092,325000.0,NEAR OCEAN +-117.17,32.71,7.0,2493.0,693.0,951.0,641.0,4.2375,205000.0,NEAR OCEAN +-117.17,32.71,39.0,311.0,181.0,206.0,113.0,0.7685,187500.0,NEAR OCEAN +-117.14,32.73,26.0,450.0,132.0,317.0,109.0,4.0,137500.0,NEAR OCEAN +-117.15,32.72,51.0,1321.0,,781.0,499.0,1.3071,250000.0,NEAR OCEAN +-117.16,32.72,24.0,1232.0,663.0,1184.0,626.0,1.0391,162500.0,NEAR OCEAN +-117.16,32.73,52.0,1218.0,471.0,821.0,429.0,1.9597,200000.0,NEAR OCEAN +-117.16,32.72,27.0,1245.0,471.0,653.0,451.0,1.2668,225000.0,NEAR OCEAN +-117.17,32.73,52.0,408.0,143.0,313.0,143.0,1.815,116700.0,NEAR OCEAN +-117.17,32.72,44.0,626.0,256.0,572.0,229.0,1.5909,262500.0,NEAR OCEAN +-117.16,32.73,52.0,1682.0,617.0,873.0,534.0,2.0972,112500.0,NEAR OCEAN +-117.16,32.73,52.0,1863.0,559.0,906.0,493.0,1.9203,195800.0,NEAR OCEAN +-117.17,32.73,52.0,1578.0,487.0,879.0,446.0,2.4069,215000.0,NEAR OCEAN +-117.16,32.74,49.0,1815.0,495.0,601.0,410.0,3.0571,418800.0,NEAR OCEAN +-117.16,32.74,43.0,1437.0,406.0,692.0,379.0,3.1979,466700.0,NEAR OCEAN +-117.17,32.74,39.0,3803.0,806.0,1567.0,775.0,3.7039,361500.0,NEAR OCEAN +-117.17,32.74,38.0,5054.0,1168.0,2366.0,1103.0,2.9422,289400.0,NEAR OCEAN +-117.17,32.73,52.0,55.0,18.0,65.0,22.0,1.6591,112500.0,NEAR OCEAN +-117.2,32.76,40.0,581.0,157.0,298.0,156.0,2.4,255000.0,NEAR OCEAN +-117.19,32.75,33.0,1115.0,316.0,583.0,269.0,2.5882,258300.0,NEAR OCEAN +-117.18,32.74,20.0,1165.0,269.0,459.0,244.0,3.175,191700.0,NEAR OCEAN +-117.19,32.75,52.0,25.0,5.0,13.0,5.0,0.536,162500.0,NEAR OCEAN +-117.21,32.75,15.0,1716.0,702.0,914.0,672.0,1.0612,300000.0,NEAR OCEAN +-117.21,32.74,45.0,3025.0,583.0,1980.0,550.0,2.2982,87500.0,NEAR OCEAN +-117.21,32.75,27.0,2072.0,534.0,1118.0,510.0,2.8043,262100.0,NEAR OCEAN +-117.22,32.75,24.0,3914.0,985.0,2147.0,874.0,2.9735,225000.0,NEAR OCEAN +-117.22,32.75,26.0,696.0,185.0,384.0,184.0,2.6121,125000.0,NEAR OCEAN +-117.23,32.75,23.0,2415.0,653.0,1275.0,596.0,3.1389,101800.0,NEAR OCEAN +-117.22,32.75,26.0,617.0,112.0,251.0,110.0,3.8036,162000.0,NEAR OCEAN +-117.23,32.75,11.0,4304.0,1245.0,1960.0,1105.0,3.3456,159800.0,NEAR OCEAN +-117.21,32.74,52.0,1245.0,174.0,468.0,193.0,6.9322,334500.0,NEAR OCEAN +-117.22,32.74,52.0,1283.0,173.0,436.0,190.0,7.4029,345700.0,NEAR OCEAN +-117.22,32.74,52.0,1260.0,202.0,555.0,209.0,7.2758,345200.0,NEAR OCEAN +-117.22,32.74,41.0,2621.0,542.0,1074.0,471.0,2.4016,287500.0,NEAR OCEAN +-117.22,32.75,34.0,6001.0,1111.0,2654.0,1072.0,4.5878,291000.0,NEAR OCEAN +-117.22,32.73,38.0,3966.0,768.0,1640.0,729.0,3.8409,291400.0,NEAR OCEAN +-117.23,32.73,35.0,2914.0,683.0,1562.0,638.0,2.5259,240200.0,NEAR OCEAN +-117.23,32.73,44.0,1168.0,263.0,509.0,256.0,2.7273,269700.0,NEAR OCEAN +-117.23,32.72,43.0,952.0,209.0,392.0,210.0,2.1635,244200.0,NEAR OCEAN +-117.23,32.74,44.0,1404.0,229.0,513.0,217.0,4.1806,263800.0,NEAR OCEAN +-117.24,32.74,43.0,2216.0,375.0,918.0,388.0,5.5289,297700.0,NEAR OCEAN +-117.24,32.73,37.0,2260.0,354.0,809.0,351.0,5.9113,388300.0,NEAR OCEAN +-117.23,32.73,36.0,2052.0,287.0,699.0,265.0,7.5557,441400.0,NEAR OCEAN +-117.23,32.72,38.0,2827.0,581.0,972.0,558.0,3.2361,500001.0,NEAR OCEAN +-117.24,32.71,32.0,4164.0,701.0,1277.0,607.0,6.6661,500001.0,NEAR OCEAN +-117.24,32.72,39.0,3089.0,431.0,1175.0,432.0,7.5925,466700.0,NEAR OCEAN +-117.24,32.72,39.0,3819.0,594.0,1361.0,583.0,6.6013,396400.0,NEAR OCEAN +-117.25,32.73,38.0,1840.0,291.0,633.0,283.0,4.9125,383600.0,NEAR OCEAN +-117.25,32.72,36.0,2632.0,450.0,2038.0,419.0,6.5319,345800.0,NEAR OCEAN +-117.25,32.72,33.0,1677.0,228.0,629.0,239.0,6.597,496400.0,NEAR OCEAN +-117.25,32.73,37.0,2224.0,331.0,821.0,341.0,6.3331,400000.0,NEAR OCEAN +-117.28,32.73,44.0,1934.0,325.0,783.0,316.0,4.8684,358600.0,NEAR OCEAN +-117.28,32.74,33.0,4168.0,1112.0,1785.0,984.0,2.7515,247700.0,NEAR OCEAN +-117.25,32.74,36.0,3548.0,956.0,1648.0,866.0,2.6962,288200.0,NEAR OCEAN +-117.25,32.74,36.0,1830.0,430.0,755.0,419.0,2.9904,286800.0,NEAR OCEAN +-117.25,32.74,40.0,2186.0,549.0,953.0,515.0,2.8007,257100.0,NEAR OCEAN +-117.24,32.74,44.0,1686.0,285.0,712.0,298.0,4.0268,298600.0,NEAR OCEAN +-117.24,32.74,44.0,1488.0,259.0,667.0,281.0,4.0862,321800.0,NEAR OCEAN +-117.25,32.73,39.0,1688.0,256.0,635.0,272.0,4.5938,367400.0,NEAR OCEAN +-117.23,32.75,5.0,1824.0,,892.0,426.0,3.4286,137500.0,NEAR OCEAN +-117.23,32.75,21.0,2050.0,608.0,1131.0,550.0,2.4779,165000.0,NEAR OCEAN +-117.23,32.74,16.0,735.0,139.0,299.0,134.0,4.6354,179200.0,NEAR OCEAN +-117.23,32.74,16.0,1953.0,404.0,798.0,385.0,4.8167,169800.0,NEAR OCEAN +-117.23,32.74,35.0,2615.0,525.0,1312.0,547.0,4.1339,238200.0,NEAR OCEAN +-117.24,32.74,45.0,1718.0,293.0,757.0,329.0,4.05,284900.0,NEAR OCEAN +-117.24,32.75,36.0,2831.0,669.0,1279.0,660.0,2.9896,252700.0,NEAR OCEAN +-117.24,32.75,36.0,1856.0,475.0,822.0,416.0,2.3042,220600.0,NEAR OCEAN +-117.24,32.75,41.0,1989.0,514.0,1015.0,489.0,2.79,226000.0,NEAR OCEAN +-117.25,32.74,36.0,1240.0,310.0,577.0,319.0,2.6625,248200.0,NEAR OCEAN +-117.25,32.75,32.0,3551.0,1037.0,1731.0,935.0,2.2017,208300.0,NEAR OCEAN +-117.25,32.75,36.0,1929.0,526.0,974.0,491.0,1.7622,205800.0,NEAR OCEAN +-117.24,32.75,33.0,1980.0,614.0,1057.0,567.0,2.2042,231300.0,NEAR OCEAN +-117.25,32.75,37.0,1189.0,377.0,645.0,377.0,2.4672,216700.0,NEAR OCEAN +-117.28,32.75,34.0,981.0,313.0,508.0,304.0,2.2328,266700.0,NEAR OCEAN +-117.25,32.79,37.0,1467.0,442.0,651.0,354.0,2.375,340400.0,NEAR OCEAN +-117.25,32.79,43.0,906.0,240.0,458.0,205.0,1.8365,328600.0,NEAR OCEAN +-117.25,32.78,36.0,1527.0,427.0,710.0,312.0,2.7857,291700.0,NEAR OCEAN +-117.25,32.78,21.0,1479.0,484.0,658.0,384.0,2.45,350000.0,NEAR OCEAN +-117.28,32.77,38.0,1267.0,340.0,442.0,250.0,4.3403,500000.0,NEAR OCEAN +-117.25,32.77,32.0,2021.0,524.0,973.0,485.0,3.18,362500.0,NEAR OCEAN +-117.25,32.77,35.0,2494.0,690.0,1126.0,624.0,4.0313,385300.0,NEAR OCEAN +-117.25,32.76,38.0,2331.0,493.0,836.0,433.0,4.9125,452600.0,NEAR OCEAN +-117.22,32.78,22.0,2020.0,466.0,1010.0,429.0,3.4527,175000.0,NEAR OCEAN +-117.23,32.79,23.0,2578.0,665.0,989.0,622.0,3.5484,238000.0,NEAR OCEAN +-117.23,32.79,28.0,2453.0,648.0,1082.0,617.0,3.625,266700.0,NEAR OCEAN +-117.23,32.78,35.0,1649.0,355.0,746.0,360.0,4.6293,356500.0,NEAR OCEAN +-117.24,32.78,44.0,2172.0,431.0,892.0,420.0,4.1742,342200.0,NEAR OCEAN +-117.24,32.79,17.0,1149.0,266.0,403.0,228.0,4.1652,241700.0,NEAR OCEAN +-117.24,32.79,18.0,2539.0,616.0,964.0,526.0,3.4306,275000.0,NEAR OCEAN +-117.24,32.79,20.0,961.0,278.0,525.0,254.0,3.1838,245800.0,NEAR OCEAN +-117.24,32.79,25.0,2135.0,691.0,566.0,320.0,2.6902,212500.0,NEAR OCEAN +-117.24,32.79,18.0,1741.0,602.0,508.0,283.0,3.2625,193800.0,NEAR OCEAN +-117.21,32.8,19.0,786.0,282.0,525.0,229.0,1.7273,137500.0,NEAR OCEAN +-117.22,32.8,23.0,1906.0,525.0,1029.0,491.0,2.93,183300.0,NEAR OCEAN +-117.23,32.8,22.0,2981.0,873.0,1751.0,745.0,2.3482,190600.0,NEAR OCEAN +-117.23,32.8,27.0,1297.0,355.0,776.0,337.0,2.4643,244400.0,NEAR OCEAN +-117.23,32.81,28.0,1508.0,263.0,996.0,267.0,3.8026,270000.0,NEAR OCEAN +-117.22,32.81,21.0,1703.0,335.0,902.0,369.0,3.7813,362500.0,NEAR OCEAN +-117.25,32.8,37.0,1096.0,260.0,490.0,267.0,3.2663,270600.0,NEAR OCEAN +-117.25,32.8,32.0,1601.0,468.0,731.0,429.0,2.5568,258300.0,NEAR OCEAN +-117.25,32.8,30.0,2061.0,631.0,1007.0,577.0,2.5813,253100.0,NEAR OCEAN +-117.25,32.8,31.0,2182.0,630.0,1069.0,599.0,2.9781,212500.0,NEAR OCEAN +-117.25,32.79,27.0,848.0,300.0,455.0,298.0,3.0774,275000.0,NEAR OCEAN +-117.25,32.79,25.0,1627.0,375.0,735.0,378.0,3.6429,317100.0,NEAR OCEAN +-117.28,32.8,20.0,1838.0,540.0,615.0,325.0,3.5486,193800.0,NEAR OCEAN +-117.23,32.8,21.0,2429.0,579.0,1011.0,538.0,3.225,229400.0,NEAR OCEAN +-117.23,32.8,31.0,1403.0,388.0,724.0,371.0,2.6403,216100.0,NEAR OCEAN +-117.23,32.8,28.0,3379.0,918.0,1849.0,849.0,3.0293,241700.0,NEAR OCEAN +-117.24,32.8,26.0,3433.0,873.0,1492.0,798.0,2.9258,234800.0,NEAR OCEAN +-117.24,32.8,28.0,1072.0,331.0,692.0,321.0,2.1357,187500.0,NEAR OCEAN +-117.24,32.8,18.0,2205.0,661.0,874.0,580.0,3.8018,112500.0,NEAR OCEAN +-117.24,32.8,19.0,1863.0,497.0,868.0,503.0,2.288,210000.0,NEAR OCEAN +-117.24,32.8,30.0,1917.0,462.0,828.0,437.0,2.4671,276300.0,NEAR OCEAN +-117.24,32.8,29.0,3376.0,882.0,1513.0,843.0,3.101,238200.0,NEAR OCEAN +-117.25,32.81,32.0,2402.0,551.0,1020.0,532.0,3.3942,307400.0,NEAR OCEAN +-117.25,32.8,35.0,2281.0,506.0,1005.0,496.0,4.2296,275000.0,NEAR OCEAN +-117.25,32.8,26.0,2442.0,659.0,1134.0,624.0,3.3274,295500.0,NEAR OCEAN +-117.26,32.81,25.0,2076.0,586.0,1060.0,554.0,2.8421,227800.0,NEAR OCEAN +-117.26,32.81,30.0,1328.0,346.0,577.0,328.0,2.3284,290600.0,NEAR OCEAN +-117.26,32.81,37.0,1616.0,421.0,650.0,395.0,2.92,326500.0,NEAR OCEAN +-117.29,32.81,35.0,1878.0,308.0,598.0,257.0,6.9553,500001.0,NEAR OCEAN +-117.26,32.8,30.0,1446.0,385.0,650.0,344.0,3.744,450000.0,NEAR OCEAN +-117.24,32.81,33.0,1588.0,289.0,683.0,301.0,5.4103,332400.0,NEAR OCEAN +-117.24,32.81,34.0,2420.0,391.0,917.0,392.0,6.5881,394400.0,NEAR OCEAN +-117.25,32.81,39.0,1846.0,350.0,765.0,329.0,3.9187,311900.0,NEAR OCEAN +-117.27,32.84,34.0,1655.0,450.0,870.0,411.0,3.2109,376000.0,NEAR OCEAN +-117.28,32.84,41.0,1420.0,338.0,640.0,314.0,2.9306,360300.0,NEAR OCEAN +-117.27,32.83,39.0,1877.0,426.0,805.0,409.0,3.875,410000.0,NEAR OCEAN +-117.28,32.83,34.0,2392.0,653.0,933.0,619.0,3.7306,500000.0,NEAR OCEAN +-117.31,32.83,38.0,2367.0,480.0,891.0,428.0,4.1477,500001.0,NEAR OCEAN +-117.27,32.82,35.0,2908.0,595.0,1068.0,529.0,4.1793,500001.0,NEAR OCEAN +-117.27,32.82,42.0,2820.0,488.0,1175.0,500.0,4.5083,405200.0,NEAR OCEAN +-117.31,32.82,42.0,2785.0,389.0,833.0,333.0,11.3074,500001.0,NEAR OCEAN +-117.27,32.85,34.0,2105.0,444.0,780.0,406.0,2.3187,488900.0,NEAR OCEAN +-117.28,32.84,21.0,2455.0,660.0,1015.0,597.0,3.7596,381300.0,NEAR OCEAN +-117.27,32.85,26.0,1373.0,,608.0,268.0,4.425,475000.0,NEAR OCEAN +-117.3,32.85,28.0,2334.0,694.0,770.0,552.0,3.1324,500001.0,NEAR OCEAN +-117.23,32.81,24.0,3271.0,508.0,1496.0,482.0,5.9359,422200.0,NEAR OCEAN +-117.23,32.81,22.0,3205.0,429.0,1083.0,410.0,8.1844,406300.0,NEAR OCEAN +-117.24,32.82,20.0,2467.0,332.0,731.0,335.0,7.2559,392300.0,NEAR OCEAN +-117.25,32.84,19.0,1759.0,214.0,659.0,195.0,10.7751,500001.0,NEAR OCEAN +-117.26,32.85,30.0,3652.0,499.0,978.0,462.0,8.2374,500001.0,NEAR OCEAN +-117.25,32.83,17.0,2075.0,262.0,704.0,241.0,10.9529,500001.0,NEAR OCEAN +-117.27,32.84,26.0,3940.0,657.0,1180.0,600.0,6.1025,500001.0,NEAR OCEAN +-117.23,32.88,18.0,5566.0,1465.0,6303.0,1458.0,1.858,205000.0,NEAR OCEAN +-117.22,32.85,26.0,1647.0,261.0,694.0,259.0,4.6875,274400.0,NEAR OCEAN +-117.22,32.84,19.0,2691.0,347.0,1154.0,366.0,8.051,363600.0,NEAR OCEAN +-117.23,32.85,25.0,4229.0,601.0,1634.0,574.0,6.3955,316700.0,NEAR OCEAN +-117.21,32.86,24.0,3596.0,494.0,1573.0,492.0,6.5382,326000.0,NEAR OCEAN +-117.21,32.86,26.0,1352.0,202.0,654.0,217.0,5.3693,260700.0,NEAR OCEAN +-117.21,32.85,15.0,2593.0,521.0,901.0,456.0,4.2065,277800.0,NEAR OCEAN +-117.21,32.85,26.0,2012.0,315.0,872.0,335.0,5.4067,277500.0,NEAR OCEAN +-117.24,32.83,18.0,3109.0,501.0,949.0,368.0,7.4351,445700.0,NEAR OCEAN +-117.25,32.82,19.0,5255.0,762.0,1773.0,725.0,7.8013,474000.0,NEAR OCEAN +-117.25,32.82,23.0,6139.0,826.0,2036.0,807.0,9.5245,500001.0,NEAR OCEAN +-117.26,32.83,24.0,1663.0,199.0,578.0,187.0,10.7721,500001.0,NEAR OCEAN +-117.26,32.82,34.0,5846.0,785.0,1817.0,747.0,8.496,500001.0,NEAR OCEAN +-117.27,32.83,35.0,1420.0,193.0,469.0,177.0,8.0639,500001.0,NEAR OCEAN +-117.29,32.92,25.0,2355.0,381.0,823.0,358.0,6.8322,500001.0,NEAR OCEAN +-117.25,32.86,30.0,1670.0,219.0,606.0,202.0,12.4429,500001.0,NEAR OCEAN +-117.25,32.86,25.0,2911.0,533.0,1137.0,499.0,5.1023,500001.0,NEAR OCEAN +-117.25,32.86,27.0,2530.0,469.0,594.0,326.0,7.2821,500001.0,NEAR OCEAN +-117.26,32.85,42.0,1761.0,329.0,480.0,255.0,5.3787,500001.0,NEAR OCEAN +-117.24,32.85,18.0,3117.0,475.0,904.0,368.0,6.7587,388500.0,NEAR OCEAN +-117.24,32.85,22.0,3479.0,448.0,1252.0,440.0,10.0707,500001.0,NEAR OCEAN +-117.19,32.86,18.0,4231.0,728.0,2030.0,720.0,6.1805,272400.0,NEAR OCEAN +-117.19,32.86,19.0,3716.0,563.0,1788.0,587.0,5.2113,267400.0,NEAR OCEAN +-117.2,32.85,22.0,3501.0,631.0,1297.0,581.0,4.7891,295300.0,NEAR OCEAN +-117.2,32.85,26.0,2298.0,549.0,980.0,555.0,2.4207,213500.0,NEAR OCEAN +-117.19,32.85,15.0,2895.0,498.0,1164.0,443.0,5.102,417500.0,NEAR OCEAN +-117.23,32.87,15.0,2290.0,662.0,1034.0,594.0,3.0104,204200.0,NEAR OCEAN +-117.23,32.86,16.0,1675.0,354.0,604.0,332.0,5.2326,188300.0,NEAR OCEAN +-117.23,32.86,15.0,1199.0,301.0,510.0,296.0,3.6083,180100.0,NEAR OCEAN +-117.23,32.86,15.0,1703.0,320.0,587.0,282.0,5.0855,209800.0,NEAR OCEAN +-117.23,32.86,16.0,1200.0,468.0,648.0,443.0,3.045,100000.0,NEAR OCEAN +-117.23,32.87,11.0,3123.0,740.0,1223.0,634.0,5.417,196800.0,NEAR OCEAN +-117.21,32.86,16.0,2800.0,566.0,1267.0,518.0,3.2794,148600.0,NEAR OCEAN +-117.22,32.87,14.0,3512.0,807.0,1835.0,792.0,3.35,171000.0,NEAR OCEAN +-117.22,32.86,4.0,16289.0,4585.0,7604.0,4176.0,3.6287,280800.0,NEAR OCEAN +-117.22,32.87,5.0,3511.0,1008.0,1599.0,918.0,3.8542,176600.0,NEAR OCEAN +-117.21,32.89,14.0,3114.0,773.0,1592.0,776.0,3.3176,156100.0,NEAR OCEAN +-117.2,32.86,4.0,4308.0,1095.0,1923.0,932.0,3.9356,267000.0,NEAR OCEAN +-117.21,32.87,12.0,1428.0,303.0,528.0,269.0,4.1429,254400.0,NEAR OCEAN +-117.15,32.91,15.0,1613.0,303.0,702.0,240.0,4.875,169300.0,<1H OCEAN +-117.15,32.91,14.0,1259.0,238.0,889.0,247.0,4.9464,174800.0,<1H OCEAN +-117.16,32.91,5.0,1619.0,272.0,1063.0,296.0,6.0891,214600.0,<1H OCEAN +-117.15,32.91,10.0,2349.0,431.0,1598.0,435.0,4.8229,183200.0,<1H OCEAN +-117.15,32.9,12.0,1681.0,381.0,1050.0,362.0,4.2008,176100.0,<1H OCEAN +-117.16,32.89,5.0,8576.0,1952.0,5006.0,1827.0,4.3598,189100.0,<1H OCEAN +-117.12,32.91,8.0,3405.0,961.0,1742.0,918.0,2.8728,114600.0,<1H OCEAN +-117.13,32.91,15.0,1450.0,266.0,747.0,290.0,3.6111,196300.0,<1H OCEAN +-117.13,32.91,16.0,3230.0,579.0,1825.0,576.0,4.2969,151200.0,<1H OCEAN +-117.13,32.91,16.0,2715.0,581.0,1619.0,584.0,4.0,154700.0,<1H OCEAN +-117.14,32.91,14.0,3014.0,710.0,2165.0,705.0,3.7837,160300.0,<1H OCEAN +-117.14,32.9,16.0,3217.0,,2054.0,687.0,4.2234,162100.0,<1H OCEAN +-117.13,32.9,15.0,2785.0,644.0,1798.0,630.0,3.7156,175200.0,<1H OCEAN +-117.12,32.9,14.0,3249.0,937.0,1929.0,838.0,2.8588,92500.0,<1H OCEAN +-117.12,32.9,13.0,1743.0,363.0,854.0,353.0,4.6667,138200.0,<1H OCEAN +-117.13,32.92,16.0,2173.0,399.0,1460.0,393.0,4.2614,169600.0,<1H OCEAN +-117.13,32.92,17.0,1481.0,315.0,1002.0,300.0,3.6196,163400.0,<1H OCEAN +-117.14,32.92,7.0,1308.0,418.0,766.0,390.0,3.2151,106300.0,<1H OCEAN +-117.14,32.92,6.0,3069.0,750.0,1541.0,736.0,3.814,132500.0,<1H OCEAN +-117.14,32.92,15.0,3242.0,595.0,1936.0,593.0,4.9706,184700.0,<1H OCEAN +-117.13,32.92,16.0,1580.0,241.0,917.0,261.0,4.7266,191100.0,<1H OCEAN +-117.13,32.92,16.0,1565.0,257.0,893.0,239.0,5.5036,192300.0,<1H OCEAN +-117.13,32.94,15.0,4846.0,825.0,2797.0,823.0,4.9375,180400.0,<1H OCEAN +-117.13,32.93,16.0,2918.0,444.0,1697.0,444.0,5.3062,195500.0,<1H OCEAN +-117.14,32.93,14.0,1946.0,463.0,1205.0,390.0,4.2109,171200.0,<1H OCEAN +-117.14,32.93,12.0,1474.0,364.0,1009.0,372.0,4.0521,166700.0,<1H OCEAN +-117.14,32.93,16.0,2412.0,419.0,1612.0,422.0,4.5086,171100.0,<1H OCEAN +-117.12,32.93,7.0,1427.0,243.0,927.0,239.0,5.3625,218900.0,<1H OCEAN +-117.15,32.93,16.0,2718.0,438.0,1515.0,431.0,5.1433,185300.0,<1H OCEAN +-117.14,32.92,15.0,1558.0,314.0,949.0,332.0,5.2864,174400.0,<1H OCEAN +-117.15,32.92,16.0,1972.0,402.0,1377.0,413.0,4.4615,168300.0,<1H OCEAN +-117.15,32.92,16.0,2366.0,392.0,1482.0,407.0,4.9024,182900.0,<1H OCEAN +-117.15,32.92,16.0,2969.0,514.0,1594.0,465.0,4.5221,168300.0,<1H OCEAN +-117.18,32.92,4.0,15025.0,2616.0,7560.0,2392.0,5.196,210700.0,<1H OCEAN +-117.25,32.96,18.0,4773.0,743.0,1970.0,716.0,6.6199,406200.0,NEAR OCEAN +-117.26,32.95,15.0,1036.0,149.0,395.0,157.0,5.8343,500001.0,NEAR OCEAN +-117.26,32.95,15.0,1882.0,233.0,704.0,219.0,6.9794,500001.0,NEAR OCEAN +-117.25,32.94,16.0,4755.0,807.0,1829.0,756.0,6.7694,425900.0,NEAR OCEAN +-117.25,32.94,15.0,1804.0,339.0,673.0,296.0,5.9806,370500.0,NEAR OCEAN +-117.24,32.95,18.0,1591.0,268.0,547.0,243.0,5.9547,329300.0,NEAR OCEAN +-117.24,32.94,12.0,2165.0,437.0,792.0,386.0,5.2648,294400.0,NEAR OCEAN +-117.13,32.98,5.0,2276.0,311.0,1158.0,317.0,6.4321,271900.0,<1H OCEAN +-117.13,32.97,10.0,3486.0,469.0,1700.0,483.0,6.4696,249500.0,<1H OCEAN +-117.18,32.95,4.0,19001.0,2688.0,8980.0,2441.0,6.3237,260900.0,<1H OCEAN +-117.14,32.96,12.0,5949.0,799.0,2936.0,781.0,6.3721,241500.0,<1H OCEAN +-117.13,32.96,15.0,2267.0,292.0,1180.0,289.0,6.712,240200.0,<1H OCEAN +-117.24,32.98,4.0,6423.0,1042.0,2607.0,983.0,7.6348,337000.0,NEAR OCEAN +-117.21,32.96,3.0,6251.0,988.0,2330.0,893.0,8.4355,467600.0,NEAR OCEAN +-117.22,32.95,4.0,18123.0,3173.0,7301.0,2964.0,6.357,322500.0,NEAR OCEAN +-117.22,32.83,34.0,2936.0,597.0,1512.0,571.0,3.7841,176900.0,NEAR OCEAN +-117.22,32.83,31.0,3958.0,727.0,1924.0,728.0,5.4605,190200.0,NEAR OCEAN +-117.22,32.83,17.0,1124.0,187.0,553.0,205.0,5.7451,237300.0,NEAR OCEAN +-117.22,32.83,31.0,2558.0,512.0,1164.0,492.0,3.4318,200400.0,NEAR OCEAN +-117.22,32.82,35.0,756.0,135.0,423.0,136.0,3.5234,183900.0,NEAR OCEAN +-117.2,32.84,34.0,3353.0,544.0,1583.0,571.0,4.55,187700.0,NEAR OCEAN +-117.2,32.84,32.0,2033.0,394.0,989.0,389.0,3.2583,181400.0,NEAR OCEAN +-117.21,32.84,34.0,2158.0,366.0,1046.0,335.0,4.5402,182100.0,NEAR OCEAN +-117.2,32.83,36.0,1089.0,240.0,623.0,226.0,2.5909,176000.0,NEAR OCEAN +-117.21,32.83,36.0,1475.0,328.0,806.0,327.0,3.5078,166000.0,NEAR OCEAN +-117.21,32.83,28.0,3241.0,533.0,1334.0,513.0,4.1806,199600.0,NEAR OCEAN +-117.21,32.83,35.0,2259.0,501.0,1340.0,511.0,3.4482,162500.0,NEAR OCEAN +-117.21,32.81,33.0,4773.0,873.0,1954.0,845.0,4.3862,184800.0,NEAR OCEAN +-117.21,32.82,31.0,2035.0,383.0,866.0,360.0,3.8529,212000.0,NEAR OCEAN +-117.21,32.81,27.0,1318.0,216.0,495.0,191.0,5.2837,283800.0,NEAR OCEAN +-117.22,32.82,22.0,3738.0,795.0,1476.0,728.0,3.7963,303100.0,NEAR OCEAN +-117.22,32.81,24.0,730.0,196.0,335.0,203.0,3.5078,362500.0,NEAR OCEAN +-117.2,32.83,35.0,1377.0,350.0,792.0,313.0,2.8472,161400.0,NEAR OCEAN +-117.2,32.82,35.0,1217.0,220.0,643.0,237.0,3.9464,171600.0,NEAR OCEAN +-117.2,32.82,35.0,2772.0,537.0,1392.0,521.0,3.337,172300.0,NEAR OCEAN +-117.19,32.82,34.0,3850.0,608.0,1619.0,602.0,5.0465,208200.0,NEAR OCEAN +-117.19,32.82,35.0,1074.0,180.0,442.0,173.0,5.253,204000.0,NEAR OCEAN +-117.19,32.82,35.0,2197.0,353.0,945.0,357.0,4.9219,192900.0,NEAR OCEAN +-117.18,32.84,31.0,3064.0,575.0,1476.0,549.0,3.6667,175900.0,NEAR OCEAN +-117.18,32.84,30.0,2290.0,523.0,1272.0,472.0,3.5606,165100.0,NEAR OCEAN +-117.18,32.84,32.0,1351.0,237.0,823.0,269.0,4.2768,167800.0,NEAR OCEAN +-117.19,32.84,30.0,2492.0,406.0,1250.0,431.0,5.5277,197100.0,NEAR OCEAN +-117.19,32.84,35.0,2263.0,427.0,1001.0,408.0,3.875,172000.0,NEAR OCEAN +-117.18,32.83,23.0,2105.0,525.0,1218.0,484.0,3.375,184100.0,NEAR OCEAN +-117.19,32.83,30.0,2288.0,448.0,1240.0,469.0,4.0114,169800.0,NEAR OCEAN +-117.19,32.83,30.0,3225.0,555.0,1601.0,532.0,4.3317,173300.0,NEAR OCEAN +-117.17,32.83,24.0,3541.0,530.0,1591.0,530.0,5.3538,212500.0,NEAR OCEAN +-117.17,32.82,24.0,1623.0,417.0,911.0,397.0,2.7401,198100.0,NEAR OCEAN +-117.17,32.82,21.0,2869.0,596.0,1471.0,577.0,3.0375,197600.0,NEAR OCEAN +-117.18,32.83,27.0,2346.0,399.0,1105.0,373.0,4.2708,182800.0,NEAR OCEAN +-117.18,32.83,31.0,1772.0,353.0,1090.0,350.0,3.9265,162000.0,NEAR OCEAN +-117.16,32.82,28.0,2291.0,371.0,1098.0,382.0,4.6875,188000.0,NEAR OCEAN +-117.17,32.81,26.0,2424.0,388.0,974.0,375.0,4.739,184100.0,NEAR OCEAN +-117.17,32.81,26.0,788.0,127.0,346.0,125.0,5.0603,185700.0,NEAR OCEAN +-117.18,32.81,19.0,6823.0,1509.0,3784.0,1509.0,3.1032,179500.0,NEAR OCEAN +-117.17,32.82,24.0,1569.0,377.0,715.0,321.0,3.1146,187500.0,NEAR OCEAN +-117.16,32.81,14.0,4328.0,1100.0,2046.0,1044.0,2.2899,159000.0,NEAR OCEAN +-117.16,32.81,35.0,1213.0,200.0,532.0,181.0,3.6806,172400.0,NEAR OCEAN +-117.16,32.8,37.0,422.0,79.0,211.0,80.0,3.0625,159700.0,NEAR OCEAN +-117.16,32.8,22.0,2259.0,634.0,1213.0,601.0,2.5,177800.0,NEAR OCEAN +-117.16,32.81,34.0,2275.0,375.0,1021.0,379.0,3.6371,176300.0,NEAR OCEAN +-117.17,32.81,33.0,3064.0,506.0,1355.0,488.0,4.22,178700.0,NEAR OCEAN +-117.14,32.83,25.0,2161.0,462.0,896.0,468.0,2.2284,177500.0,NEAR OCEAN +-117.18,32.82,25.0,1756.0,301.0,722.0,312.0,4.5625,162300.0,NEAR OCEAN +-117.18,32.81,28.0,3436.0,537.0,1503.0,498.0,4.7679,204000.0,NEAR OCEAN +-117.19,32.81,33.0,5226.0,833.0,2221.0,839.0,5.1491,207000.0,NEAR OCEAN +-117.18,32.8,10.0,3821.0,631.0,1605.0,609.0,5.5454,217100.0,NEAR OCEAN +-117.18,32.8,30.0,2456.0,390.0,1022.0,393.0,3.8542,198500.0,NEAR OCEAN +-117.18,32.79,30.0,5201.0,1104.0,2961.0,1064.0,3.2661,140400.0,NEAR OCEAN +-117.17,32.79,44.0,2262.0,647.0,3009.0,657.0,2.2663,123600.0,NEAR OCEAN +-117.17,32.79,43.0,1269.0,297.0,946.0,285.0,2.1447,133300.0,NEAR OCEAN +-117.16,32.8,25.0,1399.0,329.0,1308.0,355.0,2.5682,187500.0,NEAR OCEAN +-117.17,32.8,20.0,2827.0,554.0,1822.0,536.0,3.4706,157600.0,NEAR OCEAN +-117.15,32.8,27.0,1937.0,537.0,1211.0,482.0,2.75,87500.0,NEAR OCEAN +-117.15,32.8,23.0,2395.0,476.0,2284.0,488.0,3.7292,146300.0,NEAR OCEAN +-117.16,32.78,24.0,3566.0,765.0,1697.0,722.0,3.6375,178600.0,NEAR OCEAN +-117.16,32.79,32.0,1731.0,413.0,1569.0,427.0,3.3375,154300.0,NEAR OCEAN +-117.17,32.78,17.0,3845.0,1051.0,3102.0,944.0,2.3658,164100.0,NEAR OCEAN +-117.16,32.78,34.0,2515.0,488.0,1594.0,515.0,3.7381,165000.0,NEAR OCEAN +-117.17,32.78,42.0,1104.0,305.0,892.0,270.0,2.2768,145200.0,NEAR OCEAN +-117.17,32.77,35.0,1399.0,274.0,695.0,281.0,3.767,166800.0,NEAR OCEAN +-117.17,32.77,6.0,3856.0,875.0,1547.0,816.0,4.5481,164800.0,NEAR OCEAN +-117.18,32.77,16.0,2374.0,780.0,913.0,705.0,2.7386,87500.0,NEAR OCEAN +-117.18,32.76,8.0,3694.0,997.0,1297.0,807.0,3.6492,158900.0,NEAR OCEAN +-117.18,32.76,17.0,711.0,254.0,327.0,227.0,2.6493,67500.0,NEAR OCEAN +-117.18,32.78,21.0,4185.0,1018.0,3122.0,993.0,3.0481,210000.0,NEAR OCEAN +-117.18,32.77,23.0,1215.0,225.0,592.0,224.0,3.4,200600.0,NEAR OCEAN +-117.21,32.81,26.0,2496.0,407.0,1062.0,380.0,5.5413,302100.0,NEAR OCEAN +-117.2,32.8,34.0,4854.0,912.0,2089.0,854.0,3.8542,200000.0,NEAR OCEAN +-117.2,32.79,16.0,2079.0,394.0,746.0,383.0,5.0958,300000.0,NEAR OCEAN +-117.2,32.8,33.0,2573.0,436.0,1084.0,443.0,4.2417,294100.0,NEAR OCEAN +-117.21,32.8,34.0,1398.0,222.0,532.0,244.0,3.7102,289600.0,NEAR OCEAN +-117.19,32.8,16.0,2593.0,794.0,1235.0,684.0,3.1304,166300.0,NEAR OCEAN +-117.2,32.8,36.0,4018.0,1067.0,1620.0,842.0,2.3599,168400.0,NEAR OCEAN +-117.19,32.79,36.0,1514.0,258.0,665.0,278.0,3.8571,235100.0,NEAR OCEAN +-117.19,32.79,35.0,1788.0,378.0,777.0,374.0,3.3713,238400.0,NEAR OCEAN +-117.2,32.79,31.0,3417.0,533.0,1245.0,532.0,4.7788,276000.0,NEAR OCEAN +-117.2,32.79,29.0,1213.0,,654.0,246.0,4.5987,255600.0,NEAR OCEAN +-117.2,32.79,34.0,757.0,212.0,409.0,222.0,3.2312,192200.0,NEAR OCEAN +-117.19,32.78,34.0,4108.0,664.0,1659.0,644.0,4.4097,252000.0,NEAR OCEAN +-117.2,32.78,38.0,2662.0,498.0,1132.0,496.0,4.0057,241600.0,NEAR OCEAN +-117.19,32.77,30.0,2747.0,640.0,3185.0,657.0,3.765,238000.0,NEAR OCEAN +-117.19,32.77,16.0,3273.0,670.0,1305.0,671.0,4.1368,151000.0,NEAR OCEAN +-117.19,32.77,9.0,634.0,152.0,248.0,133.0,3.8571,143800.0,NEAR OCEAN +-117.19,32.77,14.0,3575.0,992.0,1645.0,839.0,2.4397,140600.0,NEAR OCEAN +-117.2,32.77,30.0,156.0,45.0,77.0,40.0,3.2679,137500.0,NEAR OCEAN +-117.2,32.77,31.0,1952.0,471.0,936.0,462.0,2.8621,196900.0,NEAR OCEAN +-117.15,32.81,34.0,1629.0,318.0,900.0,282.0,3.1458,178300.0,NEAR OCEAN +-117.15,32.8,41.0,1413.0,261.0,1070.0,259.0,2.3578,166700.0,NEAR OCEAN +-117.14,32.8,41.0,2423.0,469.0,1813.0,466.0,2.1157,156900.0,NEAR OCEAN +-117.14,32.8,33.0,2670.0,435.0,1256.0,431.0,3.9417,179800.0,NEAR OCEAN +-117.14,32.8,35.0,1267.0,212.0,710.0,204.0,2.5368,169600.0,NEAR OCEAN +-117.14,32.79,35.0,3578.0,582.0,1568.0,553.0,4.7813,188600.0,NEAR OCEAN +-117.15,32.78,25.0,1577.0,266.0,611.0,284.0,5.25,205100.0,NEAR OCEAN +-117.14,32.79,31.0,984.0,161.0,422.0,158.0,5.282,183000.0,NEAR OCEAN +-117.13,32.81,19.0,2157.0,554.0,1349.0,535.0,2.7652,177400.0,NEAR OCEAN +-117.14,32.81,34.0,1748.0,294.0,800.0,294.0,4.4886,179100.0,NEAR OCEAN +-117.13,32.8,15.0,1606.0,375.0,784.0,342.0,3.7237,108300.0,NEAR OCEAN +-117.13,32.8,33.0,2731.0,456.0,1263.0,445.0,4.5568,175300.0,NEAR OCEAN +-117.12,32.8,29.0,2863.0,534.0,1392.0,522.0,3.8719,174200.0,NEAR OCEAN +-117.13,32.81,26.0,2119.0,444.0,1202.0,440.0,3.2308,166500.0,NEAR OCEAN +-117.12,32.8,31.0,1727.0,342.0,879.0,345.0,3.8125,166300.0,NEAR OCEAN +-117.13,32.8,35.0,2129.0,382.0,1044.0,350.0,3.9732,174900.0,NEAR OCEAN +-117.13,32.79,35.0,1458.0,262.0,723.0,257.0,4.2098,174100.0,NEAR OCEAN +-117.13,32.79,35.0,1362.0,243.0,698.0,255.0,3.6458,173800.0,NEAR OCEAN +-117.12,32.78,4.0,2782.0,817.0,1309.0,787.0,4.2621,124200.0,NEAR OCEAN +-117.15,32.77,16.0,2056.0,631.0,847.0,569.0,2.9576,92200.0,NEAR OCEAN +-117.09,32.81,7.0,6100.0,1185.0,2710.0,1040.0,5.5673,288200.0,NEAR OCEAN +-117.11,32.82,16.0,3980.0,682.0,3174.0,647.0,2.6607,175000.0,NEAR OCEAN +-117.11,32.82,17.0,1787.0,330.0,1341.0,314.0,2.875,112500.0,NEAR OCEAN +-117.11,32.81,15.0,3428.0,491.0,2303.0,486.0,2.5953,67500.0,NEAR OCEAN +-117.11,32.8,17.0,3890.0,586.0,2791.0,595.0,3.2197,67500.0,NEAR OCEAN +-117.09,32.8,15.0,666.0,152.0,247.0,164.0,2.15,131300.0,NEAR OCEAN +-117.11,32.84,16.0,4608.0,629.0,2020.0,636.0,6.04,243000.0,<1H OCEAN +-117.11,32.82,16.0,4241.0,892.0,1771.0,864.0,4.375,166500.0,NEAR OCEAN +-117.1,32.83,16.0,1049.0,154.0,467.0,160.0,6.2047,248100.0,<1H OCEAN +-117.1,32.83,16.0,4214.0,744.0,1820.0,699.0,4.3783,179500.0,<1H OCEAN +-117.09,32.83,15.0,4138.0,636.0,2001.0,677.0,4.8419,264000.0,<1H OCEAN +-117.08,32.82,16.0,1787.0,236.0,770.0,228.0,7.1298,278600.0,<1H OCEAN +-117.08,32.82,10.0,5177.0,856.0,2190.0,816.0,5.9734,271700.0,<1H OCEAN +-117.08,32.83,7.0,13703.0,2352.0,4446.0,1856.0,6.4335,260600.0,<1H OCEAN +-117.04,32.83,8.0,2205.0,348.0,777.0,341.0,6.0266,177400.0,<1H OCEAN +-117.07,32.91,5.0,2234.0,256.0,894.0,253.0,10.3354,477600.0,<1H OCEAN +-117.04,32.9,6.0,6525.0,826.0,3146.0,806.0,9.2858,436100.0,<1H OCEAN +-117.08,32.8,25.0,2963.0,552.0,1162.0,556.0,3.625,184500.0,NEAR OCEAN +-117.09,32.79,20.0,2183.0,534.0,999.0,496.0,2.8631,169700.0,NEAR OCEAN +-117.09,32.8,36.0,2163.0,367.0,915.0,360.0,4.7188,174100.0,NEAR OCEAN +-117.08,32.8,32.0,1587.0,268.0,635.0,249.0,3.375,178100.0,NEAR OCEAN +-117.11,32.79,16.0,2574.0,771.0,1129.0,721.0,3.3849,96900.0,NEAR OCEAN +-117.11,32.79,16.0,1791.0,518.0,1006.0,491.0,3.5179,129300.0,NEAR OCEAN +-117.11,32.78,16.0,2470.0,830.0,1170.0,724.0,3.5562,73500.0,NEAR OCEAN +-117.11,32.78,16.0,2220.0,512.0,930.0,527.0,3.6528,133200.0,NEAR OCEAN +-117.09,32.79,36.0,1529.0,266.0,683.0,260.0,4.0982,171200.0,NEAR OCEAN +-117.09,32.79,36.0,1936.0,345.0,861.0,343.0,3.8333,170000.0,NEAR OCEAN +-117.09,32.79,31.0,2019.0,417.0,872.0,386.0,3.1964,177700.0,NEAR OCEAN +-117.09,32.78,28.0,1708.0,393.0,816.0,393.0,2.9881,165300.0,NEAR OCEAN +-117.07,32.8,31.0,2550.0,395.0,1017.0,405.0,5.1488,181000.0,<1H OCEAN +-117.07,32.8,36.0,2028.0,349.0,820.0,352.0,3.9828,168900.0,<1H OCEAN +-117.07,32.79,36.0,3583.0,642.0,1711.0,602.0,3.9745,170800.0,NEAR OCEAN +-117.07,32.8,23.0,2698.0,410.0,1094.0,411.0,5.1782,195100.0,<1H OCEAN +-117.07,32.81,15.0,2000.0,402.0,778.0,369.0,4.3594,224200.0,<1H OCEAN +-117.06,32.81,17.0,3939.0,550.0,1694.0,553.0,6.7927,234700.0,<1H OCEAN +-117.05,32.81,17.0,1885.0,292.0,771.0,301.0,5.6402,228600.0,<1H OCEAN +-117.05,32.8,17.0,1475.0,308.0,549.0,293.0,3.7167,180400.0,<1H OCEAN +-117.06,32.8,17.0,2247.0,340.0,973.0,318.0,5.5,222000.0,<1H OCEAN +-117.07,32.79,25.0,2489.0,314.0,911.0,309.0,7.8336,277600.0,NEAR OCEAN +-117.07,32.78,26.0,3725.0,623.0,1516.0,627.0,4.7143,268300.0,NEAR OCEAN +-117.08,32.78,21.0,2919.0,496.0,984.0,443.0,4.625,222800.0,NEAR OCEAN +-117.04,32.79,23.0,2491.0,350.0,863.0,348.0,6.7196,306800.0,<1H OCEAN +-117.04,32.8,25.0,2504.0,345.0,1067.0,350.0,5.7416,243400.0,<1H OCEAN +-117.05,32.8,16.0,1561.0,378.0,574.0,350.0,3.0035,94600.0,<1H OCEAN +-117.05,32.8,25.0,1905.0,250.0,865.0,253.0,6.4797,249000.0,<1H OCEAN +-117.05,32.8,23.0,3309.0,401.0,1116.0,386.0,7.916,330600.0,<1H OCEAN +-117.06,32.79,17.0,2524.0,332.0,771.0,317.0,8.7604,331800.0,<1H OCEAN +-117.06,32.79,21.0,3787.0,492.0,1246.0,457.0,9.6023,391300.0,<1H OCEAN +-117.06,32.78,31.0,2485.0,436.0,942.0,448.0,4.8,220800.0,NEAR OCEAN +-117.02,32.8,27.0,2369.0,370.0,927.0,374.0,4.1162,177200.0,<1H OCEAN +-117.03,32.79,26.0,3859.0,513.0,1469.0,538.0,5.8683,220500.0,<1H OCEAN +-117.03,32.8,19.0,3866.0,775.0,1554.0,703.0,4.3281,220000.0,<1H OCEAN +-117.04,32.8,11.0,1802.0,440.0,630.0,428.0,2.0337,146700.0,<1H OCEAN +-117.01,32.8,17.0,1042.0,210.0,650.0,215.0,3.1,84200.0,<1H OCEAN +-117.01,32.8,17.0,1558.0,479.0,803.0,431.0,2.6934,160200.0,<1H OCEAN +-117.01,32.8,20.0,2705.0,545.0,1198.0,497.0,3.7159,168900.0,<1H OCEAN +-117.01,32.79,33.0,4015.0,663.0,1864.0,664.0,4.3152,159300.0,<1H OCEAN +-117.02,32.8,29.0,1232.0,243.0,665.0,247.0,3.65,168900.0,<1H OCEAN +-117.02,32.8,31.0,2692.0,445.0,1129.0,450.0,4.4583,170000.0,<1H OCEAN +-117.01,32.81,26.0,4499.0,645.0,1866.0,626.0,5.516,185100.0,<1H OCEAN +-117.02,32.81,27.0,1950.0,317.0,950.0,320.0,4.0656,164000.0,<1H OCEAN +-117.02,32.81,26.0,1998.0,301.0,874.0,305.0,5.4544,180900.0,<1H OCEAN +-117.01,32.81,21.0,4203.0,618.0,1620.0,600.0,5.3441,193500.0,<1H OCEAN +-117.02,32.81,14.0,3173.0,599.0,1451.0,585.0,3.7292,182200.0,<1H OCEAN +-117.03,32.82,16.0,1765.0,289.0,743.0,280.0,4.9744,209700.0,<1H OCEAN +-117.04,32.81,12.0,2880.0,406.0,1381.0,418.0,6.5412,254200.0,<1H OCEAN +-117.05,32.82,16.0,4046.0,731.0,1684.0,701.0,4.2312,197000.0,<1H OCEAN +-117.05,32.59,26.0,1919.0,345.0,1326.0,341.0,4.2679,131900.0,NEAR OCEAN +-117.06,32.59,13.0,3920.0,775.0,2814.0,760.0,4.0616,148800.0,NEAR OCEAN +-117.05,32.58,22.0,2101.0,399.0,1551.0,371.0,4.1518,136900.0,NEAR OCEAN +-117.06,32.58,17.0,2724.0,567.0,2213.0,554.0,3.8529,147700.0,NEAR OCEAN +-117.06,32.58,13.0,3435.0,708.0,1761.0,699.0,3.4792,107600.0,NEAR OCEAN +-117.06,32.58,11.0,2879.0,679.0,2098.0,673.0,3.5125,142400.0,NEAR OCEAN +-117.06,32.57,16.0,1269.0,282.0,1609.0,298.0,2.6985,156500.0,NEAR OCEAN +-117.04,32.58,14.0,2355.0,406.0,1883.0,401.0,5.0311,152100.0,NEAR OCEAN +-117.04,32.58,20.0,2029.0,357.0,1497.0,353.0,4.0089,132100.0,NEAR OCEAN +-117.05,32.58,23.0,1918.0,339.0,1392.0,340.0,4.087,134800.0,NEAR OCEAN +-117.05,32.58,25.0,2185.0,370.0,1558.0,369.0,5.3072,132700.0,NEAR OCEAN +-117.05,32.57,22.0,2857.0,516.0,2412.0,496.0,4.7337,127600.0,NEAR OCEAN +-117.06,32.57,25.0,1268.0,282.0,991.0,299.0,3.0284,123600.0,NEAR OCEAN +-117.06,32.57,17.0,2252.0,378.0,1776.0,365.0,4.6364,141100.0,NEAR OCEAN +-117.05,32.57,13.0,2880.0,576.0,2450.0,567.0,3.1696,138000.0,NEAR OCEAN +-117.05,32.56,18.0,1215.0,320.0,1195.0,349.0,1.9875,114900.0,NEAR OCEAN +-117.05,32.56,17.0,985.0,233.0,811.0,223.0,2.875,134500.0,NEAR OCEAN +-117.06,32.57,18.0,1384.0,311.0,1429.0,287.0,1.3362,95000.0,NEAR OCEAN +-116.97,32.56,23.0,1262.0,294.0,5176.0,275.0,2.5625,153300.0,NEAR OCEAN +-117.04,32.55,15.0,2206.0,648.0,2511.0,648.0,1.6348,93200.0,NEAR OCEAN +-117.05,32.56,22.0,2172.0,563.0,2049.0,524.0,2.0159,139300.0,NEAR OCEAN +-117.06,32.56,17.0,2803.0,683.0,2768.0,676.0,1.7958,140400.0,NEAR OCEAN +-117.06,32.56,5.0,2706.0,925.0,3148.0,855.0,1.7301,125000.0,NEAR OCEAN +-117.06,32.55,5.0,3223.0,940.0,3284.0,854.0,1.4384,108800.0,NEAR OCEAN +-117.04,32.54,7.0,938.0,297.0,1187.0,282.0,1.2667,67500.0,NEAR OCEAN +-117.1,32.59,21.0,2350.0,667.0,1621.0,613.0,2.0734,87500.0,NEAR OCEAN +-117.1,32.58,23.0,1662.0,377.0,1318.0,386.0,2.3,120800.0,NEAR OCEAN +-117.1,32.58,17.0,2046.0,559.0,1585.0,530.0,2.25,132800.0,NEAR OCEAN +-117.1,32.58,33.0,393.0,76.0,330.0,80.0,4.1029,122700.0,NEAR OCEAN +-117.1,32.58,29.0,1061.0,202.0,759.0,206.0,4.8646,136800.0,NEAR OCEAN +-117.1,32.57,26.0,2343.0,371.0,1221.0,372.0,4.3601,144900.0,NEAR OCEAN +-117.1,32.56,16.0,2687.0,501.0,1502.0,480.0,3.75,146800.0,NEAR OCEAN +-117.07,32.57,17.0,2961.0,634.0,1911.0,615.0,2.5859,131400.0,NEAR OCEAN +-117.08,32.57,18.0,2203.0,544.0,1943.0,497.0,2.25,103200.0,NEAR OCEAN +-117.07,32.57,14.0,1527.0,357.0,1224.0,363.0,2.7361,93600.0,NEAR OCEAN +-117.07,32.56,9.0,3648.0,895.0,3293.0,840.0,3.0992,142600.0,NEAR OCEAN +-117.08,32.59,8.0,2888.0,662.0,2441.0,683.0,2.7048,153000.0,NEAR OCEAN +-117.08,32.58,15.0,1462.0,274.0,1002.0,271.0,3.9698,142700.0,NEAR OCEAN +-117.08,32.58,22.0,2128.0,477.0,1420.0,450.0,3.2687,131000.0,NEAR OCEAN +-117.07,32.58,25.0,1607.0,280.0,899.0,260.0,3.8194,134400.0,NEAR OCEAN +-117.09,32.58,12.0,2565.0,567.0,1785.0,545.0,3.0273,135300.0,NEAR OCEAN +-117.08,32.57,9.0,6298.0,1512.0,4451.0,1456.0,2.569,88300.0,NEAR OCEAN +-117.09,32.57,23.0,1817.0,323.0,1371.0,327.0,3.6736,139500.0,NEAR OCEAN +-117.09,32.57,10.0,2198.0,368.0,1645.0,350.0,4.5547,160700.0,NEAR OCEAN +-117.09,32.57,17.0,444.0,83.0,357.0,87.0,5.1478,138900.0,NEAR OCEAN +-117.09,32.56,8.0,864.0,156.0,626.0,172.0,4.8984,151500.0,NEAR OCEAN +-117.09,32.55,8.0,6533.0,1217.0,4797.0,1177.0,3.9583,144400.0,NEAR OCEAN +-117.12,32.58,34.0,2003.0,466.0,1226.0,443.0,3.0613,136700.0,NEAR OCEAN +-117.12,32.57,21.0,1738.0,295.0,983.0,298.0,4.8274,174100.0,NEAR OCEAN +-117.13,32.58,27.0,2511.0,615.0,1427.0,576.0,3.1645,156000.0,NEAR OCEAN +-117.13,32.58,32.0,1870.0,437.0,1142.0,426.0,2.3194,159400.0,NEAR OCEAN +-117.13,32.58,27.0,1417.0,373.0,814.0,348.0,2.3603,195300.0,NEAR OCEAN +-117.12,32.56,20.0,2524.0,682.0,1819.0,560.0,2.9286,257700.0,NEAR OCEAN +-117.11,32.58,28.0,1869.0,407.0,1074.0,344.0,2.5988,135600.0,NEAR OCEAN +-117.11,32.57,32.0,2723.0,586.0,1702.0,562.0,3.3371,140500.0,NEAR OCEAN +-117.12,32.57,35.0,1450.0,256.0,930.0,286.0,2.6715,133300.0,NEAR OCEAN +-117.12,32.58,26.0,1360.0,309.0,869.0,328.0,3.0217,131600.0,NEAR OCEAN +-117.11,32.58,21.0,2894.0,685.0,2109.0,712.0,2.2755,125000.0,NEAR OCEAN +-117.1,32.58,27.0,2616.0,591.0,1889.0,577.0,2.3824,127600.0,NEAR OCEAN +-117.1,32.57,14.0,5058.0,1299.0,3662.0,1193.0,2.3253,133700.0,NEAR OCEAN +-117.11,32.59,17.0,2020.0,534.0,1529.0,500.0,2.1773,143200.0,NEAR OCEAN +-117.11,32.58,12.0,1086.0,294.0,870.0,290.0,2.4213,132500.0,NEAR OCEAN +-117.11,32.59,18.0,2329.0,580.0,1538.0,567.0,2.1179,153100.0,NEAR OCEAN +-117.12,32.59,28.0,2793.0,706.0,1825.0,676.0,2.6724,144500.0,NEAR OCEAN +-117.16,32.58,36.0,1940.0,399.0,1076.0,382.0,3.3906,147800.0,NEAR OCEAN +-117.13,32.63,10.0,7374.0,1157.0,1900.0,794.0,8.7991,478500.0,NEAR OCEAN +-117.17,32.63,26.0,1617.0,279.0,2745.0,250.0,3.5357,67500.0,NEAR OCEAN +-117.17,32.68,16.0,5895.0,1424.0,873.0,522.0,7.3669,187500.0,NEAR OCEAN +-117.18,32.68,29.0,1539.0,344.0,556.0,289.0,3.25,500001.0,NEAR OCEAN +-117.18,32.69,52.0,1837.0,313.0,668.0,300.0,5.1009,500001.0,NEAR OCEAN +-117.18,32.69,37.0,3112.0,716.0,1304.0,674.0,3.2121,320800.0,NEAR OCEAN +-117.18,32.69,44.0,2819.0,514.0,1258.0,503.0,4.4777,452800.0,NEAR OCEAN +-117.17,32.69,40.0,2236.0,331.0,767.0,316.0,5.3177,500001.0,NEAR OCEAN +-117.18,32.69,48.0,2764.0,491.0,978.0,449.0,5.1249,432400.0,NEAR OCEAN +-117.17,32.69,19.0,2802.0,802.0,1159.0,597.0,4.7891,334600.0,NEAR OCEAN +-117.17,32.69,45.0,3168.0,598.0,1341.0,562.0,4.5189,422200.0,NEAR OCEAN +-117.17,32.7,33.0,4084.0,897.0,1804.0,833.0,4.0488,409700.0,NEAR OCEAN +-117.18,32.7,44.0,2655.0,514.0,1102.0,489.0,3.6759,368800.0,NEAR OCEAN +-117.18,32.7,42.0,1691.0,286.0,761.0,281.0,5.1386,404500.0,NEAR OCEAN +-117.19,32.69,35.0,2921.0,438.0,1042.0,415.0,6.3612,482700.0,NEAR OCEAN +-117.11,32.68,36.0,26.0,14.0,58.0,23.0,1.9107,125000.0,NEAR OCEAN +-117.11,32.67,43.0,515.0,146.0,445.0,140.0,1.6094,93000.0,NEAR OCEAN +-117.11,32.67,46.0,928.0,236.0,790.0,235.0,1.6806,92500.0,NEAR OCEAN +-117.11,32.67,52.0,204.0,74.0,248.0,57.0,1.7961,47500.0,NEAR OCEAN +-117.12,32.66,52.0,16.0,4.0,8.0,3.0,1.125,60000.0,NEAR OCEAN +-117.11,32.67,52.0,280.0,71.0,217.0,71.0,1.4844,83300.0,NEAR OCEAN +-117.11,32.66,52.0,25.0,5.0,14.0,9.0,1.625,118800.0,NEAR OCEAN +-117.09,32.67,37.0,1157.0,332.0,983.0,306.0,2.0972,117000.0,NEAR OCEAN +-117.09,32.66,38.0,833.0,206.0,570.0,182.0,1.8333,127100.0,NEAR OCEAN +-117.09,32.66,37.0,1232.0,330.0,1086.0,330.0,1.6389,114300.0,NEAR OCEAN +-117.1,32.66,27.0,1782.0,560.0,1785.0,560.0,2.1542,106300.0,NEAR OCEAN +-117.1,32.67,26.0,2629.0,763.0,2721.0,767.0,2.0982,109100.0,NEAR OCEAN +-117.1,32.67,22.0,1690.0,541.0,1669.0,494.0,2.0213,110600.0,NEAR OCEAN +-117.09,32.68,30.0,2662.0,653.0,1997.0,605.0,2.8089,120600.0,NEAR OCEAN +-117.09,32.67,31.0,2051.0,549.0,1581.0,538.0,2.052,108900.0,NEAR OCEAN +-117.1,32.67,15.0,1635.0,553.0,1347.0,597.0,1.2745,92900.0,NEAR OCEAN +-117.1,32.68,20.0,1012.0,269.0,837.0,240.0,2.0488,88900.0,NEAR OCEAN +-117.1,32.69,29.0,4174.0,1195.0,3675.0,1124.0,1.8112,103600.0,NEAR OCEAN +-117.1,32.68,42.0,2013.0,568.0,1920.0,557.0,2.0724,107600.0,NEAR OCEAN +-117.1,32.68,47.0,771.0,224.0,637.0,212.0,2.0156,90300.0,NEAR OCEAN +-117.1,32.68,49.0,1412.0,350.0,1200.0,332.0,2.0398,93600.0,NEAR OCEAN +-117.1,32.68,47.0,1044.0,274.0,1003.0,280.0,1.7802,97800.0,NEAR OCEAN +-117.1,32.68,45.0,1183.0,289.0,900.0,266.0,2.4943,99600.0,NEAR OCEAN +-117.07,32.69,29.0,1429.0,293.0,1091.0,317.0,3.4609,118000.0,NEAR OCEAN +-117.08,32.69,31.0,2558.0,487.0,1938.0,492.0,3.4875,117000.0,NEAR OCEAN +-117.08,32.69,36.0,1571.0,284.0,1001.0,268.0,3.6875,111400.0,NEAR OCEAN +-117.09,32.69,34.0,1469.0,267.0,1031.0,267.0,3.4583,112700.0,NEAR OCEAN +-117.09,32.68,29.0,1792.0,449.0,1650.0,396.0,2.2201,100000.0,NEAR OCEAN +-117.07,32.69,28.0,1485.0,275.0,820.0,283.0,4.069,153300.0,NEAR OCEAN +-117.08,32.68,26.0,3071.0,615.0,2156.0,568.0,2.9318,112400.0,NEAR OCEAN +-117.08,32.68,19.0,3635.0,1078.0,3127.0,1098.0,1.324,122600.0,NEAR OCEAN +-117.09,32.68,20.0,2569.0,737.0,2341.0,705.0,2.0114,104900.0,NEAR OCEAN +-117.07,32.67,28.0,2758.0,623.0,2179.0,631.0,2.3814,112300.0,NEAR OCEAN +-117.08,32.67,31.0,3008.0,764.0,2088.0,757.0,2.5662,118200.0,NEAR OCEAN +-117.09,32.66,46.0,844.0,147.0,423.0,161.0,3.375,136300.0,NEAR OCEAN +-117.08,32.66,43.0,1004.0,236.0,839.0,235.0,2.81,103400.0,NEAR OCEAN +-117.07,32.67,35.0,3200.0,725.0,1723.0,610.0,1.8977,95600.0,NEAR OCEAN +-117.07,32.65,12.0,4131.0,891.0,2272.0,840.0,3.4701,204900.0,NEAR OCEAN +-117.07,32.64,32.0,5135.0,1025.0,2152.0,944.0,4.1325,172800.0,NEAR OCEAN +-117.08,32.64,43.0,1005.0,230.0,548.0,252.0,1.8672,145800.0,NEAR OCEAN +-117.08,32.65,17.0,2633.0,712.0,1487.0,694.0,2.5392,147000.0,NEAR OCEAN +-117.08,32.64,38.0,917.0,256.0,494.0,233.0,1.9241,150000.0,NEAR OCEAN +-117.08,32.64,11.0,1651.0,533.0,947.0,515.0,1.6806,141700.0,NEAR OCEAN +-117.09,32.65,20.0,1445.0,323.0,573.0,334.0,2.619,145800.0,NEAR OCEAN +-117.09,32.65,25.0,3509.0,985.0,2359.0,899.0,2.6296,150000.0,NEAR OCEAN +-117.08,32.65,28.0,2296.0,603.0,1277.0,550.0,2.3562,123800.0,NEAR OCEAN +-117.09,32.64,38.0,2095.0,536.0,1240.0,550.0,2.7218,145900.0,NEAR OCEAN +-117.09,32.64,30.0,3171.0,862.0,2126.0,800.0,2.507,142700.0,NEAR OCEAN +-117.1,32.64,29.0,1578.0,460.0,1236.0,461.0,2.5658,134700.0,NEAR OCEAN +-117.09,32.64,20.0,1999.0,651.0,1302.0,592.0,1.6321,57500.0,NEAR OCEAN +-117.09,32.64,19.0,2571.0,791.0,1205.0,783.0,1.62,131300.0,NEAR OCEAN +-117.09,32.63,27.0,2920.0,770.0,1935.0,746.0,2.4148,67500.0,NEAR OCEAN +-117.11,32.64,23.0,1619.0,447.0,1025.0,415.0,1.858,67500.0,NEAR OCEAN +-117.11,32.62,27.0,1846.0,509.0,1078.0,482.0,2.1719,131500.0,NEAR OCEAN +-117.09,32.62,37.0,1538.0,298.0,867.0,285.0,3.0729,128700.0,NEAR OCEAN +-117.09,32.62,37.0,1925.0,428.0,1344.0,426.0,2.4866,129700.0,NEAR OCEAN +-117.09,32.62,34.0,1576.0,364.0,1153.0,381.0,2.1955,129700.0,NEAR OCEAN +-117.08,32.63,33.0,2891.0,793.0,1607.0,754.0,2.1281,139800.0,NEAR OCEAN +-117.09,32.64,24.0,3613.0,973.0,2002.0,931.0,1.947,147500.0,NEAR OCEAN +-117.09,32.63,33.0,620.0,161.0,420.0,164.0,1.8417,150000.0,NEAR OCEAN +-117.07,32.64,38.0,1486.0,269.0,745.0,295.0,4.6477,150400.0,NEAR OCEAN +-117.07,32.63,37.0,2303.0,379.0,1026.0,357.0,3.455,156900.0,NEAR OCEAN +-117.07,32.64,30.0,2873.0,774.0,1593.0,731.0,2.24,129500.0,NEAR OCEAN +-117.06,32.63,37.0,1326.0,234.0,612.0,240.0,4.125,160200.0,NEAR OCEAN +-117.06,32.62,36.0,786.0,125.0,408.0,138.0,3.9167,189700.0,NEAR OCEAN +-117.07,32.63,40.0,1706.0,322.0,796.0,303.0,3.5583,154900.0,NEAR OCEAN +-117.07,32.63,37.0,2372.0,444.0,1056.0,419.0,3.7583,145500.0,NEAR OCEAN +-117.08,32.63,30.0,2504.0,559.0,1827.0,490.0,2.6146,159400.0,NEAR OCEAN +-117.08,32.63,28.0,2080.0,427.0,1266.0,434.0,2.2788,146300.0,NEAR OCEAN +-117.08,32.62,28.0,2468.0,506.0,1353.0,522.0,3.0771,158600.0,NEAR OCEAN +-117.08,32.62,36.0,1674.0,309.0,818.0,307.0,3.4773,150400.0,NEAR OCEAN +-117.09,32.61,23.0,1157.0,309.0,640.0,313.0,2.1548,118800.0,NEAR OCEAN +-117.09,32.61,21.0,1945.0,430.0,1335.0,419.0,3.6467,113000.0,NEAR OCEAN +-117.08,32.62,16.0,5192.0,1381.0,3261.0,1321.0,2.2685,151900.0,NEAR OCEAN +-117.08,32.61,27.0,2264.0,525.0,1485.0,468.0,3.3514,149100.0,NEAR OCEAN +-117.07,32.62,19.0,5016.0,1173.0,2750.0,1081.0,2.7838,155900.0,NEAR OCEAN +-117.06,32.61,34.0,4325.0,1015.0,2609.0,979.0,2.8489,128300.0,NEAR OCEAN +-117.07,32.61,22.0,5016.0,1331.0,3222.0,1196.0,2.1441,135500.0,NEAR OCEAN +-117.07,32.6,18.0,2602.0,551.0,1042.0,550.0,1.9267,67500.0,NEAR OCEAN +-117.07,32.59,21.0,1779.0,466.0,1327.0,488.0,1.6007,96200.0,NEAR OCEAN +-117.08,32.59,30.0,144.0,52.0,220.0,48.0,2.3929,134400.0,NEAR OCEAN +-117.08,32.6,24.0,1901.0,490.0,1334.0,476.0,2.2544,121900.0,NEAR OCEAN +-117.07,32.61,10.0,1686.0,414.0,1000.0,391.0,2.1765,128400.0,NEAR OCEAN +-117.06,32.61,24.0,4369.0,1353.0,3123.0,1247.0,2.0571,152300.0,NEAR OCEAN +-117.06,32.61,23.0,1630.0,362.0,1267.0,418.0,2.5625,131100.0,NEAR OCEAN +-117.07,32.6,13.0,1607.0,435.0,983.0,400.0,2.2903,106300.0,NEAR OCEAN +-117.06,32.6,25.0,1075.0,238.0,434.0,234.0,1.7472,94600.0,NEAR OCEAN +-117.06,32.6,24.0,1088.0,268.0,1095.0,246.0,2.4191,107300.0,NEAR OCEAN +-117.06,32.6,33.0,905.0,205.0,989.0,222.0,2.7014,108200.0,NEAR OCEAN +-117.05,32.63,31.0,4911.0,861.0,2334.0,843.0,4.1958,160100.0,NEAR OCEAN +-117.05,32.62,34.0,3928.0,686.0,2315.0,681.0,4.2851,144500.0,NEAR OCEAN +-117.04,32.62,26.0,3620.0,607.0,2000.0,593.0,4.9962,156000.0,NEAR OCEAN +-117.05,32.61,31.0,4033.0,715.0,2585.0,715.0,3.5096,139900.0,NEAR OCEAN +-117.05,32.61,21.0,6034.0,1205.0,3795.0,1146.0,3.2633,129700.0,NEAR OCEAN +-117.05,32.61,26.0,1563.0,286.0,1145.0,313.0,3.8615,139300.0,NEAR OCEAN +-117.04,32.6,20.0,8052.0,1461.0,5094.0,1430.0,4.2241,139800.0,NEAR OCEAN +-117.04,32.6,18.0,4747.0,846.0,3002.0,872.0,3.9076,152900.0,NEAR OCEAN +-117.05,32.59,16.0,4683.0,929.0,3073.0,865.0,3.0495,98300.0,NEAR OCEAN +-117.04,32.63,26.0,2074.0,356.0,1228.0,335.0,4.1154,160200.0,NEAR OCEAN +-117.04,32.62,27.0,1710.0,282.0,1089.0,297.0,4.6793,151900.0,NEAR OCEAN +-117.03,32.61,23.0,1553.0,216.0,778.0,229.0,5.1538,171300.0,NEAR OCEAN +-117.03,32.61,22.0,1028.0,148.0,523.0,152.0,6.0086,166900.0,NEAR OCEAN +-117.03,32.6,26.0,1335.0,224.0,742.0,215.0,5.152,143400.0,NEAR OCEAN +-117.02,32.59,19.0,1902.0,335.0,1102.0,313.0,3.0365,98100.0,NEAR OCEAN +-116.98,32.62,6.0,7995.0,1458.0,4771.0,1376.0,4.7068,184300.0,NEAR OCEAN +-117.06,32.64,30.0,4494.0,667.0,1883.0,680.0,5.766,186100.0,NEAR OCEAN +-117.06,32.63,29.0,4168.0,742.0,2096.0,713.0,4.2204,169800.0,NEAR OCEAN +-116.98,32.68,22.0,2346.0,380.0,1217.0,382.0,5.5248,156300.0,NEAR OCEAN +-117.01,32.67,17.0,2319.0,348.0,1125.0,337.0,5.551,266900.0,NEAR OCEAN +-117.0,32.67,16.0,2238.0,307.0,1002.0,303.0,6.6143,264100.0,NEAR OCEAN +-117.02,32.67,20.0,1505.0,184.0,635.0,182.0,6.5772,245200.0,NEAR OCEAN +-117.01,32.66,11.0,9992.0,1368.0,4495.0,1316.0,6.9664,293900.0,NEAR OCEAN +-117.02,32.66,19.0,771.0,,376.0,108.0,6.6272,273600.0,NEAR OCEAN +-116.97,32.65,4.0,16450.0,2833.0,7985.0,2683.0,5.6631,233400.0,NEAR OCEAN +-116.99,32.64,15.0,4331.0,699.0,2046.0,627.0,3.9519,193500.0,NEAR OCEAN +-117.04,32.65,8.0,8806.0,1401.0,3159.0,1059.0,4.2155,247800.0,NEAR OCEAN +-117.03,32.65,14.0,1111.0,142.0,472.0,145.0,7.6344,290500.0,NEAR OCEAN +-117.0,32.64,11.0,3098.0,490.0,1391.0,484.0,4.9792,170400.0,NEAR OCEAN +-117.01,32.63,7.0,6483.0,976.0,3269.0,1005.0,5.7358,221600.0,NEAR OCEAN +-117.04,32.64,5.0,2329.0,542.0,1213.0,514.0,4.0298,225600.0,NEAR OCEAN +-117.02,32.64,5.0,260.0,41.0,157.0,42.0,6.5151,281700.0,NEAR OCEAN +-117.03,32.63,13.0,2087.0,313.0,1165.0,330.0,5.7789,227700.0,NEAR OCEAN +-117.03,32.63,14.0,2796.0,476.0,1466.0,464.0,5.2489,213700.0,NEAR OCEAN +-117.04,32.63,26.0,2756.0,422.0,1166.0,398.0,5.1354,181600.0,NEAR OCEAN +-116.99,32.74,17.0,3101.0,547.0,1410.0,486.0,3.1771,189900.0,<1H OCEAN +-116.98,32.74,17.0,3943.0,843.0,1995.0,766.0,2.6944,158300.0,<1H OCEAN +-116.98,32.74,24.0,977.0,147.0,454.0,169.0,4.9286,173700.0,<1H OCEAN +-116.98,32.74,16.0,3361.0,537.0,1754.0,578.0,5.1098,162300.0,<1H OCEAN +-116.98,32.72,15.0,4209.0,680.0,1914.0,641.0,4.5135,158300.0,<1H OCEAN +-116.98,32.73,16.0,952.0,143.0,530.0,143.0,5.0864,175300.0,<1H OCEAN +-116.98,32.72,4.0,1078.0,158.0,571.0,184.0,4.6667,223300.0,<1H OCEAN +-116.97,32.74,14.0,7410.0,1344.0,3597.0,1274.0,4.2192,176100.0,<1H OCEAN +-116.95,32.74,7.0,2722.0,578.0,1429.0,574.0,3.9583,141700.0,<1H OCEAN +-116.96,32.71,18.0,2413.0,533.0,1129.0,551.0,2.4567,155000.0,<1H OCEAN +-116.95,32.73,17.0,1635.0,272.0,960.0,279.0,5.2671,157100.0,<1H OCEAN +-116.97,32.76,26.0,2460.0,313.0,838.0,299.0,5.9878,270700.0,<1H OCEAN +-116.98,32.75,25.0,4137.0,662.0,1905.0,630.0,4.375,214000.0,<1H OCEAN +-116.97,32.75,28.0,3519.0,583.0,1720.0,590.0,4.7973,186900.0,<1H OCEAN +-116.98,32.75,18.0,1519.0,369.0,802.0,347.0,2.9886,170800.0,<1H OCEAN +-116.97,32.76,33.0,3071.0,466.0,1348.0,513.0,6.1768,228900.0,<1H OCEAN +-116.95,32.76,13.0,5543.0,857.0,2074.0,737.0,4.9528,266200.0,<1H OCEAN +-116.94,32.75,4.0,14934.0,2479.0,6945.0,2418.0,5.1221,229700.0,<1H OCEAN +-116.92,32.76,9.0,1859.0,307.0,947.0,304.0,5.9202,181300.0,<1H OCEAN +-116.92,32.76,7.0,1659.0,237.0,862.0,242.0,5.2741,249400.0,<1H OCEAN +-116.91,32.75,5.0,8710.0,1614.0,4372.0,1527.0,4.7813,240900.0,<1H OCEAN +-117.0,32.76,31.0,1989.0,280.0,805.0,301.0,6.5645,189100.0,<1H OCEAN +-116.99,32.76,21.0,3833.0,595.0,1645.0,589.0,4.625,273500.0,<1H OCEAN +-116.99,32.74,18.0,3341.0,611.0,1952.0,602.0,3.9844,215300.0,<1H OCEAN +-117.0,32.74,17.0,2357.0,599.0,1423.0,510.0,1.8856,118800.0,<1H OCEAN +-116.99,32.73,30.0,1856.0,339.0,1103.0,379.0,4.0357,153800.0,<1H OCEAN +-117.01,32.75,26.0,4038.0,706.0,2065.0,687.0,3.9545,178100.0,<1H OCEAN +-117.01,32.75,34.0,2105.0,340.0,973.0,357.0,4.3088,152500.0,<1H OCEAN +-117.01,32.74,31.0,3473.0,,2098.0,677.0,2.6973,135200.0,<1H OCEAN +-117.01,32.73,22.0,2526.0,530.0,1556.0,529.0,2.8646,120800.0,NEAR OCEAN +-117.0,32.73,17.0,6050.0,1143.0,3424.0,1131.0,3.7647,127600.0,<1H OCEAN +-117.0,32.72,10.0,3817.0,943.0,2352.0,875.0,2.1362,143200.0,NEAR OCEAN +-117.01,32.72,12.0,2914.0,734.0,2104.0,703.0,2.3068,132300.0,NEAR OCEAN +-116.99,32.7,15.0,3660.0,622.0,2629.0,612.0,4.0444,150100.0,NEAR OCEAN +-117.0,32.7,23.0,2785.0,468.0,1456.0,449.0,4.3714,131000.0,NEAR OCEAN +-116.98,32.71,18.0,2355.0,444.0,1277.0,433.0,3.4551,121400.0,<1H OCEAN +-116.99,32.71,21.0,3049.0,582.0,2355.0,585.0,3.8904,113800.0,NEAR OCEAN +-117.0,32.71,22.0,2263.0,441.0,1395.0,416.0,3.725,123500.0,NEAR OCEAN +-117.01,32.71,20.0,3506.0,692.0,1977.0,668.0,2.981,129100.0,NEAR OCEAN +-116.99,32.72,15.0,825.0,130.0,334.0,131.0,4.0391,169500.0,<1H OCEAN +-116.99,32.72,14.0,1771.0,301.0,1046.0,284.0,4.775,143300.0,<1H OCEAN +-116.99,32.72,13.0,1330.0,216.0,719.0,215.0,3.8295,149600.0,<1H OCEAN +-116.99,32.72,11.0,1112.0,164.0,441.0,174.0,4.7679,169500.0,<1H OCEAN +-117.02,32.74,30.0,4205.0,772.0,2012.0,734.0,3.5,144700.0,NEAR OCEAN +-117.03,32.73,34.0,2061.0,,1169.0,400.0,3.5096,142000.0,NEAR OCEAN +-117.03,32.73,32.0,1750.0,333.0,997.0,335.0,3.4784,154400.0,NEAR OCEAN +-117.03,32.74,37.0,821.0,150.0,404.0,135.0,3.0125,130400.0,NEAR OCEAN +-117.02,32.73,22.0,5201.0,865.0,3280.0,817.0,4.7952,141400.0,NEAR OCEAN +-117.02,32.72,36.0,2030.0,369.0,1142.0,357.0,3.7763,126900.0,NEAR OCEAN +-117.03,32.73,38.0,3174.0,606.0,1557.0,619.0,3.5861,123600.0,NEAR OCEAN +-117.03,32.72,38.0,886.0,176.0,505.0,188.0,3.5938,125400.0,NEAR OCEAN +-117.03,32.72,37.0,2192.0,455.0,1515.0,446.0,3.0588,120600.0,NEAR OCEAN +-117.04,32.72,24.0,5474.0,955.0,3020.0,904.0,4.0813,137000.0,NEAR OCEAN +-117.04,32.73,36.0,2084.0,400.0,1097.0,398.0,3.2717,130700.0,NEAR OCEAN +-117.04,32.73,25.0,1375.0,267.0,1032.0,278.0,3.5492,125400.0,NEAR OCEAN +-117.05,32.72,35.0,3669.0,617.0,1694.0,585.0,3.9485,133900.0,NEAR OCEAN +-117.05,32.73,27.0,3184.0,588.0,1763.0,571.0,3.5529,133900.0,NEAR OCEAN +-117.03,32.74,35.0,1878.0,454.0,991.0,409.0,2.4345,129700.0,NEAR OCEAN +-117.04,32.74,33.0,3880.0,770.0,2288.0,805.0,3.6848,140700.0,NEAR OCEAN +-117.02,32.74,12.0,3301.0,963.0,2000.0,879.0,1.8594,119200.0,NEAR OCEAN +-117.04,32.74,5.0,2878.0,785.0,1727.0,758.0,1.7179,132000.0,NEAR OCEAN +-117.04,32.75,36.0,2297.0,418.0,1070.0,392.0,3.5192,144000.0,NEAR OCEAN +-117.05,32.75,29.0,2767.0,612.0,1437.0,587.0,2.8306,142900.0,NEAR OCEAN +-117.05,32.75,43.0,1718.0,344.0,826.0,336.0,2.7014,133700.0,NEAR OCEAN +-117.03,32.77,34.0,1796.0,428.0,918.0,424.0,2.875,161200.0,<1H OCEAN +-117.02,32.76,15.0,1204.0,326.0,543.0,326.0,1.0278,154200.0,<1H OCEAN +-117.02,32.76,40.0,2523.0,488.0,976.0,470.0,3.11,185700.0,<1H OCEAN +-117.02,32.75,33.0,3296.0,537.0,1345.0,556.0,5.2835,217100.0,<1H OCEAN +-117.03,32.75,24.0,7879.0,1655.0,3898.0,1534.0,3.0897,187300.0,NEAR OCEAN +-117.04,32.77,26.0,4263.0,1037.0,2199.0,1010.0,2.734,148900.0,<1H OCEAN +-117.04,32.76,43.0,3171.0,665.0,1534.0,625.0,3.141,141400.0,NEAR OCEAN +-117.05,32.76,37.0,4879.0,906.0,2076.0,871.0,3.6625,154800.0,NEAR OCEAN +-117.04,32.76,37.0,2979.0,557.0,1285.0,564.0,3.7368,152200.0,NEAR OCEAN +-117.04,32.77,16.0,7963.0,1881.0,3769.0,1804.0,2.9624,144700.0,<1H OCEAN +-117.03,32.77,19.0,4819.0,1492.0,2572.0,1336.0,2.3393,118200.0,<1H OCEAN +-117.05,32.78,37.0,1184.0,178.0,529.0,192.0,4.7941,161700.0,<1H OCEAN +-117.03,32.78,17.0,5481.0,1618.0,2957.0,1537.0,2.5707,171300.0,<1H OCEAN +-117.02,32.78,33.0,3481.0,708.0,1726.0,719.0,3.3675,158200.0,<1H OCEAN +-117.03,32.79,31.0,2366.0,383.0,1077.0,387.0,4.2992,174400.0,<1H OCEAN +-117.03,32.79,17.0,7352.0,1699.0,3331.0,1634.0,2.7006,166300.0,<1H OCEAN +-117.0,32.77,30.0,1802.0,401.0,776.0,386.0,2.8125,173500.0,<1H OCEAN +-117.01,32.76,22.0,3626.0,824.0,1800.0,769.0,2.8594,189600.0,<1H OCEAN +-117.01,32.76,34.0,3415.0,608.0,1464.0,593.0,4.0549,223700.0,<1H OCEAN +-117.01,32.77,24.0,2311.0,536.0,1005.0,525.0,2.9,185200.0,<1H OCEAN +-117.01,32.77,34.0,3330.0,723.0,1592.0,656.0,2.6678,164200.0,<1H OCEAN +-117.01,32.77,43.0,841.0,192.0,496.0,207.0,3.0179,149300.0,<1H OCEAN +-117.01,32.79,31.0,3776.0,815.0,1886.0,799.0,3.4421,155300.0,<1H OCEAN +-117.01,32.78,20.0,2616.0,597.0,1532.0,579.0,2.9896,235600.0,<1H OCEAN +-117.02,32.78,31.0,2567.0,,1198.0,499.0,3.4659,163000.0,<1H OCEAN +-117.02,32.79,36.0,2211.0,384.0,868.0,329.0,4.0491,147900.0,<1H OCEAN +-116.99,32.79,33.0,2420.0,393.0,1003.0,397.0,4.0658,165100.0,<1H OCEAN +-116.99,32.79,26.0,3623.0,703.0,1609.0,669.0,3.744,165800.0,<1H OCEAN +-116.99,32.78,29.0,1114.0,163.0,385.0,154.0,5.4333,222800.0,<1H OCEAN +-117.0,32.79,31.0,3256.0,726.0,1595.0,706.0,3.4773,155800.0,<1H OCEAN +-116.99,32.77,35.0,2306.0,334.0,828.0,310.0,6.1103,301600.0,<1H OCEAN +-116.98,32.77,29.0,3558.0,447.0,1097.0,445.0,8.093,379600.0,<1H OCEAN +-117.0,32.76,31.0,2545.0,373.0,956.0,342.0,4.3977,226800.0,<1H OCEAN +-117.0,32.77,35.0,2114.0,317.0,881.0,320.0,5.5,241400.0,<1H OCEAN +-116.95,32.78,33.0,2432.0,443.0,1147.0,427.0,3.3906,138100.0,<1H OCEAN +-116.96,32.78,26.0,2807.0,630.0,1785.0,580.0,2.1638,132800.0,<1H OCEAN +-116.97,32.78,26.0,8902.0,1413.0,3941.0,1387.0,4.7943,226900.0,<1H OCEAN +-116.92,32.78,21.0,4192.0,752.0,2101.0,710.0,4.4306,159100.0,<1H OCEAN +-116.91,32.78,15.0,4058.0,511.0,1580.0,473.0,7.5,316400.0,<1H OCEAN +-116.92,32.77,16.0,2770.0,406.0,1269.0,429.0,6.6783,275000.0,<1H OCEAN +-116.9,32.77,8.0,3600.0,492.0,1421.0,482.0,6.2609,307100.0,<1H OCEAN +-116.95,32.78,20.0,3425.0,448.0,1489.0,443.0,6.2552,296400.0,<1H OCEAN +-116.95,32.77,25.0,3308.0,421.0,1201.0,414.0,6.3191,303400.0,<1H OCEAN +-116.94,32.78,17.0,13559.0,2656.0,6990.0,2533.0,3.434,193200.0,<1H OCEAN +-116.85,32.83,17.0,4234.0,770.0,2191.0,725.0,3.6445,197600.0,<1H OCEAN +-116.88,32.81,35.0,2926.0,562.0,1590.0,506.0,4.2014,143200.0,<1H OCEAN +-116.86,32.8,19.0,1747.0,291.0,848.0,290.0,4.875,187200.0,<1H OCEAN +-116.83,32.83,6.0,3123.0,495.0,1513.0,480.0,5.4288,167800.0,<1H OCEAN +-116.83,32.81,18.0,2367.0,402.0,1021.0,395.0,4.8125,210500.0,<1H OCEAN +-116.92,32.79,24.0,4055.0,742.0,2123.0,744.0,4.5224,142000.0,<1H OCEAN +-116.93,32.79,23.0,5759.0,1258.0,3108.0,1202.0,3.0927,140600.0,<1H OCEAN +-116.91,32.8,32.0,1943.0,287.0,1081.0,292.0,5.6846,208800.0,<1H OCEAN +-116.9,32.79,21.0,3770.0,491.0,1410.0,446.0,6.7685,294700.0,<1H OCEAN +-116.94,32.8,21.0,7906.0,2292.0,4868.0,2117.0,1.8937,109800.0,<1H OCEAN +-116.93,32.79,19.0,3354.0,,1948.0,682.0,3.0192,142300.0,<1H OCEAN +-116.95,32.79,19.0,11391.0,3093.0,7178.0,2905.0,2.0326,123200.0,<1H OCEAN +-116.96,32.8,16.0,3920.0,1094.0,2612.0,1023.0,1.3291,120800.0,<1H OCEAN +-116.96,32.79,19.0,3008.0,693.0,2341.0,689.0,2.6087,123800.0,<1H OCEAN +-116.96,32.79,35.0,1081.0,266.0,691.0,259.0,2.6324,133700.0,<1H OCEAN +-116.96,32.8,24.0,2493.0,693.0,1420.0,643.0,1.8357,104200.0,<1H OCEAN +-116.97,32.79,19.0,4108.0,1101.0,2971.0,1006.0,1.9893,112500.0,<1H OCEAN +-116.96,32.79,17.0,5236.0,1325.0,3308.0,1233.0,2.3221,138800.0,<1H OCEAN +-116.97,32.78,37.0,1255.0,238.0,671.0,278.0,3.7019,138600.0,<1H OCEAN +-116.97,32.78,35.0,1113.0,236.0,681.0,246.0,2.9784,136400.0,<1H OCEAN +-116.97,32.79,32.0,1255.0,338.0,782.0,302.0,2.6635,113600.0,<1H OCEAN +-116.98,32.79,32.0,3756.0,662.0,1611.0,598.0,3.8667,189700.0,<1H OCEAN +-116.98,32.8,28.0,5721.0,1029.0,2672.0,1054.0,3.963,164400.0,<1H OCEAN +-116.99,32.8,34.0,3657.0,538.0,1513.0,562.0,5.2907,195800.0,<1H OCEAN +-117.0,32.8,33.0,1816.0,325.0,768.0,316.0,4.5662,150300.0,<1H OCEAN +-117.0,32.8,29.0,2045.0,398.0,912.0,368.0,3.0189,144100.0,<1H OCEAN +-116.99,32.81,25.0,4436.0,758.0,1997.0,738.0,4.2386,201000.0,<1H OCEAN +-116.99,32.81,18.0,10968.0,1521.0,4439.0,1501.0,6.2787,250000.0,<1H OCEAN +-116.97,32.83,23.0,149.0,32.0,101.0,34.0,2.6458,112500.0,<1H OCEAN +-116.97,32.81,19.0,1573.0,471.0,844.0,414.0,2.1422,125000.0,<1H OCEAN +-116.97,32.8,15.0,3927.0,1018.0,2204.0,977.0,2.4367,111400.0,<1H OCEAN +-116.94,32.81,22.0,4266.0,1010.0,2766.0,985.0,2.8175,135200.0,<1H OCEAN +-116.94,32.8,28.0,3042.0,729.0,1964.0,703.0,2.4141,137500.0,<1H OCEAN +-116.96,32.8,19.0,4574.0,1152.0,3045.0,1057.0,2.065,124100.0,<1H OCEAN +-116.96,32.8,25.0,3421.0,803.0,1681.0,742.0,3.369,134400.0,<1H OCEAN +-116.92,32.82,34.0,1765.0,284.0,772.0,282.0,5.0118,165300.0,<1H OCEAN +-116.92,32.81,23.0,2668.0,528.0,1510.0,524.0,3.3669,158900.0,<1H OCEAN +-116.93,32.82,26.0,4129.0,714.0,1820.0,718.0,4.2586,171000.0,<1H OCEAN +-116.91,32.81,22.0,4331.0,637.0,1952.0,654.0,5.4834,232000.0,<1H OCEAN +-116.92,32.8,33.0,1518.0,268.0,857.0,272.0,3.5586,160400.0,<1H OCEAN +-116.92,32.81,17.0,1312.0,394.0,836.0,337.0,1.6686,112500.0,<1H OCEAN +-116.93,32.8,19.0,1867.0,538.0,1219.0,468.0,2.0685,130000.0,<1H OCEAN +-116.93,32.81,18.0,2447.0,466.0,1573.0,472.0,2.6429,125400.0,<1H OCEAN +-116.95,32.82,19.0,5308.0,1058.0,2852.0,1092.0,2.9161,135700.0,<1H OCEAN +-116.95,32.82,12.0,5535.0,1434.0,3112.0,1262.0,2.5949,108300.0,<1H OCEAN +-116.95,32.81,31.0,1277.0,293.0,698.0,237.0,3.1106,147700.0,<1H OCEAN +-116.96,32.81,8.0,2378.0,638.0,1410.0,623.0,2.9097,152500.0,<1H OCEAN +-116.94,32.82,35.0,1737.0,285.0,826.0,294.0,3.2411,159200.0,<1H OCEAN +-116.94,32.81,8.0,2517.0,632.0,1686.0,613.0,2.136,143500.0,<1H OCEAN +-116.95,32.81,15.0,2619.0,599.0,1513.0,537.0,2.543,100000.0,<1H OCEAN +-116.95,32.82,18.0,3038.0,592.0,1904.0,595.0,3.8024,144900.0,<1H OCEAN +-116.97,32.83,17.0,6659.0,1402.0,3183.0,1378.0,2.949,117300.0,<1H OCEAN +-116.99,32.83,20.0,6696.0,1326.0,3687.0,1291.0,3.1979,154600.0,<1H OCEAN +-116.99,32.85,32.0,5211.0,949.0,3025.0,948.0,4.0931,134200.0,<1H OCEAN +-116.98,32.85,12.0,3570.0,713.0,3321.0,666.0,4.0882,134500.0,<1H OCEAN +-117.01,32.83,17.0,15401.0,3280.0,7302.0,3176.0,3.3067,121900.0,<1H OCEAN +-117.01,32.84,23.0,1951.0,395.0,901.0,378.0,3.1023,143300.0,<1H OCEAN +-117.02,32.84,17.0,4013.0,673.0,2263.0,661.0,5.131,148300.0,<1H OCEAN +-116.96,32.85,11.0,9724.0,1796.0,5247.0,1777.0,4.1716,166100.0,<1H OCEAN +-116.96,32.86,14.0,3064.0,496.0,1681.0,503.0,4.4347,160300.0,<1H OCEAN +-116.96,32.87,17.0,4713.0,740.0,2531.0,723.0,4.8286,158500.0,<1H OCEAN +-116.98,32.88,12.0,7320.0,1279.0,4048.0,1249.0,4.3952,151700.0,<1H OCEAN +-116.98,32.86,19.0,2121.0,341.0,1236.0,353.0,4.7717,153200.0,<1H OCEAN +-116.98,32.86,16.0,7718.0,1423.0,4383.0,1394.0,4.0693,146400.0,<1H OCEAN +-117.0,32.87,18.0,11544.0,1979.0,6296.0,1923.0,4.4904,150400.0,<1H OCEAN +-117.01,32.85,23.0,2592.0,414.0,1401.0,431.0,5.4903,151400.0,<1H OCEAN +-117.0,32.85,24.0,1888.0,319.0,950.0,319.0,5.282,140800.0,<1H OCEAN +-116.95,32.83,14.0,12517.0,2506.0,6389.0,2333.0,3.3081,168700.0,<1H OCEAN +-116.95,32.84,31.0,1307.0,,752.0,231.0,3.4286,129400.0,<1H OCEAN +-116.93,32.85,15.0,3273.0,895.0,1872.0,842.0,2.5388,119000.0,<1H OCEAN +-116.93,32.85,5.0,4116.0,990.0,2770.0,905.0,3.1142,150000.0,<1H OCEAN +-116.94,32.85,31.0,1293.0,232.0,599.0,228.0,4.7578,161000.0,<1H OCEAN +-116.94,32.84,32.0,1607.0,253.0,778.0,262.0,4.5278,166300.0,<1H OCEAN +-116.94,32.83,38.0,1701.0,317.0,872.0,304.0,3.7831,147800.0,<1H OCEAN +-116.88,32.86,9.0,3049.0,471.0,1527.0,515.0,5.0733,196600.0,<1H OCEAN +-116.86,32.87,17.0,5799.0,921.0,2630.0,843.0,5.0524,285400.0,<1H OCEAN +-116.84,32.86,16.0,2502.0,532.0,1211.0,494.0,3.2516,202100.0,<1H OCEAN +-116.89,32.85,16.0,1743.0,333.0,652.0,322.0,2.8906,158300.0,<1H OCEAN +-116.91,32.87,14.0,3048.0,597.0,1690.0,576.0,4.3818,147100.0,<1H OCEAN +-116.91,32.86,10.0,3699.0,838.0,2310.0,759.0,2.5365,139500.0,<1H OCEAN +-116.91,32.86,15.0,3153.0,628.0,1633.0,527.0,3.6898,131000.0,<1H OCEAN +-116.92,32.86,11.0,2204.0,518.0,1472.0,497.0,2.3693,127000.0,<1H OCEAN +-116.93,32.83,19.0,3038.0,529.0,1463.0,509.0,3.944,172500.0,<1H OCEAN +-116.93,32.83,21.0,1283.0,278.0,684.0,289.0,2.3203,163500.0,<1H OCEAN +-116.92,32.82,17.0,2492.0,494.0,1278.0,439.0,2.8875,155700.0,<1H OCEAN +-116.92,32.85,23.0,1378.0,269.0,767.0,266.0,4.0625,145000.0,<1H OCEAN +-116.92,32.84,16.0,4675.0,834.0,2188.0,817.0,4.6674,178000.0,<1H OCEAN +-116.91,32.83,16.0,5203.0,,2515.0,862.0,4.105,174400.0,<1H OCEAN +-116.92,32.82,16.0,2784.0,468.0,1458.0,465.0,4.0048,184600.0,<1H OCEAN +-116.91,32.85,21.0,4152.0,703.0,2255.0,697.0,4.5096,159500.0,<1H OCEAN +-116.89,32.85,15.0,3560.0,593.0,1757.0,574.0,5.1185,185300.0,<1H OCEAN +-116.9,32.84,18.0,3612.0,737.0,1864.0,713.0,2.7069,153800.0,<1H OCEAN +-116.89,32.82,18.0,2515.0,443.0,1442.0,449.0,5.0201,154400.0,<1H OCEAN +-116.9,32.84,18.0,4215.0,810.0,2104.0,773.0,4.0873,146900.0,<1H OCEAN +-116.91,32.82,14.0,1978.0,424.0,1085.0,387.0,3.8073,170100.0,<1H OCEAN +-116.96,32.9,16.0,3047.0,495.0,1507.0,499.0,5.3008,186500.0,<1H OCEAN +-116.94,32.89,24.0,2541.0,381.0,1078.0,372.0,5.2542,227800.0,<1H OCEAN +-116.94,32.87,24.0,2824.0,441.0,1480.0,471.0,5.2614,177200.0,<1H OCEAN +-116.93,32.87,17.0,3722.0,670.0,1561.0,604.0,3.6027,211900.0,<1H OCEAN +-116.9,32.9,19.0,3090.0,552.0,1621.0,520.0,4.0806,189200.0,<1H OCEAN +-116.84,32.92,20.0,1066.0,219.0,536.0,173.0,3.1607,119300.0,<1H OCEAN +-117.05,33.01,19.0,3558.0,588.0,1439.0,578.0,4.625,211100.0,<1H OCEAN +-117.05,33.01,17.0,3430.0,425.0,1468.0,433.0,10.6186,429300.0,<1H OCEAN +-117.04,33.01,28.0,922.0,107.0,314.0,97.0,8.4721,342300.0,<1H OCEAN +-117.03,33.0,6.0,6139.0,793.0,2693.0,770.0,7.7569,387400.0,<1H OCEAN +-117.04,32.99,6.0,9518.0,1418.0,4413.0,1275.0,6.6012,314900.0,<1H OCEAN +-117.04,32.98,16.0,1332.0,196.0,640.0,193.0,6.0226,192900.0,<1H OCEAN +-117.06,32.99,16.0,1306.0,196.0,713.0,222.0,6.2683,180700.0,<1H OCEAN +-117.05,32.97,17.0,9911.0,1436.0,4763.0,1414.0,5.5882,194300.0,<1H OCEAN +-117.05,32.96,18.0,3593.0,661.0,1992.0,626.0,4.8295,165800.0,<1H OCEAN +-117.04,32.97,13.0,6711.0,1256.0,3683.0,1220.0,4.5746,175700.0,<1H OCEAN +-117.03,32.97,16.0,3936.0,694.0,1935.0,659.0,4.5625,231200.0,<1H OCEAN +-117.03,32.96,16.0,3424.0,698.0,1940.0,645.0,4.121,182100.0,<1H OCEAN +-116.99,32.96,17.0,5509.0,866.0,2748.0,817.0,4.8854,181300.0,<1H OCEAN +-117.02,32.95,25.0,1909.0,334.0,1043.0,322.0,3.7784,160100.0,<1H OCEAN +-117.03,32.95,19.0,4500.0,815.0,2456.0,782.0,4.5032,168900.0,<1H OCEAN +-117.05,32.95,17.0,3039.0,555.0,1297.0,552.0,3.9531,178600.0,<1H OCEAN +-117.05,32.95,17.0,4814.0,1091.0,3013.0,1078.0,3.2369,167800.0,<1H OCEAN +-117.06,33.02,24.0,830.0,190.0,279.0,196.0,1.9176,121100.0,<1H OCEAN +-117.06,33.01,24.0,2618.0,485.0,726.0,443.0,3.5192,159100.0,<1H OCEAN +-117.07,33.01,25.0,2120.0,381.0,588.0,359.0,3.1187,169400.0,<1H OCEAN +-117.07,33.02,17.0,2863.0,665.0,715.0,467.0,2.6048,148200.0,<1H OCEAN +-117.06,33.04,17.0,1785.0,255.0,667.0,277.0,5.7382,278000.0,<1H OCEAN +-117.06,33.03,23.0,2023.0,309.0,678.0,340.0,7.0913,265400.0,<1H OCEAN +-117.07,33.03,14.0,6665.0,1231.0,2026.0,1001.0,5.09,268500.0,<1H OCEAN +-117.07,33.03,15.0,1095.0,158.0,361.0,176.0,6.8099,328200.0,<1H OCEAN +-117.08,33.03,10.0,2296.0,450.0,818.0,405.0,4.3424,160600.0,<1H OCEAN +-117.07,33.04,4.0,2271.0,578.0,926.0,391.0,3.6437,210100.0,<1H OCEAN +-117.08,33.03,15.0,3023.0,623.0,1283.0,559.0,3.3724,137900.0,<1H OCEAN +-117.08,33.03,17.0,987.0,142.0,463.0,152.0,5.8747,229300.0,<1H OCEAN +-117.08,33.03,18.0,1339.0,284.0,761.0,290.0,5.3074,137200.0,<1H OCEAN +-117.09,33.03,17.0,2786.0,396.0,1228.0,396.0,6.4211,220700.0,<1H OCEAN +-117.08,33.04,10.0,2577.0,347.0,1193.0,365.0,6.53,264100.0,<1H OCEAN +-117.15,33.02,4.0,15029.0,2279.0,5613.0,1696.0,7.2731,450400.0,NEAR OCEAN +-117.1,32.97,17.0,3167.0,861.0,2098.0,828.0,2.4459,85800.0,<1H OCEAN +-117.1,32.96,7.0,3619.0,770.0,1134.0,482.0,4.1279,167600.0,<1H OCEAN +-117.05,33.05,6.0,7916.0,1293.0,2741.0,1204.0,5.6436,278600.0,<1H OCEAN +-117.05,33.04,12.0,1840.0,254.0,580.0,234.0,6.7769,400000.0,<1H OCEAN +-117.05,33.03,14.0,5180.0,1051.0,1639.0,991.0,4.5,222200.0,<1H OCEAN +-117.05,33.03,16.0,87.0,20.0,32.0,21.0,4.3571,144600.0,<1H OCEAN +-117.06,33.02,17.0,2635.0,389.0,994.0,359.0,5.8966,261500.0,<1H OCEAN +-117.05,33.02,18.0,917.0,121.0,388.0,131.0,6.3517,260100.0,<1H OCEAN +-117.01,33.04,13.0,4595.0,567.0,1643.0,544.0,7.7684,362300.0,<1H OCEAN +-117.04,33.03,16.0,2852.0,435.0,1083.0,448.0,6.3761,296200.0,<1H OCEAN +-117.01,32.99,8.0,3372.0,430.0,1536.0,448.0,8.4284,378300.0,<1H OCEAN +-116.99,33.01,11.0,1412.0,185.0,529.0,166.0,7.7517,500001.0,<1H OCEAN +-117.09,32.91,9.0,2012.0,316.0,802.0,289.0,6.5706,255700.0,<1H OCEAN +-117.09,32.91,16.0,2005.0,266.0,827.0,270.0,7.0546,282200.0,<1H OCEAN +-117.09,32.9,16.0,1989.0,290.0,814.0,291.0,6.2715,255100.0,<1H OCEAN +-117.1,32.9,16.0,2994.0,445.0,1047.0,437.0,5.149,184300.0,<1H OCEAN +-117.11,32.9,16.0,2043.0,388.0,705.0,352.0,4.4766,161500.0,<1H OCEAN +-117.11,32.91,15.0,1840.0,235.0,855.0,241.0,7.5992,310600.0,<1H OCEAN +-117.08,32.91,16.0,1653.0,228.0,690.0,224.0,6.5853,248400.0,<1H OCEAN +-117.08,32.93,5.0,14944.0,2490.0,6600.0,2407.0,6.0857,308300.0,<1H OCEAN +-117.08,32.91,9.0,1547.0,218.0,683.0,231.0,7.5604,327900.0,<1H OCEAN +-117.07,33.01,5.0,5870.0,977.0,1917.0,842.0,5.1998,294100.0,<1H OCEAN +-117.06,33.01,9.0,2470.0,417.0,904.0,427.0,4.4219,209200.0,<1H OCEAN +-117.07,33.0,4.0,6242.0,1258.0,2211.0,1116.0,4.25,281600.0,<1H OCEAN +-117.07,33.0,4.0,9153.0,1866.0,3775.0,1698.0,4.955,241500.0,<1H OCEAN +-117.08,33.01,5.0,5659.0,931.0,2565.0,902.0,6.1949,238700.0,<1H OCEAN +-117.09,32.99,16.0,2175.0,327.0,1037.0,326.0,5.1909,201400.0,<1H OCEAN +-117.09,32.99,18.0,3215.0,588.0,1618.0,509.0,4.6028,216800.0,<1H OCEAN +-117.09,32.98,23.0,1125.0,273.0,687.0,308.0,2.3182,268800.0,<1H OCEAN +-117.12,32.96,16.0,3050.0,559.0,1444.0,512.0,5.2463,156300.0,<1H OCEAN +-117.11,32.97,9.0,1531.0,242.0,850.0,240.0,6.0862,263600.0,<1H OCEAN +-117.1,33.0,5.0,15502.0,2613.0,7417.0,2358.0,5.9094,261100.0,<1H OCEAN +-117.11,32.95,11.0,4694.0,824.0,2223.0,783.0,4.9485,231800.0,<1H OCEAN +-117.12,32.95,8.0,3670.0,536.0,1723.0,592.0,6.3542,218100.0,<1H OCEAN +-117.12,32.96,15.0,2869.0,405.0,1526.0,402.0,6.0175,238300.0,<1H OCEAN +-117.12,32.95,4.0,9018.0,1572.0,4438.0,1498.0,4.988,263700.0,<1H OCEAN +-117.08,32.97,3.0,17466.0,3336.0,7644.0,2895.0,5.4584,246500.0,<1H OCEAN +-117.06,32.97,17.0,4754.0,877.0,2412.0,832.0,4.3548,192300.0,<1H OCEAN +-117.25,33.06,6.0,9859.0,1448.0,4194.0,1401.0,6.439,296200.0,NEAR OCEAN +-117.25,33.05,16.0,2794.0,476.0,1387.0,442.0,4.3286,213400.0,NEAR OCEAN +-117.26,33.05,14.0,2323.0,373.0,1057.0,372.0,6.2513,240900.0,NEAR OCEAN +-117.26,33.06,11.0,2660.0,352.0,1226.0,366.0,7.6832,319800.0,NEAR OCEAN +-117.24,33.05,15.0,3029.0,555.0,1559.0,546.0,5.3129,169200.0,NEAR OCEAN +-117.24,33.05,11.0,5827.0,882.0,2588.0,842.0,6.4027,344200.0,NEAR OCEAN +-117.2,33.07,5.0,10394.0,1617.0,4496.0,1553.0,5.9289,411300.0,NEAR OCEAN +-117.16,33.06,16.0,1988.0,279.0,770.0,252.0,5.8661,404500.0,NEAR OCEAN +-117.21,33.03,20.0,3370.0,433.0,1020.0,408.0,11.0911,500001.0,NEAR OCEAN +-117.18,33.02,15.0,3540.0,453.0,1364.0,425.0,13.6623,500001.0,NEAR OCEAN +-117.21,33.02,26.0,3194.0,454.0,1032.0,406.0,10.156,500001.0,NEAR OCEAN +-117.23,33.01,18.0,3961.0,511.0,1541.0,470.0,11.1118,500001.0,NEAR OCEAN +-117.26,32.97,25.0,2582.0,495.0,1088.0,471.0,6.4651,500001.0,NEAR OCEAN +-117.26,32.96,36.0,1721.0,264.0,710.0,282.0,10.1768,500001.0,NEAR OCEAN +-117.26,32.95,34.0,1651.0,273.0,650.0,271.0,5.6582,500001.0,NEAR OCEAN +-117.26,32.95,22.0,5484.0,1227.0,1947.0,1012.0,4.4375,500001.0,NEAR OCEAN +-117.3,32.96,30.0,1226.0,205.0,380.0,151.0,4.2875,500001.0,NEAR OCEAN +-117.25,33.01,16.0,3892.0,520.0,1454.0,524.0,7.7317,396000.0,NEAR OCEAN +-117.24,33.0,16.0,2512.0,356.0,795.0,353.0,7.5975,369100.0,NEAR OCEAN +-117.23,32.99,17.0,2718.0,326.0,1011.0,319.0,15.0001,500001.0,NEAR OCEAN +-117.25,32.99,10.0,4926.0,749.0,1478.0,634.0,7.472,439900.0,NEAR OCEAN +-117.25,33.0,14.0,2518.0,458.0,931.0,414.0,5.8393,485300.0,NEAR OCEAN +-117.26,33.0,31.0,2695.0,491.0,1059.0,451.0,4.7841,393500.0,NEAR OCEAN +-117.27,33.0,36.0,2426.0,454.0,1085.0,420.0,5.1523,387800.0,NEAR OCEAN +-117.31,33.0,30.0,1631.0,310.0,665.0,297.0,6.8443,492500.0,NEAR OCEAN +-117.26,32.99,16.0,2127.0,512.0,1532.0,499.0,2.7348,231300.0,NEAR OCEAN +-117.27,32.99,21.0,3318.0,578.0,1273.0,538.0,5.5922,382100.0,NEAR OCEAN +-117.26,32.98,12.0,3900.0,977.0,1690.0,892.0,4.125,226900.0,NEAR OCEAN +-117.31,32.98,17.0,2789.0,648.0,849.0,345.0,4.1012,244700.0,NEAR OCEAN +-117.27,32.98,17.0,1853.0,392.0,351.0,208.0,5.2742,230700.0,NEAR OCEAN +-117.32,33.01,29.0,3584.0,712.0,1619.0,667.0,4.125,394400.0,NEAR OCEAN +-117.28,33.02,21.0,2736.0,585.0,1251.0,576.0,4.2356,347700.0,NEAR OCEAN +-117.27,33.02,13.0,5723.0,1242.0,2450.0,1140.0,4.7179,376700.0,NEAR OCEAN +-117.26,33.04,18.0,2229.0,346.0,1088.0,352.0,6.3525,278300.0,NEAR OCEAN +-117.26,33.04,16.0,3109.0,450.0,1433.0,453.0,6.6319,269600.0,NEAR OCEAN +-117.24,33.04,13.0,3498.0,663.0,1412.0,618.0,3.212,147600.0,NEAR OCEAN +-117.25,33.03,6.0,3416.0,493.0,1319.0,467.0,6.9326,324600.0,NEAR OCEAN +-117.27,33.03,25.0,1787.0,311.0,1108.0,311.0,3.9826,215800.0,NEAR OCEAN +-117.27,33.03,16.0,2240.0,443.0,1104.0,416.0,3.5313,148700.0,NEAR OCEAN +-117.26,33.02,9.0,4632.0,759.0,1724.0,685.0,6.3712,369800.0,NEAR OCEAN +-117.27,33.03,19.0,2899.0,499.0,1356.0,512.0,4.87,220900.0,NEAR OCEAN +-117.27,33.02,21.0,2144.0,340.0,928.0,344.0,5.798,286100.0,NEAR OCEAN +-117.29,33.05,28.0,1146.0,338.0,672.0,292.0,3.1667,300000.0,NEAR OCEAN +-117.28,33.04,12.0,4459.0,928.0,2471.0,888.0,3.5179,252700.0,NEAR OCEAN +-117.27,33.04,27.0,1839.0,392.0,1302.0,404.0,3.55,214600.0,NEAR OCEAN +-117.29,33.04,30.0,2750.0,555.0,1281.0,520.0,4.7333,286900.0,NEAR OCEAN +-117.33,33.03,31.0,1171.0,321.0,603.0,267.0,2.8611,314300.0,NEAR OCEAN +-117.3,33.07,14.0,2670.0,426.0,1034.0,407.0,6.4247,295100.0,NEAR OCEAN +-117.29,33.08,18.0,3225.0,515.0,1463.0,476.0,5.7787,346700.0,NEAR OCEAN +-117.27,33.08,7.0,2949.0,447.0,1335.0,426.0,6.0922,342400.0,NEAR OCEAN +-117.29,33.06,20.0,2110.0,335.0,1008.0,325.0,6.1509,338700.0,NEAR OCEAN +-117.28,33.06,8.0,4172.0,1022.0,2585.0,941.0,4.0118,245800.0,NEAR OCEAN +-117.27,33.06,7.0,3686.0,733.0,1612.0,672.0,3.197,367100.0,NEAR OCEAN +-117.27,33.05,15.0,3333.0,808.0,1371.0,737.0,2.9083,122400.0,NEAR OCEAN +-117.3,33.08,24.0,2628.0,527.0,1389.0,520.0,4.0,343200.0,NEAR OCEAN +-117.34,33.06,17.0,2718.0,518.0,815.0,403.0,4.3182,357100.0,NEAR OCEAN +-117.31,33.07,21.0,2035.0,534.0,948.0,467.0,3.2984,369400.0,NEAR OCEAN +-117.3,33.07,16.0,3147.0,765.0,2165.0,690.0,3.5585,284800.0,NEAR OCEAN +-117.3,33.06,24.0,2171.0,511.0,870.0,442.0,3.194,276300.0,NEAR OCEAN +-117.3,33.06,31.0,2128.0,520.0,1049.0,485.0,4.027,290000.0,NEAR OCEAN +-117.3,33.05,34.0,1797.0,458.0,775.0,391.0,3.2308,331300.0,NEAR OCEAN +-117.33,33.17,11.0,10923.0,2041.0,4773.0,1858.0,4.0791,281300.0,NEAR OCEAN +-117.34,33.16,31.0,2851.0,458.0,1286.0,467.0,4.5694,243700.0,NEAR OCEAN +-117.33,33.16,29.0,3559.0,552.0,1533.0,545.0,4.0585,245500.0,NEAR OCEAN +-117.32,33.15,15.0,13245.0,2212.0,5495.0,2060.0,5.4904,262100.0,NEAR OCEAN +-117.32,33.12,25.0,2670.0,527.0,936.0,461.0,2.7717,354000.0,NEAR OCEAN +-117.31,33.1,15.0,2392.0,446.0,747.0,421.0,3.5341,500001.0,NEAR OCEAN +-117.29,33.13,4.0,617.0,105.0,224.0,105.0,3.9205,183000.0,NEAR OCEAN +-117.31,33.11,7.0,7974.0,1703.0,2904.0,1550.0,4.1282,188100.0,NEAR OCEAN +-117.29,33.12,4.0,1380.0,322.0,755.0,286.0,4.7961,168800.0,NEAR OCEAN +-117.29,33.1,6.0,6091.0,1018.0,2064.0,957.0,5.1837,259800.0,NEAR OCEAN +-117.28,33.1,13.0,2644.0,422.0,1197.0,399.0,6.5338,267900.0,NEAR OCEAN +-117.35,33.17,16.0,4595.0,1341.0,2849.0,1197.0,2.478,185600.0,NEAR OCEAN +-117.34,33.16,24.0,1006.0,277.0,610.0,246.0,2.25,187500.0,NEAR OCEAN +-117.34,33.15,19.0,5710.0,1423.0,4163.0,1406.0,3.0306,178500.0,NEAR OCEAN +-117.35,33.16,22.0,1331.0,305.0,580.0,193.0,3.975,500001.0,NEAR OCEAN +-117.35,33.16,10.0,1684.0,515.0,902.0,449.0,3.7891,206300.0,NEAR OCEAN +-117.34,33.15,17.0,4505.0,1140.0,2111.0,1062.0,3.3536,283300.0,NEAR OCEAN +-117.36,33.18,26.0,5550.0,1153.0,2372.0,1058.0,2.5509,181800.0,NEAR OCEAN +-117.36,33.18,39.0,1546.0,291.0,833.0,308.0,2.8893,185400.0,NEAR OCEAN +-117.35,33.17,36.0,1977.0,423.0,812.0,387.0,3.625,198000.0,NEAR OCEAN +-117.36,33.17,24.0,2046.0,442.0,812.0,367.0,2.3182,500001.0,NEAR OCEAN +-117.37,33.18,19.0,1931.0,509.0,855.0,394.0,2.6979,266700.0,NEAR OCEAN +-117.37,33.19,23.0,4104.0,1274.0,4729.0,1187.0,1.8214,173800.0,NEAR OCEAN +-117.37,33.19,33.0,2205.0,453.0,1138.0,439.0,2.8819,208600.0,NEAR OCEAN +-117.37,33.19,18.0,975.0,382.0,650.0,286.0,1.9562,192500.0,NEAR OCEAN +-117.37,33.19,38.0,861.0,213.0,486.0,204.0,4.1875,185000.0,NEAR OCEAN +-117.38,33.19,35.0,928.0,264.0,538.0,248.0,2.4583,197900.0,NEAR OCEAN +-117.38,33.14,14.0,5039.0,1373.0,1298.0,696.0,3.209,313300.0,NEAR OCEAN +-117.38,33.19,26.0,4123.0,1145.0,1703.0,895.0,1.9891,500000.0,NEAR OCEAN +-117.38,33.2,17.0,1877.0,581.0,1288.0,426.0,1.9386,106300.0,NEAR OCEAN +-117.37,33.2,19.0,928.0,317.0,845.0,319.0,1.6318,187500.0,NEAR OCEAN +-117.38,33.19,17.0,353.0,112.0,359.0,118.0,1.5625,162500.0,NEAR OCEAN +-117.38,33.2,26.0,1427.0,386.0,974.0,317.0,1.3903,184400.0,NEAR OCEAN +-117.36,33.2,19.0,1926.0,557.0,1190.0,483.0,1.3269,166100.0,NEAR OCEAN +-117.36,33.2,19.0,2129.0,562.0,1323.0,525.0,2.9539,169900.0,NEAR OCEAN +-117.36,33.2,26.0,2447.0,482.0,1405.0,486.0,3.2917,150800.0,NEAR OCEAN +-117.35,33.2,23.0,3297.0,728.0,1793.0,622.0,2.5754,169700.0,NEAR OCEAN +-117.35,33.21,24.0,1586.0,262.0,912.0,298.0,4.25,150300.0,NEAR OCEAN +-117.34,33.21,23.0,2062.0,376.0,1302.0,379.0,4.0109,145700.0,NEAR OCEAN +-117.35,33.2,32.0,1251.0,220.0,700.0,232.0,3.9875,142900.0,NEAR OCEAN +-117.34,33.21,12.0,5963.0,1372.0,3015.0,1124.0,2.7386,216100.0,NEAR OCEAN +-117.35,33.19,28.0,2823.0,476.0,1189.0,433.0,5.1733,198100.0,NEAR OCEAN +-117.34,33.19,23.0,3546.0,553.0,1533.0,518.0,5.276,224500.0,NEAR OCEAN +-117.33,33.19,15.0,3672.0,845.0,1827.0,796.0,2.9716,173600.0,NEAR OCEAN +-117.34,33.19,19.0,3575.0,525.0,1654.0,559.0,5.7409,274100.0,NEAR OCEAN +-117.29,33.24,5.0,3109.0,634.0,1823.0,578.0,3.1875,153800.0,<1H OCEAN +-117.3,33.23,13.0,3619.0,791.0,1759.0,806.0,2.765,98500.0,<1H OCEAN +-117.32,33.23,24.0,2580.0,604.0,982.0,569.0,1.6402,169300.0,NEAR OCEAN +-117.31,33.24,6.0,1580.0,288.0,792.0,265.0,4.0469,162400.0,<1H OCEAN +-117.32,33.22,15.0,4784.0,1039.0,1810.0,986.0,2.4375,108900.0,NEAR OCEAN +-117.33,33.22,21.0,2868.0,602.0,855.0,559.0,2.7846,91200.0,NEAR OCEAN +-117.32,33.22,16.0,1057.0,232.0,316.0,221.0,2.7417,91700.0,NEAR OCEAN +-117.33,33.21,17.0,1246.0,300.0,424.0,288.0,2.2882,85800.0,NEAR OCEAN +-117.3,33.22,4.0,14960.0,2988.0,6666.0,2612.0,3.7568,184100.0,NEAR OCEAN +-117.31,33.19,11.0,20944.0,3753.0,8738.0,3441.0,4.3762,215500.0,NEAR OCEAN +-117.29,33.2,16.0,2150.0,461.0,1428.0,407.0,2.4754,157300.0,NEAR OCEAN +-117.31,33.18,16.0,1835.0,430.0,599.0,399.0,2.0147,87700.0,NEAR OCEAN +-117.29,33.19,18.0,6235.0,1233.0,4127.0,1162.0,3.0704,151600.0,NEAR OCEAN +-117.28,33.2,20.0,4835.0,854.0,2983.0,834.0,4.3428,152100.0,NEAR OCEAN +-117.37,33.22,35.0,2204.0,482.0,1435.0,462.0,3.676,125600.0,NEAR OCEAN +-117.35,33.23,4.0,1837.0,287.0,934.0,277.0,3.8958,189800.0,NEAR OCEAN +-117.35,33.21,18.0,2971.0,606.0,2051.0,493.0,2.675,117100.0,NEAR OCEAN +-117.38,33.21,31.0,1502.0,367.0,1514.0,342.0,2.6442,103300.0,NEAR OCEAN +-117.37,33.2,29.0,1315.0,311.0,1425.0,306.0,2.0272,99600.0,NEAR OCEAN +-117.28,33.28,13.0,6131.0,1040.0,4049.0,940.0,3.8156,150700.0,<1H OCEAN +-117.25,33.3,14.0,2513.0,351.0,1151.0,357.0,6.3054,359000.0,<1H OCEAN +-117.26,33.26,9.0,4609.0,798.0,2582.0,746.0,4.3429,173900.0,<1H OCEAN +-117.3,33.26,23.0,1678.0,275.0,1227.0,264.0,4.1713,133800.0,<1H OCEAN +-117.3,33.25,22.0,2329.0,419.0,1456.0,381.0,3.7933,131000.0,<1H OCEAN +-117.31,33.25,14.0,3483.0,764.0,2140.0,687.0,3.125,102300.0,<1H OCEAN +-117.31,33.25,13.0,3075.0,630.0,1843.0,674.0,2.8558,97100.0,<1H OCEAN +-117.32,33.25,7.0,2499.0,420.0,1314.0,398.0,4.85,186900.0,<1H OCEAN +-117.32,33.25,7.0,8206.0,1523.0,4399.0,1423.0,3.6301,170900.0,<1H OCEAN +-117.34,33.23,11.0,3737.0,757.0,2212.0,727.0,3.1062,141000.0,NEAR OCEAN +-117.33,33.23,15.0,2919.0,592.0,1130.0,579.0,2.5872,155600.0,NEAR OCEAN +-117.33,33.23,15.0,1905.0,416.0,1258.0,388.0,3.33,127900.0,NEAR OCEAN +-117.33,33.24,13.0,4543.0,881.0,2298.0,870.0,2.9386,143400.0,NEAR OCEAN +-117.42,33.35,14.0,25135.0,4819.0,35682.0,4769.0,2.5729,134400.0,<1H OCEAN +-117.24,33.34,17.0,2866.0,442.0,1354.0,431.0,4.5764,257300.0,<1H OCEAN +-117.22,33.36,16.0,3165.0,482.0,1351.0,452.0,4.605,263300.0,<1H OCEAN +-117.22,33.31,12.0,2924.0,433.0,1193.0,394.0,6.2475,331300.0,<1H OCEAN +-117.21,33.34,10.0,5294.0,817.0,2312.0,810.0,5.4563,325700.0,<1H OCEAN +-117.19,33.34,15.0,3310.0,488.0,1104.0,460.0,6.1009,314400.0,<1H OCEAN +-117.17,33.34,15.0,3313.0,679.0,1022.0,564.0,2.7986,189900.0,<1H OCEAN +-117.2,33.29,12.0,6358.0,1182.0,2778.0,1020.0,4.0357,295900.0,<1H OCEAN +-117.17,33.28,16.0,1921.0,312.0,862.0,280.0,5.1786,376800.0,<1H OCEAN +-117.25,33.38,16.0,3536.0,765.0,2007.0,687.0,3.0,146700.0,<1H OCEAN +-117.24,33.4,16.0,2704.0,463.0,1322.0,424.0,3.7857,227000.0,<1H OCEAN +-117.23,33.38,18.0,3339.0,704.0,1727.0,652.0,2.8393,173200.0,<1H OCEAN +-117.24,33.38,16.0,2792.0,525.0,1696.0,516.0,3.668,171200.0,<1H OCEAN +-117.25,33.38,17.0,1614.0,431.0,1031.0,389.0,2.0956,134400.0,<1H OCEAN +-117.25,33.39,22.0,2699.0,543.0,1425.0,491.0,2.375,137300.0,<1H OCEAN +-117.26,33.37,7.0,2221.0,548.0,1440.0,501.0,2.2368,154600.0,<1H OCEAN +-117.25,33.37,8.0,1755.0,530.0,1687.0,511.0,1.995,146900.0,<1H OCEAN +-117.24,33.37,14.0,4687.0,793.0,2436.0,779.0,4.5391,180900.0,<1H OCEAN +-117.24,33.36,11.0,2786.0,480.0,1250.0,450.0,4.5,222600.0,<1H OCEAN +-117.25,33.36,6.0,3725.0,960.0,2833.0,915.0,2.3214,247000.0,<1H OCEAN +-117.34,33.46,14.0,1902.0,338.0,848.0,304.0,5.5395,273300.0,<1H OCEAN +-117.19,33.41,16.0,3031.0,554.0,1301.0,518.0,4.0882,296100.0,<1H OCEAN +-117.14,33.39,17.0,2889.0,587.0,1931.0,510.0,3.8547,208300.0,<1H OCEAN +-117.2,33.38,14.0,5392.0,821.0,2350.0,810.0,5.0507,291500.0,<1H OCEAN +-117.1,33.36,19.0,3518.0,658.0,2091.0,610.0,3.2614,168800.0,<1H OCEAN +-116.95,33.31,16.0,2921.0,639.0,1838.0,540.0,2.2393,117000.0,<1H OCEAN +-117.03,33.32,14.0,1088.0,209.0,601.0,193.0,3.8438,243800.0,<1H OCEAN +-117.05,33.29,17.0,1800.0,312.0,891.0,281.0,7.0177,267600.0,<1H OCEAN +-117.05,33.26,14.0,3103.0,569.0,1704.0,539.0,3.7644,264700.0,<1H OCEAN +-117.12,33.27,11.0,3016.0,601.0,1727.0,541.0,4.9375,232800.0,<1H OCEAN +-117.0,33.29,17.0,2073.0,313.0,573.0,221.0,8.2531,419200.0,<1H OCEAN +-116.98,33.26,12.0,5898.0,1002.0,3129.0,945.0,4.7647,254100.0,<1H OCEAN +-116.99,33.2,17.0,2980.0,539.0,1531.0,505.0,3.1553,250000.0,<1H OCEAN +-116.9,33.22,11.0,4132.0,773.0,2012.0,703.0,3.1906,234500.0,<1H OCEAN +-117.14,33.23,11.0,4068.0,829.0,918.0,500.0,3.1272,281300.0,<1H OCEAN +-117.11,33.23,13.0,5819.0,919.0,2228.0,866.0,4.9335,298100.0,<1H OCEAN +-117.08,33.23,14.0,3337.0,571.0,1385.0,512.0,4.15,272200.0,<1H OCEAN +-117.2,33.24,12.0,4992.0,,2106.0,801.0,6.2079,307300.0,<1H OCEAN +-117.15,33.2,16.0,2690.0,459.0,1253.0,393.0,4.0328,294600.0,<1H OCEAN +-117.2,33.2,16.0,4409.0,629.0,1875.0,609.0,5.543,286400.0,<1H OCEAN +-117.22,33.22,17.0,3675.0,672.0,1693.0,597.0,3.3882,190800.0,<1H OCEAN +-117.22,33.22,16.0,2134.0,643.0,1555.0,560.0,1.7217,175000.0,<1H OCEAN +-117.22,33.22,15.0,1430.0,343.0,704.0,322.0,1.9571,162500.0,<1H OCEAN +-117.23,33.24,26.0,1991.0,330.0,1014.0,304.0,4.3068,240100.0,<1H OCEAN +-117.24,33.23,13.0,3756.0,648.0,1767.0,614.0,4.0776,196000.0,<1H OCEAN +-117.24,33.23,21.0,1718.0,308.0,1194.0,312.0,3.4359,150900.0,<1H OCEAN +-117.23,33.23,13.0,2899.0,657.0,1946.0,579.0,2.9875,172000.0,<1H OCEAN +-117.23,33.22,18.0,2334.0,573.0,962.0,557.0,1.808,97000.0,<1H OCEAN +-117.23,33.22,16.0,3224.0,729.0,1036.0,608.0,2.0246,148800.0,<1H OCEAN +-117.24,33.22,20.0,1962.0,334.0,1173.0,349.0,4.1316,162500.0,<1H OCEAN +-117.24,33.21,9.0,2486.0,626.0,1938.0,525.0,2.1293,151400.0,<1H OCEAN +-117.23,33.21,34.0,544.0,108.0,348.0,127.0,4.125,164600.0,<1H OCEAN +-117.25,33.25,6.0,6160.0,993.0,2997.0,1029.0,4.6187,205000.0,<1H OCEAN +-117.27,33.23,5.0,20908.0,3933.0,9690.0,3510.0,4.1405,198500.0,<1H OCEAN +-117.27,33.22,5.0,2283.0,337.0,999.0,325.0,5.0249,196700.0,<1H OCEAN +-117.27,33.22,16.0,1420.0,311.0,470.0,313.0,1.8849,90800.0,<1H OCEAN +-117.28,33.22,13.0,2832.0,542.0,1065.0,531.0,2.3844,98600.0,<1H OCEAN +-117.27,33.21,5.0,5764.0,996.0,3161.0,1012.0,4.4531,177500.0,<1H OCEAN +-117.25,33.22,26.0,2010.0,347.0,1160.0,331.0,3.9815,142600.0,<1H OCEAN +-117.25,33.22,19.0,2167.0,443.0,1654.0,435.0,3.5,135800.0,<1H OCEAN +-117.26,33.21,26.0,1906.0,408.0,1325.0,427.0,3.0197,136000.0,<1H OCEAN +-117.28,33.2,11.0,1472.0,261.0,1012.0,285.0,4.21,175600.0,NEAR OCEAN +-117.27,33.2,23.0,2145.0,379.0,1360.0,404.0,4.2054,150700.0,<1H OCEAN +-117.26,33.2,13.0,3163.0,725.0,1675.0,629.0,2.8214,121900.0,<1H OCEAN +-117.27,33.2,34.0,1852.0,322.0,978.0,332.0,4.3542,156900.0,<1H OCEAN +-117.27,33.19,8.0,973.0,289.0,663.0,209.0,2.724,139300.0,NEAR OCEAN +-117.28,33.19,5.0,2697.0,639.0,1633.0,580.0,3.4456,165800.0,NEAR OCEAN +-117.25,33.21,9.0,1944.0,488.0,1992.0,453.0,2.066,127200.0,<1H OCEAN +-117.24,33.21,19.0,1872.0,489.0,1859.0,446.0,2.1875,121700.0,<1H OCEAN +-117.24,33.21,18.0,1846.0,419.0,1581.0,387.0,3.0982,111300.0,<1H OCEAN +-117.24,33.2,25.0,1631.0,415.0,1045.0,386.0,2.4505,147500.0,<1H OCEAN +-117.24,33.2,26.0,1701.0,404.0,989.0,367.0,2.5119,171700.0,<1H OCEAN +-117.25,33.2,22.0,2361.0,618.0,1472.0,596.0,2.0625,124500.0,<1H OCEAN +-117.25,33.2,10.0,2050.0,473.0,1302.0,471.0,2.7961,131300.0,<1H OCEAN +-117.25,33.21,13.0,1203.0,292.0,1035.0,293.0,2.6339,117000.0,<1H OCEAN +-117.23,33.21,21.0,1934.0,386.0,861.0,381.0,3.6181,213800.0,<1H OCEAN +-117.22,33.21,19.0,4400.0,828.0,1901.0,735.0,3.6375,198800.0,<1H OCEAN +-117.22,33.2,31.0,1736.0,277.0,801.0,292.0,4.4844,205500.0,<1H OCEAN +-117.23,33.2,29.0,3372.0,720.0,1770.0,693.0,3.5109,166000.0,<1H OCEAN +-117.23,33.2,21.0,2284.0,360.0,999.0,356.0,4.8929,212500.0,<1H OCEAN +-117.21,33.2,22.0,3337.0,518.0,1288.0,466.0,5.04,253700.0,<1H OCEAN +-117.22,33.19,16.0,3004.0,656.0,1948.0,606.0,2.7019,216900.0,<1H OCEAN +-117.27,33.18,4.0,3371.0,773.0,1481.0,627.0,2.9133,215700.0,NEAR OCEAN +-117.26,33.19,4.0,2342.0,595.0,1518.0,545.0,2.9469,216100.0,NEAR OCEAN +-117.26,33.19,2.0,2629.0,509.0,1044.0,522.0,4.2361,158500.0,NEAR OCEAN +-117.25,33.19,18.0,1891.0,306.0,830.0,279.0,4.5764,207000.0,<1H OCEAN +-117.24,33.19,19.0,1569.0,351.0,1035.0,352.0,2.9191,159400.0,<1H OCEAN +-117.23,33.19,22.0,2554.0,447.0,1147.0,422.0,3.6346,192500.0,<1H OCEAN +-117.24,33.18,19.0,3337.0,565.0,1646.0,554.0,5.0195,200200.0,<1H OCEAN +-117.3,33.17,6.0,7880.0,1533.0,3760.0,1460.0,4.1807,182600.0,NEAR OCEAN +-117.32,33.17,18.0,2143.0,299.0,828.0,283.0,4.2383,239000.0,NEAR OCEAN +-117.31,33.17,7.0,2349.0,312.0,809.0,282.0,5.552,283900.0,NEAR OCEAN +-117.31,33.16,4.0,5846.0,894.0,2282.0,801.0,5.5956,247800.0,NEAR OCEAN +-117.31,33.16,17.0,1704.0,263.0,781.0,281.0,5.6605,224400.0,NEAR OCEAN +-117.29,33.18,15.0,3780.0,792.0,1632.0,721.0,2.7644,111400.0,NEAR OCEAN +-117.29,33.18,17.0,821.0,176.0,436.0,168.0,3.1667,160600.0,NEAR OCEAN +-117.28,33.18,16.0,3002.0,591.0,842.0,538.0,2.1205,157300.0,NEAR OCEAN +-117.28,33.18,14.0,676.0,118.0,384.0,126.0,6.2096,178100.0,NEAR OCEAN +-117.26,33.18,9.0,4540.0,793.0,2235.0,746.0,4.5781,225600.0,NEAR OCEAN +-117.27,33.15,4.0,23915.0,4135.0,10877.0,3958.0,4.6357,244900.0,NEAR OCEAN +-117.29,33.15,11.0,2560.0,445.0,952.0,448.0,4.0625,87500.0,NEAR OCEAN +-117.24,33.17,4.0,9998.0,1874.0,3925.0,1672.0,4.2826,237500.0,<1H OCEAN +-117.22,33.17,6.0,1487.0,362.0,810.0,322.0,3.625,135700.0,<1H OCEAN +-117.23,33.16,4.0,3066.0,625.0,1164.0,582.0,4.0,228100.0,NEAR OCEAN +-117.23,33.16,2.0,4624.0,946.0,2091.0,808.0,3.6736,214500.0,NEAR OCEAN +-117.22,33.18,13.0,4273.0,886.0,2328.0,801.0,3.3444,183900.0,<1H OCEAN +-117.21,33.17,16.0,1787.0,361.0,1446.0,362.0,3.75,163800.0,<1H OCEAN +-117.21,33.19,21.0,3765.0,612.0,1722.0,593.0,4.8152,218500.0,<1H OCEAN +-117.19,33.18,7.0,3561.0,722.0,1921.0,657.0,4.1128,209700.0,<1H OCEAN +-117.21,33.16,13.0,2937.0,698.0,1246.0,579.0,2.6487,196000.0,<1H OCEAN +-117.2,33.16,13.0,4503.0,1137.0,3094.0,1091.0,2.3159,91600.0,<1H OCEAN +-117.2,33.15,11.0,4091.0,864.0,1927.0,765.0,3.0139,199000.0,<1H OCEAN +-117.2,33.14,19.0,2025.0,414.0,1663.0,403.0,3.8147,139200.0,<1H OCEAN +-117.22,33.14,5.0,4576.0,848.0,2314.0,705.0,5.0123,210400.0,NEAR OCEAN +-117.21,33.14,12.0,4839.0,954.0,1708.0,952.0,2.8586,163300.0,<1H OCEAN +-117.21,33.13,15.0,1889.0,368.0,754.0,409.0,2.2278,132800.0,NEAR OCEAN +-117.17,33.18,25.0,596.0,115.0,426.0,137.0,3.0221,214300.0,<1H OCEAN +-117.18,33.16,15.0,5923.0,1206.0,3943.0,1006.0,3.1793,159900.0,<1H OCEAN +-117.15,33.16,5.0,4750.0,962.0,2726.0,905.0,3.5839,158500.0,<1H OCEAN +-117.14,33.16,16.0,1660.0,,733.0,214.0,5.6874,202700.0,<1H OCEAN +-117.13,33.15,15.0,2241.0,381.0,997.0,390.0,3.4833,193200.0,<1H OCEAN +-117.14,33.15,17.0,1149.0,182.0,702.0,192.0,5.5696,168400.0,<1H OCEAN +-117.14,33.15,16.0,1129.0,198.0,758.0,178.0,5.0346,174600.0,<1H OCEAN +-117.15,33.14,15.0,1070.0,208.0,470.0,217.0,2.3062,158900.0,<1H OCEAN +-117.13,33.15,16.0,3907.0,671.0,1759.0,663.0,3.1776,172600.0,<1H OCEAN +-117.13,33.14,16.0,1649.0,278.0,993.0,277.0,4.8526,170700.0,<1H OCEAN +-117.13,33.14,5.0,2618.0,539.0,1320.0,512.0,4.1053,171400.0,<1H OCEAN +-117.12,33.14,16.0,1710.0,272.0,1025.0,267.0,4.1641,163600.0,<1H OCEAN +-117.12,33.14,12.0,2363.0,408.0,1211.0,396.0,3.8967,172600.0,<1H OCEAN +-117.13,33.14,12.0,2258.0,456.0,1147.0,433.0,4.0495,153900.0,<1H OCEAN +-117.19,33.14,12.0,3652.0,923.0,1677.0,728.0,2.3267,92000.0,<1H OCEAN +-117.18,33.15,7.0,6225.0,1683.0,5410.0,1580.0,2.32,117500.0,<1H OCEAN +-117.21,33.13,19.0,3068.0,596.0,912.0,554.0,3.775,168000.0,NEAR OCEAN +-117.2,33.12,18.0,4372.0,736.0,1473.0,675.0,5.1194,247800.0,NEAR OCEAN +-117.21,33.12,4.0,3261.0,689.0,926.0,561.0,4.3672,258900.0,NEAR OCEAN +-117.18,33.11,16.0,3470.0,601.0,1197.0,552.0,5.1814,279900.0,NEAR OCEAN +-117.25,33.12,8.0,8552.0,1437.0,3335.0,1323.0,5.311,255800.0,NEAR OCEAN +-117.24,33.11,10.0,3487.0,545.0,1410.0,557.0,6.0336,240300.0,NEAR OCEAN +-117.23,33.1,4.0,1862.0,291.0,685.0,248.0,7.745,237400.0,NEAR OCEAN +-117.25,33.1,14.0,3676.0,720.0,1176.0,614.0,3.9464,171900.0,NEAR OCEAN +-117.26,33.09,22.0,2398.0,407.0,349.0,169.0,7.0423,500001.0,NEAR OCEAN +-117.26,33.09,13.0,3730.0,761.0,1335.0,603.0,4.1667,227100.0,NEAR OCEAN +-117.23,33.09,7.0,5320.0,855.0,2015.0,768.0,6.3373,279600.0,NEAR OCEAN +-117.25,33.08,13.0,3651.0,465.0,1311.0,435.0,7.5402,340300.0,NEAR OCEAN +-117.25,33.08,14.0,7208.0,1012.0,3097.0,1014.0,6.617,285200.0,NEAR OCEAN +-117.26,33.08,12.0,5080.0,814.0,1958.0,716.0,5.3905,299600.0,NEAR OCEAN +-117.09,33.13,9.0,5685.0,1442.0,3773.0,1250.0,3.0426,129900.0,<1H OCEAN +-117.08,33.14,15.0,1497.0,250.0,827.0,239.0,4.3846,154200.0,<1H OCEAN +-117.08,33.14,11.0,1430.0,292.0,921.0,294.0,4.2357,160900.0,<1H OCEAN +-117.07,33.14,16.0,2546.0,429.0,1683.0,408.0,4.7426,160600.0,<1H OCEAN +-117.07,33.15,17.0,1893.0,297.0,936.0,287.0,5.1842,157700.0,<1H OCEAN +-117.06,33.15,24.0,2155.0,379.0,1158.0,360.0,4.7941,147500.0,<1H OCEAN +-117.11,33.19,15.0,3154.0,488.0,1656.0,429.0,5.0461,222400.0,<1H OCEAN +-117.03,33.18,17.0,5391.0,886.0,2732.0,830.0,5.1771,212800.0,<1H OCEAN +-117.06,33.17,4.0,5465.0,974.0,2844.0,950.0,4.4477,174800.0,<1H OCEAN +-117.1,33.17,12.0,2465.0,412.0,1226.0,428.0,5.4819,183800.0,<1H OCEAN +-117.08,33.16,11.0,6341.0,1030.0,2697.0,977.0,4.8554,206700.0,<1H OCEAN +-117.07,33.15,15.0,2994.0,522.0,1231.0,503.0,3.2024,180400.0,<1H OCEAN +-117.08,33.14,19.0,2629.0,494.0,1444.0,503.0,3.5462,156800.0,<1H OCEAN +-117.09,33.15,13.0,3958.0,865.0,1981.0,840.0,3.4764,137500.0,<1H OCEAN +-117.07,33.13,17.0,6817.0,1632.0,4526.0,1474.0,2.6152,135300.0,<1H OCEAN +-117.07,33.13,33.0,555.0,165.0,612.0,176.0,2.1786,137500.0,<1H OCEAN +-117.06,33.14,27.0,3819.0,674.0,2447.0,717.0,3.8185,137200.0,<1H OCEAN +-117.05,33.13,20.0,7746.0,2035.0,5370.0,1838.0,2.3762,98500.0,<1H OCEAN +-117.04,33.15,15.0,13814.0,2888.0,6583.0,2789.0,2.8247,150000.0,<1H OCEAN +-117.05,33.14,16.0,4552.0,1166.0,2737.0,1051.0,2.25,136300.0,<1H OCEAN +-117.06,33.13,12.0,8742.0,2114.0,4854.0,1957.0,2.8015,143500.0,<1H OCEAN +-117.08,33.13,17.0,8466.0,2628.0,7014.0,2267.0,2.1437,113700.0,<1H OCEAN +-117.08,33.12,43.0,107.0,44.0,107.0,48.0,0.7054,137500.0,<1H OCEAN +-117.11,33.15,14.0,8374.0,1407.0,2916.0,1295.0,4.7019,191100.0,<1H OCEAN +-117.1,33.15,5.0,3159.0,685.0,1398.0,581.0,3.1467,161100.0,<1H OCEAN +-117.12,33.15,7.0,2810.0,464.0,1564.0,457.0,4.4655,182800.0,<1H OCEAN +-117.14,33.18,11.0,5546.0,974.0,2300.0,970.0,3.7109,199800.0,<1H OCEAN +-117.1,33.14,7.0,10665.0,2576.0,4917.0,2424.0,2.3171,159500.0,<1H OCEAN +-117.11,33.14,10.0,3208.0,636.0,1395.0,582.0,3.4455,190500.0,<1H OCEAN +-117.14,33.12,7.0,6126.0,1032.0,2662.0,923.0,4.9005,264000.0,<1H OCEAN +-117.13,33.13,17.0,3164.0,652.0,1123.0,699.0,2.082,80000.0,<1H OCEAN +-117.11,33.12,46.0,52.0,13.0,59.0,13.0,3.875,200000.0,<1H OCEAN +-117.1,33.12,12.0,961.0,342.0,315.0,201.0,0.813,275000.0,<1H OCEAN +-117.11,33.11,17.0,2641.0,627.0,1167.0,647.0,2.2875,132400.0,<1H OCEAN +-117.14,33.07,12.0,9302.0,1603.0,4074.0,1504.0,4.3513,199600.0,<1H OCEAN +-117.12,33.07,45.0,1032.0,235.0,363.0,177.0,3.6389,186600.0,<1H OCEAN +-117.1,33.07,16.0,2402.0,336.0,1080.0,365.0,8.6803,347300.0,<1H OCEAN +-117.07,33.07,8.0,2756.0,343.0,1045.0,340.0,8.5957,444100.0,<1H OCEAN +-117.1,33.09,5.0,12045.0,2162.0,5640.0,1997.0,4.4375,353000.0,<1H OCEAN +-117.08,33.08,23.0,3400.0,501.0,1383.0,488.0,4.9844,249100.0,<1H OCEAN +-117.09,33.1,21.0,2876.0,539.0,1387.0,499.0,3.8292,177000.0,<1H OCEAN +-117.08,33.09,23.0,3792.0,624.0,1988.0,658.0,4.7566,178300.0,<1H OCEAN +-117.09,33.12,11.0,567.0,184.0,620.0,163.0,2.5284,122500.0,<1H OCEAN +-117.08,33.11,31.0,1356.0,324.0,1301.0,331.0,2.5331,115100.0,<1H OCEAN +-117.08,33.11,28.0,2094.0,585.0,1556.0,563.0,2.2,127700.0,<1H OCEAN +-117.09,33.11,32.0,1713.0,321.0,891.0,286.0,3.1429,171600.0,<1H OCEAN +-117.08,33.12,37.0,1060.0,268.0,823.0,229.0,1.8363,145500.0,<1H OCEAN +-117.07,33.11,31.0,2055.0,473.0,1326.0,427.0,3.0915,139900.0,<1H OCEAN +-117.08,33.11,31.0,1832.0,444.0,1669.0,463.0,2.2146,116700.0,<1H OCEAN +-117.08,33.12,33.0,674.0,208.0,565.0,188.0,1.875,114300.0,<1H OCEAN +-117.07,33.12,21.0,4578.0,927.0,2818.0,900.0,3.1458,187700.0,<1H OCEAN +-117.07,33.12,32.0,2474.0,499.0,1224.0,461.0,2.7216,146300.0,<1H OCEAN +-117.07,33.12,12.0,2453.0,599.0,1251.0,529.0,2.4122,127000.0,<1H OCEAN +-117.07,33.11,17.0,5565.0,1237.0,3004.0,1139.0,3.0054,142300.0,<1H OCEAN +-117.06,33.09,11.0,7483.0,1276.0,3516.0,1261.0,4.0484,262500.0,<1H OCEAN +-117.03,33.13,15.0,7000.0,1185.0,3555.0,1118.0,4.7022,172800.0,<1H OCEAN +-116.97,33.13,10.0,5149.0,851.0,2177.0,783.0,6.7957,287500.0,<1H OCEAN +-117.05,33.13,17.0,2385.0,372.0,1118.0,369.0,4.2813,169900.0,<1H OCEAN +-117.05,33.11,18.0,4393.0,642.0,2095.0,677.0,5.4786,223500.0,<1H OCEAN +-117.05,33.13,22.0,2427.0,390.0,1099.0,362.0,5.2323,167500.0,<1H OCEAN +-117.05,33.1,13.0,5516.0,746.0,2119.0,662.0,6.1868,320200.0,<1H OCEAN +-117.03,33.12,25.0,3142.0,446.0,1286.0,419.0,5.4663,248300.0,<1H OCEAN +-117.04,33.09,16.0,4677.0,581.0,1902.0,566.0,6.1834,335600.0,<1H OCEAN +-116.93,33.06,16.0,3490.0,545.0,1628.0,535.0,4.8836,239900.0,<1H OCEAN +-116.89,32.99,14.0,2816.0,501.0,1448.0,452.0,5.0278,210900.0,<1H OCEAN +-116.95,32.96,18.0,2087.0,353.0,992.0,329.0,4.5,222600.0,<1H OCEAN +-116.84,33.08,15.0,2755.0,519.0,1474.0,460.0,4.0408,225900.0,<1H OCEAN +-116.77,33.08,13.0,1406.0,260.0,737.0,279.0,5.5842,239100.0,<1H OCEAN +-116.78,33.0,7.0,12480.0,1946.0,5102.0,1697.0,5.5102,221000.0,<1H OCEAN +-116.84,33.01,5.0,5673.0,855.0,2592.0,797.0,5.4155,199200.0,<1H OCEAN +-116.88,33.05,11.0,7217.0,1583.0,4197.0,1502.0,2.8827,166700.0,<1H OCEAN +-116.88,33.02,16.0,3204.0,541.0,1818.0,529.0,5.2596,171500.0,<1H OCEAN +-116.9,33.03,11.0,3213.0,634.0,1975.0,579.0,3.475,167200.0,<1H OCEAN +-116.86,33.05,17.0,9044.0,1689.0,5030.0,1596.0,3.6348,164500.0,<1H OCEAN +-116.86,33.02,17.0,401.0,68.0,251.0,69.0,4.6518,170200.0,<1H OCEAN +-116.84,33.02,11.0,1227.0,202.0,645.0,198.0,5.6674,209800.0,<1H OCEAN +-116.74,33.33,17.0,4190.0,946.0,1802.0,673.0,2.4744,158200.0,INLAND +-116.68,33.16,26.0,1820.0,374.0,1001.0,324.0,2.1797,156300.0,INLAND +-116.6,33.06,23.0,1731.0,365.0,612.0,258.0,2.7813,172900.0,INLAND +-116.58,33.09,36.0,992.0,224.0,334.0,126.0,3.0089,134400.0,INLAND +-116.56,33.05,15.0,1985.0,361.0,536.0,209.0,4.125,148200.0,INLAND +-116.61,33.04,11.0,2522.0,538.0,616.0,269.0,3.875,198100.0,INLAND +-116.66,33.09,24.0,1378.0,272.0,532.0,188.0,1.5909,221900.0,INLAND +-116.67,32.97,16.0,349.0,74.0,120.0,43.0,5.359,193800.0,<1H OCEAN +-116.52,32.9,18.0,4454.0,852.0,1754.0,656.0,4.57,189900.0,INLAND +-116.34,33.36,24.0,2746.0,514.0,731.0,295.0,3.3214,176400.0,INLAND +-116.32,33.28,19.0,1791.0,367.0,327.0,185.0,3.3625,100000.0,INLAND +-116.26,33.07,17.0,934.0,284.0,452.0,184.0,1.9875,83700.0,INLAND +-116.28,32.84,18.0,382.0,128.0,194.0,69.0,2.5179,58800.0,INLAND +-116.37,33.19,12.0,4890.0,1152.0,1289.0,570.0,2.5795,98700.0,INLAND +-116.58,32.69,19.0,4085.0,876.0,2133.0,718.0,2.919,116500.0,INLAND +-116.45,32.65,22.0,2680.0,643.0,1644.0,516.0,2.1949,127100.0,INLAND +-116.35,32.74,16.0,2595.0,606.0,1046.0,367.0,1.7137,110700.0,INLAND +-116.2,32.64,28.0,1608.0,409.0,567.0,254.0,1.4648,61800.0,INLAND +-116.75,32.85,17.0,4863.0,845.0,2266.0,769.0,4.2321,217400.0,<1H OCEAN +-116.79,32.84,12.0,4281.0,786.0,1891.0,721.0,3.5769,231800.0,<1H OCEAN +-116.76,32.84,16.0,3311.0,702.0,1627.0,624.0,3.1196,187200.0,<1H OCEAN +-116.77,32.82,16.0,3688.0,817.0,1969.0,767.0,2.875,222900.0,<1H OCEAN +-116.75,32.82,17.0,3348.0,481.0,1222.0,443.0,6.6361,308600.0,<1H OCEAN +-116.8,32.8,11.0,3874.0,565.0,1672.0,546.0,6.1481,274600.0,<1H OCEAN +-116.62,32.86,18.0,4115.0,847.0,2032.0,745.0,4.0159,169100.0,<1H OCEAN +-116.66,32.79,13.0,843.0,,918.0,152.0,6.2152,240600.0,<1H OCEAN +-116.87,32.75,15.0,2053.0,321.0,993.0,309.0,5.5164,248900.0,<1H OCEAN +-116.91,32.73,8.0,4630.0,624.0,2048.0,575.0,6.4745,300300.0,<1H OCEAN +-116.87,32.72,13.0,3268.0,491.0,1431.0,503.0,5.7652,259900.0,<1H OCEAN +-116.89,32.67,9.0,2652.0,393.0,1355.0,362.0,6.2578,293100.0,<1H OCEAN +-116.76,32.74,14.0,4085.0,751.0,2129.0,688.0,4.7367,214500.0,<1H OCEAN +-116.79,32.61,19.0,2652.0,520.0,1421.0,491.0,3.5227,206100.0,<1H OCEAN +-122.41,37.81,25.0,1178.0,545.0,592.0,441.0,3.6728,500001.0,NEAR BAY +-122.41,37.81,31.0,3991.0,1311.0,2305.0,1201.0,1.8981,500001.0,NEAR BAY +-122.42,37.81,52.0,1314.0,317.0,473.0,250.0,4.3472,500001.0,NEAR BAY +-122.42,37.8,52.0,2852.0,581.0,838.0,510.0,8.0755,500001.0,NEAR BAY +-122.42,37.8,52.0,4985.0,1355.0,1848.0,1255.0,4.9211,500001.0,NEAR BAY +-122.42,37.8,50.0,2494.0,731.0,958.0,712.0,3.2356,500001.0,NEAR BAY +-122.42,37.8,52.0,741.0,170.0,277.0,165.0,4.4712,500001.0,NEAR BAY +-122.41,37.8,52.0,2583.0,672.0,1335.0,613.0,3.1477,500001.0,NEAR BAY +-122.41,37.8,52.0,2618.0,611.0,1328.0,559.0,4.1607,350000.0,NEAR BAY +-122.41,37.8,52.0,3278.0,775.0,1279.0,709.0,5.4378,500001.0,NEAR BAY +-122.41,37.8,52.0,812.0,252.0,629.0,247.0,2.5875,500001.0,NEAR BAY +-122.41,37.8,52.0,4088.0,946.0,1906.0,863.0,3.6065,433300.0,NEAR BAY +-122.41,37.8,52.0,1288.0,309.0,437.0,272.0,6.3245,500001.0,NEAR BAY +-122.4,37.8,52.0,1860.0,575.0,679.0,448.0,4.775,500001.0,NEAR BAY +-122.4,37.8,52.0,2094.0,568.0,920.0,503.0,4.2015,412500.0,NEAR BAY +-122.4,37.81,12.0,1349.0,349.0,536.0,334.0,7.7852,250000.0,NEAR BAY +-122.41,37.8,52.0,2450.0,741.0,1415.0,664.0,2.8229,375000.0,NEAR BAY +-122.4,37.8,52.0,1642.0,570.0,1432.0,513.0,1.9063,300000.0,NEAR BAY +-122.41,37.8,52.0,1394.0,395.0,1700.0,400.0,2.75,168800.0,NEAR BAY +-122.41,37.8,52.0,1724.0,416.0,1016.0,395.0,3.3839,400000.0,NEAR BAY +-122.41,37.8,52.0,1866.0,748.0,2957.0,710.0,1.8295,243800.0,NEAR BAY +-122.41,37.8,30.0,1821.0,738.0,1648.0,684.0,0.8836,450000.0,NEAR BAY +-122.41,37.8,52.0,3697.0,837.0,1446.0,711.0,5.866,500001.0,NEAR BAY +-122.41,37.8,52.0,2892.0,751.0,1785.0,733.0,3.5746,350000.0,NEAR BAY +-122.41,37.79,52.0,3598.0,1011.0,2062.0,966.0,2.9871,380000.0,NEAR BAY +-122.42,37.8,52.0,2797.0,685.0,1156.0,651.0,4.3472,500001.0,NEAR BAY +-122.42,37.8,52.0,3823.0,1040.0,1830.0,977.0,4.2458,450000.0,NEAR BAY +-122.42,37.8,52.0,3321.0,1115.0,1576.0,1034.0,2.0987,458300.0,NEAR BAY +-122.42,37.8,52.0,1777.0,486.0,932.0,427.0,3.3643,420000.0,NEAR BAY +-122.42,37.8,52.0,3067.0,870.0,2122.0,850.0,2.5603,287500.0,NEAR BAY +-122.42,37.79,52.0,3457.0,1021.0,2286.0,994.0,2.565,225000.0,NEAR BAY +-122.42,37.79,52.0,3364.0,1100.0,2112.0,1045.0,2.1343,400000.0,NEAR BAY +-122.42,37.79,52.0,3511.0,1232.0,2452.0,1131.0,2.5013,275000.0,NEAR BAY +-122.41,37.79,52.0,2909.0,851.0,1711.0,830.0,3.0296,500001.0,NEAR BAY +-122.41,37.79,52.0,3302.0,869.0,1178.0,727.0,3.3681,500001.0,NEAR BAY +-122.41,37.79,52.0,2161.0,544.0,904.0,431.0,3.5066,350000.0,NEAR BAY +-122.41,37.8,52.0,1999.0,642.0,1846.0,620.0,1.9145,225000.0,NEAR BAY +-122.41,37.79,52.0,2302.0,938.0,1515.0,861.0,1.3668,55000.0,NEAR BAY +-122.41,37.8,52.0,3260.0,1535.0,3260.0,1457.0,0.9,500001.0,NEAR BAY +-122.39,37.8,25.0,4561.0,1474.0,1525.0,1169.0,4.5581,500001.0,NEAR BAY +-122.4,37.79,52.0,1185.0,660.0,1007.0,623.0,1.4552,450000.0,NEAR BAY +-122.41,37.79,52.0,1436.0,738.0,1688.0,662.0,1.5156,237500.0,NEAR BAY +-122.41,37.79,52.0,3610.0,1286.0,1504.0,1047.0,3.2059,500001.0,NEAR BAY +-122.41,37.79,52.0,6016.0,2509.0,3436.0,2119.0,2.5166,275000.0,NEAR BAY +-122.42,37.79,52.0,2737.0,1241.0,1761.0,1029.0,1.8068,225000.0,NEAR BAY +-122.41,37.79,52.0,5783.0,2747.0,4518.0,2538.0,1.724,225000.0,NEAR BAY +-122.42,37.78,26.0,812.0,507.0,628.0,445.0,2.3304,500001.0,NEAR BAY +-122.42,37.78,27.0,1728.0,884.0,1211.0,752.0,0.8543,500001.0,NEAR BAY +-122.43,37.81,39.0,3275.0,837.0,1137.0,725.0,3.7679,500001.0,NEAR BAY +-122.44,37.8,52.0,3830.0,,1310.0,963.0,3.4801,500001.0,NEAR BAY +-122.44,37.8,52.0,1724.0,412.0,540.0,319.0,4.2857,500001.0,NEAR BAY +-122.43,37.81,52.0,4309.0,942.0,1297.0,798.0,4.6781,500001.0,NEAR BAY +-122.45,37.81,52.0,1375.0,322.0,287.0,184.0,3.9028,500001.0,NEAR BAY +-122.44,37.8,52.0,2869.0,594.0,500.0,335.0,5.0376,500001.0,NEAR BAY +-122.44,37.8,52.0,3257.0,735.0,1045.0,620.0,4.5523,500001.0,NEAR BAY +-122.44,37.8,52.0,1580.0,470.0,714.0,448.0,3.2447,500001.0,NEAR BAY +-122.44,37.8,52.0,1006.0,291.0,445.0,257.0,2.7717,500000.0,NEAR BAY +-122.44,37.8,52.0,3149.0,719.0,1145.0,658.0,4.625,500001.0,NEAR BAY +-122.44,37.8,52.0,3161.0,472.0,842.0,410.0,7.9761,500001.0,NEAR BAY +-122.44,37.8,52.0,2865.0,593.0,1029.0,577.0,5.2539,500001.0,NEAR BAY +-122.44,37.8,52.0,1603.0,487.0,727.0,464.0,3.9856,500001.0,NEAR BAY +-122.43,37.8,52.0,3172.0,848.0,1259.0,806.0,4.1047,466700.0,NEAR BAY +-122.43,37.8,52.0,2788.0,813.0,1302.0,764.0,4.199,400000.0,NEAR BAY +-122.43,37.8,52.0,2994.0,821.0,1240.0,779.0,3.3715,500000.0,NEAR BAY +-122.43,37.8,52.0,1976.0,726.0,1045.0,669.0,3.6893,475000.0,NEAR BAY +-122.43,37.8,52.0,1006.0,251.0,349.0,233.0,3.2235,500000.0,NEAR BAY +-122.43,37.8,52.0,1380.0,322.0,553.0,288.0,4.0417,500001.0,NEAR BAY +-122.42,37.8,52.0,2657.0,772.0,1014.0,685.0,4.038,500001.0,NEAR BAY +-122.43,37.8,52.0,2696.0,572.0,925.0,552.0,5.0365,500000.0,NEAR BAY +-122.43,37.8,52.0,2520.0,649.0,959.0,607.0,5.7934,500001.0,NEAR BAY +-122.43,37.8,52.0,2802.0,622.0,954.0,572.0,4.5399,500001.0,NEAR BAY +-122.42,37.8,52.0,4079.0,1112.0,1466.0,1024.0,4.5913,500001.0,NEAR BAY +-122.42,37.79,48.0,4506.0,1342.0,1980.0,1239.0,4.0156,500001.0,NEAR BAY +-122.43,37.79,52.0,3565.0,892.0,1377.0,852.0,3.8068,500001.0,NEAR BAY +-122.43,37.79,52.0,3486.0,847.0,1248.0,813.0,7.2623,500001.0,NEAR BAY +-122.43,37.79,52.0,6186.0,1566.0,2065.0,1374.0,5.8543,500001.0,NEAR BAY +-122.44,37.79,52.0,1979.0,359.0,648.0,370.0,5.3124,500001.0,NEAR BAY +-122.44,37.79,52.0,1335.0,151.0,402.0,157.0,10.8783,500001.0,NEAR BAY +-122.44,37.79,52.0,2045.0,353.0,722.0,327.0,8.0755,500001.0,NEAR BAY +-122.44,37.79,52.0,1447.0,186.0,483.0,181.0,15.0001,500001.0,NEAR BAY +-122.45,37.79,52.0,2196.0,280.0,668.0,291.0,10.0914,500001.0,NEAR BAY +-122.45,37.79,52.0,3069.0,579.0,1107.0,536.0,5.5634,500001.0,NEAR BAY +-122.45,37.79,52.0,1734.0,482.0,731.0,429.0,1.4804,425000.0,NEAR BAY +-122.45,37.79,52.0,1457.0,215.0,495.0,208.0,10.7097,500001.0,NEAR BAY +-122.46,37.79,52.0,899.0,96.0,304.0,110.0,14.2959,500001.0,NEAR BAY +-122.46,37.79,52.0,2106.0,373.0,743.0,348.0,5.2909,500001.0,NEAR BAY +-122.44,37.79,52.0,1817.0,535.0,800.0,487.0,3.975,500001.0,NEAR BAY +-122.44,37.79,52.0,3640.0,840.0,1525.0,796.0,4.4375,500001.0,NEAR BAY +-122.44,37.79,52.0,3785.0,808.0,1371.0,799.0,6.4209,500001.0,NEAR BAY +-122.43,37.79,52.0,3522.0,938.0,1319.0,887.0,4.3986,500001.0,NEAR BAY +-122.43,37.79,52.0,3219.0,969.0,1152.0,830.0,4.2042,500001.0,NEAR BAY +-122.42,37.79,52.0,2511.0,895.0,1202.0,804.0,2.6607,87500.0,NEAR BAY +-122.42,37.79,6.0,670.0,301.0,655.0,284.0,3.4423,117500.0,NEAR BAY +-122.43,37.79,50.0,3312.0,1095.0,1475.0,997.0,2.7165,500001.0,NEAR BAY +-122.43,37.79,52.0,3020.0,842.0,1294.0,769.0,3.4375,500001.0,NEAR BAY +-122.43,37.79,25.0,1637.0,394.0,649.0,379.0,5.0049,460000.0,NEAR BAY +-122.44,37.79,52.0,1903.0,461.0,831.0,433.0,4.4464,500001.0,NEAR BAY +-122.44,37.79,52.0,2083.0,491.0,1224.0,483.0,4.0882,468800.0,NEAR BAY +-122.44,37.79,52.0,1726.0,384.0,614.0,356.0,3.6812,500000.0,NEAR BAY +-122.44,37.78,52.0,2695.0,657.0,1243.0,573.0,2.8569,372200.0,NEAR BAY +-122.45,37.78,45.0,2747.0,699.0,1320.0,693.0,3.1576,333300.0,NEAR BAY +-122.45,37.79,46.0,2009.0,464.0,761.0,453.0,3.7188,500001.0,NEAR BAY +-122.45,37.78,52.0,3975.0,716.0,1515.0,691.0,5.0156,500001.0,NEAR BAY +-122.43,37.79,24.0,2459.0,1001.0,1362.0,957.0,2.6782,450000.0,NEAR BAY +-122.43,37.78,10.0,2380.0,843.0,1245.0,789.0,1.3062,220000.0,NEAR BAY +-122.44,37.78,39.0,1181.0,310.0,901.0,281.0,1.4866,237500.0,NEAR BAY +-122.45,37.78,52.0,1345.0,291.0,560.0,294.0,3.7159,494400.0,NEAR BAY +-122.45,37.78,52.0,2686.0,606.0,1392.0,578.0,4.0,355300.0,NEAR BAY +-122.46,37.78,47.0,1682.0,379.0,837.0,375.0,5.2806,400000.0,NEAR BAY +-122.44,37.78,37.0,1235.0,314.0,481.0,297.0,3.6875,492300.0,NEAR BAY +-122.44,37.78,52.0,3510.0,791.0,1703.0,657.0,2.8654,280000.0,NEAR BAY +-122.44,37.78,44.0,1545.0,334.0,561.0,326.0,3.875,412500.0,NEAR BAY +-122.45,37.78,43.0,1452.0,397.0,897.0,393.0,4.1319,322700.0,NEAR BAY +-122.45,37.78,48.0,1013.0,194.0,464.0,205.0,3.2011,428300.0,NEAR BAY +-122.45,37.78,52.0,2033.0,438.0,2198.0,418.0,3.6667,418400.0,NEAR BAY +-122.44,37.78,16.0,883.0,236.0,601.0,219.0,2.151,146900.0,NEAR BAY +-122.43,37.78,49.0,2246.0,587.0,1277.0,546.0,2.9792,350000.0,NEAR BAY +-122.44,37.78,52.0,3017.0,851.0,1588.0,800.0,3.3882,471400.0,NEAR BAY +-122.44,37.78,52.0,2747.0,736.0,1309.0,653.0,2.943,341700.0,NEAR BAY +-122.44,37.78,52.0,1118.0,279.0,514.0,284.0,2.4196,346200.0,NEAR BAY +-122.44,37.78,31.0,1364.0,386.0,707.0,379.0,3.1607,293800.0,NEAR BAY +-122.43,37.78,26.0,3587.0,1034.0,1821.0,936.0,2.6392,287500.0,NEAR BAY +-122.43,37.78,2.0,1205.0,468.0,577.0,363.0,3.6437,275000.0,NEAR BAY +-122.42,37.78,19.0,4065.0,1645.0,2079.0,1470.0,3.1462,187500.0,NEAR BAY +-122.42,37.78,17.0,1257.0,339.0,1093.0,384.0,1.8438,72500.0,NEAR BAY +-122.43,37.78,17.0,2728.0,908.0,1670.0,893.0,1.077,115000.0,NEAR BAY +-122.43,37.78,24.0,2037.0,696.0,1371.0,585.0,0.9355,112500.0,NEAR BAY +-122.42,37.78,52.0,989.0,425.0,634.0,341.0,2.4414,275000.0,NEAR BAY +-122.42,37.78,52.0,1254.0,469.0,895.0,456.0,2.1516,187500.0,NEAR BAY +-122.43,37.78,29.0,1310.0,364.0,1009.0,379.0,1.3844,177500.0,NEAR BAY +-122.43,37.78,52.0,1952.0,628.0,1284.0,576.0,2.105,316700.0,NEAR BAY +-122.43,37.78,52.0,4014.0,1069.0,2070.0,927.0,2.8202,442900.0,NEAR BAY +-122.43,37.77,52.0,3944.0,1072.0,1913.0,973.0,2.9567,425000.0,NEAR BAY +-122.44,37.78,52.0,2911.0,753.0,1696.0,676.0,2.5721,475000.0,NEAR BAY +-122.44,37.77,52.0,2705.0,647.0,1355.0,628.0,2.0161,364300.0,NEAR BAY +-122.45,37.77,52.0,2339.0,548.0,1090.0,507.0,3.3679,350000.0,NEAR BAY +-122.45,37.77,52.0,3188.0,708.0,1526.0,664.0,3.3068,500001.0,NEAR BAY +-122.45,37.77,52.0,1722.0,465.0,885.0,437.0,3.0906,500001.0,NEAR BAY +-122.44,37.77,52.0,3475.0,807.0,1518.0,777.0,3.6186,500001.0,NEAR BAY +-122.45,37.77,52.0,2296.0,509.0,1039.0,472.0,4.1417,500000.0,NEAR BAY +-122.45,37.77,52.0,2191.0,627.0,1100.0,585.0,3.0409,500000.0,NEAR BAY +-122.45,37.77,52.0,2645.0,626.0,1275.0,553.0,3.35,492900.0,NEAR BAY +-122.43,37.77,52.0,3563.0,832.0,1712.0,787.0,3.3702,335700.0,NEAR BAY +-122.43,37.77,52.0,1760.0,366.0,742.0,318.0,4.445,400000.0,NEAR BAY +-122.44,37.77,52.0,2002.0,520.0,939.0,501.0,3.2239,488900.0,NEAR BAY +-122.44,37.77,52.0,2994.0,736.0,1428.0,700.0,3.0766,438900.0,NEAR BAY +-122.42,37.77,52.0,1086.0,349.0,589.0,361.0,2.5186,250000.0,NEAR BAY +-122.42,37.77,52.0,1925.0,568.0,867.0,515.0,2.879,450000.0,NEAR BAY +-122.43,37.77,52.0,1567.0,482.0,654.0,425.0,2.6914,366700.0,NEAR BAY +-122.43,37.77,52.0,2514.0,729.0,1428.0,597.0,2.3977,412500.0,NEAR BAY +-122.43,37.77,52.0,2416.0,620.0,1188.0,591.0,2.3887,337500.0,NEAR BAY +-122.43,37.77,52.0,1862.0,472.0,872.0,471.0,3.2981,222700.0,NEAR BAY +-122.43,37.77,52.0,4397.0,1116.0,1939.0,1053.0,2.7587,354500.0,NEAR BAY +-122.43,37.77,52.0,2685.0,629.0,1170.0,614.0,3.6894,418800.0,NEAR BAY +-122.44,37.77,52.0,2537.0,559.0,849.0,530.0,5.1788,476900.0,NEAR BAY +-122.44,37.77,52.0,5604.0,1268.0,2023.0,1196.0,4.4085,400000.0,NEAR BAY +-122.44,37.76,38.0,2202.0,452.0,833.0,435.0,6.8939,455900.0,NEAR BAY +-122.44,37.77,52.0,3225.0,667.0,1494.0,619.0,4.4875,500001.0,NEAR BAY +-122.44,37.77,52.0,3505.0,745.0,1374.0,714.0,4.3667,500001.0,NEAR BAY +-122.45,37.76,50.0,2518.0,507.0,979.0,516.0,4.6912,500001.0,NEAR BAY +-122.45,37.76,52.0,1457.0,292.0,621.0,315.0,4.6477,450000.0,NEAR BAY +-122.45,37.77,52.0,3095.0,682.0,1269.0,639.0,3.575,500001.0,NEAR BAY +-122.45,37.77,52.0,3939.0,852.0,1737.0,797.0,4.5052,500001.0,NEAR BAY +-122.41,37.78,52.0,1928.0,836.0,2124.0,739.0,1.1185,55000.0,NEAR BAY +-122.41,37.78,52.0,1534.0,763.0,1520.0,614.0,1.4554,375000.0,NEAR BAY +-122.41,37.78,52.0,254.0,72.0,153.0,29.0,3.8625,350000.0,NEAR BAY +-122.41,37.77,52.0,361.0,76.0,168.0,55.0,3.2292,275000.0,NEAR BAY +-122.41,37.77,52.0,1963.0,565.0,1628.0,524.0,2.6083,193800.0,NEAR BAY +-122.4,37.78,32.0,352.0,132.0,313.0,105.0,2.5742,350000.0,NEAR BAY +-122.41,37.77,52.0,849.0,276.0,582.0,222.0,3.4671,250000.0,NEAR BAY +-122.41,37.78,52.0,1014.0,422.0,1055.0,382.0,1.8519,32500.0,NEAR BAY +-122.39,37.78,3.0,3464.0,1179.0,1441.0,919.0,4.7105,275000.0,NEAR BAY +-122.39,37.78,5.0,1405.0,515.0,725.0,392.0,3.6037,187500.0,NEAR BAY +-122.39,37.79,52.0,94.0,24.0,113.0,27.0,4.6563,350000.0,NEAR BAY +-122.37,37.81,26.0,5416.0,1045.0,4531.0,962.0,2.7909,250000.0,NEAR BAY +-122.4,37.78,52.0,464.0,202.0,286.0,148.0,1.6125,112500.0,NEAR BAY +-122.4,37.77,52.0,144.0,63.0,1061.0,68.0,4.3958,225000.0,NEAR BAY +-122.42,37.77,52.0,759.0,323.0,421.0,255.0,2.0548,162500.0,NEAR BAY +-122.42,37.77,52.0,1176.0,493.0,1136.0,436.0,1.375,312500.0,NEAR BAY +-122.42,37.76,37.0,1291.0,588.0,1846.0,557.0,1.3365,225000.0,NEAR BAY +-122.42,37.77,52.0,2185.0,656.0,1266.0,626.0,2.7794,350000.0,NEAR BAY +-122.42,37.77,52.0,4226.0,1315.0,2619.0,1242.0,2.5755,325000.0,NEAR BAY +-122.42,37.76,52.0,3587.0,1030.0,2259.0,979.0,2.5403,250000.0,NEAR BAY +-122.43,37.77,52.0,2714.0,779.0,1438.0,733.0,3.6031,275000.0,NEAR BAY +-122.43,37.76,52.0,1582.0,353.0,868.0,329.0,3.8261,250000.0,NEAR BAY +-122.43,37.76,52.0,2250.0,566.0,1051.0,562.0,2.8458,350000.0,NEAR BAY +-122.44,37.76,52.0,2959.0,683.0,1145.0,666.0,4.2222,361600.0,NEAR BAY +-122.44,37.76,30.0,5089.0,1210.0,1935.0,1139.0,4.6053,386100.0,NEAR BAY +-122.44,37.75,28.0,4930.0,1381.0,2232.0,1321.0,4.3232,316200.0,NEAR BAY +-122.44,37.76,35.0,1581.0,422.0,580.0,388.0,4.05,423100.0,NEAR BAY +-122.44,37.76,50.0,2589.0,569.0,945.0,544.0,5.2519,376600.0,NEAR BAY +-122.45,37.76,51.0,2564.0,457.0,810.0,442.0,5.6235,500001.0,NEAR BAY +-122.44,37.76,52.0,1968.0,472.0,784.0,430.0,3.3702,370000.0,NEAR BAY +-122.44,37.76,52.0,2110.0,454.0,816.0,438.0,3.9079,370000.0,NEAR BAY +-122.44,37.76,52.0,2509.0,496.0,855.0,478.0,5.0731,405400.0,NEAR BAY +-122.43,37.76,52.0,3771.0,1017.0,1575.0,921.0,3.5655,427300.0,NEAR BAY +-122.43,37.76,52.0,2242.0,459.0,751.0,464.0,4.75,500001.0,NEAR BAY +-122.43,37.76,52.0,2356.0,501.0,909.0,481.0,4.2569,455400.0,NEAR BAY +-122.43,37.76,52.0,3708.0,849.0,1531.0,822.0,3.3565,386400.0,NEAR BAY +-122.42,37.76,52.0,4407.0,1192.0,2280.0,1076.0,3.3937,270000.0,NEAR BAY +-122.42,37.76,52.0,4001.0,1084.0,2129.0,1037.0,3.5052,391200.0,NEAR BAY +-122.42,37.76,52.0,2088.0,487.0,1082.0,488.0,2.6803,490000.0,NEAR BAY +-122.42,37.76,52.0,1190.0,400.0,1270.0,332.0,2.0329,225000.0,NEAR BAY +-122.42,37.76,52.0,2038.0,629.0,2007.0,596.0,2.5701,266700.0,NEAR BAY +-122.42,37.76,52.0,1494.0,610.0,1630.0,590.0,1.65,265000.0,NEAR BAY +-122.42,37.76,46.0,2150.0,817.0,2075.0,807.0,1.3824,212500.0,NEAR BAY +-122.42,37.75,52.0,1855.0,611.0,1715.0,614.0,2.1289,250000.0,NEAR BAY +-122.42,37.75,52.0,1207.0,302.0,1008.0,269.0,3.3816,262500.0,NEAR BAY +-122.42,37.75,52.0,801.0,272.0,639.0,259.0,2.1971,275000.0,NEAR BAY +-122.42,37.75,52.0,1609.0,510.0,1155.0,439.0,2.2328,250000.0,NEAR BAY +-122.42,37.75,52.0,1974.0,525.0,935.0,465.0,2.7173,300000.0,NEAR BAY +-122.42,37.75,52.0,2112.0,528.0,1227.0,513.0,3.5536,400000.0,NEAR BAY +-122.42,37.75,52.0,2708.0,762.0,1460.0,741.0,2.9052,400000.0,NEAR BAY +-122.42,37.75,52.0,1564.0,396.0,1162.0,374.0,3.0,275000.0,NEAR BAY +-122.43,37.75,52.0,2700.0,595.0,1181.0,575.0,3.575,396800.0,NEAR BAY +-122.43,37.75,52.0,1970.0,495.0,871.0,474.0,4.0625,355600.0,NEAR BAY +-122.43,37.75,52.0,2459.0,507.0,1012.0,475.0,4.0568,387900.0,NEAR BAY +-122.43,37.76,52.0,2332.0,434.0,861.0,406.0,4.4318,437500.0,NEAR BAY +-122.43,37.75,52.0,2285.0,509.0,839.0,456.0,4.7946,355600.0,NEAR BAY +-122.44,37.75,52.0,3114.0,637.0,1144.0,591.0,4.0,375000.0,NEAR BAY +-122.44,37.75,52.0,2082.0,425.0,801.0,411.0,4.2708,368900.0,NEAR BAY +-122.43,37.75,52.0,2721.0,581.0,1043.0,519.0,3.7545,383700.0,NEAR BAY +-122.44,37.75,46.0,1519.0,291.0,573.0,289.0,4.2667,338800.0,NEAR BAY +-122.44,37.75,52.0,1573.0,334.0,725.0,338.0,5.0505,380400.0,NEAR BAY +-122.43,37.75,52.0,1615.0,393.0,633.0,378.0,3.5114,347500.0,NEAR BAY +-122.43,37.75,52.0,3521.0,767.0,1415.0,687.0,4.875,362200.0,NEAR BAY +-122.43,37.75,52.0,2960.0,623.0,1191.0,589.0,3.95,347700.0,NEAR BAY +-122.42,37.75,52.0,2164.0,533.0,1122.0,469.0,3.2632,306000.0,NEAR BAY +-122.42,37.74,52.0,2713.0,624.0,1370.0,594.0,4.6547,325700.0,NEAR BAY +-122.42,37.74,52.0,1786.0,427.0,856.0,394.0,3.0833,328100.0,NEAR BAY +-122.43,37.74,52.0,2229.0,498.0,1079.0,472.0,5.0196,324300.0,NEAR BAY +-122.43,37.75,52.0,2155.0,468.0,962.0,490.0,3.775,325900.0,NEAR BAY +-122.43,37.75,40.0,4850.0,977.0,1824.0,952.0,5.0519,356100.0,NEAR BAY +-122.44,37.75,21.0,5457.0,1247.0,2304.0,1180.0,4.5469,409700.0,NEAR BAY +-122.44,37.74,23.0,6291.0,1269.0,2818.0,1198.0,4.2672,391900.0,NEAR BAY +-122.44,37.74,52.0,2074.0,366.0,909.0,394.0,4.8382,294900.0,NEAR BAY +-122.44,37.74,23.0,184.0,44.0,118.0,40.0,4.5375,350000.0,NEAR BAY +-122.43,37.74,52.0,3328.0,653.0,1260.0,614.0,4.7437,331000.0,NEAR BAY +-122.43,37.74,52.0,2637.0,539.0,1159.0,497.0,3.8846,333100.0,NEAR BAY +-122.43,37.74,52.0,1514.0,314.0,724.0,301.0,5.3292,300900.0,NEAR BAY +-122.43,37.73,52.0,1142.0,224.0,494.0,206.0,5.0602,298900.0,NEAR BAY +-122.43,37.73,52.0,1029.0,205.0,461.0,212.0,5.0782,310800.0,NEAR BAY +-122.38,37.76,52.0,248.0,68.0,124.0,51.0,1.4886,450000.0,NEAR BAY +-122.39,37.76,52.0,624.0,170.0,410.0,148.0,4.0042,208300.0,NEAR BAY +-122.39,37.76,52.0,157.0,28.0,88.0,27.0,3.675,162500.0,NEAR BAY +-122.39,37.76,52.0,1877.0,427.0,712.0,398.0,3.9722,290900.0,NEAR BAY +-122.39,37.76,52.0,2316.0,468.0,1047.0,476.0,4.5057,321600.0,NEAR BAY +-122.39,37.76,52.0,3390.0,691.0,1645.0,596.0,3.7051,253700.0,NEAR BAY +-122.4,37.75,44.0,6848.0,1584.0,3269.0,1383.0,2.8679,243300.0,NEAR BAY +-122.4,37.76,52.0,4265.0,912.0,1555.0,836.0,4.119,298300.0,NEAR BAY +-122.4,37.76,52.0,1495.0,311.0,506.0,275.0,4.4375,320000.0,NEAR BAY +-122.4,37.76,52.0,1185.0,246.0,480.0,253.0,4.4074,277300.0,NEAR BAY +-122.41,37.76,52.0,1427.0,281.0,620.0,236.0,1.9944,262500.0,NEAR BAY +-122.4,37.76,52.0,1529.0,385.0,1347.0,348.0,2.9312,239100.0,NEAR BAY +-122.41,37.76,52.0,3452.0,784.0,2987.0,753.0,2.8135,260300.0,NEAR BAY +-122.41,37.76,52.0,2064.0,496.0,1726.0,466.0,3.4028,233300.0,NEAR BAY +-122.41,37.76,52.0,492.0,139.0,316.0,168.0,3.0865,225000.0,NEAR BAY +-122.41,37.76,52.0,351.0,81.0,308.0,75.0,2.6667,325000.0,NEAR BAY +-122.41,37.76,52.0,2479.0,515.0,1816.0,496.0,3.0774,300000.0,NEAR BAY +-122.41,37.76,52.0,2605.0,678.0,2071.0,611.0,3.2964,265000.0,NEAR BAY +-122.4,37.75,52.0,1182.0,307.0,1029.0,306.0,2.0577,214600.0,NEAR BAY +-122.41,37.75,52.0,1057.0,276.0,837.0,292.0,2.4531,229000.0,NEAR BAY +-122.41,37.75,52.0,1919.0,404.0,1483.0,421.0,3.4063,253900.0,NEAR BAY +-122.41,37.75,52.0,1892.0,415.0,1442.0,371.0,4.2891,230000.0,NEAR BAY +-122.41,37.75,52.0,1678.0,386.0,1220.0,357.0,2.5809,255300.0,NEAR BAY +-122.41,37.75,52.0,2164.0,606.0,2034.0,513.0,2.0325,178100.0,NEAR BAY +-122.41,37.75,52.0,2452.0,623.0,1932.0,549.0,2.3903,236100.0,NEAR BAY +-122.41,37.75,9.0,1282.0,334.0,1176.0,305.0,2.6538,206300.0,NEAR BAY +-122.39,37.74,42.0,4110.0,846.0,2147.0,674.0,2.5694,201000.0,NEAR BAY +-122.39,37.73,43.0,4864.0,972.0,3134.0,959.0,4.3393,217300.0,NEAR BAY +-122.4,37.73,45.0,3490.0,712.0,2337.0,781.0,3.4472,225400.0,NEAR BAY +-122.4,37.74,45.0,2462.0,509.0,1587.0,450.0,2.59,211800.0,NEAR BAY +-122.38,37.73,18.0,4037.0,990.0,2722.0,834.0,1.4282,140400.0,NEAR BAY +-122.38,37.73,15.0,6804.0,1664.0,4737.0,1581.0,1.4133,203400.0,NEAR BAY +-122.39,37.74,45.0,1462.0,308.0,924.0,302.0,2.1767,185300.0,NEAR BAY +-122.38,37.73,20.0,120.0,27.0,55.0,19.0,2.625,187500.0,NEAR BAY +-122.38,37.73,40.0,543.0,,259.0,89.0,2.2167,193800.0,NEAR BAY +-122.38,37.73,38.0,1388.0,276.0,871.0,265.0,2.1667,193800.0,NEAR BAY +-122.39,37.73,46.0,1517.0,299.0,879.0,309.0,2.2222,195100.0,NEAR BAY +-122.39,37.73,52.0,1931.0,329.0,1025.0,293.0,2.9063,192000.0,NEAR BAY +-122.39,37.73,52.0,1070.0,224.0,567.0,207.0,2.8603,189000.0,NEAR BAY +-122.4,37.73,48.0,1489.0,326.0,1115.0,356.0,2.6364,199300.0,NEAR BAY +-122.39,37.72,28.0,1609.0,340.0,1064.0,290.0,1.1125,206300.0,NEAR BAY +-122.39,37.72,45.0,2893.0,570.0,1923.0,535.0,3.6607,192300.0,NEAR BAY +-122.39,37.72,52.0,135.0,34.0,93.0,26.0,2.1484,181300.0,NEAR BAY +-122.41,37.75,52.0,3065.0,622.0,1405.0,606.0,3.7813,275900.0,NEAR BAY +-122.41,37.74,38.0,1754.0,382.0,928.0,354.0,4.1417,270800.0,NEAR BAY +-122.41,37.74,34.0,1403.0,262.0,839.0,255.0,4.7031,255200.0,NEAR BAY +-122.41,37.75,52.0,2524.0,559.0,1430.0,476.0,3.4073,254700.0,NEAR BAY +-122.41,37.75,52.0,2515.0,576.0,1209.0,540.0,3.5912,284900.0,NEAR BAY +-122.41,37.74,48.0,409.0,86.0,148.0,70.0,3.6687,335000.0,NEAR BAY +-122.41,37.74,52.0,831.0,175.0,415.0,159.0,1.9464,249000.0,NEAR BAY +-122.41,37.74,52.0,1842.0,339.0,1032.0,357.0,5.5563,250800.0,NEAR BAY +-122.42,37.74,52.0,2019.0,418.0,999.0,448.0,4.2212,271300.0,NEAR BAY +-122.42,37.74,52.0,1916.0,432.0,889.0,424.0,4.0391,279900.0,NEAR BAY +-122.42,37.74,52.0,1674.0,346.0,734.0,335.0,3.8864,281300.0,NEAR BAY +-122.42,37.74,52.0,1271.0,353.0,1076.0,324.0,2.9911,263900.0,NEAR BAY +-122.42,37.75,52.0,2163.0,607.0,1447.0,546.0,3.3555,275000.0,NEAR BAY +-122.41,37.74,43.0,1663.0,330.0,935.0,335.0,4.1552,240900.0,NEAR BAY +-122.41,37.74,47.0,1728.0,398.0,1178.0,315.0,3.2813,229600.0,NEAR BAY +-122.41,37.74,52.0,2058.0,399.0,1208.0,399.0,3.6429,230000.0,NEAR BAY +-122.42,37.73,50.0,3426.0,769.0,2261.0,671.0,2.888,246400.0,NEAR BAY +-122.42,37.74,52.0,1651.0,351.0,973.0,366.0,3.4583,240900.0,NEAR BAY +-122.42,37.74,52.0,2084.0,550.0,1438.0,516.0,2.3087,258600.0,NEAR BAY +-122.42,37.74,52.0,1540.0,370.0,1136.0,363.0,4.3125,243000.0,NEAR BAY +-122.42,37.73,52.0,3230.0,654.0,1765.0,611.0,3.3333,292300.0,NEAR BAY +-122.43,37.73,52.0,1583.0,347.0,935.0,341.0,4.6786,263200.0,NEAR BAY +-122.43,37.73,49.0,1435.0,322.0,1008.0,329.0,4.0,264000.0,NEAR BAY +-122.43,37.73,52.0,1386.0,276.0,729.0,274.0,3.6694,275500.0,NEAR BAY +-122.43,37.72,48.0,1289.0,280.0,782.0,235.0,3.6719,259800.0,NEAR BAY +-122.44,37.72,52.0,1775.0,347.0,1102.0,367.0,4.3125,267200.0,NEAR BAY +-122.44,37.73,52.0,2381.0,492.0,1485.0,447.0,4.3898,270000.0,NEAR BAY +-122.44,37.73,52.0,866.0,205.0,587.0,171.0,5.0224,261900.0,NEAR BAY +-122.42,37.73,46.0,1819.0,411.0,1534.0,406.0,4.0132,229400.0,NEAR BAY +-122.42,37.73,35.0,1871.0,342.0,1055.0,310.0,4.625,279300.0,NEAR BAY +-122.42,37.73,35.0,1791.0,322.0,988.0,304.0,4.5769,254500.0,NEAR BAY +-122.43,37.73,52.0,1985.0,401.0,1337.0,424.0,4.1071,240900.0,NEAR BAY +-122.41,37.73,42.0,2604.0,573.0,1703.0,507.0,3.4231,230200.0,NEAR BAY +-122.4,37.73,50.0,1947.0,411.0,1170.0,384.0,3.4769,238700.0,NEAR BAY +-122.4,37.73,42.0,1413.0,406.0,1027.0,362.0,2.3625,233000.0,NEAR BAY +-122.41,37.73,52.0,1931.0,358.0,1092.0,356.0,3.7835,271300.0,NEAR BAY +-122.41,37.73,41.0,2115.0,378.0,1168.0,365.0,4.0642,272500.0,NEAR BAY +-122.42,37.73,48.0,1474.0,308.0,998.0,330.0,4.0781,250300.0,NEAR BAY +-122.4,37.72,47.0,1465.0,306.0,1119.0,315.0,4.2672,219400.0,NEAR BAY +-122.4,37.72,37.0,971.0,248.0,647.0,208.0,2.1187,239300.0,NEAR BAY +-122.41,37.73,33.0,2789.0,567.0,1682.0,552.0,3.8643,276200.0,NEAR BAY +-122.41,37.72,35.0,2104.0,434.0,1225.0,410.0,4.8214,242900.0,NEAR BAY +-122.41,37.72,32.0,1650.0,316.0,904.0,295.0,4.0583,236200.0,NEAR BAY +-122.42,37.72,37.0,2638.0,546.0,1789.0,521.0,4.0071,244700.0,NEAR BAY +-122.43,37.72,50.0,2912.0,562.0,1989.0,537.0,3.6667,252600.0,NEAR BAY +-122.43,37.72,49.0,3427.0,696.0,2363.0,661.0,3.6885,254000.0,NEAR BAY +-122.43,37.72,52.0,2206.0,478.0,1583.0,456.0,3.7105,250500.0,NEAR BAY +-122.44,37.72,52.0,2890.0,571.0,1769.0,541.0,3.8274,252000.0,NEAR BAY +-122.43,37.72,52.0,3351.0,719.0,2101.0,706.0,3.0107,242000.0,NEAR BAY +-122.43,37.73,52.0,3602.0,738.0,2270.0,647.0,3.8934,251800.0,NEAR BAY +-122.43,37.73,52.0,1494.0,306.0,1463.0,360.0,3.1786,222600.0,NEAR BAY +-122.44,37.72,49.0,1557.0,405.0,1173.0,385.0,3.4605,265000.0,NEAR BAY +-122.44,37.72,48.0,2675.0,585.0,1773.0,540.0,3.9565,268500.0,NEAR BAY +-122.45,37.72,52.0,1729.0,319.0,890.0,300.0,4.3036,261800.0,NEAR BAY +-122.44,37.72,52.0,1380.0,272.0,847.0,284.0,3.7143,260000.0,NEAR BAY +-122.45,37.71,46.0,2559.0,506.0,1562.0,498.0,4.3846,270600.0,NEAR OCEAN +-122.45,37.71,52.0,1658.0,322.0,1086.0,326.0,3.8583,261600.0,NEAR OCEAN +-122.45,37.71,41.0,1578.0,351.0,1159.0,299.0,3.9167,243600.0,NEAR OCEAN +-122.46,37.71,52.0,1580.0,337.0,1425.0,330.0,4.0547,246200.0,NEAR OCEAN +-122.46,37.71,47.0,1527.0,283.0,1102.0,282.0,4.0,231600.0,NEAR OCEAN +-122.43,37.71,35.0,2878.0,564.0,1633.0,528.0,4.5,266900.0,NEAR BAY +-122.43,37.71,52.0,1508.0,278.0,1138.0,304.0,4.0234,266500.0,NEAR BAY +-122.43,37.71,52.0,1410.0,286.0,879.0,282.0,3.1908,255600.0,NEAR BAY +-122.44,37.72,52.0,1507.0,282.0,929.0,281.0,3.8958,247700.0,NEAR BAY +-122.44,37.71,52.0,2711.0,591.0,1848.0,524.0,3.9567,251500.0,NEAR BAY +-122.44,37.71,46.0,1230.0,247.0,895.0,257.0,5.3913,248900.0,NEAR BAY +-122.44,37.71,31.0,2370.0,441.0,1524.0,470.0,5.0201,264100.0,NEAR BAY +-122.45,37.71,34.0,3131.0,669.0,2204.0,600.0,3.5536,251000.0,NEAR OCEAN +-122.4,37.72,40.0,1948.0,413.0,1434.0,396.0,3.0313,219100.0,NEAR BAY +-122.4,37.71,40.0,1883.0,397.0,1411.0,438.0,3.0469,238000.0,NEAR BAY +-122.41,37.71,47.0,2289.0,481.0,1697.0,465.0,3.4773,226300.0,NEAR BAY +-122.41,37.71,28.0,5015.0,1240.0,3900.0,1029.0,1.2269,181900.0,NEAR BAY +-122.41,37.71,40.0,2054.0,433.0,1738.0,429.0,4.9926,213900.0,NEAR BAY +-122.41,37.71,49.0,1852.0,429.0,1615.0,447.0,3.495,217800.0,NEAR BAY +-122.4,37.72,41.0,1975.0,440.0,1528.0,424.0,3.8625,218300.0,NEAR BAY +-122.4,37.72,47.0,1167.0,250.0,953.0,253.0,4.2727,241900.0,NEAR BAY +-122.45,37.77,52.0,2602.0,,1330.0,647.0,3.5435,278600.0,NEAR BAY +-122.46,37.76,52.0,2236.0,545.0,1186.0,532.0,3.4531,414300.0,NEAR BAY +-122.46,37.77,52.0,1824.0,388.0,799.0,363.0,3.75,435700.0,NEAR BAY +-122.46,37.76,52.0,1817.0,449.0,948.0,380.0,3.93,390000.0,NEAR BAY +-122.45,37.76,31.0,5283.0,1330.0,2659.0,1269.0,3.5744,500000.0,NEAR BAY +-122.46,37.76,28.0,1072.0,165.0,363.0,168.0,6.1636,367700.0,NEAR BAY +-122.46,37.75,26.0,2192.0,438.0,954.0,456.0,4.5352,374200.0,NEAR BAY +-122.47,37.76,52.0,2941.0,783.0,1545.0,726.0,2.9899,406500.0,NEAR BAY +-122.47,37.76,52.0,2680.0,740.0,1587.0,713.0,2.5933,359600.0,NEAR BAY +-122.47,37.76,49.0,2842.0,670.0,1396.0,648.0,3.2679,345700.0,NEAR BAY +-122.47,37.76,52.0,2465.0,489.0,1170.0,498.0,4.0793,306700.0,NEAR BAY +-122.47,37.76,48.0,2064.0,484.0,1055.0,467.0,2.8711,329600.0,NEAR BAY +-122.47,37.76,40.0,3525.0,941.0,1675.0,857.0,3.2083,330000.0,NEAR BAY +-122.47,37.76,52.0,4001.0,809.0,1886.0,756.0,3.3239,350000.0,NEAR BAY +-122.47,37.76,39.0,3200.0,689.0,1391.0,618.0,3.6346,338000.0,NEAR BAY +-122.47,37.75,45.0,2399.0,426.0,911.0,423.0,4.4312,361000.0,NEAR BAY +-122.47,37.75,51.0,2413.0,431.0,1095.0,437.0,4.0089,357000.0,NEAR BAY +-122.47,37.75,49.0,2747.0,472.0,1281.0,448.0,5.482,366300.0,NEAR BAY +-122.47,37.76,34.0,2807.0,487.0,1152.0,445.0,5.1893,420300.0,NEAR BAY +-122.47,37.76,48.0,2464.0,459.0,1179.0,458.0,4.4946,358600.0,NEAR BAY +-122.46,37.75,52.0,1590.0,236.0,622.0,232.0,5.8151,500001.0,NEAR BAY +-122.46,37.75,52.0,1207.0,152.0,465.0,162.0,10.7569,500001.0,NEAR BAY +-122.47,37.75,51.0,2713.0,396.0,1090.0,401.0,9.3603,500001.0,NEAR BAY +-122.47,37.75,46.0,3238.0,544.0,1293.0,470.0,6.1592,381700.0,NEAR BAY +-122.47,37.75,52.0,1598.0,285.0,689.0,265.0,4.6071,337400.0,NEAR BAY +-122.47,37.74,52.0,1538.0,305.0,819.0,319.0,4.0846,333600.0,NEAR BAY +-122.45,37.75,36.0,2303.0,381.0,862.0,371.0,6.0274,349000.0,NEAR BAY +-122.45,37.75,36.0,1997.0,356.0,772.0,348.0,4.95,322600.0,NEAR BAY +-122.45,37.75,35.0,1363.0,302.0,1786.0,301.0,3.0804,313400.0,NEAR BAY +-122.46,37.75,52.0,1849.0,287.0,695.0,258.0,6.5372,394000.0,NEAR BAY +-122.45,37.74,52.0,1596.0,276.0,642.0,273.0,4.375,349500.0,NEAR BAY +-122.46,37.74,51.0,1905.0,291.0,707.0,284.0,6.2561,431000.0,NEAR BAY +-122.45,37.74,46.0,6429.0,1093.0,2535.0,1109.0,5.0887,335100.0,NEAR BAY +-122.44,37.73,43.0,3700.0,684.0,1488.0,623.0,5.5622,313600.0,NEAR BAY +-122.45,37.74,38.0,5688.0,930.0,2263.0,908.0,6.203,346800.0,NEAR BAY +-122.46,37.74,52.0,2180.0,326.0,856.0,326.0,5.3961,416900.0,NEAR BAY +-122.46,37.74,52.0,2053.0,281.0,791.0,287.0,10.959,500001.0,NEAR BAY +-122.47,37.74,52.0,2055.0,265.0,735.0,252.0,8.1189,500001.0,NEAR BAY +-122.47,37.74,52.0,3797.0,668.0,1633.0,658.0,5.6787,363600.0,NEAR BAY +-122.47,37.74,52.0,3688.0,640.0,1605.0,567.0,4.9537,365600.0,NEAR BAY +-122.46,37.73,52.0,2673.0,349.0,876.0,338.0,7.8476,500001.0,NEAR BAY +-122.46,37.73,52.0,3547.0,506.0,1276.0,491.0,8.0069,426800.0,NEAR BAY +-122.46,37.72,52.0,2951.0,406.0,1115.0,397.0,6.7228,405200.0,NEAR OCEAN +-122.47,37.73,52.0,2134.0,277.0,936.0,285.0,5.9245,484600.0,NEAR OCEAN +-122.47,37.73,52.0,2151.0,280.0,762.0,274.0,10.7309,500001.0,NEAR OCEAN +-122.47,37.73,50.0,1653.0,252.0,641.0,224.0,10.6605,500001.0,NEAR OCEAN +-122.47,37.72,46.0,1836.0,319.0,767.0,302.0,5.9114,399000.0,NEAR OCEAN +-122.46,37.73,52.0,2401.0,346.0,812.0,328.0,6.8322,394100.0,NEAR BAY +-122.45,37.73,52.0,2510.0,438.0,1153.0,407.0,5.1238,335100.0,NEAR BAY +-122.46,37.73,52.0,2857.0,469.0,1431.0,496.0,5.2088,344200.0,NEAR BAY +-122.44,37.73,39.0,1912.0,,970.0,406.0,4.7813,275500.0,NEAR BAY +-122.44,37.73,52.0,2838.0,567.0,1411.0,526.0,3.8304,261400.0,NEAR BAY +-122.45,37.73,52.0,1350.0,241.0,752.0,246.0,3.2448,266200.0,NEAR BAY +-122.45,37.73,52.0,2035.0,424.0,1193.0,430.0,5.0634,264200.0,NEAR BAY +-122.44,37.73,46.0,3581.0,758.0,1670.0,703.0,4.1932,269200.0,NEAR BAY +-122.45,37.72,52.0,982.0,197.0,653.0,171.0,4.2167,231900.0,NEAR BAY +-122.45,37.72,46.0,1406.0,235.0,771.0,239.0,4.7143,219300.0,NEAR BAY +-122.45,37.72,47.0,1773.0,345.0,1083.0,315.0,4.475,221200.0,NEAR BAY +-122.45,37.72,51.0,2690.0,554.0,1795.0,539.0,3.6581,225000.0,NEAR BAY +-122.46,37.72,47.0,1723.0,389.0,1216.0,399.0,3.3208,238600.0,NEAR OCEAN +-122.46,37.72,49.0,1207.0,255.0,658.0,220.0,4.0859,228600.0,NEAR OCEAN +-122.46,37.72,48.0,1690.0,339.0,962.0,317.0,3.2875,221500.0,NEAR OCEAN +-122.46,37.72,45.0,2399.0,419.0,1225.0,399.0,4.0855,244100.0,NEAR OCEAN +-122.46,37.72,39.0,2254.0,,1388.0,404.0,2.9688,232000.0,NEAR OCEAN +-122.47,37.71,44.0,2547.0,511.0,1577.0,516.0,4.1939,237900.0,NEAR OCEAN +-122.47,37.71,42.0,1961.0,427.0,1211.0,409.0,3.5156,239400.0,NEAR OCEAN +-122.47,37.72,43.0,968.0,199.0,434.0,162.0,2.5333,239300.0,NEAR OCEAN +-122.47,37.72,46.0,1453.0,306.0,817.0,310.0,3.0,246700.0,NEAR OCEAN +-122.47,37.72,49.0,1690.0,307.0,770.0,294.0,4.5913,259700.0,NEAR OCEAN +-122.45,37.72,45.0,964.0,173.0,613.0,201.0,2.9119,228900.0,NEAR BAY +-122.45,37.71,45.0,2253.0,431.0,1382.0,392.0,4.2562,221600.0,NEAR OCEAN +-122.46,37.71,52.0,1642.0,351.0,1138.0,340.0,4.1406,219500.0,NEAR OCEAN +-122.46,37.71,49.0,1711.0,348.0,1138.0,325.0,2.875,225000.0,NEAR OCEAN +-122.46,37.72,37.0,1833.0,388.0,1093.0,363.0,3.0703,211800.0,NEAR OCEAN +-122.48,37.76,48.0,2660.0,616.0,1491.0,602.0,3.9758,348600.0,NEAR BAY +-122.48,37.76,48.0,2304.0,558.0,1273.0,512.0,3.275,332100.0,NEAR BAY +-122.48,37.76,52.0,2684.0,574.0,1395.0,549.0,3.9097,323800.0,NEAR BAY +-122.48,37.76,50.0,2236.0,484.0,1171.0,467.0,4.0977,322100.0,NEAR BAY +-122.48,37.76,52.0,1845.0,336.0,1015.0,337.0,4.1397,331300.0,NEAR BAY +-122.48,37.76,52.0,3260.0,653.0,1594.0,632.0,4.4094,336100.0,NEAR BAY +-122.49,37.76,52.0,1382.0,230.0,708.0,279.0,5.8096,339800.0,NEAR BAY +-122.49,37.76,52.0,2564.0,502.0,1092.0,459.0,3.5302,329600.0,NEAR BAY +-122.49,37.76,52.0,2245.0,425.0,1091.0,409.0,3.5909,331200.0,NEAR BAY +-122.49,37.76,52.0,1792.0,305.0,782.0,287.0,4.0391,332700.0,NEAR BAY +-122.49,37.76,48.0,1351.0,270.0,650.0,265.0,3.5278,339800.0,NEAR BAY +-122.49,37.76,49.0,1724.0,295.0,795.0,297.0,4.3977,353600.0,NEAR BAY +-122.49,37.76,49.0,1637.0,304.0,729.0,281.0,4.3281,323100.0,NEAR BAY +-122.48,37.75,51.0,2095.0,410.0,1126.0,429.0,4.4,318400.0,NEAR BAY +-122.48,37.75,52.0,2515.0,494.0,1583.0,477.0,4.3393,317600.0,NEAR BAY +-122.48,37.74,52.0,2453.0,508.0,1056.0,453.0,3.6859,311800.0,NEAR OCEAN +-122.48,37.75,49.0,2203.0,407.0,1052.0,405.0,4.4375,329200.0,NEAR BAY +-122.48,37.75,48.0,2555.0,548.0,1285.0,482.0,3.7734,314700.0,NEAR BAY +-122.48,37.75,52.0,2074.0,401.0,1136.0,409.0,4.7703,331000.0,NEAR BAY +-122.49,37.75,48.0,2181.0,419.0,1041.0,379.0,3.7361,320200.0,NEAR OCEAN +-122.49,37.75,47.0,2140.0,425.0,1105.0,401.0,3.7054,308500.0,NEAR OCEAN +-122.49,37.75,45.0,2341.0,461.0,1092.0,438.0,4.8036,297800.0,NEAR OCEAN +-122.49,37.75,43.0,2044.0,393.0,979.0,378.0,3.9205,319100.0,NEAR OCEAN +-122.49,37.75,48.0,2387.0,424.0,1041.0,408.0,3.7562,321200.0,NEAR OCEAN +-122.49,37.75,52.0,2226.0,385.0,1177.0,416.0,4.8516,323800.0,NEAR OCEAN +-122.49,37.74,52.0,2189.0,433.0,1147.0,420.0,3.4583,321300.0,NEAR OCEAN +-122.48,37.74,52.0,2285.0,435.0,1211.0,442.0,4.0208,323100.0,NEAR OCEAN +-122.48,37.74,52.0,2166.0,423.0,1072.0,370.0,4.131,314300.0,NEAR OCEAN +-122.48,37.74,52.0,2841.0,517.0,1372.0,517.0,3.9236,335000.0,NEAR OCEAN +-122.49,37.73,48.0,1190.0,182.0,497.0,199.0,6.2642,438500.0,NEAR OCEAN +-122.49,37.74,48.0,1186.0,213.0,487.0,207.0,3.8333,340800.0,NEAR OCEAN +-122.49,37.74,52.0,2442.0,449.0,1188.0,436.0,4.3909,317700.0,NEAR OCEAN +-122.49,37.74,52.0,2302.0,457.0,1154.0,424.0,4.5744,315200.0,NEAR OCEAN +-122.48,37.73,52.0,1597.0,240.0,566.0,231.0,5.1681,500001.0,NEAR OCEAN +-122.48,37.73,47.0,2382.0,392.0,867.0,376.0,5.2598,371500.0,NEAR OCEAN +-122.49,37.73,39.0,1937.0,336.0,742.0,307.0,5.1991,369400.0,NEAR OCEAN +-122.49,37.73,37.0,1399.0,224.0,530.0,235.0,3.9219,433300.0,NEAR OCEAN +-122.49,37.73,36.0,1821.0,292.0,742.0,298.0,5.6204,406200.0,NEAR OCEAN +-122.48,37.73,38.0,3195.0,828.0,2410.0,778.0,3.1359,350000.0,NEAR OCEAN +-122.47,37.72,47.0,1176.0,286.0,564.0,258.0,3.2059,350000.0,NEAR OCEAN +-122.48,37.71,43.0,3850.0,1018.0,1497.0,829.0,3.5296,400000.0,NEAR OCEAN +-122.48,37.72,45.0,1405.0,338.0,733.0,342.0,4.1116,187500.0,NEAR OCEAN +-122.48,37.72,46.0,2403.0,638.0,1281.0,603.0,3.2321,112500.0,NEAR OCEAN +-122.5,37.76,52.0,2018.0,422.0,1142.0,463.0,3.7083,307700.0,NEAR OCEAN +-122.5,37.76,43.0,2108.0,456.0,1299.0,447.0,3.1406,316200.0,NEAR OCEAN +-122.5,37.76,50.0,1993.0,410.0,1009.0,374.0,3.9464,295600.0,NEAR OCEAN +-122.5,37.76,48.0,1408.0,295.0,891.0,269.0,3.8333,296300.0,NEAR OCEAN +-122.5,37.76,46.0,1491.0,285.0,841.0,306.0,4.5329,278800.0,NEAR OCEAN +-122.5,37.75,45.0,1672.0,344.0,838.0,314.0,4.1419,291500.0,NEAR OCEAN +-122.5,37.75,43.0,2373.0,481.0,1247.0,454.0,4.0985,283200.0,NEAR OCEAN +-122.51,37.76,43.0,2345.0,624.0,1439.0,614.0,2.8448,268900.0,NEAR OCEAN +-122.51,37.76,43.0,2527.0,619.0,1332.0,558.0,3.0465,274200.0,NEAR OCEAN +-122.51,37.76,40.0,2320.0,562.0,1499.0,521.0,3.2792,260800.0,NEAR OCEAN +-122.5,37.76,46.0,2226.0,480.0,1272.0,468.0,4.2644,284100.0,NEAR OCEAN +-122.5,37.76,45.0,1673.0,377.0,1078.0,393.0,3.3393,272300.0,NEAR OCEAN +-122.5,37.75,45.0,1620.0,,941.0,328.0,4.3859,270200.0,NEAR OCEAN +-122.5,37.75,44.0,1819.0,,1137.0,354.0,3.4919,271800.0,NEAR OCEAN +-122.54,37.76,45.0,1592.0,325.0,920.0,322.0,3.96,272200.0,NEAR OCEAN +-122.5,37.75,44.0,1739.0,343.0,872.0,330.0,2.9632,286300.0,NEAR OCEAN +-122.5,37.74,40.0,2310.0,445.0,1266.0,490.0,3.7969,297800.0,NEAR OCEAN +-122.5,37.74,45.0,1771.0,349.0,1098.0,342.0,3.7552,296600.0,NEAR OCEAN +-122.49,37.74,44.0,1472.0,275.0,820.0,310.0,5.6826,300000.0,NEAR OCEAN +-122.5,37.74,44.0,2374.0,496.0,1087.0,426.0,3.5,275700.0,NEAR OCEAN +-122.5,37.74,44.0,2527.0,518.0,1434.0,444.0,3.875,275700.0,NEAR OCEAN +-122.5,37.75,46.0,2298.0,457.0,1429.0,477.0,4.0217,272400.0,NEAR OCEAN +-122.5,37.74,44.0,2792.0,615.0,1640.0,579.0,4.0625,272800.0,NEAR OCEAN +-122.5,37.74,42.0,1667.0,395.0,1041.0,387.0,3.9583,273700.0,NEAR OCEAN +-122.5,37.74,44.0,2082.0,470.0,1154.0,403.0,4.3611,268100.0,NEAR OCEAN +-122.54,37.74,42.0,2006.0,415.0,1230.0,435.0,4.1786,271100.0,NEAR OCEAN +-122.46,37.79,52.0,2005.0,359.0,847.0,356.0,4.1029,500001.0,NEAR BAY +-122.46,37.78,52.0,2165.0,580.0,1067.0,530.0,2.9293,350000.0,NEAR BAY +-122.46,37.78,52.0,2594.0,622.0,1421.0,593.0,3.0265,350000.0,NEAR BAY +-122.46,37.79,52.0,2059.0,416.0,999.0,402.0,3.7419,500001.0,NEAR BAY +-122.46,37.78,52.0,3429.0,773.0,1584.0,696.0,3.7887,500001.0,NEAR BAY +-122.47,37.78,51.0,1485.0,386.0,880.0,385.0,2.7431,307100.0,NEAR BAY +-122.47,37.78,52.0,2635.0,587.0,1302.0,577.0,3.7292,416700.0,NEAR BAY +-122.47,37.79,52.0,2844.0,623.0,1380.0,596.0,4.75,500001.0,NEAR BAY +-122.47,37.79,52.0,437.0,105.0,194.0,87.0,2.8125,500001.0,NEAR BAY +-122.47,37.79,52.0,2383.0,477.0,990.0,464.0,3.9688,483300.0,NEAR BAY +-122.47,37.78,52.0,2388.0,507.0,1078.0,494.0,3.5221,443300.0,NEAR BAY +-122.47,37.78,52.0,1941.0,436.0,955.0,425.0,4.1339,396400.0,NEAR BAY +-122.48,37.78,48.0,2835.0,728.0,1674.0,684.0,3.129,375000.0,NEAR BAY +-122.48,37.79,52.0,4683.0,1055.0,2246.0,975.0,4.1148,457800.0,NEAR BAY +-122.48,37.78,44.0,3371.0,794.0,1738.0,753.0,3.1653,335300.0,NEAR BAY +-122.49,37.78,32.0,3028.0,815.0,1704.0,718.0,3.2028,322900.0,NEAR BAY +-122.49,37.78,46.0,3304.0,792.0,1783.0,777.0,3.6148,352200.0,NEAR BAY +-122.48,37.79,52.0,1647.0,236.0,546.0,227.0,9.1881,500001.0,NEAR BAY +-122.49,37.79,52.0,3146.0,478.0,1143.0,455.0,6.1407,500001.0,NEAR BAY +-122.49,37.79,52.0,2488.0,281.0,805.0,295.0,10.7058,500001.0,NEAR BAY +-122.46,37.78,52.0,4140.0,984.0,2030.0,892.0,3.4236,376800.0,NEAR BAY +-122.46,37.78,52.0,2632.0,542.0,1364.0,544.0,3.4605,441700.0,NEAR BAY +-122.46,37.78,52.0,2051.0,552.0,1400.0,510.0,3.2396,375000.0,NEAR BAY +-122.46,37.78,52.0,3088.0,727.0,1636.0,662.0,2.8553,360700.0,NEAR BAY +-122.46,37.77,52.0,3193.0,688.0,2099.0,681.0,3.9375,402900.0,NEAR BAY +-122.47,37.77,52.0,2241.0,443.0,1042.0,377.0,4.1635,398400.0,NEAR BAY +-122.47,37.78,52.0,2275.0,412.0,1166.0,424.0,4.0652,421300.0,NEAR BAY +-122.47,37.78,52.0,2169.0,522.0,1220.0,505.0,3.1989,446900.0,NEAR BAY +-122.47,37.78,52.0,2951.0,647.0,1448.0,591.0,3.1392,422400.0,NEAR BAY +-122.47,37.78,52.0,3021.0,569.0,1479.0,514.0,4.0208,414600.0,NEAR BAY +-122.47,37.78,52.0,2042.0,378.0,1153.0,408.0,4.1856,404700.0,NEAR BAY +-122.47,37.77,52.0,3143.0,635.0,1350.0,623.0,3.8571,366700.0,NEAR BAY +-122.48,37.78,52.0,3047.0,641.0,1427.0,620.0,3.4883,337200.0,NEAR BAY +-122.48,37.78,52.0,2666.0,515.0,1362.0,494.0,4.218,393800.0,NEAR BAY +-122.48,37.77,52.0,2556.0,595.0,1202.0,568.0,3.8899,348500.0,NEAR BAY +-122.48,37.78,50.0,2159.0,437.0,1111.0,417.0,3.5588,346400.0,NEAR BAY +-122.48,37.78,52.0,2910.0,611.0,1508.0,515.0,3.5865,311400.0,NEAR BAY +-122.49,37.78,47.0,2695.0,643.0,1505.0,644.0,3.0877,329100.0,NEAR BAY +-122.49,37.78,52.0,3440.0,722.0,1663.0,665.0,3.0278,356300.0,NEAR BAY +-122.49,37.77,52.0,2342.0,458.0,1170.0,458.0,3.7036,369200.0,NEAR BAY +-122.5,37.77,52.0,2433.0,454.0,1070.0,420.0,4.125,359500.0,NEAR BAY +-122.49,37.78,52.0,2050.0,439.0,1109.0,437.0,2.6719,318500.0,NEAR BAY +-122.49,37.78,42.0,2723.0,579.0,1419.0,519.0,3.6429,328400.0,NEAR BAY +-122.49,37.78,49.0,2176.0,441.0,1040.0,448.0,4.2414,500001.0,NEAR BAY +-122.5,37.78,50.0,1922.0,427.0,1049.0,443.0,3.5833,348500.0,NEAR BAY +-122.5,37.77,52.0,1769.0,414.0,1032.0,380.0,3.9954,324700.0,NEAR BAY +-122.5,37.77,52.0,2299.0,441.0,1252.0,415.0,5.0562,336700.0,NEAR BAY +-122.5,37.77,52.0,2739.0,569.0,1312.0,531.0,3.5833,322900.0,NEAR BAY +-122.5,37.78,46.0,2646.0,607.0,1418.0,563.0,3.7167,332800.0,NEAR BAY +-122.51,37.78,45.0,2564.0,499.0,1056.0,460.0,4.7328,351100.0,NEAR BAY +-122.51,37.78,47.0,2496.0,494.0,1201.0,454.0,4.0353,342200.0,NEAR BAY +-122.55,37.79,32.0,2131.0,625.0,1229.0,572.0,2.9201,322200.0,NEAR OCEAN +-122.47,37.81,45.0,6927.0,1258.0,4715.0,1165.0,3.4051,500001.0,NEAR BAY +-122.5,37.79,52.0,8.0,1.0,13.0,1.0,15.0001,500001.0,NEAR BAY +-122.54,37.72,17.0,2975.0,968.0,1453.0,828.0,3.527,318900.0,NEAR OCEAN +-122.42,37.72,42.0,4219.0,1125.0,3549.0,993.0,1.2387,212800.0,NEAR BAY +-122.36,37.72,10.0,479.0,125.0,355.0,108.0,2.7083,180400.0,NEAR BAY +-122.39,37.74,52.0,126.0,24.0,37.0,27.0,10.2264,225000.0,NEAR BAY +-122.4,37.75,26.0,54.0,9.0,23.0,9.0,6.1359,225000.0,NEAR BAY +-122.38,37.71,47.0,1088.0,190.0,558.0,166.0,4.2708,207100.0,NEAR BAY +-122.4,37.71,47.0,1649.0,328.0,1183.0,356.0,3.3625,223700.0,NEAR BAY +-121.28,37.96,28.0,1942.0,724.0,1618.0,638.0,0.9365,52500.0,INLAND +-121.28,37.95,49.0,1200.0,364.0,1448.0,318.0,1.1094,52500.0,INLAND +-121.28,37.95,46.0,1026.0,330.0,1109.0,333.0,1.2904,63300.0,INLAND +-121.29,37.96,52.0,888.0,324.0,630.0,258.0,1.2411,112500.0,INLAND +-121.29,37.96,52.0,287.0,119.0,154.0,85.0,0.8738,75000.0,INLAND +-121.29,37.95,16.0,761.0,306.0,438.0,282.0,0.7714,87500.0,INLAND +-121.3,37.95,9.0,674.0,242.0,575.0,193.0,2.2024,45000.0,INLAND +-121.29,37.95,52.0,107.0,79.0,167.0,53.0,0.7917,22500.0,INLAND +-121.3,37.96,24.0,1212.0,366.0,1202.0,343.0,1.7875,76800.0,INLAND +-121.31,37.96,48.0,1112.0,227.0,583.0,216.0,2.3393,77600.0,INLAND +-121.29,37.97,52.0,1610.0,480.0,1025.0,440.0,1.2962,110200.0,INLAND +-121.29,37.96,48.0,1778.0,541.0,1237.0,462.0,1.3438,103100.0,INLAND +-121.29,37.96,50.0,1669.0,558.0,1340.0,484.0,1.3191,92300.0,INLAND +-121.3,37.96,31.0,2668.0,812.0,1398.0,721.0,1.125,110400.0,INLAND +-121.3,37.96,52.0,1475.0,238.0,736.0,260.0,3.6591,105100.0,INLAND +-121.3,37.96,52.0,1354.0,314.0,679.0,311.0,1.7788,97400.0,INLAND +-121.31,37.96,52.0,2654.0,468.0,1157.0,494.0,3.226,107600.0,INLAND +-121.31,37.96,52.0,1829.0,301.0,694.0,319.0,3.3466,92600.0,INLAND +-121.28,37.97,47.0,2348.0,507.0,1455.0,479.0,1.65,66000.0,INLAND +-121.27,37.96,43.0,1624.0,448.0,1805.0,440.0,1.425,61300.0,INLAND +-121.27,37.95,43.0,557.0,165.0,573.0,144.0,1.7212,59000.0,INLAND +-121.27,37.95,52.0,1318.0,308.0,1368.0,310.0,1.8261,54600.0,INLAND +-121.27,37.94,38.0,512.0,133.0,676.0,124.0,1.7386,52000.0,INLAND +-121.28,37.94,44.0,1406.0,357.0,1489.0,386.0,1.4688,56800.0,INLAND +-121.28,37.94,48.0,1766.0,444.0,1406.0,421.0,1.7039,52700.0,INLAND +-121.29,37.95,52.0,288.0,86.0,272.0,54.0,0.696,42500.0,INLAND +-121.29,37.94,40.0,2827.0,655.0,2037.0,574.0,2.0303,63800.0,INLAND +-121.32,37.95,40.0,964.0,230.0,742.0,209.0,1.2625,43000.0,INLAND +-121.31,37.94,41.0,375.0,108.0,323.0,98.0,1.9531,45000.0,INLAND +-121.3,37.94,40.0,452.0,109.0,412.0,97.0,1.3417,60800.0,INLAND +-121.3,37.94,52.0,24.0,6.0,23.0,5.0,2.375,67500.0,INLAND +-121.32,37.94,36.0,40.0,10.0,64.0,14.0,2.625,55000.0,INLAND +-121.31,37.96,52.0,1938.0,332.0,788.0,320.0,3.6094,118400.0,INLAND +-121.32,37.96,47.0,1700.0,344.0,922.0,357.0,3.1845,87200.0,INLAND +-121.32,37.96,46.0,1832.0,365.0,975.0,373.0,2.0398,88100.0,INLAND +-121.33,37.96,42.0,1619.0,340.0,906.0,339.0,2.5488,80300.0,INLAND +-121.34,37.96,27.0,1839.0,442.0,2010.0,416.0,2.1284,59400.0,INLAND +-121.32,37.95,36.0,747.0,189.0,338.0,145.0,1.7885,62100.0,INLAND +-121.32,37.96,5.0,123.0,21.0,50.0,20.0,2.7656,50000.0,INLAND +-121.34,37.97,33.0,2493.0,454.0,1203.0,436.0,3.765,94600.0,INLAND +-121.34,37.96,23.0,2830.0,659.0,1554.0,654.0,3.0354,113700.0,INLAND +-121.35,37.97,33.0,3656.0,681.0,1698.0,671.0,3.1406,93900.0,INLAND +-121.36,37.96,32.0,614.0,95.0,227.0,107.0,3.9922,247400.0,INLAND +-121.35,37.96,21.0,1343.0,183.0,462.0,193.0,5.8995,189900.0,INLAND +-121.32,37.98,37.0,3247.0,643.0,1737.0,665.0,3.066,94100.0,INLAND +-121.33,37.98,36.0,3113.0,576.0,1746.0,544.0,3.4625,84600.0,INLAND +-121.33,37.97,38.0,3166.0,575.0,1351.0,561.0,3.5404,91600.0,INLAND +-121.32,37.97,46.0,2270.0,427.0,1097.0,453.0,3.3235,87800.0,INLAND +-121.32,37.97,43.0,2453.0,490.0,1093.0,438.0,2.9107,88800.0,INLAND +-121.33,37.96,20.0,1727.0,386.0,730.0,342.0,2.5195,92600.0,INLAND +-121.33,37.97,43.0,1511.0,292.0,721.0,320.0,3.5703,87400.0,INLAND +-121.33,37.97,36.0,1953.0,492.0,999.0,371.0,2.0043,90800.0,INLAND +-121.31,37.98,47.0,3386.0,663.0,1228.0,619.0,3.0625,141500.0,INLAND +-121.3,37.97,52.0,2980.0,537.0,1128.0,510.0,4.061,113600.0,INLAND +-121.31,37.97,42.0,1824.0,277.0,720.0,309.0,5.1915,183700.0,INLAND +-121.31,37.97,45.0,2604.0,454.0,988.0,442.0,3.6667,123100.0,INLAND +-121.29,37.98,42.0,625.0,143.0,533.0,159.0,2.625,65400.0,INLAND +-121.29,37.97,52.0,2995.0,555.0,1392.0,503.0,1.7794,98800.0,INLAND +-121.29,37.98,49.0,2501.0,565.0,1171.0,550.0,2.5043,76700.0,INLAND +-121.3,37.98,47.0,2373.0,461.0,990.0,444.0,4.175,98300.0,INLAND +-121.3,37.97,52.0,2259.0,417.0,766.0,385.0,2.2981,105400.0,INLAND +-121.29,37.99,41.0,930.0,191.0,463.0,185.0,3.4141,90600.0,INLAND +-121.29,37.99,30.0,1271.0,528.0,2019.0,524.0,1.5152,81300.0,INLAND +-121.3,37.99,38.0,2375.0,494.0,1167.0,471.0,2.6673,87500.0,INLAND +-121.3,37.98,39.0,3375.0,659.0,1388.0,631.0,2.6364,93800.0,INLAND +-121.28,37.99,42.0,495.0,116.0,284.0,97.0,2.8854,55700.0,INLAND +-121.26,37.98,32.0,3274.0,820.0,2050.0,738.0,2.1265,55700.0,INLAND +-121.27,37.98,43.0,2608.0,516.0,1322.0,528.0,2.5714,70000.0,INLAND +-121.27,37.98,43.0,1005.0,200.0,492.0,172.0,2.6812,72800.0,INLAND +-121.28,37.98,52.0,941.0,184.0,414.0,171.0,2.1429,69900.0,INLAND +-121.29,37.99,45.0,965.0,198.0,498.0,195.0,1.6944,75200.0,INLAND +-121.27,37.97,39.0,1023.0,243.0,550.0,224.0,1.1141,54400.0,INLAND +-121.26,37.96,43.0,527.0,133.0,367.0,152.0,2.5,63600.0,INLAND +-121.27,37.96,43.0,948.0,221.0,749.0,208.0,1.962,52700.0,INLAND +-121.27,37.96,52.0,583.0,114.0,310.0,93.0,2.5625,54200.0,INLAND +-121.26,37.98,41.0,1633.0,433.0,885.0,413.0,0.9782,54200.0,INLAND +-121.25,37.98,39.0,1765.0,414.0,1056.0,414.0,1.5329,48300.0,INLAND +-121.26,37.97,31.0,1189.0,295.0,891.0,292.0,2.5536,50500.0,INLAND +-121.25,37.97,34.0,1288.0,344.0,846.0,293.0,1.7895,63100.0,INLAND +-121.26,37.96,43.0,940.0,208.0,690.0,181.0,2.3056,62300.0,INLAND +-121.26,37.97,41.0,2398.0,448.0,1143.0,444.0,3.0352,69800.0,INLAND +-121.25,37.97,41.0,855.0,189.0,716.0,206.0,2.0375,75000.0,INLAND +-121.26,37.96,35.0,1511.0,316.0,892.0,304.0,1.7898,63500.0,INLAND +-121.25,37.95,40.0,1703.0,362.0,1208.0,373.0,2.0817,55300.0,INLAND +-121.26,37.95,44.0,819.0,184.0,677.0,183.0,1.725,59300.0,INLAND +-121.26,37.95,39.0,1841.0,428.0,1368.0,390.0,2.1583,62000.0,INLAND +-121.27,37.96,41.0,461.0,101.0,382.0,79.0,1.275,54000.0,INLAND +-121.26,37.96,40.0,535.0,105.0,335.0,102.0,2.5234,62800.0,INLAND +-121.25,37.96,26.0,2205.0,478.0,1730.0,472.0,2.4866,68300.0,INLAND +-121.24,37.96,29.0,874.0,217.0,788.0,222.0,1.9187,57700.0,INLAND +-121.25,37.95,46.0,2001.0,428.0,1384.0,401.0,1.9402,62200.0,INLAND +-121.24,37.95,36.0,361.0,63.0,169.0,62.0,3.7734,63800.0,INLAND +-121.25,37.94,30.0,1509.0,308.0,967.0,278.0,1.7798,65900.0,INLAND +-121.24,37.94,5.0,2232.0,488.0,1857.0,435.0,2.8705,113600.0,INLAND +-121.24,37.93,21.0,1185.0,237.0,960.0,245.0,2.0893,65000.0,INLAND +-121.25,37.94,28.0,964.0,232.0,782.0,218.0,2.3269,55900.0,INLAND +-121.25,37.93,31.0,1673.0,382.0,1734.0,400.0,2.0833,48300.0,INLAND +-121.26,37.93,33.0,2109.0,531.0,2248.0,588.0,1.4583,53000.0,INLAND +-121.26,37.94,43.0,1610.0,412.0,1409.0,365.0,1.7574,51700.0,INLAND +-121.27,37.93,24.0,1451.0,320.0,1413.0,283.0,2.125,61200.0,INLAND +-121.28,37.94,35.0,2680.0,634.0,2188.0,611.0,1.9375,56700.0,INLAND +-121.28,37.92,36.0,499.0,115.0,451.0,124.0,2.1705,60300.0,INLAND +-121.28,37.94,40.0,2806.0,685.0,2268.0,635.0,1.8814,57700.0,INLAND +-121.29,37.93,37.0,2488.0,578.0,1854.0,514.0,2.551,59100.0,INLAND +-121.29,37.93,24.0,1438.0,351.0,1294.0,342.0,2.7829,61800.0,INLAND +-121.28,37.93,23.0,1491.0,346.0,1223.0,343.0,2.1591,67800.0,INLAND +-121.28,37.92,30.0,1061.0,230.0,851.0,195.0,2.4412,61600.0,INLAND +-121.29,37.92,12.0,1096.0,240.0,1175.0,278.0,3.1053,73100.0,INLAND +-121.28,37.91,31.0,820.0,179.0,576.0,155.0,1.69,65900.0,INLAND +-121.31,37.93,21.0,1556.0,314.0,1140.0,304.0,2.4667,81400.0,INLAND +-121.3,37.92,28.0,3308.0,766.0,3201.0,720.0,1.7694,73900.0,INLAND +-121.24,37.98,33.0,450.0,123.0,236.0,103.0,1.1964,80400.0,INLAND +-121.24,37.97,47.0,886.0,196.0,517.0,188.0,2.1991,67200.0,INLAND +-121.24,37.96,37.0,1175.0,260.0,951.0,267.0,2.875,57700.0,INLAND +-121.23,37.96,37.0,2351.0,564.0,1591.0,549.0,1.6563,57200.0,INLAND +-121.23,37.96,44.0,2204.0,473.0,1277.0,435.0,1.5539,59200.0,INLAND +-121.23,37.95,36.0,811.0,168.0,514.0,152.0,2.625,89200.0,INLAND +-121.22,37.97,37.0,1514.0,337.0,1121.0,337.0,2.401,58400.0,INLAND +-121.22,37.96,30.0,1737.0,381.0,1177.0,347.0,1.9875,56400.0,INLAND +-121.22,37.96,31.0,1484.0,314.0,1163.0,336.0,2.625,72100.0,INLAND +-121.25,37.92,19.0,2109.0,427.0,1742.0,426.0,2.4097,66000.0,INLAND +-121.23,37.92,28.0,590.0,129.0,315.0,99.0,1.8958,85700.0,INLAND +-121.36,38.0,17.0,4535.0,762.0,1562.0,743.0,5.3224,225800.0,INLAND +-121.35,38.0,22.0,3564.0,730.0,1539.0,699.0,3.675,152400.0,INLAND +-121.35,38.0,6.0,1649.0,369.0,732.0,350.0,3.4231,123800.0,INLAND +-121.37,38.01,15.0,2430.0,315.0,1016.0,314.0,10.0088,242000.0,INLAND +-121.35,38.01,15.0,2682.0,599.0,1520.0,601.0,3.5982,94400.0,INLAND +-121.36,38.01,16.0,926.0,230.0,451.0,198.0,4.0221,173300.0,INLAND +-121.36,38.01,16.0,2178.0,667.0,1192.0,579.0,2.3339,87100.0,INLAND +-121.36,38.01,16.0,1080.0,166.0,507.0,182.0,4.5278,166900.0,INLAND +-121.34,38.01,17.0,2033.0,452.0,1114.0,446.0,3.2872,175000.0,INLAND +-121.33,38.01,27.0,1612.0,234.0,630.0,255.0,5.318,155100.0,INLAND +-121.34,38.0,32.0,3877.0,687.0,1642.0,647.0,4.0444,129200.0,INLAND +-121.33,38.0,32.0,4474.0,929.0,2177.0,884.0,3.2889,98900.0,INLAND +-121.33,38.01,36.0,1383.0,207.0,531.0,203.0,5.9191,151900.0,INLAND +-121.32,38.01,20.0,1903.0,395.0,919.0,359.0,2.6765,96400.0,INLAND +-121.32,38.01,36.0,391.0,74.0,171.0,79.0,2.7045,102800.0,INLAND +-121.32,38.0,21.0,1795.0,482.0,1114.0,472.0,2.0091,101500.0,INLAND +-121.32,38.0,22.0,2105.0,521.0,781.0,483.0,2.213,87500.0,INLAND +-121.33,38.0,14.0,3731.0,772.0,1679.0,750.0,3.1369,119600.0,INLAND +-121.33,37.99,15.0,4472.0,1079.0,1837.0,976.0,2.5,175900.0,INLAND +-121.34,37.99,11.0,4487.0,868.0,2195.0,780.0,3.9615,194600.0,INLAND +-121.34,37.99,14.0,3111.0,498.0,1178.0,525.0,6.556,234700.0,INLAND +-121.31,37.99,15.0,3103.0,965.0,3061.0,861.0,1.3729,110300.0,INLAND +-121.32,37.98,20.0,1591.0,589.0,1916.0,536.0,1.3531,94600.0,INLAND +-121.33,37.98,9.0,2370.0,424.0,1129.0,386.0,5.143,176500.0,INLAND +-121.33,37.98,10.0,1564.0,397.0,643.0,347.0,2.7031,150000.0,INLAND +-121.36,37.99,8.0,1801.0,380.0,684.0,350.0,4.2589,134900.0,INLAND +-121.34,37.98,8.0,2628.0,428.0,1158.0,393.0,5.3002,191700.0,INLAND +-121.33,38.02,33.0,2854.0,489.0,1109.0,452.0,4.3008,136400.0,INLAND +-121.34,38.02,30.0,4375.0,689.0,2038.0,709.0,5.1202,133800.0,INLAND +-121.33,38.02,31.0,1466.0,,608.0,254.0,3.1827,162100.0,INLAND +-121.33,38.02,37.0,1964.0,315.0,915.0,335.0,4.3008,119800.0,INLAND +-121.34,38.03,20.0,4213.0,751.0,2071.0,714.0,4.4063,130800.0,INLAND +-121.33,38.03,19.0,1708.0,291.0,906.0,288.0,4.918,130600.0,INLAND +-121.36,38.04,4.0,2477.0,359.0,1234.0,377.0,5.5427,162100.0,INLAND +-121.35,38.04,5.0,4303.0,613.0,2206.0,621.0,5.5842,159100.0,INLAND +-121.35,38.04,12.0,6217.0,1019.0,3771.0,961.0,3.7206,146000.0,INLAND +-121.36,38.04,9.0,2167.0,370.0,1290.0,351.0,5.0285,148200.0,INLAND +-121.34,38.05,16.0,667.0,92.0,267.0,90.0,5.6147,244700.0,INLAND +-121.34,38.04,16.0,3295.0,565.0,2279.0,576.0,3.6083,146400.0,INLAND +-121.33,38.04,15.0,1933.0,280.0,965.0,260.0,4.6477,142700.0,INLAND +-121.33,38.03,10.0,629.0,140.0,635.0,146.0,2.2961,126700.0,INLAND +-121.32,38.03,16.0,4045.0,623.0,1862.0,625.0,4.875,143100.0,INLAND +-121.33,38.04,15.0,2903.0,440.0,1325.0,423.0,4.5179,145600.0,INLAND +-121.33,38.04,10.0,1421.0,204.0,657.0,209.0,5.1878,153900.0,INLAND +-121.35,38.03,8.0,1904.0,255.0,895.0,242.0,5.7201,155700.0,INLAND +-121.34,38.03,12.0,2707.0,433.0,1200.0,380.0,4.9861,133500.0,INLAND +-121.35,38.02,16.0,1665.0,311.0,1301.0,259.0,2.8403,132300.0,INLAND +-121.35,38.03,16.0,3158.0,515.0,1596.0,528.0,4.1739,131300.0,INLAND +-121.36,38.03,14.0,2356.0,438.0,1378.0,481.0,3.7375,138800.0,INLAND +-121.35,38.02,15.0,3583.0,644.0,2183.0,643.0,3.428,140700.0,INLAND +-121.36,38.02,5.0,2229.0,543.0,1010.0,474.0,4.1719,206100.0,INLAND +-121.36,38.03,7.0,3461.0,859.0,1518.0,741.0,3.5684,78700.0,INLAND +-121.32,38.04,30.0,249.0,44.0,167.0,45.0,4.5,92800.0,INLAND +-121.31,38.03,24.0,3050.0,568.0,1743.0,549.0,3.7413,105300.0,INLAND +-121.32,38.03,25.0,2474.0,513.0,1947.0,524.0,2.5742,98400.0,INLAND +-121.32,38.02,26.0,2851.0,533.0,1544.0,499.0,3.5379,99100.0,INLAND +-121.31,38.03,18.0,4893.0,1008.0,3036.0,997.0,2.5212,110000.0,INLAND +-121.29,38.0,12.0,4038.0,1074.0,3440.0,942.0,1.9698,112300.0,INLAND +-121.31,37.99,23.0,3135.0,707.0,1650.0,680.0,1.886,105300.0,INLAND +-121.3,38.0,23.0,3706.0,1106.0,3785.0,1019.0,1.7774,100000.0,INLAND +-121.3,38.01,29.0,2289.0,449.0,1215.0,435.0,3.2788,100000.0,INLAND +-121.3,38.0,27.0,2918.0,580.0,1338.0,544.0,2.6495,116200.0,INLAND +-121.31,38.0,35.0,2097.0,351.0,977.0,358.0,4.3958,108400.0,INLAND +-121.31,38.0,19.0,908.0,158.0,306.0,154.0,3.9792,131900.0,INLAND +-121.31,38.02,24.0,4157.0,951.0,2734.0,879.0,2.7981,92100.0,INLAND +-121.3,38.01,30.0,2547.0,485.0,1547.0,501.0,3.994,95500.0,INLAND +-121.32,38.02,23.0,3251.0,689.0,1890.0,668.0,3.0729,104800.0,INLAND +-121.31,38.01,22.0,2101.0,514.0,1304.0,511.0,2.8348,101600.0,INLAND +-121.31,38.01,22.0,2575.0,680.0,1367.0,645.0,1.4274,90500.0,INLAND +-121.3,38.04,8.0,2668.0,447.0,1713.0,444.0,4.0156,117600.0,INLAND +-121.3,38.03,13.0,1014.0,200.0,712.0,197.0,3.1471,102800.0,INLAND +-121.3,38.03,10.0,1409.0,248.0,782.0,222.0,4.0227,107700.0,INLAND +-121.29,38.04,16.0,2128.0,441.0,1860.0,459.0,3.1779,97300.0,INLAND +-121.29,38.03,16.0,4356.0,881.0,1629.0,818.0,2.2672,91100.0,INLAND +-121.28,38.03,11.0,3585.0,729.0,2769.0,715.0,3.0907,94100.0,INLAND +-121.29,38.03,7.0,2021.0,441.0,1615.0,406.0,2.5842,111300.0,INLAND +-121.28,38.03,11.0,826.0,150.0,684.0,166.0,3.9265,107400.0,INLAND +-121.29,38.02,12.0,2006.0,426.0,1849.0,396.0,2.5437,99000.0,INLAND +-121.3,38.02,16.0,2717.0,621.0,3343.0,643.0,2.5473,106300.0,INLAND +-121.3,38.03,11.0,2866.0,654.0,1404.0,525.0,2.505,95000.0,INLAND +-121.3,38.02,4.0,1515.0,384.0,491.0,348.0,2.8523,87500.0,INLAND +-121.29,38.0,4.0,1392.0,322.0,1784.0,309.0,2.375,124500.0,INLAND +-121.29,38.01,2.0,6403.0,1116.0,3327.0,957.0,4.4871,137900.0,INLAND +-121.28,38.02,8.0,1868.0,392.0,1258.0,389.0,3.175,95900.0,INLAND +-121.29,38.01,10.0,69.0,16.0,50.0,20.0,3.75,120800.0,INLAND +-121.27,38.05,26.0,378.0,75.0,164.0,65.0,3.4107,82800.0,INLAND +-121.27,38.02,32.0,342.0,58.0,138.0,52.0,2.9821,155000.0,INLAND +-121.3,38.05,52.0,122.0,26.0,62.0,25.0,1.15,112500.0,INLAND +-121.25,38.05,25.0,1967.0,362.0,1035.0,361.0,3.5735,106800.0,INLAND +-121.25,38.04,26.0,3080.0,473.0,1257.0,465.0,4.9861,201800.0,INLAND +-121.25,38.01,16.0,2397.0,501.0,1053.0,557.0,2.6994,112500.0,INLAND +-121.23,38.04,32.0,1829.0,262.0,677.0,243.0,6.1805,247900.0,INLAND +-121.22,38.04,42.0,343.0,50.0,116.0,49.0,5.5376,212500.0,INLAND +-121.25,38.03,29.0,2465.0,327.0,859.0,315.0,6.6605,220700.0,INLAND +-121.22,38.0,35.0,1841.0,300.0,783.0,285.0,2.8167,162100.0,INLAND +-121.24,38.01,22.0,1526.0,299.0,790.0,300.0,2.4342,125000.0,INLAND +-121.25,38.0,21.0,446.0,73.0,182.0,57.0,2.8958,135000.0,INLAND +-121.26,37.99,27.0,429.0,102.0,179.0,90.0,2.3333,87500.0,INLAND +-121.24,38.0,25.0,1471.0,300.0,721.0,304.0,2.4688,126800.0,INLAND +-121.23,37.99,38.0,523.0,80.0,226.0,72.0,5.5693,153100.0,INLAND +-121.23,37.98,27.0,849.0,137.0,373.0,131.0,5.0362,181300.0,INLAND +-121.2,37.97,39.0,440.0,83.0,270.0,97.0,6.0582,157700.0,INLAND +-121.19,38.04,35.0,703.0,117.0,290.0,107.0,3.225,177100.0,INLAND +-121.16,38.03,28.0,253.0,50.0,201.0,51.0,1.4732,156300.0,INLAND +-121.2,38.02,44.0,608.0,108.0,287.0,83.0,3.3882,125000.0,INLAND +-121.18,37.99,31.0,2450.0,559.0,1459.0,478.0,2.4674,130900.0,INLAND +-121.17,37.97,28.0,1374.0,248.0,769.0,229.0,3.6389,130400.0,INLAND +-121.23,37.95,32.0,2081.0,472.0,1342.0,411.0,2.7958,59000.0,INLAND +-121.19,37.93,27.0,1621.0,363.0,909.0,345.0,2.1513,99700.0,INLAND +-121.23,37.94,20.0,268.0,78.0,77.0,49.0,1.125,150000.0,INLAND +-121.22,37.93,21.0,336.0,68.0,206.0,73.0,4.75,121400.0,INLAND +-121.22,37.95,30.0,1055.0,211.0,629.0,170.0,2.8676,76900.0,INLAND +-121.18,37.96,35.0,411.0,74.0,193.0,59.0,2.5625,146900.0,INLAND +-121.24,37.9,16.0,50.0,10.0,20.0,6.0,2.625,137500.0,INLAND +-121.26,37.88,42.0,465.0,93.0,256.0,93.0,3.1719,158300.0,INLAND +-121.28,37.9,28.0,371.0,71.0,171.0,70.0,0.9614,55700.0,INLAND +-121.27,37.88,43.0,968.0,249.0,664.0,240.0,1.6458,83600.0,INLAND +-121.27,37.87,34.0,1010.0,206.0,678.0,234.0,2.9531,104000.0,INLAND +-121.31,37.9,38.0,226.0,44.0,125.0,38.0,2.9,125000.0,INLAND +-121.29,37.89,26.0,161.0,27.0,1542.0,30.0,5.7485,162500.0,INLAND +-121.29,37.87,29.0,488.0,108.0,308.0,115.0,2.6563,103100.0,INLAND +-121.23,37.87,49.0,98.0,24.0,59.0,26.0,3.65,162500.0,INLAND +-121.49,37.94,31.0,1860.0,394.0,1848.0,293.0,2.2891,162500.0,INLAND +-121.38,37.88,44.0,1158.0,226.0,1094.0,224.0,2.6842,156300.0,INLAND +-121.47,38.13,13.0,3192.0,715.0,1768.0,626.0,2.2619,123500.0,INLAND +-121.42,38.22,35.0,1507.0,313.0,868.0,283.0,2.0284,96300.0,INLAND +-121.36,38.15,42.0,2051.0,334.0,878.0,318.0,4.3553,185700.0,INLAND +-121.32,38.16,14.0,2049.0,398.0,1071.0,369.0,3.5,240800.0,INLAND +-121.32,38.13,5.0,3136.0,501.0,1327.0,467.0,5.5942,186900.0,INLAND +-121.35,38.09,32.0,1706.0,292.0,923.0,284.0,5.5057,147200.0,INLAND +-121.32,38.15,5.0,5428.0,994.0,2725.0,902.0,3.9323,130100.0,INLAND +-121.23,38.12,22.0,393.0,58.0,134.0,57.0,3.95,178100.0,INLAND +-121.23,38.11,48.0,561.0,81.0,240.0,69.0,3.6312,202800.0,INLAND +-121.23,38.09,23.0,633.0,91.0,236.0,83.0,6.4562,230000.0,INLAND +-121.26,38.09,35.0,930.0,186.0,525.0,201.0,2.0625,155000.0,INLAND +-121.3,38.09,31.0,335.0,53.0,154.0,55.0,2.0694,175000.0,INLAND +-121.29,38.07,21.0,1185.0,207.0,533.0,213.0,3.1917,204500.0,INLAND +-121.25,38.07,28.0,2103.0,422.0,1167.0,391.0,3.0592,152800.0,INLAND +-121.29,38.14,27.0,836.0,132.0,303.0,133.0,3.875,127400.0,INLAND +-121.3,38.14,17.0,3507.0,696.0,1867.0,709.0,3.2123,120700.0,INLAND +-121.29,38.14,34.0,2770.0,544.0,1409.0,535.0,3.2338,101800.0,INLAND +-121.29,38.14,34.0,1500.0,337.0,674.0,282.0,2.515,110800.0,INLAND +-121.29,38.13,31.0,1008.0,212.0,453.0,195.0,2.3917,113500.0,INLAND +-121.3,38.13,27.0,1004.0,192.0,470.0,192.0,2.8942,116700.0,INLAND +-121.3,38.13,23.0,2864.0,504.0,1298.0,499.0,3.2303,131800.0,INLAND +-121.29,38.15,23.0,4183.0,633.0,1886.0,628.0,4.8787,175300.0,INLAND +-121.28,38.14,37.0,3278.0,623.0,1431.0,575.0,3.3987,99500.0,INLAND +-121.27,38.14,33.0,3557.0,894.0,2659.0,894.0,2.2883,86900.0,INLAND +-121.27,38.14,40.0,929.0,257.0,576.0,229.0,2.125,137500.0,INLAND +-121.28,38.14,38.0,2803.0,500.0,1223.0,509.0,4.119,128800.0,INLAND +-121.28,38.13,48.0,1892.0,333.0,804.0,352.0,4.0625,143200.0,INLAND +-121.27,38.13,52.0,1081.0,257.0,437.0,225.0,2.1979,114100.0,INLAND +-121.27,38.13,40.0,2402.0,509.0,1197.0,486.0,2.1771,98200.0,INLAND +-121.28,38.13,32.0,3366.0,676.0,1916.0,697.0,2.5401,125400.0,INLAND +-121.28,38.12,34.0,3268.0,640.0,1906.0,628.0,2.8237,110700.0,INLAND +-121.27,38.12,44.0,2356.0,482.0,1043.0,443.0,2.4949,108000.0,INLAND +-121.29,38.13,20.0,3168.0,514.0,1390.0,490.0,5.0,154800.0,INLAND +-121.3,38.13,26.0,2256.0,360.0,937.0,372.0,5.0528,153700.0,INLAND +-121.29,38.12,18.0,1534.0,275.0,741.0,263.0,3.9607,132500.0,INLAND +-121.3,38.12,11.0,1792.0,252.0,767.0,263.0,7.6889,229300.0,INLAND +-121.3,38.11,5.0,5979.0,1190.0,2679.0,1084.0,4.196,171700.0,INLAND +-121.27,38.11,11.0,3163.0,794.0,2106.0,762.0,2.4482,103000.0,INLAND +-121.28,38.11,10.0,2974.0,588.0,1559.0,568.0,3.8825,136800.0,INLAND +-121.27,38.11,15.0,2039.0,384.0,1178.0,375.0,3.8672,120100.0,INLAND +-121.28,38.1,13.0,2432.0,586.0,1441.0,606.0,2.5556,133100.0,INLAND +-121.29,38.1,14.0,1551.0,297.0,785.0,281.0,3.775,163300.0,INLAND +-121.27,38.13,39.0,2614.0,634.0,1862.0,654.0,1.9238,70700.0,INLAND +-121.27,38.12,37.0,2232.0,504.0,1455.0,471.0,2.5587,87800.0,INLAND +-121.26,38.13,38.0,1419.0,411.0,1226.0,397.0,2.2188,68800.0,INLAND +-121.26,38.12,27.0,1818.0,459.0,1182.0,428.0,1.8575,73800.0,INLAND +-121.25,38.13,25.0,1305.0,270.0,789.0,235.0,3.2993,91100.0,INLAND +-121.26,38.11,4.0,2058.0,366.0,933.0,316.0,4.2448,150900.0,INLAND +-121.26,38.11,8.0,2770.0,642.0,1611.0,633.0,3.1284,115100.0,INLAND +-121.25,38.14,16.0,1174.0,242.0,464.0,261.0,2.3,133300.0,INLAND +-121.26,38.14,10.0,3371.0,665.0,1823.0,654.0,3.5333,116800.0,INLAND +-121.27,38.13,35.0,2607.0,685.0,2016.0,618.0,1.75,82900.0,INLAND +-121.26,38.13,25.0,2549.0,675.0,2053.0,648.0,2.0875,83100.0,INLAND +-121.24,38.22,28.0,2593.0,487.0,1365.0,457.0,3.3929,113000.0,INLAND +-121.22,38.16,24.0,4411.0,776.0,2038.0,732.0,3.475,151200.0,INLAND +-121.28,38.17,19.0,1337.0,236.0,744.0,225.0,4.0924,244200.0,INLAND +-121.32,38.21,27.0,2643.0,467.0,1455.0,444.0,3.6398,146700.0,INLAND +-121.16,38.16,31.0,1953.0,366.0,999.0,316.0,2.4906,122500.0,INLAND +-121.14,38.16,14.0,2591.0,497.0,1371.0,479.0,3.5774,113900.0,INLAND +-121.06,38.25,13.0,651.0,102.0,301.0,104.0,3.6528,200000.0,INLAND +-121.15,38.21,18.0,4176.0,700.0,2164.0,699.0,4.0365,174200.0,INLAND +-121.05,38.14,19.0,3326.0,561.0,1544.0,511.0,2.9875,166300.0,INLAND +-121.09,38.19,23.0,762.0,140.0,358.0,141.0,2.4545,105000.0,INLAND +-121.19,38.13,27.0,2400.0,435.0,1085.0,444.0,3.7687,165200.0,INLAND +-121.18,38.07,21.0,2333.0,377.0,1073.0,332.0,4.8125,161100.0,INLAND +-120.97,38.0,27.0,1683.0,288.0,873.0,258.0,4.7069,176900.0,INLAND +-121.05,37.93,17.0,2474.0,480.0,1649.0,453.0,3.275,156500.0,INLAND +-121.11,38.04,32.0,1083.0,188.0,471.0,178.0,2.9241,187500.0,INLAND +-121.09,38.03,21.0,2064.0,342.0,1021.0,359.0,4.517,152200.0,INLAND +-121.12,38.0,36.0,683.0,159.0,505.0,141.0,3.4265,158900.0,INLAND +-120.99,37.8,32.0,2564.0,513.0,1198.0,459.0,2.9083,113400.0,INLAND +-121.0,37.8,13.0,4030.0,744.0,2248.0,766.0,3.6107,141300.0,INLAND +-120.98,37.79,20.0,2458.0,491.0,1227.0,481.0,2.7857,110900.0,INLAND +-120.97,37.84,28.0,2368.0,430.0,1231.0,403.0,2.883,141900.0,INLAND +-120.96,37.77,32.0,2262.0,416.0,1156.0,404.0,3.8534,157600.0,INLAND +-121.04,37.78,32.0,2916.0,528.0,1466.0,473.0,2.5643,200000.0,INLAND +-121.06,37.86,24.0,1713.0,328.0,1258.0,324.0,2.683,169400.0,INLAND +-121.13,37.74,31.0,677.0,144.0,523.0,159.0,2.4598,97100.0,INLAND +-121.13,37.74,28.0,409.0,104.0,244.0,98.0,3.4643,90900.0,INLAND +-121.12,37.73,35.0,1107.0,227.0,573.0,210.0,2.3924,102200.0,INLAND +-121.13,37.74,21.0,2376.0,475.0,1175.0,441.0,3.6016,134600.0,INLAND +-121.13,37.73,40.0,1126.0,220.0,667.0,235.0,3.3158,125900.0,INLAND +-121.11,37.74,11.0,3886.0,599.0,1605.0,529.0,4.4213,182700.0,INLAND +-121.1,37.8,35.0,1853.0,331.0,958.0,340.0,3.3578,149000.0,INLAND +-121.11,37.76,22.0,2606.0,411.0,1252.0,397.0,4.1833,192100.0,INLAND +-121.16,37.73,7.0,4956.0,941.0,3006.0,915.0,3.4426,139000.0,INLAND +-121.25,37.76,22.0,2430.0,417.0,1292.0,391.0,3.4009,182400.0,INLAND +-121.22,37.72,34.0,2123.0,387.0,1310.0,368.0,2.6368,165600.0,INLAND +-121.22,37.81,17.0,2879.0,542.0,1802.0,530.0,3.6378,126100.0,INLAND +-121.22,37.8,28.0,2608.0,576.0,1719.0,554.0,2.1186,94400.0,INLAND +-121.22,37.8,37.0,1038.0,222.0,521.0,211.0,2.125,91900.0,INLAND +-121.21,37.81,18.0,2404.0,498.0,1531.0,506.0,2.995,124300.0,INLAND +-121.21,37.8,31.0,699.0,186.0,460.0,170.0,2.7443,94200.0,INLAND +-121.21,37.8,44.0,300.0,72.0,160.0,73.0,2.1786,120800.0,INLAND +-121.21,37.8,45.0,370.0,84.0,167.0,70.0,1.4853,101800.0,INLAND +-121.21,37.79,33.0,811.0,185.0,446.0,198.0,1.6724,96900.0,INLAND +-121.21,37.8,33.0,1862.0,429.0,971.0,389.0,2.6053,99200.0,INLAND +-121.21,37.81,8.0,1883.0,298.0,999.0,301.0,5.193,172100.0,INLAND +-121.2,37.8,28.0,3264.0,576.0,1512.0,567.0,3.7546,135300.0,INLAND +-121.2,37.8,24.0,1698.0,344.0,927.0,313.0,3.5625,130800.0,INLAND +-121.2,37.79,36.0,866.0,160.0,502.0,149.0,2.4798,101500.0,INLAND +-121.2,37.8,37.0,311.0,61.0,171.0,54.0,4.0972,101800.0,INLAND +-121.21,37.81,12.0,3667.0,640.0,2173.0,652.0,5.0369,163900.0,INLAND +-121.17,37.88,22.0,1283.0,256.0,3082.0,239.0,3.5365,111800.0,INLAND +-121.17,37.82,35.0,2506.0,406.0,1316.0,398.0,3.8472,197600.0,INLAND +-121.2,37.83,18.0,3415.0,580.0,1912.0,562.0,4.4423,161400.0,INLAND +-121.2,37.81,26.0,395.0,74.0,193.0,72.0,7.3718,212500.0,INLAND +-121.19,37.81,8.0,4019.0,857.0,1959.0,782.0,2.7321,175000.0,INLAND +-121.18,37.79,16.0,1326.0,286.0,509.0,297.0,1.9464,112500.0,INLAND +-121.2,37.78,4.0,58.0,29.0,79.0,29.0,3.375,106300.0,INLAND +-121.23,37.78,20.0,273.0,49.0,149.0,49.0,4.8229,158300.0,INLAND +-121.24,37.79,7.0,5151.0,867.0,2553.0,805.0,4.075,195000.0,INLAND +-121.27,37.79,16.0,1853.0,390.0,1013.0,362.0,2.7083,173900.0,INLAND +-121.22,37.8,13.0,335.0,89.0,247.0,77.0,1.6111,74100.0,INLAND +-121.22,37.79,36.0,1052.0,221.0,712.0,212.0,1.7228,105000.0,INLAND +-121.22,37.79,38.0,2152.0,451.0,1320.0,457.0,2.5025,101900.0,INLAND +-121.23,37.79,21.0,1922.0,373.0,1130.0,372.0,4.0815,117900.0,INLAND +-121.22,37.79,5.0,3107.0,477.0,1549.0,443.0,4.4766,169400.0,INLAND +-121.23,37.79,23.0,1985.0,424.0,1198.0,389.0,2.7734,116800.0,INLAND +-121.23,37.8,11.0,2451.0,665.0,1155.0,533.0,2.2254,130800.0,INLAND +-121.24,37.81,6.0,3883.0,800.0,2319.0,787.0,3.5595,161000.0,INLAND +-121.23,37.81,15.0,2906.0,537.0,1886.0,557.0,4.2431,137100.0,INLAND +-121.22,37.81,20.0,1811.0,352.0,1191.0,327.0,4.0125,121500.0,INLAND +-121.22,37.82,13.0,4452.0,949.0,2740.0,937.0,3.1964,141500.0,INLAND +-121.23,37.81,16.0,2085.0,342.0,1236.0,345.0,5.5591,149300.0,INLAND +-121.23,37.82,8.0,1289.0,235.0,867.0,239.0,4.6821,138500.0,INLAND +-121.23,37.82,14.0,1847.0,325.0,1030.0,309.0,4.9271,155300.0,INLAND +-121.23,37.84,28.0,1347.0,241.0,713.0,225.0,4.0208,155700.0,INLAND +-121.24,37.82,9.0,6169.0,959.0,3378.0,945.0,5.1047,157900.0,INLAND +-121.3,37.85,35.0,1034.0,206.0,604.0,192.0,2.2391,120000.0,INLAND +-121.31,37.81,36.0,284.0,53.0,130.0,47.0,3.1429,179200.0,INLAND +-121.29,37.8,6.0,110.0,26.0,69.0,24.0,3.7292,475000.0,INLAND +-121.27,37.82,26.0,1170.0,238.0,830.0,216.0,2.6458,127500.0,INLAND +-121.28,37.83,32.0,696.0,151.0,443.0,144.0,2.5156,86300.0,INLAND +-121.28,37.82,10.0,9205.0,1774.0,5935.0,1673.0,3.65,119400.0,INLAND +-121.37,37.77,19.0,2610.0,474.0,1290.0,452.0,4.1298,222800.0,INLAND +-121.4,37.74,20.0,2706.0,477.0,1236.0,474.0,4.15,322400.0,INLAND +-121.43,37.78,24.0,807.0,174.0,585.0,166.0,2.6181,163500.0,INLAND +-121.48,37.77,19.0,2364.0,373.0,1264.0,390.0,5.0176,274200.0,INLAND +-121.52,37.75,18.0,1544.0,272.0,825.0,286.0,4.3229,327300.0,INLAND +-121.46,37.73,20.0,2039.0,373.0,862.0,330.0,5.1629,222900.0,INLAND +-121.45,37.72,2.0,2239.0,321.0,766.0,219.0,5.75,240200.0,INLAND +-121.44,37.7,5.0,1365.0,196.0,591.0,156.0,6.0389,215100.0,INLAND +-121.42,37.71,7.0,8297.0,1433.0,4189.0,1271.0,4.3696,170700.0,INLAND +-121.42,37.76,18.0,5501.0,1051.0,2964.0,1009.0,4.1855,162100.0,INLAND +-121.42,37.75,33.0,1999.0,368.0,1061.0,390.0,3.5242,121400.0,INLAND +-121.42,37.74,45.0,818.0,144.0,340.0,138.0,4.8021,133500.0,INLAND +-121.42,37.74,38.0,773.0,147.0,320.0,134.0,2.825,152500.0,INLAND +-121.42,37.74,35.0,796.0,132.0,313.0,152.0,3.15,153200.0,INLAND +-121.42,37.75,33.0,1329.0,266.0,683.0,233.0,4.3687,128700.0,INLAND +-121.43,37.75,34.0,1280.0,268.0,754.0,294.0,3.1333,132000.0,INLAND +-121.43,37.75,41.0,1717.0,325.0,855.0,303.0,2.75,127300.0,INLAND +-121.43,37.75,42.0,1207.0,278.0,699.0,279.0,3.3611,117600.0,INLAND +-121.43,37.74,52.0,876.0,170.0,426.0,179.0,3.0865,119800.0,INLAND +-121.43,37.74,40.0,859.0,196.0,427.0,176.0,3.5789,110400.0,INLAND +-121.43,37.75,30.0,1912.0,451.0,1065.0,388.0,2.1424,125000.0,INLAND +-121.43,37.76,7.0,2125.0,508.0,1358.0,464.0,3.6312,147600.0,INLAND +-121.44,37.76,5.0,7264.0,1285.0,3670.0,1146.0,5.0443,194800.0,INLAND +-121.45,37.75,15.0,3846.0,677.0,2360.0,635.0,4.6173,164800.0,INLAND +-121.44,37.74,33.0,1875.0,363.0,970.0,381.0,3.5096,141700.0,INLAND +-121.44,37.75,29.0,918.0,159.0,417.0,166.0,4.2768,151300.0,INLAND +-121.44,37.75,16.0,2229.0,458.0,1199.0,445.0,3.4821,170600.0,INLAND +-121.42,37.74,19.0,1393.0,367.0,915.0,355.0,1.1957,103100.0,INLAND +-121.43,37.74,52.0,966.0,247.0,589.0,228.0,1.6937,108300.0,INLAND +-121.43,37.74,52.0,994.0,258.0,623.0,264.0,1.725,111500.0,INLAND +-121.44,37.74,25.0,456.0,116.0,370.0,106.0,3.1319,112500.0,INLAND +-121.44,37.73,7.0,8363.0,1314.0,3907.0,1068.0,5.3321,208100.0,INLAND +-121.43,37.73,40.0,1718.0,391.0,1312.0,388.0,2.9955,134700.0,INLAND +-121.42,37.73,2.0,2682.0,393.0,883.0,271.0,5.9934,196700.0,INLAND +-121.29,37.72,22.0,1630.0,404.0,4402.0,358.0,1.9792,63000.0,INLAND +-121.32,37.67,21.0,1494.0,271.0,781.0,255.0,4.3015,250000.0,INLAND +-121.47,37.58,14.0,1594.0,292.0,887.0,287.0,4.6625,294000.0,INLAND +-120.9,35.69,14.0,5020.0,909.0,2105.0,796.0,3.8158,248700.0,<1H OCEAN +-120.93,35.76,11.0,8997.0,1698.0,1825.0,756.0,3.23,154300.0,<1H OCEAN +-120.7,35.76,15.0,1914.0,425.0,1130.0,421.0,2.2165,90600.0,<1H OCEAN +-120.69,35.65,14.0,3487.0,889.0,2352.0,796.0,1.6303,144900.0,<1H OCEAN +-120.69,35.64,38.0,2564.0,546.0,1301.0,481.0,2.0076,114000.0,<1H OCEAN +-120.69,35.62,43.0,3044.0,652.0,1456.0,608.0,2.4567,140000.0,<1H OCEAN +-120.69,35.62,35.0,3451.0,713.0,1550.0,653.0,2.9167,161700.0,<1H OCEAN +-120.72,35.63,31.0,3476.0,644.0,1476.0,567.0,3.3472,195200.0,<1H OCEAN +-120.67,35.63,8.0,2690.0,410.0,1085.0,381.0,4.2841,256700.0,<1H OCEAN +-120.67,35.62,6.0,12779.0,2441.0,6085.0,2157.0,3.8661,168100.0,<1H OCEAN +-120.63,35.59,9.0,5782.0,1184.0,3026.0,1130.0,2.6528,113500.0,<1H OCEAN +-120.64,35.65,9.0,3466.0,673.0,2356.0,619.0,2.9926,158200.0,<1H OCEAN +-120.47,35.74,9.0,4267.0,785.0,2065.0,691.0,3.7303,162700.0,<1H OCEAN +-120.29,35.56,15.0,4760.0,871.0,2459.0,734.0,2.811,142100.0,<1H OCEAN +-120.6,35.6,13.0,4461.0,764.0,1795.0,640.0,4.475,206900.0,<1H OCEAN +-121.11,35.52,9.0,6044.0,1222.0,2239.0,972.0,3.24,264600.0,NEAR OCEAN +-121.14,35.55,13.0,5383.0,1070.0,1880.0,796.0,3.8019,271200.0,NEAR OCEAN +-121.12,35.58,16.0,4109.0,798.0,1298.0,626.0,3.4799,320800.0,NEAR OCEAN +-120.92,35.4,23.0,2059.0,354.0,636.0,278.0,3.6908,278800.0,NEAR OCEAN +-120.85,35.38,27.0,3493.0,909.0,1481.0,666.0,2.3075,184200.0,NEAR OCEAN +-120.86,35.39,23.0,1664.0,355.0,629.0,279.0,2.7344,188300.0,NEAR OCEAN +-120.86,35.4,21.0,2787.0,641.0,1106.0,501.0,2.7043,186200.0,NEAR OCEAN +-120.87,35.41,16.0,2168.0,444.0,782.0,374.0,3.0187,278100.0,NEAR OCEAN +-120.94,35.42,18.0,3418.0,686.0,970.0,453.0,3.7738,279400.0,NEAR OCEAN +-120.95,35.44,30.0,6346.0,1410.0,1769.0,887.0,2.6864,283600.0,NEAR OCEAN +-120.85,35.37,21.0,1033.0,195.0,588.0,187.0,2.8173,226900.0,NEAR OCEAN +-120.83,35.36,28.0,4323.0,886.0,1650.0,705.0,2.7266,266800.0,NEAR OCEAN +-120.84,35.35,27.0,2863.0,711.0,930.0,533.0,2.6205,221100.0,NEAR OCEAN +-120.84,35.37,34.0,3279.0,714.0,1397.0,646.0,2.5552,200000.0,NEAR OCEAN +-120.89,35.37,29.0,2046.0,588.0,846.0,410.0,1.65,227300.0,NEAR OCEAN +-120.84,35.33,15.0,3276.0,670.0,1520.0,613.0,3.6412,207800.0,NEAR OCEAN +-120.83,35.33,14.0,4155.0,787.0,2112.0,755.0,4.4766,192700.0,NEAR OCEAN +-120.82,35.32,12.0,3522.0,683.0,1780.0,662.0,3.3958,215800.0,NEAR OCEAN +-120.83,35.32,11.0,3252.0,701.0,1814.0,660.0,3.2226,183200.0,NEAR OCEAN +-120.84,35.32,15.0,2419.0,538.0,1279.0,522.0,3.4762,189600.0,NEAR OCEAN +-120.9,35.33,16.0,1576.0,287.0,595.0,262.0,3.588,266300.0,NEAR OCEAN +-120.84,35.32,17.0,4197.0,802.0,1656.0,732.0,3.526,183900.0,NEAR OCEAN +-120.84,35.31,23.0,3100.0,603.0,1515.0,609.0,2.8493,196100.0,NEAR OCEAN +-120.84,35.3,15.0,2062.0,327.0,781.0,316.0,4.9359,317700.0,NEAR OCEAN +-120.82,35.31,16.0,3924.0,699.0,1325.0,638.0,2.5172,293900.0,NEAR OCEAN +-120.8,35.33,20.0,2200.0,393.0,996.0,365.0,3.587,330000.0,NEAR OCEAN +-121.1,35.6,20.0,3389.0,704.0,1309.0,520.0,3.2112,204500.0,NEAR OCEAN +-120.65,35.29,36.0,1940.0,315.0,850.0,298.0,3.1818,249600.0,NEAR OCEAN +-120.66,35.29,23.0,1932.0,487.0,1380.0,472.0,1.9647,253600.0,NEAR OCEAN +-120.66,35.29,16.0,2272.0,629.0,1689.0,649.0,1.7031,195000.0,NEAR OCEAN +-120.67,35.3,19.0,1540.0,715.0,1799.0,635.0,0.7025,500001.0,NEAR OCEAN +-120.65,35.32,20.0,626.0,212.0,3574.0,261.0,1.0298,300000.0,NEAR OCEAN +-120.62,35.28,28.0,3952.0,592.0,1469.0,571.0,6.3144,328800.0,NEAR OCEAN +-120.65,35.29,29.0,1785.0,481.0,1344.0,472.0,1.4492,222900.0,NEAR OCEAN +-120.65,35.28,32.0,896.0,240.0,548.0,231.0,2.5455,165900.0,NEAR OCEAN +-120.65,35.27,27.0,2034.0,341.0,768.0,316.0,4.2411,258900.0,NEAR OCEAN +-120.65,35.27,15.0,2365.0,538.0,1446.0,490.0,2.5129,225900.0,NEAR OCEAN +-120.64,35.26,21.0,3298.0,716.0,1862.0,687.0,2.1507,221500.0,NEAR OCEAN +-120.63,35.27,23.0,1630.0,253.0,704.0,263.0,5.156,251300.0,NEAR OCEAN +-120.66,35.29,39.0,2163.0,652.0,1153.0,599.0,2.084,233300.0,NEAR OCEAN +-120.66,35.28,31.0,2773.0,844.0,1358.0,794.0,1.4036,209600.0,NEAR OCEAN +-120.66,35.28,46.0,2054.0,502.0,1170.0,494.0,2.1786,206300.0,NEAR OCEAN +-120.65,35.27,52.0,2254.0,642.0,1237.0,590.0,2.6208,227100.0,NEAR OCEAN +-120.66,35.27,46.0,2217.0,544.0,1107.0,527.0,2.8009,192600.0,NEAR OCEAN +-120.66,35.27,33.0,1664.0,455.0,1077.0,461.0,1.6875,174200.0,NEAR OCEAN +-120.66,35.27,17.0,2719.0,589.0,1386.0,570.0,3.7337,208200.0,NEAR OCEAN +-120.66,35.26,15.0,5540.0,1319.0,2383.0,1165.0,2.2656,226200.0,NEAR OCEAN +-120.67,35.3,32.0,4202.0,986.0,2309.0,956.0,2.2165,231700.0,NEAR OCEAN +-120.7,35.31,24.0,3504.0,521.0,1490.0,506.0,4.6719,337000.0,NEAR OCEAN +-120.68,35.29,37.0,1354.0,293.0,753.0,290.0,3.25,225000.0,NEAR OCEAN +-120.69,35.28,26.0,4225.0,886.0,1795.0,704.0,2.2847,247000.0,NEAR OCEAN +-120.67,35.29,44.0,2236.0,411.0,1036.0,437.0,3.0833,219300.0,NEAR OCEAN +-120.69,35.26,20.0,1248.0,231.0,722.0,225.0,4.625,221800.0,NEAR OCEAN +-120.7,35.28,14.0,3768.0,682.0,1884.0,664.0,4.6071,239900.0,NEAR OCEAN +-120.71,35.27,9.0,2568.0,421.0,1149.0,398.0,5.4287,331600.0,NEAR OCEAN +-120.68,35.26,26.0,1704.0,315.0,918.0,310.0,3.2464,208000.0,NEAR OCEAN +-120.69,35.25,15.0,4210.0,899.0,1933.0,867.0,2.794,262500.0,NEAR OCEAN +-120.7,35.32,46.0,118.0,17.0,6532.0,13.0,4.2639,350000.0,NEAR OCEAN +-120.52,35.24,5.0,4413.0,804.0,2003.0,725.0,5.0267,253300.0,<1H OCEAN +-120.68,35.25,16.0,4208.0,897.0,1634.0,806.0,2.2868,233700.0,NEAR OCEAN +-120.69,35.34,16.0,164.0,30.0,542.0,32.0,1.6563,42500.0,NEAR OCEAN +-120.81,35.19,14.0,3414.0,802.0,1236.0,632.0,3.7635,336200.0,NEAR OCEAN +-120.66,35.2,13.0,5138.0,713.0,1838.0,645.0,5.9676,380000.0,NEAR OCEAN +-120.7,35.14,17.0,5805.0,1097.0,1919.0,932.0,3.5352,357800.0,NEAR OCEAN +-120.68,35.14,34.0,3100.0,617.0,1155.0,542.0,3.0938,245900.0,NEAR OCEAN +-120.66,35.13,41.0,2666.0,751.0,940.0,507.0,1.9653,236100.0,<1H OCEAN +-120.63,35.13,16.0,2680.0,704.0,975.0,619.0,1.7878,55000.0,<1H OCEAN +-120.64,35.15,7.0,7922.0,1442.0,2863.0,1197.0,4.849,275000.0,<1H OCEAN +-120.59,35.13,8.0,6638.0,1054.0,2710.0,966.0,4.6776,295500.0,<1H OCEAN +-120.56,35.13,15.0,5818.0,924.0,2324.0,845.0,4.4033,267600.0,<1H OCEAN +-120.57,35.12,39.0,1656.0,333.0,866.0,317.0,2.8824,195200.0,<1H OCEAN +-120.57,35.11,18.0,2920.0,556.0,1068.0,552.0,3.5242,156800.0,<1H OCEAN +-120.59,35.11,25.0,3642.0,726.0,1729.0,673.0,3.155,205400.0,<1H OCEAN +-120.6,35.12,22.0,3342.0,644.0,1342.0,593.0,3.4509,217700.0,<1H OCEAN +-120.61,35.12,16.0,1671.0,354.0,935.0,340.0,2.5792,163800.0,<1H OCEAN +-120.59,35.12,27.0,3055.0,677.0,1407.0,610.0,2.1702,179700.0,<1H OCEAN +-120.6,35.11,17.0,2495.0,524.0,1292.0,501.0,2.2625,153000.0,<1H OCEAN +-120.59,35.11,20.0,3098.0,571.0,1449.0,611.0,3.5744,197800.0,<1H OCEAN +-120.61,35.12,31.0,1486.0,345.0,823.0,322.0,2.6974,165400.0,<1H OCEAN +-120.61,35.13,16.0,3431.0,721.0,1777.0,701.0,2.7301,190400.0,<1H OCEAN +-120.61,35.12,12.0,3430.0,793.0,1840.0,720.0,2.9821,162000.0,<1H OCEAN +-120.61,35.11,11.0,3733.0,831.0,1839.0,739.0,3.3062,158500.0,<1H OCEAN +-120.65,35.12,19.0,2949.0,662.0,1425.0,548.0,2.9615,178100.0,<1H OCEAN +-120.62,35.13,26.0,3971.0,803.0,1792.0,723.0,2.7128,209900.0,<1H OCEAN +-120.62,35.11,18.0,2241.0,544.0,1521.0,509.0,2.0292,155800.0,<1H OCEAN +-120.62,35.12,22.0,1240.0,294.0,768.0,288.0,2.655,160000.0,<1H OCEAN +-120.66,35.1,19.0,1583.0,392.0,704.0,269.0,2.1042,268300.0,<1H OCEAN +-120.61,35.1,14.0,2919.0,691.0,1896.0,577.0,2.4003,142100.0,<1H OCEAN +-120.61,35.1,17.0,2799.0,637.0,2015.0,592.0,3.0536,143600.0,<1H OCEAN +-120.6,35.1,16.0,3290.0,686.0,1497.0,655.0,2.6875,178200.0,<1H OCEAN +-120.58,35.0,37.0,523.0,119.0,374.0,95.0,1.4726,106300.0,<1H OCEAN +-120.61,35.06,13.0,2364.0,421.0,1257.0,380.0,4.6167,273100.0,<1H OCEAN +-120.56,35.07,14.0,6788.0,1216.0,2866.0,1036.0,3.3603,280200.0,<1H OCEAN +-120.52,35.06,11.0,1317.0,234.0,655.0,243.0,4.3611,329700.0,<1H OCEAN +-120.3,35.1,16.0,2819.0,479.0,1068.0,365.0,4.5461,270800.0,<1H OCEAN +-120.43,35.17,16.0,947.0,163.0,477.0,137.0,3.851,315000.0,<1H OCEAN +-120.57,35.18,16.0,5209.0,917.0,2284.0,809.0,4.0403,346100.0,<1H OCEAN +-120.48,35.05,24.0,2314.0,468.0,1549.0,463.0,2.8203,152600.0,<1H OCEAN +-120.47,35.04,29.0,1315.0,279.0,926.0,249.0,2.9375,144800.0,<1H OCEAN +-120.5,35.03,10.0,10463.0,1756.0,4660.0,1715.0,3.5682,277300.0,<1H OCEAN +-120.48,35.02,17.0,2721.0,477.0,1672.0,492.0,2.9798,204800.0,<1H OCEAN +-120.69,35.52,26.0,2758.0,571.0,1291.0,522.0,2.925,181400.0,<1H OCEAN +-120.68,35.51,17.0,1701.0,298.0,941.0,293.0,4.3218,209100.0,<1H OCEAN +-120.68,35.5,19.0,3369.0,673.0,1834.0,646.0,3.7672,173800.0,<1H OCEAN +-120.67,35.5,15.0,2752.0,546.0,1422.0,545.0,3.2813,175000.0,<1H OCEAN +-120.66,35.5,19.0,1861.0,364.0,1040.0,363.0,3.3125,163900.0,<1H OCEAN +-120.66,35.49,17.0,4422.0,945.0,2307.0,885.0,2.8285,171300.0,<1H OCEAN +-120.65,35.48,19.0,2310.0,471.0,1341.0,441.0,3.225,166900.0,<1H OCEAN +-120.64,35.46,6.0,5876.0,1406.0,2877.0,1304.0,2.5437,146400.0,<1H OCEAN +-120.69,35.49,16.0,2666.0,450.0,1203.0,429.0,4.1375,222400.0,<1H OCEAN +-120.68,35.48,15.0,2608.0,525.0,1351.0,502.0,2.7798,205800.0,<1H OCEAN +-120.67,35.48,18.0,2339.0,443.0,1097.0,416.0,3.3438,176100.0,<1H OCEAN +-120.66,35.47,18.0,2474.0,449.0,1269.0,431.0,3.9063,184800.0,<1H OCEAN +-120.66,35.46,17.0,3748.0,609.0,1860.0,612.0,4.5179,225600.0,<1H OCEAN +-120.7,35.55,10.0,3979.0,761.0,1834.0,671.0,3.5,172100.0,<1H OCEAN +-120.76,35.52,7.0,9613.0,1666.0,4487.0,1653.0,3.6667,250600.0,<1H OCEAN +-120.71,35.5,12.0,3098.0,453.0,1433.0,434.0,5.2508,292900.0,<1H OCEAN +-120.56,35.48,12.0,4161.0,731.0,1609.0,615.0,5.0947,267500.0,<1H OCEAN +-119.93,35.2,29.0,1649.0,342.0,671.0,264.0,3.0602,69800.0,INLAND +-120.49,35.35,17.0,3043.0,608.0,1457.0,545.0,3.1641,158600.0,<1H OCEAN +-120.65,35.41,15.0,6725.0,1111.0,3139.0,1029.0,4.1875,261600.0,<1H OCEAN +-120.64,35.47,8.0,416.0,121.0,936.0,97.0,2.1154,117200.0,<1H OCEAN +-122.4,37.68,36.0,3595.0,815.0,1649.0,755.0,3.3816,253400.0,NEAR BAY +-122.4,37.68,41.0,2267.0,486.0,1045.0,459.0,4.1146,272200.0,NEAR BAY +-122.32,37.69,48.0,592.0,122.0,340.0,143.0,5.966,315200.0,NEAR BAY +-122.41,37.7,23.0,1817.0,400.0,1376.0,382.0,2.4113,214200.0,NEAR BAY +-122.42,37.71,44.0,2080.0,489.0,1781.0,478.0,3.6827,215300.0,NEAR BAY +-122.43,37.71,24.0,4299.0,857.0,2249.0,788.0,4.6098,290400.0,NEAR BAY +-122.43,37.7,19.0,1733.0,354.0,959.0,348.0,4.7708,281700.0,NEAR BAY +-122.44,37.7,6.0,3523.0,664.0,1705.0,608.0,4.9318,258100.0,NEAR OCEAN +-122.45,37.7,46.0,2193.0,499.0,1814.0,489.0,4.0125,230100.0,NEAR OCEAN +-122.45,37.71,50.0,1441.0,283.0,1159.0,286.0,4.5417,233700.0,NEAR OCEAN +-122.45,37.71,49.0,2244.0,442.0,1948.0,423.0,4.7639,251500.0,NEAR OCEAN +-122.45,37.7,16.0,6457.0,1336.0,4375.0,1231.0,5.1788,267000.0,NEAR OCEAN +-122.46,37.7,37.0,1028.0,275.0,904.0,261.0,3.5035,238600.0,NEAR OCEAN +-122.46,37.69,35.0,1983.0,385.0,1577.0,414.0,4.0833,266700.0,NEAR OCEAN +-122.46,37.7,37.0,3029.0,738.0,2436.0,700.0,3.3214,243200.0,NEAR OCEAN +-122.47,37.7,45.0,3290.0,693.0,2466.0,666.0,3.6588,238600.0,NEAR OCEAN +-122.46,37.71,44.0,364.0,102.0,339.0,98.0,2.483,214300.0,NEAR OCEAN +-122.46,37.71,45.0,1799.0,394.0,1436.0,389.0,3.65,239900.0,NEAR OCEAN +-122.46,37.7,42.0,876.0,216.0,713.0,203.0,3.84,235900.0,NEAR OCEAN +-122.47,37.7,44.0,2034.0,423.0,1491.0,373.0,4.5341,236500.0,NEAR OCEAN +-122.47,37.71,37.0,1046.0,251.0,822.0,239.0,3.5,224400.0,NEAR OCEAN +-122.46,37.71,39.0,2076.0,482.0,1738.0,445.0,3.1958,232100.0,NEAR OCEAN +-122.48,37.7,33.0,4167.0,1398.0,2923.0,1314.0,3.049,307000.0,NEAR OCEAN +-122.48,37.7,33.0,4492.0,,3477.0,1537.0,3.0546,297900.0,NEAR OCEAN +-122.48,37.71,39.0,3615.0,632.0,1571.0,615.0,5.1149,314200.0,NEAR OCEAN +-122.48,37.71,29.0,1048.0,150.0,455.0,152.0,6.1278,417600.0,NEAR OCEAN +-122.54,37.7,36.0,3988.0,732.0,1793.0,708.0,4.2472,292500.0,NEAR OCEAN +-122.49,37.67,35.0,5275.0,903.0,2892.0,842.0,4.6771,266400.0,NEAR OCEAN +-122.49,37.68,35.0,2405.0,461.0,1583.0,471.0,5.0659,238000.0,NEAR OCEAN +-122.49,37.67,29.0,3795.0,675.0,2494.0,696.0,5.2848,260300.0,NEAR OCEAN +-122.49,37.7,36.0,1946.0,340.0,828.0,313.0,5.2811,287700.0,NEAR OCEAN +-122.49,37.69,36.0,1344.0,258.0,782.0,265.0,4.5,275600.0,NEAR OCEAN +-122.48,37.69,33.0,2347.0,512.0,1259.0,481.0,3.4492,264300.0,NEAR OCEAN +-122.49,37.69,35.0,2644.0,456.0,1465.0,430.0,4.9375,277000.0,NEAR OCEAN +-122.49,37.69,35.0,2576.0,443.0,1273.0,433.0,4.7391,272800.0,NEAR OCEAN +-122.47,37.7,47.0,737.0,126.0,370.0,136.0,3.775,281300.0,NEAR OCEAN +-122.47,37.69,27.0,2447.0,720.0,2104.0,657.0,3.449,239100.0,NEAR OCEAN +-122.47,37.69,30.0,837.0,213.0,606.0,199.0,4.875,258800.0,NEAR OCEAN +-122.48,37.69,42.0,2993.0,512.0,1594.0,546.0,4.4821,252400.0,NEAR OCEAN +-122.48,37.69,43.0,2661.0,455.0,1384.0,456.0,4.2421,257500.0,NEAR OCEAN +-122.46,37.69,26.0,4302.0,1125.0,3320.0,1100.0,3.4375,277700.0,NEAR OCEAN +-122.46,37.68,23.0,2812.0,769.0,1983.0,681.0,2.9413,229400.0,NEAR OCEAN +-122.47,37.69,35.0,1720.0,421.0,1452.0,425.0,3.5909,256100.0,NEAR OCEAN +-122.47,37.69,34.0,1954.0,357.0,1130.0,367.0,4.6447,304500.0,NEAR OCEAN +-122.47,37.68,31.0,4077.0,777.0,2544.0,738.0,4.5337,306700.0,NEAR OCEAN +-122.48,37.68,31.0,3506.0,653.0,2296.0,645.0,5.5647,268700.0,NEAR OCEAN +-122.48,37.67,15.0,2897.0,728.0,2340.0,720.0,3.3906,303700.0,NEAR OCEAN +-122.48,37.67,31.0,2609.0,433.0,1746.0,464.0,5.1054,294500.0,NEAR OCEAN +-122.49,37.68,34.0,3718.0,676.0,2510.0,632.0,5.3311,270800.0,NEAR OCEAN +-122.48,37.67,14.0,3395.0,1059.0,2258.0,945.0,2.964,319700.0,NEAR OCEAN +-122.45,37.69,17.0,2359.0,501.0,884.0,504.0,3.0625,87500.0,NEAR OCEAN +-122.45,37.67,35.0,491.0,98.0,274.0,97.0,4.4286,238600.0,NEAR OCEAN +-122.47,37.67,20.0,5689.0,992.0,3752.0,1002.0,5.5845,304300.0,NEAR OCEAN +-122.47,37.66,18.0,4172.0,806.0,3226.0,790.0,5.7535,297900.0,NEAR OCEAN +-122.46,37.67,16.0,3372.0,1101.0,2049.0,1021.0,4.1303,146500.0,NEAR OCEAN +-122.46,37.66,15.0,6082.0,1284.0,3861.0,1198.0,5.4221,284700.0,NEAR OCEAN +-122.46,37.65,21.0,2751.0,502.0,2027.0,491.0,5.2573,322900.0,NEAR OCEAN +-122.45,37.67,36.0,1664.0,326.0,963.0,322.0,4.7813,246400.0,NEAR OCEAN +-122.45,37.66,35.0,2738.0,509.0,1545.0,493.0,5.3446,263300.0,NEAR OCEAN +-122.46,37.66,36.0,2535.0,451.0,1390.0,436.0,5.3398,260900.0,NEAR OCEAN +-122.45,37.66,36.0,5456.0,926.0,2761.0,916.0,4.7755,280700.0,NEAR OCEAN +-122.44,37.65,38.0,5277.0,1008.0,2695.0,997.0,3.9722,276200.0,NEAR OCEAN +-122.43,37.66,29.0,3541.0,786.0,2259.0,770.0,4.3039,278400.0,NEAR OCEAN +-122.44,37.66,21.0,5108.0,1510.0,3288.0,1405.0,3.1927,252600.0,NEAR OCEAN +-122.44,37.66,36.0,1447.0,276.0,799.0,275.0,4.7639,265600.0,NEAR OCEAN +-122.44,37.67,35.0,1814.0,365.0,1025.0,384.0,4.425,268400.0,NEAR OCEAN +-122.42,37.67,42.0,2274.0,429.0,1255.0,397.0,5.1205,226300.0,NEAR OCEAN +-122.41,37.66,37.0,2155.0,446.0,1255.0,428.0,3.8438,250700.0,NEAR OCEAN +-122.42,37.66,41.0,2189.0,414.0,1063.0,409.0,4.7361,302600.0,NEAR OCEAN +-122.42,37.66,28.0,3520.0,672.0,1746.0,602.0,4.9236,273500.0,NEAR OCEAN +-122.42,37.66,36.0,725.0,121.0,335.0,140.0,4.125,327600.0,NEAR OCEAN +-122.41,37.66,32.0,1385.0,356.0,1096.0,353.0,4.475,246700.0,NEAR OCEAN +-122.41,37.66,34.0,1075.0,318.0,906.0,294.0,3.0052,242500.0,NEAR OCEAN +-122.41,37.66,40.0,1294.0,308.0,1177.0,301.0,3.6667,218800.0,NEAR OCEAN +-122.41,37.66,37.0,694.0,188.0,658.0,225.0,4.6103,237500.0,NEAR OCEAN +-122.41,37.66,44.0,431.0,195.0,682.0,212.0,3.2833,233300.0,NEAR OCEAN +-122.41,37.65,32.0,3436.0,868.0,2583.0,817.0,3.5039,232400.0,NEAR OCEAN +-122.42,37.66,26.0,3253.0,932.0,2246.0,855.0,2.6631,244000.0,NEAR OCEAN +-122.43,37.66,43.0,1769.0,387.0,1102.0,377.0,4.5493,281500.0,NEAR OCEAN +-122.42,37.65,39.0,4402.0,894.0,2941.0,887.0,3.8565,239800.0,NEAR OCEAN +-122.43,37.64,34.0,8400.0,1812.0,4101.0,1717.0,4.1033,301000.0,NEAR OCEAN +-122.43,37.64,42.0,4091.0,757.0,1861.0,771.0,4.207,272700.0,NEAR OCEAN +-122.45,37.64,19.0,6326.0,1025.0,3444.0,984.0,6.2498,353300.0,NEAR OCEAN +-122.46,37.64,26.0,2806.0,375.0,1617.0,396.0,5.3922,353700.0,NEAR OCEAN +-122.46,37.65,16.0,8676.0,1633.0,5130.0,1574.0,4.8096,262000.0,NEAR OCEAN +-122.46,37.64,17.0,3523.0,669.0,2150.0,666.0,4.5938,251200.0,NEAR OCEAN +-122.47,37.65,27.0,8103.0,1655.0,5023.0,1605.0,4.6452,236200.0,NEAR OCEAN +-122.53,37.66,25.0,7778.0,1493.0,4674.0,1451.0,5.4694,272400.0,NEAR OCEAN +-122.53,37.65,20.0,4582.0,1124.0,2325.0,1040.0,4.0556,275000.0,NEAR OCEAN +-122.48,37.65,39.0,3348.0,666.0,1817.0,668.0,4.2593,227400.0,NEAR OCEAN +-122.49,37.63,31.0,3109.0,621.0,1472.0,618.0,5.155,263900.0,NEAR OCEAN +-122.49,37.63,34.0,696.0,145.0,398.0,162.0,3.525,254100.0,NEAR OCEAN +-122.49,37.63,31.0,1256.0,328.0,785.0,297.0,3.2446,234600.0,NEAR OCEAN +-122.53,37.63,27.0,2589.0,658.0,1386.0,608.0,2.9087,228200.0,NEAR OCEAN +-122.48,37.64,7.0,120.0,21.0,50.0,27.0,12.5,281000.0,NEAR OCEAN +-122.47,37.61,34.0,4551.0,837.0,2208.0,834.0,5.4364,279300.0,NEAR OCEAN +-122.54,37.62,35.0,1481.0,277.0,747.0,254.0,4.4286,262100.0,NEAR OCEAN +-122.49,37.59,35.0,2683.0,475.0,1498.0,484.0,5.1282,262500.0,NEAR OCEAN +-122.5,37.59,36.0,1521.0,253.0,736.0,241.0,4.3542,237500.0,NEAR OCEAN +-122.5,37.6,35.0,2197.0,369.0,971.0,326.0,4.25,241700.0,NEAR OCEAN +-122.55,37.59,31.0,1331.0,245.0,598.0,225.0,4.1827,345500.0,NEAR OCEAN +-122.51,37.58,20.0,64.0,21.0,59.0,21.0,2.2375,450000.0,NEAR OCEAN +-122.49,37.6,33.0,3507.0,669.0,1697.0,660.0,4.0795,270600.0,NEAR OCEAN +-122.48,37.59,29.0,5889.0,959.0,2784.0,923.0,5.3991,273000.0,NEAR OCEAN +-122.48,37.57,34.0,4648.0,806.0,2282.0,814.0,4.5556,249000.0,NEAR OCEAN +-122.46,37.59,21.0,12902.0,2118.0,6160.0,2082.0,5.7653,325800.0,NEAR OCEAN +-122.46,37.63,22.0,6728.0,1382.0,3783.0,1310.0,5.0479,280400.0,NEAR OCEAN +-122.45,37.62,26.0,3507.0,512.0,1712.0,509.0,6.7206,344600.0,NEAR OCEAN +-122.45,37.63,28.0,4946.0,848.0,2683.0,824.0,5.748,302100.0,NEAR OCEAN +-122.44,37.63,35.0,5113.0,959.0,3004.0,964.0,4.7625,281300.0,NEAR OCEAN +-122.43,37.63,34.0,4135.0,687.0,2154.0,742.0,4.9732,342300.0,NEAR OCEAN +-122.43,37.61,21.0,10252.0,2595.0,4790.0,2428.0,4.1692,344500.0,NEAR OCEAN +-122.41,37.62,49.0,1464.0,302.0,636.0,259.0,4.25,284100.0,NEAR OCEAN +-122.41,37.61,46.0,2975.0,643.0,1479.0,577.0,3.8214,273600.0,NEAR OCEAN +-122.42,37.61,37.0,1866.0,300.0,822.0,305.0,4.7,341300.0,NEAR OCEAN +-122.42,37.62,39.0,1355.0,214.0,682.0,246.0,6.3443,324700.0,NEAR OCEAN +-122.42,37.62,40.0,1545.0,264.0,756.0,282.0,4.4643,308100.0,NEAR OCEAN +-122.42,37.61,17.0,1040.0,432.0,669.0,405.0,4.1513,137500.0,NEAR OCEAN +-122.42,37.63,46.0,1811.0,337.0,796.0,333.0,3.43,292900.0,NEAR OCEAN +-122.42,37.62,43.0,2367.0,409.0,1141.0,400.0,4.8295,319000.0,NEAR OCEAN +-122.42,37.62,36.0,1017.0,165.0,407.0,159.0,4.8,306800.0,NEAR OCEAN +-122.42,37.62,36.0,1538.0,256.0,671.0,247.0,4.4091,317900.0,NEAR OCEAN +-122.41,37.62,39.0,3119.0,758.0,1807.0,696.0,3.2216,242700.0,NEAR OCEAN +-122.4,37.62,32.0,3586.0,921.0,2249.0,911.0,3.1058,253000.0,NEAR OCEAN +-122.41,37.63,39.0,4220.0,1055.0,2720.0,1046.0,2.639,242500.0,NEAR OCEAN +-122.42,37.64,41.0,98.0,20.0,68.0,19.0,2.225,212500.0,NEAR OCEAN +-122.43,37.63,15.0,2748.0,997.0,1447.0,901.0,3.5214,144200.0,NEAR OCEAN +-122.42,37.63,46.0,66.0,11.0,30.0,12.0,2.375,275000.0,NEAR OCEAN +-122.41,37.63,37.0,1252.0,275.0,878.0,287.0,4.2262,228500.0,NEAR OCEAN +-122.41,37.63,35.0,865.0,226.0,602.0,217.0,3.0,229100.0,NEAR OCEAN +-122.4,37.62,44.0,1619.0,362.0,1064.0,335.0,4.0238,224200.0,NEAR OCEAN +-122.41,37.64,38.0,1204.0,268.0,921.0,247.0,4.4464,215400.0,NEAR OCEAN +-122.4,37.61,35.0,2084.0,549.0,1077.0,545.0,3.1628,318400.0,NEAR OCEAN +-122.38,37.6,33.0,2577.0,590.0,1867.0,566.0,3.3632,265100.0,NEAR OCEAN +-122.39,37.6,36.0,1770.0,499.0,1225.0,459.0,2.56,273100.0,NEAR OCEAN +-122.41,37.61,42.0,1602.0,262.0,705.0,255.0,5.7398,336400.0,NEAR OCEAN +-122.41,37.61,43.0,1934.0,303.0,847.0,300.0,4.7381,347400.0,NEAR OCEAN +-122.41,37.6,31.0,4424.0,834.0,1915.0,817.0,4.1364,412000.0,NEAR OCEAN +-122.42,37.6,34.0,3562.0,565.0,1542.0,563.0,5.8783,405100.0,NEAR OCEAN +-122.41,37.6,26.0,2754.0,402.0,1128.0,395.0,6.3719,466900.0,NEAR OCEAN +-122.41,37.59,34.0,3931.0,622.0,1717.0,621.0,6.2946,450000.0,NEAR OCEAN +-122.41,37.59,40.0,2401.0,383.0,894.0,356.0,5.6493,422400.0,NEAR OCEAN +-122.4,37.6,30.0,5351.0,1134.0,2558.0,1074.0,3.5817,369300.0,NEAR OCEAN +-122.4,37.6,52.0,1380.0,203.0,530.0,210.0,6.221,420300.0,NEAR OCEAN +-122.39,37.6,44.0,2304.0,384.0,986.0,379.0,4.652,387100.0,NEAR OCEAN +-122.39,37.6,34.0,707.0,,381.0,156.0,4.375,340900.0,NEAR OCEAN +-122.39,37.59,32.0,4497.0,,1846.0,715.0,6.1323,500001.0,NEAR OCEAN +-122.4,37.59,22.0,2754.0,477.0,1163.0,479.0,6.2306,500001.0,NEAR OCEAN +-122.38,37.59,31.0,3052.0,844.0,1581.0,788.0,3.0744,457700.0,NEAR OCEAN +-122.38,37.59,44.0,2089.0,348.0,837.0,317.0,4.6628,459200.0,NEAR OCEAN +-122.39,37.58,36.0,6026.0,852.0,2314.0,892.0,7.8997,500001.0,NEAR OCEAN +-122.4,37.58,26.0,3281.0,,1145.0,480.0,6.358,500001.0,NEAR OCEAN +-122.39,37.59,33.0,2064.0,299.0,813.0,303.0,6.0374,500001.0,NEAR OCEAN +-122.39,37.57,35.0,520.0,83.0,185.0,76.0,6.4865,450000.0,NEAR OCEAN +-122.37,37.6,26.0,15.0,3.0,11.0,3.0,5.048,350000.0,NEAR OCEAN +-122.37,37.59,39.0,4645.0,1196.0,2156.0,1113.0,3.4412,353800.0,NEAR OCEAN +-122.38,37.59,49.0,1657.0,266.0,613.0,270.0,5.7837,378100.0,NEAR OCEAN +-122.37,37.59,52.0,2272.0,403.0,963.0,376.0,5.7245,500000.0,NEAR OCEAN +-122.37,37.58,52.0,2188.0,361.0,917.0,357.0,4.4,500000.0,NEAR OCEAN +-122.38,37.58,52.0,1704.0,226.0,671.0,243.0,8.4704,500001.0,NEAR OCEAN +-122.38,37.58,52.0,2039.0,299.0,772.0,303.0,6.471,500001.0,NEAR OCEAN +-122.36,37.58,52.0,3084.0,595.0,1324.0,571.0,5.0756,374200.0,NEAR OCEAN +-122.36,37.58,37.0,3325.0,734.0,1468.0,692.0,4.0987,434000.0,NEAR OCEAN +-122.37,37.58,43.0,2506.0,432.0,967.0,428.0,4.7404,500001.0,NEAR OCEAN +-122.37,37.58,52.0,1900.0,290.0,665.0,276.0,4.5486,500001.0,NEAR OCEAN +-122.34,37.59,44.0,1395.0,269.0,736.0,288.0,5.6206,386400.0,NEAR OCEAN +-122.33,37.58,40.0,2362.0,468.0,992.0,425.0,4.7917,359900.0,NEAR OCEAN +-122.34,37.58,50.0,2784.0,743.0,1622.0,698.0,3.8413,372200.0,NEAR OCEAN +-122.35,37.58,52.0,2495.0,458.0,1081.0,471.0,4.0855,410800.0,NEAR OCEAN +-122.36,37.59,20.0,2638.0,854.0,1352.0,718.0,3.5125,350600.0,NEAR OCEAN +-122.35,37.58,30.0,5039.0,1564.0,2129.0,1536.0,3.3469,345000.0,NEAR OCEAN +-122.35,37.58,26.0,854.0,246.0,396.0,231.0,2.8393,375000.0,NEAR OCEAN +-122.34,37.57,39.0,2647.0,616.0,1254.0,555.0,4.2407,433800.0,NEAR OCEAN +-122.35,37.57,52.0,2059.0,345.0,800.0,308.0,4.97,500001.0,NEAR OCEAN +-122.37,37.58,34.0,2697.0,313.0,810.0,279.0,12.4291,500001.0,NEAR OCEAN +-122.36,37.57,35.0,1774.0,205.0,588.0,207.0,10.7339,500001.0,NEAR OCEAN +-122.36,37.56,32.0,4684.0,540.0,1512.0,511.0,15.0001,500001.0,NEAR OCEAN +-122.37,37.56,21.0,7189.0,874.0,2440.0,846.0,11.6833,500001.0,NEAR OCEAN +-122.34,37.56,39.0,3562.0,391.0,1139.0,391.0,12.6417,500001.0,NEAR OCEAN +-122.34,37.55,25.0,4470.0,518.0,1507.0,504.0,13.3913,500001.0,NEAR OCEAN +-122.36,37.54,23.0,6184.0,747.0,2165.0,700.0,10.1675,500001.0,NEAR OCEAN +-122.35,37.56,52.0,1659.0,191.0,519.0,201.0,14.4219,500001.0,NEAR OCEAN +-122.34,37.57,52.0,2635.0,408.0,967.0,374.0,7.0422,500001.0,NEAR OCEAN +-122.34,37.57,52.0,2547.0,373.0,876.0,359.0,8.2598,500001.0,NEAR OCEAN +-122.35,37.57,52.0,2170.0,269.0,784.0,274.0,10.4286,500001.0,NEAR OCEAN +-122.34,37.57,28.0,3751.0,949.0,1691.0,846.0,3.9728,300000.0,NEAR OCEAN +-122.33,37.57,43.0,2543.0,621.0,1301.0,606.0,3.1111,318400.0,NEAR OCEAN +-122.33,37.57,27.0,3085.0,876.0,1453.0,896.0,3.4333,290000.0,NEAR OCEAN +-122.33,37.58,27.0,5144.0,1481.0,2518.0,1447.0,3.4836,287900.0,NEAR OCEAN +-122.33,37.58,28.0,2784.0,736.0,1534.0,685.0,3.38,285400.0,NEAR OCEAN +-122.31,37.6,34.0,3225.0,726.0,1958.0,656.0,3.6811,273000.0,NEAR BAY +-122.31,37.58,44.0,1990.0,442.0,1141.0,424.0,3.9696,258300.0,NEAR BAY +-122.31,37.57,45.0,1165.0,236.0,845.0,251.0,4.1875,267300.0,NEAR OCEAN +-122.33,37.58,43.0,1772.0,422.0,1573.0,401.0,2.7474,233100.0,NEAR OCEAN +-122.32,37.57,42.0,2574.0,614.0,2377.0,588.0,3.2891,237900.0,NEAR OCEAN +-122.32,37.57,33.0,3384.0,819.0,2626.0,793.0,3.2285,234800.0,NEAR OCEAN +-122.32,37.57,52.0,499.0,148.0,318.0,145.0,2.9934,256300.0,NEAR OCEAN +-122.31,37.57,42.0,3157.0,676.0,1603.0,629.0,3.7422,292600.0,NEAR OCEAN +-122.32,37.56,44.0,537.0,173.0,355.0,194.0,2.8571,250000.0,NEAR OCEAN +-122.33,37.57,20.0,2126.0,643.0,1112.0,597.0,3.625,283300.0,NEAR OCEAN +-122.32,37.56,9.0,1150.0,287.0,377.0,243.0,3.8317,237500.0,NEAR OCEAN +-122.33,37.56,34.0,6394.0,1619.0,2400.0,1496.0,3.4902,500001.0,NEAR OCEAN +-122.32,37.56,49.0,2016.0,299.0,691.0,288.0,5.549,500001.0,NEAR OCEAN +-122.32,37.56,26.0,2339.0,704.0,1283.0,654.0,3.162,415000.0,NEAR OCEAN +-122.33,37.56,50.0,1975.0,245.0,644.0,251.0,10.0743,500001.0,NEAR OCEAN +-122.32,37.55,50.0,2501.0,433.0,1050.0,410.0,4.6406,500001.0,NEAR OCEAN +-122.33,37.55,51.0,2565.0,332.0,870.0,309.0,9.3694,500001.0,NEAR OCEAN +-122.34,37.55,44.0,2465.0,328.0,843.0,324.0,6.9533,500001.0,NEAR OCEAN +-122.31,37.56,52.0,2351.0,494.0,1126.0,482.0,3.9688,356900.0,NEAR OCEAN +-122.31,37.55,52.0,900.0,183.0,371.0,166.0,3.25,296400.0,NEAR OCEAN +-122.32,37.55,46.0,1437.0,266.0,607.0,263.0,4.8068,369700.0,NEAR OCEAN +-122.32,37.55,44.0,2151.0,411.0,849.0,370.0,4.4583,397100.0,NEAR OCEAN +-122.33,37.55,33.0,2199.0,312.0,827.0,319.0,6.1349,500001.0,NEAR OCEAN +-122.32,37.54,34.0,3661.0,692.0,1608.0,656.0,5.0774,407200.0,NEAR OCEAN +-122.34,37.53,27.0,3339.0,481.0,1354.0,458.0,7.3081,464600.0,NEAR OCEAN +-122.33,37.53,18.0,4493.0,760.0,1784.0,725.0,6.7042,413000.0,NEAR OCEAN +-122.35,37.53,27.0,2169.0,305.0,905.0,319.0,7.7743,453100.0,NEAR OCEAN +-122.34,37.52,34.0,3559.0,560.0,1747.0,550.0,6.6959,411200.0,NEAR OCEAN +-122.33,37.53,25.0,1729.0,383.0,769.0,352.0,4.0417,458500.0,NEAR OCEAN +-122.32,37.52,17.0,6645.0,1034.0,2557.0,1032.0,6.3892,480800.0,NEAR OCEAN +-122.3,37.53,37.0,1338.0,215.0,535.0,221.0,5.4351,376600.0,NEAR OCEAN +-122.3,37.53,40.0,1833.0,308.0,751.0,306.0,6.0,384200.0,NEAR OCEAN +-122.3,37.53,38.0,984.0,171.0,429.0,157.0,5.3261,376800.0,NEAR OCEAN +-122.31,37.52,35.0,1817.0,262.0,659.0,262.0,6.8336,457200.0,NEAR OCEAN +-122.31,37.53,39.0,1160.0,191.0,508.0,185.0,5.9539,379100.0,NEAR OCEAN +-122.3,37.54,39.0,4292.0,1097.0,1758.0,987.0,2.9405,340500.0,NEAR OCEAN +-122.3,37.53,43.0,1748.0,366.0,984.0,371.0,4.5116,337800.0,NEAR OCEAN +-122.29,37.53,41.0,839.0,190.0,419.0,215.0,5.012,368200.0,NEAR OCEAN +-122.31,37.54,45.0,1222.0,220.0,492.0,205.0,5.539,396900.0,NEAR OCEAN +-122.31,37.54,46.0,2444.0,397.0,952.0,402.0,4.75,388200.0,NEAR OCEAN +-122.31,37.53,41.0,1608.0,269.0,676.0,267.0,4.6125,361700.0,NEAR OCEAN +-122.32,37.53,39.0,2795.0,464.0,1183.0,443.0,5.779,387100.0,NEAR OCEAN +-122.31,37.55,27.0,3931.0,933.0,1877.0,851.0,3.9722,354100.0,NEAR OCEAN +-122.31,37.54,49.0,1340.0,281.0,660.0,284.0,4.163,393800.0,NEAR OCEAN +-122.31,37.54,38.0,1946.0,407.0,975.0,417.0,4.0726,385400.0,NEAR OCEAN +-122.31,37.54,42.0,1159.0,261.0,465.0,247.0,3.1842,352800.0,NEAR OCEAN +-122.3,37.55,35.0,3675.0,735.0,1930.0,715.0,3.9833,342800.0,NEAR OCEAN +-122.31,37.55,45.0,507.0,140.0,305.0,139.0,2.6159,272900.0,NEAR OCEAN +-122.31,37.56,45.0,1685.0,321.0,815.0,314.0,4.2955,309700.0,NEAR OCEAN +-122.31,37.56,36.0,1727.0,340.0,952.0,337.0,4.7917,316000.0,NEAR OCEAN +-122.31,37.56,45.0,1792.0,301.0,829.0,318.0,4.9013,330100.0,NEAR OCEAN +-122.31,37.56,40.0,1351.0,330.0,701.0,297.0,3.32,292900.0,NEAR OCEAN +-122.31,37.57,37.0,1437.0,305.0,979.0,331.0,4.0,273700.0,NEAR OCEAN +-122.31,37.57,31.0,2197.0,477.0,1193.0,394.0,4.6371,271100.0,NEAR OCEAN +-122.3,37.57,36.0,1973.0,352.0,1169.0,370.0,5.033,270900.0,NEAR BAY +-122.3,37.56,37.0,1962.0,367.0,1267.0,382.0,4.7344,271800.0,NEAR OCEAN +-122.3,37.57,36.0,2406.0,436.0,1189.0,403.0,4.7917,276100.0,NEAR BAY +-122.29,37.56,34.0,1693.0,281.0,846.0,291.0,5.3683,339400.0,NEAR BAY +-122.3,37.56,36.0,1379.0,228.0,750.0,227.0,5.5381,282000.0,NEAR OCEAN +-122.29,37.56,36.0,805.0,140.0,445.0,139.0,5.8221,289400.0,NEAR BAY +-122.3,37.56,35.0,1873.0,351.0,945.0,333.0,5.5184,274800.0,NEAR OCEAN +-122.29,37.56,12.0,6474.0,1467.0,2516.0,1390.0,5.0353,305800.0,NEAR BAY +-122.26,37.55,17.0,4576.0,814.0,1941.0,807.0,5.9572,443800.0,NEAR BAY +-122.26,37.55,17.0,1321.0,425.0,683.0,408.0,4.7045,500001.0,NEAR BAY +-122.27,37.55,16.0,4789.0,816.0,1840.0,763.0,6.7474,338200.0,NEAR BAY +-122.26,37.54,16.0,2118.0,333.0,770.0,318.0,7.2477,376000.0,NEAR BAY +-122.27,37.55,15.0,1958.0,282.0,811.0,284.0,8.1221,483300.0,NEAR BAY +-122.28,37.55,17.0,4199.0,629.0,2020.0,630.0,6.1228,375700.0,NEAR BAY +-122.27,37.56,17.0,3211.0,847.0,1553.0,812.0,4.9434,292100.0,NEAR BAY +-122.27,37.56,5.0,4921.0,1179.0,1810.0,1073.0,5.6936,322200.0,NEAR BAY +-122.26,37.54,13.0,1422.0,295.0,395.0,195.0,5.3247,327800.0,NEAR BAY +-122.26,37.54,5.0,3264.0,442.0,1607.0,453.0,9.1415,500001.0,NEAR BAY +-122.26,37.54,5.0,1649.0,388.0,779.0,376.0,6.9635,417300.0,NEAR BAY +-122.27,37.54,5.0,2140.0,420.0,990.0,394.0,6.035,438800.0,NEAR BAY +-122.27,37.54,16.0,3913.0,565.0,1752.0,557.0,7.3644,419700.0,NEAR BAY +-122.27,37.54,15.0,2126.0,310.0,905.0,306.0,8.9083,500001.0,NEAR BAY +-122.26,37.56,23.0,7283.0,1342.0,3399.0,1298.0,5.6683,391000.0,NEAR BAY +-122.26,37.57,23.0,7995.0,1254.0,3484.0,1198.0,6.5948,404000.0,NEAR BAY +-122.25,37.56,19.0,7976.0,1406.0,3437.0,1338.0,5.6396,430300.0,NEAR BAY +-122.29,37.55,27.0,3789.0,874.0,2243.0,866.0,4.39,270100.0,NEAR OCEAN +-122.28,37.54,24.0,5114.0,1357.0,3169.0,1268.0,3.9699,293200.0,NEAR OCEAN +-122.29,37.54,43.0,2268.0,438.0,1151.0,449.0,4.9091,293200.0,NEAR OCEAN +-122.28,37.54,37.0,991.0,180.0,463.0,177.0,5.1701,294200.0,NEAR OCEAN +-122.29,37.54,39.0,1459.0,285.0,761.0,291.0,5.0081,298100.0,NEAR OCEAN +-122.29,37.54,41.0,1743.0,349.0,811.0,349.0,4.9464,282400.0,NEAR OCEAN +-122.29,37.53,35.0,2043.0,511.0,1089.0,504.0,3.0278,310600.0,NEAR OCEAN +-122.28,37.53,15.0,5417.0,1199.0,2593.0,1098.0,4.8047,438000.0,NEAR OCEAN +-122.28,37.53,34.0,1980.0,385.0,970.0,391.0,5.1207,310900.0,NEAR OCEAN +-122.27,37.53,43.0,1145.0,230.0,586.0,254.0,3.5,267400.0,NEAR OCEAN +-122.28,37.53,25.0,3710.0,1015.0,2068.0,958.0,3.5445,286700.0,NEAR OCEAN +-122.29,37.52,33.0,4104.0,751.0,1837.0,771.0,5.3506,388100.0,NEAR OCEAN +-122.28,37.52,27.0,2958.0,655.0,1285.0,577.0,4.0801,397800.0,NEAR OCEAN +-122.28,37.52,29.0,1526.0,355.0,724.0,315.0,4.0313,435200.0,NEAR OCEAN +-122.28,37.52,38.0,2197.0,357.0,1228.0,373.0,5.4719,397900.0,NEAR OCEAN +-122.29,37.52,38.0,3767.0,603.0,1455.0,615.0,6.8787,386800.0,NEAR OCEAN +-122.3,37.52,38.0,2769.0,387.0,994.0,395.0,5.5902,417000.0,NEAR OCEAN +-122.3,37.51,35.0,2789.0,445.0,1156.0,404.0,5.4322,391000.0,NEAR OCEAN +-122.3,37.52,32.0,2297.0,347.0,871.0,342.0,8.1039,382200.0,NEAR OCEAN +-122.31,37.52,24.0,2328.0,335.0,969.0,354.0,7.7364,435800.0,NEAR OCEAN +-122.32,37.52,26.0,4042.0,591.0,1611.0,578.0,8.4693,419200.0,NEAR OCEAN +-122.31,37.5,22.0,14034.0,3020.0,6266.0,2952.0,4.3939,491200.0,NEAR OCEAN +-122.27,37.52,35.0,1051.0,259.0,517.0,234.0,3.7,339700.0,NEAR OCEAN +-122.27,37.51,36.0,1406.0,224.0,598.0,237.0,5.8964,414800.0,NEAR OCEAN +-122.29,37.51,35.0,3040.0,520.0,1374.0,518.0,6.1004,426400.0,NEAR OCEAN +-122.26,37.52,34.0,483.0,131.0,291.0,157.0,3.0833,256300.0,NEAR OCEAN +-122.26,37.51,46.0,672.0,149.0,351.0,136.0,5.3264,258100.0,NEAR OCEAN +-122.25,37.51,45.0,989.0,174.0,504.0,180.0,4.8382,289400.0,NEAR OCEAN +-122.25,37.5,44.0,348.0,79.0,154.0,73.0,4.7708,253800.0,NEAR OCEAN +-122.27,37.51,39.0,3996.0,793.0,1744.0,761.0,4.5075,364900.0,NEAR OCEAN +-122.26,37.51,29.0,3703.0,1075.0,1611.0,1025.0,2.7075,323800.0,NEAR OCEAN +-122.26,37.5,24.0,2307.0,510.0,842.0,507.0,3.6111,341500.0,NEAR OCEAN +-122.26,37.5,52.0,878.0,186.0,393.0,186.0,3.7045,360500.0,NEAR OCEAN +-122.25,37.5,45.0,1812.0,336.0,752.0,329.0,4.95,345000.0,NEAR OCEAN +-122.25,37.49,43.0,2607.0,477.0,1225.0,461.0,4.224,349600.0,NEAR OCEAN +-122.25,37.49,40.0,2709.0,521.0,1156.0,510.0,4.6366,395500.0,NEAR OCEAN +-122.25,37.49,44.0,4420.0,743.0,1790.0,735.0,6.142,394700.0,NEAR OCEAN +-122.26,37.5,44.0,6983.0,1131.0,2818.0,1115.0,5.6271,374800.0,NEAR OCEAN +-122.28,37.51,33.0,4719.0,,1980.0,757.0,6.1064,405000.0,NEAR OCEAN +-122.28,37.5,33.0,6499.0,998.0,2694.0,957.0,7.4787,431300.0,NEAR OCEAN +-122.28,37.49,25.0,7335.0,1157.0,2626.0,1049.0,6.5475,500001.0,NEAR OCEAN +-122.28,37.49,29.0,4148.0,635.0,1638.0,627.0,6.912,457200.0,NEAR OCEAN +-122.27,37.48,26.0,3542.0,507.0,1392.0,524.0,8.5184,500001.0,NEAR OCEAN +-122.26,37.48,34.0,4453.0,682.0,1805.0,672.0,5.6038,451300.0,NEAR OCEAN +-122.29,37.48,15.0,5480.0,892.0,2009.0,831.0,7.4678,500001.0,NEAR OCEAN +-122.27,37.47,44.0,3022.0,473.0,1235.0,477.0,6.7058,495900.0,NEAR OCEAN +-122.26,37.46,26.0,5067.0,750.0,1996.0,728.0,7.0001,500001.0,NEAR OCEAN +-122.28,37.47,44.0,863.0,114.0,281.0,99.0,6.8879,500001.0,NEAR OCEAN +-122.24,37.47,41.0,1183.0,203.0,455.0,171.0,5.1071,314100.0,NEAR OCEAN +-122.25,37.48,37.0,3507.0,569.0,1663.0,608.0,5.0863,440300.0,NEAR OCEAN +-122.24,37.47,40.0,1504.0,270.0,689.0,287.0,6.1244,308800.0,NEAR OCEAN +-122.25,37.47,38.0,645.0,124.0,265.0,103.0,5.4688,305000.0,NEAR OCEAN +-122.25,37.47,35.0,3183.0,515.0,1313.0,487.0,5.9062,383200.0,NEAR OCEAN +-122.25,37.48,45.0,2743.0,390.0,974.0,400.0,7.1621,500001.0,NEAR OCEAN +-122.24,37.48,45.0,4126.0,696.0,1722.0,668.0,4.8966,362100.0,NEAR OCEAN +-122.24,37.48,40.0,4459.0,1027.0,2080.0,982.0,3.5322,361900.0,NEAR OCEAN +-122.24,37.48,47.0,2423.0,407.0,1010.0,407.0,6.2154,362700.0,NEAR OCEAN +-122.24,37.49,30.0,2956.0,590.0,1191.0,594.0,3.7463,427600.0,NEAR OCEAN +-122.24,37.49,38.0,4105.0,950.0,2561.0,909.0,3.8684,265600.0,NEAR OCEAN +-122.21,37.48,39.0,1535.0,340.0,1204.0,370.0,2.8482,247200.0,NEAR BAY +-122.23,37.49,11.0,840.0,329.0,1338.0,345.0,2.3333,241700.0,NEAR OCEAN +-122.21,37.49,24.0,2528.0,947.0,2437.0,861.0,2.2746,225000.0,NEAR BAY +-122.22,37.48,47.0,2570.0,783.0,3107.0,724.0,2.8058,229500.0,NEAR OCEAN +-122.22,37.48,34.0,1541.0,584.0,1564.0,558.0,2.56,250000.0,NEAR OCEAN +-122.24,37.49,19.0,322.0,112.0,191.0,102.0,2.5833,500001.0,NEAR OCEAN +-122.24,37.55,3.0,6164.0,1175.0,2198.0,975.0,6.7413,435900.0,NEAR BAY +-122.25,37.53,16.0,4428.0,664.0,1677.0,623.0,7.6864,422500.0,NEAR BAY +-122.26,37.53,4.0,5233.0,1109.0,1690.0,907.0,6.2007,311800.0,NEAR BAY +-122.25,37.52,14.0,1472.0,291.0,876.0,292.0,4.3594,366000.0,NEAR BAY +-122.21,37.52,18.0,2962.0,945.0,1639.0,851.0,2.7399,87500.0,NEAR BAY +-122.19,37.48,35.0,7067.0,1646.0,5380.0,1597.0,4.1776,265300.0,NEAR BAY +-122.21,37.48,20.0,505.0,216.0,326.0,216.0,2.9286,237500.0,NEAR BAY +-122.21,37.48,37.0,1326.0,335.0,1771.0,335.0,3.0147,218100.0,NEAR BAY +-122.2,37.48,32.0,640.0,166.0,991.0,160.0,1.9844,270000.0,NEAR BAY +-122.2,37.48,41.0,733.0,155.0,652.0,140.0,5.1654,233600.0,NEAR BAY +-122.2,37.48,30.0,1170.0,258.0,610.0,243.0,3.4427,263500.0,NEAR BAY +-122.19,37.48,45.0,886.0,165.0,492.0,173.0,4.2708,267000.0,NEAR BAY +-122.19,37.48,38.0,1300.0,269.0,608.0,292.0,4.5568,286900.0,NEAR BAY +-122.19,37.47,44.0,1371.0,263.0,589.0,301.0,4.8068,312300.0,NEAR BAY +-122.2,37.47,44.0,1927.0,332.0,846.0,362.0,4.2083,278200.0,NEAR BAY +-122.2,37.47,37.0,1053.0,266.0,939.0,267.0,3.1989,320800.0,NEAR BAY +-122.2,37.47,37.0,1403.0,369.0,1587.0,331.0,2.8258,232800.0,NEAR BAY +-122.21,37.47,33.0,1266.0,415.0,1991.0,334.0,2.92,202800.0,NEAR OCEAN +-122.21,37.47,26.0,1777.0,555.0,1966.0,497.0,3.0472,211000.0,NEAR OCEAN +-122.21,37.47,43.0,733.0,162.0,497.0,175.0,3.2708,255300.0,NEAR OCEAN +-122.22,37.47,23.0,7740.0,1943.0,4124.0,1743.0,3.3268,322800.0,NEAR OCEAN +-122.22,37.47,35.0,367.0,113.0,398.0,109.0,2.5,166700.0,NEAR OCEAN +-122.22,37.47,28.0,5956.0,1612.0,3571.0,1549.0,3.1864,272800.0,NEAR OCEAN +-122.23,37.48,33.0,3108.0,805.0,1895.0,717.0,3.3015,267700.0,NEAR OCEAN +-122.23,37.47,39.0,5264.0,1259.0,3057.0,1265.0,3.623,276600.0,NEAR OCEAN +-122.23,37.48,38.0,1578.0,399.0,879.0,388.0,2.7969,298400.0,NEAR OCEAN +-122.24,37.47,35.0,2283.0,491.0,1148.0,436.0,4.5556,318600.0,NEAR OCEAN +-122.24,37.47,36.0,2021.0,433.0,1117.0,432.0,3.929,303100.0,NEAR OCEAN +-122.23,37.46,33.0,2643.0,464.0,1015.0,427.0,4.2232,363700.0,NEAR OCEAN +-122.23,37.46,26.0,4670.0,1039.0,2103.0,933.0,4.4167,333800.0,NEAR OCEAN +-122.25,37.46,33.0,6841.0,950.0,2681.0,980.0,7.1088,443300.0,NEAR OCEAN +-122.24,37.46,36.0,4686.0,781.0,2254.0,845.0,6.1043,343500.0,NEAR OCEAN +-122.26,37.45,17.0,2742.0,441.0,986.0,421.0,5.9285,496000.0,NEAR OCEAN +-122.23,37.46,36.0,6090.0,1057.0,3081.0,1075.0,5.6629,343600.0,NEAR OCEAN +-122.22,37.46,37.0,2586.0,495.0,1208.0,502.0,4.3214,342700.0,NEAR OCEAN +-122.23,37.45,34.0,4177.0,723.0,1586.0,660.0,5.0457,395100.0,NEAR OCEAN +-122.23,37.45,29.0,1617.0,235.0,758.0,246.0,7.7932,469900.0,NEAR OCEAN +-122.22,37.46,13.0,2888.0,546.0,1182.0,504.0,6.0255,409300.0,NEAR OCEAN +-122.2,37.46,40.0,1723.0,208.0,976.0,209.0,9.8892,500001.0,NEAR OCEAN +-122.2,37.44,31.0,2328.0,270.0,722.0,247.0,15.0001,500001.0,NEAR OCEAN +-122.22,37.44,32.0,4281.0,501.0,1318.0,484.0,15.0001,500001.0,NEAR OCEAN +-122.21,37.46,48.0,2560.0,322.0,921.0,301.0,10.8758,500001.0,NEAR OCEAN +-122.21,37.46,40.0,1777.0,207.0,577.0,207.0,15.0001,500001.0,NEAR OCEAN +-122.18,37.46,40.0,2529.0,293.0,831.0,258.0,15.0001,500001.0,NEAR BAY +-122.2,37.47,40.0,2959.0,389.0,985.0,365.0,9.9025,500001.0,NEAR BAY +-122.18,37.47,37.0,2848.0,328.0,852.0,327.0,13.367,500001.0,NEAR BAY +-122.16,37.47,44.0,2581.0,437.0,1006.0,414.0,5.397,341700.0,NEAR BAY +-122.17,37.48,39.0,2427.0,401.0,1178.0,408.0,5.9629,352700.0,NEAR BAY +-122.16,37.47,33.0,3687.0,852.0,3091.0,852.0,2.6506,162600.0,NEAR BAY +-122.16,37.48,36.0,2238.0,479.0,1949.0,457.0,2.3769,157300.0,NEAR BAY +-122.14,37.5,46.0,30.0,4.0,13.0,5.0,15.0001,500001.0,NEAR BAY +-122.14,37.48,36.0,1210.0,236.0,981.0,239.0,4.0039,148900.0,NEAR BAY +-122.14,37.47,36.0,2081.0,412.0,1931.0,373.0,3.7917,160600.0,NEAR BAY +-122.12,37.48,36.0,880.0,177.0,795.0,188.0,3.8194,159400.0,NEAR BAY +-122.13,37.47,25.0,1630.0,353.0,1546.0,371.0,5.0893,173400.0,NEAR BAY +-122.13,37.46,37.0,1576.0,334.0,1385.0,323.0,2.5294,159400.0,NEAR BAY +-122.13,37.46,35.0,1321.0,300.0,1133.0,287.0,3.7312,159600.0,NEAR BAY +-122.12,37.45,38.0,1276.0,314.0,955.0,287.0,2.0096,155700.0,NEAR BAY +-122.13,37.46,31.0,2247.0,573.0,1711.0,511.0,3.2642,185600.0,NEAR BAY +-122.13,37.47,30.0,1480.0,294.0,1126.0,301.0,4.983,166700.0,NEAR BAY +-122.14,37.47,37.0,3373.0,815.0,2909.0,705.0,2.8868,156600.0,NEAR BAY +-122.15,37.47,37.0,1844.0,382.0,1634.0,417.0,2.7993,145500.0,NEAR BAY +-122.15,37.47,38.0,1560.0,301.0,1331.0,316.0,3.0521,151500.0,NEAR BAY +-122.15,37.46,30.0,4198.0,1244.0,2678.0,1147.0,3.6712,308600.0,NEAR BAY +-122.14,37.46,27.0,5580.0,2009.0,4165.0,1763.0,2.4375,189000.0,NEAR BAY +-122.15,37.47,39.0,1295.0,239.0,566.0,242.0,5.6407,326400.0,NEAR BAY +-122.15,37.46,42.0,1995.0,412.0,794.0,374.0,5.6234,379600.0,NEAR BAY +-122.16,37.46,45.0,2068.0,348.0,844.0,366.0,6.227,417800.0,NEAR BAY +-122.16,37.45,50.0,196.0,41.0,76.0,42.0,7.6129,412500.0,NEAR BAY +-122.16,37.46,32.0,2663.0,661.0,1403.0,733.0,4.2667,410200.0,NEAR BAY +-122.17,37.46,47.0,2312.0,332.0,1044.0,282.0,9.459,500001.0,NEAR BAY +-122.19,37.46,34.0,5419.0,1183.0,2002.0,1138.0,4.1985,500001.0,NEAR BAY +-122.17,37.45,33.0,1828.0,396.0,766.0,378.0,4.4531,500001.0,NEAR BAY +-122.17,37.45,35.0,1025.0,242.0,388.0,232.0,5.1995,500001.0,NEAR BAY +-122.18,37.45,43.0,2061.0,437.0,817.0,385.0,4.4688,460200.0,NEAR BAY +-122.18,37.45,37.0,5257.0,1360.0,2128.0,1264.0,4.0,394300.0,NEAR BAY +-122.19,37.45,18.0,1636.0,414.0,853.0,439.0,5.1032,464600.0,NEAR OCEAN +-122.18,37.44,44.0,2237.0,347.0,948.0,346.0,8.2436,500001.0,NEAR OCEAN +-122.19,37.44,38.0,3383.0,456.0,1203.0,465.0,9.3198,500001.0,NEAR OCEAN +-122.19,37.44,39.0,4402.0,618.0,1616.0,631.0,8.9955,500001.0,NEAR OCEAN +-122.2,37.43,38.0,3626.0,528.0,1350.0,532.0,7.3681,500001.0,NEAR OCEAN +-122.21,37.44,35.0,1140.0,193.0,486.0,199.0,4.6908,500001.0,NEAR OCEAN +-122.2,37.43,40.0,2223.0,412.0,1050.0,417.0,5.2421,444500.0,NEAR OCEAN +-122.19,37.43,39.0,2392.0,420.0,937.0,406.0,6.6136,472800.0,NEAR OCEAN +-122.2,37.43,22.0,3294.0,744.0,1337.0,655.0,5.2391,500001.0,NEAR OCEAN +-122.21,37.43,33.0,1606.0,254.0,727.0,271.0,8.6963,500001.0,NEAR OCEAN +-122.21,37.43,23.0,5741.0,1012.0,1843.0,888.0,5.7211,500001.0,NEAR OCEAN +-122.23,37.42,16.0,1945.0,320.0,512.0,300.0,7.4542,500001.0,NEAR OCEAN +-122.19,37.42,47.0,932.0,167.0,295.0,116.0,8.4375,500001.0,NEAR OCEAN +-122.21,37.43,20.0,975.0,134.0,324.0,146.0,9.7796,500001.0,NEAR OCEAN +-122.21,37.42,28.0,564.0,72.0,191.0,79.0,11.9666,500001.0,NEAR OCEAN +-122.2,37.4,37.0,1296.0,194.0,540.0,192.0,8.2782,500001.0,NEAR OCEAN +-122.2,37.4,30.0,2612.0,338.0,980.0,324.0,10.0481,500001.0,NEAR OCEAN +-122.21,37.38,28.0,4518.0,578.0,1489.0,559.0,11.3176,500001.0,NEAR OCEAN +-122.2,37.35,17.0,3095.0,442.0,1173.0,424.0,13.2986,500001.0,NEAR BAY +-122.21,37.37,34.0,1476.0,217.0,613.0,223.0,8.2883,500001.0,NEAR OCEAN +-122.22,37.37,26.0,440.0,202.0,322.0,218.0,5.1831,350000.0,NEAR OCEAN +-122.22,37.36,34.0,1559.0,243.0,600.0,242.0,8.7382,500001.0,NEAR OCEAN +-122.22,37.4,32.0,2297.0,287.0,814.0,283.0,15.0001,500001.0,NEAR OCEAN +-122.25,37.45,34.0,2999.0,365.0,927.0,369.0,10.2811,500001.0,NEAR OCEAN +-122.27,37.45,41.0,830.0,136.0,353.0,153.0,6.3824,500001.0,NEAR OCEAN +-122.24,37.43,36.0,2410.0,361.0,934.0,377.0,7.652,500001.0,NEAR OCEAN +-122.27,37.43,33.0,1601.0,223.0,629.0,215.0,15.0001,500001.0,NEAR OCEAN +-122.25,37.39,33.0,370.0,42.0,153.0,53.0,10.6514,500001.0,NEAR OCEAN +-122.26,37.38,28.0,1103.0,164.0,415.0,154.0,7.8633,500001.0,NEAR OCEAN +-122.29,37.41,30.0,6373.0,854.0,2149.0,798.0,10.6868,500001.0,NEAR OCEAN +-122.46,37.51,23.0,949.0,151.0,399.0,149.0,5.6286,411300.0,NEAR OCEAN +-122.47,37.5,18.0,2297.0,416.0,1086.0,381.0,4.875,334600.0,NEAR OCEAN +-122.47,37.5,25.0,950.0,259.0,404.0,195.0,3.1937,319200.0,NEAR OCEAN +-122.48,37.51,22.0,1564.0,278.0,761.0,270.0,4.7578,318500.0,NEAR OCEAN +-122.47,37.51,15.0,4974.0,764.0,2222.0,774.0,6.7606,364300.0,NEAR OCEAN +-122.44,37.52,16.0,7077.0,1179.0,3502.0,1148.0,5.9919,345100.0,NEAR OCEAN +-122.53,37.5,19.0,4768.0,807.0,2199.0,805.0,6.1896,331100.0,NEAR OCEAN +-122.49,37.54,15.0,3456.0,545.0,1527.0,535.0,6.3256,368000.0,NEAR OCEAN +-122.51,37.53,17.0,1574.0,262.0,672.0,241.0,7.2929,355800.0,NEAR OCEAN +-122.5,37.51,11.0,749.0,137.0,355.0,124.0,8.2364,371800.0,NEAR OCEAN +-122.49,37.5,21.0,1209.0,309.0,801.0,259.0,4.5625,500000.0,NEAR OCEAN +-122.43,37.43,17.0,11999.0,2249.0,5467.0,1989.0,4.8405,354300.0,NEAR OCEAN +-122.34,37.46,21.0,1799.0,293.0,576.0,277.0,7.439,500001.0,NEAR OCEAN +-122.38,37.34,33.0,1054.0,209.0,400.0,161.0,7.7773,456300.0,NEAR OCEAN +-122.33,37.39,52.0,573.0,102.0,232.0,92.0,6.2263,500001.0,NEAR OCEAN +-122.27,37.32,37.0,2607.0,534.0,1346.0,507.0,5.3951,277700.0,NEAR OCEAN +-122.27,37.24,30.0,2762.0,593.0,1581.0,502.0,5.1002,319400.0,NEAR OCEAN +-122.38,37.18,52.0,1746.0,315.0,941.0,220.0,3.3047,286100.0,NEAR OCEAN +-119.77,34.44,24.0,5652.0,1313.0,2312.0,1294.0,2.4717,295300.0,NEAR OCEAN +-119.78,34.45,9.0,1830.0,353.0,1515.0,220.0,4.2109,450000.0,NEAR OCEAN +-119.79,34.45,24.0,2746.0,433.0,1076.0,380.0,5.8635,348700.0,NEAR OCEAN +-119.75,34.45,26.0,3578.0,677.0,1504.0,618.0,4.1375,395000.0,NEAR OCEAN +-119.75,34.44,28.0,1080.0,298.0,524.0,251.0,1.8432,327300.0,NEAR OCEAN +-119.76,34.44,28.0,1985.0,582.0,1092.0,548.0,2.4701,290900.0,NEAR OCEAN +-119.75,34.45,6.0,2864.0,,1404.0,603.0,5.5073,263800.0,NEAR OCEAN +-119.78,34.48,21.0,2377.0,322.0,1007.0,328.0,7.9248,500001.0,NEAR OCEAN +-119.75,34.5,26.0,3563.0,579.0,1479.0,575.0,5.9522,438400.0,<1H OCEAN +-119.78,34.45,23.0,2077.0,306.0,705.0,256.0,6.4744,500001.0,NEAR OCEAN +-119.73,34.44,38.0,1729.0,,801.0,395.0,3.1364,357500.0,NEAR OCEAN +-119.73,34.43,35.0,2703.0,654.0,1383.0,631.0,4.5278,340400.0,NEAR OCEAN +-119.74,34.44,26.0,4257.0,1031.0,1861.0,950.0,3.4047,294500.0,NEAR OCEAN +-119.72,34.43,30.0,2491.0,656.0,1091.0,576.0,2.5139,279500.0,<1H OCEAN +-119.72,34.43,27.0,984.0,299.0,777.0,313.0,2.5694,275000.0,<1H OCEAN +-119.72,34.43,46.0,1332.0,329.0,746.0,310.0,3.6719,357400.0,<1H OCEAN +-119.72,34.43,36.0,1156.0,309.0,521.0,304.0,2.6014,320600.0,<1H OCEAN +-119.72,34.43,33.0,1028.0,377.0,753.0,356.0,2.3454,243800.0,<1H OCEAN +-119.71,34.43,18.0,1170.0,372.0,681.0,346.0,2.1974,255000.0,<1H OCEAN +-119.71,34.42,31.0,1643.0,499.0,1253.0,499.0,3.1563,267000.0,<1H OCEAN +-119.71,34.43,47.0,1572.0,417.0,790.0,384.0,2.6429,279200.0,<1H OCEAN +-119.72,34.44,50.0,3265.0,509.0,1256.0,443.0,6.3997,500001.0,<1H OCEAN +-119.71,34.44,52.0,1837.0,343.0,711.0,355.0,4.1316,443000.0,<1H OCEAN +-119.7,34.43,37.0,1462.0,306.0,678.0,322.0,5.1545,418400.0,<1H OCEAN +-119.71,34.43,48.0,2408.0,536.0,1005.0,497.0,3.5213,458600.0,<1H OCEAN +-119.7,34.43,39.0,1486.0,467.0,758.0,409.0,2.6875,320600.0,<1H OCEAN +-119.7,34.43,52.0,977.0,289.0,412.0,272.0,2.125,300000.0,<1H OCEAN +-119.7,34.47,32.0,3725.0,569.0,1304.0,527.0,7.7261,500001.0,<1H OCEAN +-119.72,34.47,34.0,3262.0,533.0,1265.0,502.0,5.8411,381800.0,<1H OCEAN +-119.71,34.45,35.0,2183.0,363.0,988.0,351.0,5.5922,384400.0,<1H OCEAN +-119.71,34.44,41.0,2220.0,367.0,927.0,355.0,5.3184,376000.0,<1H OCEAN +-119.72,34.44,43.0,1781.0,342.0,663.0,358.0,4.7,293800.0,<1H OCEAN +-119.72,34.44,39.0,1489.0,304.0,700.0,268.0,3.8819,289900.0,<1H OCEAN +-119.73,34.44,48.0,2114.0,390.0,973.0,367.0,4.8021,351100.0,NEAR OCEAN +-119.73,34.45,44.0,2261.0,328.0,763.0,294.0,6.7449,415600.0,<1H OCEAN +-119.74,34.44,27.0,1251.0,282.0,503.0,283.0,2.8,353000.0,NEAR OCEAN +-119.74,34.45,29.0,2526.0,388.0,1092.0,409.0,6.0597,383100.0,<1H OCEAN +-119.69,34.44,41.0,1989.0,271.0,666.0,269.0,6.8406,500001.0,<1H OCEAN +-119.69,34.43,44.0,2440.0,485.0,1011.0,442.0,4.149,443600.0,<1H OCEAN +-119.7,34.43,35.0,1402.0,369.0,654.0,385.0,2.6205,318800.0,<1H OCEAN +-119.69,34.43,43.0,1257.0,311.0,671.0,263.0,2.875,280600.0,<1H OCEAN +-119.69,34.43,37.0,2801.0,497.0,1150.0,476.0,5.8311,387700.0,<1H OCEAN +-119.68,34.44,23.0,2600.0,398.0,917.0,374.0,8.7394,500001.0,<1H OCEAN +-119.67,34.47,35.0,2700.0,422.0,1995.0,383.0,4.9757,500001.0,<1H OCEAN +-119.66,34.44,26.0,2790.0,413.0,1014.0,397.0,6.5631,500001.0,<1H OCEAN +-119.66,34.43,27.0,5509.0,1059.0,2591.0,979.0,3.8456,500001.0,<1H OCEAN +-119.67,34.44,32.0,3202.0,537.0,1316.0,538.0,5.2888,463800.0,<1H OCEAN +-119.69,34.43,30.0,1273.0,343.0,1082.0,325.0,2.5104,228100.0,<1H OCEAN +-119.68,34.43,33.0,1961.0,462.0,1693.0,445.0,2.9896,236000.0,<1H OCEAN +-119.68,34.43,49.0,1785.0,386.0,1267.0,380.0,3.5208,251200.0,<1H OCEAN +-119.67,34.38,28.0,1814.0,526.0,849.0,420.0,3.1625,364300.0,<1H OCEAN +-119.68,34.42,38.0,1452.0,354.0,1139.0,340.0,2.707,236800.0,<1H OCEAN +-119.67,34.43,39.0,1467.0,381.0,1404.0,374.0,2.3681,241400.0,<1H OCEAN +-119.67,34.42,37.0,1673.0,444.0,1477.0,446.0,2.0643,246700.0,<1H OCEAN +-119.67,34.42,23.0,1333.0,393.0,1369.0,381.0,2.5947,232600.0,<1H OCEAN +-119.7,34.43,52.0,1364.0,460.0,804.0,400.0,2.375,293800.0,<1H OCEAN +-119.7,34.42,52.0,329.0,109.0,291.0,102.0,1.4722,350000.0,<1H OCEAN +-119.7,34.42,41.0,725.0,239.0,582.0,214.0,3.1667,362500.0,<1H OCEAN +-119.69,34.42,17.0,1826.0,544.0,1325.0,532.0,1.2762,253600.0,<1H OCEAN +-119.69,34.42,52.0,302.0,112.0,392.0,114.0,2.5978,258300.0,<1H OCEAN +-119.71,34.42,52.0,1838.0,692.0,851.0,576.0,1.4851,237500.0,<1H OCEAN +-119.71,34.42,49.0,1560.0,436.0,1041.0,411.0,2.925,246900.0,<1H OCEAN +-119.71,34.42,39.0,1172.0,322.0,606.0,316.0,2.16,259100.0,<1H OCEAN +-119.71,34.42,50.0,840.0,279.0,488.0,270.0,2.2097,258300.0,<1H OCEAN +-119.7,34.42,43.0,1802.0,557.0,1490.0,538.0,2.675,247900.0,<1H OCEAN +-119.7,34.41,52.0,1526.0,458.0,1633.0,449.0,2.2069,226500.0,NEAR OCEAN +-119.72,34.42,37.0,1635.0,427.0,1027.0,408.0,3.5905,264700.0,NEAR OCEAN +-119.72,34.42,31.0,1524.0,383.0,1257.0,398.0,2.6019,250000.0,NEAR OCEAN +-119.72,34.42,49.0,1610.0,370.0,961.0,351.0,2.6983,260100.0,NEAR OCEAN +-119.72,34.42,52.0,1759.0,387.0,980.0,402.0,4.0125,261000.0,NEAR OCEAN +-119.71,34.42,52.0,1411.0,324.0,1091.0,306.0,4.1062,252900.0,<1H OCEAN +-119.71,34.42,23.0,2068.0,658.0,1898.0,570.0,2.5506,230800.0,<1H OCEAN +-119.71,34.41,31.0,1034.0,319.0,997.0,308.0,2.6538,231800.0,NEAR OCEAN +-119.73,34.35,20.0,1648.0,319.0,905.0,307.0,4.375,335200.0,NEAR OCEAN +-119.71,34.36,34.0,1706.0,276.0,628.0,243.0,4.1842,364000.0,NEAR OCEAN +-119.7,34.36,35.0,1604.0,334.0,904.0,337.0,4.7411,336400.0,NEAR OCEAN +-119.71,34.4,36.0,1846.0,358.0,748.0,329.0,4.2283,326800.0,NEAR OCEAN +-119.7,34.4,25.0,1858.0,493.0,865.0,460.0,3.0938,312500.0,NEAR OCEAN +-119.72,34.41,35.0,871.0,145.0,354.0,154.0,4.3214,341800.0,NEAR OCEAN +-119.71,34.4,27.0,3782.0,771.0,1742.0,751.0,4.0451,395100.0,NEAR OCEAN +-119.71,34.41,18.0,1225.0,317.0,694.0,306.0,3.6823,255000.0,NEAR OCEAN +-119.7,34.41,19.0,1215.0,360.0,1349.0,423.0,2.6607,226500.0,NEAR OCEAN +-119.7,34.41,19.0,2086.0,575.0,1701.0,530.0,2.8042,236100.0,NEAR OCEAN +-119.69,34.38,39.0,1383.0,459.0,677.0,362.0,2.25,281300.0,NEAR OCEAN +-119.69,34.41,44.0,1208.0,357.0,603.0,297.0,2.6103,500000.0,<1H OCEAN +-119.75,34.43,23.0,2982.0,837.0,1317.0,787.0,3.3776,283200.0,NEAR OCEAN +-119.74,34.43,26.0,3119.0,562.0,1459.0,562.0,5.0434,340400.0,NEAR OCEAN +-119.75,34.4,31.0,1997.0,299.0,826.0,301.0,6.8927,500001.0,NEAR OCEAN +-119.73,34.43,27.0,1448.0,404.0,978.0,338.0,2.303,261000.0,NEAR OCEAN +-119.73,34.42,23.0,1364.0,227.0,638.0,238.0,5.3279,413900.0,NEAR OCEAN +-119.73,34.42,25.0,2024.0,312.0,907.0,335.0,5.4127,392800.0,NEAR OCEAN +-119.72,34.41,35.0,1853.0,375.0,878.0,338.0,4.9044,335300.0,NEAR OCEAN +-119.74,34.41,30.0,2365.0,417.0,1053.0,409.0,5.5959,346200.0,NEAR OCEAN +-119.73,34.41,29.0,1769.0,297.0,703.0,269.0,4.4375,350000.0,NEAR OCEAN +-119.72,34.41,26.0,1648.0,378.0,954.0,405.0,3.2895,335000.0,NEAR OCEAN +-119.74,34.35,34.0,1664.0,292.0,705.0,257.0,5.0,329400.0,NEAR OCEAN +-119.74,34.38,32.0,1479.0,287.0,830.0,288.0,5.345,322600.0,NEAR OCEAN +-119.63,34.42,42.0,1765.0,263.0,753.0,260.0,8.5608,500001.0,<1H OCEAN +-119.64,34.43,34.0,3045.0,570.0,1002.0,488.0,5.623,500001.0,<1H OCEAN +-119.63,34.4,29.0,3865.0,814.0,1266.0,613.0,6.0069,500001.0,<1H OCEAN +-119.64,34.43,32.0,1872.0,318.0,749.0,296.0,4.625,500001.0,<1H OCEAN +-119.61,34.45,33.0,3597.0,519.0,1207.0,479.0,5.3963,500001.0,<1H OCEAN +-119.63,34.44,37.0,3188.0,442.0,984.0,376.0,9.4522,500001.0,<1H OCEAN +-119.61,34.43,16.0,2665.0,391.0,794.0,311.0,9.0267,500001.0,<1H OCEAN +-119.53,34.41,8.0,1705.0,400.0,886.0,391.0,3.9659,297400.0,<1H OCEAN +-119.52,34.41,20.0,4489.0,800.0,2867.0,765.0,4.806,279700.0,<1H OCEAN +-119.51,34.4,24.0,3422.0,596.0,1763.0,601.0,5.2039,301300.0,NEAR OCEAN +-119.51,34.4,15.0,1112.0,256.0,411.0,245.0,2.0625,314300.0,NEAR OCEAN +-119.52,34.39,23.0,1414.0,365.0,889.0,345.0,2.6397,250000.0,NEAR OCEAN +-119.51,34.39,32.0,1921.0,394.0,951.0,334.0,3.233,346000.0,NEAR OCEAN +-119.52,34.4,20.0,1834.0,477.0,1305.0,417.0,3.2125,251000.0,NEAR OCEAN +-119.53,34.38,22.0,2323.0,727.0,1301.0,478.0,2.7864,300000.0,NEAR OCEAN +-119.53,34.4,14.0,1671.0,383.0,1079.0,365.0,3.1389,248700.0,<1H OCEAN +-119.51,34.46,28.0,3506.0,563.0,1362.0,483.0,6.091,500001.0,<1H OCEAN +-119.55,34.38,17.0,1951.0,368.0,681.0,350.0,2.7275,500001.0,<1H OCEAN +-119.57,34.38,22.0,2512.0,426.0,919.0,341.0,5.759,425000.0,<1H OCEAN +-119.59,34.43,28.0,2718.0,542.0,1066.0,442.0,4.2059,500001.0,<1H OCEAN +-119.59,34.39,35.0,622.0,170.0,278.0,139.0,3.6969,335000.0,<1H OCEAN +-119.5,34.35,39.0,308.0,38.0,59.0,21.0,11.7794,500001.0,NEAR OCEAN +-119.49,34.39,17.0,4617.0,982.0,2303.0,923.0,3.9224,230600.0,NEAR OCEAN +-119.72,34.77,35.0,2469.0,553.0,1168.0,427.0,2.4583,62100.0,<1H OCEAN +-120.18,34.75,17.0,2074.0,382.0,1035.0,359.0,3.7958,400000.0,<1H OCEAN +-120.27,34.72,14.0,1289.0,277.0,693.0,237.0,3.2569,230800.0,<1H OCEAN +-120.18,34.62,25.0,1337.0,219.0,671.0,225.0,3.1912,226400.0,NEAR OCEAN +-120.2,34.63,14.0,2647.0,515.0,1487.0,488.0,4.4519,227900.0,NEAR OCEAN +-120.2,34.61,15.0,2958.0,690.0,1348.0,617.0,3.8582,215200.0,NEAR OCEAN +-120.13,34.63,11.0,2137.0,339.0,916.0,338.0,5.5221,394900.0,NEAR OCEAN +-120.12,34.6,10.0,2426.0,426.0,966.0,419.0,5.5106,290900.0,NEAR OCEAN +-120.14,34.6,22.0,2136.0,465.0,1143.0,409.0,2.9479,243100.0,NEAR OCEAN +-120.16,34.61,17.0,921.0,189.0,434.0,219.0,3.0185,500001.0,NEAR OCEAN +-120.14,34.59,9.0,2536.0,499.0,832.0,385.0,2.5743,309800.0,NEAR OCEAN +-120.14,34.59,24.0,1601.0,282.0,731.0,285.0,4.2026,259800.0,NEAR OCEAN +-120.04,34.72,13.0,3942.0,585.0,1542.0,515.0,6.6054,500001.0,NEAR OCEAN +-120.11,34.66,18.0,1348.0,238.0,631.0,247.0,5.3154,289400.0,NEAR OCEAN +-120.08,34.64,18.0,2375.0,429.0,1048.0,369.0,4.2222,375000.0,NEAR OCEAN +-120.08,34.62,11.0,3478.0,588.0,1693.0,582.0,4.6554,272300.0,NEAR OCEAN +-120.09,34.62,18.0,2708.0,382.0,988.0,359.0,5.5194,367000.0,NEAR OCEAN +-120.11,34.62,16.0,2943.0,394.0,959.0,359.0,6.2094,440000.0,NEAR OCEAN +-120.09,34.61,11.0,586.0,125.0,317.0,74.0,2.8906,84400.0,NEAR OCEAN +-120.08,34.59,24.0,1874.0,319.0,820.0,315.0,5.1909,390200.0,NEAR OCEAN +-120.01,34.54,30.0,2992.0,609.0,1288.0,465.0,3.9375,292900.0,NEAR OCEAN +-120.44,34.91,12.0,3189.0,463.0,1200.0,442.0,5.299,226800.0,<1H OCEAN +-120.45,34.91,16.0,712.0,147.0,355.0,162.0,2.56,150000.0,<1H OCEAN +-120.48,34.9,20.0,3842.0,630.0,2490.0,662.0,3.0559,120100.0,<1H OCEAN +-120.45,34.88,15.0,2143.0,286.0,929.0,315.0,5.7306,269700.0,<1H OCEAN +-120.44,34.88,9.0,3124.0,415.0,1169.0,407.0,6.7694,275100.0,<1H OCEAN +-120.45,34.87,4.0,1533.0,221.0,545.0,191.0,7.5696,328700.0,<1H OCEAN +-120.44,34.87,13.0,2312.0,352.0,1084.0,388.0,5.038,194000.0,<1H OCEAN +-120.45,34.86,23.0,3415.0,778.0,1492.0,633.0,2.2791,114800.0,NEAR OCEAN +-120.4,34.86,11.0,1633.0,348.0,504.0,327.0,2.0508,275000.0,<1H OCEAN +-120.4,34.85,26.0,2384.0,385.0,1323.0,400.0,4.8185,157900.0,<1H OCEAN +-120.41,34.86,15.0,978.0,187.0,407.0,182.0,4.375,158000.0,<1H OCEAN +-120.43,34.86,17.0,3172.0,506.0,1538.0,473.0,4.3125,168100.0,<1H OCEAN +-120.43,34.86,17.0,1932.0,347.0,874.0,312.0,3.8203,141500.0,<1H OCEAN +-120.37,34.9,17.0,2649.0,386.0,1057.0,362.0,4.7813,326800.0,<1H OCEAN +-120.33,34.87,24.0,2590.0,404.0,1093.0,338.0,3.9375,341200.0,<1H OCEAN +-120.42,34.91,4.0,6986.0,1217.0,2801.0,1212.0,3.2135,212700.0,<1H OCEAN +-120.43,34.9,27.0,2019.0,354.0,1029.0,346.0,3.5391,144700.0,<1H OCEAN +-120.43,34.9,30.0,2388.0,393.0,1117.0,375.0,4.1058,164000.0,<1H OCEAN +-120.41,34.88,8.0,3119.0,620.0,1159.0,544.0,3.5288,165500.0,<1H OCEAN +-120.42,34.89,24.0,2020.0,307.0,855.0,283.0,5.0099,162500.0,<1H OCEAN +-120.43,34.89,30.0,1979.0,342.0,999.0,320.0,5.0286,158000.0,<1H OCEAN +-120.43,34.89,28.0,2862.0,478.0,1384.0,463.0,4.6694,158200.0,<1H OCEAN +-120.43,34.88,22.0,2580.0,381.0,1149.0,372.0,5.0113,158600.0,<1H OCEAN +-120.42,34.87,18.0,2505.0,376.0,1162.0,382.0,4.8359,195700.0,<1H OCEAN +-120.43,34.87,21.0,2131.0,329.0,1094.0,353.0,4.6648,193000.0,<1H OCEAN +-120.43,34.87,26.0,1699.0,272.0,799.0,266.0,3.9871,157700.0,<1H OCEAN +-120.41,34.88,4.0,3680.0,559.0,1678.0,569.0,5.0639,201700.0,<1H OCEAN +-120.4,34.87,10.0,2197.0,329.0,1064.0,319.0,4.9766,199600.0,<1H OCEAN +-120.41,34.87,32.0,1997.0,317.0,866.0,281.0,5.062,158900.0,<1H OCEAN +-120.41,34.87,15.0,1534.0,251.0,761.0,240.0,4.9028,193600.0,<1H OCEAN +-120.42,34.95,52.0,1391.0,287.0,632.0,276.0,1.7431,131500.0,<1H OCEAN +-120.42,34.95,33.0,3404.0,711.0,1579.0,639.0,3.1078,146700.0,<1H OCEAN +-120.43,34.95,50.0,1966.0,413.0,985.0,403.0,2.3506,136100.0,<1H OCEAN +-120.43,34.95,43.0,2020.0,344.0,692.0,310.0,3.6815,181800.0,<1H OCEAN +-120.42,34.94,32.0,2844.0,551.0,1337.0,516.0,2.7188,133700.0,<1H OCEAN +-120.43,34.93,4.0,2866.0,648.0,1311.0,578.0,2.8649,186500.0,<1H OCEAN +-120.43,34.93,10.0,2980.0,585.0,1593.0,562.0,3.285,218300.0,<1H OCEAN +-120.43,34.98,21.0,2725.0,514.0,1466.0,488.0,3.6639,128600.0,<1H OCEAN +-120.43,34.97,28.0,1433.0,270.0,1001.0,278.0,4.0125,130100.0,<1H OCEAN +-120.42,34.96,20.0,1678.0,307.0,840.0,316.0,4.4342,160700.0,<1H OCEAN +-120.43,34.96,24.0,2739.0,414.0,1171.0,413.0,4.8155,162900.0,<1H OCEAN +-120.43,34.96,24.0,1799.0,470.0,1416.0,408.0,2.0673,136900.0,<1H OCEAN +-120.42,34.96,31.0,3518.0,608.0,1386.0,572.0,3.6212,151400.0,<1H OCEAN +-120.42,34.96,19.0,2298.0,511.0,1246.0,513.0,2.212,132000.0,<1H OCEAN +-120.43,34.96,19.0,2350.0,631.0,1291.0,515.0,1.0349,130800.0,<1H OCEAN +-120.42,34.97,18.0,1932.0,350.0,1071.0,346.0,4.125,139800.0,<1H OCEAN +-120.41,34.96,16.0,2299.0,403.0,1245.0,395.0,4.2125,148300.0,<1H OCEAN +-120.42,34.96,14.0,2069.0,343.0,1240.0,338.0,4.5066,149800.0,<1H OCEAN +-120.38,34.96,9.0,2813.0,492.0,1144.0,490.0,4.0431,226800.0,<1H OCEAN +-120.41,34.96,21.0,1774.0,263.0,724.0,237.0,4.65,152500.0,<1H OCEAN +-120.41,34.96,9.0,2712.0,428.0,1116.0,415.0,4.5536,190100.0,<1H OCEAN +-120.4,34.95,8.0,1885.0,286.0,835.0,290.0,5.0206,261000.0,<1H OCEAN +-120.47,34.98,6.0,5762.0,1115.0,2551.0,919.0,3.0723,137300.0,<1H OCEAN +-120.44,34.97,22.0,1619.0,360.0,1509.0,384.0,1.7941,110300.0,<1H OCEAN +-120.44,34.97,26.0,1705.0,344.0,1605.0,307.0,3.7589,113700.0,<1H OCEAN +-120.45,34.97,25.0,1920.0,380.0,1434.0,388.0,3.0368,129300.0,<1H OCEAN +-120.45,34.97,10.0,1897.0,354.0,1353.0,357.0,3.7679,131300.0,<1H OCEAN +-120.44,34.96,29.0,2374.0,562.0,1617.0,463.0,2.6531,108300.0,<1H OCEAN +-120.44,34.96,30.0,1685.0,315.0,1290.0,368.0,3.4722,112500.0,<1H OCEAN +-120.45,34.96,21.0,2121.0,445.0,2211.0,463.0,4.0603,117600.0,<1H OCEAN +-120.45,34.96,11.0,1299.0,280.0,1158.0,223.0,2.5556,129200.0,<1H OCEAN +-120.44,34.96,39.0,1228.0,379.0,851.0,341.0,1.899,113300.0,<1H OCEAN +-120.44,34.96,34.0,1248.0,284.0,986.0,272.0,2.9167,104200.0,<1H OCEAN +-120.45,34.96,26.0,1949.0,396.0,1575.0,377.0,2.875,121400.0,<1H OCEAN +-120.45,34.95,32.0,1574.0,447.0,1772.0,463.0,1.8625,90200.0,<1H OCEAN +-120.44,34.94,24.0,2481.0,476.0,1101.0,474.0,3.1576,147200.0,<1H OCEAN +-120.47,34.94,17.0,1368.0,308.0,642.0,303.0,1.8633,109400.0,<1H OCEAN +-120.44,34.93,15.0,868.0,244.0,1133.0,253.0,2.0995,87500.0,<1H OCEAN +-120.44,34.93,16.0,2098.0,558.0,1252.0,492.0,2.1509,67500.0,<1H OCEAN +-120.44,34.95,38.0,3004.0,794.0,2601.0,747.0,2.2743,106400.0,<1H OCEAN +-120.45,34.95,10.0,2207.0,644.0,2232.0,543.0,2.375,98500.0,<1H OCEAN +-120.44,34.94,29.0,1877.0,516.0,1634.0,492.0,1.6875,122700.0,<1H OCEAN +-120.45,34.95,7.0,1479.0,532.0,1057.0,459.0,2.2538,162500.0,<1H OCEAN +-120.45,34.94,26.0,1058.0,232.0,891.0,243.0,3.6422,120600.0,<1H OCEAN +-120.45,34.94,24.0,1702.0,447.0,1240.0,417.0,2.4091,115500.0,<1H OCEAN +-120.54,34.97,23.0,1353.0,345.0,1322.0,336.0,1.8185,97800.0,<1H OCEAN +-120.57,34.96,27.0,1401.0,294.0,1306.0,286.0,2.5809,83200.0,NEAR OCEAN +-120.57,34.96,38.0,1145.0,297.0,1107.0,296.0,2.1776,89100.0,NEAR OCEAN +-120.64,34.97,5.0,2090.0,469.0,1911.0,482.0,2.4318,86100.0,NEAR OCEAN +-120.6,34.91,44.0,711.0,140.0,384.0,116.0,2.1094,73800.0,NEAR OCEAN +-120.59,34.7,29.0,17738.0,3114.0,12427.0,2826.0,2.7377,28300.0,NEAR OCEAN +-120.48,34.7,26.0,3069.0,518.0,1524.0,539.0,4.3162,136400.0,NEAR OCEAN +-120.46,34.64,11.0,562.0,164.0,504.0,147.0,2.0161,118800.0,NEAR OCEAN +-120.46,34.65,22.0,1298.0,358.0,1272.0,363.0,1.6488,117500.0,NEAR OCEAN +-120.46,34.64,26.0,2364.0,604.0,1520.0,529.0,1.9444,129400.0,NEAR OCEAN +-120.47,34.64,8.0,2482.0,586.0,1427.0,540.0,3.071,120400.0,NEAR OCEAN +-120.47,34.65,31.0,1438.0,320.0,816.0,270.0,2.4583,128100.0,NEAR OCEAN +-120.46,34.64,16.0,686.0,217.0,614.0,200.0,0.8106,83300.0,NEAR OCEAN +-120.44,34.64,8.0,787.0,126.0,446.0,133.0,4.6023,163400.0,NEAR OCEAN +-120.45,34.64,30.0,2330.0,422.0,1255.0,449.0,3.8512,134600.0,NEAR OCEAN +-120.45,34.64,27.0,2696.0,622.0,1322.0,543.0,3.0352,135400.0,NEAR OCEAN +-120.45,34.64,40.0,1051.0,235.0,574.0,201.0,2.0865,111500.0,NEAR OCEAN +-120.46,34.65,10.0,2143.0,593.0,1167.0,548.0,2.0819,103300.0,NEAR OCEAN +-120.46,34.65,14.0,885.0,223.0,533.0,224.0,2.5966,109300.0,NEAR OCEAN +-120.47,34.65,32.0,2193.0,430.0,1074.0,377.0,2.3333,130200.0,NEAR OCEAN +-120.47,34.65,16.0,2549.0,428.0,1486.0,432.0,4.2875,150700.0,NEAR OCEAN +-120.45,34.65,27.0,2253.0,382.0,1197.0,384.0,3.3203,134700.0,NEAR OCEAN +-120.44,34.65,30.0,2265.0,512.0,1402.0,471.0,1.975,134000.0,NEAR OCEAN +-120.45,34.65,27.0,2215.0,578.0,1544.0,527.0,1.9257,135300.0,NEAR OCEAN +-120.45,34.65,21.0,1182.0,243.0,733.0,251.0,3.1442,131600.0,NEAR OCEAN +-120.45,34.65,25.0,980.0,276.0,896.0,245.0,2.0,87500.0,NEAR OCEAN +-120.46,34.63,48.0,1408.0,301.0,682.0,279.0,2.9271,146600.0,NEAR OCEAN +-120.46,34.64,37.0,1697.0,334.0,740.0,272.0,2.3804,148000.0,NEAR OCEAN +-120.47,34.64,16.0,1912.0,406.0,1009.0,417.0,3.4063,138000.0,NEAR OCEAN +-120.45,34.64,17.0,1226.0,277.0,484.0,224.0,3.2167,112500.0,NEAR OCEAN +-120.45,34.64,34.0,2571.0,499.0,1105.0,451.0,3.7778,150000.0,NEAR OCEAN +-120.45,34.63,32.0,1840.0,309.0,828.0,333.0,4.5486,172400.0,NEAR OCEAN +-120.44,34.66,22.0,3231.0,549.0,1739.0,581.0,4.5417,142400.0,NEAR OCEAN +-120.45,34.66,7.0,3329.0,504.0,1462.0,452.0,4.7875,198300.0,NEAR OCEAN +-120.46,34.66,5.0,2904.0,702.0,1302.0,618.0,3.0081,135200.0,NEAR OCEAN +-120.47,34.66,4.0,3376.0,525.0,1684.0,535.0,4.9237,166600.0,NEAR OCEAN +-120.39,34.52,40.0,2162.0,395.0,1010.0,332.0,2.5667,239300.0,NEAR OCEAN +-120.48,34.66,4.0,1897.0,331.0,915.0,336.0,4.1563,172600.0,NEAR OCEAN +-120.48,34.65,26.0,1933.0,316.0,1001.0,319.0,4.4628,134400.0,NEAR OCEAN +-120.45,34.63,25.0,2445.0,368.0,983.0,363.0,4.9286,180100.0,NEAR OCEAN +-120.47,34.63,23.0,2441.0,463.0,1392.0,434.0,3.7917,142200.0,NEAR OCEAN +-120.46,34.74,15.0,2185.0,386.0,827.0,336.0,5.3765,223100.0,NEAR OCEAN +-120.45,34.71,21.0,1868.0,268.0,522.0,255.0,6.4678,249300.0,NEAR OCEAN +-120.46,34.71,17.0,2830.0,430.0,1035.0,416.0,4.9292,207200.0,NEAR OCEAN +-120.47,34.7,24.0,2387.0,385.0,1051.0,382.0,4.4595,152700.0,NEAR OCEAN +-120.47,34.71,21.0,2535.0,383.0,1012.0,368.0,5.6177,183800.0,NEAR OCEAN +-120.37,34.69,18.0,1868.0,315.0,747.0,265.0,4.7946,290600.0,NEAR OCEAN +-120.43,34.7,26.0,2353.0,389.0,1420.0,389.0,3.87,125800.0,NEAR OCEAN +-120.43,34.69,33.0,2054.0,373.0,1067.0,358.0,3.6023,128300.0,NEAR OCEAN +-120.44,34.68,6.0,2187.0,277.0,697.0,273.0,6.2685,307400.0,NEAR OCEAN +-119.86,34.42,23.0,1450.0,642.0,1258.0,607.0,1.179,225000.0,NEAR OCEAN +-119.88,34.4,25.0,2741.0,623.0,2272.0,624.0,2.2647,216700.0,NEAR OCEAN +-119.85,34.4,14.0,2307.0,650.0,5723.0,615.0,2.1652,37500.0,NEAR OCEAN +-119.88,34.43,14.0,2472.0,685.0,1292.0,621.0,3.3026,229500.0,NEAR OCEAN +-119.88,34.43,16.0,1734.0,365.0,962.0,391.0,4.4777,282500.0,NEAR OCEAN +-119.88,34.43,16.0,2206.0,541.0,1227.0,554.0,3.75,223100.0,NEAR OCEAN +-119.88,34.42,22.0,2367.0,492.0,1333.0,488.0,3.6304,312200.0,NEAR OCEAN +-119.91,34.4,24.0,2001.0,365.0,1170.0,330.0,6.0992,268800.0,NEAR OCEAN +-119.83,34.45,24.0,2168.0,373.0,934.0,366.0,5.4197,280900.0,NEAR OCEAN +-119.84,34.44,28.0,977.0,162.0,537.0,159.0,4.2404,274300.0,NEAR OCEAN +-119.84,34.45,26.0,4424.0,616.0,1839.0,601.0,6.3654,331200.0,NEAR OCEAN +-119.85,34.44,28.0,1765.0,301.0,1173.0,297.0,6.0256,276800.0,NEAR OCEAN +-119.81,34.47,26.0,4382.0,618.0,1728.0,587.0,7.4734,432200.0,NEAR OCEAN +-119.81,34.46,22.0,3488.0,452.0,1479.0,458.0,7.1687,384400.0,NEAR OCEAN +-119.85,34.48,23.0,1915.0,277.0,724.0,267.0,6.2987,348200.0,NEAR OCEAN +-119.88,34.44,27.0,4724.0,793.0,2394.0,738.0,5.5954,261400.0,NEAR OCEAN +-119.89,34.44,25.0,2786.0,470.0,1669.0,462.0,5.5184,268300.0,NEAR OCEAN +-119.89,34.44,25.0,3160.0,507.0,1514.0,523.0,5.0767,271200.0,NEAR OCEAN +-119.92,34.44,17.0,2143.0,324.0,1073.0,330.0,6.0321,402600.0,NEAR OCEAN +-120.05,34.47,21.0,1241.0,248.0,746.0,211.0,3.8056,425000.0,NEAR OCEAN +-119.86,34.38,28.0,1062.0,309.0,1058.0,305.0,1.5071,316700.0,NEAR OCEAN +-119.86,34.41,24.0,1576.0,580.0,1630.0,531.0,1.24,325000.0,NEAR OCEAN +-119.86,34.38,26.0,1626.0,375.0,1580.0,359.0,2.1471,187500.0,NEAR OCEAN +-119.81,34.45,24.0,3678.0,567.0,1554.0,570.0,6.5173,334000.0,NEAR OCEAN +-119.81,34.44,23.0,3172.0,588.0,1467.0,559.0,4.6806,288900.0,NEAR OCEAN +-119.82,34.45,24.0,3592.0,533.0,1683.0,528.0,6.7247,333800.0,NEAR OCEAN +-119.83,34.44,26.0,1739.0,402.0,599.0,368.0,3.0875,198400.0,NEAR OCEAN +-119.82,34.44,22.0,2239.0,475.0,1016.0,434.0,4.875,295400.0,NEAR OCEAN +-119.81,34.44,14.0,961.0,305.0,662.0,286.0,3.2115,206300.0,NEAR OCEAN +-119.82,34.43,15.0,1482.0,345.0,669.0,379.0,3.0773,112500.0,NEAR OCEAN +-119.82,34.44,16.0,1414.0,463.0,793.0,439.0,3.6034,150000.0,NEAR OCEAN +-119.82,34.44,28.0,1992.0,531.0,1622.0,509.0,2.7689,228200.0,NEAR OCEAN +-119.83,34.44,35.0,796.0,281.0,567.0,257.0,2.1389,260000.0,NEAR OCEAN +-119.83,34.43,31.0,798.0,346.0,699.0,301.0,2.1417,205000.0,NEAR OCEAN +-119.77,34.43,22.0,2552.0,443.0,1066.0,424.0,5.1271,342500.0,NEAR OCEAN +-119.77,34.43,28.0,3318.0,441.0,1604.0,404.0,9.7821,500001.0,NEAR OCEAN +-119.79,34.4,20.0,3104.0,415.0,1061.0,380.0,9.6885,500001.0,NEAR OCEAN +-119.8,34.44,27.0,2674.0,419.0,1176.0,416.0,5.0294,280200.0,NEAR OCEAN +-119.8,34.43,27.0,3143.0,537.0,1760.0,570.0,4.6957,271500.0,NEAR OCEAN +-119.8,34.43,22.0,2845.0,500.0,1456.0,454.0,5.6604,276400.0,NEAR OCEAN +-119.79,34.44,25.0,1479.0,314.0,977.0,309.0,4.1797,271800.0,NEAR OCEAN +-119.78,34.44,28.0,2864.0,495.0,1364.0,482.0,4.835,353400.0,NEAR OCEAN +-119.79,34.43,26.0,3611.0,563.0,2089.0,540.0,5.1615,276200.0,NEAR OCEAN +-121.9,37.36,38.0,1141.0,333.0,1028.0,291.0,2.7333,182500.0,<1H OCEAN +-121.89,37.36,37.0,1525.0,363.0,1075.0,374.0,2.8971,186100.0,<1H OCEAN +-121.88,37.36,30.0,2453.0,573.0,1845.0,530.0,3.7396,210700.0,<1H OCEAN +-121.89,37.35,44.0,1668.0,380.0,1143.0,365.0,3.2083,181900.0,<1H OCEAN +-121.9,37.36,47.0,1007.0,245.0,581.0,240.0,2.9545,237500.0,<1H OCEAN +-121.9,37.35,52.0,1034.0,239.0,531.0,223.0,2.7411,227100.0,<1H OCEAN +-121.9,37.35,42.0,2082.0,626.0,1396.0,610.0,3.25,185300.0,<1H OCEAN +-121.9,37.34,50.0,1345.0,287.0,791.0,254.0,3.5966,245800.0,<1H OCEAN +-121.9,37.34,52.0,241.0,69.0,385.0,64.0,2.619,212500.0,<1H OCEAN +-121.92,37.34,35.0,357.0,120.0,377.0,99.0,3.0139,204200.0,<1H OCEAN +-121.92,37.34,42.0,2101.0,524.0,1212.0,526.0,3.6389,239200.0,<1H OCEAN +-121.92,37.34,52.0,2584.0,491.0,1087.0,433.0,4.4,391300.0,<1H OCEAN +-121.92,37.33,52.0,2009.0,338.0,841.0,338.0,5.5259,295800.0,<1H OCEAN +-121.92,37.33,52.0,2962.0,557.0,1215.0,506.0,4.7768,301100.0,<1H OCEAN +-121.93,37.33,44.0,1449.0,291.0,676.0,282.0,3.575,292200.0,<1H OCEAN +-121.93,37.33,44.0,2142.0,358.0,846.0,375.0,5.4273,421000.0,<1H OCEAN +-121.94,37.33,34.0,1809.0,317.0,863.0,302.0,4.3,330500.0,<1H OCEAN +-121.91,37.34,35.0,2189.0,607.0,1193.0,562.0,2.8042,240900.0,<1H OCEAN +-121.91,37.33,28.0,454.0,147.0,366.0,140.0,2.9853,187500.0,<1H OCEAN +-121.91,37.33,52.0,2562.0,410.0,973.0,398.0,4.8854,330600.0,<1H OCEAN +-121.92,37.33,52.0,2125.0,382.0,930.0,387.0,5.2831,299500.0,<1H OCEAN +-121.9,37.33,34.0,197.0,44.0,152.0,47.0,4.05,200000.0,<1H OCEAN +-121.91,37.33,52.0,2212.0,563.0,1195.0,532.0,2.894,209500.0,<1H OCEAN +-121.89,37.33,49.0,658.0,318.0,467.0,316.0,0.7068,200000.0,<1H OCEAN +-121.9,37.33,11.0,1283.0,390.0,718.0,345.0,4.226,166700.0,<1H OCEAN +-121.9,37.33,52.0,1009.0,231.0,929.0,210.0,2.5,162500.0,<1H OCEAN +-121.88,37.34,40.0,1547.0,625.0,1493.0,543.0,1.2887,212500.0,<1H OCEAN +-121.89,37.33,6.0,1495.0,552.0,1087.0,557.0,2.8798,225000.0,<1H OCEAN +-121.88,37.33,36.0,1904.0,689.0,3561.0,632.0,2.0972,187500.0,<1H OCEAN +-121.89,37.35,48.0,1562.0,439.0,1469.0,424.0,2.5673,177500.0,<1H OCEAN +-121.89,37.34,46.0,1197.0,416.0,898.0,370.0,2.1714,190600.0,<1H OCEAN +-121.89,37.34,20.0,1106.0,494.0,851.0,448.0,0.8894,350000.0,<1H OCEAN +-121.89,37.34,43.0,1423.0,467.0,1013.0,428.0,1.6708,204200.0,<1H OCEAN +-121.88,37.34,52.0,1390.0,365.0,921.0,352.0,2.1442,188900.0,<1H OCEAN +-121.88,37.36,42.0,2087.0,402.0,1342.0,423.0,4.2149,199000.0,<1H OCEAN +-121.88,37.35,49.0,1728.0,350.0,1146.0,391.0,3.5781,193000.0,<1H OCEAN +-121.89,37.35,47.0,2879.0,631.0,2229.0,606.0,3.2599,183100.0,<1H OCEAN +-121.89,37.35,43.0,1185.0,296.0,933.0,244.0,2.925,170800.0,<1H OCEAN +-121.89,37.35,44.0,2019.0,615.0,1243.0,518.0,2.0549,193800.0,<1H OCEAN +-121.88,37.35,43.0,1086.0,219.0,715.0,226.0,4.2381,193500.0,<1H OCEAN +-121.87,37.35,37.0,1566.0,375.0,1223.0,346.0,3.2793,174500.0,<1H OCEAN +-121.88,37.34,44.0,1267.0,353.0,1018.0,327.0,2.4196,194400.0,<1H OCEAN +-121.88,37.35,52.0,1704.0,418.0,1336.0,411.0,2.8167,183500.0,<1H OCEAN +-121.87,37.34,52.0,1170.0,215.0,604.0,207.0,2.6667,325900.0,<1H OCEAN +-121.87,37.34,52.0,1087.0,166.0,650.0,194.0,6.6345,309000.0,<1H OCEAN +-121.87,37.34,39.0,2479.0,541.0,1990.0,506.0,2.4306,289100.0,<1H OCEAN +-121.88,37.34,52.0,867.0,232.0,1264.0,227.0,2.6312,302900.0,<1H OCEAN +-121.87,37.35,27.0,3500.0,1036.0,3019.0,955.0,2.9222,153700.0,<1H OCEAN +-121.86,37.35,46.0,1448.0,330.0,1094.0,331.0,2.4968,174100.0,<1H OCEAN +-121.87,37.35,52.0,1557.0,424.0,1580.0,434.0,2.3277,183700.0,<1H OCEAN +-121.86,37.34,29.0,5274.0,1625.0,6234.0,1639.0,2.5947,177300.0,<1H OCEAN +-121.86,37.34,40.0,2277.0,508.0,1718.0,434.0,3.0089,185200.0,<1H OCEAN +-121.88,37.33,41.0,395.0,164.0,549.0,184.0,2.375,175000.0,<1H OCEAN +-121.88,37.33,35.0,3300.0,1154.0,3120.0,1075.0,1.473,213600.0,<1H OCEAN +-121.87,37.33,37.0,3137.0,685.0,2048.0,651.0,3.0156,270300.0,<1H OCEAN +-121.88,37.33,45.0,1192.0,371.0,1084.0,345.0,2.8594,205900.0,<1H OCEAN +-121.89,37.33,42.0,1279.0,358.0,1254.0,340.0,2.2583,192500.0,<1H OCEAN +-121.89,37.32,34.0,1014.0,246.0,952.0,215.0,2.8864,172500.0,<1H OCEAN +-121.88,37.32,30.0,1242.0,338.0,1438.0,325.0,2.6607,169300.0,<1H OCEAN +-121.88,37.32,40.0,1331.0,374.0,1276.0,389.0,2.7546,172500.0,<1H OCEAN +-121.89,37.32,43.0,1105.0,241.0,982.0,206.0,2.1149,184900.0,<1H OCEAN +-121.89,37.32,41.0,977.0,265.0,865.0,253.0,3.2317,184800.0,<1H OCEAN +-121.89,37.31,52.0,1994.0,404.0,1014.0,389.0,4.3882,223600.0,<1H OCEAN +-121.9,37.31,52.0,2125.0,431.0,1014.0,443.0,5.8186,281100.0,<1H OCEAN +-121.9,37.32,48.0,1274.0,313.0,971.0,291.0,3.7738,220600.0,<1H OCEAN +-121.91,37.32,42.0,1067.0,256.0,608.0,280.0,3.0096,180800.0,<1H OCEAN +-121.91,37.31,16.0,2962.0,898.0,1555.0,795.0,2.5804,216300.0,<1H OCEAN +-121.93,37.32,52.0,1460.0,492.0,1165.0,455.0,2.5833,167500.0,<1H OCEAN +-121.94,37.33,37.0,818.0,269.0,576.0,261.0,2.1902,250000.0,<1H OCEAN +-121.94,37.32,46.0,2451.0,472.0,1163.0,448.0,4.8519,225800.0,<1H OCEAN +-121.93,37.32,51.0,2711.0,728.0,1607.0,724.0,3.0,184700.0,<1H OCEAN +-121.92,37.32,39.0,836.0,254.0,704.0,272.0,3.5256,192600.0,<1H OCEAN +-121.92,37.32,31.0,1902.0,554.0,1485.0,494.0,2.4207,165600.0,<1H OCEAN +-121.92,37.32,28.0,2089.0,641.0,1666.0,587.0,2.3633,198400.0,<1H OCEAN +-121.93,37.32,50.0,1135.0,215.0,500.0,207.0,4.2614,211300.0,<1H OCEAN +-121.94,37.31,5.0,2364.0,578.0,1102.0,502.0,5.2642,246400.0,<1H OCEAN +-121.94,37.31,30.0,1680.0,312.0,858.0,310.0,4.0474,280500.0,<1H OCEAN +-121.94,37.3,26.0,4348.0,814.0,2347.0,810.0,4.7275,293000.0,<1H OCEAN +-121.93,37.3,16.0,1111.0,226.0,317.0,199.0,2.7153,233300.0,<1H OCEAN +-121.93,37.31,26.0,2182.0,704.0,1638.0,704.0,2.8981,229800.0,<1H OCEAN +-121.92,37.31,34.0,876.0,150.0,424.0,163.0,5.2769,241100.0,<1H OCEAN +-121.92,37.31,26.0,3242.0,780.0,2100.0,741.0,3.1107,247900.0,<1H OCEAN +-121.93,37.3,16.0,2111.0,485.0,1285.0,499.0,5.0477,292500.0,<1H OCEAN +-121.93,37.31,29.0,1377.0,430.0,969.0,399.0,2.6573,252800.0,<1H OCEAN +-121.92,37.31,13.0,6035.0,1551.0,2946.0,1481.0,4.0524,213900.0,<1H OCEAN +-121.93,37.3,14.0,6277.0,1742.0,3025.0,1630.0,4.0653,234200.0,<1H OCEAN +-121.92,37.3,36.0,2088.0,358.0,772.0,347.0,4.2762,310100.0,<1H OCEAN +-121.92,37.3,35.0,1335.0,296.0,635.0,296.0,3.6053,345800.0,<1H OCEAN +-121.91,37.31,28.0,3104.0,811.0,1488.0,754.0,3.6429,332600.0,<1H OCEAN +-121.91,37.31,46.0,3052.0,587.0,1373.0,590.0,4.7287,340000.0,<1H OCEAN +-121.9,37.3,39.0,3627.0,666.0,1531.0,635.0,4.537,345900.0,<1H OCEAN +-121.91,37.3,43.0,828.0,151.0,446.0,145.0,4.4375,327600.0,<1H OCEAN +-121.91,37.3,31.0,2095.0,427.0,829.0,405.0,3.6563,344700.0,<1H OCEAN +-121.91,37.3,31.0,616.0,131.0,185.0,107.0,3.625,265000.0,<1H OCEAN +-121.89,37.31,40.0,1844.0,340.0,719.0,305.0,3.3682,235200.0,<1H OCEAN +-121.88,37.31,28.0,3085.0,552.0,1277.0,512.0,4.5795,262800.0,<1H OCEAN +-121.89,37.3,47.0,1604.0,284.0,639.0,278.0,5.8415,283300.0,<1H OCEAN +-121.89,37.3,52.0,2071.0,362.0,825.0,364.0,4.2414,284800.0,<1H OCEAN +-121.89,37.31,47.0,2986.0,627.0,1399.0,613.0,3.7455,247400.0,<1H OCEAN +-121.9,37.3,52.0,1456.0,269.0,582.0,277.0,5.036,296600.0,<1H OCEAN +-121.9,37.3,52.0,1575.0,284.0,629.0,284.0,5.6437,312000.0,<1H OCEAN +-121.88,37.3,42.0,1867.0,398.0,927.0,389.0,4.325,247000.0,<1H OCEAN +-121.88,37.29,44.0,2026.0,396.0,908.0,383.0,4.1406,274100.0,<1H OCEAN +-121.89,37.3,47.0,2355.0,426.0,961.0,428.0,5.3955,282300.0,<1H OCEAN +-121.89,37.3,46.0,2639.0,448.0,938.0,424.0,5.0662,331600.0,<1H OCEAN +-121.89,37.29,38.0,1568.0,351.0,710.0,339.0,2.7042,286600.0,<1H OCEAN +-121.9,37.29,26.0,1797.0,244.0,626.0,244.0,7.8575,424600.0,<1H OCEAN +-121.9,37.29,36.0,1389.0,225.0,623.0,223.0,6.6331,283300.0,<1H OCEAN +-121.92,37.29,34.0,943.0,135.0,378.0,139.0,5.1765,344600.0,<1H OCEAN +-121.91,37.29,36.0,945.0,149.0,371.0,158.0,5.6266,320500.0,<1H OCEAN +-121.92,37.29,35.0,2189.0,307.0,800.0,320.0,7.6659,426900.0,<1H OCEAN +-121.91,37.29,18.0,3597.0,664.0,1321.0,593.0,5.3077,351400.0,<1H OCEAN +-121.93,37.29,36.0,2241.0,437.0,989.0,442.0,3.9625,288200.0,<1H OCEAN +-121.92,37.29,32.0,1260.0,199.0,560.0,207.0,6.5858,346700.0,<1H OCEAN +-121.93,37.28,34.0,2422.0,370.0,1010.0,395.0,5.6494,376200.0,<1H OCEAN +-121.93,37.28,10.0,3163.0,832.0,1537.0,797.0,4.1674,214000.0,<1H OCEAN +-121.94,37.28,18.0,4356.0,1334.0,1968.0,1245.0,3.6294,240000.0,<1H OCEAN +-121.94,37.28,27.0,2859.0,464.0,1144.0,430.0,5.0822,327500.0,<1H OCEAN +-121.93,37.27,30.0,2862.0,544.0,1387.0,542.0,5.1104,278100.0,<1H OCEAN +-121.94,37.27,23.0,1932.0,552.0,997.0,482.0,3.662,211900.0,<1H OCEAN +-121.94,37.27,39.0,1030.0,191.0,537.0,175.0,3.9265,236900.0,<1H OCEAN +-121.94,37.26,43.0,2104.0,388.0,1137.0,403.0,4.9236,238000.0,<1H OCEAN +-121.94,37.26,21.0,3843.0,716.0,1850.0,705.0,4.6758,264200.0,<1H OCEAN +-121.95,37.26,10.0,3611.0,803.0,1599.0,716.0,5.2,248700.0,<1H OCEAN +-121.95,37.26,34.0,1482.0,255.0,584.0,246.0,5.5121,264700.0,<1H OCEAN +-121.94,37.25,16.0,3942.0,749.0,1894.0,737.0,5.2894,332800.0,<1H OCEAN +-121.93,37.26,39.0,1103.0,175.0,446.0,163.0,2.8125,291300.0,<1H OCEAN +-121.92,37.26,33.0,1306.0,259.0,762.0,237.0,4.5208,230700.0,<1H OCEAN +-121.92,37.25,36.0,3874.0,656.0,1826.0,639.0,4.9662,258500.0,<1H OCEAN +-121.91,37.25,31.0,1944.0,343.0,975.0,334.0,4.9205,240500.0,<1H OCEAN +-121.92,37.28,27.0,3028.0,486.0,1284.0,498.0,4.5833,308800.0,<1H OCEAN +-121.92,37.27,33.0,3280.0,569.0,1583.0,559.0,4.5625,253500.0,<1H OCEAN +-121.93,37.27,35.0,1855.0,345.0,985.0,329.0,6.0196,255100.0,<1H OCEAN +-121.93,37.27,28.0,3428.0,753.0,1753.0,729.0,4.1033,281000.0,<1H OCEAN +-121.92,37.28,26.0,6201.0,783.0,2381.0,819.0,7.9819,397000.0,<1H OCEAN +-121.92,37.27,29.0,5536.0,862.0,2651.0,881.0,5.6358,282100.0,<1H OCEAN +-121.91,37.27,30.0,4412.0,862.0,2168.0,772.0,5.0062,232000.0,<1H OCEAN +-121.91,37.28,29.0,5650.0,817.0,2098.0,813.0,6.4285,337300.0,<1H OCEAN +-121.9,37.28,26.0,3756.0,,1408.0,535.0,5.6427,320000.0,<1H OCEAN +-121.9,37.27,33.0,3410.0,583.0,1739.0,588.0,5.0714,255600.0,<1H OCEAN +-121.9,37.25,28.0,2714.0,502.0,1389.0,490.0,5.7385,240400.0,<1H OCEAN +-121.9,37.25,20.0,5483.0,1079.0,2892.0,1057.0,4.6845,250000.0,<1H OCEAN +-121.9,37.27,28.0,4538.0,685.0,1996.0,667.0,5.4609,263600.0,<1H OCEAN +-121.9,37.26,20.0,4447.0,661.0,2062.0,660.0,6.8088,283300.0,<1H OCEAN +-121.91,37.26,25.0,4258.0,719.0,2290.0,743.0,5.1461,267200.0,<1H OCEAN +-121.91,37.26,32.0,3776.0,620.0,1790.0,612.0,5.4675,261100.0,<1H OCEAN +-121.91,37.26,32.0,3983.0,876.0,1989.0,794.0,3.5625,255200.0,<1H OCEAN +-121.89,37.25,23.0,2705.0,449.0,1180.0,442.0,6.0791,316500.0,<1H OCEAN +-121.89,37.26,26.0,1864.0,331.0,956.0,325.0,5.5,231700.0,<1H OCEAN +-121.88,37.26,25.0,3025.0,689.0,1755.0,661.0,3.8893,218600.0,<1H OCEAN +-121.88,37.26,13.0,1893.0,487.0,1018.0,464.0,3.8047,204700.0,<1H OCEAN +-121.88,37.26,13.0,1676.0,471.0,710.0,406.0,3.8936,225900.0,<1H OCEAN +-121.88,37.25,24.0,968.0,240.0,631.0,250.0,2.8636,240300.0,<1H OCEAN +-121.89,37.25,21.0,2080.0,352.0,1040.0,325.0,5.2887,264500.0,<1H OCEAN +-121.89,37.25,26.0,1741.0,323.0,1007.0,339.0,4.7069,234800.0,<1H OCEAN +-121.89,37.29,36.0,2959.0,529.0,1125.0,520.0,4.2614,268800.0,<1H OCEAN +-121.89,37.28,35.0,2418.0,375.0,988.0,374.0,6.0936,365400.0,<1H OCEAN +-121.9,37.28,34.0,4613.0,749.0,2050.0,725.0,5.3922,302900.0,<1H OCEAN +-121.88,37.28,33.0,2951.0,529.0,1288.0,521.0,4.1554,313100.0,<1H OCEAN +-121.89,37.28,32.0,4308.0,717.0,2002.0,695.0,4.1645,281900.0,<1H OCEAN +-121.88,37.27,27.0,2019.0,335.0,1020.0,351.0,5.8178,267400.0,<1H OCEAN +-121.88,37.27,24.0,4567.0,688.0,2102.0,695.0,5.6895,289000.0,<1H OCEAN +-121.89,37.26,25.0,3319.0,531.0,1560.0,502.0,5.8479,263300.0,<1H OCEAN +-121.89,37.27,28.0,1481.0,256.0,688.0,221.0,5.2088,240900.0,<1H OCEAN +-121.87,37.32,39.0,1839.0,471.0,1528.0,456.0,2.6818,184900.0,<1H OCEAN +-121.87,37.32,36.0,1471.0,360.0,1182.0,326.0,2.7031,175800.0,<1H OCEAN +-121.88,37.32,38.0,1787.0,508.0,2113.0,530.0,2.6386,177600.0,<1H OCEAN +-121.88,37.32,45.0,2213.0,564.0,1920.0,514.0,3.2806,164200.0,<1H OCEAN +-121.86,37.31,24.0,1939.0,652.0,1808.0,625.0,2.2259,112500.0,<1H OCEAN +-121.87,37.3,28.0,859.0,199.0,455.0,211.0,2.3293,215900.0,<1H OCEAN +-121.87,37.31,6.0,3797.0,984.0,2437.0,904.0,3.6802,152400.0,<1H OCEAN +-121.87,37.3,14.0,360.0,124.0,134.0,84.0,2.7411,112500.0,<1H OCEAN +-121.88,37.3,16.0,2692.0,749.0,1674.0,681.0,2.6763,191100.0,<1H OCEAN +-121.86,37.32,13.0,2519.0,581.0,2094.0,530.0,4.3621,173400.0,<1H OCEAN +-121.85,37.33,19.0,2228.0,559.0,2845.0,551.0,2.6,172800.0,<1H OCEAN +-121.84,37.32,14.0,5762.0,1538.0,3979.0,1389.0,3.6953,192600.0,<1H OCEAN +-121.85,37.33,16.0,2987.0,874.0,4241.0,841.0,2.8024,127900.0,<1H OCEAN +-121.85,37.33,19.0,735.0,158.0,597.0,134.0,4.5208,188100.0,<1H OCEAN +-121.84,37.32,22.0,3015.0,581.0,2491.0,530.0,4.3419,176300.0,<1H OCEAN +-121.84,37.32,16.0,1866.0,364.0,1835.0,412.0,5.3363,212800.0,<1H OCEAN +-121.87,37.29,18.0,1892.0,568.0,974.0,553.0,2.3715,228000.0,<1H OCEAN +-121.87,37.28,21.0,3305.0,749.0,2459.0,701.0,3.9688,249600.0,<1H OCEAN +-121.86,37.29,14.0,6160.0,1222.0,2472.0,1204.0,4.1444,178400.0,<1H OCEAN +-121.85,37.28,17.0,4208.0,954.0,1476.0,904.0,2.3971,87500.0,<1H OCEAN +-121.83,37.3,16.0,5684.0,1386.0,4203.0,1318.0,3.1964,185800.0,<1H OCEAN +-121.85,37.3,19.0,6275.0,1546.0,4312.0,1466.0,2.7768,178600.0,<1H OCEAN +-121.84,37.29,24.0,3403.0,656.0,2829.0,612.0,4.775,191900.0,<1H OCEAN +-121.84,37.29,4.0,2937.0,648.0,1780.0,665.0,4.3851,160400.0,<1H OCEAN +-121.84,37.28,18.0,2749.0,633.0,1779.0,561.0,3.925,166100.0,<1H OCEAN +-121.83,37.31,19.0,11181.0,1895.0,7817.0,1853.0,5.6058,232700.0,<1H OCEAN +-121.83,37.3,17.0,1299.0,211.0,825.0,217.0,4.5,235800.0,<1H OCEAN +-121.81,37.29,15.0,5957.0,1037.0,3838.0,997.0,6.2907,253100.0,<1H OCEAN +-121.81,37.28,17.0,2277.0,428.0,1887.0,422.0,5.7078,217000.0,<1H OCEAN +-121.82,37.28,33.0,2873.0,489.0,1946.0,475.0,5.0709,176400.0,<1H OCEAN +-121.83,37.29,10.0,1828.0,453.0,1356.0,409.0,4.5943,123500.0,<1H OCEAN +-121.83,37.29,20.0,1649.0,408.0,1729.0,362.0,3.3833,115200.0,<1H OCEAN +-121.83,37.28,33.0,1115.0,250.0,1168.0,261.0,3.9009,178600.0,<1H OCEAN +-121.83,37.28,19.0,2644.0,833.0,2317.0,780.0,3.1042,183100.0,<1H OCEAN +-121.82,37.28,31.0,1340.0,235.0,1336.0,270.0,4.2361,179500.0,<1H OCEAN +-121.83,37.29,20.0,2308.0,461.0,2223.0,456.0,4.2589,191000.0,<1H OCEAN +-121.82,37.29,16.0,2085.0,394.0,1705.0,391.0,5.0225,222800.0,<1H OCEAN +-121.83,37.32,17.0,1887.0,664.0,1906.0,597.0,2.5652,165300.0,<1H OCEAN +-121.82,37.31,22.0,2044.0,402.0,1925.0,429.0,3.7102,177500.0,<1H OCEAN +-121.82,37.31,15.0,1504.0,294.0,1267.0,291.0,5.5145,219400.0,<1H OCEAN +-121.81,37.31,14.0,2731.0,578.0,1109.0,551.0,3.1382,139700.0,<1H OCEAN +-121.81,37.31,15.0,1898.0,395.0,1527.0,381.0,4.4792,212500.0,<1H OCEAN +-121.81,37.32,26.0,2528.0,511.0,2677.0,512.0,4.1165,164900.0,<1H OCEAN +-121.82,37.32,10.0,2506.0,623.0,2634.0,622.0,3.135,231400.0,<1H OCEAN +-121.82,37.33,23.0,3279.0,647.0,2582.0,630.0,4.3782,175800.0,<1H OCEAN +-121.83,37.32,26.0,1125.0,210.0,943.0,214.0,4.825,181000.0,<1H OCEAN +-121.81,37.33,4.0,5532.0,778.0,3651.0,770.0,7.2982,343000.0,<1H OCEAN +-121.8,37.34,25.0,1642.0,297.0,1146.0,279.0,5.2088,231400.0,<1H OCEAN +-121.8,37.34,20.0,2686.0,414.0,1507.0,405.0,5.8068,263900.0,<1H OCEAN +-121.79,37.34,20.0,2018.0,328.0,1196.0,323.0,4.9318,262400.0,<1H OCEAN +-121.8,37.35,15.0,2781.0,498.0,1389.0,475.0,5.614,223300.0,<1H OCEAN +-121.78,37.34,21.0,1959.0,292.0,891.0,300.0,7.375,338400.0,<1H OCEAN +-121.75,37.35,18.0,1947.0,250.0,605.0,184.0,8.1871,500001.0,<1H OCEAN +-121.77,37.33,8.0,3088.0,474.0,1799.0,456.0,7.2707,355300.0,<1H OCEAN +-121.77,37.33,9.0,3160.0,468.0,1675.0,470.0,7.5443,348400.0,<1H OCEAN +-121.78,37.34,11.0,3195.0,410.0,1774.0,418.0,7.0671,378200.0,<1H OCEAN +-121.79,37.33,13.0,2978.0,505.0,1794.0,485.0,6.6813,277800.0,<1H OCEAN +-121.79,37.33,18.0,3611.0,614.0,2381.0,642.0,5.6345,231000.0,<1H OCEAN +-121.79,37.33,10.0,3283.0,550.0,2491.0,522.0,6.6633,283700.0,<1H OCEAN +-121.78,37.33,10.0,2829.0,394.0,1510.0,386.0,6.68,359500.0,<1H OCEAN +-121.8,37.32,20.0,2473.0,476.0,2228.0,501.0,5.6817,224200.0,<1H OCEAN +-121.8,37.32,23.0,1829.0,346.0,1277.0,324.0,4.8092,217400.0,<1H OCEAN +-121.8,37.32,14.0,4412.0,924.0,2698.0,891.0,4.7027,227600.0,<1H OCEAN +-121.79,37.32,6.0,2850.0,561.0,2160.0,581.0,5.5336,241900.0,<1H OCEAN +-121.79,37.32,20.0,3034.0,451.0,1669.0,430.0,6.2742,241300.0,<1H OCEAN +-121.76,37.33,5.0,4153.0,719.0,2435.0,697.0,5.6306,286200.0,<1H OCEAN +-121.81,37.3,14.0,1870.0,348.0,1214.0,347.0,4.9769,186500.0,<1H OCEAN +-121.81,37.31,15.0,1794.0,366.0,1533.0,371.0,5.7843,209900.0,<1H OCEAN +-121.8,37.31,15.0,1807.0,378.0,1277.0,341.0,4.5045,164500.0,<1H OCEAN +-121.8,37.3,16.0,906.0,149.0,605.0,148.0,4.8173,235600.0,<1H OCEAN +-121.81,37.3,15.0,1929.0,345.0,1683.0,347.0,5.5248,235600.0,<1H OCEAN +-121.8,37.31,21.0,2630.0,446.0,1789.0,389.0,5.0543,232000.0,<1H OCEAN +-121.79,37.31,22.0,2199.0,361.0,1270.0,386.0,5.1149,235700.0,<1H OCEAN +-121.78,37.31,25.0,2093.0,297.0,983.0,338.0,6.4664,271500.0,<1H OCEAN +-121.79,37.3,10.0,5469.0,950.0,3083.0,906.0,5.9399,241900.0,<1H OCEAN +-121.76,37.28,17.0,660.0,129.0,431.0,123.0,4.9097,241000.0,<1H OCEAN +-121.74,37.3,12.0,1961.0,280.0,985.0,269.0,6.7159,362700.0,<1H OCEAN +-121.78,37.31,7.0,1973.0,328.0,1047.0,303.0,6.234,292200.0,<1H OCEAN +-121.77,37.31,16.0,1649.0,228.0,769.0,230.0,6.6455,302600.0,<1H OCEAN +-121.76,37.29,15.0,2267.0,348.0,1150.0,327.0,7.1267,277900.0,<1H OCEAN +-121.76,37.3,6.0,3526.0,559.0,1378.0,491.0,6.1463,335500.0,<1H OCEAN +-121.75,37.3,23.0,1801.0,415.0,548.0,393.0,2.5052,133700.0,<1H OCEAN +-121.74,37.29,6.0,7292.0,1295.0,2468.0,1262.0,5.6411,294700.0,<1H OCEAN +-121.75,37.29,15.0,1486.0,310.0,455.0,296.0,4.3365,221000.0,<1H OCEAN +-121.84,37.34,33.0,1019.0,191.0,938.0,215.0,4.0929,165000.0,<1H OCEAN +-121.84,37.33,28.0,1535.0,330.0,1937.0,317.0,4.1146,160100.0,<1H OCEAN +-121.84,37.33,26.0,1934.0,408.0,2059.0,416.0,3.6765,163600.0,<1H OCEAN +-121.83,37.32,21.0,4559.0,1163.0,5124.0,1124.0,3.2052,179000.0,<1H OCEAN +-121.82,37.35,24.0,2298.0,575.0,2409.0,569.0,3.4509,182400.0,<1H OCEAN +-121.82,37.34,23.0,7609.0,1446.0,6034.0,1414.0,4.8424,195300.0,<1H OCEAN +-121.81,37.35,28.0,3477.0,671.0,2990.0,648.0,4.4671,172600.0,<1H OCEAN +-121.81,37.35,29.0,2396.0,452.0,2000.0,481.0,4.375,185500.0,<1H OCEAN +-121.8,37.35,27.0,2358.0,415.0,1562.0,383.0,5.2297,192800.0,<1H OCEAN +-121.8,37.35,17.0,2529.0,423.0,1756.0,429.0,5.1017,240700.0,<1H OCEAN +-121.84,37.34,27.0,2512.0,526.0,3033.0,526.0,4.25,162900.0,<1H OCEAN +-121.83,37.33,27.0,3127.0,610.0,3257.0,604.0,4.6333,173600.0,<1H OCEAN +-121.83,37.34,21.0,6404.0,1232.0,6047.0,1235.0,4.2098,193400.0,<1H OCEAN +-121.83,37.34,26.0,1848.0,339.0,1952.0,327.0,4.087,182500.0,<1H OCEAN +-121.87,37.36,34.0,938.0,242.0,769.0,226.0,3.5625,194500.0,<1H OCEAN +-121.86,37.35,35.0,2391.0,605.0,1886.0,595.0,2.5551,182100.0,<1H OCEAN +-121.86,37.35,43.0,1536.0,371.0,1256.0,357.0,2.8,153300.0,<1H OCEAN +-121.85,37.34,27.0,1481.0,409.0,1505.0,391.0,2.5769,137500.0,<1H OCEAN +-121.84,37.35,22.0,2914.0,768.0,2962.0,762.0,2.2031,164000.0,<1H OCEAN +-121.85,37.35,29.0,3515.0,807.0,3572.0,776.0,2.7562,160100.0,<1H OCEAN +-121.84,37.35,20.0,3375.0,867.0,4610.0,860.0,2.6894,182200.0,<1H OCEAN +-121.86,37.37,15.0,8162.0,2124.0,8793.0,2086.0,3.3306,210300.0,<1H OCEAN +-121.84,37.37,15.0,3315.0,1042.0,2749.0,1059.0,2.3199,140100.0,<1H OCEAN +-121.85,37.36,15.0,3148.0,1116.0,3556.0,1037.0,3.0466,159600.0,<1H OCEAN +-121.85,37.36,18.0,1525.0,485.0,1705.0,448.0,3.7198,128600.0,<1H OCEAN +-121.85,37.36,11.0,2109.0,592.0,2744.0,607.0,4.0452,205900.0,<1H OCEAN +-121.86,37.36,31.0,1602.0,358.0,1179.0,354.0,4.4896,156800.0,<1H OCEAN +-121.84,37.38,34.0,762.0,182.0,611.0,193.0,3.5625,201800.0,<1H OCEAN +-121.85,37.38,12.0,12980.0,2568.0,8190.0,2515.0,5.2415,286500.0,<1H OCEAN +-121.84,37.39,31.0,5524.0,914.0,2848.0,879.0,5.5592,229900.0,<1H OCEAN +-121.83,37.38,15.0,4430.0,992.0,3278.0,1018.0,4.5533,209900.0,<1H OCEAN +-121.84,37.38,33.0,835.0,181.0,781.0,169.0,5.1082,195800.0,<1H OCEAN +-121.83,37.38,31.0,3633.0,843.0,2677.0,797.0,3.2222,184800.0,<1H OCEAN +-121.83,37.37,43.0,821.0,149.0,370.0,135.0,4.25,209100.0,<1H OCEAN +-121.83,37.37,43.0,1461.0,284.0,800.0,258.0,3.2279,182400.0,<1H OCEAN +-121.84,37.37,42.0,1237.0,232.0,900.0,241.0,3.8571,187500.0,<1H OCEAN +-121.84,37.37,28.0,1579.0,339.0,1252.0,353.0,4.1615,214800.0,<1H OCEAN +-121.82,37.37,40.0,802.0,149.0,445.0,143.0,4.0446,196300.0,<1H OCEAN +-121.83,37.36,29.0,4045.0,885.0,3036.0,845.0,3.1982,171700.0,<1H OCEAN +-121.83,37.36,22.0,3936.0,860.0,3508.0,877.0,4.2312,183800.0,<1H OCEAN +-121.83,37.35,31.0,2914.0,715.0,3547.0,645.0,3.7143,178600.0,<1H OCEAN +-121.82,37.37,41.0,1558.0,281.0,970.0,304.0,4.4167,215200.0,<1H OCEAN +-121.81,37.37,26.0,2987.0,539.0,1931.0,518.0,5.1099,213100.0,<1H OCEAN +-121.82,37.36,33.0,1624.0,337.0,1412.0,323.0,4.0385,167600.0,<1H OCEAN +-121.82,37.36,34.0,1834.0,377.0,1450.0,347.0,3.7188,161500.0,<1H OCEAN +-121.82,37.37,42.0,2913.0,577.0,1873.0,580.0,3.7214,167900.0,<1H OCEAN +-121.81,37.39,34.0,2218.0,286.0,827.0,299.0,7.4559,456500.0,<1H OCEAN +-121.82,37.39,37.0,4137.0,636.0,1569.0,578.0,6.1008,286200.0,<1H OCEAN +-121.82,37.38,32.0,3747.0,665.0,1687.0,649.0,5.4949,330800.0,<1H OCEAN +-121.81,37.38,29.0,570.0,76.0,244.0,72.0,12.3292,416700.0,<1H OCEAN +-121.82,37.38,32.0,1650.0,246.0,768.0,263.0,6.8462,320900.0,<1H OCEAN +-121.81,37.37,24.0,962.0,146.0,492.0,155.0,7.2861,328000.0,<1H OCEAN +-121.79,37.38,22.0,3650.0,527.0,1637.0,520.0,5.3774,325600.0,<1H OCEAN +-121.81,37.36,20.0,3189.0,420.0,1234.0,389.0,7.5813,374100.0,<1H OCEAN +-121.87,37.39,9.0,2522.0,547.0,1591.0,481.0,4.9091,259700.0,<1H OCEAN +-121.87,37.39,16.0,2655.0,487.0,1862.0,448.0,6.057,246800.0,<1H OCEAN +-121.87,37.38,16.0,1050.0,245.0,722.0,228.0,4.5187,163500.0,<1H OCEAN +-121.87,37.38,16.0,3275.0,529.0,1863.0,527.0,5.5429,269100.0,<1H OCEAN +-121.88,37.39,13.0,3334.0,565.0,2240.0,561.0,7.105,273900.0,<1H OCEAN +-121.87,37.41,17.0,3719.0,588.0,2089.0,561.0,6.7867,273700.0,<1H OCEAN +-121.87,37.4,16.0,1767.0,268.0,1061.0,280.0,6.9584,351600.0,<1H OCEAN +-121.86,37.4,19.0,4043.0,764.0,2196.0,708.0,6.1504,268400.0,<1H OCEAN +-121.87,37.39,16.0,1334.0,389.0,1103.0,415.0,3.7153,229800.0,<1H OCEAN +-121.86,37.39,17.0,1777.0,328.0,1235.0,329.0,5.4225,258100.0,<1H OCEAN +-121.85,37.39,15.0,8748.0,1547.0,4784.0,1524.0,5.8322,276600.0,<1H OCEAN +-121.82,37.42,13.0,3752.0,572.0,1581.0,526.0,6.1091,329400.0,<1H OCEAN +-121.81,37.41,25.0,2496.0,351.0,1034.0,367.0,7.0544,320700.0,<1H OCEAN +-121.84,37.4,25.0,1866.0,271.0,840.0,275.0,6.8677,288500.0,<1H OCEAN +-121.83,37.4,27.0,1145.0,150.0,492.0,160.0,5.716,348300.0,<1H OCEAN +-121.9,37.4,16.0,2998.0,603.0,1606.0,615.0,3.7622,150000.0,<1H OCEAN +-121.9,37.39,42.0,42.0,14.0,26.0,14.0,1.7361,500001.0,<1H OCEAN +-121.9,37.37,20.0,78.0,72.0,120.0,69.0,1.0938,187500.0,<1H OCEAN +-121.88,37.37,14.0,6016.0,1404.0,3258.0,1316.0,3.5745,333700.0,<1H OCEAN +-121.87,37.38,14.0,3851.0,534.0,2052.0,478.0,7.0735,335600.0,<1H OCEAN +-121.86,37.38,15.0,2052.0,405.0,1380.0,409.0,5.8686,181100.0,<1H OCEAN +-121.89,37.39,2.0,1136.0,365.0,535.0,257.0,4.375,425000.0,<1H OCEAN +-121.88,37.4,9.0,6751.0,,4240.0,1438.0,5.34,257400.0,<1H OCEAN +-121.89,37.38,3.0,4778.0,1047.0,2522.0,990.0,5.7695,271400.0,<1H OCEAN +-121.88,37.37,3.0,4430.0,841.0,2559.0,801.0,6.0959,272700.0,<1H OCEAN +-121.86,37.4,16.0,2391.0,369.0,1419.0,373.0,5.8721,267800.0,<1H OCEAN +-121.86,37.4,21.0,1386.0,260.0,946.0,257.0,6.5226,258500.0,<1H OCEAN +-121.85,37.41,25.0,1837.0,278.0,1006.0,271.0,6.6842,265300.0,<1H OCEAN +-121.85,37.4,23.0,1793.0,319.0,1145.0,310.0,5.5968,243200.0,<1H OCEAN +-121.86,37.41,16.0,2938.0,589.0,1718.0,568.0,5.5073,178900.0,<1H OCEAN +-121.85,37.41,17.0,2156.0,435.0,1400.0,393.0,5.6096,199100.0,<1H OCEAN +-121.86,37.41,16.0,1603.0,287.0,1080.0,296.0,6.1256,266900.0,<1H OCEAN +-121.86,37.41,16.0,1489.0,262.0,945.0,263.0,7.3861,267000.0,<1H OCEAN +-121.86,37.41,16.0,2411.0,420.0,1671.0,442.0,6.5004,263600.0,<1H OCEAN +-121.9,37.44,12.0,4228.0,734.0,2594.0,732.0,6.6086,299400.0,<1H OCEAN +-121.9,37.44,4.0,1646.0,408.0,853.0,410.0,5.0821,265500.0,<1H OCEAN +-121.9,37.44,9.0,957.0,139.0,532.0,142.0,8.6675,441000.0,<1H OCEAN +-121.89,37.44,8.0,2534.0,,1527.0,364.0,7.8532,422800.0,<1H OCEAN +-121.88,37.43,17.0,3469.0,896.0,2762.0,808.0,3.3884,245800.0,<1H OCEAN +-121.88,37.43,31.0,2573.0,474.0,1898.0,475.0,5.6651,204100.0,<1H OCEAN +-121.87,37.43,22.0,3805.0,596.0,2118.0,621.0,6.2892,254200.0,<1H OCEAN +-121.85,37.44,8.0,426.0,61.0,241.0,55.0,7.309,367900.0,<1H OCEAN +-121.87,37.42,19.0,12128.0,2112.0,6810.0,2040.0,6.4419,264500.0,<1H OCEAN +-121.87,37.41,24.0,3308.0,548.0,1891.0,544.0,5.6683,248700.0,<1H OCEAN +-121.88,37.41,23.0,3224.0,652.0,2183.0,655.0,4.3807,226900.0,<1H OCEAN +-121.86,37.42,20.0,5032.0,808.0,2695.0,801.0,6.6227,264800.0,<1H OCEAN +-121.87,37.42,25.0,4430.0,729.0,2685.0,721.0,5.6965,261100.0,<1H OCEAN +-121.88,37.44,17.0,1621.0,299.0,1028.0,293.0,5.2722,186900.0,<1H OCEAN +-121.88,37.44,20.0,1351.0,372.0,1427.0,394.0,4.4712,144000.0,<1H OCEAN +-121.88,37.44,26.0,1471.0,348.0,1089.0,320.0,5.3057,226400.0,<1H OCEAN +-121.88,37.44,23.0,1310.0,267.0,910.0,261.0,5.3994,237900.0,<1H OCEAN +-121.89,37.46,5.0,1519.0,186.0,705.0,186.0,10.3798,500001.0,<1H OCEAN +-121.88,37.46,5.0,1819.0,245.0,802.0,228.0,10.9722,500001.0,<1H OCEAN +-121.89,37.45,15.0,2428.0,513.0,1687.0,519.0,4.75,254400.0,<1H OCEAN +-121.88,37.44,14.0,2073.0,343.0,1107.0,330.0,6.7093,311200.0,<1H OCEAN +-121.87,37.46,43.0,91.0,12.0,58.0,16.0,15.0001,500001.0,<1H OCEAN +-121.9,37.46,29.0,2385.0,513.0,1788.0,510.0,3.8421,220700.0,<1H OCEAN +-121.91,37.46,26.0,2762.0,496.0,1716.0,459.0,5.6062,226800.0,<1H OCEAN +-121.9,37.45,18.0,4900.0,814.0,2984.0,758.0,6.6176,276200.0,<1H OCEAN +-121.9,37.45,16.0,2952.0,446.0,1525.0,460.0,5.6063,320500.0,<1H OCEAN +-121.91,37.42,19.0,1684.0,387.0,1224.0,376.0,4.1389,174100.0,<1H OCEAN +-121.9,37.41,24.0,4759.0,921.0,3188.0,902.0,5.6344,228700.0,<1H OCEAN +-121.89,37.42,26.0,40.0,8.0,52.0,7.0,7.7197,225000.0,<1H OCEAN +-121.92,37.45,10.0,3937.0,1054.0,2032.0,1002.0,3.2617,252200.0,<1H OCEAN +-121.91,37.44,26.0,1669.0,276.0,951.0,278.0,4.7794,225800.0,<1H OCEAN +-121.91,37.44,19.0,2174.0,484.0,1645.0,484.0,5.0362,255100.0,<1H OCEAN +-121.91,37.44,24.0,1212.0,251.0,799.0,242.0,5.0808,212500.0,<1H OCEAN +-121.91,37.43,33.0,2791.0,496.0,1714.0,485.0,4.8304,224900.0,<1H OCEAN +-122.07,37.44,21.0,4599.0,986.0,2756.0,943.0,2.9817,225000.0,NEAR BAY +-121.96,37.43,18.0,2514.0,578.0,2205.0,545.0,3.3859,158000.0,<1H OCEAN +-121.97,37.44,17.0,127.0,28.0,219.0,22.0,4.5179,112500.0,<1H OCEAN +-121.99,37.4,24.0,3217.0,689.0,1196.0,684.0,3.4896,226700.0,<1H OCEAN +-121.99,37.4,35.0,1845.0,325.0,1343.0,317.0,5.3912,235300.0,<1H OCEAN +-121.99,37.39,25.0,3495.0,834.0,2484.0,797.0,4.8145,230700.0,<1H OCEAN +-122.02,37.4,33.0,2015.0,484.0,1285.0,419.0,4.0655,226800.0,<1H OCEAN +-122.01,37.4,14.0,4841.0,1130.0,813.0,517.0,3.7614,137500.0,<1H OCEAN +-122.0,37.4,17.0,5121.0,1017.0,1470.0,968.0,2.9706,81300.0,<1H OCEAN +-122.0,37.4,17.0,4324.0,854.0,1656.0,885.0,3.6619,232400.0,<1H OCEAN +-122.0,37.4,35.0,1542.0,298.0,1164.0,318.0,5.9145,236900.0,<1H OCEAN +-122.01,37.4,24.0,1297.0,297.0,441.0,282.0,3.1439,47500.0,<1H OCEAN +-122.0,37.39,33.0,2154.0,405.0,1655.0,434.0,5.7962,229800.0,<1H OCEAN +-121.96,37.41,17.0,3208.0,617.0,2286.0,602.0,5.2937,238000.0,<1H OCEAN +-121.97,37.4,17.0,2937.0,558.0,1662.0,533.0,5.8792,255500.0,<1H OCEAN +-121.96,37.39,20.0,1032.0,229.0,658.0,238.0,4.5062,219300.0,<1H OCEAN +-121.95,37.39,24.0,5230.0,934.0,3795.0,970.0,5.4228,264100.0,<1H OCEAN +-121.95,37.38,22.0,765.0,198.0,390.0,176.0,3.1812,87500.0,<1H OCEAN +-121.95,37.41,13.0,2164.0,412.0,1087.0,411.0,4.7625,137500.0,<1H OCEAN +-121.94,37.42,16.0,3936.0,788.0,1910.0,769.0,4.7049,112500.0,<1H OCEAN +-121.93,37.4,34.0,148.0,28.0,132.0,13.0,3.375,67500.0,<1H OCEAN +-121.91,37.36,42.0,3224.0,708.0,1940.0,674.0,3.2153,199700.0,<1H OCEAN +-121.92,37.36,42.0,198.0,32.0,158.0,32.0,3.1563,137500.0,<1H OCEAN +-121.95,37.37,39.0,446.0,129.0,317.0,127.0,3.0357,208300.0,<1H OCEAN +-121.95,37.36,27.0,3236.0,832.0,2230.0,798.0,3.5625,208600.0,<1H OCEAN +-121.95,37.36,25.0,3472.0,956.0,2267.0,944.0,2.7727,235600.0,<1H OCEAN +-121.93,37.35,36.0,1823.0,410.0,1589.0,387.0,3.1065,234100.0,<1H OCEAN +-121.93,37.34,48.0,2068.0,495.0,946.0,452.0,3.0375,218500.0,<1H OCEAN +-121.98,37.37,36.0,1651.0,344.0,1062.0,331.0,4.575,215400.0,<1H OCEAN +-121.98,37.36,32.0,1199.0,229.0,814.0,238.0,4.6719,252100.0,<1H OCEAN +-121.98,37.37,35.0,995.0,202.0,615.0,199.0,5.0942,217500.0,<1H OCEAN +-121.99,37.37,27.0,1797.0,538.0,1610.0,531.0,4.2422,237500.0,<1H OCEAN +-121.97,37.36,24.0,4841.0,894.0,2656.0,920.0,6.0573,254500.0,<1H OCEAN +-121.97,37.36,34.0,884.0,153.0,534.0,154.0,6.0116,271200.0,<1H OCEAN +-121.97,37.35,35.0,1880.0,370.0,926.0,321.0,4.2273,269900.0,<1H OCEAN +-121.96,37.36,16.0,5040.0,1325.0,3150.0,1196.0,4.2837,264500.0,<1H OCEAN +-121.96,37.36,33.0,2581.0,623.0,1598.0,628.0,3.5199,261400.0,<1H OCEAN +-121.97,37.35,36.0,815.0,126.0,353.0,122.0,6.3191,258300.0,<1H OCEAN +-121.97,37.36,36.0,765.0,134.0,306.0,136.0,4.575,247600.0,<1H OCEAN +-121.98,37.36,34.0,1735.0,318.0,1019.0,301.0,4.5625,242700.0,<1H OCEAN +-121.98,37.36,33.0,1582.0,272.0,809.0,267.0,5.7059,287200.0,<1H OCEAN +-121.98,37.36,35.0,1293.0,223.0,701.0,216.0,7.8543,281900.0,<1H OCEAN +-121.98,37.36,35.0,1440.0,267.0,743.0,259.0,5.0866,254600.0,<1H OCEAN +-121.99,37.36,32.0,1754.0,324.0,917.0,330.0,4.6761,298300.0,<1H OCEAN +-121.99,37.36,33.0,2321.0,480.0,1230.0,451.0,4.9091,270300.0,<1H OCEAN +-121.99,37.36,33.0,2677.0,644.0,1469.0,633.0,3.2048,261800.0,<1H OCEAN +-121.99,37.36,33.0,2545.0,467.0,1287.0,458.0,5.5,282200.0,<1H OCEAN +-121.98,37.35,41.0,1150.0,249.0,729.0,260.0,3.5491,261100.0,<1H OCEAN +-121.99,37.35,18.0,1712.0,509.0,972.0,467.0,4.3971,238900.0,<1H OCEAN +-121.99,37.35,16.0,3249.0,947.0,1637.0,841.0,4.5427,198400.0,<1H OCEAN +-121.99,37.35,25.0,1527.0,325.0,707.0,339.0,4.375,212200.0,<1H OCEAN +-121.98,37.35,36.0,1054.0,193.0,546.0,187.0,4.5625,240000.0,<1H OCEAN +-121.97,37.35,30.0,1955.0,,999.0,386.0,4.6328,287100.0,<1H OCEAN +-121.98,37.34,33.0,3570.0,776.0,1922.0,761.0,4.9562,238700.0,<1H OCEAN +-121.98,37.34,18.0,6649.0,1712.0,3604.0,1651.0,4.5368,307400.0,<1H OCEAN +-121.99,37.34,26.0,3637.0,933.0,2249.0,905.0,3.9625,262900.0,<1H OCEAN +-121.96,37.35,37.0,1755.0,325.0,699.0,321.0,3.925,251300.0,<1H OCEAN +-121.97,37.34,33.0,3162.0,,1553.0,686.0,3.6682,266100.0,<1H OCEAN +-121.97,37.35,35.0,1249.0,232.0,556.0,247.0,3.925,287100.0,<1H OCEAN +-121.96,37.35,32.0,1484.0,274.0,673.0,272.0,5.2019,279900.0,<1H OCEAN +-121.95,37.35,36.0,832.0,211.0,545.0,211.0,3.2813,244400.0,<1H OCEAN +-121.94,37.35,52.0,906.0,227.0,1662.0,219.0,3.1667,231600.0,<1H OCEAN +-121.94,37.35,18.0,1922.0,561.0,1096.0,545.0,2.3713,244000.0,<1H OCEAN +-121.95,37.35,48.0,1246.0,294.0,697.0,284.0,3.6118,235500.0,<1H OCEAN +-121.95,37.35,42.0,1421.0,330.0,659.0,303.0,3.3333,237900.0,<1H OCEAN +-121.95,37.35,52.0,2382.0,523.0,1096.0,492.0,4.2656,236100.0,<1H OCEAN +-121.94,37.34,42.0,2174.0,420.0,1304.0,464.0,3.1429,286500.0,<1H OCEAN +-121.94,37.34,29.0,3377.0,853.0,1674.0,792.0,3.4233,229300.0,<1H OCEAN +-121.94,37.34,41.0,2151.0,473.0,1092.0,469.0,3.7321,250000.0,<1H OCEAN +-121.94,37.33,36.0,1893.0,359.0,797.0,360.0,3.6818,257600.0,<1H OCEAN +-121.94,37.33,37.0,1822.0,329.0,845.0,348.0,4.75,251100.0,<1H OCEAN +-121.94,37.34,36.0,3142.0,632.0,1372.0,560.0,5.0175,246100.0,<1H OCEAN +-121.95,37.34,25.0,5236.0,1320.0,2529.0,1213.0,3.1702,256100.0,<1H OCEAN +-121.95,37.33,31.0,1866.0,465.0,821.0,447.0,2.3547,275900.0,<1H OCEAN +-121.95,37.33,36.0,1683.0,286.0,740.0,324.0,4.7604,294700.0,<1H OCEAN +-121.96,37.33,26.0,3269.0,788.0,1427.0,696.0,4.2136,288300.0,<1H OCEAN +-121.96,37.33,35.0,2294.0,411.0,1054.0,449.0,4.0667,276900.0,<1H OCEAN +-121.96,37.34,42.0,2001.0,402.0,942.0,375.0,4.4453,255400.0,<1H OCEAN +-121.96,37.34,36.0,844.0,153.0,373.0,160.0,5.791,254100.0,<1H OCEAN +-121.96,37.34,18.0,4438.0,939.0,1901.0,895.0,5.3873,288300.0,<1H OCEAN +-121.96,37.34,34.0,1461.0,299.0,739.0,276.0,3.4375,252600.0,<1H OCEAN +-121.96,37.34,37.0,663.0,127.0,293.0,132.0,3.7813,247800.0,<1H OCEAN +-121.98,37.33,30.0,2645.0,462.0,1506.0,480.0,6.3716,330500.0,<1H OCEAN +-121.98,37.33,30.0,3742.0,633.0,1721.0,631.0,6.1388,302400.0,<1H OCEAN +-121.99,37.34,27.0,3353.0,653.0,1571.0,621.0,5.273,315600.0,<1H OCEAN +-121.97,37.33,21.0,8275.0,1566.0,3636.0,1524.0,5.1506,302100.0,<1H OCEAN +-121.98,37.33,25.0,3223.0,612.0,1529.0,602.0,5.121,287600.0,<1H OCEAN +-121.98,37.33,35.0,1907.0,326.0,912.0,313.0,5.9567,294300.0,<1H OCEAN +-121.99,37.33,35.0,1802.0,291.0,841.0,315.0,4.8365,313900.0,<1H OCEAN +-121.99,37.33,33.0,2023.0,425.0,1016.0,405.0,3.9417,285800.0,<1H OCEAN +-121.98,37.31,28.0,3840.0,629.0,1883.0,662.0,6.4095,335900.0,<1H OCEAN +-121.99,37.3,28.0,4863.0,901.0,2110.0,868.0,5.1483,342000.0,<1H OCEAN +-122.0,37.3,28.0,5096.0,1011.0,2588.0,954.0,5.357,355200.0,<1H OCEAN +-121.98,37.32,17.0,9789.0,2552.0,4748.0,2206.0,4.2531,279800.0,<1H OCEAN +-121.99,37.32,20.0,4461.0,864.0,2042.0,808.0,4.7083,217700.0,<1H OCEAN +-121.98,37.31,32.0,2248.0,460.0,1191.0,419.0,5.606,288900.0,<1H OCEAN +-121.98,37.31,34.0,2034.0,359.0,1016.0,375.0,5.8127,288300.0,<1H OCEAN +-121.99,37.31,26.0,3285.0,502.0,1443.0,530.0,5.7833,339600.0,<1H OCEAN +-121.97,37.32,19.0,4620.0,1404.0,2672.0,1308.0,3.699,237500.0,<1H OCEAN +-121.96,37.32,11.0,1711.0,493.0,1094.0,543.0,3.73,227700.0,<1H OCEAN +-121.95,37.32,39.0,1164.0,199.0,619.0,231.0,4.6304,263200.0,<1H OCEAN +-121.95,37.32,20.0,1145.0,198.0,431.0,173.0,3.1103,281900.0,<1H OCEAN +-121.95,37.31,27.0,4140.0,,2135.0,893.0,3.6292,264600.0,<1H OCEAN +-121.96,37.31,26.0,4310.0,678.0,1819.0,686.0,7.0469,365500.0,<1H OCEAN +-121.96,37.31,31.0,3890.0,711.0,1898.0,717.0,5.2534,290900.0,<1H OCEAN +-121.97,37.31,21.0,7628.0,2166.0,3637.0,1749.0,3.6401,267500.0,<1H OCEAN +-121.97,37.31,25.0,5775.0,1225.0,3580.0,1138.0,3.9187,314900.0,<1H OCEAN +-121.97,37.3,25.0,5463.0,1351.0,2758.0,1310.0,3.0079,277300.0,<1H OCEAN +-121.95,37.32,33.0,726.0,168.0,351.0,147.0,3.1458,270500.0,<1H OCEAN +-121.94,37.31,30.0,4238.0,1010.0,1914.0,972.0,3.7632,307000.0,<1H OCEAN +-121.95,37.31,27.0,2462.0,570.0,1278.0,565.0,3.5652,329500.0,<1H OCEAN +-121.94,37.3,30.0,1758.0,248.0,814.0,256.0,6.623,332500.0,<1H OCEAN +-121.95,37.3,21.0,4193.0,1068.0,2487.0,1011.0,3.7188,293000.0,<1H OCEAN +-121.94,37.3,25.0,1455.0,370.0,734.0,331.0,3.2727,262500.0,<1H OCEAN +-121.95,37.3,25.0,5641.0,1517.0,3786.0,1410.0,3.3958,267500.0,<1H OCEAN +-121.96,37.3,20.0,4228.0,1006.0,2334.0,1007.0,4.3081,227300.0,<1H OCEAN +-121.94,37.29,22.0,2593.0,637.0,1249.0,623.0,3.75,212500.0,<1H OCEAN +-121.94,37.29,20.0,710.0,188.0,363.0,176.0,4.0962,214100.0,<1H OCEAN +-121.95,37.27,17.0,1330.0,271.0,408.0,258.0,1.7171,181300.0,<1H OCEAN +-121.95,37.28,52.0,777.0,148.0,362.0,144.0,4.0208,262500.0,<1H OCEAN +-121.95,37.29,9.0,1503.0,381.0,715.0,349.0,4.6371,234300.0,<1H OCEAN +-121.95,37.29,30.0,3734.0,813.0,1834.0,824.0,3.4505,260000.0,<1H OCEAN +-121.95,37.28,19.0,7027.0,1847.0,3759.0,1753.0,3.1509,242900.0,<1H OCEAN +-121.98,37.3,30.0,3404.0,693.0,1794.0,633.0,4.6312,283200.0,<1H OCEAN +-121.98,37.29,33.0,2120.0,349.0,907.0,336.0,7.5443,283000.0,<1H OCEAN +-121.98,37.29,31.0,2750.0,664.0,1459.0,660.0,3.2287,264900.0,<1H OCEAN +-121.96,37.28,33.0,1940.0,327.0,877.0,314.0,5.4386,280400.0,<1H OCEAN +-121.97,37.28,25.0,4707.0,695.0,1995.0,642.0,6.6437,296100.0,<1H OCEAN +-121.97,37.28,27.0,2427.0,403.0,1301.0,438.0,5.0385,277300.0,<1H OCEAN +-121.98,37.28,26.0,1182.0,309.0,620.0,306.0,3.3922,269100.0,<1H OCEAN +-121.98,37.28,28.0,3688.0,633.0,1877.0,620.0,5.7251,272600.0,<1H OCEAN +-121.98,37.28,27.0,3526.0,589.0,1725.0,553.0,5.7812,275000.0,<1H OCEAN +-121.99,37.27,27.0,2937.0,497.0,1454.0,511.0,5.4051,273500.0,<1H OCEAN +-121.99,37.29,32.0,2930.0,481.0,1336.0,481.0,6.4631,344100.0,<1H OCEAN +-121.96,37.3,23.0,4040.0,843.0,2181.0,843.0,4.0403,303400.0,<1H OCEAN +-121.97,37.3,31.0,3340.0,735.0,1891.0,686.0,4.8542,275000.0,<1H OCEAN +-121.96,37.29,24.0,1240.0,263.0,690.0,276.0,5.0,283000.0,<1H OCEAN +-121.97,37.29,25.0,4096.0,743.0,2027.0,741.0,5.3294,300300.0,<1H OCEAN +-121.97,37.29,29.0,2721.0,682.0,1602.0,646.0,3.337,265300.0,<1H OCEAN +-121.99,37.27,17.0,1527.0,267.0,775.0,260.0,5.9658,278000.0,<1H OCEAN +-121.98,37.27,25.0,3075.0,564.0,1633.0,543.0,5.2528,269400.0,<1H OCEAN +-121.98,37.27,29.0,2658.0,484.0,1318.0,498.0,5.3561,298900.0,<1H OCEAN +-121.96,37.28,28.0,5018.0,1066.0,2846.0,998.0,4.0174,273900.0,<1H OCEAN +-121.96,37.27,22.0,6114.0,1211.0,2983.0,1163.0,5.2533,269100.0,<1H OCEAN +-121.96,37.27,31.0,3347.0,589.0,1566.0,597.0,5.5151,286800.0,<1H OCEAN +-121.97,37.26,19.0,2174.0,454.0,998.0,426.0,4.6827,255100.0,<1H OCEAN +-121.96,37.26,22.0,1408.0,351.0,636.0,294.0,1.8542,333300.0,<1H OCEAN +-121.95,37.25,30.0,3298.0,634.0,1532.0,602.0,5.0863,332000.0,<1H OCEAN +-121.95,37.24,37.0,3109.0,541.0,1566.0,544.0,6.0235,413500.0,<1H OCEAN +-121.95,37.24,32.0,1382.0,239.0,705.0,251.0,6.0957,405400.0,<1H OCEAN +-121.96,37.24,26.0,3032.0,605.0,1208.0,562.0,5.4683,430900.0,<1H OCEAN +-121.96,37.25,35.0,1018.0,169.0,484.0,174.0,6.1648,371900.0,<1H OCEAN +-121.95,37.25,34.0,2906.0,544.0,1282.0,522.0,5.5127,268200.0,<1H OCEAN +-121.93,37.25,36.0,1089.0,182.0,535.0,170.0,4.69,252600.0,<1H OCEAN +-121.93,37.25,21.0,1354.0,289.0,639.0,273.0,4.5333,234200.0,<1H OCEAN +-121.92,37.25,34.0,2231.0,360.0,1035.0,365.0,4.7917,243200.0,<1H OCEAN +-121.93,37.25,32.0,1555.0,287.0,779.0,284.0,6.0358,260100.0,<1H OCEAN +-121.94,37.24,35.0,1484.0,244.0,664.0,238.0,4.675,245300.0,<1H OCEAN +-121.91,37.24,24.0,5046.0,1001.0,2449.0,968.0,4.7118,274600.0,<1H OCEAN +-121.91,37.24,30.0,2327.0,419.0,1114.0,372.0,4.7279,272000.0,<1H OCEAN +-121.92,37.24,26.0,6777.0,1051.0,3319.0,1061.0,6.3663,279400.0,<1H OCEAN +-121.94,37.24,19.0,1741.0,294.0,632.0,279.0,5.5944,290500.0,<1H OCEAN +-121.94,37.24,26.0,2561.0,388.0,1165.0,393.0,7.3522,363800.0,<1H OCEAN +-121.93,37.24,26.0,2574.0,414.0,1096.0,428.0,6.0738,335900.0,<1H OCEAN +-121.92,37.24,27.0,1265.0,216.0,660.0,232.0,5.3911,281200.0,<1H OCEAN +-121.91,37.23,22.0,2614.0,453.0,1240.0,462.0,6.0712,271800.0,<1H OCEAN +-121.91,37.23,27.0,4866.0,668.0,1956.0,659.0,7.3843,405000.0,<1H OCEAN +-121.93,37.22,21.0,4872.0,594.0,1811.0,560.0,9.3834,500001.0,<1H OCEAN +-121.96,37.23,36.0,4423.0,632.0,1719.0,608.0,7.8407,476400.0,<1H OCEAN +-121.97,37.23,22.0,2781.0,523.0,1291.0,516.0,4.6065,445900.0,<1H OCEAN +-121.98,37.22,46.0,10088.0,1910.0,3728.0,1781.0,5.2321,500001.0,<1H OCEAN +-121.96,37.22,35.0,4709.0,723.0,1866.0,694.0,8.492,500001.0,<1H OCEAN +-121.95,37.21,20.0,2345.0,322.0,890.0,276.0,10.0187,500001.0,<1H OCEAN +-121.97,37.24,35.0,2553.0,533.0,1117.0,498.0,4.4063,436100.0,<1H OCEAN +-121.98,37.23,33.0,3585.0,935.0,1511.0,835.0,3.1176,396300.0,<1H OCEAN +-122.0,37.23,36.0,3191.0,430.0,1234.0,440.0,9.0704,500001.0,<1H OCEAN +-121.96,37.25,19.0,1858.0,359.0,790.0,347.0,4.5156,339300.0,<1H OCEAN +-121.97,37.25,32.0,2892.0,496.0,1193.0,492.0,6.131,367800.0,<1H OCEAN +-121.98,37.26,27.0,2331.0,461.0,1178.0,447.0,4.6654,340700.0,<1H OCEAN +-121.99,37.27,21.0,1214.0,192.0,500.0,185.0,7.598,347800.0,<1H OCEAN +-121.99,37.26,17.0,4034.0,611.0,1158.0,560.0,8.2069,442500.0,<1H OCEAN +-121.98,37.25,19.0,755.0,93.0,267.0,99.0,15.0,500001.0,<1H OCEAN +-121.99,37.25,25.0,1743.0,212.0,604.0,200.0,10.7582,500001.0,<1H OCEAN +-121.97,37.25,21.0,2775.0,389.0,856.0,350.0,7.9135,496400.0,<1H OCEAN +-121.99,37.25,22.0,4240.0,532.0,1480.0,514.0,11.2463,500001.0,<1H OCEAN +-121.98,37.24,35.0,3574.0,485.0,1325.0,476.0,8.5425,500001.0,<1H OCEAN +-122.0,37.27,33.0,1664.0,271.0,759.0,272.0,5.7876,415800.0,<1H OCEAN +-122.01,37.27,27.0,3340.0,451.0,1220.0,447.0,8.8178,500001.0,<1H OCEAN +-122.02,37.26,24.0,2411.0,299.0,847.0,299.0,10.2666,500001.0,<1H OCEAN +-122.02,37.26,34.0,1764.0,243.0,692.0,223.0,8.0331,500001.0,<1H OCEAN +-122.01,37.25,31.0,1574.0,193.0,551.0,191.0,10.2311,500001.0,<1H OCEAN +-121.99,37.26,29.0,2718.0,365.0,982.0,339.0,7.9234,500001.0,<1H OCEAN +-122.01,37.26,14.0,2561.0,404.0,1172.0,378.0,7.6107,500001.0,<1H OCEAN +-122.03,37.25,34.0,2892.0,413.0,903.0,365.0,7.8711,500001.0,<1H OCEAN +-122.04,37.24,24.0,1521.0,209.0,539.0,192.0,11.1557,500001.0,<1H OCEAN +-122.02,37.24,28.0,2796.0,365.0,1085.0,363.0,10.6834,500001.0,<1H OCEAN +-122.03,37.29,22.0,3118.0,438.0,1147.0,425.0,10.3653,500001.0,<1H OCEAN +-122.02,37.29,18.0,2550.0,312.0,999.0,320.0,8.7939,500001.0,<1H OCEAN +-122.02,37.29,25.0,3845.0,492.0,1461.0,475.0,10.3979,500001.0,<1H OCEAN +-122.01,37.29,31.0,3136.0,431.0,1190.0,412.0,7.5,500001.0,<1H OCEAN +-122.01,37.28,22.0,2038.0,260.0,773.0,281.0,9.1569,500001.0,<1H OCEAN +-122.0,37.28,35.0,3133.0,541.0,1449.0,555.0,5.7295,346100.0,<1H OCEAN +-122.0,37.28,33.0,2170.0,311.0,854.0,303.0,8.3605,500001.0,<1H OCEAN +-122.0,37.28,32.0,2782.0,495.0,1092.0,455.0,5.4103,335900.0,<1H OCEAN +-122.03,37.27,32.0,4350.0,645.0,1551.0,609.0,7.8279,500001.0,<1H OCEAN +-122.03,37.28,29.0,3752.0,468.0,1320.0,471.0,9.8937,500001.0,<1H OCEAN +-122.02,37.28,25.0,3437.0,428.0,1198.0,411.0,9.3464,500001.0,<1H OCEAN +-122.01,37.27,28.0,3825.0,473.0,1415.0,480.0,10.675,500001.0,<1H OCEAN +-122.06,37.27,16.0,1612.0,221.0,567.0,208.0,10.5793,500001.0,<1H OCEAN +-122.04,37.29,19.0,3625.0,432.0,1252.0,409.0,12.2145,500001.0,<1H OCEAN +-122.03,37.27,25.0,4460.0,553.0,1608.0,561.0,10.7958,500001.0,<1H OCEAN +-122.04,37.26,24.0,4973.0,709.0,1692.0,696.0,7.8627,500001.0,<1H OCEAN +-122.06,37.33,29.0,1945.0,269.0,826.0,275.0,8.248,498800.0,<1H OCEAN +-122.06,37.32,30.0,3033.0,540.0,1440.0,507.0,6.2182,380800.0,<1H OCEAN +-122.05,37.31,25.0,4601.0,696.0,2003.0,666.0,8.0727,455500.0,<1H OCEAN +-122.05,37.31,25.0,4111.0,538.0,1585.0,568.0,9.2298,500001.0,<1H OCEAN +-122.06,37.3,11.0,5488.0,706.0,1947.0,641.0,10.7326,500001.0,<1H OCEAN +-122.07,37.33,13.0,2173.0,349.0,891.0,345.0,8.0158,420000.0,<1H OCEAN +-122.06,37.33,23.0,4507.0,751.0,2167.0,722.0,7.0102,500001.0,<1H OCEAN +-122.07,37.31,24.0,4401.0,698.0,1818.0,685.0,7.2986,500001.0,<1H OCEAN +-122.08,37.3,30.0,2268.0,404.0,1197.0,372.0,7.0813,485300.0,<1H OCEAN +-122.08,37.31,17.0,2560.0,396.0,959.0,400.0,7.8528,368900.0,<1H OCEAN +-122.04,37.34,20.0,4475.0,1048.0,2271.0,1021.0,4.8836,396200.0,<1H OCEAN +-122.06,37.34,13.0,2057.0,466.0,790.0,436.0,5.0081,288300.0,<1H OCEAN +-122.05,37.33,21.0,2052.0,346.0,933.0,351.0,5.3167,416300.0,<1H OCEAN +-122.04,37.33,26.0,2690.0,401.0,1264.0,429.0,7.7643,474700.0,<1H OCEAN +-122.05,37.33,17.0,3674.0,824.0,1364.0,694.0,6.3131,436400.0,<1H OCEAN +-122.04,37.33,22.0,4011.0,963.0,2206.0,879.0,4.5721,351200.0,<1H OCEAN +-122.04,37.32,27.0,2826.0,451.0,1259.0,439.0,5.7528,431400.0,<1H OCEAN +-122.04,37.31,29.0,2476.0,434.0,1217.0,416.0,6.2045,393800.0,<1H OCEAN +-122.04,37.31,24.0,3388.0,633.0,1627.0,585.0,5.154,355100.0,<1H OCEAN +-122.04,37.3,26.0,1714.0,270.0,778.0,262.0,6.075,417000.0,<1H OCEAN +-122.04,37.3,25.0,2366.0,417.0,1076.0,398.0,6.9238,345900.0,<1H OCEAN +-122.03,37.31,25.0,2131.0,410.0,1132.0,395.0,5.3508,409100.0,<1H OCEAN +-122.04,37.3,25.0,3807.0,600.0,1678.0,600.0,6.6818,411300.0,<1H OCEAN +-122.01,37.3,25.0,4044.0,551.0,1699.0,533.0,8.0837,380600.0,<1H OCEAN +-122.01,37.31,23.0,6846.0,1078.0,2951.0,1063.0,6.3702,332000.0,<1H OCEAN +-122.0,37.31,28.0,3811.0,585.0,1795.0,581.0,7.8383,372700.0,<1H OCEAN +-122.0,37.3,29.0,3429.0,524.0,1518.0,520.0,7.218,400700.0,<1H OCEAN +-122.03,37.31,19.0,2885.0,859.0,1520.0,784.0,3.375,275700.0,<1H OCEAN +-122.03,37.3,30.0,3007.0,554.0,1551.0,616.0,5.8521,326300.0,<1H OCEAN +-122.03,37.3,22.0,3583.0,758.0,1792.0,695.0,5.4842,335300.0,<1H OCEAN +-122.02,37.31,34.0,2629.0,433.0,1301.0,431.0,6.083,341400.0,<1H OCEAN +-122.02,37.31,35.0,2355.0,384.0,1248.0,378.0,5.9714,332500.0,<1H OCEAN +-122.02,37.3,26.0,1983.0,301.0,924.0,297.0,6.7123,354600.0,<1H OCEAN +-122.02,37.3,32.0,2134.0,328.0,903.0,322.0,6.359,341900.0,<1H OCEAN +-122.02,37.32,27.0,4336.0,754.0,2009.0,734.0,6.3923,348300.0,<1H OCEAN +-122.02,37.31,33.0,2563.0,434.0,1230.0,418.0,6.3197,340100.0,<1H OCEAN +-122.03,37.32,15.0,5132.0,1059.0,2156.0,982.0,5.6511,404800.0,<1H OCEAN +-122.0,37.32,34.0,3450.0,731.0,1915.0,689.0,4.7402,244500.0,<1H OCEAN +-122.01,37.31,26.0,1391.0,241.0,700.0,236.0,6.6766,332700.0,<1H OCEAN +-122.01,37.32,32.0,3108.0,613.0,1577.0,603.0,4.6613,284000.0,<1H OCEAN +-122.0,37.31,33.0,4211.0,918.0,2389.0,861.0,4.7235,242200.0,<1H OCEAN +-122.02,37.33,25.0,3823.0,584.0,1689.0,571.0,7.3693,373600.0,<1H OCEAN +-122.03,37.33,23.0,4221.0,671.0,1782.0,641.0,7.4863,412300.0,<1H OCEAN +-122.03,37.34,16.0,1755.0,410.0,674.0,410.0,5.1602,231200.0,<1H OCEAN +-122.02,37.34,30.0,1036.0,151.0,467.0,156.0,6.448,360600.0,<1H OCEAN +-122.0,37.33,30.0,4033.0,794.0,1788.0,807.0,5.6932,338700.0,<1H OCEAN +-122.02,37.35,26.0,2785.0,418.0,1221.0,422.0,8.1078,365700.0,<1H OCEAN +-122.02,37.35,22.0,3219.0,756.0,1479.0,667.0,4.1473,354400.0,<1H OCEAN +-122.02,37.34,26.0,1992.0,328.0,980.0,342.0,6.2475,350000.0,<1H OCEAN +-122.02,37.34,28.0,2488.0,396.0,1190.0,410.0,5.7881,344700.0,<1H OCEAN +-122.03,37.34,25.0,5404.0,906.0,2338.0,883.0,6.0577,451800.0,<1H OCEAN +-122.03,37.35,25.0,3095.0,514.0,1251.0,507.0,5.5388,352100.0,<1H OCEAN +-122.01,37.35,33.0,2517.0,496.0,1158.0,443.0,5.0785,289500.0,<1H OCEAN +-122.0,37.35,20.0,4304.0,851.0,2059.0,835.0,5.1674,333000.0,<1H OCEAN +-122.0,37.34,27.0,1716.0,290.0,817.0,301.0,5.9158,343100.0,<1H OCEAN +-122.0,37.34,31.0,3344.0,620.0,1604.0,572.0,5.2108,351500.0,<1H OCEAN +-122.01,37.34,31.0,3080.0,526.0,1493.0,582.0,6.3052,344200.0,<1H OCEAN +-122.05,37.35,34.0,2494.0,375.0,1399.0,382.0,7.3753,388100.0,<1H OCEAN +-122.05,37.34,34.0,2515.0,401.0,1079.0,399.0,7.7865,423900.0,<1H OCEAN +-122.05,37.34,31.0,1443.0,215.0,627.0,222.0,6.6087,416500.0,<1H OCEAN +-122.06,37.34,20.0,3435.0,593.0,1293.0,553.0,6.7578,451400.0,<1H OCEAN +-122.04,37.35,28.0,3250.0,485.0,1328.0,473.0,7.4729,431600.0,<1H OCEAN +-122.04,37.34,28.0,3081.0,460.0,1260.0,461.0,7.5372,432600.0,<1H OCEAN +-122.03,37.35,16.0,1156.0,198.0,455.0,216.0,7.2779,292900.0,<1H OCEAN +-122.04,37.35,28.0,1582.0,264.0,696.0,270.0,5.678,370100.0,<1H OCEAN +-122.04,37.34,25.0,1994.0,287.0,704.0,283.0,7.7799,447300.0,<1H OCEAN +-122.03,37.34,17.0,1165.0,278.0,598.0,287.0,4.0129,342400.0,<1H OCEAN +-122.04,37.34,23.0,2590.0,725.0,1795.0,680.0,3.16,225000.0,<1H OCEAN +-122.04,37.34,19.0,3694.0,1036.0,2496.0,986.0,3.6991,271500.0,<1H OCEAN +-122.05,37.37,35.0,1365.0,256.0,662.0,262.0,5.6533,291400.0,<1H OCEAN +-122.05,37.36,34.0,2400.0,419.0,1017.0,384.0,4.1369,316900.0,<1H OCEAN +-122.05,37.36,27.0,2621.0,513.0,1063.0,523.0,3.9848,409700.0,<1H OCEAN +-122.06,37.35,31.0,1795.0,281.0,872.0,282.0,8.0599,381800.0,<1H OCEAN +-122.06,37.36,35.0,2693.0,493.0,1343.0,455.0,6.0777,327500.0,<1H OCEAN +-122.06,37.37,32.0,2510.0,578.0,1160.0,581.0,4.9087,322700.0,<1H OCEAN +-122.04,37.37,23.0,5135.0,911.0,2351.0,863.0,5.2319,430100.0,<1H OCEAN +-122.03,37.36,28.0,2490.0,345.0,948.0,361.0,6.4913,411900.0,<1H OCEAN +-122.04,37.35,20.0,2016.0,313.0,767.0,310.0,6.837,383000.0,<1H OCEAN +-122.05,37.36,29.0,1733.0,255.0,679.0,278.0,7.5337,406800.0,<1H OCEAN +-122.04,37.36,26.0,3298.0,460.0,1241.0,472.0,6.8753,403000.0,<1H OCEAN +-122.05,37.37,27.0,3885.0,661.0,1537.0,606.0,6.6085,344700.0,<1H OCEAN +-122.03,37.36,16.0,2697.0,803.0,1369.0,723.0,4.4699,367400.0,<1H OCEAN +-122.02,37.35,17.0,2975.0,608.0,1465.0,577.0,5.8779,362200.0,<1H OCEAN +-122.02,37.35,18.0,1221.0,255.0,507.0,271.0,5.3679,228400.0,<1H OCEAN +-122.03,37.35,19.0,3811.0,1227.0,1930.0,1153.0,3.5154,311400.0,<1H OCEAN +-122.03,37.37,16.0,3402.0,1193.0,1479.0,1043.0,3.5861,500001.0,<1H OCEAN +-122.02,37.36,21.0,2471.0,677.0,1486.0,689.0,3.9038,243800.0,<1H OCEAN +-122.02,37.36,25.0,2074.0,387.0,1273.0,383.0,4.7609,378000.0,<1H OCEAN +-122.01,37.36,16.0,1105.0,354.0,499.0,324.0,4.2061,253600.0,<1H OCEAN +-122.02,37.36,24.0,1709.0,437.0,892.0,408.0,4.9671,335200.0,<1H OCEAN +-122.01,37.36,25.0,2796.0,429.0,1267.0,426.0,6.6329,349000.0,<1H OCEAN +-122.01,37.36,21.0,2483.0,396.0,1194.0,424.0,7.1273,346300.0,<1H OCEAN +-122.01,37.35,16.0,3716.0,916.0,1551.0,759.0,4.5,323600.0,<1H OCEAN +-122.0,37.36,19.0,2237.0,433.0,1158.0,426.0,6.7718,368300.0,<1H OCEAN +-122.0,37.36,17.0,2070.0,,797.0,275.0,8.6155,411200.0,<1H OCEAN +-122.0,37.36,25.0,3534.0,949.0,1880.0,849.0,3.4238,337000.0,<1H OCEAN +-122.0,37.36,17.0,6012.0,1737.0,3539.0,1625.0,3.8464,239400.0,<1H OCEAN +-122.03,37.37,9.0,2966.0,770.0,1430.0,740.0,3.0047,256000.0,<1H OCEAN +-122.03,37.37,41.0,2123.0,425.0,1032.0,435.0,4.6957,284800.0,<1H OCEAN +-122.03,37.37,30.0,1269.0,290.0,556.0,266.0,3.8125,325000.0,<1H OCEAN +-122.04,37.37,42.0,1125.0,273.0,616.0,258.0,3.6765,252800.0,<1H OCEAN +-122.04,37.37,33.0,2757.0,489.0,1201.0,481.0,5.0453,311600.0,<1H OCEAN +-122.04,37.38,38.0,2850.0,550.0,1518.0,514.0,4.2028,273600.0,<1H OCEAN +-122.03,37.38,21.0,2667.0,798.0,1433.0,727.0,3.8732,252400.0,<1H OCEAN +-122.02,37.38,43.0,1261.0,317.0,836.0,333.0,4.0911,224600.0,<1H OCEAN +-122.01,37.38,32.0,726.0,204.0,538.0,203.0,4.505,230400.0,<1H OCEAN +-122.02,37.37,8.0,5686.0,1489.0,3250.0,1329.0,4.2782,327700.0,<1H OCEAN +-122.01,37.37,11.0,2559.0,694.0,1309.0,668.0,4.1847,167300.0,<1H OCEAN +-122.01,37.37,25.0,2213.0,360.0,1066.0,390.0,7.2165,360900.0,<1H OCEAN +-122.0,37.37,16.0,1434.0,372.0,804.0,361.0,3.7045,178100.0,<1H OCEAN +-122.03,37.39,22.0,3280.0,933.0,1842.0,795.0,4.4107,232700.0,<1H OCEAN +-122.02,37.38,32.0,1889.0,487.0,1321.0,508.0,3.2574,254400.0,<1H OCEAN +-122.01,37.39,26.0,2500.0,962.0,2374.0,879.0,3.5586,222200.0,<1H OCEAN +-122.01,37.39,36.0,1976.0,361.0,1348.0,371.0,5.6447,252600.0,<1H OCEAN +-122.0,37.39,36.0,1236.0,229.0,880.0,247.0,5.791,239400.0,<1H OCEAN +-122.03,37.39,34.0,2600.0,650.0,1994.0,650.0,4.0223,250200.0,<1H OCEAN +-122.02,37.4,35.0,2348.0,531.0,1475.0,498.0,4.35,261000.0,<1H OCEAN +-122.01,37.39,16.0,3015.0,829.0,1769.0,807.0,4.0068,249500.0,<1H OCEAN +-122.02,37.39,35.0,2297.0,497.0,1428.0,497.0,4.7431,239700.0,<1H OCEAN +-122.04,37.39,5.0,8745.0,2211.0,3959.0,2019.0,4.7685,280100.0,<1H OCEAN +-122.05,37.38,23.0,3200.0,907.0,2029.0,866.0,3.5649,450000.0,<1H OCEAN +-122.05,37.38,24.0,2424.0,501.0,1367.0,507.0,4.072,364200.0,<1H OCEAN +-122.05,37.38,29.0,1875.0,340.0,816.0,350.0,5.4351,336500.0,<1H OCEAN +-122.06,37.38,20.0,4293.0,1272.0,2389.0,1210.0,4.2719,270800.0,NEAR BAY +-122.05,37.37,27.0,2687.0,768.0,1362.0,725.0,3.4028,324200.0,<1H OCEAN +-122.05,37.39,25.0,347.0,82.0,148.0,77.0,4.4531,350000.0,<1H OCEAN +-122.06,37.4,21.0,12855.0,3226.0,7273.0,3052.0,4.3351,267400.0,NEAR BAY +-122.06,37.39,26.0,18.0,4.0,8.0,4.0,3.75,375000.0,NEAR BAY +-122.06,37.39,22.0,1236.0,290.0,413.0,274.0,3.6875,40000.0,NEAR BAY +-122.06,37.38,20.0,3401.0,768.0,1497.0,747.0,4.2188,500001.0,NEAR BAY +-122.06,37.38,21.0,1798.0,399.0,837.0,410.0,5.6999,470000.0,NEAR BAY +-122.06,37.37,18.0,3058.0,661.0,1377.0,675.0,6.1299,500001.0,<1H OCEAN +-122.06,37.38,20.0,2976.0,766.0,1227.0,634.0,4.8625,262500.0,NEAR BAY +-122.07,37.39,19.0,1465.0,342.0,646.0,345.0,4.712,289300.0,NEAR BAY +-122.08,37.4,23.0,806.0,158.0,373.0,156.0,5.9291,284600.0,NEAR BAY +-122.07,37.4,16.0,3352.0,813.0,1440.0,729.0,3.7359,262500.0,NEAR BAY +-122.07,37.41,26.0,1184.0,225.0,815.0,218.0,5.7657,322300.0,NEAR BAY +-122.07,37.4,15.0,2940.0,910.0,943.0,711.0,4.359,192200.0,NEAR BAY +-122.08,37.4,19.0,3565.0,858.0,1639.0,744.0,4.1544,277000.0,NEAR BAY +-122.08,37.4,25.0,1750.0,341.0,999.0,319.0,5.806,308700.0,NEAR BAY +-122.08,37.41,20.0,1896.0,456.0,1069.0,436.0,4.6875,288900.0,NEAR BAY +-122.09,37.4,36.0,1575.0,379.0,1036.0,382.0,5.1408,264700.0,NEAR BAY +-122.1,37.41,33.0,6277.0,1274.0,3025.0,1211.0,5.4721,343300.0,NEAR BAY +-122.09,37.41,8.0,1480.0,414.0,856.0,445.0,2.8203,284100.0,NEAR BAY +-122.09,37.41,14.0,753.0,193.0,421.0,153.0,4.2463,266700.0,NEAR BAY +-122.09,37.41,18.0,1476.0,473.0,838.0,415.0,3.575,274000.0,NEAR BAY +-122.09,37.4,22.0,1489.0,436.0,662.0,470.0,3.5179,197200.0,NEAR BAY +-122.09,37.4,17.0,748.0,184.0,412.0,180.0,3.4375,290600.0,NEAR BAY +-122.09,37.42,23.0,4874.0,1251.0,2699.0,1163.0,3.8003,229800.0,NEAR BAY +-122.11,37.41,27.0,5110.0,1599.0,2764.0,1482.0,3.4198,351900.0,NEAR BAY +-122.09,37.4,26.0,3218.0,1021.0,2087.0,964.0,3.2875,182700.0,NEAR BAY +-122.1,37.4,27.0,3410.0,1156.0,2314.0,1086.0,3.4868,165600.0,NEAR BAY +-122.1,37.4,23.0,1755.0,508.0,1374.0,506.0,4.3077,293500.0,NEAR BAY +-122.1,37.4,19.0,1085.0,288.0,1009.0,305.0,3.9091,276000.0,NEAR BAY +-122.11,37.4,16.0,1994.0,489.0,1173.0,472.0,4.1875,266400.0,NEAR BAY +-122.11,37.4,15.0,255.0,63.0,138.0,74.0,4.6591,175000.0,NEAR BAY +-122.1,37.4,23.0,514.0,210.0,367.0,206.0,3.1736,181300.0,NEAR BAY +-122.08,37.4,52.0,766.0,203.0,448.0,196.0,2.5208,316700.0,NEAR BAY +-122.09,37.39,43.0,2065.0,535.0,1029.0,500.0,3.7318,327700.0,NEAR BAY +-122.09,37.39,30.0,1722.0,490.0,1057.0,517.0,3.725,261300.0,NEAR BAY +-122.09,37.4,24.0,3983.0,1126.0,2645.0,1072.0,3.6742,275000.0,NEAR BAY +-122.08,37.39,44.0,1498.0,430.0,848.0,400.0,2.8438,307100.0,NEAR BAY +-122.08,37.39,46.0,1115.0,248.0,543.0,248.0,3.2083,334300.0,NEAR BAY +-122.08,37.39,4.0,2292.0,,1050.0,584.0,4.8036,340000.0,NEAR BAY +-122.07,37.39,30.0,1695.0,480.0,932.0,447.0,3.5045,352500.0,NEAR BAY +-122.07,37.39,37.0,1169.0,239.0,589.0,249.0,5.0131,330300.0,NEAR BAY +-122.07,37.38,26.0,1272.0,306.0,562.0,284.0,4.5644,280200.0,NEAR BAY +-122.08,37.39,39.0,2210.0,483.0,1023.0,450.0,4.5833,342400.0,NEAR BAY +-122.1,37.39,31.0,1117.0,304.0,591.0,302.0,3.5909,353100.0,NEAR BAY +-122.1,37.39,36.0,1860.0,367.0,794.0,366.0,5.0871,354500.0,NEAR BAY +-122.09,37.39,34.0,1508.0,483.0,774.0,443.0,2.7279,365600.0,NEAR BAY +-122.09,37.39,36.0,1035.0,196.0,475.0,205.0,5.5385,359000.0,NEAR BAY +-122.09,37.38,34.0,1959.0,342.0,849.0,357.0,6.2884,414700.0,NEAR BAY +-122.09,37.38,36.0,2587.0,416.0,1055.0,410.0,6.1995,407200.0,NEAR BAY +-122.08,37.38,33.0,2771.0,659.0,1496.0,581.0,3.4042,353600.0,NEAR BAY +-122.08,37.38,36.0,857.0,156.0,448.0,168.0,5.0086,366700.0,NEAR BAY +-122.08,37.38,36.0,1199.0,198.0,485.0,199.0,5.0796,373400.0,NEAR BAY +-122.08,37.38,36.0,782.0,130.0,348.0,128.0,6.828,383900.0,NEAR BAY +-122.08,37.37,29.0,1229.0,,707.0,194.0,7.1108,465000.0,NEAR BAY +-122.09,37.37,27.0,1269.0,186.0,464.0,182.0,6.8374,500001.0,NEAR BAY +-122.09,37.37,34.0,2165.0,355.0,776.0,339.0,5.2971,442100.0,NEAR BAY +-122.08,37.38,25.0,830.0,228.0,368.0,174.0,3.3917,342900.0,NEAR BAY +-122.07,37.37,22.0,3770.0,727.0,1657.0,762.0,4.8021,457500.0,NEAR BAY +-122.07,37.37,30.0,2937.0,407.0,1097.0,407.0,7.9813,473500.0,NEAR BAY +-122.07,37.36,21.0,3244.0,426.0,1158.0,415.0,7.5,500001.0,<1H OCEAN +-122.06,37.36,34.0,1747.0,250.0,662.0,257.0,6.8268,500001.0,<1H OCEAN +-122.07,37.36,28.0,4612.0,608.0,1686.0,567.0,10.0346,500001.0,<1H OCEAN +-122.08,37.36,31.0,2717.0,376.0,1001.0,381.0,9.281,500001.0,NEAR BAY +-122.09,37.36,37.0,1550.0,238.0,805.0,250.0,5.0222,500001.0,NEAR BAY +-122.09,37.36,37.0,2269.0,325.0,930.0,321.0,7.5274,500001.0,NEAR BAY +-122.08,37.36,28.0,2181.0,284.0,728.0,238.0,8.2266,500001.0,NEAR BAY +-122.06,37.35,30.0,2040.0,294.0,787.0,278.0,8.758,500001.0,<1H OCEAN +-122.07,37.34,33.0,1208.0,198.0,495.0,216.0,5.4659,500001.0,<1H OCEAN +-122.07,37.34,35.0,1172.0,184.0,512.0,175.0,7.3561,500001.0,<1H OCEAN +-122.07,37.35,35.0,1447.0,205.0,619.0,206.0,9.8144,500001.0,<1H OCEAN +-122.07,37.35,35.0,1579.0,210.0,570.0,196.0,8.5888,500001.0,<1H OCEAN +-122.08,37.35,35.0,1347.0,207.0,548.0,189.0,7.7068,500001.0,NEAR BAY +-122.07,37.34,30.0,1851.0,238.0,631.0,236.0,10.1007,500001.0,<1H OCEAN +-122.08,37.34,23.0,2597.0,335.0,922.0,338.0,10.5142,500001.0,<1H OCEAN +-122.08,37.34,28.0,1643.0,216.0,594.0,205.0,12.367,500001.0,<1H OCEAN +-122.08,37.35,33.0,2398.0,317.0,832.0,314.0,10.3591,500001.0,NEAR BAY +-122.1,37.38,37.0,4167.0,612.0,1577.0,597.0,7.5655,500001.0,NEAR BAY +-122.1,37.37,37.0,2511.0,354.0,945.0,348.0,8.3924,500001.0,NEAR BAY +-122.1,37.37,40.0,2224.0,354.0,929.0,345.0,8.1064,500001.0,NEAR BAY +-122.11,37.37,22.0,1477.0,195.0,520.0,187.0,10.3329,500001.0,NEAR BAY +-122.11,37.38,36.0,3598.0,500.0,1296.0,533.0,7.8177,500001.0,NEAR BAY +-122.11,37.38,22.0,3638.0,719.0,1329.0,650.0,5.0804,500001.0,NEAR BAY +-122.11,37.37,49.0,1068.0,190.0,410.0,171.0,7.2045,500001.0,NEAR BAY +-122.12,37.37,18.0,1617.0,231.0,555.0,222.0,8.9021,500001.0,NEAR BAY +-122.11,37.4,31.0,2836.0,490.0,1138.0,481.0,4.9519,500001.0,NEAR BAY +-122.11,37.39,36.0,1660.0,261.0,655.0,249.0,6.3967,500001.0,NEAR BAY +-122.1,37.39,35.0,2471.0,349.0,881.0,342.0,7.6229,500001.0,NEAR BAY +-122.12,37.4,31.0,2356.0,405.0,921.0,358.0,7.0245,500001.0,NEAR BAY +-122.12,37.39,34.0,3561.0,497.0,1336.0,501.0,8.9172,500001.0,NEAR BAY +-122.12,37.38,34.0,1443.0,218.0,504.0,200.0,8.4709,500001.0,NEAR BAY +-122.12,37.4,32.0,3514.0,473.0,1583.0,480.0,10.3894,500001.0,NEAR BAY +-122.13,37.4,29.0,6027.0,1195.0,2687.0,1171.0,5.1335,461200.0,NEAR BAY +-122.13,37.41,36.0,4787.0,900.0,2039.0,890.0,5.4063,440900.0,NEAR BAY +-122.14,37.41,35.0,2419.0,426.0,949.0,433.0,6.4588,437100.0,NEAR BAY +-122.14,37.42,46.0,206.0,44.0,134.0,51.0,4.15,265000.0,NEAR BAY +-122.13,37.42,36.0,3982.0,1045.0,2251.0,995.0,3.5364,314100.0,NEAR BAY +-122.12,37.41,33.0,2892.0,617.0,1250.0,581.0,5.3727,360900.0,NEAR BAY +-122.11,37.43,35.0,3584.0,535.0,1405.0,538.0,7.3023,451300.0,NEAR BAY +-122.11,37.43,35.0,3905.0,565.0,1562.0,553.0,7.313,463700.0,NEAR BAY +-122.11,37.42,32.0,3058.0,595.0,1267.0,540.0,6.4949,417800.0,NEAR BAY +-122.11,37.41,35.0,2712.0,428.0,1084.0,425.0,7.1382,443800.0,NEAR BAY +-122.11,37.41,33.0,1641.0,284.0,659.0,282.0,6.0884,432900.0,NEAR BAY +-122.12,37.42,35.0,2445.0,533.0,1187.0,519.0,5.2803,362100.0,NEAR BAY +-122.12,37.42,36.0,2607.0,551.0,1165.0,523.0,5.1524,373100.0,NEAR BAY +-122.13,37.43,40.0,3454.0,648.0,1498.0,647.0,5.2114,438400.0,NEAR BAY +-122.13,37.43,32.0,4398.0,878.0,1799.0,792.0,4.7375,431900.0,NEAR BAY +-122.12,37.43,36.0,3212.0,553.0,1455.0,574.0,6.46,425500.0,NEAR BAY +-122.12,37.44,33.0,2974.0,623.0,1435.0,588.0,5.485,406300.0,NEAR BAY +-122.13,37.44,42.0,2390.0,462.0,1146.0,468.0,6.3111,397400.0,NEAR BAY +-122.12,37.44,33.0,1509.0,303.0,748.0,268.0,4.875,373400.0,NEAR BAY +-122.11,37.44,35.0,2016.0,349.0,1023.0,376.0,5.6413,376600.0,NEAR BAY +-122.12,37.43,33.0,3262.0,668.0,1411.0,626.0,5.316,398100.0,NEAR BAY +-122.13,37.45,37.0,2295.0,332.0,933.0,332.0,6.7257,500001.0,NEAR BAY +-122.13,37.45,37.0,1287.0,197.0,510.0,206.0,7.9029,500001.0,NEAR BAY +-122.13,37.45,41.0,3233.0,540.0,1251.0,506.0,6.6354,500001.0,NEAR BAY +-122.13,37.44,43.0,3004.0,440.0,1088.0,427.0,9.1508,500001.0,NEAR BAY +-122.13,37.44,38.0,2835.0,447.0,1148.0,446.0,5.9277,446600.0,NEAR BAY +-122.15,37.46,39.0,906.0,109.0,353.0,112.0,10.3942,500001.0,NEAR BAY +-122.16,37.45,52.0,1135.0,219.0,441.0,200.0,7.5418,492000.0,NEAR BAY +-122.15,37.46,52.0,1803.0,257.0,683.0,259.0,10.9508,500001.0,NEAR BAY +-122.14,37.45,52.0,3841.0,537.0,1391.0,540.0,7.8647,500001.0,NEAR BAY +-122.15,37.45,52.0,2117.0,353.0,734.0,328.0,6.767,500001.0,NEAR BAY +-122.14,37.45,48.0,2074.0,297.0,700.0,279.0,8.7051,500001.0,NEAR BAY +-122.15,37.45,52.0,568.0,91.0,219.0,75.0,6.1575,500001.0,NEAR BAY +-122.16,37.45,47.0,4234.0,,1808.0,1093.0,4.2297,425000.0,NEAR BAY +-122.16,37.45,19.0,2207.0,810.0,1304.0,775.0,2.1406,402500.0,NEAR BAY +-122.16,37.45,37.0,2926.0,874.0,1363.0,815.0,4.5987,356000.0,NEAR BAY +-122.16,37.44,34.0,2199.0,529.0,1193.0,532.0,4.2972,405900.0,NEAR BAY +-122.15,37.44,52.0,2063.0,320.0,774.0,309.0,7.2543,500001.0,NEAR BAY +-122.15,37.44,52.0,1400.0,217.0,522.0,227.0,4.9861,500001.0,NEAR BAY +-122.15,37.44,52.0,1945.0,293.0,708.0,275.0,6.1655,500001.0,NEAR BAY +-122.14,37.44,52.0,3117.0,468.0,1114.0,421.0,6.6756,500001.0,NEAR BAY +-122.14,37.43,52.0,1944.0,308.0,696.0,293.0,8.2664,500001.0,NEAR BAY +-122.14,37.43,52.0,1327.0,190.0,467.0,189.0,12.5902,500001.0,NEAR BAY +-122.14,37.43,52.0,1383.0,227.0,551.0,249.0,6.5829,500001.0,NEAR BAY +-122.15,37.43,47.0,2600.0,490.0,1149.0,465.0,5.0203,476300.0,NEAR BAY +-122.15,37.42,44.0,3558.0,839.0,1779.0,832.0,3.9243,404800.0,NEAR BAY +-122.14,37.43,18.0,2060.0,563.0,1144.0,600.0,4.0686,378600.0,NEAR BAY +-122.15,37.43,20.0,11709.0,,7604.0,3589.0,1.9045,375000.0,NEAR BAY +-122.16,37.42,34.0,4448.0,610.0,2571.0,581.0,11.0492,500001.0,NEAR OCEAN +-122.15,37.41,15.0,2577.0,360.0,979.0,364.0,10.476,500001.0,NEAR BAY +-122.17,37.43,24.0,3924.0,1142.0,7174.0,950.0,4.0972,387500.0,NEAR OCEAN +-122.15,37.41,29.0,473.0,103.0,359.0,87.0,7.0309,475000.0,NEAR BAY +-122.18,37.41,21.0,1034.0,117.0,323.0,117.0,10.7237,500001.0,NEAR OCEAN +-122.13,37.39,27.0,3385.0,427.0,1248.0,409.0,12.0372,500001.0,NEAR BAY +-122.12,37.37,37.0,1446.0,181.0,549.0,190.0,10.7355,500001.0,NEAR BAY +-122.11,37.36,34.0,1575.0,183.0,511.0,180.0,13.1867,500001.0,NEAR BAY +-122.13,37.37,30.0,2139.0,260.0,742.0,242.0,11.806,500001.0,NEAR BAY +-122.14,37.38,26.0,2859.0,343.0,951.0,336.0,10.4277,500001.0,NEAR BAY +-122.1,37.36,32.0,1433.0,199.0,498.0,201.0,9.3586,500001.0,NEAR BAY +-122.1,37.36,35.0,2063.0,266.0,676.0,252.0,8.5294,500001.0,NEAR BAY +-122.09,37.35,37.0,1795.0,285.0,791.0,261.0,7.5794,500001.0,NEAR BAY +-122.09,37.35,30.0,1502.0,186.0,501.0,180.0,10.0259,500001.0,NEAR BAY +-122.14,37.36,23.0,11294.0,1377.0,3840.0,1367.0,12.1387,500001.0,NEAR BAY +-122.15,37.35,23.0,3814.0,485.0,1344.0,464.0,12.9792,500001.0,NEAR BAY +-122.11,37.31,7.0,189.0,26.0,84.0,29.0,13.8093,500001.0,<1H OCEAN +-122.12,37.29,11.0,436.0,70.0,212.0,75.0,8.6196,500001.0,<1H OCEAN +-122.12,37.28,21.0,349.0,64.0,149.0,56.0,5.8691,360000.0,<1H OCEAN +-122.08,37.24,21.0,427.0,63.0,182.0,70.0,11.3283,500001.0,<1H OCEAN +-122.01,37.18,37.0,3852.0,652.0,1534.0,567.0,5.8596,318700.0,<1H OCEAN +-121.98,37.16,42.0,2533.0,433.0,957.0,398.0,5.3468,279900.0,<1H OCEAN +-121.9,37.16,43.0,1529.0,311.0,570.0,250.0,5.2366,293300.0,<1H OCEAN +-121.93,37.13,37.0,1150.0,203.0,511.0,179.0,5.7415,398500.0,<1H OCEAN +-121.88,37.24,24.0,4420.0,996.0,2981.0,975.0,3.506,226400.0,<1H OCEAN +-121.9,37.24,24.0,7521.0,1364.0,3970.0,1318.0,4.4004,255800.0,<1H OCEAN +-121.86,37.22,18.0,7245.0,1029.0,2893.0,1049.0,6.9508,361200.0,<1H OCEAN +-121.86,37.23,24.0,4337.0,670.0,1936.0,652.0,5.8904,271400.0,<1H OCEAN +-121.85,37.22,21.0,6203.0,798.0,2494.0,800.0,7.7201,362700.0,<1H OCEAN +-121.89,37.21,14.0,5636.0,697.0,2281.0,680.0,8.4262,459200.0,<1H OCEAN +-121.84,37.18,6.0,9176.0,1201.0,3637.0,1138.0,8.3837,473400.0,<1H OCEAN +-121.87,37.22,17.0,2825.0,365.0,1052.0,345.0,8.0595,485000.0,<1H OCEAN +-121.87,37.22,26.0,1921.0,250.0,725.0,253.0,7.6933,405900.0,<1H OCEAN +-121.86,37.21,23.0,2552.0,305.0,916.0,316.0,9.1974,500001.0,<1H OCEAN +-121.87,37.21,18.0,1080.0,122.0,382.0,121.0,9.08,500001.0,<1H OCEAN +-121.83,37.23,7.0,5389.0,903.0,2232.0,825.0,6.6659,500001.0,<1H OCEAN +-121.8,37.19,45.0,1797.0,303.0,870.0,281.0,4.5417,434500.0,<1H OCEAN +-121.84,37.21,15.0,5468.0,676.0,2221.0,675.0,8.3792,418300.0,<1H OCEAN +-121.83,37.2,6.0,3694.0,574.0,1554.0,527.0,6.8333,348000.0,<1H OCEAN +-121.83,37.21,14.0,2714.0,361.0,1259.0,375.0,7.7738,387500.0,<1H OCEAN +-121.89,37.23,16.0,3574.0,466.0,1503.0,487.0,8.1988,355900.0,<1H OCEAN +-121.89,37.23,20.0,7754.0,976.0,3094.0,941.0,8.19,361600.0,<1H OCEAN +-121.88,37.24,14.0,7174.0,950.0,2782.0,899.0,8.3065,394200.0,<1H OCEAN +-121.87,37.23,19.0,7357.0,963.0,3018.0,981.0,6.9473,361400.0,<1H OCEAN +-121.87,37.27,16.0,3298.0,451.0,1542.0,423.0,6.7064,305600.0,<1H OCEAN +-121.87,37.27,25.0,1730.0,226.0,721.0,243.0,7.5845,279300.0,<1H OCEAN +-121.86,37.27,19.0,1852.0,268.0,866.0,272.0,5.6139,279500.0,<1H OCEAN +-121.87,37.27,18.0,3561.0,560.0,1753.0,553.0,5.0292,269400.0,<1H OCEAN +-121.86,37.27,17.0,4393.0,709.0,2292.0,692.0,5.6876,246500.0,<1H OCEAN +-121.77,37.23,15.0,4713.0,769.0,2519.0,778.0,5.6958,253800.0,<1H OCEAN +-121.77,37.22,16.0,1617.0,306.0,667.0,264.0,4.5221,191100.0,<1H OCEAN +-121.77,37.22,16.0,3992.0,540.0,2097.0,555.0,6.7287,299300.0,<1H OCEAN +-121.76,37.23,16.0,4274.0,715.0,2240.0,704.0,5.4218,233900.0,<1H OCEAN +-121.84,37.25,25.0,5939.0,989.0,3275.0,954.0,5.6488,234600.0,<1H OCEAN +-121.83,37.23,22.0,5507.0,841.0,2785.0,848.0,6.0889,245200.0,<1H OCEAN +-121.84,37.24,18.0,3574.0,504.0,1803.0,536.0,6.7836,274100.0,<1H OCEAN +-121.84,37.24,24.0,7991.0,1286.0,4017.0,1213.0,5.4741,238800.0,<1H OCEAN +-121.85,37.24,17.0,6425.0,1268.0,3934.0,1238.0,5.1228,237600.0,<1H OCEAN +-121.86,37.25,16.0,6958.0,1300.0,2965.0,1217.0,4.2885,262400.0,<1H OCEAN +-121.83,37.28,17.0,3057.0,606.0,2030.0,602.0,5.2166,230900.0,<1H OCEAN +-121.81,37.27,20.0,3244.0,520.0,1769.0,469.0,5.9214,224000.0,<1H OCEAN +-121.8,37.27,17.0,3912.0,737.0,2693.0,746.0,5.0772,221500.0,<1H OCEAN +-121.82,37.27,16.0,2030.0,321.0,1343.0,365.0,6.3566,279100.0,<1H OCEAN +-121.81,37.27,22.0,2996.0,695.0,2169.0,607.0,4.3438,209700.0,<1H OCEAN +-121.8,37.26,26.0,1394.0,238.0,990.0,315.0,4.8862,195000.0,<1H OCEAN +-121.8,37.26,18.0,3631.0,947.0,2357.0,757.0,2.875,184400.0,<1H OCEAN +-121.85,37.27,17.0,1957.0,261.0,863.0,269.0,7.3339,294200.0,<1H OCEAN +-121.84,37.27,9.0,3624.0,812.0,1856.0,721.0,4.2083,198400.0,<1H OCEAN +-121.84,37.27,17.0,2795.0,482.0,1904.0,506.0,5.0186,250800.0,<1H OCEAN +-121.83,37.27,8.0,4454.0,1058.0,2595.0,1027.0,4.5615,282600.0,<1H OCEAN +-121.84,37.27,16.0,2429.0,387.0,1293.0,363.0,5.5,253200.0,<1H OCEAN +-121.83,37.27,14.0,2855.0,380.0,1420.0,383.0,6.6712,311500.0,<1H OCEAN +-121.82,37.26,10.0,3030.0,574.0,1623.0,589.0,5.1356,218700.0,<1H OCEAN +-121.83,37.26,11.0,2394.0,403.0,1393.0,409.0,5.5875,259300.0,<1H OCEAN +-121.81,37.26,14.0,3379.0,683.0,1465.0,620.0,4.0547,236200.0,<1H OCEAN +-121.81,37.26,16.0,1911.0,327.0,1158.0,332.0,5.9359,249500.0,<1H OCEAN +-121.81,37.25,20.0,3398.0,771.0,1231.0,744.0,2.0288,350000.0,<1H OCEAN +-121.81,37.25,12.0,2070.0,587.0,1216.0,532.0,4.1926,244500.0,<1H OCEAN +-121.83,37.26,7.0,3609.0,751.0,1739.0,682.0,4.5033,213100.0,<1H OCEAN +-121.82,37.25,16.0,2650.0,600.0,1969.0,586.0,3.9461,194300.0,<1H OCEAN +-121.83,37.25,17.0,2332.0,637.0,1636.0,623.0,3.1932,123400.0,<1H OCEAN +-121.87,37.26,17.0,1051.0,172.0,446.0,173.0,5.6652,234500.0,<1H OCEAN +-121.86,37.26,16.0,2814.0,485.0,1305.0,465.0,5.5121,224100.0,<1H OCEAN +-121.87,37.26,24.0,2383.0,343.0,1146.0,341.0,5.6223,265700.0,<1H OCEAN +-121.85,37.26,16.0,1982.0,280.0,1030.0,297.0,6.4339,289200.0,<1H OCEAN +-121.85,37.26,16.0,2312.0,303.0,1158.0,295.0,7.4323,311800.0,<1H OCEAN +-121.85,37.26,16.0,1816.0,241.0,793.0,234.0,6.8194,291200.0,<1H OCEAN +-121.84,37.26,5.0,1808.0,340.0,825.0,339.0,5.0509,184800.0,<1H OCEAN +-121.83,37.26,15.0,3243.0,551.0,1752.0,551.0,5.5849,257400.0,<1H OCEAN +-121.84,37.25,17.0,2363.0,473.0,1369.0,442.0,4.8355,141600.0,<1H OCEAN +-121.87,37.25,4.0,2498.0,775.0,1213.0,631.0,3.7844,183900.0,<1H OCEAN +-121.85,37.25,20.0,3773.0,624.0,1965.0,607.0,5.4939,241200.0,<1H OCEAN +-121.83,37.24,23.0,2543.0,388.0,1297.0,385.0,5.9164,237400.0,<1H OCEAN +-121.81,37.24,21.0,3250.0,610.0,1978.0,568.0,4.5,234400.0,<1H OCEAN +-121.82,37.24,20.0,3671.0,567.0,1944.0,589.0,6.0538,241000.0,<1H OCEAN +-121.82,37.25,24.0,3344.0,531.0,1768.0,541.0,5.8305,245600.0,<1H OCEAN +-121.82,37.25,25.0,4021.0,634.0,2178.0,650.0,5.1663,241200.0,<1H OCEAN +-121.81,37.25,5.0,1975.0,520.0,861.0,440.0,4.4565,159000.0,<1H OCEAN +-121.81,37.25,25.0,4096.0,623.0,2128.0,618.0,6.2957,251800.0,<1H OCEAN +-121.82,37.23,23.0,4487.0,584.0,2024.0,580.0,7.5218,291500.0,<1H OCEAN +-121.82,37.23,25.0,2349.0,394.0,1266.0,383.0,4.9688,233100.0,<1H OCEAN +-121.81,37.23,16.0,1674.0,281.0,850.0,254.0,5.3157,253300.0,<1H OCEAN +-121.81,37.23,19.0,2635.0,427.0,1497.0,410.0,6.3178,248000.0,<1H OCEAN +-121.81,37.23,24.0,2413.0,369.0,1237.0,381.0,6.4328,257200.0,<1H OCEAN +-121.81,37.23,17.0,2319.0,324.0,1076.0,338.0,6.4664,278300.0,<1H OCEAN +-121.78,37.24,17.0,2123.0,341.0,1067.0,339.0,6.0062,262700.0,<1H OCEAN +-121.78,37.22,18.0,2127.0,387.0,1547.0,402.0,5.0958,217100.0,<1H OCEAN +-121.78,37.23,18.0,1747.0,317.0,1055.0,285.0,5.898,229100.0,<1H OCEAN +-121.79,37.23,16.0,2240.0,300.0,1221.0,305.0,6.0198,289600.0,<1H OCEAN +-121.79,37.23,17.0,2281.0,359.0,1226.0,394.0,5.4193,259500.0,<1H OCEAN +-121.8,37.23,18.0,3179.0,526.0,1663.0,507.0,5.9225,265800.0,<1H OCEAN +-121.8,37.23,18.0,2581.0,358.0,1284.0,377.0,6.7385,272400.0,<1H OCEAN +-121.8,37.27,10.0,3301.0,593.0,2190.0,575.0,6.223,260700.0,<1H OCEAN +-121.8,37.26,16.0,1868.0,285.0,995.0,284.0,5.9053,260500.0,<1H OCEAN +-121.76,37.26,17.0,250.0,52.0,141.0,51.0,4.6458,500001.0,<1H OCEAN +-121.77,37.24,12.0,10236.0,1878.0,5674.0,1816.0,4.747,261100.0,<1H OCEAN +-121.7,37.2,15.0,531.0,154.0,469.0,155.0,4.65,385700.0,<1H OCEAN +-121.74,37.19,11.0,1290.0,197.0,881.0,191.0,4.2039,500001.0,<1H OCEAN +-121.72,37.16,21.0,1062.0,179.0,631.0,185.0,4.7386,394100.0,<1H OCEAN +-121.75,37.11,18.0,3167.0,,1414.0,482.0,6.8773,467700.0,<1H OCEAN +-121.68,37.0,19.0,3754.0,588.0,1692.0,550.0,6.7644,412600.0,<1H OCEAN +-121.61,37.15,16.0,5498.0,729.0,2051.0,694.0,7.8601,416300.0,<1H OCEAN +-121.6,37.13,14.0,9483.0,1361.0,4108.0,1281.0,7.5,344500.0,<1H OCEAN +-121.64,37.15,13.0,4780.0,798.0,2795.0,764.0,6.1684,288100.0,<1H OCEAN +-121.64,37.14,14.0,5487.0,1024.0,2823.0,979.0,4.175,229800.0,<1H OCEAN +-121.63,37.12,17.0,1830.0,398.0,1110.0,388.0,2.4821,248200.0,<1H OCEAN +-121.69,37.14,12.0,4077.0,590.0,1618.0,540.0,5.2951,386200.0,<1H OCEAN +-121.66,37.13,20.0,4477.0,924.0,2656.0,871.0,3.8788,226900.0,<1H OCEAN +-121.65,37.12,14.0,4721.0,999.0,2648.0,888.0,3.6895,239300.0,<1H OCEAN +-121.66,37.11,19.0,3785.0,611.0,2198.0,610.0,5.1514,436700.0,<1H OCEAN +-121.65,37.11,14.0,6006.0,914.0,2915.0,898.0,5.9356,321700.0,<1H OCEAN +-121.63,37.1,14.0,5034.0,797.0,2124.0,790.0,4.9028,335000.0,<1H OCEAN +-121.67,37.13,19.0,3269.0,483.0,1383.0,452.0,5.6205,300800.0,<1H OCEAN +-121.56,37.08,17.0,6725.0,1051.0,3439.0,1027.0,6.4313,393100.0,<1H OCEAN +-121.61,37.06,21.0,5322.0,908.0,3011.0,895.0,5.5936,386800.0,<1H OCEAN +-121.6,37.09,24.0,1511.0,318.0,1052.0,292.0,3.625,350000.0,<1H OCEAN +-121.62,37.09,37.0,1593.0,303.0,1030.0,287.0,3.9306,260700.0,<1H OCEAN +-121.58,37.01,44.0,3192.0,565.0,1439.0,568.0,4.3693,234000.0,INLAND +-121.57,37.0,18.0,7241.0,1225.0,4168.0,1138.0,4.5714,260300.0,INLAND +-121.57,36.98,14.0,5231.0,817.0,2634.0,799.0,4.9702,279800.0,INLAND +-121.58,37.01,15.0,2873.0,547.0,1582.0,567.0,5.1519,264700.0,INLAND +-121.59,36.97,16.0,865.0,123.0,403.0,130.0,5.7396,308700.0,INLAND +-121.59,37.01,16.0,6637.0,1171.0,3575.0,1162.0,4.3227,251500.0,INLAND +-121.61,37.03,5.0,6529.0,1010.0,3071.0,977.0,5.6754,298500.0,<1H OCEAN +-121.58,37.03,16.0,3120.0,685.0,2383.0,681.0,3.5551,198600.0,INLAND +-121.58,37.02,27.0,2303.0,471.0,1447.0,467.0,3.2019,203600.0,INLAND +-121.59,37.02,14.0,6355.0,1279.0,3704.0,1224.0,4.4233,228600.0,INLAND +-121.57,37.02,17.0,2889.0,624.0,2681.0,608.0,2.9417,178000.0,INLAND +-121.57,37.01,44.0,1448.0,393.0,1066.0,357.0,2.0625,170300.0,INLAND +-121.56,37.0,20.0,3976.0,953.0,3866.0,950.0,2.5387,160100.0,INLAND +-121.54,36.99,27.0,2361.0,449.0,1782.0,397.0,3.2614,305000.0,INLAND +-121.51,37.02,19.0,2372.0,394.0,1142.0,365.0,4.0238,374600.0,INLAND +-121.74,37.35,34.0,440.0,90.0,217.0,93.0,5.2327,500001.0,<1H OCEAN +-121.55,37.37,39.0,759.0,141.0,252.0,106.0,3.6964,262500.0,INLAND +-121.59,37.19,52.0,220.0,32.0,55.0,26.0,15.0001,131300.0,<1H OCEAN +-121.37,37.06,25.0,474.0,92.0,300.0,104.0,3.8062,340900.0,INLAND +-122.03,37.18,10.0,212.0,38.0,78.0,21.0,6.0622,390000.0,<1H OCEAN +-121.96,37.13,26.0,50.0,5.0,17.0,4.0,15.0001,400000.0,<1H OCEAN +-121.98,37.14,37.0,74.0,19.0,63.0,17.0,9.5908,350000.0,<1H OCEAN +-122.0,37.0,16.0,32.0,4.0,36.0,5.0,2.625,137500.0,NEAR OCEAN +-122.01,36.99,29.0,227.0,45.0,112.0,41.0,6.4469,271400.0,NEAR OCEAN +-122.01,36.99,28.0,1321.0,240.0,652.0,239.0,4.9808,263100.0,NEAR OCEAN +-121.99,36.99,29.0,3119.0,507.0,1476.0,487.0,5.8123,281500.0,NEAR OCEAN +-121.99,36.98,40.0,1104.0,224.0,669.0,215.0,4.3409,256300.0,NEAR OCEAN +-122.0,36.98,43.0,1636.0,324.0,792.0,325.0,3.5562,239200.0,NEAR OCEAN +-122.01,36.99,41.0,2548.0,508.0,1290.0,488.0,3.6902,233000.0,NEAR OCEAN +-122.01,36.98,47.0,1250.0,249.0,607.0,234.0,4.0417,265300.0,NEAR OCEAN +-122.02,36.99,30.0,2156.0,487.0,1023.0,458.0,2.7875,245000.0,NEAR OCEAN +-122.02,36.98,21.0,1484.0,394.0,984.0,380.0,2.1734,187500.0,NEAR OCEAN +-122.02,36.98,44.0,1153.0,238.0,657.0,219.0,3.2368,212500.0,NEAR OCEAN +-122.04,36.98,35.0,2155.0,355.0,866.0,335.0,5.6188,404700.0,NEAR OCEAN +-122.04,36.98,33.0,797.0,125.0,385.0,133.0,6.7974,367600.0,NEAR OCEAN +-122.04,36.97,30.0,2695.0,424.0,1098.0,420.0,5.3972,362300.0,NEAR OCEAN +-122.06,37.0,14.0,1547.0,374.0,4731.0,348.0,2.4732,131300.0,NEAR OCEAN +-122.05,36.97,20.0,2428.0,473.0,1145.0,454.0,3.6797,263800.0,NEAR OCEAN +-122.05,36.97,16.0,3363.0,611.0,1603.0,556.0,4.2542,294100.0,NEAR OCEAN +-122.06,36.98,15.0,3385.0,669.0,1571.0,615.0,4.2254,320900.0,NEAR OCEAN +-122.04,36.98,51.0,1076.0,206.0,495.0,201.0,2.9286,258300.0,NEAR OCEAN +-122.04,36.97,45.0,1302.0,245.0,621.0,258.0,5.1806,266400.0,NEAR OCEAN +-122.04,36.97,52.0,1901.0,335.0,955.0,301.0,3.8259,253100.0,NEAR OCEAN +-122.04,36.97,49.0,792.0,136.0,331.0,137.0,5.2128,238600.0,NEAR OCEAN +-122.04,36.96,44.0,1294.0,269.0,645.0,259.0,3.2437,223900.0,NEAR OCEAN +-122.03,36.98,37.0,2817.0,716.0,1341.0,662.0,2.1553,255400.0,NEAR OCEAN +-122.01,36.98,47.0,2403.0,517.0,1144.0,455.0,2.5954,229400.0,NEAR OCEAN +-122.02,36.98,35.0,1053.0,263.0,552.0,237.0,2.7125,217500.0,NEAR OCEAN +-122.02,36.98,21.0,607.0,155.0,226.0,136.0,1.9063,166700.0,NEAR OCEAN +-122.02,36.97,29.0,2568.0,747.0,1743.0,659.0,1.9286,195300.0,NEAR OCEAN +-122.01,36.97,43.0,2162.0,509.0,1208.0,464.0,2.5417,260900.0,NEAR OCEAN +-122.01,36.97,52.0,920.0,202.0,525.0,264.0,2.9444,232800.0,NEAR OCEAN +-122.01,36.97,35.0,1605.0,392.0,743.0,382.0,2.5368,240000.0,NEAR OCEAN +-122.0,36.98,20.0,2502.0,454.0,981.0,399.0,4.3,275000.0,NEAR OCEAN +-122.01,36.98,27.0,2820.0,730.0,1511.0,745.0,2.589,242400.0,NEAR OCEAN +-122.0,36.97,30.0,1029.0,242.0,753.0,249.0,3.1205,240500.0,NEAR OCEAN +-122.0,36.93,51.0,1616.0,374.0,608.0,302.0,3.1932,400000.0,NEAR OCEAN +-122.01,36.95,52.0,1217.0,325.0,508.0,237.0,2.0547,326700.0,NEAR OCEAN +-122.03,36.97,51.0,924.0,232.0,488.0,228.0,2.1964,234400.0,NEAR OCEAN +-122.03,36.97,36.0,337.0,69.0,223.0,68.0,3.2404,225000.0,NEAR OCEAN +-122.03,36.97,52.0,403.0,72.0,200.0,73.0,1.6923,262500.0,NEAR OCEAN +-122.04,36.97,40.0,1193.0,227.0,570.0,204.0,4.4659,237500.0,NEAR OCEAN +-122.03,36.96,18.0,2677.0,785.0,1391.0,656.0,2.5067,232600.0,NEAR OCEAN +-122.02,36.97,44.0,594.0,169.0,325.0,139.0,1.1552,250000.0,NEAR OCEAN +-122.02,36.97,39.0,2124.0,661.0,1365.0,606.0,1.6642,281300.0,NEAR OCEAN +-122.02,36.96,52.0,775.0,305.0,1054.0,305.0,2.0172,112500.0,NEAR OCEAN +-122.03,36.96,40.0,584.0,126.0,316.0,139.0,3.5938,243500.0,NEAR OCEAN +-122.03,36.96,28.0,1607.0,421.0,926.0,385.0,2.425,216100.0,NEAR OCEAN +-122.04,36.96,32.0,1438.0,306.0,802.0,293.0,4.1964,202000.0,NEAR OCEAN +-122.04,36.96,42.0,538.0,107.0,200.0,104.0,2.1667,196400.0,NEAR OCEAN +-122.04,36.96,42.0,1149.0,264.0,703.0,232.0,2.5865,206400.0,NEAR OCEAN +-122.03,36.96,32.0,2182.0,406.0,1122.0,370.0,3.52,284200.0,NEAR OCEAN +-122.04,36.95,36.0,1862.0,364.0,1080.0,364.0,4.4567,263800.0,NEAR OCEAN +-122.01,36.91,19.0,691.0,191.0,324.0,167.0,3.1312,388500.0,NEAR OCEAN +-122.05,36.96,30.0,971.0,185.0,644.0,173.0,4.2045,226500.0,NEAR OCEAN +-122.06,36.96,52.0,65.0,17.0,24.0,10.0,4.5,258300.0,NEAR OCEAN +-122.05,36.87,18.0,2232.0,440.0,1091.0,458.0,3.8269,276000.0,NEAR OCEAN +-122.04,36.95,27.0,1987.0,374.0,961.0,343.0,3.9667,265800.0,NEAR OCEAN +-122.04,37.0,52.0,3365.0,644.0,796.0,333.0,2.9712,116600.0,NEAR OCEAN +-121.75,36.91,32.0,1461.0,422.0,1494.0,416.0,2.8056,173200.0,<1H OCEAN +-121.74,36.92,29.0,1210.0,281.0,863.0,262.0,3.1062,156000.0,<1H OCEAN +-121.74,36.92,17.0,2648.0,589.0,1193.0,540.0,2.4461,151700.0,<1H OCEAN +-121.74,36.92,14.0,3355.0,695.0,1350.0,697.0,2.6506,164600.0,<1H OCEAN +-121.75,36.93,24.0,4026.0,881.0,2264.0,863.0,3.1327,218100.0,<1H OCEAN +-121.75,36.92,48.0,1801.0,353.0,1071.0,361.0,3.6,194500.0,<1H OCEAN +-121.75,36.92,46.0,1362.0,321.0,1068.0,305.0,2.4615,177800.0,<1H OCEAN +-121.76,36.92,36.0,2096.0,409.0,1454.0,394.0,3.2216,238300.0,<1H OCEAN +-121.76,36.92,46.0,947.0,257.0,1120.0,264.0,3.4125,160700.0,<1H OCEAN +-121.75,36.91,52.0,1211.0,447.0,1102.0,392.0,1.6875,161400.0,<1H OCEAN +-121.76,36.91,23.0,1276.0,437.0,1359.0,376.0,1.9609,155000.0,<1H OCEAN +-121.75,36.91,42.0,1368.0,468.0,2312.0,484.0,2.5599,151400.0,<1H OCEAN +-121.77,36.91,8.0,2715.0,750.0,2580.0,718.0,2.8348,162000.0,<1H OCEAN +-121.76,36.9,44.0,919.0,309.0,1321.0,301.0,2.0775,121400.0,<1H OCEAN +-121.77,36.93,20.0,2587.0,547.0,1534.0,540.0,2.4375,190400.0,<1H OCEAN +-121.77,36.93,24.0,1943.0,447.0,1844.0,461.0,3.0192,184300.0,<1H OCEAN +-121.77,36.93,33.0,1406.0,317.0,1075.0,301.0,3.2813,190000.0,<1H OCEAN +-121.76,36.92,20.0,2687.0,637.0,2154.0,610.0,2.6434,169700.0,<1H OCEAN +-121.77,36.92,9.0,4934.0,1112.0,3198.0,977.0,3.5,194800.0,<1H OCEAN +-121.79,36.93,19.0,2512.0,509.0,1856.0,537.0,3.1815,189100.0,<1H OCEAN +-121.78,36.92,19.0,1515.0,253.0,975.0,266.0,4.3906,241200.0,<1H OCEAN +-121.78,36.93,21.0,2794.0,662.0,2236.0,565.0,2.4053,178400.0,<1H OCEAN +-121.77,36.94,18.0,1063.0,341.0,1033.0,313.0,2.0192,171300.0,<1H OCEAN +-121.79,36.95,34.0,2152.0,430.0,1516.0,386.0,3.7863,192200.0,<1H OCEAN +-121.8,36.94,29.0,2377.0,476.0,1669.0,499.0,2.8214,190100.0,<1H OCEAN +-122.25,37.08,20.0,1201.0,282.0,601.0,234.0,2.5556,177500.0,NEAR OCEAN +-122.14,37.08,18.0,2420.0,439.0,1278.0,416.0,5.2101,334000.0,NEAR OCEAN +-122.11,37.05,18.0,3337.0,549.0,1449.0,519.0,5.1412,315800.0,NEAR OCEAN +-122.13,36.97,27.0,991.0,194.0,543.0,155.0,4.7188,350000.0,NEAR OCEAN +-122.07,37.13,26.0,1127.0,199.0,543.0,199.0,4.9792,240000.0,NEAR OCEAN +-122.09,37.09,46.0,695.0,136.0,408.0,148.0,3.9408,222600.0,NEAR OCEAN +-122.09,37.11,32.0,2637.0,489.0,1031.0,410.0,3.6474,231600.0,NEAR OCEAN +-122.12,37.09,36.0,1397.0,289.0,661.0,243.0,4.125,239600.0,NEAR OCEAN +-122.09,37.07,33.0,3581.0,734.0,1780.0,663.0,4.3429,214300.0,NEAR OCEAN +-122.08,37.08,35.0,1541.0,297.0,791.0,277.0,4.425,204800.0,NEAR OCEAN +-122.16,37.17,35.0,6422.0,1380.0,2755.0,1064.0,5.0165,202300.0,NEAR OCEAN +-122.12,37.12,51.0,2419.0,485.0,1078.0,435.0,2.7933,206900.0,NEAR OCEAN +-122.18,37.15,17.0,1457.0,289.0,591.0,235.0,5.5785,284100.0,NEAR OCEAN +-122.12,37.16,32.0,1602.0,317.0,752.0,275.0,5.1664,185100.0,NEAR OCEAN +-122.1,37.19,18.0,808.0,136.0,420.0,145.0,7.1831,273300.0,NEAR OCEAN +-122.08,37.15,23.0,506.0,96.0,264.0,89.0,7.1366,273900.0,NEAR OCEAN +-122.11,37.11,46.0,1993.0,404.0,850.0,327.0,5.208,206800.0,NEAR OCEAN +-122.11,37.14,29.0,3201.0,640.0,1722.0,570.0,4.4597,204100.0,NEAR OCEAN +-122.13,37.15,39.0,2854.0,613.0,1338.0,518.0,3.9423,180300.0,NEAR OCEAN +-122.09,37.21,15.0,1969.0,332.0,822.0,324.0,7.8774,394900.0,<1H OCEAN +-122.0,37.12,17.0,4413.0,672.0,1674.0,608.0,6.9772,383300.0,<1H OCEAN +-122.04,37.12,30.0,1427.0,311.0,686.0,251.0,4.0781,154500.0,NEAR OCEAN +-122.02,37.11,36.0,2066.0,401.0,942.0,344.0,5.2417,196400.0,NEAR OCEAN +-122.05,37.11,39.0,1065.0,248.0,497.0,208.0,4.5972,146300.0,NEAR OCEAN +-122.07,37.08,21.0,5639.0,894.0,2670.0,871.0,6.0809,270000.0,NEAR OCEAN +-122.05,37.05,41.0,2422.0,502.0,915.0,366.0,4.1679,201300.0,NEAR OCEAN +-122.07,37.06,31.0,1634.0,370.0,939.0,332.0,3.8625,232300.0,NEAR OCEAN +-122.08,37.04,34.0,2800.0,577.0,1353.0,512.0,4.1161,220900.0,NEAR OCEAN +-122.08,37.03,36.0,4682.0,899.0,2143.0,832.0,4.5096,203700.0,NEAR OCEAN +-122.04,37.04,17.0,4977.0,994.0,1987.0,947.0,3.8854,312300.0,NEAR OCEAN +-122.03,37.03,21.0,4650.0,733.0,2014.0,704.0,5.6233,322000.0,NEAR OCEAN +-122.02,37.01,20.0,1005.0,138.0,345.0,129.0,10.0968,500001.0,NEAR OCEAN +-122.03,37.0,30.0,2077.0,342.0,816.0,328.0,5.2078,440500.0,NEAR OCEAN +-122.04,37.08,20.0,467.0,95.0,229.0,86.0,4.8,261500.0,NEAR OCEAN +-122.02,37.09,35.0,1818.0,368.0,682.0,254.0,4.8611,240000.0,NEAR OCEAN +-122.03,37.05,12.0,2010.0,422.0,784.0,407.0,3.9728,190900.0,NEAR OCEAN +-122.01,37.06,19.0,4113.0,767.0,2006.0,732.0,5.1121,308100.0,NEAR OCEAN +-122.0,37.08,17.0,4154.0,739.0,2149.0,693.0,5.5919,373400.0,NEAR OCEAN +-121.95,37.11,21.0,2387.0,357.0,913.0,341.0,7.736,397700.0,<1H OCEAN +-121.96,37.1,20.0,922.0,155.0,361.0,135.0,6.3617,331500.0,<1H OCEAN +-121.87,37.1,20.0,1918.0,304.0,798.0,302.0,7.5755,402300.0,<1H OCEAN +-121.9,37.1,23.0,1708.0,287.0,670.0,238.0,6.4517,356600.0,<1H OCEAN +-121.93,37.04,36.0,1522.0,230.0,677.0,206.0,5.8642,363500.0,<1H OCEAN +-121.96,37.03,17.0,1343.0,203.0,511.0,185.0,4.625,386400.0,NEAR OCEAN +-121.93,37.05,14.0,679.0,108.0,306.0,113.0,6.4214,340600.0,<1H OCEAN +-121.96,37.06,16.0,1321.0,224.0,650.0,206.0,6.3258,390000.0,NEAR OCEAN +-121.99,37.05,19.0,2023.0,392.0,955.0,328.0,5.2486,353000.0,NEAR OCEAN +-122.0,37.06,20.0,2403.0,376.0,1149.0,369.0,6.0621,304400.0,NEAR OCEAN +-122.01,37.03,21.0,5904.0,956.0,2616.0,916.0,5.9039,355300.0,NEAR OCEAN +-121.97,37.01,21.0,2073.0,357.0,1044.0,351.0,4.5682,371600.0,NEAR OCEAN +-121.98,36.99,14.0,6787.0,1454.0,3416.0,1357.0,3.5943,262400.0,NEAR OCEAN +-121.97,37.0,25.0,990.0,166.0,522.0,185.0,4.8269,272900.0,NEAR OCEAN +-121.98,36.98,29.0,2681.0,632.0,1652.0,620.0,3.075,215800.0,NEAR OCEAN +-121.99,36.99,16.0,1592.0,369.0,1039.0,351.0,3.6364,207000.0,NEAR OCEAN +-121.99,36.98,25.0,2113.0,422.0,1365.0,439.0,4.6484,234600.0,NEAR OCEAN +-121.99,36.98,19.0,5613.0,1321.0,3018.0,1268.0,3.1914,215600.0,NEAR OCEAN +-121.98,36.97,21.0,3349.0,737.0,1952.0,718.0,3.7273,251900.0,NEAR OCEAN +-121.98,36.96,20.0,3495.0,818.0,2186.0,772.0,3.1167,258300.0,NEAR OCEAN +-121.99,36.97,15.0,3044.0,786.0,1306.0,693.0,2.1771,213200.0,NEAR OCEAN +-122.0,36.97,39.0,2702.0,646.0,1136.0,491.0,2.8941,256700.0,NEAR OCEAN +-121.99,36.96,42.0,1275.0,272.0,451.0,200.0,4.7321,422400.0,NEAR OCEAN +-121.99,36.96,16.0,875.0,201.0,300.0,157.0,2.625,377300.0,NEAR OCEAN +-121.96,36.88,37.0,2846.0,553.0,939.0,433.0,4.7468,294400.0,NEAR OCEAN +-121.97,36.97,24.0,3665.0,870.0,1954.0,833.0,2.8036,228500.0,NEAR OCEAN +-121.97,36.96,27.0,4001.0,999.0,1808.0,945.0,2.561,234600.0,NEAR OCEAN +-121.98,36.96,31.0,3209.0,723.0,1489.0,692.0,3.6619,245100.0,NEAR OCEAN +-121.96,36.98,16.0,4907.0,1117.0,2265.0,1048.0,2.6757,229200.0,NEAR OCEAN +-121.97,36.98,17.0,2813.0,497.0,1337.0,477.0,3.7083,252400.0,NEAR OCEAN +-121.97,36.97,15.0,2849.0,668.0,1546.0,582.0,2.7587,228600.0,NEAR OCEAN +-121.96,36.97,23.0,4324.0,1034.0,1844.0,875.0,3.0777,263800.0,NEAR OCEAN +-121.94,36.98,24.0,3010.0,562.0,1360.0,504.0,4.2006,290700.0,NEAR OCEAN +-121.94,36.98,21.0,3520.0,831.0,1486.0,753.0,3.0905,264300.0,NEAR OCEAN +-121.95,36.98,34.0,3745.0,958.0,1622.0,802.0,3.1546,261200.0,NEAR OCEAN +-121.94,36.97,31.0,1738.0,422.0,746.0,355.0,2.5172,330800.0,NEAR OCEAN +-121.93,36.99,19.0,6356.0,1100.0,2954.0,1070.0,4.7325,283500.0,NEAR OCEAN +-121.94,37.0,32.0,2210.0,426.0,1082.0,396.0,4.1587,315200.0,NEAR OCEAN +-121.96,37.0,20.0,3847.0,727.0,1725.0,737.0,3.3447,305200.0,NEAR OCEAN +-121.96,36.99,23.0,3209.0,748.0,1423.0,666.0,2.7375,238000.0,NEAR OCEAN +-121.94,36.99,11.0,4571.0,924.0,2004.0,847.0,4.2898,221700.0,NEAR OCEAN +-121.86,37.0,16.0,8638.0,1392.0,3706.0,1251.0,5.503,351800.0,<1H OCEAN +-121.91,36.99,23.0,5675.0,964.0,2197.0,880.0,4.8693,322300.0,NEAR OCEAN +-121.91,36.98,16.0,1957.0,408.0,865.0,369.0,2.6875,233300.0,NEAR OCEAN +-121.88,36.98,21.0,4117.0,752.0,2001.0,763.0,4.8953,289500.0,NEAR OCEAN +-121.91,36.97,19.0,4920.0,1092.0,1807.0,922.0,3.5112,231900.0,NEAR OCEAN +-121.92,36.95,29.0,3457.0,699.0,1327.0,563.0,3.6597,252300.0,NEAR OCEAN +-121.88,36.96,18.0,4910.0,817.0,1971.0,773.0,5.8325,308800.0,NEAR OCEAN +-121.9,36.97,21.0,3707.0,751.0,1420.0,608.0,4.4485,295200.0,NEAR OCEAN +-121.88,36.96,18.0,6355.0,1100.0,2304.0,972.0,6.0281,321100.0,NEAR OCEAN +-121.9,36.93,22.0,7281.0,1233.0,1849.0,832.0,5.3276,335500.0,NEAR OCEAN +-121.87,36.95,7.0,3703.0,679.0,1375.0,608.0,4.9219,368400.0,NEAR OCEAN +-121.84,36.94,29.0,4921.0,967.0,2319.0,823.0,4.9517,307900.0,NEAR OCEAN +-121.89,36.89,18.0,2774.0,492.0,1283.0,353.0,5.368,352000.0,NEAR OCEAN +-121.91,36.85,22.0,2442.0,624.0,1301.0,290.0,3.1563,300000.0,NEAR OCEAN +-121.82,36.86,17.0,1573.0,272.0,142.0,55.0,2.1719,420000.0,NEAR OCEAN +-121.79,37.0,28.0,2715.0,451.0,1154.0,386.0,4.8021,290400.0,<1H OCEAN +-121.83,36.98,19.0,4431.0,705.0,1764.0,679.0,4.3321,298600.0,<1H OCEAN +-121.82,36.95,16.0,2599.0,430.0,1417.0,445.0,4.6611,349300.0,<1H OCEAN +-121.83,37.02,22.0,1903.0,350.0,760.0,322.0,2.9559,288400.0,<1H OCEAN +-121.76,37.0,21.0,1416.0,269.0,779.0,200.0,3.1987,279800.0,<1H OCEAN +-121.79,37.03,18.0,943.0,213.0,544.0,179.0,3.934,228600.0,<1H OCEAN +-121.69,36.96,23.0,1229.0,254.0,687.0,232.0,5.1433,305600.0,<1H OCEAN +-121.75,36.96,19.0,3461.0,634.0,2790.0,607.0,4.7569,190800.0,<1H OCEAN +-121.75,36.95,27.0,1580.0,303.0,1066.0,306.0,4.7071,202700.0,<1H OCEAN +-121.77,36.96,20.0,4228.0,816.0,2389.0,844.0,3.525,229100.0,<1H OCEAN +-121.73,36.93,29.0,2931.0,535.0,1954.0,506.0,3.2917,224700.0,<1H OCEAN +-121.67,36.93,22.0,569.0,132.0,542.0,125.0,2.1875,187500.0,<1H OCEAN +-122.39,40.59,26.0,1279.0,438.0,1276.0,420.0,1.2404,81300.0,INLAND +-122.39,40.58,44.0,1625.0,392.0,944.0,347.0,1.5972,68900.0,INLAND +-122.37,40.58,25.0,2054.0,495.0,835.0,475.0,2.1538,76900.0,INLAND +-122.38,40.58,34.0,1262.0,267.0,520.0,259.0,1.6983,72600.0,INLAND +-122.38,40.58,36.0,1808.0,384.0,807.0,383.0,1.8375,74800.0,INLAND +-122.36,40.58,17.0,1220.0,275.0,800.0,261.0,1.9181,118800.0,INLAND +-122.34,40.58,7.0,4843.0,992.0,2223.0,932.0,3.0549,101700.0,INLAND +-122.35,40.57,22.0,589.0,97.0,338.0,107.0,3.2639,87500.0,INLAND +-122.34,40.57,24.0,1610.0,307.0,748.0,307.0,2.6591,82800.0,INLAND +-122.38,40.57,43.0,2251.0,542.0,1479.0,512.0,1.5676,58200.0,INLAND +-122.38,40.56,23.0,2281.0,408.0,1164.0,420.0,3.5347,101200.0,INLAND +-122.38,40.54,36.0,1216.0,240.0,647.0,228.0,2.6944,75300.0,INLAND +-122.37,40.54,28.0,2213.0,390.0,1096.0,378.0,3.6923,86900.0,INLAND +-122.4,40.58,40.0,3895.0,929.0,1782.0,910.0,1.3329,78200.0,INLAND +-122.41,40.58,35.0,2072.0,385.0,1029.0,375.0,2.8512,75600.0,INLAND +-122.4,40.58,43.0,1455.0,300.0,747.0,279.0,2.7857,104200.0,INLAND +-122.39,40.57,38.0,855.0,172.0,468.0,150.0,1.4091,84400.0,INLAND +-122.42,40.59,24.0,5045.0,972.0,2220.0,979.0,2.6792,138900.0,INLAND +-122.45,40.61,17.0,785.0,155.0,417.0,136.0,2.3289,58200.0,INLAND +-122.45,40.56,17.0,1712.0,307.0,963.0,329.0,3.9375,148700.0,INLAND +-122.42,40.57,10.0,7949.0,1309.0,3176.0,1163.0,4.1099,120100.0,INLAND +-122.4,40.57,23.0,1321.0,259.0,749.0,222.0,1.655,90100.0,INLAND +-122.4,40.62,9.0,4794.0,889.0,2162.0,865.0,3.1439,103100.0,INLAND +-122.42,40.6,5.0,2614.0,433.0,1275.0,411.0,3.4464,122900.0,INLAND +-122.39,40.6,22.0,2195.0,489.0,1021.0,460.0,1.4125,66500.0,INLAND +-122.38,40.61,14.0,4773.0,1133.0,2101.0,1072.0,1.7227,105000.0,INLAND +-122.37,40.6,7.0,5178.0,1336.0,2557.0,1283.0,2.4079,111400.0,INLAND +-122.39,40.64,13.0,3604.0,704.0,1598.0,670.0,2.4141,78700.0,INLAND +-122.36,40.62,11.0,3896.0,886.0,1902.0,843.0,2.2905,94200.0,INLAND +-122.34,40.63,10.0,2183.0,369.0,1061.0,325.0,3.6853,151600.0,INLAND +-122.33,40.6,5.0,6383.0,1206.0,2965.0,1141.0,3.8103,111100.0,INLAND +-122.32,40.58,2.0,1937.0,350.0,756.0,274.0,3.0,114200.0,INLAND +-122.3,40.58,19.0,1043.0,204.0,505.0,183.0,1.6033,98800.0,INLAND +-122.36,40.56,20.0,3592.0,868.0,1865.0,781.0,2.0258,64800.0,INLAND +-122.37,40.55,26.0,1435.0,234.0,544.0,232.0,2.6705,136700.0,INLAND +-122.36,40.55,21.0,2500.0,466.0,1428.0,502.0,2.6513,113300.0,INLAND +-122.46,40.52,13.0,2085.0,322.0,1077.0,333.0,5.2149,146500.0,INLAND +-122.41,40.55,19.0,3753.0,761.0,1952.0,738.0,3.0954,86500.0,INLAND +-122.41,40.53,28.0,1127.0,245.0,538.0,208.0,2.037,72000.0,INLAND +-122.39,40.53,28.0,1427.0,304.0,692.0,285.0,2.125,80800.0,INLAND +-122.39,40.52,24.0,2068.0,346.0,951.0,332.0,3.9306,85900.0,INLAND +-122.4,40.51,20.0,1750.0,352.0,834.0,340.0,2.485,100600.0,INLAND +-122.37,40.52,18.0,4547.0,774.0,2269.0,766.0,3.7896,98100.0,INLAND +-122.35,40.56,16.0,2801.0,614.0,1695.0,563.0,1.9,81600.0,INLAND +-122.35,40.56,12.0,3900.0,863.0,2145.0,864.0,1.9881,85200.0,INLAND +-122.35,40.54,17.0,2280.0,453.0,976.0,434.0,2.71,97800.0,INLAND +-122.36,40.57,31.0,431.0,90.0,231.0,78.0,2.184,77300.0,INLAND +-122.35,40.57,18.0,2226.0,490.0,859.0,451.0,1.6821,69400.0,INLAND +-122.34,40.57,26.0,2187.0,472.0,1339.0,463.0,2.0395,67900.0,INLAND +-122.33,40.57,16.0,2777.0,503.0,1432.0,500.0,2.5592,75900.0,INLAND +-122.32,40.57,15.0,2524.0,449.0,1374.0,467.0,3.3816,93800.0,INLAND +-122.31,40.55,11.0,13714.0,2302.0,6511.0,2267.0,3.5522,100100.0,INLAND +-122.34,40.51,16.0,2247.0,502.0,1206.0,463.0,1.9946,119200.0,INLAND +-122.33,40.52,23.0,2801.0,507.0,1318.0,454.0,3.5081,116700.0,INLAND +-122.31,40.49,18.0,4026.0,718.0,1731.0,705.0,3.35,118400.0,INLAND +-122.28,40.5,21.0,2405.0,476.0,1197.0,412.0,2.6488,83100.0,INLAND +-122.4,40.71,22.0,2390.0,484.0,1131.0,452.0,2.1458,84700.0,INLAND +-122.43,40.66,15.0,2532.0,458.0,1183.0,450.0,2.5417,92200.0,INLAND +-122.42,40.63,23.0,2248.0,489.0,1132.0,444.0,1.6429,80400.0,INLAND +-122.38,40.69,21.0,1774.0,370.0,875.0,354.0,1.7422,61500.0,INLAND +-122.36,40.69,32.0,3611.0,772.0,2060.0,759.0,1.7427,60600.0,INLAND +-122.35,40.68,36.0,1822.0,449.0,930.0,399.0,1.3801,56600.0,INLAND +-122.36,40.68,28.0,1745.0,379.0,1011.0,370.0,2.0391,59800.0,INLAND +-122.38,40.67,10.0,2281.0,444.0,1274.0,438.0,2.212,65600.0,INLAND +-122.36,40.66,17.0,2786.0,559.0,1528.0,517.0,2.0119,75800.0,INLAND +-122.31,40.65,11.0,3664.0,647.0,1686.0,613.0,2.9338,141600.0,INLAND +-122.25,40.6,16.0,2753.0,494.0,1414.0,459.0,3.8323,128300.0,INLAND +-122.23,40.63,16.0,1141.0,220.0,563.0,200.0,2.3287,130700.0,INLAND +-122.25,40.66,15.0,2771.0,546.0,1423.0,505.0,3.6413,108500.0,INLAND +-122.32,40.71,18.0,2879.0,578.0,1399.0,586.0,2.4036,105400.0,INLAND +-122.31,40.75,18.0,1411.0,330.0,494.0,227.0,1.4911,75800.0,INLAND +-122.27,40.53,17.0,2255.0,416.0,1171.0,411.0,2.875,129800.0,INLAND +-122.26,40.58,14.0,2539.0,466.0,1271.0,438.0,3.9762,138500.0,INLAND +-122.23,40.57,18.0,1633.0,243.0,750.0,252.0,5.1585,150800.0,INLAND +-122.24,40.51,23.0,2216.0,378.0,1006.0,338.0,4.559,116800.0,INLAND +-122.31,40.45,10.0,1187.0,236.0,728.0,248.0,2.0469,66800.0,INLAND +-122.31,40.45,25.0,2596.0,557.0,1536.0,549.0,2.0221,60400.0,INLAND +-122.29,40.44,30.0,1270.0,365.0,840.0,324.0,1.3904,48100.0,INLAND +-122.29,40.43,21.0,2842.0,640.0,1658.0,608.0,1.9943,59800.0,INLAND +-122.29,40.47,20.0,2858.0,612.0,1422.0,589.0,1.9657,63000.0,INLAND +-122.31,40.47,26.0,2723.0,551.0,1326.0,547.0,2.3594,66000.0,INLAND +-122.3,40.45,32.0,1286.0,271.0,694.0,236.0,1.6579,68500.0,INLAND +-122.27,40.46,14.0,2633.0,530.0,1324.0,513.0,2.2768,78600.0,INLAND +-122.24,40.45,27.0,1804.0,321.0,782.0,300.0,3.5978,80600.0,INLAND +-122.25,40.42,17.0,1429.0,265.0,692.0,245.0,2.8611,98700.0,INLAND +-122.23,40.4,18.0,2102.0,377.0,1059.0,384.0,3.0556,95500.0,INLAND +-122.27,40.39,26.0,1833.0,422.0,939.0,408.0,1.3571,59000.0,INLAND +-122.29,40.39,17.0,1682.0,332.0,887.0,316.0,1.8438,76400.0,INLAND +-122.33,40.48,26.0,695.0,126.0,319.0,124.0,3.2788,101600.0,INLAND +-122.33,40.47,30.0,2502.0,523.0,1296.0,481.0,2.125,66100.0,INLAND +-122.36,40.48,21.0,2333.0,514.0,1308.0,509.0,2.0899,74800.0,INLAND +-122.37,40.45,18.0,1748.0,337.0,921.0,327.0,3.3315,85400.0,INLAND +-122.42,40.44,16.0,994.0,,495.0,181.0,2.1875,76400.0,INLAND +-122.43,40.47,16.0,3552.0,704.0,1801.0,658.0,2.1496,97700.0,INLAND +-122.45,40.46,16.0,2734.0,501.0,1413.0,484.0,2.8085,105700.0,INLAND +-122.37,40.39,12.0,3783.0,702.0,1970.0,639.0,3.3005,98500.0,INLAND +-122.32,40.42,17.0,3019.0,578.0,1538.0,545.0,2.793,76500.0,INLAND +-122.56,40.75,20.0,1182.0,250.0,512.0,210.0,1.7935,74500.0,INLAND +-122.57,40.61,27.0,1540.0,315.0,883.0,321.0,2.8036,93400.0,INLAND +-122.66,40.52,13.0,3013.0,486.0,1361.0,515.0,4.5357,171200.0,INLAND +-122.76,40.4,22.0,2153.0,461.0,903.0,314.0,2.125,123200.0,INLAND +-122.34,41.06,33.0,2149.0,498.0,631.0,273.0,1.8816,65800.0,INLAND +-122.31,40.89,18.0,754.0,161.0,247.0,107.0,2.2583,78800.0,INLAND +-122.45,40.85,20.0,2701.0,573.0,892.0,358.0,2.7736,107800.0,INLAND +-122.07,40.95,14.0,2721.0,627.0,1356.0,468.0,3.0299,73200.0,INLAND +-121.89,40.97,26.0,1183.0,276.0,513.0,206.0,2.225,52000.0,INLAND +-121.86,40.77,17.0,2816.0,639.0,1027.0,406.0,2.503,65600.0,INLAND +-121.83,40.69,14.0,821.0,170.0,477.0,129.0,3.15,87500.0,INLAND +-122.08,40.64,14.0,3099.0,519.0,1447.0,494.0,4.0132,141200.0,INLAND +-122.06,40.55,17.0,3057.0,577.0,1497.0,556.0,3.5189,101000.0,INLAND +-121.92,40.52,13.0,4581.0,881.0,1799.0,734.0,2.2993,99500.0,INLAND +-121.67,40.61,8.0,2411.0,463.0,786.0,297.0,2.1513,80400.0,INLAND +-121.55,40.48,14.0,2413.0,524.0,805.0,329.0,2.7857,77400.0,INLAND +-121.64,40.9,24.0,2237.0,434.0,834.0,318.0,1.7538,90300.0,INLAND +-121.67,40.87,31.0,1581.0,299.0,776.0,287.0,2.9063,77800.0,INLAND +-121.65,40.88,15.0,2909.0,549.0,1537.0,522.0,3.0179,61300.0,INLAND +-121.67,40.89,17.0,2548.0,537.0,1118.0,461.0,2.267,57800.0,INLAND +-121.63,40.92,23.0,1922.0,411.0,872.0,350.0,2.2337,64500.0,INLAND +-121.41,40.82,16.0,2668.0,516.0,915.0,362.0,2.3393,90300.0,INLAND +-121.47,41.12,22.0,2737.0,512.0,1168.0,442.0,2.83,88700.0,INLAND +-121.45,41.04,33.0,2029.0,378.0,936.0,343.0,2.67,77500.0,INLAND +-120.08,39.61,32.0,1404.0,247.0,544.0,201.0,2.7778,72900.0,INLAND +-120.23,39.56,14.0,1781.0,346.0,734.0,287.0,2.46,93000.0,INLAND +-120.48,39.66,32.0,1516.0,289.0,304.0,131.0,1.8839,71000.0,INLAND +-120.24,39.67,40.0,690.0,129.0,305.0,110.0,2.3625,62500.0,INLAND +-120.73,39.63,17.0,1791.0,356.0,432.0,190.0,3.8826,92400.0,INLAND +-120.24,39.67,52.0,296.0,63.0,143.0,56.0,3.625,68600.0,INLAND +-120.92,39.56,48.0,1276.0,292.0,358.0,145.0,1.875,66600.0,INLAND +-120.51,39.52,26.0,2286.0,444.0,498.0,216.0,2.065,96100.0,INLAND +-121.62,41.78,40.0,3272.0,663.0,1467.0,553.0,1.7885,43500.0,INLAND +-121.93,41.86,28.0,4225.0,835.0,1908.0,686.0,1.74,44000.0,INLAND +-122.33,41.86,19.0,3599.0,695.0,1572.0,601.0,2.234,58600.0,INLAND +-122.53,41.81,21.0,2400.0,485.0,1109.0,443.0,1.7639,55400.0,INLAND +-122.26,41.66,17.0,1885.0,350.0,953.0,328.0,2.1607,61400.0,INLAND +-122.64,41.95,18.0,1867.0,424.0,802.0,314.0,1.8242,53500.0,INLAND +-123.26,41.86,25.0,2344.0,532.0,1117.0,424.0,2.7222,64600.0,INLAND +-123.38,41.8,25.0,1941.0,477.0,1000.0,390.0,2.2976,54400.0,INLAND +-123.41,41.6,23.0,1654.0,369.0,669.0,273.0,1.965,65400.0,INLAND +-122.92,41.7,23.0,4017.0,792.0,1634.0,619.0,2.3571,62000.0,INLAND +-122.56,41.69,21.0,2010.0,360.0,947.0,306.0,2.4107,70100.0,INLAND +-122.61,41.74,15.0,4206.0,922.0,1863.0,869.0,2.0591,55700.0,INLAND +-122.64,41.74,33.0,2644.0,459.0,1113.0,483.0,3.3095,81300.0,INLAND +-122.64,41.73,36.0,3319.0,664.0,1492.0,631.0,1.8694,71200.0,INLAND +-122.64,41.73,50.0,1525.0,308.0,661.0,285.0,2.2206,63200.0,INLAND +-122.65,41.72,15.0,3643.0,801.0,1784.0,743.0,1.8533,57500.0,INLAND +-122.73,41.76,19.0,2200.0,414.0,950.0,367.0,2.5357,94200.0,INLAND +-122.64,41.63,19.0,2722.0,479.0,1108.0,430.0,3.1062,100000.0,INLAND +-122.56,41.53,29.0,1729.0,355.0,848.0,328.0,2.2024,60900.0,INLAND +-122.93,41.48,20.0,4288.0,789.0,1800.0,660.0,2.723,79600.0,INLAND +-122.9,41.46,31.0,1277.0,263.0,600.0,241.0,1.7292,61700.0,INLAND +-123.08,41.26,34.0,2773.0,679.0,1066.0,424.0,1.6757,63300.0,INLAND +-122.38,41.54,14.0,4453.0,797.0,1817.0,685.0,2.7468,81100.0,INLAND +-122.49,41.43,19.0,3689.0,644.0,1544.0,566.0,3.125,76100.0,INLAND +-122.38,41.43,45.0,2245.0,448.0,1155.0,421.0,1.6509,46200.0,INLAND +-122.37,41.41,28.0,1729.0,419.0,929.0,370.0,1.27,53100.0,INLAND +-122.39,41.41,23.0,910.0,199.0,370.0,169.0,1.7448,80100.0,INLAND +-122.32,41.31,45.0,1393.0,294.0,521.0,249.0,1.1915,71900.0,INLAND +-122.3,41.32,13.0,2300.0,513.0,1151.0,488.0,2.1571,81500.0,INLAND +-122.3,41.31,29.0,4059.0,787.0,1700.0,702.0,2.4526,97100.0,INLAND +-122.28,41.38,15.0,5266.0,1031.0,2147.0,885.0,2.8036,110100.0,INLAND +-122.45,41.28,15.0,2740.0,503.0,1188.0,445.0,3.4519,128800.0,INLAND +-122.34,41.21,26.0,178.0,40.0,55.0,25.0,2.0375,57500.0,INLAND +-122.27,41.23,40.0,1958.0,386.0,725.0,331.0,2.1898,65500.0,INLAND +-122.27,41.2,52.0,4513.0,985.0,1926.0,815.0,1.5923,56000.0,INLAND +-121.76,41.5,31.0,602.0,153.0,112.0,47.0,1.0667,34200.0,INLAND +-122.09,41.32,52.0,4019.0,824.0,1728.0,706.0,2.2462,62900.0,INLAND +-122.22,38.12,15.0,14125.0,2344.0,6456.0,2147.0,5.1014,179500.0,NEAR BAY +-122.19,38.13,5.0,7854.0,1446.0,4361.0,1395.0,4.9504,214800.0,NEAR BAY +-122.21,38.11,31.0,2766.0,604.0,1441.0,552.0,3.1768,131000.0,NEAR BAY +-122.21,38.11,35.0,2122.0,400.0,1189.0,408.0,3.0962,124600.0,NEAR BAY +-122.21,38.1,36.0,3018.0,557.0,1445.0,556.0,3.8029,129900.0,NEAR BAY +-122.22,38.11,43.0,1939.0,353.0,968.0,392.0,3.1848,112700.0,NEAR BAY +-122.22,38.1,38.0,931.0,181.0,566.0,207.0,3.0221,93300.0,NEAR BAY +-122.22,38.1,40.0,2549.0,478.0,1275.0,494.0,2.9469,111600.0,NEAR BAY +-122.22,38.1,44.0,2256.0,451.0,1057.0,426.0,3.1204,110800.0,NEAR BAY +-122.22,38.1,44.0,3013.0,563.0,1353.0,512.0,3.4559,111900.0,NEAR BAY +-122.22,38.09,47.0,2161.0,440.0,966.0,360.0,2.2734,88700.0,NEAR BAY +-122.21,38.09,37.0,4368.0,779.0,2083.0,741.0,3.8667,127000.0,NEAR BAY +-122.2,38.09,18.0,6860.0,1079.0,3205.0,1058.0,5.2957,171900.0,NEAR BAY +-122.22,38.08,37.0,2811.0,,1574.0,516.0,3.1053,96700.0,NEAR BAY +-122.22,38.08,37.0,4590.0,857.0,2920.0,832.0,3.436,94800.0,NEAR BAY +-122.22,38.07,4.0,15654.0,2394.0,7025.0,2168.0,5.8171,225200.0,NEAR BAY +-122.25,38.09,48.0,833.0,188.0,652.0,165.0,2.2417,87900.0,NEAR BAY +-122.23,38.09,26.0,4397.0,997.0,2539.0,965.0,2.4875,90000.0,NEAR BAY +-122.24,38.07,13.0,5451.0,1194.0,2957.0,1081.0,2.6098,162500.0,NEAR BAY +-122.26,38.1,24.0,1213.0,395.0,699.0,386.0,1.3007,94600.0,NEAR BAY +-122.26,38.1,30.0,3317.0,1058.0,1794.0,990.0,1.1835,133300.0,NEAR BAY +-122.25,38.1,52.0,248.0,86.0,173.0,69.0,2.3,109400.0,NEAR BAY +-122.25,38.1,52.0,1780.0,373.0,824.0,317.0,2.75,109900.0,NEAR BAY +-122.25,38.1,52.0,2315.0,556.0,1113.0,486.0,2.5042,147900.0,NEAR BAY +-122.25,38.1,52.0,1591.0,372.0,817.0,357.0,2.1411,97200.0,NEAR BAY +-122.23,38.1,46.0,4143.0,895.0,2240.0,847.0,2.4201,92800.0,NEAR BAY +-122.24,38.1,49.0,1851.0,356.0,849.0,307.0,2.9432,103500.0,NEAR BAY +-122.24,38.11,52.0,2050.0,492.0,1277.0,463.0,3.0507,107300.0,NEAR BAY +-122.24,38.11,42.0,1743.0,388.0,889.0,341.0,2.3241,99200.0,NEAR BAY +-122.23,38.1,47.0,1303.0,278.0,694.0,269.0,2.5969,92800.0,NEAR BAY +-122.23,38.12,49.0,2715.0,435.0,1006.0,429.0,4.2308,145800.0,NEAR BAY +-122.23,38.11,47.0,3007.0,524.0,1152.0,486.0,4.0,141500.0,NEAR BAY +-122.24,38.11,52.0,2111.0,310.0,772.0,323.0,4.775,148200.0,NEAR BAY +-122.23,38.13,29.0,5154.0,1084.0,2459.0,1019.0,3.2664,142900.0,NEAR BAY +-122.24,38.13,37.0,3223.0,564.0,1325.0,539.0,4.0938,126900.0,NEAR BAY +-122.24,38.12,39.0,2967.0,500.0,1243.0,523.0,4.2902,152400.0,NEAR BAY +-122.24,38.12,42.0,1625.0,255.0,578.0,243.0,4.0114,166900.0,NEAR BAY +-122.25,38.12,47.0,1339.0,298.0,794.0,286.0,2.5865,109800.0,NEAR BAY +-122.25,38.11,49.0,2365.0,504.0,1131.0,458.0,2.6133,103100.0,NEAR BAY +-122.25,38.11,52.0,2846.0,705.0,1519.0,620.0,2.1976,97900.0,NEAR BAY +-122.26,38.11,52.0,793.0,216.0,505.0,194.0,1.9667,93800.0,NEAR BAY +-122.26,38.11,52.0,1560.0,353.0,670.0,287.0,1.7411,98400.0,NEAR BAY +-122.26,38.11,52.0,2573.0,639.0,1238.0,529.0,2.6708,109700.0,NEAR BAY +-122.26,38.12,28.0,3102.0,734.0,1623.0,639.0,3.1025,103700.0,NEAR BAY +-122.27,38.12,45.0,4423.0,1001.0,2109.0,874.0,2.6937,111800.0,NEAR BAY +-122.27,38.12,42.0,5266.0,1167.0,3124.0,1025.0,2.7375,120000.0,NEAR BAY +-122.26,38.15,26.0,3699.0,671.0,2388.0,699.0,4.0515,121900.0,NEAR BAY +-122.26,38.14,34.0,963.0,159.0,392.0,176.0,4.0156,134700.0,NEAR BAY +-122.26,38.15,16.0,3921.0,727.0,2830.0,680.0,4.5053,123700.0,NEAR BAY +-122.32,38.12,12.0,5382.0,928.0,3928.0,921.0,5.3785,150600.0,NEAR BAY +-122.26,38.13,28.0,3072.0,790.0,1375.0,705.0,1.6368,91200.0,NEAR BAY +-122.24,38.14,15.0,8479.0,1759.0,5008.0,1646.0,3.724,131600.0,NEAR BAY +-122.24,38.15,10.0,6817.0,1188.0,4163.0,1135.0,4.4529,144100.0,NEAR BAY +-122.25,38.15,24.0,2917.0,543.0,1878.0,531.0,3.7014,123600.0,NEAR BAY +-122.22,38.15,7.0,5129.0,,2824.0,738.0,5.5138,171100.0,NEAR BAY +-122.23,38.15,33.0,1253.0,238.0,753.0,236.0,1.756,86400.0,NEAR BAY +-122.23,38.14,36.0,1412.0,260.0,792.0,268.0,2.3056,90400.0,NEAR BAY +-122.15,38.04,14.0,2804.0,587.0,1083.0,573.0,2.6466,168500.0,NEAR BAY +-122.16,38.05,52.0,1888.0,457.0,830.0,408.0,3.1373,185100.0,NEAR BAY +-122.16,38.05,34.0,2434.0,428.0,926.0,423.0,4.6776,208300.0,NEAR BAY +-122.19,38.07,20.0,3000.0,525.0,1207.0,491.0,4.6406,217500.0,NEAR BAY +-122.18,38.07,10.0,4976.0,849.0,2089.0,803.0,5.3288,201800.0,NEAR BAY +-122.17,38.07,15.0,2125.0,278.0,857.0,272.0,6.4599,219700.0,NEAR BAY +-122.16,38.07,14.0,6360.0,1236.0,2876.0,1127.0,4.5321,190300.0,NEAR BAY +-122.17,38.06,16.0,3515.0,626.0,1764.0,626.0,4.4397,187100.0,NEAR BAY +-122.15,38.06,10.0,3008.0,532.0,1381.0,522.0,5.3661,195800.0,NEAR BAY +-122.17,38.08,7.0,18392.0,2782.0,8276.0,2742.0,6.4232,229200.0,NEAR BAY +-122.2,38.1,5.0,9567.0,1729.0,4620.0,1580.0,4.4821,210000.0,NEAR BAY +-122.19,38.09,8.0,614.0,118.0,278.0,115.0,6.3735,166300.0,NEAR BAY +-122.14,38.05,27.0,3794.0,772.0,1756.0,724.0,3.2891,150600.0,NEAR BAY +-122.14,38.07,31.0,3401.0,616.0,1750.0,602.0,4.6761,143100.0,NEAR BAY +-122.11,38.09,11.0,673.0,145.0,318.0,137.0,2.3929,122500.0,NEAR BAY +-122.13,38.26,40.0,1538.0,255.0,669.0,263.0,3.3281,170200.0,NEAR BAY +-122.15,38.29,17.0,1625.0,239.0,703.0,224.0,6.5891,328800.0,NEAR BAY +-122.18,38.29,18.0,1953.0,265.0,658.0,270.0,8.0113,393000.0,NEAR BAY +-122.18,38.23,21.0,2475.0,341.0,812.0,308.0,7.2589,320400.0,NEAR BAY +-122.14,38.16,4.0,3273.0,495.0,1497.0,454.0,5.3345,176100.0,NEAR BAY +-122.18,38.17,7.0,4093.0,651.0,2228.0,646.0,5.2523,161300.0,NEAR BAY +-122.07,38.26,15.0,1173.0,146.0,450.0,154.0,6.0487,197700.0,INLAND +-122.1,38.24,13.0,7367.0,1042.0,3193.0,983.0,5.3102,195000.0,NEAR BAY +-122.06,38.27,14.0,6920.0,996.0,3196.0,978.0,5.0672,171300.0,INLAND +-122.07,38.27,8.0,6761.0,1234.0,3237.0,1177.0,4.3586,173400.0,INLAND +-122.08,38.3,2.0,6718.0,858.0,2012.0,654.0,6.8872,305200.0,INLAND +-122.04,38.28,12.0,3861.0,795.0,2129.0,806.0,3.676,135000.0,INLAND +-122.04,38.28,25.0,3304.0,493.0,1464.0,488.0,5.2527,130600.0,INLAND +-122.03,38.28,15.0,5114.0,833.0,2418.0,778.0,4.4882,144000.0,INLAND +-122.03,38.3,5.0,1569.0,199.0,713.0,209.0,6.6779,223900.0,INLAND +-122.0,38.28,3.0,7030.0,1191.0,3238.0,1055.0,4.962,161700.0,INLAND +-121.98,38.29,4.0,8778.0,1291.0,4010.0,1188.0,5.4399,187100.0,INLAND +-121.99,38.15,36.0,263.0,73.0,88.0,42.0,2.5313,162500.0,INLAND +-122.05,38.26,32.0,1070.0,199.0,631.0,195.0,2.6827,98900.0,INLAND +-122.05,38.25,37.0,1336.0,251.0,680.0,231.0,3.815,99000.0,INLAND +-122.06,38.25,36.0,1818.0,323.0,953.0,298.0,3.3153,99000.0,INLAND +-122.06,38.25,34.0,1562.0,289.0,898.0,307.0,3.3598,107200.0,INLAND +-122.06,38.26,36.0,1248.0,221.0,672.0,222.0,3.3839,105900.0,INLAND +-122.07,38.24,15.0,7937.0,1635.0,4390.0,1567.0,3.5464,129800.0,INLAND +-122.04,38.25,38.0,1214.0,244.0,632.0,254.0,2.8438,94200.0,INLAND +-122.05,38.25,39.0,199.0,36.0,101.0,38.0,6.2299,105400.0,INLAND +-122.04,38.26,34.0,3082.0,702.0,1795.0,703.0,2.7885,105900.0,INLAND +-122.04,38.25,37.0,1176.0,291.0,648.0,271.0,2.7167,92200.0,INLAND +-122.04,38.25,32.0,1203.0,287.0,571.0,255.0,3.0938,110400.0,INLAND +-122.04,38.25,52.0,582.0,131.0,241.0,106.0,2.4,125000.0,INLAND +-122.05,38.26,21.0,7195.0,1416.0,3927.0,1377.0,3.0912,126300.0,INLAND +-122.04,38.27,16.0,8517.0,1910.0,4508.0,1837.0,3.1853,129600.0,INLAND +-122.03,38.27,24.0,3580.0,735.0,1959.0,731.0,2.7284,118500.0,INLAND +-122.03,38.26,25.0,4617.0,1046.0,2685.0,1011.0,2.9576,108500.0,INLAND +-122.02,38.26,27.0,3440.0,787.0,2085.0,748.0,2.5896,104700.0,INLAND +-122.03,38.25,35.0,1940.0,384.0,1177.0,403.0,3.1389,101100.0,INLAND +-122.02,38.27,20.0,2237.0,464.0,1169.0,425.0,3.2115,99100.0,INLAND +-122.02,38.26,20.0,3899.0,763.0,2198.0,779.0,3.2061,120400.0,INLAND +-122.01,38.27,17.0,9089.0,1542.0,4758.0,1520.0,4.0619,126600.0,INLAND +-122.02,38.26,8.0,2894.0,602.0,1566.0,572.0,3.6335,131600.0,INLAND +-122.0,38.23,1.0,2062.0,343.0,872.0,268.0,5.2636,191300.0,INLAND +-122.03,38.24,16.0,1104.0,164.0,495.0,156.0,5.4074,157700.0,INLAND +-122.04,38.24,22.0,2761.0,757.0,2612.0,641.0,1.6875,87500.0,INLAND +-122.04,38.24,30.0,2081.0,456.0,1005.0,438.0,1.9954,92900.0,INLAND +-122.03,38.25,13.0,3334.0,541.0,1923.0,538.0,4.0905,134800.0,INLAND +-122.01,38.25,11.0,6550.0,1149.0,3570.0,1123.0,3.8583,137900.0,INLAND +-122.01,38.25,16.0,1081.0,181.0,792.0,184.0,4.6779,131300.0,INLAND +-122.02,38.25,10.0,2237.0,454.0,1255.0,429.0,3.1176,126500.0,INLAND +-122.0,38.25,7.0,11768.0,1893.0,6657.0,1874.0,4.9222,142900.0,INLAND +-121.98,38.25,4.0,2487.0,440.0,1545.0,452.0,4.9103,140400.0,INLAND +-122.01,38.26,12.0,4132.0,710.0,2087.0,633.0,4.5987,139700.0,INLAND +-121.99,38.27,16.0,4138.0,758.0,1762.0,723.0,3.1979,137500.0,INLAND +-121.99,38.26,18.0,921.0,126.0,368.0,120.0,6.0842,261100.0,INLAND +-121.94,38.27,35.0,10869.0,2226.0,9879.0,2152.0,2.5681,81300.0,INLAND +-121.94,38.37,17.0,7973.0,1591.0,2899.0,1502.0,2.8357,120100.0,INLAND +-121.94,38.37,14.0,1156.0,216.0,574.0,227.0,3.2396,143800.0,INLAND +-121.94,38.38,25.0,182.0,48.0,71.0,52.0,1.0208,78600.0,INLAND +-121.94,38.36,2.0,4953.0,735.0,1791.0,562.0,5.0346,205100.0,INLAND +-121.99,38.48,17.0,1824.0,348.0,934.0,305.0,4.6719,250000.0,INLAND +-122.01,38.44,12.0,2344.0,354.0,1035.0,321.0,4.9773,281200.0,INLAND +-122.0,38.41,11.0,2838.0,429.0,1331.0,426.0,4.945,298400.0,INLAND +-122.07,38.41,17.0,3053.0,595.0,1434.0,557.0,3.4741,245800.0,INLAND +-121.95,38.43,19.0,3011.0,551.0,1665.0,535.0,5.1534,232800.0,INLAND +-121.94,38.41,15.0,1263.0,211.0,665.0,208.0,4.5,260900.0,INLAND +-121.92,38.37,26.0,2056.0,413.0,933.0,367.0,2.7051,193800.0,INLAND +-121.96,38.34,15.0,2857.0,373.0,1325.0,359.0,6.0252,151700.0,INLAND +-121.96,38.34,14.0,3035.0,680.0,1597.0,663.0,3.6036,143500.0,INLAND +-121.95,38.35,16.0,2084.0,292.0,1099.0,292.0,5.8269,150200.0,INLAND +-121.94,38.35,8.0,3157.0,559.0,1758.0,569.0,4.412,140100.0,INLAND +-121.92,38.34,2.0,7747.0,1133.0,3481.0,1083.0,6.1112,181000.0,INLAND +-121.95,38.34,9.0,4999.0,874.0,2687.0,817.0,4.2324,142100.0,INLAND +-121.96,38.33,3.0,7985.0,1257.0,3664.0,1215.0,4.976,158300.0,INLAND +-121.96,38.32,12.0,5127.0,998.0,2749.0,976.0,4.0458,130600.0,INLAND +-121.93,38.31,25.0,185.0,32.0,85.0,32.0,4.875,250000.0,INLAND +-121.98,38.32,45.0,19.0,5.0,7460.0,6.0,10.2264,137500.0,INLAND +-121.98,38.36,33.0,1083.0,217.0,562.0,203.0,2.433,101700.0,INLAND +-121.99,38.35,45.0,1778.0,339.0,839.0,319.0,2.4659,102900.0,INLAND +-122.0,38.35,38.0,1918.0,364.0,745.0,348.0,2.5707,126000.0,INLAND +-122.0,38.35,34.0,1084.0,187.0,561.0,198.0,4.2115,118900.0,INLAND +-122.0,38.35,24.0,745.0,116.0,300.0,115.0,3.6176,158500.0,INLAND +-122.01,38.35,18.0,4486.0,723.0,1600.0,697.0,3.8651,189700.0,INLAND +-122.01,38.36,15.0,476.0,67.0,213.0,73.0,7.1053,315200.0,INLAND +-121.98,38.36,30.0,140.0,35.0,103.0,35.0,4.163,112500.0,INLAND +-121.97,38.35,17.0,5678.0,1116.0,3182.0,1135.0,3.7388,122000.0,INLAND +-121.97,38.34,11.0,1500.0,319.0,899.0,304.0,4.5568,127200.0,INLAND +-121.96,38.35,20.0,1415.0,266.0,667.0,250.0,4.0938,117300.0,INLAND +-121.96,38.34,7.0,3292.0,698.0,1911.0,702.0,3.89,140300.0,INLAND +-121.96,38.36,11.0,3208.0,790.0,1772.0,694.0,2.7434,218800.0,INLAND +-121.98,38.35,16.0,1697.0,267.0,832.0,277.0,4.4375,132600.0,INLAND +-121.98,38.34,13.0,3616.0,672.0,2022.0,652.0,4.0536,134800.0,INLAND +-121.97,38.34,16.0,2331.0,450.0,1074.0,400.0,4.0329,126800.0,INLAND +-121.98,38.34,18.0,3876.0,916.0,2386.0,867.0,2.5938,129500.0,INLAND +-121.99,38.34,16.0,1470.0,261.0,748.0,256.0,4.0433,132200.0,INLAND +-121.99,38.34,13.0,3252.0,610.0,1915.0,631.0,4.2137,151700.0,INLAND +-122.0,38.35,34.0,432.0,65.0,208.0,71.0,5.5435,136000.0,INLAND +-122.0,38.38,16.0,2509.0,366.0,1043.0,339.0,6.0704,173400.0,INLAND +-122.01,38.37,16.0,3996.0,550.0,1673.0,539.0,5.778,175700.0,INLAND +-122.01,38.36,28.0,1967.0,315.0,734.0,291.0,4.9583,146200.0,INLAND +-122.02,38.38,16.0,808.0,137.0,371.0,145.0,6.0767,216400.0,INLAND +-122.02,38.37,16.0,2495.0,331.0,1118.0,338.0,6.4894,198000.0,INLAND +-122.01,38.36,15.0,1176.0,166.0,485.0,171.0,5.9441,228200.0,INLAND +-121.98,38.39,3.0,9488.0,1417.0,4095.0,1335.0,5.1781,191900.0,INLAND +-121.98,38.37,21.0,3027.0,675.0,2018.0,642.0,2.8438,111500.0,INLAND +-121.98,38.36,24.0,2434.0,630.0,1538.0,574.0,2.1067,101100.0,INLAND +-122.0,38.37,18.0,1048.0,185.0,469.0,162.0,3.625,125000.0,INLAND +-121.99,38.36,35.0,2728.0,451.0,1290.0,452.0,3.2768,117600.0,INLAND +-122.0,38.36,34.0,2735.0,539.0,1390.0,491.0,2.7262,118800.0,INLAND +-121.99,38.36,33.0,146.0,31.0,75.0,31.0,3.5179,84400.0,INLAND +-122.0,38.36,34.0,1502.0,282.0,860.0,297.0,3.3438,135600.0,INLAND +-121.82,38.36,26.0,1974.0,364.0,1002.0,362.0,3.3036,210000.0,INLAND +-121.81,38.49,18.0,4518.0,827.0,2230.0,715.0,3.9309,178500.0,INLAND +-121.76,38.41,19.0,686.0,107.0,348.0,109.0,3.9306,93800.0,INLAND +-121.81,38.45,24.0,1951.0,341.0,1140.0,338.0,3.7061,128500.0,INLAND +-121.82,38.46,10.0,6331.0,1181.0,3419.0,1110.0,3.7083,154800.0,INLAND +-121.85,38.43,2.0,790.0,135.0,235.0,87.0,5.0862,166500.0,INLAND +-121.83,38.45,15.0,5115.0,776.0,2540.0,794.0,4.8611,146400.0,INLAND +-121.83,38.45,32.0,2139.0,440.0,1154.0,411.0,3.2672,107500.0,INLAND +-121.83,38.45,36.0,839.0,158.0,446.0,167.0,2.3438,122700.0,INLAND +-121.83,38.43,24.0,1307.0,314.0,917.0,291.0,2.2244,98100.0,INLAND +-121.81,38.43,30.0,1674.0,297.0,756.0,292.0,3.9286,133100.0,INLAND +-121.76,38.25,32.0,1495.0,333.0,905.0,281.0,2.625,212500.0,INLAND +-121.69,38.16,33.0,1808.0,363.0,824.0,340.0,3.2937,96400.0,INLAND +-121.69,38.16,46.0,2292.0,472.0,970.0,431.0,2.2888,94900.0,INLAND +-121.73,38.13,40.0,1266.0,257.0,547.0,247.0,3.0288,164400.0,INLAND +-121.74,38.15,22.0,1910.0,326.0,1001.0,345.0,4.8173,115800.0,INLAND +-121.84,38.13,33.0,596.0,105.0,212.0,94.0,4.2813,81300.0,INLAND +-122.42,38.27,25.0,3282.0,566.0,1244.0,483.0,4.5313,308400.0,NEAR BAY +-122.49,38.22,33.0,1486.0,290.0,781.0,274.0,3.5647,251800.0,NEAR BAY +-122.41,38.16,37.0,1549.0,,863.0,275.0,2.7457,254700.0,NEAR BAY +-122.45,38.3,24.0,1946.0,400.0,718.0,380.0,3.5507,257900.0,NEAR BAY +-122.47,38.3,15.0,4885.0,988.0,2175.0,924.0,3.4031,209500.0,<1H OCEAN +-122.42,38.31,18.0,1479.0,246.0,550.0,217.0,4.7356,333300.0,NEAR BAY +-122.44,38.34,25.0,3106.0,715.0,1262.0,665.0,1.9487,233500.0,<1H OCEAN +-122.46,38.29,21.0,2423.0,560.0,1098.0,503.0,2.364,173300.0,NEAR BAY +-122.46,38.29,35.0,1762.0,350.0,686.0,339.0,3.5982,271700.0,NEAR BAY +-122.45,38.28,20.0,3306.0,503.0,1374.0,460.0,5.7984,297600.0,NEAR BAY +-122.47,38.29,14.0,3732.0,846.0,1277.0,775.0,2.5658,208000.0,NEAR BAY +-122.45,38.27,25.0,5024.0,881.0,1994.0,838.0,4.2237,262300.0,NEAR BAY +-122.52,38.27,18.0,2405.0,390.0,872.0,367.0,5.2155,248300.0,<1H OCEAN +-122.53,38.32,22.0,3577.0,,1371.0,501.0,5.795,332300.0,<1H OCEAN +-122.49,38.32,30.0,1631.0,284.0,788.0,284.0,3.3098,195500.0,<1H OCEAN +-122.49,38.31,27.0,3078.0,597.0,1411.0,586.0,3.25,195500.0,<1H OCEAN +-122.49,38.3,14.0,2844.0,602.0,1613.0,544.0,3.3571,193600.0,<1H OCEAN +-122.48,38.3,17.0,2703.0,550.0,1241.0,515.0,2.652,171300.0,<1H OCEAN +-122.49,38.29,26.0,1726.0,289.0,672.0,251.0,3.8,242100.0,<1H OCEAN +-122.49,38.27,8.0,5092.0,988.0,1657.0,936.0,3.5625,213200.0,NEAR BAY +-122.47,38.34,15.0,2411.0,446.0,1144.0,407.0,4.3472,261000.0,<1H OCEAN +-122.49,38.32,17.0,3308.0,720.0,1587.0,632.0,3.2727,176000.0,<1H OCEAN +-122.48,38.32,31.0,1701.0,363.0,680.0,324.0,3.1375,192100.0,<1H OCEAN +-122.48,38.31,29.0,2375.0,560.0,1124.0,502.0,2.3276,166200.0,<1H OCEAN +-122.48,38.31,19.0,2398.0,521.0,1266.0,471.0,2.7727,186800.0,<1H OCEAN +-122.48,38.32,42.0,2106.0,533.0,1141.0,445.0,3.1129,149300.0,<1H OCEAN +-122.55,38.42,24.0,2220.0,411.0,894.0,365.0,4.2891,211700.0,<1H OCEAN +-122.58,38.38,27.0,3800.0,728.0,1587.0,605.0,4.7237,306600.0,<1H OCEAN +-122.5,38.4,36.0,1860.0,364.0,777.0,339.0,4.1307,295700.0,<1H OCEAN +-122.5,38.35,25.0,1566.0,352.0,784.0,362.0,3.075,165100.0,<1H OCEAN +-122.54,38.36,40.0,2725.0,531.0,1167.0,458.0,3.7969,202800.0,<1H OCEAN +-122.61,38.24,25.0,2990.0,450.0,1335.0,434.0,4.7,190100.0,<1H OCEAN +-122.61,38.24,17.0,1728.0,271.0,897.0,284.0,3.4896,185900.0,<1H OCEAN +-122.61,38.23,18.0,2042.0,420.0,914.0,400.0,2.9871,193800.0,<1H OCEAN +-122.62,38.24,19.0,1687.0,253.0,893.0,257.0,6.204,201800.0,<1H OCEAN +-122.61,38.25,18.0,2915.0,418.0,1340.0,421.0,5.2452,204900.0,<1H OCEAN +-122.6,38.24,16.0,1410.0,209.0,741.0,229.0,4.725,204500.0,<1H OCEAN +-122.61,38.24,18.0,2933.0,481.0,1279.0,443.0,5.0849,188500.0,<1H OCEAN +-122.6,38.24,16.0,2621.0,416.0,1247.0,386.0,4.8603,198400.0,<1H OCEAN +-122.63,38.25,20.0,3460.0,602.0,1707.0,568.0,3.7115,181900.0,<1H OCEAN +-122.62,38.24,33.0,1369.0,280.0,758.0,246.0,4.0341,156500.0,<1H OCEAN +-122.62,38.25,33.0,1453.0,250.0,677.0,237.0,4.0962,170200.0,<1H OCEAN +-122.61,38.26,17.0,2864.0,487.0,1482.0,547.0,4.6833,215200.0,<1H OCEAN +-122.62,38.25,20.0,1888.0,411.0,826.0,396.0,2.875,189100.0,<1H OCEAN +-122.62,38.25,24.0,2388.0,358.0,1187.0,362.0,4.6534,196500.0,<1H OCEAN +-122.57,38.27,7.0,6508.0,1028.0,2902.0,1010.0,5.3707,250500.0,<1H OCEAN +-122.51,38.17,8.0,5875.0,1115.0,2808.0,1029.0,3.6392,246300.0,NEAR BAY +-122.65,38.27,9.0,4764.0,816.0,2077.0,755.0,5.1391,234500.0,<1H OCEAN +-122.63,38.26,7.0,7808.0,1390.0,3551.0,1392.0,4.6069,202300.0,<1H OCEAN +-122.66,38.27,16.0,1523.0,308.0,477.0,315.0,2.1696,75000.0,<1H OCEAN +-122.63,38.24,45.0,1615.0,338.0,823.0,327.0,2.5179,145500.0,<1H OCEAN +-122.63,38.23,45.0,2264.0,504.0,1076.0,472.0,3.0139,194100.0,<1H OCEAN +-122.64,38.23,52.0,1075.0,249.0,519.0,210.0,3.0769,230900.0,<1H OCEAN +-122.64,38.23,49.0,2300.0,463.0,1061.0,429.0,4.075,228800.0,<1H OCEAN +-122.63,38.22,34.0,878.0,160.0,372.0,167.0,4.0417,232100.0,<1H OCEAN +-122.63,38.22,17.0,2652.0,342.0,1199.0,350.0,5.565,267100.0,<1H OCEAN +-122.63,38.21,22.0,2933.0,461.0,1283.0,449.0,6.2034,291100.0,<1H OCEAN +-122.63,38.23,37.0,1966.0,348.0,875.0,381.0,4.0703,223800.0,<1H OCEAN +-122.65,38.23,52.0,1735.0,347.0,712.0,343.0,3.1711,200800.0,<1H OCEAN +-122.64,38.23,52.0,2156.0,469.0,1070.0,467.0,3.3011,252300.0,<1H OCEAN +-122.65,38.23,52.0,1923.0,393.0,910.0,345.0,3.45,200600.0,<1H OCEAN +-122.66,38.2,39.0,2889.0,517.0,1351.0,489.0,4.3056,251300.0,<1H OCEAN +-122.64,38.24,52.0,1621.0,393.0,635.0,349.0,2.5202,244000.0,<1H OCEAN +-122.64,38.24,40.0,1974.0,410.0,1039.0,398.0,3.7917,151600.0,<1H OCEAN +-122.65,38.25,23.0,4030.0,,1852.0,778.0,3.402,193300.0,<1H OCEAN +-122.65,38.24,24.0,1948.0,310.0,922.0,313.0,4.95,243600.0,<1H OCEAN +-122.65,38.24,49.0,3273.0,579.0,1431.0,539.0,4.275,227600.0,<1H OCEAN +-122.64,38.25,31.0,2554.0,515.0,1507.0,533.0,3.8,162600.0,<1H OCEAN +-122.69,38.27,32.0,2344.0,434.0,1066.0,384.0,4.0313,285000.0,<1H OCEAN +-122.67,38.25,32.0,1333.0,235.0,660.0,206.0,4.0729,288500.0,<1H OCEAN +-122.68,38.25,29.0,1315.0,240.0,650.0,228.0,3.8269,306000.0,<1H OCEAN +-122.67,38.24,29.0,2644.0,464.0,1372.0,450.0,5.0544,261800.0,<1H OCEAN +-122.77,38.29,32.0,3201.0,542.0,1869.0,519.0,3.2442,268000.0,<1H OCEAN +-122.73,38.26,35.0,3941.0,645.0,1668.0,620.0,4.385,317700.0,<1H OCEAN +-122.7,38.23,47.0,2090.0,387.0,1053.0,377.0,3.5673,310300.0,<1H OCEAN +-122.72,38.35,16.0,3049.0,609.0,1675.0,618.0,2.4117,162500.0,<1H OCEAN +-122.72,38.31,26.0,1644.0,294.0,801.0,291.0,4.3906,248000.0,<1H OCEAN +-122.67,38.31,28.0,1915.0,419.0,930.0,342.0,3.7875,292700.0,<1H OCEAN +-122.69,38.3,30.0,3919.0,743.0,1693.0,693.0,3.3827,292100.0,<1H OCEAN +-122.73,38.34,44.0,743.0,155.0,434.0,162.0,2.5819,209600.0,<1H OCEAN +-122.69,38.32,16.0,3741.0,698.0,1938.0,658.0,4.6324,183600.0,<1H OCEAN +-122.71,38.33,13.0,4011.0,936.0,2064.0,914.0,3.6953,157600.0,<1H OCEAN +-122.7,38.31,14.0,3155.0,580.0,1208.0,501.0,4.1964,258100.0,<1H OCEAN +-122.7,38.33,16.0,1244.0,242.0,696.0,236.0,3.6369,158700.0,<1H OCEAN +-122.69,38.32,15.0,2536.0,414.0,1400.0,426.0,5.6613,172400.0,<1H OCEAN +-122.69,38.34,23.0,2846.0,516.0,1526.0,492.0,3.733,163500.0,<1H OCEAN +-122.7,38.33,26.0,1887.0,381.0,1060.0,364.0,3.0078,160400.0,<1H OCEAN +-122.71,38.34,22.0,1249.0,335.0,699.0,308.0,2.6033,121600.0,<1H OCEAN +-122.7,38.33,26.0,1584.0,295.0,846.0,295.0,3.375,156300.0,<1H OCEAN +-122.69,38.35,12.0,1550.0,187.0,685.0,188.0,7.226,255300.0,<1H OCEAN +-122.69,38.34,15.0,3091.0,697.0,1602.0,682.0,4.0071,135500.0,<1H OCEAN +-122.71,38.35,11.0,2242.0,699.0,1203.0,642.0,2.3464,104200.0,<1H OCEAN +-122.7,38.35,14.0,2313.0,,954.0,397.0,3.7813,146500.0,<1H OCEAN +-122.7,38.35,14.0,1555.0,369.0,493.0,335.0,1.6033,67500.0,<1H OCEAN +-122.7,38.34,19.0,2987.0,676.0,1782.0,688.0,2.8261,154500.0,<1H OCEAN +-122.71,38.34,23.0,2744.0,588.0,1493.0,557.0,3.1781,162000.0,<1H OCEAN +-122.69,38.37,8.0,6322.0,1001.0,2969.0,1043.0,4.8233,214000.0,<1H OCEAN +-122.71,38.37,16.0,2355.0,345.0,1014.0,348.0,5.6018,253000.0,<1H OCEAN +-122.69,38.35,16.0,1689.0,254.0,921.0,270.0,4.4444,191800.0,<1H OCEAN +-122.69,38.36,6.0,5496.0,1374.0,2502.0,1189.0,2.4827,177500.0,<1H OCEAN +-122.7,38.35,16.0,1328.0,187.0,607.0,197.0,5.0366,257800.0,<1H OCEAN +-122.7,38.36,11.0,5817.0,878.0,2538.0,876.0,4.221,227100.0,<1H OCEAN +-122.63,38.34,15.0,2153.0,345.0,979.0,335.0,5.1966,325400.0,<1H OCEAN +-122.68,38.36,8.0,7520.0,1336.0,3833.0,1287.0,4.3278,184100.0,<1H OCEAN +-122.69,38.34,12.0,3876.0,782.0,2146.0,764.0,4.0844,165400.0,<1H OCEAN +-122.67,38.33,4.0,8072.0,1606.0,4323.0,1475.0,3.9518,220300.0,<1H OCEAN +-122.69,38.34,16.0,1683.0,341.0,880.0,327.0,3.2857,160200.0,<1H OCEAN +-122.68,38.4,32.0,2826.0,627.0,1767.0,628.0,3.1047,141400.0,<1H OCEAN +-122.7,38.43,28.0,1585.0,412.0,1362.0,424.0,1.6685,114100.0,<1H OCEAN +-122.71,38.42,23.0,1569.0,414.0,1031.0,368.0,1.6267,129200.0,<1H OCEAN +-122.71,38.4,17.0,1690.0,464.0,833.0,445.0,1.439,140600.0,<1H OCEAN +-122.7,38.39,16.0,4922.0,1211.0,2557.0,1088.0,2.0915,168100.0,<1H OCEAN +-122.62,38.4,10.0,9772.0,1308.0,3741.0,1242.0,6.5261,324700.0,<1H OCEAN +-122.66,38.44,17.0,5815.0,898.0,2614.0,887.0,4.3657,215900.0,<1H OCEAN +-122.67,38.44,29.0,2551.0,448.0,1165.0,456.0,4.3587,196400.0,<1H OCEAN +-122.68,38.43,18.0,2723.0,529.0,1150.0,520.0,3.5885,191900.0,<1H OCEAN +-122.65,38.4,21.0,1059.0,150.0,400.0,154.0,6.8586,343100.0,<1H OCEAN +-122.65,38.37,15.0,1848.0,280.0,786.0,282.0,5.7204,344100.0,<1H OCEAN +-122.67,38.43,17.0,1804.0,304.0,750.0,298.0,4.5588,196400.0,<1H OCEAN +-122.67,38.43,17.0,2007.0,400.0,895.0,403.0,3.2813,202700.0,<1H OCEAN +-122.66,38.42,14.0,5315.0,1037.0,2228.0,950.0,4.023,208400.0,<1H OCEAN +-122.68,38.43,29.0,488.0,63.0,161.0,62.0,6.0774,334400.0,<1H OCEAN +-122.58,38.46,15.0,2936.0,517.0,1182.0,501.0,3.3981,246900.0,<1H OCEAN +-122.61,38.42,13.0,7731.0,1360.0,2543.0,1249.0,4.6957,259800.0,<1H OCEAN +-122.58,38.43,10.0,3597.0,661.0,1132.0,639.0,3.9375,269200.0,<1H OCEAN +-122.59,38.44,14.0,1665.0,390.0,505.0,348.0,3.183,201200.0,<1H OCEAN +-122.59,38.43,20.0,2791.0,546.0,785.0,512.0,3.4561,216700.0,<1H OCEAN +-122.56,38.41,20.0,1151.0,211.0,478.0,183.0,5.93,384600.0,<1H OCEAN +-122.66,38.46,14.0,2364.0,631.0,1300.0,625.0,2.6023,221100.0,<1H OCEAN +-122.66,38.45,26.0,2081.0,339.0,906.0,323.0,4.4375,293500.0,<1H OCEAN +-122.67,38.45,24.0,2622.0,525.0,1027.0,510.0,2.9222,242600.0,<1H OCEAN +-122.67,38.44,32.0,3771.0,741.0,1786.0,721.0,3.2415,172200.0,<1H OCEAN +-122.68,38.44,29.0,2796.0,588.0,1346.0,562.0,2.9107,169700.0,<1H OCEAN +-122.7,38.45,47.0,904.0,154.0,310.0,144.0,3.9766,190600.0,<1H OCEAN +-122.68,38.45,36.0,1686.0,303.0,744.0,304.0,4.0139,163100.0,<1H OCEAN +-122.69,38.44,40.0,1449.0,281.0,636.0,295.0,2.7222,161200.0,<1H OCEAN +-122.69,38.44,35.0,1356.0,241.0,620.0,216.0,3.5521,168300.0,<1H OCEAN +-122.68,38.44,36.0,1311.0,259.0,648.0,268.0,3.4545,161200.0,<1H OCEAN +-122.7,38.44,45.0,883.0,202.0,401.0,194.0,3.2845,178300.0,<1H OCEAN +-122.69,38.45,36.0,1943.0,337.0,711.0,318.0,3.9191,183000.0,<1H OCEAN +-122.69,38.44,31.0,1808.0,315.0,691.0,280.0,3.8583,193200.0,<1H OCEAN +-122.7,38.44,42.0,709.0,182.0,547.0,172.0,2.1912,165000.0,<1H OCEAN +-122.7,38.44,35.0,1304.0,343.0,822.0,304.0,3.2935,157800.0,<1H OCEAN +-122.71,38.43,52.0,1439.0,325.0,738.0,316.0,2.2262,129900.0,<1H OCEAN +-122.71,38.43,38.0,1689.0,526.0,1071.0,529.0,1.5026,124000.0,<1H OCEAN +-122.72,38.44,52.0,1059.0,281.0,627.0,273.0,1.5357,137500.0,<1H OCEAN +-122.71,38.44,52.0,988.0,283.0,475.0,242.0,1.3684,258300.0,<1H OCEAN +-122.71,38.44,27.0,966.0,251.0,462.0,230.0,1.7,350000.0,<1H OCEAN +-122.72,38.47,29.0,1706.0,415.0,990.0,394.0,1.9932,164800.0,<1H OCEAN +-122.72,38.46,35.0,1445.0,309.0,795.0,308.0,2.9073,157000.0,<1H OCEAN +-122.72,38.45,41.0,1743.0,373.0,780.0,357.0,3.1467,175500.0,<1H OCEAN +-122.71,38.46,42.0,1574.0,376.0,844.0,369.0,2.314,169400.0,<1H OCEAN +-122.71,38.46,41.0,1974.0,482.0,965.0,458.0,2.905,159300.0,<1H OCEAN +-122.71,38.46,36.0,2175.0,516.0,1087.0,477.0,3.0444,167200.0,<1H OCEAN +-122.71,38.45,39.0,2739.0,573.0,1223.0,569.0,2.9663,185400.0,<1H OCEAN +-122.71,38.45,48.0,3118.0,561.0,1275.0,530.0,3.455,222100.0,<1H OCEAN +-122.7,38.45,26.0,2011.0,557.0,855.0,530.0,1.125,233300.0,<1H OCEAN +-122.71,38.45,52.0,2259.0,537.0,957.0,520.0,2.1827,188800.0,<1H OCEAN +-122.68,38.48,15.0,1575.0,262.0,716.0,259.0,5.3409,244600.0,<1H OCEAN +-122.67,38.47,16.0,3452.0,791.0,1567.0,731.0,2.4722,194300.0,<1H OCEAN +-122.68,38.46,17.0,3201.0,527.0,1244.0,495.0,4.7143,202900.0,<1H OCEAN +-122.67,38.47,19.0,1848.0,428.0,1130.0,433.0,3.0568,190300.0,<1H OCEAN +-122.68,38.46,15.0,1811.0,406.0,718.0,403.0,2.3929,141300.0,<1H OCEAN +-122.71,38.46,23.0,3220.0,603.0,1299.0,591.0,3.9261,213300.0,<1H OCEAN +-122.7,38.46,29.0,2891.0,459.0,1012.0,441.0,5.0415,240200.0,<1H OCEAN +-122.69,38.46,32.0,2970.0,504.0,1117.0,512.0,5.0,275900.0,<1H OCEAN +-122.7,38.45,39.0,2015.0,335.0,640.0,315.0,4.1734,240500.0,<1H OCEAN +-122.72,38.48,23.0,2296.0,356.0,902.0,334.0,6.0298,289100.0,<1H OCEAN +-122.68,38.46,19.0,4976.0,711.0,1926.0,625.0,7.3003,381300.0,<1H OCEAN +-122.71,38.5,15.0,5645.0,830.0,2324.0,769.0,6.6104,330900.0,<1H OCEAN +-122.66,38.48,16.0,2697.0,490.0,1462.0,515.0,4.2051,190300.0,<1H OCEAN +-122.66,38.48,16.0,2724.0,593.0,1124.0,586.0,2.825,186200.0,<1H OCEAN +-122.66,38.47,23.0,2246.0,437.0,1035.0,386.0,3.7617,172600.0,<1H OCEAN +-122.65,38.46,14.0,2096.0,420.0,926.0,397.0,4.0647,187800.0,<1H OCEAN +-122.66,38.48,21.0,2066.0,393.0,919.0,395.0,3.267,176200.0,<1H OCEAN +-122.66,38.47,20.0,2806.0,477.0,1369.0,460.0,4.75,190500.0,<1H OCEAN +-122.69,38.51,18.0,3364.0,501.0,1442.0,506.0,6.6854,313000.0,<1H OCEAN +-122.64,38.48,19.0,3244.0,449.0,1174.0,454.0,5.8369,255700.0,<1H OCEAN +-122.65,38.47,24.0,2268.0,330.0,847.0,296.0,3.858,214400.0,<1H OCEAN +-122.6,38.48,17.0,1528.0,264.0,606.0,251.0,6.6004,341500.0,<1H OCEAN +-122.62,38.54,24.0,2409.0,464.0,1006.0,403.0,4.5167,265200.0,<1H OCEAN +-122.63,38.5,19.0,2107.0,332.0,874.0,341.0,5.7819,265600.0,<1H OCEAN +-122.65,38.48,17.0,1090.0,164.0,473.0,163.0,5.5061,231800.0,<1H OCEAN +-122.75,38.54,6.0,6719.0,1016.0,2699.0,997.0,5.4886,254200.0,<1H OCEAN +-122.78,38.52,23.0,2511.0,549.0,1052.0,527.0,2.4922,192000.0,<1H OCEAN +-122.79,38.5,18.0,4839.0,918.0,2755.0,841.0,3.75,248300.0,<1H OCEAN +-122.76,38.52,6.0,2073.0,388.0,826.0,375.0,3.055,224100.0,<1H OCEAN +-122.75,38.5,16.0,4196.0,638.0,1713.0,615.0,5.449,252100.0,<1H OCEAN +-122.73,38.46,14.0,4042.0,1298.0,2323.0,1158.0,2.0651,135400.0,<1H OCEAN +-122.73,38.47,16.0,1834.0,391.0,994.0,390.0,3.7266,156500.0,<1H OCEAN +-122.74,38.47,16.0,1426.0,287.0,525.0,260.0,3.0714,161700.0,<1H OCEAN +-122.74,38.46,9.0,2268.0,594.0,1311.0,585.0,2.6607,91500.0,<1H OCEAN +-122.74,38.48,12.0,4174.0,670.0,1882.0,647.0,4.551,178300.0,<1H OCEAN +-122.75,38.48,4.0,6487.0,1112.0,2958.0,1131.0,4.5417,197400.0,<1H OCEAN +-122.79,38.48,7.0,6837.0,,3468.0,1405.0,3.1662,191000.0,<1H OCEAN +-122.81,38.46,28.0,3580.0,611.0,1634.0,567.0,4.745,248600.0,<1H OCEAN +-122.75,38.46,13.0,4323.0,1020.0,2566.0,728.0,3.0147,142800.0,<1H OCEAN +-122.75,38.46,16.0,2653.0,606.0,1693.0,586.0,2.6384,146900.0,<1H OCEAN +-122.76,38.46,14.0,4742.0,756.0,2149.0,732.0,4.5152,199200.0,<1H OCEAN +-122.76,38.46,14.0,4794.0,767.0,2252.0,768.0,4.2061,213100.0,<1H OCEAN +-122.73,38.46,14.0,2324.0,754.0,1026.0,677.0,1.722,150000.0,<1H OCEAN +-122.74,38.45,17.0,3064.0,588.0,1704.0,590.0,3.9329,170900.0,<1H OCEAN +-122.74,38.45,25.0,2696.0,496.0,1296.0,514.0,4.0798,179200.0,<1H OCEAN +-122.74,38.44,23.0,2819.0,612.0,1644.0,546.0,2.6576,147900.0,<1H OCEAN +-122.73,38.44,20.0,2919.0,508.0,1711.0,500.0,3.875,140300.0,<1H OCEAN +-122.72,38.44,48.0,707.0,166.0,458.0,172.0,3.1797,140400.0,<1H OCEAN +-122.73,38.44,35.0,1120.0,297.0,659.0,274.0,2.3824,145000.0,<1H OCEAN +-122.73,38.44,28.0,1073.0,241.0,652.0,238.0,2.4,146200.0,<1H OCEAN +-122.72,38.44,52.0,188.0,62.0,301.0,72.0,0.9437,129200.0,<1H OCEAN +-122.74,38.44,17.0,2287.0,497.0,1240.0,493.0,3.5845,164300.0,<1H OCEAN +-122.74,38.43,11.0,4670.0,1007.0,2430.0,962.0,3.0341,142300.0,<1H OCEAN +-122.73,38.43,15.0,3265.0,690.0,1629.0,629.0,3.7132,167600.0,<1H OCEAN +-122.76,38.45,8.0,5823.0,1104.0,2864.0,1041.0,3.6292,183600.0,<1H OCEAN +-122.82,38.44,23.0,1551.0,236.0,555.0,243.0,4.6792,304700.0,<1H OCEAN +-122.76,38.44,11.0,2895.0,524.0,1633.0,534.0,4.7283,170200.0,<1H OCEAN +-122.76,38.44,14.0,4376.0,797.0,1809.0,746.0,3.8244,180000.0,<1H OCEAN +-122.78,38.44,14.0,4143.0,656.0,1569.0,629.0,3.9766,345300.0,<1H OCEAN +-122.79,38.42,9.0,4967.0,885.0,2581.0,915.0,5.038,185600.0,<1H OCEAN +-122.74,38.42,42.0,2050.0,434.0,1073.0,416.0,2.375,141000.0,<1H OCEAN +-122.73,38.43,29.0,2677.0,691.0,1880.0,664.0,2.1864,143200.0,<1H OCEAN +-122.72,38.43,31.0,2020.0,476.0,1408.0,437.0,2.5735,131100.0,<1H OCEAN +-122.72,38.42,26.0,1168.0,253.0,937.0,248.0,1.9458,146000.0,<1H OCEAN +-122.72,38.42,26.0,3604.0,734.0,2605.0,704.0,3.0969,143800.0,<1H OCEAN +-122.73,38.42,26.0,1446.0,296.0,884.0,295.0,4.3523,150000.0,<1H OCEAN +-122.72,38.42,30.0,2099.0,406.0,1156.0,401.0,2.8036,152300.0,<1H OCEAN +-122.73,38.4,30.0,3689.0,746.0,2250.0,697.0,2.975,157300.0,<1H OCEAN +-122.73,38.37,40.0,1389.0,309.0,841.0,288.0,3.1094,183300.0,<1H OCEAN +-122.75,38.43,36.0,1599.0,345.0,1086.0,314.0,2.6667,149100.0,<1H OCEAN +-122.78,38.41,43.0,1351.0,277.0,1011.0,297.0,2.5917,144000.0,<1H OCEAN +-122.77,38.39,35.0,2611.0,475.0,1293.0,463.0,2.75,197500.0,<1H OCEAN +-122.75,38.41,17.0,3150.0,588.0,1857.0,610.0,3.9688,165000.0,<1H OCEAN +-122.82,38.41,32.0,701.0,182.0,489.0,168.0,2.785,169300.0,<1H OCEAN +-122.84,38.42,29.0,2756.0,551.0,1381.0,531.0,2.9625,237300.0,<1H OCEAN +-122.86,38.42,38.0,1166.0,223.0,584.0,225.0,3.6667,244400.0,<1H OCEAN +-122.84,38.41,19.0,2191.0,391.0,1065.0,404.0,4.125,204600.0,<1H OCEAN +-122.83,38.4,37.0,2217.0,451.0,1019.0,428.0,3.1217,178500.0,<1H OCEAN +-122.84,38.4,15.0,3080.0,617.0,1446.0,599.0,3.6696,194400.0,<1H OCEAN +-122.78,38.37,21.0,795.0,163.0,414.0,162.0,3.7991,175000.0,<1H OCEAN +-122.82,38.4,40.0,2406.0,423.0,1054.0,426.0,3.8846,215900.0,<1H OCEAN +-122.8,38.37,26.0,1634.0,315.0,909.0,317.0,4.1731,257200.0,<1H OCEAN +-122.8,38.39,26.0,2273.0,474.0,1124.0,420.0,2.9453,166700.0,<1H OCEAN +-122.84,38.39,16.0,1688.0,292.0,793.0,280.0,4.4357,216900.0,<1H OCEAN +-122.83,38.39,19.0,1765.0,394.0,868.0,388.0,2.462,260300.0,<1H OCEAN +-122.82,38.39,22.0,1288.0,243.0,593.0,220.0,3.625,233700.0,<1H OCEAN +-122.82,38.39,32.0,1437.0,257.0,752.0,245.0,4.7422,240900.0,<1H OCEAN +-122.82,38.38,27.0,2565.0,479.0,1227.0,467.0,4.5132,259900.0,<1H OCEAN +-122.76,38.35,30.0,2260.0,374.0,958.0,359.0,5.0323,222400.0,<1H OCEAN +-122.87,38.39,34.0,1138.0,205.0,541.0,180.0,4.5147,271400.0,<1H OCEAN +-122.77,38.33,32.0,2054.0,324.0,843.0,306.0,4.5875,290700.0,<1H OCEAN +-122.82,38.33,25.0,3067.0,569.0,1602.0,550.0,3.9917,244100.0,<1H OCEAN +-122.88,38.34,20.0,3404.0,628.0,1641.0,585.0,5.0574,276200.0,<1H OCEAN +-122.81,38.36,18.0,2399.0,389.0,1131.0,391.0,5.2769,293900.0,<1H OCEAN +-122.85,38.37,16.0,1762.0,293.0,810.0,297.0,4.4437,305000.0,<1H OCEAN +-122.89,38.38,16.0,2017.0,369.0,931.0,336.0,5.7664,267500.0,<1H OCEAN +-122.86,38.44,31.0,1534.0,292.0,716.0,288.0,3.4471,209500.0,<1H OCEAN +-122.89,38.42,28.0,2388.0,437.0,1015.0,381.0,5.1512,268300.0,<1H OCEAN +-122.87,38.43,36.0,1987.0,387.0,1065.0,347.0,4.0446,172200.0,<1H OCEAN +-122.91,38.43,19.0,1968.0,350.0,852.0,308.0,4.6705,269800.0,<1H OCEAN +-122.89,38.4,22.0,2900.0,538.0,1445.0,515.0,4.511,296800.0,<1H OCEAN +-123.04,38.49,30.0,3977.0,930.0,1387.0,582.0,2.6161,132500.0,NEAR OCEAN +-123.02,38.46,52.0,2154.0,499.0,524.0,259.0,2.0556,120000.0,NEAR OCEAN +-122.98,38.44,29.0,4450.0,939.0,1328.0,590.0,3.1,162100.0,<1H OCEAN +-123.01,38.48,37.0,1179.0,282.0,354.0,176.0,1.3712,118300.0,NEAR OCEAN +-123.02,38.54,35.0,2157.0,487.0,768.0,322.0,3.2315,136900.0,<1H OCEAN +-123.0,38.51,33.0,1565.0,390.0,759.0,311.0,2.6726,153100.0,NEAR OCEAN +-122.97,38.5,44.0,3234.0,746.0,1112.0,470.0,1.9265,132700.0,<1H OCEAN +-122.97,38.53,48.0,3939.0,860.0,1257.0,571.0,2.1165,98700.0,<1H OCEAN +-122.94,38.53,49.0,1141.0,239.0,505.0,184.0,3.7143,148800.0,<1H OCEAN +-122.94,38.5,46.0,2280.0,492.0,807.0,366.0,2.6316,117000.0,<1H OCEAN +-122.91,38.49,37.0,2469.0,519.0,1137.0,474.0,3.6343,146500.0,<1H OCEAN +-122.87,38.48,27.0,3894.0,776.0,1832.0,715.0,3.5085,187800.0,<1H OCEAN +-122.88,38.46,25.0,1563.0,314.0,737.0,305.0,2.5687,249200.0,<1H OCEAN +-122.85,38.46,22.0,3328.0,550.0,1309.0,512.0,4.7105,266200.0,<1H OCEAN +-122.94,38.49,37.0,3169.0,719.0,777.0,344.0,2.7072,117100.0,<1H OCEAN +-122.91,38.46,18.0,2021.0,,912.0,329.0,4.5,251900.0,<1H OCEAN +-122.72,38.58,4.0,7042.0,1100.0,2936.0,1043.0,5.0555,240800.0,<1H OCEAN +-122.82,38.55,8.0,6190.0,1088.0,2967.0,1000.0,3.8616,195100.0,<1H OCEAN +-122.85,38.52,13.0,4808.0,848.0,2568.0,762.0,3.6583,183200.0,<1H OCEAN +-122.78,38.53,9.0,3659.0,652.0,1889.0,632.0,4.2716,250800.0,<1H OCEAN +-122.81,38.54,12.0,2289.0,611.0,919.0,540.0,1.1553,139300.0,<1H OCEAN +-122.82,38.53,27.0,1823.0,360.0,907.0,317.0,3.276,172900.0,<1H OCEAN +-122.79,38.54,5.0,3986.0,737.0,1887.0,687.0,3.7768,213800.0,<1H OCEAN +-122.87,38.61,23.0,2676.0,521.0,1456.0,500.0,3.7361,173700.0,<1H OCEAN +-122.87,38.62,52.0,1514.0,348.0,767.0,354.0,2.1903,160000.0,<1H OCEAN +-122.86,38.61,52.0,1753.0,380.0,982.0,380.0,3.4013,183300.0,<1H OCEAN +-122.86,38.62,35.0,2597.0,522.0,1231.0,499.0,2.7432,174000.0,<1H OCEAN +-122.87,38.62,18.0,2721.0,557.0,1667.0,539.0,3.1875,176100.0,<1H OCEAN +-122.82,38.64,29.0,2176.0,385.0,1117.0,374.0,3.8681,188600.0,<1H OCEAN +-122.83,38.58,17.0,5199.0,1023.0,2036.0,890.0,3.2452,168800.0,<1H OCEAN +-122.82,38.61,41.0,2720.0,501.0,987.0,364.0,4.0294,201700.0,<1H OCEAN +-122.85,38.62,16.0,4418.0,704.0,1908.0,697.0,4.5913,244600.0,<1H OCEAN +-123.01,38.67,33.0,914.0,147.0,394.0,132.0,4.6875,246200.0,<1H OCEAN +-122.94,38.57,33.0,1530.0,266.0,728.0,250.0,5.1005,266700.0,<1H OCEAN +-122.94,38.64,26.0,4050.0,712.0,2072.0,636.0,4.0781,287800.0,<1H OCEAN +-122.95,38.73,37.0,1548.0,328.0,863.0,287.0,2.9792,151300.0,<1H OCEAN +-122.87,38.68,32.0,4073.0,718.0,2053.0,629.0,3.7352,228000.0,<1H OCEAN +-122.85,38.77,18.0,2856.0,513.0,1027.0,405.0,4.6953,241700.0,<1H OCEAN +-122.7,38.66,43.0,1384.0,284.0,582.0,224.0,3.9063,210000.0,<1H OCEAN +-123.03,38.79,16.0,4047.0,769.0,1998.0,673.0,3.375,171900.0,<1H OCEAN +-123.02,38.81,35.0,956.0,213.0,488.0,215.0,3.025,140600.0,<1H OCEAN +-123.02,38.81,45.0,1717.0,389.0,916.0,367.0,3.2425,138800.0,<1H OCEAN +-123.01,38.8,21.0,360.0,96.0,131.0,74.0,3.5156,133300.0,<1H OCEAN +-123.01,38.79,32.0,2697.0,529.0,1417.0,535.0,3.2546,134100.0,<1H OCEAN +-123.1,38.79,20.0,3109.0,712.0,1643.0,638.0,2.8344,164400.0,<1H OCEAN +-123.49,38.7,9.0,5409.0,1019.0,594.0,327.0,3.3125,295400.0,NEAR OCEAN +-123.24,38.7,38.0,1460.0,311.0,569.0,176.0,2.7171,131300.0,NEAR OCEAN +-123.25,38.54,27.0,3658.0,764.0,1278.0,518.0,3.3536,157500.0,NEAR OCEAN +-123.08,38.38,28.0,3297.0,676.0,923.0,373.0,3.9167,232600.0,NEAR OCEAN +-122.96,38.42,50.0,2530.0,524.0,940.0,361.0,2.9375,122900.0,<1H OCEAN +-123.07,38.46,31.0,855.0,217.0,280.0,139.0,2.3611,112500.0,NEAR OCEAN +-122.93,38.38,18.0,2562.0,500.0,1128.0,414.0,3.9336,262500.0,<1H OCEAN +-123.02,38.36,16.0,1496.0,298.0,778.0,284.0,3.8589,268800.0,NEAR OCEAN +-123.0,38.33,8.0,3223.0,637.0,851.0,418.0,5.6445,364800.0,NEAR OCEAN +-120.84,37.92,27.0,471.0,84.0,195.0,72.0,3.3333,208300.0,INLAND +-120.79,37.82,17.0,4227.0,729.0,1809.0,679.0,3.2667,269500.0,INLAND +-120.9,37.81,27.0,4213.0,750.0,2142.0,746.0,3.7031,173300.0,INLAND +-120.9,37.76,20.0,570.0,112.0,304.0,108.0,2.2024,156300.0,INLAND +-120.86,37.73,27.0,508.0,93.0,263.0,81.0,3.1136,183300.0,INLAND +-120.79,37.76,14.0,3531.0,508.0,1505.0,497.0,5.5228,275300.0,INLAND +-120.76,37.73,16.0,1343.0,241.0,732.0,195.0,3.5833,187500.0,INLAND +-120.69,37.77,46.0,431.0,86.0,239.0,80.0,3.3182,282100.0,INLAND +-120.87,37.77,9.0,4838.0,920.0,2460.0,923.0,3.5959,142700.0,INLAND +-120.85,37.77,52.0,436.0,81.0,197.0,68.0,1.8625,85400.0,INLAND +-120.86,37.77,45.0,621.0,129.0,257.0,124.0,1.7188,109400.0,INLAND +-120.86,37.77,38.0,1545.0,279.0,662.0,266.0,3.825,96400.0,INLAND +-120.86,37.77,28.0,1208.0,232.0,535.0,232.0,2.3523,94700.0,INLAND +-120.87,37.76,16.0,1174.0,249.0,601.0,242.0,1.7143,113300.0,INLAND +-120.85,37.77,20.0,651.0,157.0,421.0,151.0,2.0833,77300.0,INLAND +-120.85,37.77,37.0,1738.0,403.0,936.0,366.0,2.4717,77100.0,INLAND +-120.86,37.76,32.0,964.0,198.0,623.0,201.0,3.0917,88900.0,INLAND +-120.87,37.76,16.0,2022.0,413.0,1126.0,408.0,2.5655,116400.0,INLAND +-120.85,37.75,26.0,28.0,4.0,9.0,5.0,1.625,85000.0,INLAND +-120.85,37.78,15.0,3553.0,659.0,1684.0,611.0,3.3169,131200.0,INLAND +-120.85,37.78,25.0,421.0,,303.0,106.0,2.2679,71300.0,INLAND +-120.85,37.77,35.0,404.0,96.0,261.0,100.0,2.4583,75000.0,INLAND +-120.85,37.78,30.0,1120.0,248.0,609.0,237.0,2.2386,87200.0,INLAND +-120.83,37.77,20.0,1717.0,403.0,1062.0,401.0,1.6759,116700.0,INLAND +-120.85,37.77,10.0,423.0,110.0,295.0,94.0,1.3583,85200.0,INLAND +-120.83,37.76,21.0,435.0,96.0,219.0,83.0,2.9125,112500.0,INLAND +-120.83,37.79,16.0,893.0,164.0,548.0,155.0,3.6875,121900.0,INLAND +-120.93,37.74,37.0,1956.0,402.0,1265.0,397.0,2.3023,91900.0,INLAND +-120.94,37.74,35.0,1166.0,268.0,515.0,266.0,2.3469,90200.0,INLAND +-120.95,37.74,18.0,3453.0,666.0,1958.0,601.0,3.0043,156500.0,INLAND +-120.95,37.73,12.0,3609.0,712.0,2650.0,742.0,2.8565,92700.0,INLAND +-120.93,37.73,14.0,2799.0,,2294.0,596.0,2.6343,81500.0,INLAND +-120.93,37.72,18.0,391.0,71.0,247.0,71.0,4.3864,179500.0,INLAND +-120.98,37.71,22.0,434.0,89.0,195.0,86.0,2.4211,268800.0,INLAND +-120.99,37.7,14.0,9849.0,1887.0,4356.0,1780.0,3.5877,160900.0,INLAND +-120.97,37.69,14.0,5514.0,909.0,2819.0,970.0,3.8598,174400.0,INLAND +-120.91,37.74,19.0,1690.0,327.0,855.0,296.0,3.25,176700.0,INLAND +-120.91,37.73,31.0,840.0,154.0,429.0,150.0,2.4063,170200.0,INLAND +-120.92,37.7,24.0,527.0,112.0,270.0,112.0,1.6172,156300.0,INLAND +-120.94,37.7,25.0,1005.0,159.0,390.0,139.0,4.4,174100.0,INLAND +-120.97,37.73,19.0,3725.0,543.0,1412.0,463.0,5.7476,248600.0,INLAND +-121.01,37.74,14.0,2368.0,297.0,796.0,301.0,8.7783,435000.0,INLAND +-121.01,37.72,23.0,1373.0,264.0,677.0,245.0,2.5486,161100.0,INLAND +-121.06,37.73,5.0,2256.0,420.0,1246.0,397.0,4.9236,155900.0,INLAND +-121.07,37.71,39.0,223.0,37.0,92.0,37.0,3.375,212500.0,INLAND +-121.08,37.69,19.0,6473.0,1212.0,3559.0,1123.0,3.2246,129300.0,INLAND +-121.14,37.7,29.0,1343.0,223.0,751.0,225.0,3.2391,187500.0,INLAND +-121.09,37.67,30.0,1653.0,285.0,800.0,291.0,3.3482,220000.0,INLAND +-121.09,37.61,42.0,1787.0,296.0,921.0,287.0,3.8864,171400.0,INLAND +-121.18,37.64,43.0,1244.0,209.0,611.0,197.0,2.875,187500.0,INLAND +-121.06,37.7,7.0,9374.0,1847.0,4827.0,1722.0,3.462,151900.0,INLAND +-121.04,37.7,52.0,349.0,59.0,121.0,40.0,3.3036,197500.0,INLAND +-121.04,37.69,5.0,9601.0,1639.0,4449.0,1575.0,4.5332,195500.0,INLAND +-121.02,37.71,25.0,207.0,41.0,87.0,43.0,3.6023,131300.0,INLAND +-121.03,37.69,6.0,2607.0,557.0,1266.0,475.0,3.4632,137700.0,INLAND +-121.02,37.7,16.0,3476.0,650.0,2126.0,665.0,3.3438,125400.0,INLAND +-121.0,37.71,52.0,102.0,23.0,35.0,33.0,2.25,175000.0,INLAND +-121.01,37.7,12.0,9148.0,1906.0,4656.0,1853.0,3.2447,142200.0,INLAND +-121.06,37.67,31.0,906.0,146.0,383.0,129.0,3.4167,196900.0,INLAND +-121.06,37.66,6.0,3655.0,598.0,1993.0,596.0,4.6053,150100.0,INLAND +-121.05,37.65,5.0,3096.0,545.0,1760.0,519.0,4.5701,146400.0,INLAND +-121.04,37.66,11.0,1658.0,301.0,913.0,298.0,4.1705,162800.0,INLAND +-121.04,37.65,8.0,1959.0,379.0,995.0,365.0,3.3567,129100.0,INLAND +-121.03,37.65,37.0,375.0,58.0,120.0,37.0,3.9844,150000.0,INLAND +-121.04,37.67,16.0,19.0,19.0,166.0,9.0,0.536,162500.0,INLAND +-121.0,37.69,18.0,3469.0,661.0,1452.0,628.0,3.4079,147500.0,INLAND +-121.01,37.69,20.0,3275.0,760.0,1538.0,705.0,2.48,135600.0,INLAND +-121.01,37.68,33.0,828.0,123.0,373.0,133.0,5.5,146200.0,INLAND +-121.0,37.68,15.0,1232.0,180.0,408.0,196.0,6.9682,182400.0,INLAND +-121.0,37.68,29.0,2911.0,445.0,1170.0,460.0,4.9904,158100.0,INLAND +-121.01,37.68,33.0,3230.0,587.0,1579.0,560.0,3.5775,109700.0,INLAND +-121.0,37.67,26.0,90.0,18.0,47.0,18.0,1.125,87500.0,INLAND +-121.04,37.68,18.0,5129.0,1171.0,3622.0,1128.0,2.0272,92700.0,INLAND +-121.04,37.68,28.0,1909.0,398.0,1140.0,380.0,2.3783,81400.0,INLAND +-121.02,37.69,19.0,3814.0,790.0,2219.0,804.0,3.5208,145000.0,INLAND +-121.03,37.69,5.0,4034.0,771.0,1967.0,742.0,3.8065,146000.0,INLAND +-121.04,37.69,9.0,6333.0,1355.0,3265.0,1265.0,3.0217,160900.0,INLAND +-121.02,37.68,25.0,3262.0,588.0,1834.0,578.0,3.996,114500.0,INLAND +-121.03,37.68,20.0,3204.0,625.0,2016.0,605.0,2.6567,110400.0,INLAND +-121.03,37.68,27.0,1956.0,327.0,1004.0,307.0,3.7857,110500.0,INLAND +-121.02,37.68,28.0,2875.0,560.0,1608.0,558.0,3.5489,106400.0,INLAND +-120.94,37.68,4.0,13315.0,2424.0,6420.0,2289.0,4.2471,162100.0,INLAND +-120.95,37.67,15.0,3062.0,584.0,1624.0,538.0,4.3864,137600.0,INLAND +-120.96,37.66,16.0,4961.0,902.0,2654.0,804.0,4.2823,138300.0,INLAND +-120.95,37.66,16.0,4478.0,647.0,1990.0,672.0,5.1473,188400.0,INLAND +-120.95,37.65,37.0,136.0,20.0,72.0,22.0,2.2279,225000.0,INLAND +-120.93,37.67,6.0,3491.0,657.0,2075.0,644.0,3.3844,138500.0,INLAND +-120.93,37.66,10.0,7566.0,1348.0,3227.0,1199.0,4.744,148100.0,INLAND +-120.94,37.66,17.0,1147.0,140.0,327.0,136.0,6.8654,290500.0,INLAND +-120.98,37.69,18.0,3176.0,468.0,1296.0,471.0,5.5684,185100.0,INLAND +-120.99,37.69,25.0,2773.0,384.0,1060.0,381.0,6.4788,199400.0,INLAND +-120.99,37.68,30.0,1975.0,375.0,732.0,326.0,2.6932,94900.0,INLAND +-120.98,37.68,24.0,705.0,114.0,347.0,141.0,3.1912,149600.0,INLAND +-120.97,37.69,16.0,2793.0,476.0,1279.0,477.0,3.4667,160900.0,INLAND +-120.97,37.69,15.0,4065.0,841.0,1986.0,680.0,3.072,114300.0,INLAND +-120.97,37.68,16.0,2349.0,446.0,1302.0,392.0,3.1625,130300.0,INLAND +-120.97,37.68,9.0,1114.0,172.0,529.0,174.0,4.7159,163700.0,INLAND +-120.98,37.68,27.0,4006.0,762.0,1806.0,718.0,3.1848,112800.0,INLAND +-120.99,37.68,28.0,3269.0,647.0,1595.0,617.0,2.2336,112700.0,INLAND +-120.99,37.67,16.0,568.0,124.0,307.0,116.0,2.1518,107400.0,INLAND +-120.98,37.67,13.0,1221.0,260.0,682.0,275.0,3.65,155500.0,INLAND +-120.97,37.68,16.0,2493.0,535.0,1370.0,504.0,3.3368,121200.0,INLAND +-120.98,37.68,18.0,4197.0,1006.0,2203.0,874.0,2.166,118600.0,INLAND +-120.97,37.67,16.0,1499.0,250.0,1292.0,271.0,4.3851,117300.0,INLAND +-120.96,37.67,17.0,2434.0,511.0,1558.0,546.0,2.9219,114300.0,INLAND +-120.96,37.67,18.0,1442.0,229.0,538.0,220.0,4.2969,163200.0,INLAND +-120.97,37.67,31.0,1648.0,293.0,792.0,294.0,2.4,121500.0,INLAND +-120.97,37.66,19.0,1974.0,393.0,799.0,377.0,3.1286,137500.0,INLAND +-120.96,37.66,15.0,2485.0,434.0,1296.0,434.0,3.8542,145200.0,INLAND +-120.97,37.66,24.0,2930.0,588.0,1448.0,570.0,3.5395,127900.0,INLAND +-120.97,37.66,21.0,2760.0,632.0,1260.0,576.0,2.0227,179800.0,INLAND +-120.98,37.66,33.0,1959.0,342.0,984.0,356.0,4.5208,114200.0,INLAND +-120.98,37.66,40.0,3012.0,616.0,1423.0,595.0,2.6346,100600.0,INLAND +-120.98,37.65,36.0,826.0,167.0,432.0,150.0,2.5,103100.0,INLAND +-120.98,37.66,10.0,934.0,,401.0,255.0,0.9336,127100.0,INLAND +-120.98,37.67,33.0,1433.0,298.0,824.0,302.0,2.7621,109100.0,INLAND +-120.99,37.67,28.0,1768.0,423.0,1066.0,392.0,1.8315,90500.0,INLAND +-120.99,37.66,30.0,1718.0,395.0,914.0,400.0,1.933,107000.0,INLAND +-120.99,37.66,39.0,1748.0,329.0,831.0,302.0,2.5938,135600.0,INLAND +-120.99,37.66,46.0,1750.0,347.0,754.0,356.0,2.9137,106000.0,INLAND +-120.99,37.65,44.0,2848.0,623.0,1408.0,576.0,2.1487,86600.0,INLAND +-121.0,37.65,52.0,3887.0,803.0,1768.0,779.0,2.5089,119000.0,INLAND +-121.0,37.67,27.0,2278.0,479.0,995.0,449.0,2.5148,110200.0,INLAND +-121.01,37.67,37.0,2483.0,459.0,1072.0,445.0,3.0721,108100.0,INLAND +-121.01,37.66,36.0,3679.0,613.0,1366.0,581.0,4.5,151400.0,INLAND +-121.0,37.66,43.0,2369.0,413.0,944.0,422.0,3.2632,138100.0,INLAND +-121.0,37.66,43.0,2039.0,331.0,875.0,342.0,3.9844,152000.0,INLAND +-121.01,37.65,47.0,1713.0,334.0,570.0,297.0,2.1969,149400.0,INLAND +-121.02,37.67,32.0,3951.0,797.0,1916.0,740.0,2.6722,111500.0,INLAND +-121.03,37.67,24.0,2162.0,459.0,1468.0,441.0,3.1857,98300.0,INLAND +-121.03,37.66,31.0,887.0,217.0,614.0,199.0,2.1528,75500.0,INLAND +-121.02,37.66,36.0,3495.0,641.0,1688.0,684.0,3.1568,109900.0,INLAND +-121.02,37.66,28.0,1437.0,400.0,806.0,338.0,1.6078,125000.0,INLAND +-121.02,37.65,20.0,2973.0,620.0,1996.0,570.0,3.0645,106000.0,INLAND +-121.03,37.64,22.0,2001.0,387.0,1520.0,387.0,3.148,102300.0,INLAND +-121.03,37.63,5.0,2881.0,584.0,1490.0,570.0,3.0398,120000.0,INLAND +-121.05,37.64,33.0,1438.0,237.0,569.0,208.0,3.3516,150000.0,INLAND +-121.05,37.62,37.0,1043.0,196.0,555.0,197.0,3.4125,125000.0,INLAND +-121.02,37.64,42.0,1437.0,307.0,1035.0,284.0,2.1036,88300.0,INLAND +-121.02,37.63,35.0,1591.0,364.0,1290.0,352.0,1.564,81800.0,INLAND +-121.02,37.62,30.0,1721.0,399.0,1878.0,382.0,2.5363,83900.0,INLAND +-121.02,37.61,33.0,1469.0,370.0,1318.0,349.0,1.7104,59000.0,INLAND +-121.03,37.62,43.0,1241.0,240.0,612.0,266.0,2.8194,81300.0,INLAND +-121.03,37.62,46.0,2331.0,508.0,1210.0,484.0,2.5313,77700.0,INLAND +-121.02,37.62,14.0,5737.0,1286.0,4722.0,1210.0,1.6731,95800.0,INLAND +-121.01,37.64,52.0,201.0,35.0,74.0,22.0,1.3036,75000.0,INLAND +-121.01,37.64,36.0,1981.0,507.0,1998.0,468.0,1.9013,69900.0,INLAND +-121.01,37.64,33.0,693.0,207.0,598.0,192.0,1.0217,81300.0,INLAND +-121.0,37.64,43.0,311.0,95.0,293.0,94.0,1.2902,67500.0,INLAND +-120.99,37.64,41.0,1580.0,385.0,881.0,361.0,2.7538,99600.0,INLAND +-120.99,37.64,50.0,683.0,189.0,459.0,195.0,1.8162,70000.0,INLAND +-121.0,37.65,17.0,484.0,202.0,198.0,204.0,0.6825,187500.0,INLAND +-121.01,37.65,52.0,178.0,53.0,152.0,62.0,0.4999,82500.0,INLAND +-121.0,37.64,19.0,121.0,41.0,658.0,41.0,0.9573,162500.0,INLAND +-121.0,37.64,52.0,530.0,177.0,325.0,158.0,1.1875,90600.0,INLAND +-120.97,37.65,16.0,3960.0,716.0,1776.0,724.0,3.9886,137500.0,INLAND +-120.96,37.64,41.0,1467.0,328.0,673.0,310.0,2.7917,90700.0,INLAND +-120.97,37.64,42.0,2359.0,504.0,1131.0,480.0,2.0833,95500.0,INLAND +-120.98,37.65,40.0,422.0,63.0,158.0,63.0,7.3841,172200.0,INLAND +-120.98,37.64,45.0,1913.0,335.0,839.0,333.0,3.1397,110700.0,INLAND +-120.98,37.64,40.0,1791.0,359.0,679.0,322.0,2.1458,130300.0,INLAND +-120.9,37.66,19.0,3377.0,669.0,2426.0,663.0,2.9783,82500.0,INLAND +-120.91,37.66,36.0,1320.0,255.0,720.0,232.0,2.6523,76300.0,INLAND +-120.9,37.64,26.0,1762.0,418.0,855.0,308.0,1.6767,81300.0,INLAND +-120.94,37.65,13.0,5075.0,978.0,3033.0,838.0,3.0577,119000.0,INLAND +-120.93,37.65,1.0,2254.0,328.0,402.0,112.0,4.25,189200.0,INLAND +-120.92,37.65,23.0,505.0,124.0,163.0,129.0,1.3696,275000.0,INLAND +-120.95,37.65,14.0,5200.0,1119.0,3221.0,1102.0,2.6964,107000.0,INLAND +-120.96,37.65,34.0,1700.0,325.0,972.0,326.0,2.4485,95500.0,INLAND +-120.95,37.64,32.0,3487.0,740.0,1957.0,685.0,2.7209,88300.0,INLAND +-120.94,37.63,43.0,244.0,52.0,176.0,60.0,1.425,69400.0,INLAND +-120.92,37.63,39.0,45.0,8.0,22.0,9.0,1.7679,450000.0,INLAND +-120.96,37.64,36.0,60.0,12.0,51.0,14.0,3.625,67500.0,INLAND +-120.98,37.64,39.0,2617.0,659.0,2052.0,642.0,1.6952,65000.0,INLAND +-120.97,37.63,39.0,2360.0,607.0,2047.0,605.0,1.7054,58800.0,INLAND +-121.0,37.63,31.0,215.0,62.0,192.0,66.0,1.75,73800.0,INLAND +-121.0,37.63,49.0,2051.0,500.0,1525.0,467.0,1.59,80900.0,INLAND +-121.01,37.63,41.0,2764.0,639.0,2122.0,600.0,1.9643,74900.0,INLAND +-121.01,37.62,35.0,568.0,150.0,622.0,145.0,1.8167,79500.0,INLAND +-121.01,37.62,35.0,2074.0,477.0,1687.0,431.0,2.0885,73700.0,INLAND +-120.98,37.62,26.0,3819.0,955.0,3010.0,932.0,1.9206,81300.0,INLAND +-120.99,37.63,21.0,319.0,120.0,276.0,85.0,2.4792,60000.0,INLAND +-121.0,37.62,28.0,1153.0,420.0,1043.0,357.0,1.0801,75000.0,INLAND +-120.99,37.62,37.0,2014.0,505.0,1787.0,515.0,1.5515,54100.0,INLAND +-121.01,37.61,5.0,3655.0,696.0,2316.0,647.0,3.4703,129300.0,INLAND +-121.0,37.61,36.0,2647.0,604.0,2045.0,550.0,2.273,62900.0,INLAND +-121.0,37.6,22.0,4412.0,925.0,3116.0,817.0,2.6899,82100.0,INLAND +-121.02,37.6,33.0,1009.0,238.0,1027.0,246.0,2.5993,68000.0,INLAND +-120.98,37.6,36.0,1437.0,,1073.0,320.0,2.1779,58400.0,INLAND +-120.99,37.61,39.0,512.0,132.0,443.0,127.0,1.2857,60000.0,INLAND +-120.98,37.59,2.0,5042.0,834.0,2784.0,787.0,4.6484,145900.0,INLAND +-120.96,37.59,11.0,4236.0,879.0,2410.0,850.0,2.3849,122000.0,INLAND +-120.95,37.59,29.0,1727.0,439.0,1063.0,386.0,1.8929,63600.0,INLAND +-120.94,37.61,13.0,3309.0,603.0,1796.0,555.0,3.8372,129300.0,INLAND +-120.95,37.61,17.0,4054.0,654.0,2034.0,667.0,4.6833,142200.0,INLAND +-120.96,37.61,23.0,3497.0,887.0,2467.0,816.0,1.9444,93400.0,INLAND +-120.97,37.61,16.0,1326.0,375.0,884.0,375.0,1.871,103900.0,INLAND +-120.95,37.6,35.0,1493.0,278.0,729.0,268.0,2.9821,97400.0,INLAND +-120.94,37.6,30.0,3257.0,574.0,1804.0,588.0,3.5331,102900.0,INLAND +-120.95,37.59,43.0,1561.0,354.0,862.0,332.0,1.8466,81500.0,INLAND +-120.94,37.59,16.0,3964.0,824.0,2622.0,766.0,2.3152,111300.0,INLAND +-120.94,37.58,19.0,1549.0,369.0,770.0,370.0,2.0493,99500.0,INLAND +-120.95,37.62,11.0,4981.0,814.0,1934.0,686.0,3.7041,174800.0,INLAND +-120.97,37.62,7.0,8489.0,1673.0,5807.0,1575.0,2.9451,127800.0,INLAND +-120.54,37.68,18.0,335.0,76.0,189.0,67.0,1.2273,87500.0,INLAND +-120.64,37.7,16.0,284.0,51.0,239.0,46.0,1.8958,137500.0,INLAND +-120.75,37.69,24.0,2282.0,423.0,1167.0,398.0,3.8214,116100.0,INLAND +-120.86,37.69,5.0,6660.0,1217.0,3012.0,1087.0,3.0809,143600.0,INLAND +-120.87,37.64,40.0,1010.0,155.0,488.0,157.0,3.8984,170500.0,INLAND +-120.82,37.64,20.0,3375.0,630.0,1505.0,598.0,2.69,201300.0,INLAND +-120.77,37.64,8.0,3294.0,667.0,2277.0,652.0,2.6417,96800.0,INLAND +-120.76,37.65,25.0,3214.0,682.0,2319.0,640.0,2.0385,84300.0,INLAND +-120.46,37.65,17.0,315.0,89.0,130.0,58.0,1.4464,79200.0,INLAND +-120.59,37.59,36.0,291.0,48.0,124.0,47.0,5.6945,154200.0,INLAND +-120.69,37.59,27.0,1170.0,227.0,660.0,222.0,2.3906,81800.0,INLAND +-120.76,37.61,30.0,816.0,159.0,531.0,147.0,3.2604,87900.0,INLAND +-120.8,37.61,30.0,918.0,154.0,469.0,139.0,3.9688,175000.0,INLAND +-120.76,37.58,35.0,1395.0,264.0,756.0,253.0,3.6181,178600.0,INLAND +-120.83,37.58,30.0,1527.0,256.0,757.0,240.0,3.6629,171400.0,INLAND +-120.85,37.57,27.0,819.0,157.0,451.0,150.0,3.4934,193800.0,INLAND +-120.88,37.57,22.0,1440.0,267.0,774.0,249.0,3.9821,204300.0,INLAND +-120.87,37.62,30.0,455.0,70.0,220.0,69.0,4.8958,142500.0,INLAND +-120.87,37.6,32.0,4579.0,914.0,2742.0,856.0,2.6619,86200.0,INLAND +-120.86,37.6,25.0,1178.0,206.0,709.0,214.0,4.5625,133600.0,INLAND +-120.89,37.59,33.0,1016.0,206.0,617.0,209.0,2.151,195800.0,INLAND +-120.92,37.6,12.0,4485.0,805.0,2445.0,832.0,3.7611,123100.0,INLAND +-120.92,37.59,26.0,1705.0,279.0,642.0,236.0,2.6591,180500.0,INLAND +-120.91,37.57,26.0,3396.0,705.0,2446.0,694.0,2.0521,65400.0,INLAND +-120.93,37.56,17.0,1812.0,361.0,672.0,334.0,1.55,166100.0,INLAND +-120.95,37.57,29.0,1179.0,249.0,672.0,243.0,3.1125,154800.0,INLAND +-120.98,37.57,27.0,925.0,176.0,449.0,168.0,2.6406,129700.0,INLAND +-121.02,37.58,36.0,1285.0,270.0,706.0,273.0,1.7169,121400.0,INLAND +-121.04,37.6,27.0,958.0,184.0,580.0,177.0,2.1875,82800.0,INLAND +-121.09,37.56,32.0,1717.0,325.0,1356.0,307.0,2.6705,91900.0,INLAND +-121.03,37.55,32.0,946.0,198.0,624.0,173.0,1.9728,97900.0,INLAND +-121.04,37.5,33.0,613.0,123.0,343.0,116.0,3.1875,129200.0,INLAND +-121.02,37.48,26.0,467.0,,244.0,83.0,4.1346,187500.0,INLAND +-121.12,37.48,5.0,4109.0,820.0,3062.0,713.0,3.2396,125200.0,INLAND +-121.14,37.47,38.0,2427.0,450.0,1272.0,474.0,2.8833,115200.0,INLAND +-121.14,37.48,6.0,1772.0,332.0,1011.0,331.0,3.7045,128100.0,INLAND +-121.13,37.47,37.0,1995.0,448.0,1559.0,443.0,2.1833,92700.0,INLAND +-121.11,37.47,12.0,2263.0,410.0,913.0,330.0,3.5795,145600.0,INLAND +-121.14,37.46,4.0,2919.0,503.0,1592.0,491.0,5.2452,161900.0,INLAND +-121.2,37.6,30.0,2110.0,406.0,1301.0,345.0,2.3173,86500.0,INLAND +-121.27,37.56,31.0,1223.0,330.0,1067.0,245.0,2.8558,100000.0,INLAND +-121.31,37.44,33.0,69.0,28.0,47.0,14.0,0.536,112500.0,INLAND +-121.21,37.5,34.0,294.0,49.0,147.0,47.0,3.0,162500.0,INLAND +-121.14,37.52,37.0,1358.0,231.0,586.0,214.0,3.1645,170800.0,INLAND +-121.06,37.45,33.0,1401.0,299.0,915.0,282.0,3.4464,162500.0,INLAND +-121.06,37.42,52.0,504.0,96.0,295.0,97.0,3.5,73500.0,INLAND +-121.11,37.43,42.0,412.0,75.0,227.0,75.0,2.5,74200.0,INLAND +-121.29,37.33,36.0,48.0,12.0,27.0,8.0,4.0,75000.0,INLAND +-121.09,37.33,40.0,524.0,112.0,329.0,96.0,1.7188,112500.0,INLAND +-121.01,37.37,41.0,1045.0,233.0,632.0,230.0,2.3583,95000.0,INLAND +-121.01,37.33,17.0,1926.0,410.0,1054.0,321.0,1.6214,71500.0,INLAND +-121.03,37.33,27.0,1333.0,230.0,730.0,229.0,3.06,106000.0,INLAND +-121.03,37.32,42.0,2905.0,561.0,1457.0,551.0,2.2566,82100.0,INLAND +-121.04,37.3,6.0,2657.0,486.0,1409.0,392.0,3.3824,115500.0,INLAND +-120.84,37.53,14.0,3643.0,706.0,2070.0,697.0,3.1523,141800.0,INLAND +-120.86,37.53,18.0,2829.0,732.0,1751.0,712.0,1.6445,156900.0,INLAND +-120.88,37.53,18.0,239.0,39.0,92.0,36.0,5.3168,175000.0,INLAND +-120.85,37.55,45.0,350.0,62.0,187.0,63.0,2.5938,275000.0,INLAND +-120.89,37.54,30.0,509.0,115.0,275.0,115.0,2.2679,250000.0,INLAND +-120.89,37.52,42.0,1200.0,221.0,647.0,192.0,2.5402,157500.0,INLAND +-120.96,37.54,29.0,1468.0,245.0,747.0,231.0,3.4643,125000.0,INLAND +-120.96,37.51,30.0,1288.0,237.0,720.0,233.0,2.3864,139100.0,INLAND +-120.96,37.48,32.0,1256.0,212.0,682.0,236.0,2.9844,135900.0,INLAND +-120.97,37.43,27.0,1380.0,,810.0,262.0,2.1875,137500.0,INLAND +-120.8,37.55,18.0,1802.0,335.0,1110.0,329.0,3.1641,96300.0,INLAND +-120.79,37.53,20.0,1417.0,263.0,853.0,263.0,3.3083,108300.0,INLAND +-120.8,37.53,29.0,1162.0,254.0,726.0,225.0,2.1932,90600.0,INLAND +-120.81,37.53,15.0,570.0,123.0,189.0,107.0,1.875,181300.0,INLAND +-120.82,37.54,20.0,707.0,114.0,282.0,86.0,6.1324,164800.0,INLAND +-120.8,37.52,13.0,2920.0,481.0,1602.0,490.0,3.9286,145800.0,INLAND +-120.72,37.54,17.0,729.0,134.0,431.0,121.0,4.2188,131300.0,INLAND +-120.79,37.49,44.0,1186.0,225.0,687.0,234.0,3.4167,160700.0,INLAND +-120.84,37.47,11.0,2285.0,499.0,1468.0,471.0,2.7857,110300.0,INLAND +-120.89,37.48,27.0,1118.0,195.0,647.0,209.0,2.9135,159400.0,INLAND +-120.89,37.45,29.0,1940.0,337.0,1070.0,332.0,3.6597,145600.0,INLAND +-120.88,37.52,2.0,1871.0,409.0,707.0,256.0,2.6103,133600.0,INLAND +-120.87,37.5,7.0,4966.0,985.0,2431.0,904.0,3.1042,122500.0,INLAND +-120.86,37.5,34.0,4272.0,996.0,2916.0,962.0,1.9829,82800.0,INLAND +-120.85,37.49,39.0,2840.0,733.0,2606.0,737.0,1.9429,76400.0,INLAND +-120.86,37.49,37.0,1084.0,271.0,893.0,236.0,1.6213,69500.0,INLAND +-120.86,37.49,22.0,2140.0,445.0,1441.0,409.0,2.4706,89400.0,INLAND +-120.85,37.49,42.0,264.0,72.0,310.0,70.0,1.4063,61500.0,INLAND +-120.84,37.48,10.0,2874.0,612.0,1960.0,596.0,2.7381,104600.0,INLAND +-120.86,37.52,9.0,9885.0,1871.0,5372.0,1843.0,3.4821,127100.0,INLAND +-120.85,37.51,5.0,2899.0,745.0,1593.0,633.0,2.2292,127500.0,INLAND +-120.85,37.51,15.0,1131.0,285.0,728.0,281.0,1.5531,93100.0,INLAND +-120.84,37.5,47.0,2310.0,484.0,1126.0,447.0,2.2083,97300.0,INLAND +-120.85,37.5,52.0,1724.0,352.0,922.0,348.0,1.7227,85700.0,INLAND +-120.84,37.49,25.0,2383.0,576.0,1234.0,583.0,1.4529,86100.0,INLAND +-120.82,37.49,25.0,1611.0,285.0,882.0,261.0,3.5547,122400.0,INLAND +-120.82,37.51,17.0,1664.0,253.0,736.0,254.0,4.4083,165800.0,INLAND +-120.83,37.51,34.0,3078.0,477.0,1226.0,487.0,4.601,150000.0,INLAND +-120.82,37.5,21.0,2974.0,495.0,1313.0,461.0,4.4886,135400.0,INLAND +-120.83,37.5,30.0,1340.0,244.0,631.0,231.0,3.375,118500.0,INLAND +-120.84,37.51,8.0,1191.0,242.0,688.0,260.0,2.7243,138400.0,INLAND +-120.84,37.51,14.0,6337.0,1593.0,3909.0,1480.0,2.0643,106500.0,INLAND +-120.83,37.52,6.0,1488.0,252.0,773.0,259.0,4.1859,150000.0,INLAND +-120.84,37.52,16.0,4527.0,887.0,2531.0,825.0,3.7065,124800.0,INLAND +-120.84,37.51,20.0,1901.0,313.0,1258.0,320.0,3.8958,126800.0,INLAND +-120.83,37.51,13.0,3795.0,604.0,1639.0,609.0,4.6635,198400.0,INLAND +-121.62,39.16,7.0,4480.0,776.0,2271.0,767.0,3.809,110700.0,INLAND +-121.63,39.16,7.0,1879.0,444.0,1065.0,410.0,2.4183,103800.0,INLAND +-121.63,39.15,27.0,336.0,60.0,195.0,68.0,5.3946,71800.0,INLAND +-121.62,39.16,16.0,2037.0,464.0,1267.0,451.0,2.4556,97100.0,INLAND +-121.63,39.15,16.0,1547.0,418.0,940.0,400.0,1.5613,72500.0,INLAND +-121.63,39.15,27.0,2991.0,637.0,1419.0,606.0,1.8849,73500.0,INLAND +-121.62,39.15,36.0,2321.0,455.0,1168.0,489.0,3.0962,74000.0,INLAND +-121.62,39.15,23.0,1984.0,528.0,1043.0,452.0,1.9375,65300.0,INLAND +-121.63,39.14,39.0,1874.0,411.0,822.0,377.0,2.5038,68300.0,INLAND +-121.62,39.14,41.0,2183.0,559.0,1202.0,506.0,1.6902,61500.0,INLAND +-121.61,39.14,44.0,2035.0,476.0,1030.0,453.0,1.4661,65200.0,INLAND +-121.62,39.13,41.0,1317.0,309.0,856.0,337.0,1.6719,64100.0,INLAND +-121.63,39.13,26.0,2355.0,531.0,1047.0,497.0,1.8208,79500.0,INLAND +-121.62,39.13,41.0,1147.0,243.0,583.0,239.0,2.2431,63400.0,INLAND +-121.61,39.13,21.0,1432.0,328.0,933.0,336.0,1.6823,83800.0,INLAND +-121.63,39.12,34.0,1991.0,348.0,804.0,344.0,3.4492,98800.0,INLAND +-121.62,39.12,35.0,2787.0,587.0,1431.0,601.0,2.5469,65900.0,INLAND +-121.61,39.13,33.0,2559.0,539.0,1583.0,504.0,1.4727,53000.0,INLAND +-121.6,39.12,21.0,1299.0,338.0,1494.0,311.0,1.3348,225000.0,INLAND +-121.62,39.12,26.0,1405.0,204.0,627.0,215.0,4.2188,94200.0,INLAND +-121.63,39.12,32.0,2574.0,425.0,1099.0,391.0,4.3864,117500.0,INLAND +-121.62,39.11,5.0,2320.0,502.0,1245.0,489.0,3.2465,97200.0,INLAND +-121.63,39.1,22.0,3585.0,548.0,1757.0,577.0,4.174,100100.0,INLAND +-121.62,39.11,11.0,3519.0,577.0,1459.0,549.0,4.2792,123800.0,INLAND +-121.62,39.09,21.0,2693.0,481.0,1337.0,435.0,3.8534,99700.0,INLAND +-121.68,39.13,17.0,1969.0,297.0,717.0,268.0,3.4698,179700.0,INLAND +-121.65,39.13,11.0,4833.0,944.0,2336.0,841.0,2.6842,89100.0,INLAND +-121.68,39.11,19.0,1366.0,220.0,596.0,203.0,4.0625,141700.0,INLAND +-121.64,39.12,13.0,6408.0,1087.0,3294.0,1106.0,4.2656,110700.0,INLAND +-121.64,39.11,18.0,3212.0,542.0,1817.0,508.0,3.3793,92900.0,INLAND +-121.66,39.09,27.0,2098.0,372.0,1090.0,333.0,4.45,96200.0,INLAND +-121.67,39.18,26.0,2121.0,375.0,1125.0,366.0,3.3958,94600.0,INLAND +-121.68,39.15,14.0,2774.0,451.0,1292.0,428.0,4.3833,115200.0,INLAND +-121.67,39.14,22.0,2264.0,390.0,1056.0,403.0,3.6111,112300.0,INLAND +-121.63,39.18,13.0,1907.0,347.0,821.0,367.0,2.0978,134000.0,INLAND +-121.66,39.15,22.0,2144.0,376.0,1200.0,370.0,3.4426,102400.0,INLAND +-121.65,39.16,16.0,5022.0,1103.0,2087.0,956.0,2.3963,114800.0,INLAND +-121.64,39.15,15.0,2659.0,396.0,1159.0,407.0,5.234,124900.0,INLAND +-121.71,39.25,37.0,1871.0,321.0,806.0,294.0,4.0,101400.0,INLAND +-121.68,39.29,29.0,1860.0,400.0,1137.0,365.0,1.5281,61600.0,INLAND +-121.64,39.28,25.0,2857.0,662.0,2076.0,685.0,1.8095,64100.0,INLAND +-121.64,39.22,37.0,1189.0,248.0,627.0,219.0,3.8611,100000.0,INLAND +-121.67,39.26,29.0,3041.0,683.0,2106.0,687.0,1.6315,58000.0,INLAND +-121.83,39.23,25.0,3819.0,702.0,1983.0,658.0,2.4464,72500.0,INLAND +-121.74,39.15,20.0,2302.0,412.0,1205.0,399.0,2.8,71200.0,INLAND +-121.83,39.1,42.0,1282.0,198.0,451.0,159.0,3.2917,97900.0,INLAND +-121.91,39.14,45.0,845.0,155.0,343.0,136.0,2.125,62000.0,INLAND +-121.76,38.94,48.0,540.0,110.0,234.0,74.0,3.6111,67500.0,INLAND +-121.67,38.85,46.0,645.0,131.0,410.0,122.0,1.7417,110400.0,INLAND +-121.69,38.87,38.0,412.0,93.0,304.0,95.0,2.6597,86000.0,INLAND +-121.62,38.96,36.0,1826.0,329.0,1068.0,318.0,1.9797,118800.0,INLAND +-121.7,39.07,26.0,2668.0,510.0,1437.0,505.0,3.3125,100000.0,INLAND +-121.47,38.95,34.0,2129.0,350.0,969.0,314.0,2.7039,106300.0,INLAND +-121.52,38.9,32.0,1650.0,313.0,802.0,284.0,2.9048,98200.0,INLAND +-121.58,38.81,25.0,778.0,135.0,340.0,155.0,1.7857,258300.0,INLAND +-121.51,38.79,29.0,1716.0,323.0,850.0,282.0,2.9324,137500.0,INLAND +-122.1,40.05,26.0,633.0,129.0,305.0,140.0,2.1827,72700.0,INLAND +-122.08,40.09,19.0,2611.0,503.0,1185.0,483.0,2.3657,94000.0,INLAND +-122.12,40.14,34.0,1950.0,407.0,1029.0,376.0,2.5197,82300.0,INLAND +-122.17,40.2,28.0,1782.0,334.0,873.0,311.0,3.3594,79100.0,INLAND +-121.8,40.34,26.0,4815.0,910.0,1341.0,539.0,2.881,79800.0,INLAND +-121.78,40.12,14.0,388.0,108.0,35.0,17.0,6.1359,106300.0,INLAND +-122.42,40.32,16.0,1978.0,375.0,961.0,333.0,2.6827,83900.0,INLAND +-122.34,40.32,12.0,3848.0,689.0,2008.0,683.0,2.6352,92200.0,INLAND +-122.23,40.32,10.0,2336.0,426.0,1003.0,368.0,3.0833,81300.0,INLAND +-122.38,40.09,16.0,2077.0,388.0,1155.0,389.0,3.1361,84800.0,INLAND +-122.57,39.9,15.0,3873.0,810.0,1697.0,627.0,2.4555,55600.0,INLAND +-122.72,40.17,16.0,396.0,78.0,188.0,72.0,1.3889,87500.0,INLAND +-122.2,40.26,15.0,2102.0,358.0,957.0,371.0,3.1908,137900.0,INLAND +-122.38,40.2,16.0,2722.0,511.0,1366.0,495.0,2.8447,87700.0,INLAND +-122.35,40.25,10.0,1621.0,318.0,866.0,283.0,3.5,104300.0,INLAND +-122.26,40.19,35.0,2467.0,469.0,1194.0,444.0,2.0425,63700.0,INLAND +-122.24,40.19,29.0,1912.0,336.0,859.0,325.0,3.7,70500.0,INLAND +-122.23,40.2,17.0,762.0,138.0,322.0,139.0,4.2917,128800.0,INLAND +-122.24,40.18,39.0,2191.0,493.0,1307.0,499.0,1.6483,60800.0,INLAND +-122.24,40.17,51.0,2378.0,584.0,1083.0,494.0,1.577,51900.0,INLAND +-122.25,40.17,47.0,1554.0,308.0,846.0,301.0,1.8077,54100.0,INLAND +-122.22,40.18,13.0,3719.0,803.0,1754.0,764.0,2.3517,88900.0,INLAND +-122.21,40.2,19.0,3404.0,731.0,1421.0,683.0,2.6149,84400.0,INLAND +-122.19,40.2,30.0,2750.0,476.0,1296.0,464.0,3.5305,73600.0,INLAND +-122.21,40.18,30.0,744.0,156.0,410.0,165.0,2.1898,63200.0,INLAND +-122.25,40.17,19.0,3182.0,630.0,1741.0,642.0,1.9727,64900.0,INLAND +-122.24,40.16,19.0,2500.0,509.0,1293.0,494.0,2.035,55100.0,INLAND +-122.23,40.17,21.0,1401.0,331.0,651.0,299.0,2.225,64700.0,INLAND +-122.23,40.15,14.0,2297.0,573.0,1637.0,551.0,1.787,51600.0,INLAND +-122.25,40.15,15.0,1677.0,346.0,858.0,327.0,2.4375,59200.0,INLAND +-122.17,40.11,24.0,1631.0,340.0,1042.0,333.0,1.7708,59000.0,INLAND +-122.19,40.07,21.0,1548.0,290.0,744.0,265.0,1.9773,55000.0,INLAND +-122.18,40.02,30.0,1952.0,397.0,961.0,333.0,2.25,68200.0,INLAND +-122.14,40.07,31.0,2053.0,465.0,1193.0,447.0,1.4923,44400.0,INLAND +-122.13,40.01,21.0,916.0,194.0,451.0,178.0,2.125,63300.0,INLAND +-122.1,40.03,25.0,2516.0,,1266.0,494.0,1.7566,58400.0,INLAND +-122.06,40.02,32.0,1435.0,277.0,690.0,254.0,2.3043,68400.0,INLAND +-122.0,39.94,27.0,852.0,176.0,464.0,148.0,1.7125,58200.0,INLAND +-122.11,39.82,27.0,1065.0,214.0,508.0,198.0,2.625,91700.0,INLAND +-122.12,39.91,16.0,4006.0,797.0,2028.0,752.0,2.3929,77200.0,INLAND +-122.17,39.92,16.0,1566.0,306.0,652.0,287.0,1.9038,60800.0,INLAND +-122.17,39.94,32.0,2352.0,477.0,1316.0,447.0,2.2292,57400.0,INLAND +-122.14,39.97,27.0,1079.0,222.0,625.0,197.0,3.1319,62700.0,INLAND +-122.23,39.95,21.0,2087.0,382.0,888.0,361.0,2.207,86400.0,INLAND +-122.2,39.93,9.0,1296.0,287.0,768.0,260.0,1.9191,54400.0,INLAND +-122.23,39.86,21.0,1730.0,350.0,982.0,322.0,1.8375,79800.0,INLAND +-122.19,39.92,20.0,2563.0,658.0,1363.0,611.0,1.023,54200.0,INLAND +-122.18,39.93,35.0,1387.0,272.0,610.0,237.0,2.1759,59500.0,INLAND +-122.19,39.91,39.0,2467.0,529.0,1433.0,502.0,1.8571,53500.0,INLAND +-122.68,41.15,32.0,817.0,206.0,224.0,89.0,3.631,90400.0,INLAND +-122.81,40.93,16.0,2050.0,471.0,588.0,195.0,2.7083,88900.0,INLAND +-122.96,40.77,29.0,1637.0,297.0,753.0,270.0,3.2891,93100.0,INLAND +-122.93,40.78,20.0,3758.0,798.0,1685.0,757.0,2.3667,91200.0,INLAND +-122.89,40.76,14.0,712.0,131.0,270.0,90.0,2.3958,102100.0,INLAND +-122.79,40.75,17.0,3851.0,818.0,1352.0,560.0,2.125,71700.0,INLAND +-122.86,40.56,12.0,1350.0,300.0,423.0,172.0,1.7393,81300.0,INLAND +-122.95,40.67,17.0,1498.0,331.0,574.0,242.0,2.0268,94200.0,INLAND +-122.95,40.71,26.0,2231.0,421.0,987.0,364.0,2.4792,88800.0,INLAND +-123.35,40.99,23.0,141.0,59.0,47.0,23.0,1.125,66000.0,INLAND +-123.53,40.88,20.0,2680.0,599.0,918.0,345.0,2.2115,75000.0,INLAND +-123.48,40.79,15.0,619.0,160.0,287.0,104.0,1.9107,79200.0,INLAND +-123.28,40.77,25.0,767.0,206.0,301.0,121.0,1.625,79200.0,INLAND +-123.13,40.85,18.0,1650.0,377.0,675.0,282.0,1.8933,84700.0,INLAND +-123.41,40.61,17.0,769.0,205.0,301.0,126.0,1.7875,55000.0,INLAND +-123.11,40.6,23.0,708.0,202.0,316.0,136.0,1.1602,65000.0,INLAND +-123.18,40.58,18.0,1451.0,278.0,695.0,254.0,1.7262,73700.0,INLAND +-123.22,40.54,27.0,1573.0,361.0,847.0,330.0,1.9034,49600.0,INLAND +-123.12,40.54,23.0,1091.0,217.0,539.0,201.0,1.8696,61500.0,INLAND +-123.21,40.51,16.0,241.0,84.0,152.0,61.0,1.375,48800.0,INLAND +-123.32,40.43,15.0,661.0,146.0,131.0,57.0,0.4999,56700.0,INLAND +-123.08,40.4,10.0,365.0,102.0,140.0,49.0,1.7969,37500.0,INLAND +-123.17,40.31,36.0,98.0,28.0,18.0,8.0,0.536,14999.0,INLAND +-123.22,40.16,27.0,1848.0,449.0,396.0,150.0,2.8472,41300.0,INLAND +-123.48,40.34,19.0,518.0,108.0,216.0,80.0,2.7083,64500.0,INLAND +-123.43,40.22,20.0,133.0,35.0,87.0,37.0,3.625,67500.0,INLAND +-123.41,40.07,17.0,449.0,151.0,141.0,53.0,0.8362,87500.0,INLAND +-118.96,36.66,18.0,1302.0,424.0,320.0,133.0,3.1964,80000.0,INLAND +-119.12,36.54,30.0,2747.0,515.0,1368.0,453.0,2.9828,85200.0,INLAND +-118.96,36.49,24.0,1268.0,269.0,636.0,183.0,1.742,118800.0,INLAND +-118.65,36.57,20.0,1431.0,416.0,570.0,225.0,1.4821,143300.0,INLAND +-118.86,36.41,20.0,2749.0,575.0,1195.0,491.0,3.0391,139700.0,INLAND +-118.94,36.32,10.0,2271.0,398.0,986.0,358.0,4.0703,147100.0,INLAND +-119.26,36.61,33.0,560.0,90.0,310.0,113.0,2.5417,118800.0,INLAND +-119.25,36.56,35.0,1675.0,373.0,1131.0,316.0,1.6722,59100.0,INLAND +-119.28,36.54,33.0,1470.0,330.0,1222.0,301.0,1.8163,57400.0,INLAND +-119.29,36.54,18.0,2581.0,628.0,2732.0,592.0,1.8429,58300.0,INLAND +-119.29,36.55,21.0,2467.0,520.0,1721.0,515.0,2.5521,65600.0,INLAND +-119.3,36.57,32.0,728.0,,461.0,149.0,3.0156,109100.0,INLAND +-119.44,36.48,27.0,1546.0,415.0,1704.0,395.0,1.1728,41700.0,INLAND +-119.37,36.47,26.0,337.0,69.0,277.0,73.0,2.3438,100000.0,INLAND +-119.45,36.48,38.0,402.0,86.0,311.0,87.0,3.1719,106300.0,INLAND +-119.48,36.44,22.0,1389.0,290.0,1185.0,271.0,2.0857,49200.0,INLAND +-119.35,36.52,39.0,3027.0,608.0,2199.0,592.0,2.6445,62000.0,INLAND +-119.48,36.5,32.0,3451.0,625.0,1968.0,574.0,2.9554,110300.0,INLAND +-119.43,36.55,27.0,1621.0,323.0,882.0,324.0,2.75,93500.0,INLAND +-119.48,36.54,28.0,2112.0,363.0,1011.0,335.0,4.2222,108900.0,INLAND +-119.4,36.55,19.0,3000.0,628.0,2202.0,590.0,2.5141,67400.0,INLAND +-119.39,36.55,30.0,1669.0,314.0,837.0,325.0,3.3869,80400.0,INLAND +-119.38,36.56,14.0,3965.0,804.0,1945.0,733.0,2.6906,95300.0,INLAND +-119.38,36.55,31.0,2342.0,439.0,1411.0,465.0,3.017,72000.0,INLAND +-119.38,36.56,25.0,1180.0,222.0,611.0,212.0,2.0729,84700.0,INLAND +-119.38,36.54,33.0,2465.0,536.0,2030.0,522.0,1.5223,51800.0,INLAND +-119.38,36.53,38.0,1281.0,,1423.0,293.0,1.9602,51400.0,INLAND +-119.39,36.54,34.0,1590.0,422.0,1272.0,407.0,1.8068,59000.0,INLAND +-119.39,36.54,30.0,1408.0,326.0,1184.0,324.0,1.7165,59100.0,INLAND +-119.4,36.53,28.0,2201.0,429.0,1524.0,412.0,2.75,65000.0,INLAND +-119.28,36.52,19.0,1402.0,324.0,1327.0,316.0,2.25,53200.0,INLAND +-119.29,36.53,33.0,1509.0,352.0,1734.0,336.0,1.625,50300.0,INLAND +-119.29,36.52,39.0,858.0,228.0,1222.0,224.0,1.5714,43000.0,INLAND +-119.26,36.5,35.0,1689.0,371.0,1475.0,329.0,2.5719,74300.0,INLAND +-119.1,36.43,24.0,1039.0,190.0,643.0,193.0,2.6711,71300.0,INLAND +-119.1,36.42,26.0,1775.0,416.0,1217.0,383.0,1.8801,57600.0,INLAND +-119.09,36.42,15.0,1517.0,361.0,1275.0,343.0,1.5875,55800.0,INLAND +-119.09,36.42,17.0,877.0,219.0,966.0,218.0,2.0,52500.0,INLAND +-119.1,36.4,31.0,1533.0,361.0,1518.0,386.0,1.5608,51700.0,INLAND +-119.1,36.4,23.0,1885.0,363.0,1056.0,338.0,3.2159,92800.0,INLAND +-119.23,36.45,36.0,1508.0,323.0,1283.0,312.0,2.1205,60000.0,INLAND +-119.18,36.4,39.0,1730.0,310.0,899.0,309.0,2.6648,129200.0,INLAND +-119.27,36.39,17.0,2076.0,350.0,998.0,340.0,4.3281,145700.0,INLAND +-119.23,36.39,39.0,1660.0,349.0,1061.0,306.0,1.4812,53500.0,INLAND +-119.21,36.39,31.0,1465.0,303.0,1013.0,297.0,2.0363,53500.0,INLAND +-119.21,36.38,18.0,2158.0,413.0,1461.0,395.0,2.0216,58000.0,INLAND +-119.35,36.42,18.0,1115.0,193.0,1742.0,176.0,2.7969,123800.0,INLAND +-119.31,36.39,32.0,2293.0,466.0,1538.0,468.0,1.9342,68600.0,INLAND +-119.45,36.35,22.0,1824.0,333.0,1076.0,282.0,2.3365,69600.0,INLAND +-119.41,36.35,20.0,1743.0,340.0,1390.0,336.0,2.2222,52900.0,INLAND +-119.42,36.35,20.0,1469.0,303.0,1031.0,259.0,1.6645,48000.0,INLAND +-119.29,36.35,15.0,1740.0,319.0,1332.0,308.0,2.5743,60200.0,INLAND +-119.29,36.34,10.0,1832.0,455.0,1664.0,429.0,2.0227,53300.0,INLAND +-119.3,36.35,24.0,1855.0,416.0,1520.0,410.0,2.3304,64900.0,INLAND +-119.3,36.34,27.0,1515.0,358.0,1178.0,309.0,1.4432,48100.0,INLAND +-119.31,36.34,14.0,2985.0,607.0,2250.0,607.0,2.1602,65200.0,INLAND +-119.32,36.36,18.0,2060.0,383.0,1348.0,397.0,3.4312,68400.0,INLAND +-119.37,36.35,20.0,1132.0,177.0,518.0,178.0,5.3767,231300.0,INLAND +-119.32,36.33,20.0,1896.0,266.0,674.0,277.0,9.0376,239100.0,INLAND +-119.32,36.33,18.0,2603.0,478.0,1158.0,423.0,4.5938,150500.0,INLAND +-119.34,36.34,5.0,4505.0,834.0,1917.0,775.0,4.0144,126600.0,INLAND +-119.34,36.33,17.0,2250.0,430.0,1218.0,468.0,4.1812,93700.0,INLAND +-119.35,36.33,14.0,1195.0,220.0,568.0,229.0,3.1486,105600.0,INLAND +-119.36,36.33,11.0,3221.0,617.0,1351.0,565.0,2.9844,132000.0,INLAND +-119.29,36.34,28.0,1440.0,431.0,2178.0,440.0,1.2634,50600.0,INLAND +-119.29,36.34,35.0,1235.0,369.0,1246.0,341.0,1.474,71000.0,INLAND +-119.3,36.34,45.0,3723.0,831.0,2256.0,770.0,1.8299,63100.0,INLAND +-119.31,36.34,32.0,1893.0,453.0,1744.0,425.0,1.4729,54100.0,INLAND +-119.29,36.33,19.0,792.0,232.0,641.0,222.0,0.7445,112500.0,INLAND +-119.31,36.33,46.0,1636.0,338.0,772.0,332.0,2.425,84900.0,INLAND +-119.25,36.36,16.0,3245.0,469.0,1471.0,450.0,5.8673,154800.0,INLAND +-119.27,36.34,7.0,3433.0,626.0,1793.0,626.0,3.5296,83700.0,INLAND +-119.28,36.35,7.0,3598.0,701.0,2080.0,678.0,3.1111,72400.0,INLAND +-119.28,36.33,10.0,1051.0,297.0,927.0,274.0,0.78,55500.0,INLAND +-119.27,36.34,26.0,2057.0,472.0,1453.0,439.0,2.4113,58600.0,INLAND +-119.24,36.33,9.0,3289.0,621.0,1866.0,631.0,3.1599,95000.0,INLAND +-119.19,36.34,33.0,2199.0,403.0,1245.0,394.0,2.73,96900.0,INLAND +-119.09,36.35,21.0,3146.0,595.0,1580.0,513.0,2.7857,92700.0,INLAND +-119.11,36.29,18.0,1666.0,294.0,859.0,301.0,2.6065,93800.0,INLAND +-119.13,36.3,33.0,3379.0,612.0,1565.0,618.0,2.7321,76500.0,INLAND +-119.12,36.29,29.0,1638.0,323.0,942.0,322.0,2.1731,66200.0,INLAND +-119.16,36.28,18.0,2377.0,414.0,1359.0,424.0,4.4,79300.0,INLAND +-119.16,36.31,7.0,2946.0,664.0,1608.0,622.0,1.6829,80200.0,INLAND +-119.15,36.29,18.0,1435.0,,657.0,254.0,2.4281,72500.0,INLAND +-119.14,36.29,32.0,2084.0,482.0,1410.0,420.0,1.5321,48300.0,INLAND +-119.14,36.29,36.0,788.0,181.0,405.0,180.0,1.47,61900.0,INLAND +-119.2,36.3,19.0,1427.0,311.0,1026.0,293.0,2.625,57000.0,INLAND +-119.2,36.3,32.0,1355.0,363.0,1427.0,384.0,1.3444,45600.0,INLAND +-119.21,36.3,23.0,951.0,235.0,806.0,222.0,1.7734,41400.0,INLAND +-119.21,36.3,18.0,1433.0,265.0,1092.0,276.0,1.9135,49400.0,INLAND +-119.22,36.31,17.0,2079.0,459.0,2022.0,462.0,1.5464,54100.0,INLAND +-119.25,36.27,23.0,1494.0,275.0,678.0,235.0,2.6875,69100.0,INLAND +-119.2,36.28,22.0,2295.0,508.0,1654.0,478.0,1.684,65900.0,INLAND +-119.29,36.32,27.0,1513.0,374.0,839.0,350.0,1.2012,64600.0,INLAND +-119.29,36.32,35.0,1898.0,481.0,1123.0,433.0,1.1419,62900.0,INLAND +-119.28,36.32,29.0,2274.0,514.0,1234.0,521.0,1.9138,66900.0,INLAND +-119.29,36.32,33.0,2107.0,451.0,1364.0,442.0,2.2024,67200.0,INLAND +-119.28,36.32,16.0,2812.0,514.0,1620.0,523.0,3.7404,89200.0,INLAND +-119.27,36.32,6.0,2881.0,518.0,1432.0,504.0,4.0806,110200.0,INLAND +-119.27,36.32,9.0,3631.0,635.0,1881.0,628.0,4.7723,113100.0,INLAND +-119.25,36.32,32.0,1821.0,345.0,812.0,299.0,2.75,72200.0,INLAND +-119.26,36.3,18.0,3578.0,720.0,1540.0,640.0,2.425,84600.0,INLAND +-119.3,36.33,44.0,2060.0,414.0,819.0,355.0,2.8795,77000.0,INLAND +-119.3,36.32,23.0,3521.0,615.0,1712.0,636.0,3.3875,92500.0,INLAND +-119.31,36.32,44.0,2032.0,308.0,791.0,336.0,4.0298,109000.0,INLAND +-119.31,36.32,23.0,2945.0,592.0,1419.0,532.0,2.5733,88800.0,INLAND +-119.29,36.31,14.0,2382.0,377.0,1278.0,386.0,5.1896,101900.0,INLAND +-119.29,36.31,34.0,1439.0,253.0,607.0,223.0,3.0972,82800.0,INLAND +-119.3,36.31,16.0,2234.0,357.0,1150.0,361.0,4.2778,97300.0,INLAND +-119.31,36.31,18.0,3860.0,760.0,1643.0,664.0,2.0714,92600.0,INLAND +-119.31,36.3,20.0,1256.0,209.0,566.0,195.0,4.0221,86300.0,INLAND +-119.3,36.3,14.0,3023.0,469.0,1523.0,492.0,5.3602,118600.0,INLAND +-119.29,36.3,20.0,1157.0,179.0,572.0,191.0,5.3495,177300.0,INLAND +-119.33,36.32,16.0,3331.0,839.0,1955.0,763.0,1.6148,86600.0,INLAND +-119.34,36.32,14.0,1204.0,227.0,633.0,247.0,3.925,83800.0,INLAND +-119.35,36.32,10.0,3817.0,719.0,1686.0,714.0,3.8235,94600.0,INLAND +-119.34,36.32,6.0,3266.0,604.0,1769.0,580.0,3.1574,89200.0,INLAND +-119.33,36.32,20.0,2025.0,328.0,1039.0,346.0,3.5313,82800.0,INLAND +-119.32,36.32,35.0,2316.0,387.0,849.0,378.0,4.3816,88600.0,INLAND +-119.33,36.32,23.0,3137.0,628.0,1446.0,548.0,2.5,85500.0,INLAND +-119.33,36.32,19.0,2778.0,431.0,1092.0,451.0,5.2561,121300.0,INLAND +-119.32,36.32,29.0,2409.0,436.0,1142.0,440.0,3.6895,87700.0,INLAND +-119.32,36.31,21.0,2309.0,424.0,1047.0,453.0,2.9886,87500.0,INLAND +-119.33,36.31,17.0,2401.0,409.0,1100.0,409.0,4.0577,107300.0,INLAND +-119.33,36.31,15.0,1472.0,228.0,892.0,257.0,5.3909,113000.0,INLAND +-119.33,36.3,11.0,3045.0,,1563.0,516.0,5.4337,133800.0,INLAND +-119.32,36.3,15.0,2864.0,571.0,1480.0,475.0,2.9698,93400.0,INLAND +-119.34,36.31,14.0,1635.0,422.0,870.0,399.0,2.7,88900.0,INLAND +-119.34,36.3,13.0,2394.0,458.0,1177.0,389.0,2.6875,74400.0,INLAND +-119.33,36.3,12.0,2172.0,352.0,1013.0,354.0,4.9464,115600.0,INLAND +-119.38,36.3,14.0,1932.0,330.0,997.0,291.0,3.6875,93200.0,INLAND +-119.33,36.28,16.0,2624.0,527.0,1077.0,520.0,2.125,104200.0,INLAND +-119.32,36.3,14.0,1680.0,343.0,931.0,350.0,2.7336,89200.0,INLAND +-119.29,36.28,23.0,1895.0,340.0,749.0,313.0,2.2333,120100.0,INLAND +-119.46,36.25,32.0,1702.0,348.0,1016.0,350.0,2.5,73600.0,INLAND +-119.4,36.25,25.0,1696.0,279.0,909.0,291.0,2.3,132800.0,INLAND +-119.36,36.22,10.0,2445.0,526.0,1262.0,476.0,1.9355,68300.0,INLAND +-119.37,36.22,19.0,1673.0,318.0,1298.0,343.0,2.706,64800.0,INLAND +-119.36,36.21,18.0,1082.0,202.0,793.0,213.0,2.4032,60000.0,INLAND +-119.35,36.22,32.0,1290.0,304.0,852.0,309.0,1.4429,54600.0,INLAND +-119.35,36.21,26.0,2481.0,586.0,1445.0,498.0,1.6378,60300.0,INLAND +-119.36,36.21,25.0,1170.0,259.0,804.0,257.0,1.3889,50200.0,INLAND +-119.37,36.21,35.0,2228.0,476.0,1567.0,449.0,1.4455,54100.0,INLAND +-119.34,36.23,12.0,4965.0,872.0,2191.0,804.0,3.5611,90200.0,INLAND +-119.35,36.22,29.0,2051.0,351.0,915.0,343.0,3.1944,106800.0,INLAND +-119.34,36.22,38.0,2708.0,460.0,1260.0,455.0,3.0905,78200.0,INLAND +-119.33,36.22,29.0,1735.0,323.0,805.0,293.0,3.5039,89900.0,INLAND +-119.33,36.21,38.0,3115.0,622.0,1238.0,606.0,2.6083,67000.0,INLAND +-119.34,36.21,30.0,749.0,214.0,537.0,199.0,0.8229,68400.0,INLAND +-119.33,36.22,9.0,3748.0,644.0,1955.0,620.0,4.2011,108100.0,INLAND +-119.32,36.22,5.0,2319.0,438.0,1283.0,423.0,3.6343,95400.0,INLAND +-119.32,36.21,29.0,1220.0,232.0,619.0,246.0,3.3125,78300.0,INLAND +-119.32,36.25,21.0,1231.0,,609.0,206.0,2.8365,90000.0,INLAND +-119.25,36.23,24.0,2015.0,355.0,1031.0,351.0,3.4306,139200.0,INLAND +-119.27,36.18,23.0,3180.0,547.0,1829.0,498.0,2.6098,66000.0,INLAND +-119.29,36.12,24.0,1248.0,226.0,641.0,200.0,2.4722,129200.0,INLAND +-119.14,36.23,22.0,2935.0,523.0,1927.0,530.0,2.5875,70400.0,INLAND +-119.12,36.19,21.0,2645.0,464.0,1245.0,407.0,2.9145,114200.0,INLAND +-119.08,36.22,28.0,1606.0,320.0,1158.0,317.0,3.0324,55600.0,INLAND +-119.08,36.21,20.0,1911.0,389.0,1241.0,348.0,2.5156,59300.0,INLAND +-119.09,36.22,34.0,1715.0,290.0,780.0,297.0,3.4306,74300.0,INLAND +-119.09,36.21,43.0,1335.0,280.0,943.0,288.0,1.9861,47700.0,INLAND +-119.09,36.21,38.0,1901.0,453.0,1613.0,400.0,1.8828,44600.0,INLAND +-119.1,36.21,38.0,727.0,173.0,559.0,176.0,2.4653,49500.0,INLAND +-119.11,36.21,10.0,1972.0,455.0,1469.0,442.0,1.5407,58400.0,INLAND +-118.74,36.23,22.0,1033.0,232.0,442.0,136.0,2.6447,137500.0,INLAND +-118.93,36.19,30.0,2685.0,546.0,951.0,523.0,2.6184,113900.0,INLAND +-118.82,36.13,43.0,1281.0,287.0,534.0,231.0,2.8906,65700.0,INLAND +-118.54,36.12,11.0,4103.0,882.0,356.0,171.0,2.1029,99100.0,INLAND +-118.37,36.19,10.0,443.0,111.0,48.0,21.0,3.125,71300.0,INLAND +-118.7,35.82,20.0,4642.0,1300.0,658.0,247.0,2.3937,82100.0,INLAND +-118.86,35.9,38.0,298.0,55.0,161.0,47.0,4.125,71300.0,INLAND +-118.73,36.01,14.0,3263.0,651.0,1910.0,594.0,2.8603,128900.0,INLAND +-119.08,36.2,30.0,1677.0,358.0,1159.0,365.0,2.4554,61200.0,INLAND +-119.1,36.19,17.0,1564.0,396.0,713.0,362.0,1.6186,77100.0,INLAND +-119.34,36.21,22.0,3065.0,726.0,2165.0,738.0,1.4792,54400.0,INLAND +-119.34,36.2,12.0,1632.0,378.0,1303.0,315.0,2.0333,54400.0,INLAND +-119.33,36.19,27.0,418.0,163.0,332.0,141.0,1.0714,63800.0,INLAND +-119.31,36.2,23.0,1837.0,332.0,1064.0,335.0,3.1453,74500.0,INLAND +-119.32,36.21,25.0,2360.0,460.0,1424.0,436.0,2.3152,63100.0,INLAND +-119.32,36.2,25.0,1427.0,246.0,772.0,221.0,2.2262,64500.0,INLAND +-119.32,36.2,15.0,1562.0,275.0,961.0,287.0,3.4231,83300.0,INLAND +-119.32,36.19,11.0,1281.0,291.0,861.0,313.0,1.0962,72300.0,INLAND +-119.32,36.19,11.0,3136.0,620.0,2013.0,583.0,3.335,69700.0,INLAND +-119.35,36.2,31.0,1783.0,382.0,1266.0,358.0,2.2264,50800.0,INLAND +-119.35,36.2,29.0,1938.0,404.0,1487.0,414.0,1.7462,51100.0,INLAND +-119.36,36.2,33.0,1955.0,398.0,1412.0,397.0,2.25,51500.0,INLAND +-119.37,36.19,24.0,1306.0,266.0,889.0,276.0,2.4922,66100.0,INLAND +-119.35,36.19,6.0,958.0,226.0,734.0,230.0,1.0349,67800.0,INLAND +-119.45,36.16,27.0,2119.0,373.0,1268.0,345.0,2.8152,106900.0,INLAND +-119.35,36.16,21.0,2751.0,602.0,1496.0,489.0,2.3882,49200.0,INLAND +-119.45,36.09,18.0,408.0,82.0,253.0,75.0,2.0313,112500.0,INLAND +-119.31,36.06,20.0,2236.0,434.0,1405.0,412.0,1.8827,48700.0,INLAND +-119.4,36.04,39.0,915.0,199.0,580.0,175.0,1.8894,112500.0,INLAND +-119.27,36.05,29.0,1016.0,174.0,481.0,140.0,2.2917,112500.0,INLAND +-119.21,36.1,30.0,1471.0,373.0,1418.0,357.0,1.7432,42500.0,INLAND +-119.19,36.06,29.0,1815.0,376.0,1421.0,339.0,1.9091,71300.0,INLAND +-119.19,36.14,41.0,759.0,140.0,408.0,129.0,3.9,85900.0,INLAND +-119.13,36.13,28.0,1673.0,385.0,1434.0,371.0,2.0586,40900.0,INLAND +-119.08,36.13,21.0,2271.0,376.0,1145.0,372.0,3.1528,113700.0,INLAND +-119.03,36.13,24.0,2259.0,408.0,1169.0,395.0,1.7106,95500.0,INLAND +-119.06,36.15,20.0,1282.0,273.0,852.0,247.0,1.6354,49000.0,INLAND +-119.06,36.15,25.0,2402.0,478.0,1527.0,461.0,2.3194,52900.0,INLAND +-119.14,36.06,32.0,1838.0,441.0,1628.0,425.0,1.6452,41500.0,INLAND +-119.12,36.05,27.0,1575.0,321.0,1063.0,317.0,2.1477,53900.0,INLAND +-119.08,36.02,26.0,1748.0,346.0,891.0,303.0,1.9439,62100.0,INLAND +-119.01,36.02,17.0,3915.0,742.0,1768.0,688.0,2.375,79800.0,INLAND +-118.92,36.04,28.0,1148.0,233.0,521.0,212.0,2.9208,98500.0,INLAND +-119.08,36.09,25.0,1880.0,339.0,1003.0,315.0,2.7298,103400.0,INLAND +-119.06,36.1,21.0,1344.0,249.0,868.0,221.0,2.5893,63600.0,INLAND +-119.06,36.09,11.0,2572.0,454.0,1402.0,415.0,3.6786,72900.0,INLAND +-119.04,36.09,15.0,2288.0,401.0,1238.0,429.0,3.0278,77400.0,INLAND +-119.05,36.09,9.0,3297.0,568.0,1749.0,568.0,4.0217,99200.0,INLAND +-119.04,36.07,17.0,2623.0,659.0,1912.0,618.0,1.5893,52000.0,INLAND +-119.06,36.08,19.0,2554.0,443.0,1301.0,419.0,4.1856,72100.0,INLAND +-119.07,36.08,5.0,2693.0,508.0,1785.0,491.0,3.0,71000.0,INLAND +-119.07,36.07,11.0,2265.0,382.0,1285.0,387.0,3.2042,76200.0,INLAND +-119.06,36.07,20.0,2683.0,553.0,1497.0,548.0,1.7031,64600.0,INLAND +-119.05,36.07,21.0,2472.0,523.0,1238.0,504.0,1.7756,62900.0,INLAND +-119.05,36.06,23.0,2344.0,407.0,1184.0,406.0,3.1625,70600.0,INLAND +-119.02,36.09,15.0,2234.0,415.0,1254.0,420.0,3.0234,88600.0,INLAND +-119.01,36.08,31.0,1620.0,366.0,1154.0,348.0,1.8857,55500.0,INLAND +-119.03,36.08,19.0,2736.0,549.0,1432.0,503.0,2.6944,67700.0,INLAND +-119.03,36.08,19.0,2471.0,431.0,1040.0,426.0,3.25,80600.0,INLAND +-119.04,36.07,26.0,2185.0,435.0,1108.0,419.0,2.2277,78000.0,INLAND +-119.03,36.07,26.0,3210.0,646.0,1908.0,642.0,2.4167,77600.0,INLAND +-119.02,36.07,29.0,2610.0,597.0,1659.0,571.0,1.5911,60800.0,INLAND +-119.02,36.07,39.0,1173.0,269.0,702.0,232.0,1.6146,53100.0,INLAND +-119.01,36.07,44.0,2450.0,575.0,1330.0,508.0,1.6103,50900.0,INLAND +-118.93,36.1,19.0,2988.0,681.0,1654.0,576.0,2.3792,90000.0,INLAND +-118.98,36.06,33.0,2043.0,443.0,1497.0,417.0,2.343,47400.0,INLAND +-119.0,36.05,24.0,3208.0,691.0,1986.0,662.0,1.5506,52300.0,INLAND +-118.97,36.06,26.0,1289.0,262.0,1100.0,244.0,1.975,51400.0,INLAND +-118.99,36.07,21.0,983.0,165.0,672.0,169.0,2.975,63900.0,INLAND +-118.99,36.06,19.0,2153.0,458.0,1317.0,386.0,1.7564,42600.0,INLAND +-119.0,36.06,41.0,937.0,158.0,396.0,142.0,4.0833,81300.0,INLAND +-119.0,36.07,20.0,1042.0,183.0,509.0,175.0,2.9815,73000.0,INLAND +-119.03,36.06,36.0,1925.0,443.0,1405.0,422.0,2.162,51900.0,INLAND +-119.02,36.06,41.0,2279.0,538.0,1908.0,511.0,1.3952,43100.0,INLAND +-119.01,36.06,25.0,1505.0,,1392.0,359.0,1.6812,47700.0,INLAND +-119.01,36.05,27.0,1127.0,294.0,839.0,276.0,1.3807,53100.0,INLAND +-119.02,36.05,22.0,2078.0,431.0,1336.0,456.0,2.2202,65200.0,INLAND +-119.42,35.97,21.0,554.0,121.0,426.0,122.0,2.3516,47500.0,INLAND +-119.31,35.99,26.0,1460.0,316.0,880.0,286.0,1.3676,47800.0,INLAND +-119.28,35.99,20.0,2911.0,597.0,1746.0,588.0,1.7372,51000.0,INLAND +-119.19,35.96,25.0,2014.0,402.0,1160.0,362.0,1.881,52500.0,INLAND +-119.46,35.86,22.0,1750.0,374.0,1113.0,338.0,1.505,42700.0,INLAND +-119.3,35.87,20.0,1934.0,377.0,1341.0,336.0,2.1434,62600.0,INLAND +-119.12,35.85,37.0,736.0,166.0,564.0,138.0,2.4167,58300.0,INLAND +-119.1,35.79,19.0,1809.0,477.0,2051.0,416.0,1.8144,49800.0,INLAND +-119.27,35.89,18.0,1855.0,424.0,1839.0,392.0,1.7572,53300.0,INLAND +-119.27,35.88,32.0,1393.0,343.0,1282.0,336.0,1.5069,43700.0,INLAND +-119.27,35.87,12.0,972.0,269.0,1134.0,286.0,1.63,49500.0,INLAND +-119.26,35.87,24.0,1590.0,390.0,1686.0,372.0,1.6469,47600.0,INLAND +-119.06,35.94,18.0,3501.0,721.0,2009.0,660.0,2.6576,65700.0,INLAND +-119.04,35.96,18.0,1187.0,308.0,1343.0,277.0,1.875,51700.0,INLAND +-119.04,35.95,25.0,1009.0,246.0,994.0,222.0,1.8462,55800.0,INLAND +-118.96,35.87,17.0,1668.0,307.0,888.0,277.0,3.7794,96200.0,INLAND +-120.4,38.0,17.0,2098.0,370.0,912.0,354.0,2.6544,112600.0,INLAND +-120.39,38.0,33.0,2177.0,404.0,891.0,383.0,3.212,105200.0,INLAND +-120.4,37.98,19.0,2010.0,433.0,910.0,390.0,2.6696,121200.0,INLAND +-120.39,37.98,52.0,1056.0,274.0,584.0,255.0,2.1513,86700.0,INLAND +-120.37,38.01,30.0,473.0,,242.0,93.0,2.5417,123200.0,INLAND +-120.35,37.99,3.0,1167.0,306.0,422.0,186.0,2.4191,217500.0,INLAND +-120.38,37.99,36.0,2864.0,603.0,1155.0,565.0,2.3571,113400.0,INLAND +-120.37,37.98,29.0,2508.0,591.0,1112.0,550.0,1.6021,91400.0,INLAND +-120.38,37.97,47.0,1060.0,219.0,496.0,205.0,2.5781,104800.0,INLAND +-120.26,38.13,17.0,301.0,94.0,122.0,47.0,4.0583,87500.0,INLAND +-120.28,38.07,13.0,1996.0,410.0,618.0,218.0,2.9083,104600.0,INLAND +-120.4,38.06,12.0,1430.0,310.0,517.0,240.0,2.6544,128100.0,INLAND +-120.35,38.04,16.0,1499.0,326.0,733.0,286.0,2.5729,118800.0,INLAND +-120.39,38.03,20.0,1551.0,309.0,647.0,228.0,2.6094,139100.0,INLAND +-120.41,38.03,14.0,2061.0,465.0,859.0,462.0,2.1289,115300.0,INLAND +-120.43,38.02,15.0,1613.0,299.0,655.0,251.0,3.6875,186000.0,INLAND +-120.31,38.02,11.0,2366.0,398.0,1046.0,387.0,3.8203,139700.0,INLAND +-120.3,38.04,6.0,1281.0,245.0,422.0,160.0,3.2875,111300.0,INLAND +-120.28,38.03,13.0,2095.0,391.0,860.0,331.0,3.6838,145700.0,INLAND +-120.27,38.02,13.0,3839.0,715.0,1486.0,532.0,3.1875,99800.0,INLAND +-120.29,38.01,12.0,3014.0,560.0,1424.0,485.0,3.0729,105100.0,INLAND +-120.3,37.99,23.0,1908.0,383.0,984.0,374.0,2.517,153500.0,INLAND +-120.33,38.0,14.0,1944.0,330.0,822.0,314.0,3.5,170700.0,INLAND +-120.25,38.04,22.0,4173.0,763.0,1086.0,444.0,2.5562,136200.0,INLAND +-120.25,38.03,21.0,4924.0,966.0,1175.0,454.0,2.9457,116500.0,INLAND +-120.22,38.05,14.0,3803.0,689.0,1129.0,477.0,2.7188,137000.0,INLAND +-120.19,38.07,43.0,102.0,19.0,44.0,13.0,0.4999,162500.0,INLAND +-120.19,38.03,17.0,8651.0,1579.0,2071.0,757.0,3.1076,115800.0,INLAND +-120.12,38.12,37.0,3355.0,666.0,338.0,136.0,2.0625,88900.0,INLAND +-120.03,38.19,26.0,7005.0,1358.0,416.0,189.0,2.125,132500.0,INLAND +-120.26,37.99,12.0,2726.0,517.0,1351.0,474.0,3.5,107100.0,INLAND +-120.24,38.01,11.0,1214.0,228.0,633.0,199.0,3.125,148600.0,INLAND +-120.23,37.98,14.0,1954.0,368.0,917.0,316.0,3.1523,93300.0,INLAND +-120.28,37.9,17.0,1047.0,212.0,530.0,196.0,2.1538,153300.0,INLAND +-120.24,37.96,34.0,1747.0,395.0,935.0,362.0,1.625,79400.0,INLAND +-120.23,37.96,52.0,1230.0,262.0,609.0,243.0,2.0057,68200.0,INLAND +-120.25,37.93,13.0,493.0,76.0,196.0,68.0,3.375,134100.0,INLAND +-120.13,37.93,5.0,111.0,26.0,58.0,25.0,1.675,112500.0,INLAND +-120.35,37.98,4.0,1658.0,301.0,676.0,278.0,3.5714,149500.0,INLAND +-120.33,37.97,17.0,2530.0,526.0,1024.0,496.0,2.0057,118900.0,INLAND +-120.3,37.97,17.0,3243.0,619.0,1408.0,566.0,2.474,120100.0,INLAND +-120.29,37.94,17.0,1459.0,297.0,753.0,271.0,3.05,144800.0,INLAND +-120.32,37.91,16.0,108.0,18.0,54.0,22.0,4.375,100000.0,INLAND +-120.35,37.86,25.0,287.0,57.0,118.0,50.0,2.3056,162500.0,INLAND +-120.23,37.86,16.0,324.0,61.0,135.0,61.0,2.4615,137500.0,INLAND +-120.2,37.84,9.0,13670.0,2453.0,2811.0,1193.0,3.2589,137900.0,INLAND +-120.2,37.8,30.0,1189.0,255.0,446.0,165.0,3.4838,112500.0,INLAND +-119.93,37.85,18.0,473.0,115.0,88.0,41.0,4.0833,137500.0,INLAND +-119.57,37.94,17.0,346.0,130.0,51.0,20.0,3.4861,137500.0,INLAND +-120.47,37.96,25.0,2505.0,529.0,1145.0,483.0,2.006,103000.0,INLAND +-120.42,37.98,18.0,3059.0,609.0,1335.0,581.0,2.5129,115900.0,INLAND +-120.42,37.95,19.0,2787.0,578.0,1208.0,532.0,2.4922,98700.0,INLAND +-120.39,37.96,10.0,2554.0,501.0,922.0,439.0,2.1094,164000.0,INLAND +-120.4,37.92,22.0,1022.0,194.0,517.0,198.0,3.625,99400.0,INLAND +-120.35,37.95,13.0,2104.0,407.0,960.0,401.0,2.4,177000.0,INLAND +-120.41,37.88,16.0,744.0,141.0,311.0,122.0,4.4231,87500.0,INLAND +-120.45,37.79,8.0,2687.0,495.0,5087.0,385.0,3.1719,115400.0,INLAND +-119.31,34.7,19.0,961.0,218.0,479.0,138.0,3.3438,156300.0,INLAND +-119.06,34.62,10.0,416.0,110.0,436.0,70.0,2.2222,262500.0,<1H OCEAN +-118.75,34.42,28.0,1000.0,206.0,545.0,154.0,2.4167,191700.0,<1H OCEAN +-118.8,34.41,45.0,1610.0,,1148.0,347.0,2.7,120400.0,<1H OCEAN +-118.88,34.42,20.0,728.0,120.0,360.0,115.0,6.1244,375000.0,<1H OCEAN +-118.98,34.4,34.0,1328.0,244.0,795.0,227.0,4.4219,338100.0,<1H OCEAN +-118.93,34.36,33.0,1775.0,309.0,1071.0,296.0,4.6607,187900.0,<1H OCEAN +-118.93,34.4,17.0,3275.0,599.0,2422.0,637.0,3.7092,190500.0,<1H OCEAN +-118.92,34.4,23.0,1290.0,283.0,1060.0,279.0,3.3152,198000.0,<1H OCEAN +-118.92,34.41,22.0,2702.0,655.0,2664.0,571.0,3.0893,173400.0,<1H OCEAN +-118.9,34.41,35.0,4431.0,739.0,2304.0,720.0,4.2599,209100.0,<1H OCEAN +-118.91,34.4,30.0,2861.0,613.0,2065.0,586.0,3.2024,176100.0,<1H OCEAN +-118.9,34.4,16.0,2614.0,575.0,1163.0,524.0,1.5781,134400.0,<1H OCEAN +-119.06,34.38,33.0,1465.0,262.0,731.0,266.0,3.9464,230300.0,<1H OCEAN +-119.06,34.37,32.0,3885.0,759.0,2504.0,736.0,3.6453,201700.0,<1H OCEAN +-119.05,34.36,22.0,1815.0,506.0,2428.0,473.0,2.8417,162500.0,<1H OCEAN +-119.05,34.4,50.0,1236.0,282.0,1079.0,257.0,2.6991,181300.0,<1H OCEAN +-119.1,34.31,21.0,2424.0,527.0,1379.0,484.0,2.6786,184000.0,<1H OCEAN +-119.04,34.34,35.0,462.0,90.0,334.0,96.0,5.3582,281300.0,<1H OCEAN +-119.06,34.36,52.0,1409.0,359.0,981.0,304.0,2.7951,199300.0,<1H OCEAN +-119.06,34.36,52.0,1239.0,320.0,934.0,298.0,1.8618,183300.0,<1H OCEAN +-119.06,34.35,34.0,2426.0,646.0,2116.0,631.0,2.0682,158300.0,<1H OCEAN +-119.05,34.35,39.0,950.0,300.0,1366.0,312.0,2.2443,146600.0,<1H OCEAN +-119.09,34.35,20.0,4725.0,881.0,2823.0,869.0,4.0122,214800.0,<1H OCEAN +-119.08,34.35,24.0,3663.0,828.0,2718.0,778.0,3.2757,186000.0,<1H OCEAN +-119.08,34.34,23.0,3065.0,723.0,2042.0,698.0,2.7593,194800.0,<1H OCEAN +-119.11,34.33,14.0,4026.0,769.0,1825.0,671.0,3.5541,191800.0,<1H OCEAN +-119.12,34.38,28.0,7200.0,1281.0,3793.0,1238.0,4.075,237900.0,<1H OCEAN +-119.06,34.36,48.0,1459.0,324.0,902.0,350.0,2.4185,189900.0,<1H OCEAN +-119.23,34.44,34.0,3193.0,664.0,1434.0,627.0,2.4777,260300.0,<1H OCEAN +-119.26,34.46,30.0,3826.0,691.0,1656.0,657.0,4.0074,434700.0,<1H OCEAN +-119.23,34.46,34.0,9280.0,1765.0,4514.0,1693.0,3.2026,227600.0,<1H OCEAN +-119.19,34.46,39.0,2056.0,381.0,939.0,371.0,6.6257,427600.0,<1H OCEAN +-119.23,34.42,16.0,630.0,117.0,343.0,100.0,5.75,325000.0,<1H OCEAN +-119.27,34.45,15.0,1659.0,274.0,679.0,253.0,5.0,357900.0,<1H OCEAN +-119.15,34.44,33.0,2005.0,392.0,1043.0,351.0,5.308,297900.0,<1H OCEAN +-119.14,34.49,17.0,321.0,44.0,92.0,39.0,7.75,375000.0,<1H OCEAN +-119.31,34.41,22.0,2612.0,494.0,1361.0,439.0,4.1319,245000.0,NEAR OCEAN +-119.31,34.38,23.0,282.0,69.0,130.0,57.0,2.4375,225000.0,NEAR OCEAN +-119.29,34.37,41.0,1408.0,311.0,793.0,264.0,2.5441,161200.0,NEAR OCEAN +-119.34,34.39,27.0,669.0,131.0,314.0,106.0,2.4659,231300.0,NEAR OCEAN +-119.31,34.44,5.0,403.0,48.0,208.0,54.0,12.632,500001.0,NEAR OCEAN +-119.28,34.45,36.0,2376.0,541.0,1505.0,547.0,2.4595,197600.0,<1H OCEAN +-119.29,34.45,26.0,2849.0,535.0,1383.0,532.0,2.6893,230800.0,<1H OCEAN +-119.29,34.44,34.0,4314.0,878.0,2361.0,831.0,3.2279,243100.0,NEAR OCEAN +-119.27,34.44,22.0,3527.0,711.0,1483.0,640.0,2.7019,234700.0,<1H OCEAN +-119.28,34.42,23.0,4763.0,828.0,2198.0,771.0,4.8105,313000.0,NEAR OCEAN +-119.3,34.42,18.0,5591.0,1042.0,2860.0,1026.0,3.5822,219900.0,NEAR OCEAN +-119.29,34.4,22.0,3891.0,657.0,1727.0,581.0,4.2656,241400.0,NEAR OCEAN +-119.3,34.39,35.0,3079.0,579.0,1807.0,589.0,4.69,199300.0,NEAR OCEAN +-119.17,34.29,28.0,731.0,155.0,285.0,162.0,3.2917,225000.0,NEAR OCEAN +-119.17,34.29,18.0,3932.0,724.0,1896.0,680.0,5.2953,279400.0,NEAR OCEAN +-119.17,34.31,21.0,259.0,38.0,142.0,45.0,5.2681,500001.0,NEAR OCEAN +-119.15,34.3,21.0,2475.0,502.0,1269.0,505.0,2.98,259200.0,NEAR OCEAN +-119.19,34.28,28.0,3231.0,524.0,1665.0,540.0,4.8583,224200.0,NEAR OCEAN +-119.18,34.28,17.0,4526.0,717.0,2088.0,655.0,5.6885,268200.0,NEAR OCEAN +-119.19,34.3,25.0,2197.0,320.0,934.0,330.0,6.311,283200.0,NEAR OCEAN +-119.22,34.34,29.0,3128.0,672.0,1815.0,648.0,2.9821,175700.0,NEAR OCEAN +-119.39,34.32,19.0,3238.0,629.0,1195.0,443.0,4.8472,500001.0,NEAR OCEAN +-119.32,34.35,16.0,52.0,16.0,51.0,15.0,2.475,225000.0,NEAR OCEAN +-119.14,34.29,17.0,2754.0,577.0,1349.0,533.0,3.1618,154200.0,<1H OCEAN +-119.16,34.28,30.0,413.0,98.0,400.0,112.0,4.0,219200.0,NEAR OCEAN +-119.16,34.28,11.0,5330.0,1056.0,2801.0,1028.0,4.763,232700.0,NEAR OCEAN +-119.16,34.27,24.0,1824.0,331.0,1049.0,320.0,5.9181,221100.0,NEAR OCEAN +-119.14,34.28,31.0,790.0,241.0,1095.0,222.0,2.25,75000.0,NEAR OCEAN +-119.18,34.27,6.0,2307.0,386.0,910.0,364.0,5.215,279500.0,NEAR OCEAN +-119.17,34.27,24.0,4165.0,646.0,2194.0,658.0,6.0661,234800.0,NEAR OCEAN +-119.17,34.27,18.0,8010.0,1539.0,3982.0,1483.0,4.0905,236500.0,NEAR OCEAN +-119.17,34.26,10.0,3654.0,541.0,1638.0,551.0,6.1885,267300.0,NEAR OCEAN +-119.22,34.27,11.0,4695.0,955.0,2065.0,982.0,3.2158,223600.0,NEAR OCEAN +-119.21,34.26,31.0,224.0,88.0,326.0,88.0,2.375,55000.0,NEAR OCEAN +-119.21,34.26,10.0,3150.0,781.0,1582.0,653.0,4.2448,157300.0,NEAR OCEAN +-119.22,34.26,16.0,2596.0,625.0,1403.0,562.0,3.4018,145200.0,NEAR OCEAN +-119.2,34.27,8.0,4942.0,1173.0,3012.0,1033.0,3.445,203400.0,NEAR OCEAN +-119.21,34.26,23.0,2887.0,540.0,1508.0,518.0,3.3452,217600.0,NEAR OCEAN +-119.2,34.26,13.0,3009.0,588.0,1439.0,607.0,4.1845,199500.0,NEAR OCEAN +-119.19,34.26,16.0,5018.0,853.0,2524.0,830.0,5.1752,218000.0,NEAR OCEAN +-119.18,34.26,22.0,2334.0,359.0,1298.0,363.0,5.5275,228900.0,NEAR OCEAN +-119.19,34.25,12.0,232.0,37.0,79.0,35.0,4.1667,214600.0,NEAR OCEAN +-119.21,34.26,26.0,2406.0,411.0,1313.0,391.0,4.9079,234100.0,NEAR OCEAN +-119.2,34.26,25.0,2203.0,367.0,1194.0,377.0,5.4087,223200.0,NEAR OCEAN +-119.2,34.25,18.0,3208.0,643.0,1973.0,614.0,3.8162,235000.0,NEAR OCEAN +-119.2,34.25,25.0,195.0,59.0,140.0,43.0,3.8889,187500.0,NEAR OCEAN +-119.2,34.28,22.0,2362.0,601.0,1127.0,499.0,3.4006,219400.0,NEAR OCEAN +-119.22,34.27,30.0,1937.0,295.0,695.0,313.0,5.0679,234300.0,NEAR OCEAN +-119.23,34.27,22.0,3536.0,615.0,1650.0,612.0,4.2381,229300.0,NEAR OCEAN +-119.21,34.31,22.0,7548.0,1038.0,2855.0,1008.0,6.729,409300.0,NEAR OCEAN +-119.21,34.28,27.0,2219.0,312.0,937.0,315.0,5.7601,281100.0,NEAR OCEAN +-119.23,34.3,18.0,1713.0,244.0,690.0,239.0,6.9483,404300.0,NEAR OCEAN +-119.23,34.28,24.0,4260.0,691.0,1581.0,607.0,5.5048,303600.0,NEAR OCEAN +-119.22,34.28,24.0,2212.0,332.0,899.0,331.0,5.533,299700.0,NEAR OCEAN +-119.22,34.28,33.0,2467.0,377.0,1052.0,363.0,4.7333,257500.0,NEAR OCEAN +-119.25,34.28,36.0,1530.0,341.0,703.0,317.0,3.5819,231900.0,NEAR OCEAN +-119.26,34.28,41.0,2822.0,564.0,1288.0,541.0,3.0799,254100.0,NEAR OCEAN +-119.25,34.3,34.0,1189.0,220.0,445.0,203.0,4.8824,396400.0,NEAR OCEAN +-119.25,34.28,36.0,2232.0,373.0,951.0,368.0,5.2261,303200.0,NEAR OCEAN +-119.24,34.28,41.0,1280.0,240.0,608.0,252.0,4.4038,229100.0,NEAR OCEAN +-119.26,34.28,41.0,1835.0,311.0,683.0,308.0,4.8977,358200.0,NEAR OCEAN +-119.27,34.28,52.0,2239.0,420.0,941.0,397.0,4.125,349000.0,NEAR OCEAN +-119.27,34.29,32.0,2274.0,406.0,982.0,393.0,5.3254,385200.0,NEAR OCEAN +-119.29,34.29,33.0,3854.0,982.0,1835.0,894.0,3.5294,323900.0,NEAR OCEAN +-119.29,34.3,24.0,7637.0,1705.0,4647.0,1623.0,3.5385,186800.0,NEAR OCEAN +-119.3,34.29,41.0,1445.0,410.0,1052.0,388.0,2.6333,170800.0,NEAR OCEAN +-119.3,34.29,50.0,3128.0,825.0,2535.0,783.0,2.3669,165300.0,NEAR OCEAN +-119.3,34.29,26.0,3665.0,932.0,2775.0,870.0,1.9286,160500.0,NEAR OCEAN +-119.29,34.31,25.0,1092.0,190.0,702.0,215.0,3.9063,192700.0,NEAR OCEAN +-119.29,34.28,38.0,2387.0,748.0,1537.0,741.0,2.3147,192500.0,NEAR OCEAN +-119.3,34.27,17.0,1527.0,503.0,688.0,423.0,1.6007,187500.0,NEAR OCEAN +-119.29,34.26,32.0,3295.0,764.0,1344.0,600.0,3.6007,395500.0,NEAR OCEAN +-119.27,34.26,23.0,3578.0,753.0,1455.0,649.0,4.1898,359100.0,NEAR OCEAN +-119.29,34.23,22.0,2486.0,608.0,709.0,523.0,2.9018,275000.0,NEAR OCEAN +-119.29,34.24,27.0,4742.0,775.0,1682.0,696.0,6.194,500001.0,NEAR OCEAN +-119.27,34.27,44.0,1312.0,279.0,668.0,278.0,4.09,203800.0,NEAR OCEAN +-119.27,34.28,50.0,1710.0,412.0,915.0,380.0,3.1757,206300.0,NEAR OCEAN +-119.27,34.27,52.0,459.0,112.0,276.0,107.0,2.375,198400.0,NEAR OCEAN +-119.27,34.27,52.0,1577.0,343.0,836.0,335.0,3.5893,206600.0,NEAR OCEAN +-119.28,34.27,43.0,403.0,77.0,156.0,85.0,4.6667,384600.0,NEAR OCEAN +-119.28,34.27,44.0,706.0,176.0,399.0,149.0,3.0089,166700.0,NEAR OCEAN +-119.25,34.27,46.0,679.0,159.0,382.0,143.0,3.5,221200.0,NEAR OCEAN +-119.24,34.27,32.0,4071.0,888.0,1900.0,874.0,3.2792,220500.0,NEAR OCEAN +-119.23,34.27,29.0,3298.0,804.0,1509.0,711.0,3.8125,244500.0,NEAR OCEAN +-119.25,34.26,30.0,2948.0,827.0,1635.0,750.0,2.67,214900.0,NEAR OCEAN +-119.25,34.27,35.0,2532.0,407.0,1338.0,422.0,4.7727,219000.0,NEAR OCEAN +-119.26,34.27,36.0,1972.0,382.0,1029.0,411.0,3.7337,209000.0,NEAR OCEAN +-119.26,34.27,40.0,2528.0,572.0,1318.0,549.0,3.6413,212700.0,NEAR OCEAN +-119.26,34.27,42.0,918.0,204.0,394.0,204.0,4.0069,214300.0,NEAR OCEAN +-119.23,34.25,28.0,26.0,3.0,29.0,9.0,8.0,275000.0,NEAR OCEAN +-119.25,34.21,12.0,15201.0,2418.0,7132.0,2251.0,5.6756,301800.0,NEAR OCEAN +-119.18,34.24,17.0,629.0,221.0,514.0,186.0,3.2847,112500.0,NEAR OCEAN +-119.18,34.23,16.0,4609.0,1220.0,2147.0,1007.0,3.375,218800.0,NEAR OCEAN +-119.19,34.22,26.0,3175.0,736.0,2460.0,775.0,3.125,219900.0,NEAR OCEAN +-119.19,34.23,17.0,3889.0,748.0,2415.0,739.0,4.5,234300.0,NEAR OCEAN +-119.18,34.22,15.0,4615.0,1008.0,2549.0,973.0,3.9063,198700.0,NEAR OCEAN +-119.17,34.22,29.0,4188.0,816.0,2783.0,790.0,4.1949,197100.0,NEAR OCEAN +-119.17,34.21,33.0,1039.0,256.0,1432.0,272.0,3.1103,143500.0,NEAR OCEAN +-119.16,34.2,35.0,2183.0,636.0,3504.0,623.0,1.9704,160300.0,NEAR OCEAN +-119.17,34.2,36.0,2028.0,523.0,2751.0,496.0,3.015,149300.0,NEAR OCEAN +-119.17,34.2,40.0,1083.0,319.0,1843.0,349.0,2.3077,106900.0,NEAR OCEAN +-119.18,34.21,30.0,1096.0,231.0,741.0,229.0,3.8625,234700.0,NEAR OCEAN +-119.18,34.21,29.0,4039.0,680.0,1677.0,644.0,4.3897,257600.0,NEAR OCEAN +-119.19,34.21,28.0,4194.0,811.0,2556.0,856.0,4.2227,235400.0,NEAR OCEAN +-119.19,34.21,27.0,1887.0,487.0,1339.0,428.0,2.9185,224500.0,NEAR OCEAN +-119.19,34.2,36.0,1293.0,312.0,1128.0,335.0,2.1542,253900.0,NEAR OCEAN +-119.19,34.21,34.0,3413.0,693.0,2223.0,651.0,3.8239,208200.0,NEAR OCEAN +-119.18,34.21,46.0,2062.0,484.0,1522.0,469.0,3.087,213900.0,NEAR OCEAN +-119.19,34.2,18.0,3620.0,,3171.0,779.0,3.3409,220500.0,NEAR OCEAN +-119.18,34.19,19.0,2393.0,,1938.0,762.0,1.6953,167400.0,NEAR OCEAN +-119.18,34.2,21.0,494.0,127.0,489.0,106.0,2.6964,170800.0,NEAR OCEAN +-119.18,34.19,5.0,384.0,131.0,410.0,149.0,1.5625,87500.0,NEAR OCEAN +-119.27,34.17,15.0,11403.0,2131.0,3327.0,1585.0,4.3693,423300.0,NEAR OCEAN +-119.23,34.19,16.0,5297.0,810.0,1489.0,667.0,6.4522,500001.0,NEAR OCEAN +-119.23,34.17,18.0,6171.0,1490.0,2164.0,1210.0,3.6875,500001.0,NEAR OCEAN +-119.23,34.15,18.0,6213.0,1188.0,2679.0,1000.0,3.748,380400.0,NEAR OCEAN +-119.21,34.19,15.0,3797.0,692.0,2216.0,675.0,4.7443,229500.0,NEAR OCEAN +-119.21,34.19,15.0,5614.0,989.0,2754.0,994.0,5.035,242900.0,NEAR OCEAN +-119.22,34.18,17.0,3332.0,762.0,1797.0,673.0,4.4292,231200.0,NEAR OCEAN +-119.2,34.19,19.0,9503.0,1769.0,6370.0,1718.0,5.0016,218500.0,NEAR OCEAN +-119.2,34.18,27.0,1035.0,229.0,782.0,222.0,4.2212,185400.0,NEAR OCEAN +-119.19,34.19,35.0,2599.0,552.0,2726.0,543.0,3.2212,180500.0,NEAR OCEAN +-119.19,34.18,32.0,3366.0,677.0,2857.0,669.0,4.6186,181100.0,NEAR OCEAN +-119.18,34.19,36.0,4519.0,1081.0,4818.0,1061.0,2.8561,179100.0,NEAR OCEAN +-119.18,34.18,31.0,2636.0,638.0,2695.0,614.0,3.2196,175800.0,NEAR OCEAN +-119.17,34.18,38.0,3221.0,783.0,2792.0,736.0,2.9118,172400.0,NEAR OCEAN +-119.17,34.17,34.0,2749.0,539.0,2330.0,559.0,4.2137,185600.0,NEAR OCEAN +-119.17,34.17,32.0,1567.0,304.0,1482.0,308.0,3.5867,182100.0,NEAR OCEAN +-119.17,34.17,42.0,1411.0,300.0,1295.0,339.0,2.6667,164900.0,NEAR OCEAN +-119.17,34.17,25.0,1596.0,321.0,1378.0,308.0,4.0074,188000.0,NEAR OCEAN +-119.17,34.17,21.0,2361.0,464.0,1146.0,396.0,3.6597,195100.0,NEAR OCEAN +-119.19,34.17,31.0,1872.0,434.0,1511.0,405.0,3.2314,186800.0,NEAR OCEAN +-119.19,34.17,35.0,4276.0,767.0,3295.0,708.0,4.2583,187300.0,NEAR OCEAN +-119.18,34.17,32.0,2388.0,467.0,1746.0,483.0,3.9331,187600.0,NEAR OCEAN +-119.18,34.16,30.0,2053.0,368.0,1496.0,391.0,3.6546,186200.0,NEAR OCEAN +-119.19,34.17,27.0,2183.0,364.0,1458.0,388.0,4.4567,191100.0,NEAR OCEAN +-119.19,34.16,34.0,2610.0,466.0,1543.0,433.0,3.9722,189000.0,NEAR OCEAN +-119.19,34.16,35.0,2733.0,510.0,1814.0,511.0,4.4187,183400.0,NEAR OCEAN +-119.22,34.15,32.0,3152.0,596.0,3490.0,526.0,2.725,450000.0,NEAR OCEAN +-119.2,34.18,22.0,6465.0,1397.0,2694.0,1370.0,2.9832,165600.0,NEAR OCEAN +-119.21,34.18,13.0,6103.0,1319.0,2986.0,1212.0,3.9718,215200.0,NEAR OCEAN +-119.19,34.15,31.0,4175.0,1004.0,3310.0,954.0,3.1989,185400.0,NEAR OCEAN +-119.2,34.15,27.0,2076.0,681.0,1904.0,647.0,1.4773,160800.0,NEAR OCEAN +-119.21,34.12,15.0,5778.0,1285.0,1722.0,829.0,4.3427,305800.0,NEAR OCEAN +-119.18,34.16,12.0,460.0,101.0,405.0,103.0,5.2783,167400.0,NEAR OCEAN +-119.18,34.16,27.0,1832.0,415.0,1480.0,414.0,3.9643,186000.0,NEAR OCEAN +-119.18,34.15,22.0,4769.0,1366.0,5534.0,1318.0,2.4167,192000.0,NEAR OCEAN +-119.17,34.16,17.0,5276.0,1020.0,4066.0,984.0,4.5828,205400.0,NEAR OCEAN +-119.17,34.15,18.0,2509.0,688.0,3129.0,677.0,2.6098,146100.0,NEAR OCEAN +-119.13,34.19,16.0,6389.0,1330.0,6242.0,1340.0,4.0222,206800.0,NEAR OCEAN +-119.15,34.17,22.0,1612.0,334.0,1431.0,335.0,4.8125,194400.0,NEAR OCEAN +-119.14,34.17,16.0,1593.0,353.0,836.0,357.0,2.726,67500.0,NEAR OCEAN +-119.11,34.17,37.0,470.0,105.0,522.0,83.0,2.0368,243800.0,NEAR OCEAN +-119.17,34.19,28.0,1444.0,508.0,2145.0,437.0,1.6964,175000.0,NEAR OCEAN +-119.14,34.15,25.0,2202.0,390.0,1415.0,412.0,4.43,207700.0,NEAR OCEAN +-119.16,34.15,23.0,3204.0,644.0,2295.0,614.0,3.9485,196600.0,NEAR OCEAN +-119.16,34.12,17.0,224.0,70.0,147.0,71.0,3.6167,280000.0,NEAR OCEAN +-119.16,34.17,17.0,7982.0,1603.0,6437.0,1596.0,4.1279,223900.0,NEAR OCEAN +-119.15,34.17,23.0,2239.0,537.0,784.0,497.0,1.6038,194300.0,NEAR OCEAN +-119.15,34.2,25.0,3445.0,898.0,5558.0,894.0,3.0972,169300.0,NEAR OCEAN +-119.17,34.25,15.0,1329.0,282.0,1001.0,284.0,3.65,189300.0,NEAR OCEAN +-119.15,34.25,36.0,3511.0,664.0,2965.0,695.0,4.0878,186800.0,NEAR OCEAN +-119.16,34.23,26.0,5444.0,1293.0,3700.0,1158.0,2.7556,213200.0,NEAR OCEAN +-119.14,34.23,8.0,243.0,75.0,102.0,80.0,2.5714,500001.0,NEAR OCEAN +-119.12,34.23,35.0,2028.0,554.0,2252.0,521.0,2.4643,182000.0,NEAR OCEAN +-119.12,34.25,31.0,737.0,146.0,1436.0,168.0,3.5625,194100.0,NEAR OCEAN +-119.04,34.28,21.0,1856.0,276.0,863.0,255.0,4.5833,500001.0,<1H OCEAN +-118.96,34.3,16.0,3103.0,482.0,1567.0,467.0,6.907,500001.0,<1H OCEAN +-119.06,34.24,21.0,7436.0,984.0,2982.0,988.0,7.6775,391200.0,<1H OCEAN +-119.09,34.24,17.0,10214.0,1589.0,3409.0,1327.0,5.3806,452100.0,<1H OCEAN +-119.02,34.26,40.0,1498.0,292.0,707.0,249.0,3.7974,228700.0,<1H OCEAN +-119.03,34.25,25.0,3344.0,502.0,1483.0,496.0,6.196,340600.0,<1H OCEAN +-119.04,34.24,20.0,7794.0,1192.0,4169.0,1188.0,5.9316,311900.0,<1H OCEAN +-119.05,34.24,24.0,4341.0,646.0,1929.0,703.0,5.4298,279600.0,<1H OCEAN +-118.99,34.23,9.0,10618.0,1617.0,4830.0,1606.0,6.6246,284200.0,<1H OCEAN +-119.01,34.23,11.0,5785.0,1035.0,2760.0,985.0,4.693,232200.0,<1H OCEAN +-118.94,34.24,5.0,10018.0,1233.0,4253.0,1120.0,8.9063,500001.0,<1H OCEAN +-118.96,34.23,14.0,15207.0,2924.0,6301.0,2829.0,3.9699,217000.0,<1H OCEAN +-119.03,34.24,25.0,3655.0,545.0,1776.0,544.0,5.687,238100.0,<1H OCEAN +-119.03,34.23,16.0,5323.0,795.0,2493.0,779.0,5.6762,271300.0,<1H OCEAN +-119.02,34.24,24.0,4650.0,748.0,2374.0,702.0,5.8838,232600.0,<1H OCEAN +-119.03,34.23,21.0,3284.0,487.0,1832.0,521.0,5.2773,250800.0,<1H OCEAN +-119.03,34.22,24.0,3421.0,656.0,2220.0,645.0,4.7831,214200.0,<1H OCEAN +-119.04,34.23,21.0,9807.0,1614.0,4199.0,1554.0,5.0145,246600.0,<1H OCEAN +-119.06,34.23,23.0,3471.0,510.0,2002.0,555.0,5.2742,257500.0,<1H OCEAN +-119.06,34.23,29.0,3511.0,632.0,2591.0,596.0,3.0219,221700.0,<1H OCEAN +-119.04,34.22,18.0,3117.0,583.0,2079.0,545.0,4.6458,222800.0,<1H OCEAN +-119.06,34.22,13.0,4175.0,1321.0,2257.0,1271.0,3.1446,177100.0,<1H OCEAN +-119.0,34.19,5.0,3634.0,718.0,1317.0,743.0,4.2917,227900.0,<1H OCEAN +-119.05,34.19,39.0,143.0,36.0,113.0,33.0,2.8942,275000.0,NEAR OCEAN +-119.08,34.17,32.0,166.0,22.0,63.0,29.0,7.3004,125000.0,NEAR OCEAN +-119.03,34.21,11.0,4528.0,729.0,2398.0,684.0,5.3044,319000.0,<1H OCEAN +-119.05,34.21,27.0,4357.0,926.0,2110.0,876.0,3.0119,218200.0,<1H OCEAN +-119.09,34.22,8.0,40.0,10.0,309.0,16.0,4.0208,52500.0,NEAR OCEAN +-119.05,34.13,12.0,57.0,22.0,69.0,15.0,5.0066,275000.0,NEAR OCEAN +-118.97,34.18,18.0,7338.0,1020.0,3419.0,1058.0,7.0242,293100.0,<1H OCEAN +-118.96,34.19,16.0,1807.0,346.0,587.0,296.0,1.9811,162500.0,<1H OCEAN +-118.96,34.18,16.0,3137.0,462.0,1384.0,436.0,6.1306,258200.0,<1H OCEAN +-118.98,34.16,16.0,2476.0,402.0,1251.0,387.0,5.7676,241300.0,<1H OCEAN +-118.95,34.18,25.0,2237.0,331.0,1121.0,365.0,6.0994,254900.0,<1H OCEAN +-118.95,34.17,9.0,2372.0,312.0,1039.0,321.0,7.6016,344900.0,<1H OCEAN +-118.94,34.17,16.0,3746.0,508.0,1556.0,452.0,6.3303,299400.0,<1H OCEAN +-118.94,34.17,15.0,1679.0,271.0,928.0,264.0,5.5681,235600.0,<1H OCEAN +-118.95,34.17,23.0,2630.0,404.0,1184.0,385.0,5.2955,247600.0,<1H OCEAN +-118.95,34.16,21.0,2953.0,419.0,1397.0,410.0,6.541,291500.0,<1H OCEAN +-118.93,34.18,18.0,2730.0,415.0,1248.0,412.0,6.187,287900.0,<1H OCEAN +-118.92,34.18,17.0,2400.0,352.0,1067.0,323.0,6.3522,259300.0,<1H OCEAN +-118.92,34.17,17.0,1552.0,246.0,685.0,244.0,5.9836,294800.0,<1H OCEAN +-118.94,34.16,3.0,1170.0,148.0,493.0,142.0,8.0428,500001.0,<1H OCEAN +-118.91,34.18,17.0,3220.0,716.0,1381.0,733.0,2.8958,176000.0,<1H OCEAN +-118.9,34.18,20.0,1288.0,179.0,539.0,181.0,5.8652,302600.0,<1H OCEAN +-118.9,34.18,14.0,2627.0,328.0,1121.0,328.0,7.0504,333800.0,<1H OCEAN +-118.9,34.17,14.0,4719.0,734.0,1880.0,731.0,5.3558,313800.0,<1H OCEAN +-118.88,34.17,15.0,4260.0,,1701.0,669.0,5.1033,410700.0,<1H OCEAN +-118.85,34.17,42.0,564.0,96.0,220.0,81.0,4.5625,318800.0,<1H OCEAN +-118.84,34.16,18.0,6075.0,1056.0,2571.0,1018.0,5.22,399400.0,<1H OCEAN +-118.84,34.15,17.0,3785.0,494.0,1527.0,507.0,8.4443,358500.0,<1H OCEAN +-118.86,34.16,16.0,1509.0,216.0,578.0,235.0,10.2614,410800.0,<1H OCEAN +-118.85,34.14,24.0,1999.0,244.0,759.0,247.0,8.7657,366300.0,<1H OCEAN +-118.82,34.15,9.0,655.0,110.0,222.0,109.0,7.8528,337500.0,NEAR OCEAN +-118.83,34.15,16.0,3380.0,731.0,1227.0,641.0,4.2857,233200.0,NEAR OCEAN +-118.83,34.14,16.0,1316.0,194.0,450.0,173.0,10.1597,500001.0,NEAR OCEAN +-118.83,34.14,16.0,1956.0,312.0,671.0,319.0,6.4001,321800.0,NEAR OCEAN +-118.85,34.14,16.0,4109.0,543.0,1409.0,560.0,8.1064,423400.0,<1H OCEAN +-118.95,34.19,24.0,2719.0,434.0,1318.0,424.0,4.675,228800.0,<1H OCEAN +-118.94,34.18,24.0,3689.0,585.0,1898.0,581.0,5.9224,239400.0,<1H OCEAN +-118.94,34.18,25.0,3502.0,508.0,1713.0,508.0,5.5181,242100.0,<1H OCEAN +-118.93,34.2,17.0,2619.0,606.0,1655.0,557.0,3.886,281300.0,<1H OCEAN +-118.92,34.19,16.0,3631.0,974.0,2585.0,923.0,3.0691,130400.0,<1H OCEAN +-118.9,34.2,16.0,6510.0,817.0,2304.0,778.0,7.9943,452100.0,<1H OCEAN +-118.9,34.19,26.0,1582.0,196.0,573.0,182.0,10.0595,500001.0,<1H OCEAN +-118.91,34.22,15.0,5644.0,757.0,2659.0,783.0,6.7559,312000.0,<1H OCEAN +-118.89,34.22,20.0,3878.0,665.0,1651.0,591.0,5.5402,264600.0,<1H OCEAN +-118.87,34.23,14.0,4242.0,746.0,1858.0,689.0,6.0145,287100.0,<1H OCEAN +-118.88,34.22,16.0,2343.0,393.0,2007.0,383.0,5.756,302700.0,<1H OCEAN +-118.87,34.22,14.0,3108.0,451.0,1566.0,434.0,6.2423,305400.0,<1H OCEAN +-118.85,34.25,17.0,5593.0,732.0,1992.0,660.0,7.2965,342900.0,<1H OCEAN +-118.85,34.23,13.0,5094.0,764.0,2230.0,737.0,6.4823,290900.0,<1H OCEAN +-118.86,34.22,26.0,1932.0,280.0,886.0,289.0,5.0855,232200.0,<1H OCEAN +-118.86,34.22,26.0,1775.0,295.0,1004.0,323.0,5.5845,251700.0,<1H OCEAN +-118.86,34.22,22.0,1230.0,200.0,673.0,195.0,6.2708,251400.0,<1H OCEAN +-118.85,34.21,25.0,1328.0,209.0,691.0,228.0,4.9234,241400.0,<1H OCEAN +-118.85,34.21,29.0,2195.0,414.0,1360.0,401.0,3.4773,206700.0,<1H OCEAN +-118.86,34.21,26.0,3354.0,659.0,2020.0,648.0,4.1576,211800.0,<1H OCEAN +-118.88,34.22,22.0,3654.0,517.0,1565.0,518.0,6.2748,274800.0,<1H OCEAN +-118.87,34.21,26.0,4439.0,616.0,1881.0,592.0,6.2935,258000.0,<1H OCEAN +-118.88,34.21,26.0,1590.0,196.0,654.0,199.0,6.5851,300000.0,<1H OCEAN +-118.87,34.2,26.0,1924.0,245.0,775.0,244.0,7.001,286800.0,<1H OCEAN +-118.88,34.2,23.0,4862.0,597.0,1938.0,594.0,7.3409,316000.0,<1H OCEAN +-118.88,34.19,26.0,2296.0,275.0,842.0,263.0,7.7889,309900.0,<1H OCEAN +-118.86,34.2,32.0,2399.0,384.0,1199.0,390.0,4.125,264600.0,<1H OCEAN +-118.86,34.19,26.0,3135.0,480.0,1474.0,458.0,6.1949,243500.0,<1H OCEAN +-118.87,34.19,23.0,2179.0,423.0,1338.0,406.0,5.5224,240700.0,<1H OCEAN +-118.88,34.19,16.0,7268.0,1729.0,3232.0,1653.0,3.3703,228700.0,<1H OCEAN +-118.87,34.18,21.0,5661.0,1369.0,3188.0,1308.0,3.4676,212800.0,<1H OCEAN +-118.85,34.18,11.0,5873.0,1455.0,3089.0,1365.0,3.5504,173800.0,<1H OCEAN +-118.84,34.17,16.0,3449.0,820.0,1877.0,816.0,3.2176,187500.0,<1H OCEAN +-118.85,34.2,28.0,2040.0,297.0,848.0,280.0,6.7612,323700.0,<1H OCEAN +-118.86,34.19,29.0,1326.0,185.0,586.0,187.0,6.5474,422900.0,<1H OCEAN +-118.86,34.19,27.0,1931.0,261.0,736.0,244.0,6.7805,392900.0,<1H OCEAN +-118.85,34.19,27.0,2287.0,320.0,967.0,321.0,6.5162,349400.0,<1H OCEAN +-118.83,34.18,23.0,5647.0,786.0,2050.0,738.0,6.3586,348300.0,<1H OCEAN +-118.83,34.17,17.0,4668.0,628.0,1917.0,624.0,8.1397,353900.0,<1H OCEAN +-118.9,34.14,35.0,1503.0,263.0,576.0,216.0,5.1457,500001.0,<1H OCEAN +-119.0,34.08,17.0,1822.0,438.0,578.0,291.0,5.4346,428600.0,NEAR OCEAN +-118.75,34.18,4.0,16704.0,2704.0,6187.0,2207.0,6.6122,357600.0,NEAR OCEAN +-118.75,34.17,18.0,6217.0,858.0,2703.0,834.0,6.8075,325900.0,NEAR OCEAN +-118.69,34.18,11.0,1177.0,138.0,415.0,119.0,10.0472,500001.0,<1H OCEAN +-118.8,34.19,4.0,15572.0,2222.0,5495.0,2152.0,8.6499,500001.0,<1H OCEAN +-118.83,34.23,6.0,8803.0,1114.0,3385.0,1010.0,8.7288,425800.0,<1H OCEAN +-118.84,34.22,11.0,3170.0,420.0,1418.0,432.0,7.5118,361900.0,<1H OCEAN +-118.84,34.21,16.0,4975.0,949.0,2537.0,971.0,5.2361,224700.0,<1H OCEAN +-118.8,34.21,16.0,1466.0,196.0,661.0,209.0,6.2893,282700.0,<1H OCEAN +-118.74,34.25,25.0,1815.0,281.0,960.0,284.0,5.4243,214700.0,<1H OCEAN +-118.74,34.26,22.0,4337.0,673.0,2347.0,636.0,5.4091,222400.0,<1H OCEAN +-118.7,34.24,28.0,2405.0,462.0,1011.0,378.0,4.504,204300.0,<1H OCEAN +-118.64,34.25,47.0,1315.0,290.0,581.0,268.0,5.4024,253000.0,<1H OCEAN +-118.69,34.21,10.0,3663.0,409.0,1179.0,371.0,12.542,500001.0,<1H OCEAN +-118.81,34.25,4.0,9147.0,1827.0,3950.0,1661.0,5.716,320800.0,<1H OCEAN +-118.79,34.26,17.0,1986.0,249.0,761.0,241.0,7.2137,401900.0,<1H OCEAN +-118.8,34.27,12.0,3330.0,600.0,1577.0,584.0,4.6985,264100.0,<1H OCEAN +-118.77,34.24,6.0,16222.0,2309.0,6700.0,2080.0,6.4963,308100.0,<1H OCEAN +-118.78,34.26,24.0,4072.0,582.0,1834.0,565.0,6.0487,254500.0,<1H OCEAN +-118.78,34.25,13.0,1841.0,237.0,833.0,231.0,7.7785,404700.0,<1H OCEAN +-118.85,34.27,50.0,187.0,33.0,130.0,35.0,3.3438,500001.0,<1H OCEAN +-118.9,34.3,13.0,5591.0,1013.0,3188.0,971.0,5.5925,208600.0,<1H OCEAN +-118.83,34.33,6.0,6679.0,1164.0,3196.0,1157.0,5.4493,242600.0,<1H OCEAN +-118.89,34.29,28.0,1545.0,371.0,1334.0,318.0,3.4375,194100.0,<1H OCEAN +-118.89,34.33,23.0,366.0,62.0,265.0,66.0,3.125,375000.0,<1H OCEAN +-118.89,34.28,30.0,917.0,157.0,678.0,171.0,5.8133,195700.0,<1H OCEAN +-118.88,34.28,22.0,3369.0,771.0,2751.0,710.0,4.0474,182100.0,<1H OCEAN +-118.91,34.28,6.0,6106.0,1134.0,3246.0,1062.0,5.2206,280200.0,<1H OCEAN +-118.9,34.26,5.0,25187.0,3521.0,11956.0,3478.0,6.9712,321300.0,<1H OCEAN +-118.81,34.28,20.0,3678.0,684.0,1882.0,694.0,4.1607,196800.0,<1H OCEAN +-118.78,34.27,20.0,2743.0,685.0,1798.0,613.0,3.6761,170900.0,<1H OCEAN +-118.79,34.27,27.0,1146.0,189.0,595.0,197.0,4.5833,198500.0,<1H OCEAN +-118.77,34.27,7.0,3074.0,794.0,1816.0,654.0,2.7137,196400.0,<1H OCEAN +-118.77,34.27,10.0,1658.0,310.0,1053.0,333.0,4.7574,209900.0,<1H OCEAN +-118.77,34.28,6.0,4685.0,965.0,2180.0,909.0,4.5458,208200.0,<1H OCEAN +-118.77,34.28,27.0,1416.0,251.0,1024.0,268.0,5.1074,185200.0,<1H OCEAN +-118.77,34.28,26.0,2873.0,480.0,1915.0,475.0,5.3681,187700.0,<1H OCEAN +-118.75,34.29,17.0,5512.0,,2734.0,814.0,6.6073,258100.0,<1H OCEAN +-118.75,34.28,22.0,3844.0,537.0,1665.0,492.0,6.2059,239900.0,<1H OCEAN +-118.76,34.28,21.0,2786.0,342.0,1114.0,322.0,5.8578,266300.0,<1H OCEAN +-118.75,34.27,20.0,3495.0,449.0,1629.0,428.0,5.8096,264400.0,<1H OCEAN +-118.75,34.28,27.0,1452.0,251.0,928.0,259.0,4.6908,186600.0,<1H OCEAN +-118.75,34.27,26.0,966.0,191.0,690.0,191.0,5.1698,188000.0,<1H OCEAN +-118.75,34.27,24.0,3241.0,461.0,1567.0,446.0,5.5983,233300.0,<1H OCEAN +-118.75,34.27,25.0,3371.0,502.0,1717.0,506.0,6.1253,225000.0,<1H OCEAN +-118.71,34.27,26.0,990.0,223.0,719.0,232.0,3.163,179400.0,<1H OCEAN +-118.73,34.27,23.0,4550.0,762.0,2301.0,744.0,4.556,205300.0,<1H OCEAN +-118.74,34.27,23.0,2493.0,522.0,1488.0,505.0,4.18,215000.0,<1H OCEAN +-118.77,34.26,26.0,3038.0,468.0,1825.0,468.0,5.6385,196900.0,<1H OCEAN +-118.76,34.26,26.0,1750.0,284.0,962.0,278.0,4.5673,190400.0,<1H OCEAN +-118.76,34.26,26.0,1929.0,293.0,1067.0,320.0,5.4038,222100.0,<1H OCEAN +-118.75,34.26,26.0,1767.0,265.0,1040.0,250.0,5.4787,198100.0,<1H OCEAN +-118.75,34.26,24.0,2234.0,373.0,1325.0,383.0,5.4604,193400.0,<1H OCEAN +-118.74,34.26,27.0,3467.0,545.0,1798.0,493.0,4.8717,204100.0,<1H OCEAN +-118.74,34.28,21.0,4056.0,637.0,1974.0,634.0,5.9024,221000.0,<1H OCEAN +-118.73,34.27,25.0,3409.0,493.0,1699.0,484.0,5.653,225800.0,<1H OCEAN +-118.71,34.28,27.0,2911.0,562.0,1773.0,580.0,4.6528,186600.0,<1H OCEAN +-118.7,34.28,25.0,2377.0,491.0,1200.0,439.0,4.7083,196100.0,<1H OCEAN +-118.7,34.28,27.0,727.0,136.0,467.0,144.0,3.7188,250000.0,<1H OCEAN +-118.72,34.28,17.0,2654.0,478.0,1392.0,451.0,5.4459,223900.0,<1H OCEAN +-118.72,34.28,18.0,2229.0,371.0,1283.0,379.0,5.5955,217700.0,<1H OCEAN +-118.72,34.28,17.0,3051.0,,1705.0,495.0,5.7376,218600.0,<1H OCEAN +-118.67,34.28,21.0,4059.0,598.0,2133.0,634.0,5.6949,235300.0,<1H OCEAN +-118.68,34.28,17.0,6488.0,1102.0,3199.0,1070.0,5.0962,238000.0,<1H OCEAN +-118.67,34.3,5.0,6123.0,825.0,2440.0,736.0,7.9013,393000.0,<1H OCEAN +-118.68,34.28,5.0,6150.0,1265.0,3188.0,1266.0,4.7034,223000.0,<1H OCEAN +-118.68,34.27,16.0,4637.0,941.0,2476.0,878.0,4.0568,225200.0,<1H OCEAN +-118.68,34.27,26.0,1561.0,212.0,817.0,242.0,5.477,209100.0,<1H OCEAN +-118.67,34.27,15.0,3221.0,659.0,1390.0,607.0,3.5313,191800.0,<1H OCEAN +-118.67,34.27,10.0,3753.0,678.0,1859.0,660.0,4.9946,204600.0,<1H OCEAN +-118.65,34.27,23.0,1724.0,265.0,934.0,306.0,6.0783,229200.0,<1H OCEAN +-118.71,34.29,24.0,2983.0,406.0,1203.0,381.0,6.3236,302000.0,<1H OCEAN +-118.71,34.29,21.0,2751.0,493.0,1432.0,483.0,5.2067,221200.0,<1H OCEAN +-118.7,34.28,27.0,3536.0,646.0,1837.0,580.0,4.4964,238300.0,<1H OCEAN +-118.7,34.3,23.0,2831.0,406.0,1284.0,393.0,6.1383,244100.0,<1H OCEAN +-118.7,34.29,25.0,1678.0,252.0,862.0,268.0,6.1834,229800.0,<1H OCEAN +-118.71,34.3,23.0,1983.0,280.0,978.0,287.0,6.3199,236700.0,<1H OCEAN +-118.7,34.3,27.0,1527.0,220.0,756.0,226.0,6.1825,227000.0,<1H OCEAN +-118.71,34.3,20.0,1586.0,187.0,699.0,209.0,6.5483,335000.0,<1H OCEAN +-118.68,34.33,45.0,121.0,25.0,67.0,27.0,2.9821,325000.0,<1H OCEAN +-118.75,34.33,27.0,534.0,85.0,243.0,77.0,8.2787,330000.0,<1H OCEAN +-118.73,34.29,11.0,5451.0,736.0,2526.0,752.0,7.355,343900.0,<1H OCEAN +-118.72,34.29,22.0,3266.0,529.0,1595.0,494.0,6.0368,248000.0,<1H OCEAN +-118.73,34.29,8.0,4983.0,754.0,2510.0,725.0,6.9454,276500.0,<1H OCEAN +-121.52,38.59,35.0,6418.0,1545.0,3814.0,1496.0,1.6647,69100.0,INLAND +-121.51,38.58,42.0,1822.0,636.0,1372.0,560.0,1.2542,76000.0,INLAND +-121.53,38.6,25.0,5154.0,1105.0,3196.0,1073.0,2.7566,80200.0,INLAND +-121.54,38.59,29.0,2242.0,493.0,1481.0,478.0,2.0781,74800.0,INLAND +-121.54,38.59,40.0,2120.0,504.0,1304.0,464.0,2.0368,67800.0,INLAND +-121.55,38.59,36.0,435.0,95.0,285.0,90.0,1.2292,69600.0,INLAND +-121.63,38.67,34.0,431.0,85.0,391.0,77.0,2.625,225000.0,INLAND +-121.52,38.58,24.0,938.0,275.0,508.0,253.0,1.642,32500.0,INLAND +-121.53,38.56,39.0,2438.0,483.0,1103.0,472.0,2.9375,86600.0,INLAND +-121.52,38.57,43.0,2360.0,471.0,1041.0,452.0,2.89,86200.0,INLAND +-121.54,38.58,30.0,4648.0,1252.0,2524.0,1089.0,1.3177,74300.0,INLAND +-121.56,38.58,32.0,2070.0,561.0,2046.0,523.0,1.9426,82300.0,INLAND +-121.53,38.58,33.0,4988.0,1169.0,2414.0,1075.0,1.9728,76400.0,INLAND +-121.53,38.58,35.0,1316.0,321.0,732.0,336.0,2.1213,79200.0,INLAND +-121.53,38.57,34.0,3395.0,592.0,1518.0,627.0,4.0833,118500.0,INLAND +-121.54,38.54,36.0,1672.0,302.0,969.0,337.0,3.0536,73100.0,INLAND +-121.55,38.51,22.0,2403.0,431.0,1088.0,421.0,3.9,146900.0,INLAND +-121.55,38.55,10.0,6227.0,1164.0,2909.0,1077.0,4.106,115900.0,INLAND +-121.56,38.44,43.0,1485.0,270.0,653.0,251.0,3.0,141700.0,INLAND +-121.61,38.38,37.0,1365.0,276.0,952.0,268.0,4.037,156900.0,INLAND +-121.79,38.54,7.0,1777.0,513.0,4479.0,504.0,1.4653,310000.0,INLAND +-121.8,38.55,11.0,5121.0,899.0,2258.0,901.0,4.7168,223200.0,INLAND +-121.78,38.55,12.0,10509.0,2186.0,5633.0,2138.0,2.9605,204300.0,INLAND +-121.76,38.57,11.0,15018.0,3008.0,7984.0,2962.0,3.1371,201800.0,INLAND +-121.81,38.58,17.0,1964.0,314.0,808.0,286.0,5.9629,286000.0,INLAND +-121.7,38.6,16.0,2372.0,588.0,1400.0,583.0,2.8922,153600.0,INLAND +-121.67,38.54,13.0,6141.0,1019.0,2553.0,967.0,4.2432,326500.0,INLAND +-121.74,38.56,18.0,3960.0,1151.0,2248.0,1144.0,1.7257,179100.0,INLAND +-121.74,38.55,34.0,2299.0,579.0,1300.0,536.0,1.6435,148500.0,INLAND +-121.73,38.55,34.0,1717.0,393.0,1224.0,387.0,2.7917,130800.0,INLAND +-121.73,38.54,18.0,974.0,317.0,521.0,317.0,1.0633,137500.0,INLAND +-121.73,38.56,30.0,3306.0,629.0,1623.0,648.0,2.8614,145200.0,INLAND +-121.71,38.56,20.0,8627.0,1516.0,4071.0,1466.0,4.2198,164100.0,INLAND +-121.72,38.54,16.0,2790.0,624.0,1386.0,636.0,3.1908,194300.0,INLAND +-121.7,38.54,13.0,6819.0,1158.0,2828.0,1115.0,4.6225,226500.0,INLAND +-121.75,38.55,33.0,2479.0,382.0,979.0,377.0,4.7308,236200.0,INLAND +-121.74,38.55,33.0,6861.0,1820.0,3717.0,1767.0,1.7311,182600.0,INLAND +-121.76,38.55,23.0,8800.0,1857.0,6330.0,1832.0,2.065,219400.0,INLAND +-121.75,38.55,26.0,4802.0,950.0,2199.0,939.0,3.7452,227700.0,INLAND +-121.77,38.69,47.0,1697.0,318.0,775.0,276.0,3.4559,123100.0,INLAND +-121.77,38.68,43.0,2559.0,598.0,1820.0,591.0,2.1927,107900.0,INLAND +-121.76,38.68,38.0,674.0,178.0,701.0,189.0,1.3942,69400.0,INLAND +-121.8,38.69,8.0,3544.0,691.0,2118.0,678.0,3.7477,122200.0,INLAND +-121.79,38.69,23.0,1755.0,321.0,1061.0,313.0,2.8864,103100.0,INLAND +-121.78,38.69,31.0,2547.0,535.0,1579.0,509.0,2.6774,95800.0,INLAND +-121.8,38.68,11.0,3851.0,892.0,1847.0,747.0,3.4331,120600.0,INLAND +-121.79,38.68,24.0,3794.0,848.0,2225.0,864.0,2.8068,95300.0,INLAND +-121.78,38.68,39.0,2806.0,662.0,1659.0,638.0,1.9787,97800.0,INLAND +-121.8,38.67,11.0,3251.0,623.0,1700.0,615.0,3.1875,172000.0,INLAND +-121.79,38.67,17.0,2875.0,810.0,1876.0,749.0,1.951,152500.0,INLAND +-121.78,38.68,43.0,3766.0,847.0,1855.0,817.0,2.3468,119400.0,INLAND +-121.8,38.67,10.0,2086.0,380.0,1073.0,378.0,4.5526,154400.0,INLAND +-121.79,38.67,30.0,2602.0,401.0,981.0,405.0,4.7222,167200.0,INLAND +-121.78,38.67,38.0,2948.0,478.0,1123.0,460.0,4.0556,146900.0,INLAND +-121.77,38.67,42.0,2670.0,518.0,1548.0,534.0,2.2794,108900.0,INLAND +-121.77,38.67,45.0,2438.0,462.0,1415.0,510.0,2.8351,107200.0,INLAND +-121.75,38.67,9.0,12139.0,2640.0,6837.0,2358.0,3.125,132500.0,INLAND +-121.71,38.72,32.0,710.0,155.0,550.0,154.0,2.8882,151400.0,INLAND +-121.7,38.65,22.0,1360.0,282.0,808.0,229.0,2.4167,225000.0,INLAND +-121.84,38.65,29.0,3167.0,548.0,1554.0,534.0,4.3487,200700.0,INLAND +-121.79,38.66,15.0,6809.0,1052.0,3060.0,1060.0,5.3064,165000.0,INLAND +-121.78,38.66,18.0,4224.0,632.0,1907.0,641.0,4.8226,139900.0,INLAND +-121.76,38.66,17.0,5320.0,984.0,2866.0,928.0,4.1997,133400.0,INLAND +-121.96,38.54,6.0,1485.0,318.0,894.0,308.0,3.2222,139600.0,INLAND +-121.99,38.53,6.0,4598.0,834.0,2561.0,812.0,3.4186,127300.0,INLAND +-121.98,38.52,27.0,3044.0,565.0,1583.0,514.0,2.7989,126700.0,INLAND +-122.05,38.56,20.0,1005.0,168.0,457.0,157.0,5.679,225000.0,INLAND +-121.92,38.57,10.0,1320.0,246.0,898.0,228.0,1.9327,193800.0,INLAND +-121.9,38.72,38.0,575.0,107.0,259.0,109.0,3.75,187500.0,INLAND +-122.0,38.83,26.0,272.0,49.0,194.0,52.0,3.4187,98400.0,INLAND +-121.94,38.89,15.0,1462.0,314.0,774.0,271.0,2.5478,91700.0,INLAND +-121.81,38.84,37.0,352.0,65.0,238.0,67.0,2.8542,275000.0,INLAND +-121.72,38.8,36.0,1069.0,228.0,567.0,190.0,1.9559,78400.0,INLAND +-121.77,38.76,32.0,1950.0,385.0,1145.0,363.0,2.8365,87900.0,INLAND +-122.21,38.83,20.0,1138.0,221.0,459.0,209.0,3.1534,123400.0,INLAND +-122.16,38.9,33.0,1221.0,236.0,488.0,199.0,3.7574,92700.0,INLAND +-122.0,38.73,31.0,371.0,74.0,208.0,84.0,3.875,137500.0,INLAND +-121.95,38.65,19.0,1265.0,228.0,755.0,218.0,3.3472,69800.0,INLAND +-122.04,38.68,26.0,1113.0,222.0,689.0,234.0,3.0486,83600.0,INLAND +-122.03,38.69,23.0,1796.0,380.0,939.0,330.0,2.7955,96300.0,INLAND +-121.6,39.15,19.0,1396.0,336.0,940.0,309.0,1.5208,70300.0,INLAND +-121.59,39.15,5.0,1922.0,489.0,938.0,439.0,2.0474,61300.0,INLAND +-121.59,39.15,48.0,1783.0,399.0,938.0,374.0,1.6652,58900.0,INLAND +-121.59,39.14,41.0,1492.0,350.0,804.0,353.0,1.684,71300.0,INLAND +-121.58,39.15,34.0,1376.0,376.0,702.0,317.0,1.4946,55500.0,INLAND +-121.58,39.14,52.0,662.0,160.0,520.0,149.0,0.8928,55000.0,INLAND +-121.58,39.16,36.0,1206.0,197.0,537.0,204.0,3.3611,79800.0,INLAND +-121.57,39.16,21.0,1872.0,302.0,870.0,301.0,3.725,84700.0,INLAND +-121.56,39.16,12.0,3349.0,642.0,2029.0,619.0,2.9647,88800.0,INLAND +-121.57,39.16,33.0,2033.0,375.0,914.0,330.0,2.6964,68500.0,INLAND +-121.58,39.16,33.0,1897.0,378.0,888.0,385.0,2.1111,68700.0,INLAND +-121.58,39.15,38.0,1756.0,396.0,837.0,401.0,1.9122,55500.0,INLAND +-121.56,39.16,35.0,2157.0,441.0,1009.0,409.0,1.5827,63000.0,INLAND +-121.57,39.16,18.0,1632.0,367.0,769.0,330.0,3.1029,71700.0,INLAND +-121.57,39.13,30.0,442.0,103.0,413.0,88.0,1.5694,57900.0,INLAND +-121.56,39.13,17.0,2277.0,608.0,1607.0,562.0,1.5085,69700.0,INLAND +-121.54,39.13,18.0,4289.0,1021.0,2707.0,939.0,1.3375,59600.0,INLAND +-121.54,39.12,17.0,4251.0,899.0,3265.0,934.0,2.3496,65000.0,INLAND +-121.58,39.12,26.0,2796.0,629.0,2017.0,632.0,1.8355,61200.0,INLAND +-121.57,39.12,30.0,2601.0,534.0,1702.0,506.0,2.08,56600.0,INLAND +-121.57,39.1,28.0,1442.0,333.0,832.0,286.0,1.8413,62300.0,INLAND +-121.59,39.1,24.0,1107.0,261.0,768.0,205.0,1.7167,48800.0,INLAND +-121.56,39.11,18.0,2171.0,480.0,1527.0,447.0,2.3011,57500.0,INLAND +-121.56,39.1,28.0,2130.0,484.0,1195.0,439.0,1.3631,45500.0,INLAND +-121.55,39.1,27.0,1783.0,441.0,1163.0,409.0,1.2857,47000.0,INLAND +-121.56,39.08,26.0,1377.0,289.0,761.0,267.0,1.4934,48300.0,INLAND +-121.55,39.09,31.0,1728.0,365.0,1167.0,384.0,1.4958,53400.0,INLAND +-121.54,39.08,26.0,2276.0,460.0,1455.0,474.0,2.4695,58000.0,INLAND +-121.54,39.08,23.0,1076.0,216.0,724.0,197.0,2.3598,57500.0,INLAND +-121.53,39.08,15.0,1810.0,441.0,1157.0,375.0,2.0469,55100.0,INLAND +-121.53,39.06,20.0,561.0,109.0,308.0,114.0,3.3021,70800.0,INLAND +-121.55,39.06,25.0,1332.0,247.0,726.0,226.0,2.25,63400.0,INLAND +-121.56,39.01,22.0,1891.0,340.0,1023.0,296.0,2.7303,99100.0,INLAND +-121.48,39.05,40.0,198.0,41.0,151.0,48.0,4.5625,100000.0,INLAND +-121.47,39.01,37.0,1244.0,247.0,484.0,157.0,2.3661,77500.0,INLAND +-121.44,39.0,20.0,755.0,147.0,457.0,157.0,2.4167,67000.0,INLAND +-121.37,39.03,32.0,1158.0,244.0,598.0,227.0,2.8235,65500.0,INLAND +-121.41,39.04,16.0,1698.0,300.0,731.0,291.0,3.0739,87200.0,INLAND +-121.52,39.12,37.0,102.0,17.0,29.0,14.0,4.125,72000.0,INLAND +-121.43,39.18,36.0,1124.0,184.0,504.0,171.0,2.1667,93800.0,INLAND +-121.32,39.13,5.0,358.0,65.0,169.0,59.0,3.0,162500.0,INLAND +-121.48,39.1,19.0,2043.0,421.0,1018.0,390.0,2.5952,92400.0,INLAND +-121.39,39.12,28.0,10035.0,1856.0,6912.0,1818.0,2.0943,108300.0,INLAND +-121.32,39.29,11.0,2640.0,505.0,1257.0,445.0,3.5673,112000.0,INLAND +-121.4,39.33,15.0,2655.0,493.0,1200.0,432.0,3.5179,107200.0,INLAND +-121.45,39.26,15.0,2319.0,416.0,1047.0,385.0,3.125,115600.0,INLAND +-121.53,39.19,27.0,2080.0,412.0,1082.0,382.0,2.5495,98300.0,INLAND +-121.56,39.27,28.0,2332.0,395.0,1041.0,344.0,3.7125,116800.0,INLAND +-121.09,39.48,25.0,1665.0,374.0,845.0,330.0,1.5603,78100.0,INLAND +-121.21,39.49,18.0,697.0,150.0,356.0,114.0,2.5568,77100.0,INLAND +-121.22,39.43,17.0,2254.0,485.0,1007.0,433.0,1.7,92300.0,INLAND +-121.32,39.43,18.0,1860.0,409.0,741.0,349.0,1.8672,84700.0,INLAND +-121.24,39.37,16.0,2785.0,616.0,1387.0,530.0,2.3886,89400.0,INLAND From edcebae9642abae5f0419cc857aace876a07b709 Mon Sep 17 00:00:00 2001 From: Gauthier Segay Date: Thu, 31 Oct 2019 18:17:47 +0100 Subject: [PATCH 068/214] Add tests/fsharp/readme.md (#6681) * init a basic readme.md for fsharp test suite * fix title and try to add link * case sensitive? * Update layout. * Update readme.md --- tests/fsharp/readme.md | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tests/fsharp/readme.md diff --git a/tests/fsharp/readme.md b/tests/fsharp/readme.md new file mode 100644 index 0000000000..c12bf5a5e4 --- /dev/null +++ b/tests/fsharp/readme.md @@ -0,0 +1,67 @@ +# F# Compiler Cross-Platform Test Suite + +## Layout + +The tests are NUNIT test cases.. They test a very wide range of compiler, interactive and FSharp.Core scenarios. + +The bulk of the test cases are enumerated in tests.fs, these are the old cambridge test suite. They build on a test-suite ported from windows batch files. They run the compiler and fsi as seperate processes, when built for the coreclr it runs the coreclr versions using dotnet.exe + +The framework and utilities can be found in test-framework.fs, single-test.fs, coreclr_utilities.fs. + +test cases look similar to: +```` + [] + let ``array-FSI_BASIC`` () = singleTestBuildAndRun "core/array" FSI_BASIC +```` +This test case builds and runs the test case in the folder core/array + +this #define is used to exclude from the build tests that run will not run correctly on the coreclr +__#if !FSHARP_SUITE_DRIVES_CORECLR_TESTS__ + +There are some older tests in this section that looks similar to: +```` + [] + let events () = + let cfg = testConfig "core/events" + fsc cfg "%s -a -o:test.dll -g" cfg.fsc_flags ["test.fs"] + peverify cfg "test.dll" + csc cfg """/r:"%s" /reference:test.dll /debug+""" cfg.FSCOREDLLPATH ["testcs.cs"] + peverify cfg "testcs.exe" + use testOkFile = fileguard cfg "test.ok" + fsi cfg "" ["test.fs"] + testOkFile.CheckExists() + exec cfg ("." ++ "testcs.exe") "" +```` +These tests build, compile, peverify and run fsi. + +Below the Compiler directory there is a set of tests built on the compiler service. They are nunit and instead of executing the compiler and fsi using files on disk the tests are built from memory. These tests use the CompilerAssert framework and look similar to: + +This test verifies that a warning is produces when a value is implicitly discarded. The line ````x = 20``` looks like an assignment but in F# is a test for equality it yields and discards the value false. +```` + [] + let ``Unused compare with immutable when assignment might be intended``() = + CompilerAssert.TypeCheckSingleError + """ +let x = 10 +let y = "hello" + +let changeX() = + x = 20 + y = "test" + """ + FSharpErrorSeverity.Warning + 20 + (6, 5, 6, 11) + "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. 'x <- expression'." +```` + + +## Workflow when adding or fixing tests + +When a test is run, .err/.vserr output files are created and compared to their matching .bsl files. + +When many tests fail due to a change being worked on, the [update.base.line.with.actuals.fsx](update.base.line.with.actuals.fsx) script helps updating the .bsl against the actuals. + +After editing the folder list, evaluating the script should replace the .bsl files with actual .err/.vserr, after which the same test is supposed to pass. + +Tests are organized under modules as functions bearing NUnit `[]` attribute and can be run from an IDE or the command line (see the [Test Guide](../../TESTGUIDE.md)). From 349cfb476c6060da2c6be2e8511b5dda02050661 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 31 Oct 2019 16:16:08 -0700 Subject: [PATCH 069/214] add events to #r nuget (#7796) * add events to #r nuget Includes events for dependency add start, successful completion, and failure. * remove unnecessary keyword that was redundant and didn't need to be there * fire events for each unique package referenced --- src/fsharp/DependencyManager.Integration.fs | 30 ++++++-- src/fsharp/DependencyManager.Integration.fsi | 8 ++- .../FSharpScript.fs | 10 +++ src/fsharp/fsi/fsi.fs | 31 +++++++- src/fsharp/fsi/fsi.fsi | 15 +++- .../DependencyManagerInteractiveTests.fs | 71 ++++++++++++++++++- .../FSharp.DependencyManager.UnitTests.fsproj | 3 +- .../FSharpScript.fs | 58 --------------- .../TextHelpers.fs | 36 ---------- 9 files changed, 152 insertions(+), 110 deletions(-) delete mode 100644 tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs delete mode 100644 tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs diff --git a/src/fsharp/DependencyManager.Integration.fs b/src/fsharp/DependencyManager.Integration.fs index 07b2c323ea..9f1ecd35f3 100644 --- a/src/fsharp/DependencyManager.Integration.fs +++ b/src/fsharp/DependencyManager.Integration.fs @@ -4,11 +4,11 @@ module internal FSharp.Compiler.DependencyManagerIntegration open System -open System.Reflection open System.IO +open System.Reflection +open FSharp.Compiler.DotNetFrameworkDependencies open FSharp.Compiler.ErrorLogger open Internal.Utilities.FSharpEnvironment -open FSharp.Compiler.DotNetFrameworkDependencies // Contract strings let dependencyManagerPattern = "*DependencyManager*.dll" @@ -60,9 +60,12 @@ module ReflectionHelper = (* Shape of Dependency Manager contract, resolved using reflection *) type internal IDependencyManagerProvider = - abstract Name : string + abstract Name: string abstract Key: string - abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq * tfm: string -> bool * string list * string list + abstract ResolveDependencies: scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq * tfm: string -> bool * string list * string list + abstract DependencyAdding: IEvent + abstract DependencyAdded: IEvent + abstract DependencyFailed: IEvent [] type ReferenceType = @@ -75,6 +78,10 @@ type ReflectionDependencyManagerProvider(theType: Type, nameProperty: PropertyIn let nameProperty = nameProperty.GetValue >> string let keyProperty = keyProperty.GetValue >> string + let dependencyAddingEvent = Event<_>() + let dependencyAddedEvent = Event<_>() + let dependencyFailedEvent = Event<_>() + static member InstanceMaker (theType: System.Type, outputDir: string option) = match ReflectionHelper.getAttributeNamed theType dependencyManagerAttributeName, ReflectionHelper.getInstanceProperty theType namePropertyName, @@ -91,9 +98,20 @@ type ReflectionDependencyManagerProvider(theType: Type, nameProperty: PropertyIn interface IDependencyManagerProvider with member __.Name = instance |> nameProperty member __.Key = instance |> keyProperty - member __.ResolveDependencies(scriptDir, mainScriptName, scriptName, packageManagerTextLines, tfm) = + member this.ResolveDependencies(scriptDir, mainScriptName, scriptName, packageManagerTextLines, tfm) = + let key = (this :> IDependencyManagerProvider).Key + let triggerEvent (evt: Event) = + for prLine in packageManagerTextLines do + evt.Trigger(key, prLine) + triggerEvent dependencyAddingEvent let arguments = [| box scriptDir; box mainScriptName; box scriptName; box packageManagerTextLines; box tfm |] - resolveDeps.Invoke(instance, arguments) :?> _ + let succeeded, generatedScripts, additionalIncludeFolders = resolveDeps.Invoke(instance, arguments) :?> _ + if succeeded then triggerEvent dependencyAddedEvent + else triggerEvent dependencyFailedEvent + succeeded, generatedScripts, additionalIncludeFolders + member __.DependencyAdding = dependencyAddingEvent.Publish + member __.DependencyAdded = dependencyAddedEvent.Publish + member __.DependencyFailed = dependencyFailedEvent.Publish // Resolution Path = Location of FSharp.Compiler.Private.dll let assemblySearchPaths = lazy ( diff --git a/src/fsharp/DependencyManager.Integration.fsi b/src/fsharp/DependencyManager.Integration.fsi index fa68ac8840..62af44898d 100644 --- a/src/fsharp/DependencyManager.Integration.fsi +++ b/src/fsharp/DependencyManager.Integration.fsi @@ -4,12 +4,14 @@ module internal FSharp.Compiler.DependencyManagerIntegration open FSharp.Compiler.Range -open System type IDependencyManagerProvider = - abstract Name : string + abstract Name: string abstract Key: string - abstract ResolveDependencies : scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq * tfm: string -> bool * string list * string list + abstract ResolveDependencies: scriptDir: string * mainScriptName: string * scriptName: string * packageManagerTextLines: string seq * tfm: string -> bool * string list * string list + abstract DependencyAdding: IEvent + abstract DependencyAdded: IEvent + abstract DependencyFailed: IEvent [] type ReferenceType = diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 1d79c01746..1394751e3b 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -39,8 +39,18 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st let argv = Array.append baseArgs additionalArgs let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr) + [] member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + [] + member __.DependencyAdding = fsi.DependencyAdding + + [] + member __.DependencyAdded = fsi.DependencyAdded + + [] + member __.DependencyFailed = fsi.DependencyFailed + member __.ProvideInput = stdin.ProvideInput member __.OutputProduced = outputProduced.Publish diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 98bdb1886a..442305ef9b 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -964,12 +964,17 @@ type internal FsiDynamicCompiler let assemblyName = "FSI-ASSEMBLY" let assemblyReferenceAddedEvent = Control.Event() + let dependencyAddingEvent = Control.Event() + let dependencyAddedEvent = Control.Event() + let dependencyFailedEvent = Control.Event() let mutable fragmentId = 0 let mutable prevIt : ValRef option = None let mutable needsPackageResolution = false + let mutable subscribedDependencyManagers = HashSet() + let generateDebugInfo = tcConfigB.debuginfo let valuePrinter = FsiValuePrinter(fsi, tcGlobals, generateDebugInfo, resolveAssemblyRef, outWriter) @@ -1295,6 +1300,11 @@ type internal FsiDynamicCompiler let removeErrorLinesFromScript () = tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map(fun _ l -> l |> List.filter(fun (tried, _, _) -> tried)) try + let newDependencyManager = subscribedDependencyManagers.Add(packageManagerKey) + if newDependencyManager then + Event.add dependencyAddingEvent.Trigger packageManager.DependencyAdding + Event.add dependencyAddedEvent.Trigger packageManager.DependencyAdded + Event.add dependencyFailedEvent.Trigger packageManager.DependencyFailed match DependencyManagerIntegration.resolve packageManager tcConfigB.implicitIncludeDir "stdin.fsx" "stdin.fsx" m packageManagerTextLines with | None -> istate // error already reported | Some (succeeded, generatedScripts, additionalIncludeFolders) -> //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -1302,7 +1312,7 @@ type internal FsiDynamicCompiler tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map(fun _ l -> l |> List.map(fun (_, p, m) -> true, p, m)) else removeErrorLinesFromScript () - for folder in additionalIncludeFolders do + for folder in additionalIncludeFolders do tcConfigB.AddIncludePath(m, folder, "") if generatedScripts.Length > 0 then fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, generatedScripts, lexResourceManager, errorLogger) @@ -1396,6 +1406,12 @@ type internal FsiDynamicCompiler member __.AssemblyReferenceAdded = assemblyReferenceAddedEvent.Publish + member __.DependencyAdding = dependencyAddingEvent.Publish + + member __.DependencyAdded = dependencyAddedEvent.Publish + + member __.DependencyFailed = dependencyFailedEvent.Publish + //---------------------------------------------------------------------------- // ctrl-c handling //---------------------------------------------------------------------------- @@ -2842,8 +2858,21 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResultNonThrowing errorOptions scriptPath errorLogger |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs + [] /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. member __.AssemblyReferenceAdded = fsiDynamicCompiler.AssemblyReferenceAdded + + [] + /// Event fires at the start of adding a dependency via the dependency manager. + member __.DependencyAdding = fsiDynamicCompiler.DependencyAdding + + [] + /// Event fires at the successful completion of adding a dependency via the dependency manager. + member __.DependencyAdded = fsiDynamicCompiler.DependencyAdded + + [] + /// Event fires at the failure to adding a dependency via the dependency manager. + member __.DependencyFailed = fsiDynamicCompiler.DependencyFailed /// Performs these steps: /// - Load the dummy interaction, if any diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index bed1b74e61..e59561c0fd 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -234,8 +234,21 @@ type FsiEvaluationSession = /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr member ReportUnhandledException : exn: exn -> unit + [] /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. - member AssemblyReferenceAdded : IEvent + member AssemblyReferenceAdded: IEvent + + [] + /// Event fires at the start of adding a dependency via the dependency manager. + member DependencyAdding: IEvent + + [] + /// Event fires at the successful completion of adding a dependency via the dependency manager. + member DependencyAdded: IEvent + + [] + /// Event fires at the failure to adding a dependency via the dependency manager. + member DependencyFailed: IEvent /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. diff --git a/tests/FSharp.DependencyManager.UnitTests/DependencyManagerInteractiveTests.fs b/tests/FSharp.DependencyManager.UnitTests/DependencyManagerInteractiveTests.fs index 94dafec5b3..1b15cd7cfa 100644 --- a/tests/FSharp.DependencyManager.UnitTests/DependencyManagerInteractiveTests.fs +++ b/tests/FSharp.DependencyManager.UnitTests/DependencyManagerInteractiveTests.fs @@ -4,8 +4,8 @@ namespace FSharp.DependencyManager.UnitTests open System open System.IO -open System.Threading open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.Scripting open FSharp.Compiler.SourceCodeServices open NUnit.Framework @@ -22,12 +22,14 @@ type DependencyManagerInteractiveTests() = let ignoreValue = getValue >> ignore + let scriptHost () = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) + [] member __.``SmokeTest - #r nuget``() = let text = """ #r @"nuget:System.Collections.Immutable, version=1.5.0" 0""" - use script = new FSharpScript() + use script = scriptHost() let mutable assemblyResolveEventCount = 0 let mutable foundAssemblyReference = false Event.add (fun (assembly: string) -> @@ -46,7 +48,7 @@ type DependencyManagerInteractiveTests() = let text = """ #r @"nuget:System.Collections.Immutable.DoesNotExist, version=1.5.0" 0""" - use script = new FSharpScript() + use script = scriptHost() let mutable assemblyResolveEventCount = 0 Event.add (fun (assembly: string) -> assemblyResolveEventCount <- assemblyResolveEventCount + 1) @@ -56,3 +58,66 @@ type DependencyManagerInteractiveTests() = Assert.AreEqual(typeof, value.ReflectionType) Assert.AreEqual(0, value.ReflectionValue :?> int) Assert.AreEqual(0, assemblyResolveEventCount) + + [] + member __.``Dependency add events successful``() = + let referenceText = "System.Collections.Immutable, version=1.5.0" + let text = referenceText |> sprintf """ +#r @"nuget:%s" +0""" + use script = scriptHost() + let mutable dependencyAddingEventCount = 0 + let mutable dependencyAddedEventCount = 0 + let mutable foundDependencyAdding = false + let mutable foundDependencyAdded = false + Event.add (fun (dep: string * string) -> + let key, dependency = dep + dependencyAddingEventCount <- dependencyAddingEventCount + 1 + foundDependencyAdding <- foundDependencyAdding || (key = "nuget" && dependency = referenceText)) + script.DependencyAdding + Event.add (fun (dep: string * string) -> + let key, dependency = dep + dependencyAddedEventCount <- dependencyAddedEventCount + 1 + foundDependencyAdded <- foundDependencyAdded || (key = "nuget" && dependency = referenceText)) + script.DependencyAdded + script.Eval(text) |> ignoreValue + Assert.AreEqual(1, dependencyAddingEventCount) + Assert.AreEqual(1, dependencyAddedEventCount) + Assert.AreEqual(true, foundDependencyAdding) + Assert.AreEqual(true, foundDependencyAdded) + + [] + member __.``Dependency add events failed``() = + let referenceText = "System.Collections.Immutable.DoesNotExist, version=1.5.0" + let text = referenceText |> sprintf """ +#r @"nuget:%s" +0""" + use script = scriptHost() + let mutable dependencyAddingEventCount = 0 + let mutable dependencyFailedEventCount = 0 + let mutable foundDependencyAdding = false + let mutable foundDependencyFailed = false + Event.add (fun (dep: string * string) -> + let key, dependency = dep + dependencyAddingEventCount <- dependencyAddingEventCount + 1 + foundDependencyAdding <- foundDependencyAdding || (key = "nuget" && dependency = referenceText)) + script.DependencyAdding + Event.add (fun (dep: string * string) -> + let key, dependency = dep + dependencyFailedEventCount <- dependencyFailedEventCount + 1 + foundDependencyFailed <- foundDependencyFailed || (key = "nuget" && dependency = referenceText)) + script.DependencyFailed + script.Eval(text) |> ignoreValue + Assert.AreEqual(1, dependencyAddingEventCount) + Assert.AreEqual(1, dependencyFailedEventCount) + Assert.AreEqual(true, foundDependencyAdding) + Assert.AreEqual(true, foundDependencyFailed) + + [] + member __.``Dependency add events aren't repeated``() = + use script = scriptHost() + let mutable dependencyAddingEventCount = 0 + Event.add (fun _ -> dependencyAddingEventCount <- dependencyAddingEventCount + 1) script.DependencyAdding + script.Eval("#r \"nuget:System.Collections.Immutable, Version=1.5.0\"") |> ignoreValue + script.Eval("#r \"nuget:Newtonsoft.Json, Version=9.0.1\"\n0") |> ignoreValue + Assert.AreEqual(2, dependencyAddingEventCount) diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj index 5f402a492c..042986e8ad 100644 --- a/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj +++ b/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj @@ -11,8 +11,6 @@ - - @@ -21,6 +19,7 @@ + diff --git a/tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs b/tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs deleted file mode 100644 index 9b726af1c9..0000000000 --- a/tests/FSharp.DependencyManager.UnitTests/FSharpScript.fs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.DependencyManager.UnitTests - -open System -open FSharp.Compiler.Interactive.Shell - -type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = - let outputProduced = Event() - let errorProduced = Event() - - // handle stdin/stdout - let stdin = new CapturedTextReader() - let stdout = new EventedTextWriter() - let stderr = new EventedTextWriter() - do stdout.LineWritten.Add outputProduced.Trigger - do stderr.LineWritten.Add errorProduced.Trigger - let captureInput = defaultArg captureInput false - let captureOutput = defaultArg captureOutput false - let savedInput = Console.In - let savedOutput = Console.Out - let savedError = Console.Error - do (fun () -> - if captureInput then - Console.SetIn(stdin) - if captureOutput then - Console.SetOut(stdout) - Console.SetError(stderr) - ())() - - let config = FsiEvaluationSession.GetDefaultConfiguration() - let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet"; "--langversion:preview" |] - let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) - - member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded - - member __.ProvideInput = stdin.ProvideInput - - member __.OutputProduced = outputProduced.Publish - - member __.ErrorProduced = errorProduced.Publish - - member __.Eval(code: string) = - let ch, errors = fsi.EvalInteractionNonThrowing code - match ch with - | Choice1Of2 v -> Ok(v), errors - | Choice2Of2 ex -> Error(ex), errors - - interface IDisposable with - member __.Dispose() = - if captureInput then - Console.SetIn(savedInput) - if captureOutput then - Console.SetOut(savedOutput) - Console.SetError(savedError) - stdin.Dispose() - stdout.Dispose() - stderr.Dispose() \ No newline at end of file diff --git a/tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs b/tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs deleted file mode 100644 index 503be87b7b..0000000000 --- a/tests/FSharp.DependencyManager.UnitTests/TextHelpers.fs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.DependencyManager.UnitTests - -open System.Collections.Generic -open System.IO -open System.Text - -type internal CapturedTextReader() = - inherit TextReader() - let queue = Queue() - member __.ProvideInput(text: string) = - for c in text.ToCharArray() do - queue.Enqueue(c) - override __.Peek() = - if queue.Count > 0 then queue.Peek() |> int - else -1 - override __.Read() = - if queue.Count > 0 then queue.Dequeue() |> int - else -1 - -type internal EventedTextWriter() = - inherit TextWriter() - let sb = StringBuilder() - let lineWritten = Event() - member __.LineWritten = lineWritten.Publish - override __.Encoding = Encoding.UTF8 - override __.Write(c: char) = - if c = '\n' then - let line = - let v = sb.ToString() - if v.EndsWith("\r") then v.Substring(0, v.Length - 1) - else v - sb.Clear() |> ignore - lineWritten.Trigger(line) - else sb.Append(c) |> ignore From 6d96c913573f93f88ac40bf821ce715b65d60653 Mon Sep 17 00:00:00 2001 From: TIHan Date: Fri, 1 Nov 2019 19:01:33 -0700 Subject: [PATCH 070/214] Use cache value if available early in a let binding. Stops from having to traverse entire expr. --- src/fsharp/TastOps.fs | 19 +++++++++++++------ src/fsharp/lib.fs | 4 ++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 5ea0d49b52..94d0bcffae 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -4388,6 +4388,10 @@ let bindLhs opts (bind: Binding) fvs = boundLocalVal opts bind.Var fvs let freeVarsCacheCompute opts cache f = if opts.canCache then cached cache f else f() +let tryGetFreeVarsCacheValue opts cache = + if opts.canCache then tryGetCacheValue cache + else ValueNone + let rec accBindRhs opts (TBind(_, repr, _)) acc = accFreeInExpr opts repr acc and accFreeInSwitchCases opts csl dflt (acc: FreeVars) = @@ -4485,13 +4489,16 @@ and accFreeInExpr (opts: FreeVarOptions) x acc = and accFreeInExprLinear (opts: FreeVarOptions) x acc contf = // for nested let-bindings, we need to continue after the whole let-binding is processed match x with - | Expr.Let (bind, e, _, cache) -> - let contf = contf << (fun free -> - unionFreeVars (freeVarsCacheCompute opts cache (fun () -> bindLhs opts bind (accBindRhs opts bind free))) acc ) - accFreeInExprLinear opts e emptyFreeVars contf + | Expr.Let (bind, e, _, cache) -> + match tryGetFreeVarsCacheValue opts cache with + | ValueSome free -> contf (unionFreeVars free acc) + | _ -> + accFreeInExprLinear opts e emptyFreeVars (contf << (fun free -> + unionFreeVars (freeVarsCacheCompute opts cache (fun () -> bindLhs opts bind (accBindRhs opts bind free))) acc + )) | _ -> - // No longer linear expr - accFreeInExpr opts x acc |> contf + // No longer linear expr + contf (accFreeInExpr opts x acc) and accFreeInExprNonLinear opts x acc = match x with diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 8d5fa3f0af..7ed3521ca3 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -394,6 +394,10 @@ let inline cacheOptRef cache f = cache := Some res res +let inline tryGetCacheValue cache = + match box cache.cacheVal with + | null -> ValueNone + | _ -> ValueSome cache.cacheVal #if DUMPER type Dumper(x:obj) = From 49f0da87329a58c70862778500d8e71aae6ca1b4 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 1 Nov 2019 20:15:39 -0700 Subject: [PATCH 071/214] fire an event every time an include path is added (#7807) E.g., when `#I ...` occurs in a script or interactive session. --- src/fsharp/CompileOps.fs | 8 ++++- src/fsharp/CompileOps.fsi | 5 +++- .../FSharpScript.fs | 3 ++ src/fsharp/fsi/fsi.fs | 9 +++++- src/fsharp/fsi/fsi.fsi | 4 +++ .../FSharpScriptTests.fs | 30 ++++++++++++++++++- 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index adce5f8684..699d3dd673 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2167,6 +2167,8 @@ type TcConfigBuilder = mutable pathMap: PathMap mutable langVersion: LanguageVersion + + mutable includePathAdded: string -> unit } static member Initial = @@ -2307,16 +2309,18 @@ type TcConfigBuilder = noConditionalErasure = false pathMap = PathMap.empty langVersion = LanguageVersion("default") + includePathAdded = ignore } static member CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, reduceMemoryUsage, implicitIncludeDir, - isInteractive, isInvalidationSupported, defaultCopyFSharpCore, tryGetMetadataSnapshot) = + isInteractive, isInvalidationSupported, defaultCopyFSharpCore, tryGetMetadataSnapshot, ?includePathAdded: string -> unit) = Debug.Assert(FileSystem.IsPathRootedShim implicitIncludeDir, sprintf "implicitIncludeDir should be absolute: '%s'" implicitIncludeDir) if (String.IsNullOrEmpty defaultFSharpBinariesDir) then failwith "Expected a valid defaultFSharpBinariesDir" + let includePathAdded = defaultArg includePathAdded ignore { TcConfigBuilder.Initial with implicitIncludeDir = implicitIncludeDir defaultFSharpBinariesDir = defaultFSharpBinariesDir @@ -2326,6 +2330,7 @@ type TcConfigBuilder = isInvalidationSupported = isInvalidationSupported copyFSharpCore = defaultCopyFSharpCore tryGetMetadataSnapshot = tryGetMetadataSnapshot + includePathAdded = includePathAdded } member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) = @@ -2401,6 +2406,7 @@ type TcConfigBuilder = | None -> false if ok && not (List.contains absolutePath tcConfigB.includes) then tcConfigB.includes <- tcConfigB.includes ++ absolutePath + tcConfigB.includePathAdded absolutePath member tcConfigB.AddLoadedSource(m, originalPath, pathLoadedFrom) = if FileSystem.IsInvalidPathShim originalPath then diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index a90d79968c..4029300997 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -388,6 +388,8 @@ type TcConfigBuilder = mutable pathMap : PathMap mutable langVersion : LanguageVersion + + mutable includePathAdded : string -> unit } static member Initial: TcConfigBuilder @@ -400,7 +402,8 @@ type TcConfigBuilder = isInteractive: bool * isInvalidationSupported: bool * defaultCopyFSharpCore: CopyFSharpCoreFlag * - tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot + tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * + ?includePathAdded: (string -> unit) -> TcConfigBuilder member DecideNames: string list -> outfile: string * pdbfile: string option * assemblyName: string diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 1394751e3b..967f498d97 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -42,6 +42,9 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st [] member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + [] + member __.IncludePathAdded = fsi.IncludePathAdded + [] member __.DependencyAdding = fsi.DependencyAdding diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 442305ef9b..f6eaa1db57 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -2546,6 +2546,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i | None -> SimulatedMSBuildReferenceResolver.getResolver() | Some rr -> rr + let includePathAddedEvent = Control.Event<_>() + let tcConfigB = TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir=defaultFSharpBinariesDir, @@ -2554,7 +2556,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i isInteractive=true, isInvalidationSupported=false, defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot) + tryGetMetadataSnapshot=tryGetMetadataSnapshot, + includePathAdded=includePathAddedEvent.Trigger) let tcConfigP = TcConfigProvider.BasedOnMutableBuilder(tcConfigB) do tcConfigB.resolutionEnvironment <- ResolutionEnvironment.CompilationAndEvaluation // See Bug 3608 @@ -2862,6 +2865,10 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. member __.AssemblyReferenceAdded = fsiDynamicCompiler.AssemblyReferenceAdded + [] + /// Event fires every time a path is added to the include search list, e.g., via `#I`. + member __.IncludePathAdded = includePathAddedEvent.Publish + [] /// Event fires at the start of adding a dependency via the dependency manager. member __.DependencyAdding = fsiDynamicCompiler.DependencyAdding diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index e59561c0fd..eb0d487b0f 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -238,6 +238,10 @@ type FsiEvaluationSession = /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. member AssemblyReferenceAdded: IEvent + [] + /// Event fires every time a path is added to the include search list, e.g., via `#I`. + member IncludePathAdded: IEvent + [] /// Event fires at the start of adding a dependency via the dependency manager. member DependencyAdding: IEvent diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index e68243f1aa..5968e2fa2c 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -5,6 +5,7 @@ namespace FSharp.Compiler.Scripting.UnitTests open System open System.Diagnostics open System.IO +open System.Reflection open System.Threading open System.Threading.Tasks open FSharp.Compiler.Interactive.Shell @@ -93,6 +94,30 @@ type InteractiveTests() = Assert.AreEqual(1, errors.Length) Assert.False(foundAssemblyReference) + [] + member __.``Add include path event successful``() = + use script = new FSharpScript() + let includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + let mutable includePathEventCount = 0 + let mutable foundIncludePath = false + Event.add (fun (inc: string) -> + includePathEventCount <- includePathEventCount + 1 + foundIncludePath <- foundIncludePath || String.Compare(includePath, inc, StringComparison.OrdinalIgnoreCase) = 0) + script.IncludePathAdded + script.Eval(sprintf "#I @\"%s\"" includePath) |> ignoreValue + Assert.AreEqual(1, includePathEventCount) + Assert.True(foundIncludePath) + + [] + member __.``Add include path event unsuccessful``() = + use script = new FSharpScript() + let includePath = Path.Combine("a", "path", "that", "can't", "be", "found") + let mutable foundIncludePath = false + Event.add (fun _ -> foundIncludePath <- true) script.IncludePathAdded + let _result, errors = script.Eval(sprintf "#I @\"%s\"" includePath) + Assert.AreEqual(1, errors.Length) + Assert.False(foundIncludePath) + [] member _.``Compilation errors report a specific exception``() = use script = new FSharpScript() @@ -113,11 +138,14 @@ type InteractiveTests() = [] member __.``Nuget reference fires multiple events``() = use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) - let mutable assemblyRefCount = 0; + let mutable assemblyRefCount = 0 + let mutable includeAddCount = 0 Event.add (fun _ -> assemblyRefCount <- assemblyRefCount + 1) script.AssemblyReferenceAdded + Event.add (fun _ -> includeAddCount <- includeAddCount + 1) script.IncludePathAdded script.Eval("#r \"nuget:include=NUnitLite, version=3.11.0\"") |> ignoreValue script.Eval("0") |> ignoreValue Assert.GreaterOrEqual(assemblyRefCount, 2) + Assert.GreaterOrEqual(includeAddCount, 1) /// Native dll resolution is not implemented on desktop #if NETSTANDARD From cf3dd5c7e0958a706b508f3134687597c520211c Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Sat, 2 Nov 2019 03:13:00 -0700 Subject: [PATCH 072/214] add package roots for assemblies to #I --- .../FSharp.DependencyManager.Utilities.fs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 19ac1fede5..1bbf6e243d 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -258,13 +258,13 @@ $(PACKAGEREFERENCES) Pkg$([System.String]::Copy('%(ResolvedCompileFileDefinitions.NugetPackageId)').Replace('.','_')) - $(%(FsxResolvedFile.PackageRootProperty)) + $([MSBuild]::EnsureTrailingSlash('$(%(FsxResolvedFile.PackageRootProperty))')) $(%(FsxResolvedFile.PackageRootProperty))\content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx - $([System.String]::Copy('%(FullPath)').Substring(0, $([System.String]::Copy('%(FullPath)').LastIndexOf('runtimes')))) + $([MSBuild]::EnsureTrailingSlash('$([System.String]::Copy('%(FullPath)').Substring(0, $([System.String]::Copy('%(FullPath)').LastIndexOf('runtimes'))))')) @@ -279,11 +279,12 @@ $(PACKAGEREFERENCES) - + - + + - + From e0209fec77cf93b6b5f8fc8d1904c41d19c8b40c Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2019 15:18:09 -0800 Subject: [PATCH 073/214] [master] Update dependencies from dotnet/arcade (#7706) * Update dependencies from https://github.com/dotnet/arcade build 20191004.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19504.2 * Update dependencies from https://github.com/dotnet/arcade build 20191005.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19505.1 * Update dependencies from https://github.com/dotnet/arcade build 20191006.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19506.1 * Update dependencies from https://github.com/dotnet/arcade build 20191009.5 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19509.5 * Update dependencies from https://github.com/dotnet/arcade build 20191010.4 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19510.4 * Update dependencies from https://github.com/dotnet/arcade build 20191011.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19511.1 * Update dependencies from https://github.com/dotnet/arcade build 20191015.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19515.1 * Update dependencies from https://github.com/dotnet/arcade build 20191015.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19515.2 * Update dependencies from https://github.com/dotnet/arcade build 20191017.8 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19517.8 * Update dependencies from https://github.com/dotnet/arcade build 20191018.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19518.2 * Update dependencies from https://github.com/dotnet/arcade build 20191021.4 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19521.4 * Update dependencies from https://github.com/dotnet/arcade build 20191022.8 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19522.8 * Update dependencies from https://github.com/dotnet/arcade build 20191023.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19523.3 * Update dependencies from https://github.com/dotnet/arcade build 20191024.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19524.2 * Update dependencies from https://github.com/dotnet/arcade build 20191025.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19525.2 * Update dependencies from https://github.com/dotnet/arcade build 20191026.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19526.1 * Update dependencies from https://github.com/dotnet/arcade build 20191027.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19527.3 * Update dependencies from https://github.com/dotnet/arcade build 20191028.5 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19528.5 * Update dependencies from https://github.com/dotnet/arcade build 20191029.9 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19529.9 * Update dependencies from https://github.com/dotnet/arcade build 20191030.15 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19530.15 * Update dependencies from https://github.com/dotnet/arcade build 20191031.14 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19531.14 * Update dependencies from https://github.com/dotnet/arcade build 20191101.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19551.3 * Update dependencies from https://github.com/dotnet/arcade build 20191102.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19552.1 * Update dependencies from https://github.com/dotnet/arcade build 20191104.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19554.3 * work around dotnet/wpf#1718 by not embedding untracked sources * use arcade mechanism of populating package icons --- FSharpBuild.Directory.Build.props | 2 + eng/Version.Details.xml | 4 +- eng/common/PublishToSymbolServers.proj | 6 +- eng/common/SetupNugetSources.ps1 | 127 ++++++++++++++++ eng/common/SetupNugetSources.sh | 117 ++++++++++++++ eng/common/build.ps1 | 19 ++- eng/common/build.sh | 24 +-- eng/common/darc-init.ps1 | 9 +- eng/common/darc-init.sh | 24 ++- eng/common/dotnet-install.ps1 | 6 +- eng/common/dotnet-install.sh | 43 +++++- eng/common/post-build/post-build-utils.ps1 | 1 + eng/common/post-build/setup-maestro-vars.ps1 | 26 ---- eng/common/sdl/extract-artifact-packages.ps1 | 1 + eng/common/templates/job/job.yml | 2 +- ...ase.yml => netcore-3-tools-validation.yml} | 13 +- .../post-build/channels/netcore-3-tools.yml | 143 ++++++++++++++++++ .../post-build/channels/netcore-dev-31.yml | 17 ++- .../post-build/channels/netcore-dev-5.yml | 17 ++- .../channels/netcore-internal-30.yml | 6 +- .../channels/netcore-release-30.yml | 17 ++- .../channels/netcore-release-31.yml | 17 ++- .../channels/netcore-tools-latest.yml | 19 ++- .../channels/netcore-tools-validation.yml | 98 ++++++++++++ .../templates/post-build/common-variables.yml | 14 +- .../templates/post-build/post-build.yml | 21 ++- .../post-build/setup-maestro-vars.yml | 26 +++- eng/common/templates/steps/send-to-helix.yml | 3 + eng/common/tools.ps1 | 49 +++++- eng/common/tools.sh | 43 +++++- eng/targets/Settings.props | 5 + global.json | 2 +- .../FSharp.Core.nuget/icon.png => icon.png | Bin .../FSharp.Compiler.Private.Scripting.nuspec | 1 + .../Microsoft.FSharp.Compiler.nuspec | 1 + .../FSharp.Core.nuget.csproj | 4 - .../FSharp.Core.nuget/FSharp.Core.nuspec | 4 +- 37 files changed, 818 insertions(+), 113 deletions(-) create mode 100644 eng/common/SetupNugetSources.ps1 create mode 100644 eng/common/SetupNugetSources.sh delete mode 100644 eng/common/post-build/setup-maestro-vars.ps1 rename eng/common/templates/post-build/channels/{public-validation-release.yml => netcore-3-tools-validation.yml} (91%) create mode 100644 eng/common/templates/post-build/channels/netcore-3-tools.yml create mode 100644 eng/common/templates/post-build/channels/netcore-tools-validation.yml rename src/fsharp/FSharp.Core.nuget/icon.png => icon.png (100%) diff --git a/FSharpBuild.Directory.Build.props b/FSharpBuild.Directory.Build.props index 95fa8fcd02..791850399b 100644 --- a/FSharpBuild.Directory.Build.props +++ b/FSharpBuild.Directory.Build.props @@ -18,6 +18,8 @@ + $(MSBuildThisFileDirectory)icon.png + $(RestoreAdditionalProjectSources);$(ArtifactsPackagesDir) $(ArtifactsPackagesDir) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f10ba74c20..4da62ac3d0 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - da75c6547c64a91eb8a9cecf8c503331c2cc394a + ec6a0344dd2b1237cd63b38281295ce1e4b71458 diff --git a/eng/common/PublishToSymbolServers.proj b/eng/common/PublishToSymbolServers.proj index 5d55e312b0..311e2bbe0f 100644 --- a/eng/common/PublishToSymbolServers.proj +++ b/eng/common/PublishToSymbolServers.proj @@ -37,6 +37,8 @@ 3650 true + true + true false @@ -56,7 +58,7 @@ DryRun="false" ConvertPortablePdbsToWindowsPdbs="false" PdbConversionTreatAsWarning="" - Condition="$(PublishToSymbolServer)"/> + Condition="$(PublishToSymbolServer) and $(PublishToMSDL)"/> + false + + false diff --git a/global.json b/global.json index d506e56546..4fb829e0e0 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19502.11", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19554.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } diff --git a/src/fsharp/FSharp.Core.nuget/icon.png b/icon.png similarity index 100% rename from src/fsharp/FSharp.Core.nuget/icon.png rename to icon.png diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec index dac8f0c240..fb54c7f393 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -10,6 +10,7 @@ + $CommonFileElements$ diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec index dd9293cd88..9505cf61e5 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec @@ -34,6 +34,7 @@ + $CommonFileElements$ git commit --> git push -Write-Host "git add ." -git add . -if ($LASTEXITCODE -ne 0) { - Write-Error "Git add failed with exit code $LASTEXITCODE." -} -Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" -git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" -if ($LASTEXITCODE -ne 0) { - Write-Error "Git commit failed with exit code $LASTEXITCODE." -} -Write-Host "git push" -git push -if ($LASTEXITCODE -ne 0) { - Write-Error "Git push failed with exit code $LASTEXITCODE." -} + # We create the temp directory where we'll store the sdl-config repository + $sdlDir = Join-Path $env:TEMP 'sdl' + if (Test-Path $sdlDir) { + Remove-Item -Force -Recurse $sdlDir + } -# Return to the original directory -Pop-Location \ No newline at end of file + Write-Host "git clone https://dnceng:`$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir" + git clone https://dnceng:$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git clone failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + # We copy the .gdn folder from our local run into the git repository so it can be committed + $sdlRepositoryFolder = Join-Path (Join-Path (Join-Path $sdlDir $Repository) $BranchName) '.gdn' + if (Get-Command Robocopy) { + Robocopy /S $GdnFolder $sdlRepositoryFolder + } else { + rsync -r $GdnFolder $sdlRepositoryFolder + } + # cd to the sdl-config directory so we can run git there + Push-Location $sdlDir + # git add . --> git commit --> git push + Write-Host 'git add .' + git add . + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git add failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" + git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git commit failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + Write-Host 'git push' + git push + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git push failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + + # Return to the original directory + Pop-Location +} +catch { + Write-Host $_.ScriptStackTrace + Write-PipelineTelemetryError -Category 'Sdl' -Message $_ + ExitWithExitCode 1 +} \ No newline at end of file diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index 9bc25314ae..40a084f796 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -5,55 +5,65 @@ Param( [string] $GdnFolder, [string[]] $ToolsList, [string] $UpdateBaseline, - [string] $GuardianLoggerLevel="Standard", + [string] $GuardianLoggerLevel='Standard', [string[]] $CrScanAdditionalRunConfigParams, [string[]] $PoliCheckAdditionalRunConfigParams ) -$ErrorActionPreference = "Stop" +$ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 +$disableConfigureToolsetImport = $true $LASTEXITCODE = 0 -# We store config files in the r directory of .gdn -Write-Host $ToolsList -$gdnConfigPath = Join-Path $GdnFolder "r" -$ValidPath = Test-Path $GuardianCliLocation +try { + . $PSScriptRoot\..\tools.ps1 -if ($ValidPath -eq $False) -{ - Write-Host "Invalid Guardian CLI Location." - exit 1 -} + # We store config files in the r directory of .gdn + Write-Host $ToolsList + $gdnConfigPath = Join-Path $GdnFolder 'r' + $ValidPath = Test-Path $GuardianCliLocation -$configParam = @("--config") - -foreach ($tool in $ToolsList) { - $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" - Write-Host $tool - # We have to manually configure tools that run on source to look at the source directory only - if ($tool -eq "credscan") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory < $TargetDirectory `" `" OutputType < pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory < $TargetDirectory " "OutputType < pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) - if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE - } + if ($ValidPath -eq $False) + { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Invalid Guardian CLI Location." + ExitWithExitCode 1 } - if ($tool -eq "policheck") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target < $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target < $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) - if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE + + $configParam = @('--config') + + foreach ($tool in $ToolsList) { + $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" + Write-Host $tool + # We have to manually configure tools that run on source to look at the source directory only + if ($tool -eq 'credscan') { + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory < $TargetDirectory `" `" OutputType < pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory < $TargetDirectory " "OutputType < pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Guardian configure for $tool failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + } + if ($tool -eq 'policheck') { + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target < $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target < $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Guardian configure for $tool failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } } - } - $configParam+=$gdnConfigFile -} + $configParam+=$gdnConfigFile + } -Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam" -& $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam -if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE + Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam" + & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } } +catch { + Write-Host $_.ScriptStackTrace + Write-PipelineTelemetryError -Category 'Sdl' -Message $_ + ExitWithExitCode 1 +} \ No newline at end of file diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 0a2c40c103..9505cf170f 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -4,7 +4,7 @@ variables: - group: DotNet-DotNetCli-Storage - group: DotNet-MSRC-Storage - group: Publish-Build-Assets - + # .NET Core 3.1 Dev - name: PublicDevRelease_31_Channel_Id value: 128 @@ -13,19 +13,19 @@ variables: - name: NetCore_5_Dev_Channel_Id value: 131 - # .NET Tools - Validation - - name: NetCore_Tools_Validation_Channel_Id + # .NET Eng - Validation + - name: Net_Eng_Validation_Channel_Id value: 9 - # .NET Tools - Latest - - name: NetCore_Tools_Latest_Channel_Id + # .NET Eng - Latest + - name: Net_Eng_Latest_Channel_Id value: 2 - # .NET 3 Tools - Validation - - name: NETCore_3_Tools_Validation_Channel_Id + # .NET 3 Eng - Validation + - name: NET_3_Eng_Validation_Channel_Id value: 390 - # .NET 3 Tools - Latest + # .NET 3 Eng - name: NetCore_3_Tools_Channel_Id value: 344 @@ -49,6 +49,10 @@ variables: - name: NetCore_31_Blazor_Features_Channel_Id value: 531 + # .NET Core Experimental + - name: NetCore_Experimental_Channel_Id + value: 562 + # Whether the build is internal or not - name: IsInternalBuild value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 5965cc2005..8a8d84f202 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -137,8 +137,8 @@ stages: dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} - stageName: 'NetCore_Tools_Latest_Publish' - channelName: '.NET Tools - Latest' + stageName: 'Net_Eng_Latest_Publish' + channelName: '.NET Eng - Latest' channelId: 2 transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' @@ -150,8 +150,8 @@ stages: dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} - stageName: 'PVR_Publish' - channelName: '.NET Tools - Validation' + stageName: 'Net_Eng_Validation_Publish' + channelName: '.NET Eng - Validation' channelId: 9 transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' @@ -195,3 +195,29 @@ stages: transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NET_Internal_Tooling_Publishing' + channelName: '.NET Internal Tooling' + channelId: 551 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_Experimental_Publishing' + channelName: '.NET Core Experimental' + channelId: 562 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental-symbols/nuget/v3/index.json' diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 42ca33ac33..d762c9f044 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -5,7 +5,7 @@ [bool]$ci = if (Test-Path variable:ci) { $ci } else { $false } # Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names. -[string]$configuration = if (Test-Path variable:configuration) { $configuration } else { "Debug" } +[string]$configuration = if (Test-Path variable:configuration) { $configuration } else { 'Debug' } # Set to true to output binary log from msbuild. Note that emitting binary log slows down the build. # Binary log must be enabled on CI. @@ -24,7 +24,7 @@ [bool]$restore = if (Test-Path variable:restore) { $restore } else { $true } # Adjusts msbuild verbosity level. -[string]$verbosity = if (Test-Path variable:verbosity) { $verbosity } else { "minimal" } +[string]$verbosity = if (Test-Path variable:verbosity) { $verbosity } else { 'minimal' } # Set to true to reuse msbuild nodes. Recommended to not reuse on CI. [bool]$nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { !$ci } @@ -41,23 +41,23 @@ # Enable repos to use a particular version of the on-line dotnet-install scripts. # default URL: https://dot.net/v1/dotnet-install.ps1 -[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { "v1" } +[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { 'v1' } # True to use global NuGet cache instead of restoring packages to repository-local directory. [bool]$useGlobalNuGetCache = if (Test-Path variable:useGlobalNuGetCache) { $useGlobalNuGetCache } else { !$ci } # An array of names of processes to stop on script exit if prepareMachine is true. -$processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @("msbuild", "dotnet", "vbcscompiler") } +$processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @('msbuild', 'dotnet', 'vbcscompiler') } $disableConfigureToolsetImport = if (Test-Path variable:disableConfigureToolsetImport) { $disableConfigureToolsetImport } else { $null } set-strictmode -version 2.0 -$ErrorActionPreference = "Stop" +$ErrorActionPreference = 'Stop' [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 function Create-Directory([string[]] $path) { if (!(Test-Path $path)) { - New-Item -path $path -force -itemType "Directory" | Out-Null + New-Item -path $path -force -itemType 'Directory' | Out-Null } } @@ -121,7 +121,7 @@ function InitializeDotNetCli([bool]$install) { # Find the first path on %PATH% that contains the dotnet.exe if ($useInstalledDotNetCli -and (-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -eq $null)) { - $dotnetCmd = Get-Command "dotnet.exe" -ErrorAction SilentlyContinue + $dotnetCmd = Get-Command 'dotnet.exe' -ErrorAction SilentlyContinue if ($dotnetCmd -ne $null) { $env:DOTNET_INSTALL_DIR = Split-Path $dotnetCmd.Path -Parent } @@ -134,13 +134,13 @@ function InitializeDotNetCli([bool]$install) { if ((-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -ne $null) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { - $dotnetRoot = Join-Path $RepoRoot ".dotnet" + $dotnetRoot = Join-Path $RepoRoot '.dotnet' if (-not (Test-Path(Join-Path $dotnetRoot "sdk\$dotnetSdkVersion"))) { if ($install) { InstallDotNetSdk $dotnetRoot $dotnetSdkVersion } else { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unable to find dotnet with SDK version '$dotnetSdkVersion'" + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unable to find dotnet with SDK version '$dotnetSdkVersion'" ExitWithExitCode 1 } } @@ -163,7 +163,7 @@ function InitializeDotNetCli([bool]$install) { } function GetDotNetInstallScript([string] $dotnetRoot) { - $installScript = Join-Path $dotnetRoot "dotnet-install.ps1" + $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit @@ -173,17 +173,17 @@ function GetDotNetInstallScript([string] $dotnetRoot) { return $installScript } -function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = "") { +function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = '') { InstallDotNet $dotnetRoot $version $architecture } function InstallDotNet([string] $dotnetRoot, [string] $version, - [string] $architecture = "", - [string] $runtime = "", + [string] $architecture = '', + [string] $runtime = '', [bool] $skipNonVersionedFiles = $false, - [string] $runtimeSourceFeed = "", - [string] $runtimeSourceFeedKey = "") { + [string] $runtimeSourceFeed = '', + [string] $runtimeSourceFeedKey = '') { $installScript = GetDotNetInstallScript $dotnetRoot $installParameters = @{ @@ -199,7 +199,7 @@ function InstallDotNet([string] $dotnetRoot, & $installScript @installParameters } catch { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet runtime '$runtime' from public location." + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from public location." # Only the runtime can be installed from a custom [private] location. if ($runtime -and ($runtimeSourceFeed -or $runtimeSourceFeedKey)) { @@ -215,7 +215,7 @@ function InstallDotNet([string] $dotnetRoot, & $installScript @installParameters } catch { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet runtime '$runtime' from custom location '$runtimeSourceFeed'." + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from custom location '$runtimeSourceFeed'." } } } @@ -238,16 +238,16 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { "15.9" } + $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { '15.9' } $vsMinVersion = [Version]::new($vsMinVersionStr) # Try msbuild command available in the environment. if ($env:VSINSTALLDIR -ne $null) { - $msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue + $msbuildCmd = Get-Command 'msbuild.exe' -ErrorAction SilentlyContinue if ($msbuildCmd -ne $null) { # Workaround for https://github.com/dotnet/roslyn/issues/35793 # Due to this issue $msbuildCmd.Version returns 0.0.0.0 for msbuild.exe 16.2+ - $msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split(@('-', '+'))[0]) + $msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split([char[]]@('-', '+'))[0]) if ($msbuildVersion -ge $vsMinVersion) { return $global:_MSBuildExe = $msbuildCmd.Path @@ -267,7 +267,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = InitializeVisualStudioEnvironmentVariables $vsInstallDir $vsMajorVersion } else { - if (Get-Member -InputObject $GlobalJson.tools -Name "xcopy-msbuild") { + if (Get-Member -InputObject $GlobalJson.tools -Name 'xcopy-msbuild') { $xcopyMSBuildVersion = $GlobalJson.tools.'xcopy-msbuild' $vsMajorVersion = $xcopyMSBuildVersion.Split('.')[0] } else { @@ -277,7 +277,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = $vsInstallDir = InitializeXCopyMSBuild $xcopyMSBuildVersion $install if ($vsInstallDir -eq $null) { - throw "Unable to find Visual Studio that has required version and components installed" + throw 'Unable to find Visual Studio that has required version and components installed' } } @@ -301,7 +301,7 @@ function InstallXCopyMSBuild([string]$packageVersion) { } function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { - $packageName = "RoslynTools.MSBuild" + $packageName = 'RoslynTools.MSBuild' $packageDir = Join-Path $ToolsDir "msbuild\$packageVersion" $packagePath = Join-Path $packageDir "$packageName.$packageVersion.nupkg" @@ -317,7 +317,7 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { Unzip $packagePath $packageDir } - return Join-Path $packageDir "tools" + return Join-Path $packageDir 'tools' } # @@ -334,32 +334,32 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { # or $null if no instance meeting the requirements is found on the machine. # function LocateVisualStudio([object]$vsRequirements = $null){ - if (Get-Member -InputObject $GlobalJson.tools -Name "vswhere") { + if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = "2.5.2" + $vswhereVersion = '2.5.2' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" - $vsWhereExe = Join-Path $vsWhereDir "vswhere.exe" + $vsWhereExe = Join-Path $vsWhereDir 'vswhere.exe' if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host "Downloading vswhere" + Write-Host 'Downloading vswhere' Invoke-WebRequest "https://github.com/Microsoft/vswhere/releases/download/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $args = @("-latest", "-prerelease", "-format", "json", "-requires", "Microsoft.Component.MSBuild", "-products", "*") + $args = @('-latest', '-prerelease', '-format', 'json', '-requires', 'Microsoft.Component.MSBuild', '-products', '*') - if (Get-Member -InputObject $vsRequirements -Name "version") { - $args += "-version" + if (Get-Member -InputObject $vsRequirements -Name 'version') { + $args += '-version' $args += $vsRequirements.version } - if (Get-Member -InputObject $vsRequirements -Name "components") { + if (Get-Member -InputObject $vsRequirements -Name 'components') { foreach ($component in $vsRequirements.components) { - $args += "-requires" + $args += '-requires' $args += $component } } @@ -385,27 +385,27 @@ function InitializeBuildTool() { # Initialize dotnet cli if listed in 'tools' $dotnetRoot = $null - if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { + if (Get-Member -InputObject $GlobalJson.tools -Name 'dotnet') { $dotnetRoot = InitializeDotNetCli -install:$restore } - if ($msbuildEngine -eq "dotnet") { + if ($msbuildEngine -eq 'dotnet') { if (!$dotnetRoot) { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "/global.json must specify 'tools.dotnet'." + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "/global.json must specify 'tools.dotnet'." ExitWithExitCode 1 } - $buildTool = @{ Path = Join-Path $dotnetRoot "dotnet.exe"; Command = "msbuild"; Tool = "dotnet"; Framework = "netcoreapp2.1" } + $buildTool = @{ Path = Join-Path $dotnetRoot 'dotnet.exe'; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'netcoreapp2.1' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore } catch { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message $_ + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ ExitWithExitCode 1 } $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" } } else { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 } @@ -414,15 +414,15 @@ function InitializeBuildTool() { function GetDefaultMSBuildEngine() { # Presence of tools.vs indicates the repo needs to build using VS msbuild on Windows. - if (Get-Member -InputObject $GlobalJson.tools -Name "vs") { - return "vs" + if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { + return 'vs' } - if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { - return "dotnet" + if (Get-Member -InputObject $GlobalJson.tools -Name 'dotnet') { + return 'dotnet' } - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." ExitWithExitCode 1 } @@ -431,9 +431,9 @@ function GetNuGetPackageCachePath() { # Use local cache on CI to ensure deterministic build, # use global cache in dev builds to avoid cost of downloading packages. if ($useGlobalNuGetCache) { - $env:NUGET_PACKAGES = Join-Path $env:UserProfile ".nuget\packages" + $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages' } else { - $env:NUGET_PACKAGES = Join-Path $RepoRoot ".packages" + $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages' } } @@ -475,14 +475,14 @@ function InitializeToolset() { } if (-not $restore) { - Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Toolset version $toolsetVersion has not been restored." + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Toolset version $toolsetVersion has not been restored." ExitWithExitCode 1 } $buildTool = InitializeBuildTool - $proj = Join-Path $ToolsetDir "restore.proj" - $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "ToolsetRestore.binlog") } else { "" } + $proj = Join-Path $ToolsetDir 'restore.proj' + $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'ToolsetRestore.binlog') } else { '' } '' | Set-Content $proj @@ -504,7 +504,7 @@ function ExitWithExitCode([int] $exitCode) { } function Stop-Processes() { - Write-Host "Killing running build processes..." + Write-Host 'Killing running build processes...' foreach ($processName in $processesToStopOnExit) { Get-Process -Name $processName -ErrorAction SilentlyContinue | Stop-Process } @@ -521,7 +521,7 @@ function MSBuild() { # Work around issues with Azure Artifacts credential provider # https://github.com/dotnet/arcade/issues/3932 - if ($ci -and $buildTool.Tool -eq "dotnet") { + if ($ci -and $buildTool.Tool -eq 'dotnet') { dotnet nuget locals http-cache -c $env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20 @@ -532,7 +532,7 @@ function MSBuild() { $toolsetBuildProject = InitializeToolset $path = Split-Path -parent $toolsetBuildProject - $path = Join-Path $path (Join-Path $buildTool.Framework "Microsoft.DotNet.Arcade.Sdk.dll") + $path = Join-Path $path (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll') $args += "/logger:$path" } @@ -547,12 +547,12 @@ function MSBuild() { function MSBuild-Core() { if ($ci) { if (!$binaryLog) { - Write-PipelineTaskError -Message "Binary log must be enabled in CI build." + Write-PipelineTelemetryError -Category 'Build' -Message 'Binary log must be enabled in CI build.' ExitWithExitCode 1 } if ($nodeReuse) { - Write-PipelineTaskError -Message "Node reuse must be disabled in CI build." + Write-PipelineTelemetryError -Category 'Build' -Message 'Node reuse must be disabled in CI build.' ExitWithExitCode 1 } } @@ -562,10 +562,10 @@ function MSBuild-Core() { $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" if ($warnAsError) { - $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true" + $cmdArgs += ' /warnaserror /p:TreatWarningsAsErrors=true' } else { - $cmdArgs += " /p:TreatWarningsAsErrors=false" + $cmdArgs += ' /p:TreatWarningsAsErrors=false' } foreach ($arg in $args) { @@ -577,7 +577,7 @@ function MSBuild-Core() { $exitCode = Exec-Process $buildTool.Path $cmdArgs if ($exitCode -ne 0) { - Write-PipelineTaskError -Message "Build failed." + Write-PipelineTelemetryError Category 'Build' -Message 'Build failed.' $buildLog = GetMSBuildBinaryLogCommandLineArgument $args if ($buildLog -ne $null) { @@ -592,12 +592,12 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) { foreach ($argument in $arguments) { if ($argument -ne $null) { $arg = $argument.Trim() - if ($arg.StartsWith("/bl:", "OrdinalIgnoreCase")) { - return $arg.Substring("/bl:".Length) + if ($arg.StartsWith('/bl:', "OrdinalIgnoreCase")) { + return $arg.Substring('/bl:'.Length) } - if ($arg.StartsWith("/binaryLogger:", "OrdinalIgnoreCase")) { - return $arg.Substring("/binaryLogger:".Length) + if ($arg.StartsWith('/binaryLogger:', 'OrdinalIgnoreCase')) { + return $arg.Substring('/binaryLogger:'.Length) } } } @@ -607,14 +607,14 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) { . $PSScriptRoot\pipeline-logging-functions.ps1 -$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..\..") -$EngRoot = Resolve-Path (Join-Path $PSScriptRoot "..") -$ArtifactsDir = Join-Path $RepoRoot "artifacts" -$ToolsetDir = Join-Path $ArtifactsDir "toolset" -$ToolsDir = Join-Path $RepoRoot ".tools" -$LogDir = Join-Path (Join-Path $ArtifactsDir "log") $configuration -$TempDir = Join-Path (Join-Path $ArtifactsDir "tmp") $configuration -$GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot "global.json") | ConvertFrom-Json +$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..') +$EngRoot = Resolve-Path (Join-Path $PSScriptRoot '..') +$ArtifactsDir = Join-Path $RepoRoot 'artifacts' +$ToolsetDir = Join-Path $ArtifactsDir 'toolset' +$ToolsDir = Join-Path $RepoRoot '.tools' +$LogDir = Join-Path (Join-Path $ArtifactsDir 'log') $configuration +$TempDir = Join-Path (Join-Path $ArtifactsDir 'tmp') $configuration +$GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot 'global.json') | ConvertFrom-Json # true if global.json contains a "runtimes" section $globalJsonHasRuntimes = if ($GlobalJson.tools.PSObject.Properties.Name -Match 'runtimes') { $true } else { $false } @@ -631,8 +631,14 @@ Write-PipelineSetVariable -Name 'TMP' -Value $TempDir # Import custom tools configuration, if present in the repo. # Note: Import in global scope so that the script set top-level variables without qualification. if (!$disableConfigureToolsetImport) { - $configureToolsetScript = Join-Path $EngRoot "configure-toolset.ps1" + $configureToolsetScript = Join-Path $EngRoot 'configure-toolset.ps1' if (Test-Path $configureToolsetScript) { - . $configureToolsetScript + . $configureToolsetScript + if ((Test-Path variable:failOnConfigureToolsetError) -And $failOnConfigureToolsetError) { + if ((Test-Path variable:LastExitCode) -And ($LastExitCode -ne 0)) { + Write-PipelineTelemetryError -Category 'Build' -Message 'configure-toolset.ps1 returned a non-zero exit code' + ExitWithExitCode $LastExitCode + } + } } } diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 6a23ac0a34..f58db5e25d 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -4,7 +4,6 @@ # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} -disable_configure_toolset_import=${disable_configure_toolset_import:-} # Set to true to use the pipelines logger which will enable Azure logging output. # https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md @@ -82,7 +81,7 @@ function ReadGlobalVersion { local pattern="\"$key\" *: *\"(.*)\"" if [[ ! $line =~ $pattern ]]; then - Write-PipelineTelemetryError -category 'InitializeToolset' "Error: Cannot find \"$key\" in $global_json_file" + Write-PipelineTelemetryError -category 'Build' "Error: Cannot find \"$key\" in $global_json_file" ExitWithExitCode 1 fi @@ -325,7 +324,7 @@ function InitializeToolset { local toolset_build_proj=`cat "$toolset_location_file"` if [[ ! -a "$toolset_build_proj" ]]; then - Write-PipelineTelemetryError -category 'InitializeToolset' "Invalid toolset path: $toolset_build_proj" + Write-PipelineTelemetryError -category 'Build' "Invalid toolset path: $toolset_build_proj" ExitWithExitCode 3 fi @@ -375,12 +374,12 @@ function MSBuild { function MSBuild-Core { if [[ "$ci" == true ]]; then if [[ "$binary_log" != true ]]; then - Write-PipelineTaskError "Binary log must be enabled in CI build." + Write-PipelineTelemetryError -category 'Build' "Binary log must be enabled in CI build." ExitWithExitCode 1 fi if [[ "$node_reuse" == true ]]; then - Write-PipelineTaskError "Node reuse must be disabled in CI build." + Write-PipelineTelemetryError -category 'Build' "Node reuse must be disabled in CI build." ExitWithExitCode 1 fi fi @@ -394,7 +393,7 @@ function MSBuild-Core { "$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || { local exit_code=$? - Write-PipelineTaskError "Build failed (exit code '$exit_code')." + Write-PipelineTelemetryError -category 'Build' "Build failed (exit code '$exit_code')." ExitWithExitCode $exit_code } } @@ -437,7 +436,7 @@ Write-PipelineSetVariable -name "Temp" -value "$temp_dir" Write-PipelineSetVariable -name "TMP" -value "$temp_dir" # Import custom tools configuration, if present in the repo. -if [[ -z "$disable_configure_toolset_import" ]]; then +if [ -z "${disable_configure_toolset_import:-}" ]; then configure_toolset_script="$eng_root/configure-toolset.sh" if [[ -a "$configure_toolset_script" ]]; then . "$configure_toolset_script" diff --git a/global.json b/global.json index ca1b0780a7..e0109fb0fe 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19569.6", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19601.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From b757c165dcf28829f3431f3a678de1486b3b5db7 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2019 10:26:57 -0800 Subject: [PATCH 114/214] Update dependencies from https://github.com/dotnet/arcade build 20191202.4 (#7923) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19602.4 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8bd6f3d7de..0288911f9e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - c0b56ff3569e3c7475070486c40543ea4c6f6dc7 + 9d34fd008e754e1ada35c8b6bc3694e7a90b4ed7 diff --git a/global.json b/global.json index e0109fb0fe..707f7b7357 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19601.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19602.4", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 4978145c8516351b1338262b6b9bdf2d0372e757 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 3 Dec 2019 14:40:00 -0800 Subject: [PATCH 115/214] fire event when a value is bound at the root of a script evaluation (#7919) * fire event when a value is bound at the root of a script evaluation * simplify event notifying bound values in interactive --- .../FSharpScript.fs | 2 + src/fsharp/fsi/fsi.fs | 11 ++++- src/fsharp/fsi/fsi.fsi | 3 ++ .../FSharpScriptTests.fs | 46 +++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 6380c203ed..3d9e113bcc 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -38,6 +38,8 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + member __.ValueBound = fsi.ValueBound + member __.ProvideInput = stdin.ProvideInput member __.OutputProduced = outputProduced.Publish diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 78b142bd51..c5e71384f1 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -950,6 +950,7 @@ type internal FsiDynamicCompiler let assemblyName = "FSI-ASSEMBLY" let assemblyReferenceAddedEvent = Control.Event() + let valueBoundEvent = Control.Event<_>() let mutable fragmentId = 0 let mutable prevIt : ValRef option = None @@ -1155,6 +1156,10 @@ type internal FsiDynamicCompiler if v.CompiledName = "it" then itValue <- fsiValueOpt + match fsiValueOpt with + | Some fsiValue -> valueBoundEvent.Trigger(fsiValue.ReflectionValue, fsiValue.ReflectionType, v.CompiledName) + | None -> () + let symbol = FSharpSymbol.Create(cenv, v.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) @@ -1331,6 +1336,8 @@ type internal FsiDynamicCompiler member __.AssemblyReferenceAdded = assemblyReferenceAddedEvent.Publish + member __.ValueBound = valueBoundEvent.Publish + //---------------------------------------------------------------------------- // ctrl-c handling //---------------------------------------------------------------------------- @@ -2222,7 +2229,6 @@ type internal FsiInteractionProcessor let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, checker, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState) fsiInteractiveChecker.ParseAndCheckInteraction(ctok, SourceText.ofString text) - //---------------------------------------------------------------------------- // Server mode: //---------------------------------------------------------------------------- @@ -2630,6 +2636,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. member __.AssemblyReferenceAdded = fsiDynamicCompiler.AssemblyReferenceAdded + + /// Event fires when a root-level value is bound to an identifier, e.g., via `let x = ...`. + member __.ValueBound = fsiDynamicCompiler.ValueBound /// Performs these steps: /// - Load the dummy interaction, if any diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index bed1b74e61..c576a33fbd 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -237,6 +237,9 @@ type FsiEvaluationSession = /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. member AssemblyReferenceAdded : IEvent + /// Event fires when a root-level value is bound to an identifier, e.g., via `let x = ...`. + member ValueBound : IEvent + /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. /// diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 9b4707b787..70b6b2662e 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -122,3 +122,49 @@ type InteractiveTests() = Assert.True(wasCancelled) Assert.LessOrEqual(sw.ElapsedMilliseconds, sleepTime) Assert.AreEqual(None, result) + + [] + member _.``Values bound at the root trigger an event``() = + let mutable foundX = false + let mutable foundY = false + let mutable foundCount = 0 + use script = new FSharpScript() + script.ValueBound + |> Event.add (fun (value, typ, name) -> + foundX <- foundX || (name = "x" && typ = typeof && value :?> int = 1) + foundY <- foundY || (name = "y" && typ = typeof && value :?> int = 2) + foundCount <- foundCount + 1) + let code = @" +let x = 1 +let y = 2 +" + script.Eval(code) |> ignoreValue + Assert.True(foundX) + Assert.True(foundY) + Assert.AreEqual(2, foundCount) + + [] + member _.``Values re-bound trigger an event``() = + let mutable foundXCount = 0 + use script = new FSharpScript() + script.ValueBound + |> Event.add (fun (_value, typ, name) -> + if name = "x" && typ = typeof then foundXCount <- foundXCount + 1) + script.Eval("let x = 1") |> ignoreValue + script.Eval("let x = 2") |> ignoreValue + Assert.AreEqual(2, foundXCount) + + [] + member _.``Nested let bindings don't trigger event``() = + let mutable foundInner = false + use script = new FSharpScript() + script.ValueBound + |> Event.add (fun (_value, _typ, name) -> + foundInner <- foundInner || name = "inner") + let code = @" +let x = + let inner = 1 + () +" + script.Eval(code) |> ignoreValue + Assert.False(foundInner) From 1da8ba7b22c3dfcd6eb36c8ebcfa2b1ce9a0d6c5 Mon Sep 17 00:00:00 2001 From: Nelson Wu Date: Tue, 3 Dec 2019 21:54:55 -0800 Subject: [PATCH 116/214] Fixed-index slicing for 4D arrays (#7720) * wip fixes cleanup * fix tests * add langversion * merge and add test * vscode you are drunk * more tests * fix tests * merge hiccup * address comments --- src/fsharp/FSharp.Core/prim-types.fs | 297 ++++++++++++++-- src/fsharp/FSharp.Core/prim-types.fsi | 320 ++++++++++++++++- src/fsharp/LanguageFeatures.fs | 2 + src/fsharp/LanguageFeatures.fsi | 1 + src/fsharp/TypeChecker.fs | 124 ++++--- .../Array4Module.fs | 331 ++++++++++++++++++ .../SurfaceArea.coreclr.fs | 28 ++ .../SurfaceArea.net40.fs | 28 ++ .../Compiler/Language/FixedIndexSliceTests.fs | 139 ++++++++ tests/fsharp/FSharpSuite.Tests.fsproj | 1 + 10 files changed, 1186 insertions(+), 85 deletions(-) create mode 100644 tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index c4987747a1..b71b19bf9c 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -659,8 +659,8 @@ namespace Microsoft.FSharp.Core | _ -> raise (System.IndexOutOfRangeException()) let inline Array2DZeroCreate (n:int) (m:int) = (# "newarr.multi 2 !0" type ('T) n m : 'T[,] #) - - let GetArray2DSub (src: 'T[,]) src1 src2 len1 len2 = + + let inline GetArray2DSub (src: 'T[,]) src1 src2 len1 len2 = let len1 = (if len1 < 0 then 0 else len1) let len2 = (if len2 < 0 then 0 else len2) let dst = Array2DZeroCreate len1 len2 @@ -669,7 +669,7 @@ namespace Microsoft.FSharp.Core SetArray2D dst i j (GetArray2D src (src1 + i) (src2 + j)) dst - let SetArray2DSub (dst: 'T[,]) src1 src2 len1 len2 src = + let inline SetArray2DSub (dst: 'T[,]) src1 src2 len1 len2 src = for i = 0 to len1 - 1 do for j = 0 to len2 - 1 do SetArray2D dst (src1+i) (src2+j) (GetArray2D src i j) @@ -696,7 +696,7 @@ namespace Microsoft.FSharp.Core let inline Array3DZeroCreate (n1:int) (n2:int) (n3:int) = (# "newarr.multi 3 !0" type ('T) n1 n2 n3 : 'T[,,] #) - let GetArray3DSub (src: 'T[,,]) src1 src2 src3 len1 len2 len3 = + let inline GetArray3DSub (src: 'T[,,]) src1 src2 src3 len1 len2 len3 = let len1 = (if len1 < 0 then 0 else len1) let len2 = (if len2 < 0 then 0 else len2) let len3 = (if len3 < 0 then 0 else len3) @@ -707,7 +707,7 @@ namespace Microsoft.FSharp.Core SetArray3D dst i j k (GetArray3D src (src1+i) (src2+j) (src3+k)) dst - let SetArray3DSub (dst: 'T[,,]) src1 src2 src3 len1 len2 len3 src = + let inline SetArray3DSub (dst: 'T[,,]) src1 src2 src3 len1 len2 len3 src = for i = 0 to len1 - 1 do for j = 0 to len2 - 1 do for k = 0 to len3 - 1 do @@ -720,17 +720,25 @@ namespace Microsoft.FSharp.Core let inline SetArray4D (target: 'T[,,,]) (index1: int) (index2: int) (index3: int) (index4: int) (value:'T) = (# "stelem.multi 4 !0" type ('T) target index1 index2 index3 index4 value #) - let inline Array4DLength1 (arr: 'T[,,,]) = (# "ldlen.multi 4 0" arr : int #) + let inline GetArray4DLength1 (arr: 'T[,,,]) = (# "ldlen.multi 4 0" arr : int #) - let inline Array4DLength2 (arr: 'T[,,,]) = (# "ldlen.multi 4 1" arr : int #) + let inline GetArray4DLength2 (arr: 'T[,,,]) = (# "ldlen.multi 4 1" arr : int #) - let inline Array4DLength3 (arr: 'T[,,,]) = (# "ldlen.multi 4 2" arr : int #) + let inline GetArray4DLength3 (arr: 'T[,,,]) = (# "ldlen.multi 4 2" arr : int #) - let inline Array4DLength4 (arr: 'T[,,,]) = (# "ldlen.multi 4 3" arr : int #) + let inline GetArray4DLength4 (arr: 'T[,,,]) = (# "ldlen.multi 4 3" arr : int #) + + let inline GetArray4DLength (arr: 'T[,,,]) (dim: int) = + match dim with + | 0 -> GetArray4DLength1 arr + | 1 -> GetArray4DLength2 arr + | 2 -> GetArray4DLength3 arr + | 3 -> GetArray4DLength4 arr + | _ -> raise (System.IndexOutOfRangeException()) let inline Array4DZeroCreate (n1:int) (n2:int) (n3:int) (n4:int) = (# "newarr.multi 4 !0" type ('T) n1 n2 n3 n4 : 'T[,,,] #) - let GetArray4DSub (src: 'T[,,,]) src1 src2 src3 src4 len1 len2 len3 len4 = + let inline GetArray4DSub (src: 'T[,,,]) src1 src2 src3 src4 len1 len2 len3 len4 = let len1 = (if len1 < 0 then 0 else len1) let len2 = (if len2 < 0 then 0 else len2) let len3 = (if len3 < 0 then 0 else len3) @@ -743,7 +751,7 @@ namespace Microsoft.FSharp.Core SetArray4D dst i j k m (GetArray4D src (src1+i) (src2+j) (src3+k) (src4+m)) dst - let SetArray4DSub (dst: 'T[,,,]) src1 src2 src3 src4 len1 len2 len3 len4 src = + let inline SetArray4DSub (dst: 'T[,,,]) src1 src2 src3 src4 len1 len2 len3 len4 src = for i = 0 to len1 - 1 do for j = 0 to len2 - 1 do for k = 0 to len3 - 1 do @@ -4914,7 +4922,7 @@ namespace Microsoft.FSharp.Core let finish = (match finish with None -> target.Length - 1 | Some n -> n) SetArraySub target start (finish - start + 1) source - let GetArraySlice2D (source: _[,]) start1 finish1 start2 finish2 = + let inline GetArraySlice2D (source: _[,]) start1 finish1 start2 finish2 = let bound1 = source.GetLowerBound(0) let bound2 = source.GetLowerBound(1) let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray2DLength1 source) @@ -4957,7 +4965,7 @@ namespace Microsoft.FSharp.Core let inline SetArraySlice2DFixed2 (target: _[,]) start1 finish1 index2 (source:_[]) = SetArraySlice2DFixed target source index2 start1 finish1 0 - let SetArraySlice2D (target: _[,]) start1 finish1 start2 finish2 (source: _[,]) = + let inline SetArraySlice2D (target: _[,]) start1 finish1 start2 finish2 (source: _[,]) = let bound1 = target.GetLowerBound(0) let bound2 = target.GetLowerBound(1) let start1 = (match start1 with None -> bound1 | Some n -> n) @@ -4966,7 +4974,7 @@ namespace Microsoft.FSharp.Core let finish2 = (match finish2 with None -> bound2 + GetArray2DLength2 target - 1 | Some n -> n) SetArray2DSub target start1 start2 (finish1 - start1 + 1) (finish2 - start2 + 1) source - let GetArraySlice3D (source: _[,,]) start1 finish1 start2 finish2 start3 finish3 = + let inline GetArraySlice3D (source: _[,,]) start1 finish1 start2 finish2 start3 finish3 = let bound1 = source.GetLowerBound(0) let bound2 = source.GetLowerBound(1) let bound3 = source.GetLowerBound(2) @@ -5021,13 +5029,16 @@ namespace Microsoft.FSharp.Core SetArray dst j (getArrayElem j) dst - let inline GetArraySlice3DFixedDouble1 (source: _[,,]) index1 index2 start3 finish3 = GetArraySlice3DFixedDouble source start3 finish3 index1 index2 2 - - let inline GetArraySlice3DFixedDouble2 (source: _[,,]) index1 start2 finish2 index3 = GetArraySlice3DFixedDouble source start2 finish2 index1 index3 1 + let inline GetArraySlice3DFixedDouble1 (source: _[,,]) index1 index2 start3 finish3 = + GetArraySlice3DFixedDouble source start3 finish3 index1 index2 2 - let inline GetArraySlice3DFixedDouble3 (source: _[,,]) start1 finish1 index2 index3 = GetArraySlice3DFixedDouble source start1 finish1 index2 index3 0 + let inline GetArraySlice3DFixedDouble2 (source: _[,,]) index1 start2 finish2 index3 = + GetArraySlice3DFixedDouble source start2 finish2 index1 index3 1 - let SetArraySlice3D (target: _[,,]) start1 finish1 start2 finish2 start3 finish3 (source:_[,,]) = + let inline GetArraySlice3DFixedDouble3 (source: _[,,]) start1 finish1 index2 index3 = + GetArraySlice3DFixedDouble source start1 finish1 index2 index3 0 + + let inline SetArraySlice3D (target: _[,,]) start1 finish1 start2 finish2 start3 finish3 (source:_[,,]) = let bound1 = target.GetLowerBound(0) let bound2 = target.GetLowerBound(1) let bound3 = target.GetLowerBound(2) @@ -5079,28 +5090,140 @@ namespace Microsoft.FSharp.Core for j = 0 to len - 1 do setArrayElem j - let inline SetArraySlice3DFixedDouble1 (target: _[,,]) index1 index2 start3 finish3 (source: _[]) = SetArraySlice3DFixedDouble target source index1 index2 start3 finish3 2 + let inline SetArraySlice3DFixedDouble1 (target: _[,,]) index1 index2 start3 finish3 (source: _[]) = + SetArraySlice3DFixedDouble target source index1 index2 start3 finish3 2 - let inline SetArraySlice3DFixedDouble2 (target: _[,,]) index1 start2 finish2 index3 (source: _[]) = SetArraySlice3DFixedDouble target source index1 index3 start2 finish2 1 + let inline SetArraySlice3DFixedDouble2 (target: _[,,]) index1 start2 finish2 index3 (source: _[]) = + SetArraySlice3DFixedDouble target source index1 index3 start2 finish2 1 - let inline SetArraySlice3DFixedDouble3 (target: _[,,]) start1 finish1 index2 index3 (source: _[]) = SetArraySlice3DFixedDouble target source index2 index3 start1 finish1 0 + let inline SetArraySlice3DFixedDouble3 (target: _[,,]) start1 finish1 index2 index3 (source: _[]) = + SetArraySlice3DFixedDouble target source index2 index3 start1 finish1 0 - let GetArraySlice4D (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 = + let inline GetArraySlice4D (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 = let bound1 = source.GetLowerBound(0) let bound2 = source.GetLowerBound(1) let bound3 = source.GetLowerBound(2) let bound4 = source.GetLowerBound(3) - let start1, finish1 = ComputeSlice bound1 start1 finish1 (Array4DLength1 source) - let start2, finish2 = ComputeSlice bound2 start2 finish2 (Array4DLength2 source) - let start3, finish3 = ComputeSlice bound3 start3 finish3 (Array4DLength3 source) - let start4, finish4 = ComputeSlice bound4 start4 finish4 (Array4DLength4 source) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength1 source) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength2 source) + let start3, finish3 = ComputeSlice bound3 start3 finish3 (GetArray4DLength3 source) + let start4, finish4 = ComputeSlice bound4 start4 finish4 (GetArray4DLength4 source) let len1 = (finish1 - start1 + 1) let len2 = (finish2 - start2 + 1) let len3 = (finish3 - start3 + 1) let len4 = (finish4 - start4 + 1) GetArray4DSub source start1 start2 start3 start4 len1 len2 len3 len4 + + let inline GetArraySlice4DFixedSingle (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 index nonFixedDim1 nonFixedDim2 nonFixedDim3 = + let bound1 = source.GetLowerBound(nonFixedDim1) + let bound2 = source.GetLowerBound(nonFixedDim2) + let bound3 = source.GetLowerBound(nonFixedDim3) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength source nonFixedDim1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength source nonFixedDim2) + let start3, finish3 = ComputeSlice bound3 start3 finish3 (GetArray4DLength source nonFixedDim3) + let len1 = (finish1 - start1 + 1) + let len2 = (finish2 - start2 + 1) + let len3 = (finish3 - start3 + 1) - let SetArraySlice4D (target: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 (source:_[,,,]) = + let dst = Array3DZeroCreate (max len1 0) (max len2 0) (max len3 0) + let getArrayElem = + match nonFixedDim1, nonFixedDim2, nonFixedDim3 with + | 1, 2, 3 -> (fun i j k-> GetArray4D source index i j k) + | 0, 2, 3 -> (fun i j k -> GetArray4D source i index j k) + | 0, 1, 3 -> (fun i j k -> GetArray4D source i j index k) + | 0, 1, 2 -> (fun i j k -> GetArray4D source i j k index) + | _ -> raise (System.IndexOutOfRangeException()) + for i = 0 to len1 - 1 do + for j = 0 to len2 - 1 do + for k = 0 to len3 - 1 do + SetArray3D dst i j k (getArrayElem i j k) + + dst + + let inline GetArraySlice4DFixedSingle1 (source: _[,,,]) index1 start2 finish2 start3 finish3 start4 finish4 = + GetArraySlice4DFixedSingle source start2 finish2 start3 finish3 start4 finish4 index1 1 2 3 + + let inline GetArraySlice4DFixedSingle2 (source: _[,,,]) start1 finish1 index2 start3 finish3 start4 finish4 = + GetArraySlice4DFixedSingle source start1 finish1 start3 finish3 start4 finish4 index2 0 2 3 + + let inline GetArraySlice4DFixedSingle3 (source: _[,,,]) start1 finish1 start2 finish2 index3 start4 finish4 = + GetArraySlice4DFixedSingle source start1 finish1 start2 finish2 start4 finish4 index3 0 1 3 + + let inline GetArraySlice4DFixedSingle4 (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 index4 = + GetArraySlice4DFixedSingle source start1 finish1 start2 finish2 start3 finish3 index4 0 1 2 + + let inline GetArraySlice4DFixedDouble (source: _[,,,]) start1 finish1 start2 finish2 index1 index2 nonFixedDim1 nonFixedDim2 = + let bound1 = source.GetLowerBound(nonFixedDim1) + let bound2 = source.GetLowerBound(nonFixedDim2) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength source nonFixedDim1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength source nonFixedDim2) + let len1 = (finish1 - start1 + 1) + let len2 = (finish2 - start2 + 1) + + let dst = Array2DZeroCreate (max len1 0) (max len2 0) + let getArrayElem = + match nonFixedDim1, nonFixedDim2 with + | 2, 3 -> (fun i j -> GetArray4D source index1 index2 i j) + | 1, 3 -> (fun i j -> GetArray4D source index1 i index2 j) + | 1, 2 -> (fun i j -> GetArray4D source index1 i j index2) + | 0, 3 -> (fun i j -> GetArray4D source i index1 index2 j) + | 0, 2 -> (fun i j -> GetArray4D source i index1 j index2) + | 0, 1 -> (fun i j -> GetArray4D source i j index1 index2) + | _ -> raise (System.IndexOutOfRangeException()) + for i = 0 to len1 - 1 do + for j = 0 to len2 - 1 do + SetArray2D dst i j (getArrayElem i j) + + dst + + let inline GetArraySlice4DFixedDouble1 (source: _[,,,]) index1 index2 start3 finish3 start4 finish4 = + GetArraySlice4DFixedDouble source start3 finish3 start4 finish4 index1 index2 2 3 + + let inline GetArraySlice4DFixedDouble2 (source: _[,,,]) index1 start2 finish2 index3 start4 finish4 = + GetArraySlice4DFixedDouble source start2 finish2 start4 finish4 index1 index3 1 3 + + let inline GetArraySlice4DFixedDouble3 (source: _[,,,]) index1 start2 finish2 start3 finish3 index4 = + GetArraySlice4DFixedDouble source start2 finish2 start3 finish3 index1 index4 1 2 + + let inline GetArraySlice4DFixedDouble4 (source: _[,,,]) start1 finish1 index2 index3 start4 finish4 = + GetArraySlice4DFixedDouble source start1 finish1 start4 finish4 index2 index3 0 3 + + let inline GetArraySlice4DFixedDouble5 (source: _[,,,]) start1 finish1 index2 start3 finish3 index4 = + GetArraySlice4DFixedDouble source start1 finish1 start3 finish3 index2 index4 0 2 + + let inline GetArraySlice4DFixedDouble6 (source: _[,,,]) start1 finish1 start2 finish2 index3 index4 = + GetArraySlice4DFixedDouble source start1 finish1 start2 finish2 index3 index4 0 1 + + let inline GetArraySlice4DFixedTriple (source: _[,,,]) start1 finish1 index1 index2 index3 nonFixedDim1 = + let bound1 = source.GetLowerBound(nonFixedDim1) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength source nonFixedDim1) + let len1 = (finish1 - start1 + 1) + let dst = zeroCreate (max len1 0) + let getArrayElem = + match nonFixedDim1 with + | 0 -> (fun i -> GetArray4D source i index1 index2 index3) + | 1 -> (fun i -> GetArray4D source index1 i index2 index3) + | 2 -> (fun i -> GetArray4D source index1 index2 i index3) + | 3 -> (fun i -> GetArray4D source index1 index2 index3 i) + | _ -> raise (System.IndexOutOfRangeException()) + for i = 0 to len1 - 1 do + SetArray dst i (getArrayElem i) + + dst + + let inline GetArraySlice4DFixedTriple1 (source: _[,,,]) start1 finish1 index2 index3 index4 = + GetArraySlice4DFixedTriple source start1 finish1 index2 index3 index4 0 + + let inline GetArraySlice4DFixedTriple2 (source: _[,,,]) index1 start2 finish2 index3 index4 = + GetArraySlice4DFixedTriple source start2 finish2 index1 index3 index4 1 + + let inline GetArraySlice4DFixedTriple3 (source: _[,,,]) index1 index2 start3 finish3 index4 = + GetArraySlice4DFixedTriple source start3 finish3 index1 index2 index4 2 + + let inline GetArraySlice4DFixedTriple4 (source: _[,,,]) index1 index2 index3 start4 finish4 = + GetArraySlice4DFixedTriple source start4 finish4 index1 index2 index3 3 + + let inline SetArraySlice4D (target: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 (source:_[,,,]) = let bound1 = target.GetLowerBound(0) let bound2 = target.GetLowerBound(1) let bound3 = target.GetLowerBound(2) @@ -5109,11 +5232,113 @@ namespace Microsoft.FSharp.Core let start2 = (match start2 with None -> bound2 | Some n -> n) let start3 = (match start3 with None -> bound3 | Some n -> n) let start4 = (match start4 with None -> bound4 | Some n -> n) - let finish1 = (match finish1 with None -> bound1 + Array4DLength1 target - 1 | Some n -> n) - let finish2 = (match finish2 with None -> bound2 + Array4DLength2 target - 1 | Some n -> n) - let finish3 = (match finish3 with None -> bound3 + Array4DLength3 target - 1 | Some n -> n) - let finish4 = (match finish4 with None -> bound4 + Array4DLength4 target - 1 | Some n -> n) + let finish1 = (match finish1 with None -> bound1 + GetArray4DLength1 target - 1 | Some n -> n) + let finish2 = (match finish2 with None -> bound2 + GetArray4DLength2 target - 1 | Some n -> n) + let finish3 = (match finish3 with None -> bound3 + GetArray4DLength3 target - 1 | Some n -> n) + let finish4 = (match finish4 with None -> bound4 + GetArray4DLength4 target - 1 | Some n -> n) SetArray4DSub target start1 start2 start3 start4 (finish1 - start1 + 1) (finish2 - start2 + 1) (finish3 - start3 + 1) (finish4 - start4 + 1) source + + let inline SetArraySlice4DFixedSingle (target: _[,,,]) (source: _[,,]) index start1 finish1 start2 finish2 start3 finish3 nonFixedDim1 nonFixedDim2 nonFixedDim3 = + let bound1 = target.GetLowerBound(nonFixedDim1) + let bound2 = target.GetLowerBound(nonFixedDim2) + let bound3 = target.GetLowerBound(nonFixedDim3) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength target nonFixedDim1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength target nonFixedDim2) + let start3, finish3 = ComputeSlice bound3 start3 finish3 (GetArray4DLength target nonFixedDim3) + let len1 = (finish1 - start1 + 1) + let len2 = (finish2 - start2 + 1) + let len3 = (finish3 - start3 + 1) + + let setArrayElem = + match nonFixedDim1, nonFixedDim2, nonFixedDim3 with + | 1, 2, 3 -> (fun i j k -> SetArray4D target index (bound1 + start1 + i) (bound2 + start2 + j) (bound3 + start3 + k) (GetArray3D source i j k)) + | 0, 2, 3 -> (fun i j k -> SetArray4D target (bound1 + start1 + i) index (bound2 + start2 + j) (bound3 + start3 + k) (GetArray3D source i j k)) + | 0, 1, 3 -> (fun i j k -> SetArray4D target (bound1 + start1 + i) (bound2 + start2 + j) index (bound3 + start3 + k) (GetArray3D source i j k)) + | 0, 1, 2 -> (fun i j k -> SetArray4D target (bound1 + start1 + i) (bound2 + start2 + j) (bound3 + start3 + k) index (GetArray3D source i j k)) + | _ -> raise (System.IndexOutOfRangeException()) + + for i = 0 to len1 - 1 do + for j = 0 to len2 - 1 do + for k = 0 to len3 - 1 do + setArrayElem i j k + + let inline SetArraySlice4DFixedSingle1 (target: _[,,,]) index1 start2 finish2 start3 finish3 start4 finish4 (source: _[,,]) = + SetArraySlice4DFixedSingle target source index1 start2 finish2 start3 finish3 start4 finish4 1 2 3 + + let inline SetArraySlice4DFixedSingle2 (target: _[,,,]) start1 finish1 index2 start3 finish3 start4 finish4 (source: _[,,]) = + SetArraySlice4DFixedSingle target source index2 start1 finish1 start3 finish3 start4 finish4 0 2 3 + + let inline SetArraySlice4DFixedSingle3 (target: _[,,,]) start1 finish1 start2 finish2 index3 start4 finish4 (source: _[,,]) = + SetArraySlice4DFixedSingle target source index3 start1 finish1 start2 finish2 start4 finish4 0 1 3 + + let inline SetArraySlice4DFixedSingle4 (target: _[,,,]) start1 finish1 start2 finish2 start3 finish3 index4 (source: _[,,]) = + SetArraySlice4DFixedSingle target source index4 start1 finish1 start2 finish2 start3 finish3 0 1 2 + + let inline SetArraySlice4DFixedDouble (target: _[,,,]) (source: _[,]) index1 index2 start1 finish1 start2 finish2 nonFixedDim1 nonFixedDim2 = + let bound1 = target.GetLowerBound(nonFixedDim1) + let bound2 = target.GetLowerBound(nonFixedDim2) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength target nonFixedDim1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength target nonFixedDim2) + let len1 = (finish1 - start1 + 1) + let len2 = (finish2 - start2 + 1) + + let setArrayElem = + match nonFixedDim1, nonFixedDim2 with + | 2, 3 -> (fun i j -> SetArray4D target index1 index2 (bound1 + start1 + i) (bound2 + start2 + j) (GetArray2D source i j)) + | 1, 3 -> (fun i j -> SetArray4D target index1 (bound1 + start1 + i) index2 (bound2 + start2 + j) (GetArray2D source i j)) + | 1, 2 -> (fun i j -> SetArray4D target index1 (bound1 + start1 + i) (bound2 + start2 + j) index2 (GetArray2D source i j)) + | 0, 3 -> (fun i j -> SetArray4D target (bound1 + start1 + i) index1 index2 (bound2 + start2 + j) (GetArray2D source i j)) + | 0, 2 -> (fun i j -> SetArray4D target (bound1 + start1 + i) index1 (bound2 + start2 + j) index2 (GetArray2D source i j)) + | 0, 1 -> (fun i j -> SetArray4D target (bound1 + start1 + i) (bound2 + start2 + j) index1 index2 (GetArray2D source i j)) + | _ -> raise (System.IndexOutOfRangeException()) + + for i = 0 to len1 - 1 do + for j = 0 to len2 - 1 do + setArrayElem i j + + let inline SetArraySlice4DFixedDouble1 (target: _[,,,]) index1 index2 start3 finish3 start4 finish4 (source: _[,]) = + SetArraySlice4DFixedDouble target source index1 index2 start3 finish3 start4 finish4 2 3 + + let inline SetArraySlice4DFixedDouble2 (target: _[,,,]) index1 start2 finish2 index3 start4 finish4 (source: _[,]) = + SetArraySlice4DFixedDouble target source index1 index3 start2 finish2 start4 finish4 1 3 + + let inline SetArraySlice4DFixedDouble3 (target: _[,,,]) index1 start2 finish2 start3 finish3 index4 (source: _[,]) = + SetArraySlice4DFixedDouble target source index1 index4 start2 finish2 start3 finish3 1 2 + + let inline SetArraySlice4DFixedDouble4 (target: _[,,,]) start1 finish1 index2 index3 start4 finish4 (source: _[,]) = + SetArraySlice4DFixedDouble target source index2 index3 start1 finish1 start4 finish4 0 3 + + let inline SetArraySlice4DFixedDouble5 (target: _[,,,]) start1 finish1 index2 start3 finish3 index4 (source: _[,]) = + SetArraySlice4DFixedDouble target source index2 index4 start1 finish1 start3 finish3 0 2 + + let inline SetArraySlice4DFixedDouble6 (target: _[,,,]) start1 finish1 start2 finish2 index3 index4 (source: _[,]) = + SetArraySlice4DFixedDouble target source index3 index4 start1 finish1 start2 finish2 0 1 + + let inline SetArraySlice4DFixedTriple (target: _[,,,]) (source: _[]) index1 index2 index3 start1 finish1 nonFixedDim1 = + let bound1 = target.GetLowerBound(nonFixedDim1) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength target nonFixedDim1) + let len1 = (finish1 - start1 + 1) + let setArrayElem = + match nonFixedDim1 with + | 0 -> (fun i -> SetArray4D target (bound1 + start1 + i) index1 index2 index3 (GetArray source i)) + | 1 -> (fun i -> SetArray4D target index1 (bound1 + start1 + i) index2 index3 (GetArray source i)) + | 2 -> (fun i -> SetArray4D target index1 index2 (bound1 + start1 + i) index3 (GetArray source i)) + | 3 -> (fun i -> SetArray4D target index1 index2 index3 (bound1 + start1 + i) (GetArray source i)) + | _ -> raise (System.IndexOutOfRangeException()) + for i = 0 to len1 - 1 do + setArrayElem i + + let inline SetArraySlice4DFixedTriple1 (target: _[,,,]) start1 finish1 index2 index3 index4 (source: _[]) = + SetArraySlice4DFixedTriple target source index2 index3 index4 start1 finish1 0 + + let inline SetArraySlice4DFixedTriple2 (target: _[,,,]) index1 start2 finish2 index3 index4 (source: _[]) = + SetArraySlice4DFixedTriple target source index1 index3 index4 start2 finish2 1 + + let inline SetArraySlice4DFixedTriple3 (target: _[,,,]) index1 index2 start3 finish3 index4 (source: _[]) = + SetArraySlice4DFixedTriple target source index1 index2 index4 start3 finish3 2 + + let inline SetArraySlice4DFixedTriple4 (target: _[,,,]) index1 index2 index3 start4 finish4 (source: _[]) = + SetArraySlice4DFixedTriple target source index1 index2 index3 start4 finish4 3 let inline GetStringSlice (source: string) start finish = let start, finish = ComputeSlice 0 start finish source.Length @@ -5712,10 +5937,10 @@ namespace Microsoft.FSharp.Core member arr.GetReverseIndex(dim: int, offset: int) = let len = match dim with - | 0 -> Array4DLength1 arr - | 1 -> Array4DLength2 arr - | 2 -> Array4DLength3 arr - | 3 -> Array4DLength4 arr + | 0 -> GetArray4DLength1 arr + | 1 -> GetArray4DLength2 arr + | 2 -> GetArray4DLength3 arr + | 3 -> GetArray4DLength4 arr | _ -> raise (System.IndexOutOfRangeException()) len - offset - 1 diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 5a5fa8b94c..0f1ba6901f 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -2809,7 +2809,7 @@ namespace Microsoft.FSharp.Core /// The start index of the second dimension. /// The end index of the second dimension. /// The two dimensional sub array from the input indices. - val GetArraySlice2D : source:'T[,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> 'T[,] + val inline GetArraySlice2D : source:'T[,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> 'T[,] /// Gets a vector slice of a 2D array. The index of the first dimension is fixed. /// The source array. @@ -2834,7 +2834,7 @@ namespace Microsoft.FSharp.Core /// The start index of the second dimension. /// The end index of the second dimension. /// The source array. - val SetArraySlice2D : target:'T[,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> source:'T[,] -> unit + val inline SetArraySlice2D : target:'T[,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> source:'T[,] -> unit /// Sets a vector slice of a 2D array. The index of the first dimension is fixed. /// The target array. @@ -2861,7 +2861,7 @@ namespace Microsoft.FSharp.Core /// The start index of the third dimension. /// The end index of the third dimension. /// The three dimensional sub array from the given indices. - val GetArraySlice3D : source:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> 'T[,,] + val inline GetArraySlice3D : source:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> 'T[,,] /// Gets a 2D slice of a 3D array. /// The source array. @@ -2929,7 +2929,7 @@ namespace Microsoft.FSharp.Core /// The start index of the third dimension. /// The end index of the third dimension. /// The source array. - val SetArraySlice3D : target:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> source:'T[,,] -> unit + val inline SetArraySlice3D : target:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> source:'T[,,] -> unit /// Sets a 2D slice of a 3D array /// The target array. @@ -3005,7 +3005,315 @@ namespace Microsoft.FSharp.Core /// The start index of the fourth dimension. /// The end index of the fourth dimension. /// The four dimensional sub array from the given indices. - val GetArraySlice4D : source:'T[,,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> 'T[,,,] + val inline GetArraySlice4D : source:'T[,,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> 'T[,,,] + + /// Gets a 3D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The three dimensional sub array from the given indices. + val inline GetArraySlice4DFixedSingle1 : source:'T[,,,] -> index1:int -> start2: int option -> finish2:int option -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> 'T[,,] + + /// Gets a 3D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The three dimensional sub array from the given indices. + val inline GetArraySlice4DFixedSingle2 : source:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> 'T[,,] + + /// Gets a 3D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The three dimensional sub array from the given indices. + val inline GetArraySlice4DFixedSingle3 : source:'T[,,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> index3:int -> start4:int option -> finish4:int option -> 'T[,,] + + /// Gets a 3D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The three dimensional sub array from the given indices. + val inline GetArraySlice4DFixedSingle4 : source:'T[,,,] -> start1:int option -> finish1:int option -> start2: int option -> finish2:int option -> start3:int option -> finish3:int option -> index4:int -> 'T[,,] + + /// Gets a 2D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice4DFixedDouble1 : source:'T[,,,] -> index1: int -> index2:int -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> 'T[,] + + /// Gets a 2D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice4DFixedDouble2 : source:'T[,,,] -> index1: int -> start2: int option -> finish2:int option -> index3:int -> start4:int option -> finish4:int option -> 'T[,] + + /// Gets a 2D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice4DFixedDouble3 : source:'T[,,,] -> index1:int -> start2: int option -> finish2:int option -> start3:int option -> finish3:int option -> index4:int -> 'T[,] + + /// Gets a 2D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice4DFixedDouble4 : source:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> start4:int option -> finish4:int option -> 'T[,] + + /// Gets a 2D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice4DFixedDouble5 : source:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> start3:int option -> finish3:int option -> index4:int -> 'T[,] + + /// Gets a 2D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The fixed index of the fourth dimension. + /// The two dimensional sub array from the given indices. + val inline GetArraySlice4DFixedDouble6 : source:'T[,,,] -> start1:int option -> finish1:int option -> start2: int option -> finish2:int option -> index3:int -> index4:int -> 'T[,] + + /// Gets a 1D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice4DFixedTriple4 : source:'T[,,,] -> index1:int -> index2:int -> index3:int -> start4:int option -> finish4:int option -> 'T[] + + /// Gets a 1D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice4DFixedTriple3 : source:'T[,,,] -> index1:int -> index2:int -> start3:int option -> finish3:int option -> index4:int -> 'T[] + + /// Gets a 1D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The fixed index of the fourth dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice4DFixedTriple2 : source:'T[,,,] -> index1:int -> start2: int option -> finish2:int option -> index3:int -> index4:int -> 'T[] + + /// Gets a 1D slice of a 4D array + /// The source array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The fixed index of the fourth dimension. + /// The one dimensional sub array from the given indices. + val inline GetArraySlice4DFixedTriple1 : source:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> index4:int -> 'T[] + + /// Gets a 3D slice of a 4D array + /// The source array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedSingle1 : target:'T[,,,] -> index1:int -> start2: int option -> finish2:int option -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> source: 'T[,,] -> unit + + /// Sets a 3D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedSingle2 : target:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> source: 'T[,,] -> unit + + /// Sets a 3D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedSingle3 : target:'T[,,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> index3:int -> start4:int option -> finish4:int option -> source: 'T[,,] -> unit + + /// Sets a 3D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedSingle4 : target:'T[,,,] -> start1:int option -> finish1:int option -> start2: int option -> finish2:int option -> start3:int option -> finish3:int option -> index4:int -> source: 'T[,,] -> unit + + /// Sets a 2D slice of a 4D array + /// The target array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedDouble1 : target:'T[,,,] -> index1: int -> index2:int -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 4D array + /// The target array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedDouble2 : target:'T[,,,] -> index1: int -> start2: int option -> finish2:int option -> index3:int -> start4:int option -> finish4:int option -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 4D array + /// The target array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedDouble3 : target:'T[,,,] -> index1:int -> start2: int option -> finish2:int option -> start3:int option -> finish3:int option -> index4:int -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedDouble4 : target:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> start4:int option -> finish4:int option -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedDouble5 : target:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> start3:int option -> finish3:int option -> index4:int -> source: 'T[,] -> unit + + /// Sets a 2D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedDouble6 : target:'T[,,,] -> start1:int option -> finish1:int option -> start2: int option -> finish2:int option -> index3:int -> index4:int -> source: 'T[,] -> unit + + /// Sets a 1D slice of a 4D array + /// The target array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The start index of the fourth dimension. + /// The end index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedTriple4 : target:'T[,,,] -> index1:int -> index2:int -> index3:int -> start4:int option -> finish4:int option -> source: 'T[] -> unit + + /// Sets a 1D slice of a 4D array + /// The target array. + /// The fixed index of the first dimension. + /// The fixed index of the second dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedTriple3 : target:'T[,,,] -> index1:int -> index2:int -> start3:int option -> finish3:int option -> index4:int -> source: 'T[] -> unit + + /// Sets a 1D slice of a 4D array + /// The target array. + /// The fixed index of the first dimension. + /// The start index of the second dimension. + /// The end index of the second dimension. + /// The fixed index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedTriple2 : target:'T[,,,] -> index1:int -> start2: int option -> finish2:int option -> index3:int -> index4:int -> source: 'T[] -> unit + + /// Sets a 1D slice of a 4D array + /// The target array. + /// The start index of the first dimension. + /// The end index of the first dimension. + /// The fixed index of the second dimension. + /// The fixed index of the third dimension. + /// The fixed index of the fourth dimension. + /// The source array. + val inline SetArraySlice4DFixedTriple1 : target:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> index4:int -> source: 'T[] -> unit /// Sets a slice of an array /// The target array. @@ -3018,7 +3326,7 @@ namespace Microsoft.FSharp.Core /// The start index of the fourth dimension. /// The end index of the fourth dimension. /// The source array. - val SetArraySlice4D : target:'T[,,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> source:'T[,,,] -> unit + val inline SetArraySlice4D : target:'T[,,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> start4:int option -> finish4:int option -> source:'T[,,,] -> unit /// Gets a slice from a string /// The source string. diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index c0ebf41da9..d751a34efb 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -28,6 +28,7 @@ type LanguageFeature = | OpenStaticClasses = 8 | PackageManagement = 9 | FromEndSlicing = 11 + | FixedIndexSlice3d4d = 12 | LanguageVersion46 = 0x10046 | LanguageVersion47 = 0x10047 | LanguageVersion50 = 0x10050 @@ -65,6 +66,7 @@ type LanguageVersion (specifiedVersionAsString) = LanguageFeature.NameOf, previewVersion LanguageFeature.OpenStaticClasses, previewVersion LanguageFeature.PackageManagement, previewVersion + LanguageFeature.FixedIndexSlice3d4d, previewVersion LanguageFeature.FromEndSlicing, previewVersion ] diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index 6bcdb72617..eef22815b1 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -15,6 +15,7 @@ type LanguageFeature = | OpenStaticClasses = 8 | PackageManagement = 9 | FromEndSlicing = 11 + | FixedIndexSlice3d4d = 12 | LanguageVersion46 = 0x10046 | LanguageVersion47 = 0x10047 | LanguageVersion50 = 0x10050 diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 911db145e0..628a8a2dfe 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -6372,48 +6372,87 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg | _ -> SynExpr.Paren (SynExpr.Tuple (false, expandedIndexArgs @ Option.toList setSliceArrayOption, [], idxRange), range0, None, idxRange) let attemptArrayString = - if isArray || isString then - - let indexOpPath = ["Microsoft";"FSharp";"Core";"LanguagePrimitives";"IntrinsicFunctions"] - let sliceOpPath = ["Microsoft";"FSharp";"Core";"Operators";"OperatorIntrinsics"] - let info = - match isString, isArray, wholeExpr with - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _; SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetArray2D", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _;], _, _) -> Some (indexOpPath, "GetArray3D", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetArray4D", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetArray", expandedIndexArgs) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _; SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray2D", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _;], e3, _, _, _) -> Some (indexOpPath, "SetArray3D", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray4D", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray", (expandedIndexArgs @ [e3])) - | true, false, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetStringSlice", expandedIndexArgs) - | true, false, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetString", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice2DFixed1", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice2DFixed2", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice2D", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3D", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle1", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle2", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle3", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble1", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble2", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble3", expandedIndexArgs) - | false, true, SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4D", expandedIndexArgs) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2D", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2DFixed1", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2DFixed2", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3D", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle1", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle2", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle3", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble1", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble2", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble3", (expandedIndexArgs @ [e3])) - | false, true, SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4D", (expandedIndexArgs @ [e3])) - | _ -> None // error(Error(FSComp.SR.tcInvalidIndexerExpression(), mWholeExpr)) - match info with + let indexOpPath = ["Microsoft";"FSharp";"Core";"LanguagePrimitives";"IntrinsicFunctions"] + let sliceOpPath = ["Microsoft";"FSharp";"Core";"Operators";"OperatorIntrinsics"] + + let info = + if isArray then + let fixedIndex3d4dEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.FixedIndexSlice3d4d + match wholeExpr with + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _; SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetArray2D", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _;], _, _) -> Some (indexOpPath, "GetArray3D", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetArray4D", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetArray", expandedIndexArgs) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _; SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray2D", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _;], e3, _, _, _) -> Some (indexOpPath, "SetArray3D", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _; SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray4D", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice2DFixed1", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice2DFixed2", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice2D", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3D", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4D", expandedIndexArgs) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2D", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2DFixed1", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice2DFixed2", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3D", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4D", (expandedIndexArgs @ [e3])) + | _ when fixedIndex3d4dEnabled -> + match wholeExpr with + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle1", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle2", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedSingle3", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble1", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble2", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice3DFixedDouble3", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedSingle1", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedSingle2", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedSingle3", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedSingle4", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedDouble1", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedDouble2", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedDouble3", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedDouble4", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedDouble5", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedDouble6", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedTriple1", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedTriple2", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedTriple3", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetArraySlice4DFixedTriple4", expandedIndexArgs) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle1", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle2", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedSingle3", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble1", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble2", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice3DFixedDouble3", (expandedIndexArgs @ [e3])) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedSingle1", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedSingle2", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedSingle3", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedSingle4", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedDouble1", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedDouble2", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedDouble3", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedDouble4", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedDouble5", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedDouble6", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedTriple1", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedTriple2", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _;SynIndexerArg.One _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedTriple3", expandedIndexArgs @ [e3]) + | SynExpr.DotIndexedSet (_, [SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.One _;SynIndexerArg.Two _], e3, _, _, _) -> Some (sliceOpPath, "SetArraySlice4DFixedTriple4", expandedIndexArgs @ [e3]) + | _ -> None + | _ -> None + + elif isString then + match wholeExpr with + | SynExpr.DotIndexedGet (_, [SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetStringSlice", expandedIndexArgs) + | SynExpr.DotIndexedGet (_, [SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetString", expandedIndexArgs) + | _ -> None + + else None + + match info with | None -> None | Some (path, functionName, indexArgs) -> let operPath = mkSynLidGet mDot path (CompileOpName functionName) @@ -6423,7 +6462,6 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg let f', resultTy = buildApp cenv (MakeApplicableExprNoFlex cenv f) resultTy e1' mWholeExpr let delayed = List.foldBack (fun idx acc -> DelayedApp(ExprAtomicFlag.Atomic, idx, mWholeExpr) :: acc) indexArgs delayed // atomic, otherwise no ar.[1] <- xyz Some (PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr f' resultTy ExprAtomicFlag.Atomic delayed ) - else None match attemptArrayString with | Some res -> res diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs index f87aa750b1..ac2ba84430 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs @@ -31,6 +31,8 @@ type Array4Module() = () let array4d (arrs: 'a array array array array) = Array4D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length arrs.[0].[0].[0].Length (fun i j k m -> arrs.[i].[j].[k].[m]) + + let array3d (arrs: 'a array array array ) = Array3D.init arrs.Length arrs.[0].Length arrs.[0].[0].Length (fun i j k -> arrs.[i].[j].[k]) let shouldBeEmpty arr = if Array4D.length4 arr <> 0 @@ -269,6 +271,335 @@ type Array4Module() = () + [] + member this.SlicingTripleFixed1() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = [|0.; 0.; 0.; 0.; 0. ; 0.;|] + m1.[0,0,0,*] <- newSlice + Assert.AreEqual(m1.[0,0,1,0], 11.0) + Assert.AreEqual(m1.[0,0,0,*], newSlice) + + [] + member this.SlicingTripleFixed2() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = [|0. ; 0.;|] + m1.[0,0,*,0] <- newSlice + Assert.AreEqual(m1.[0,0,0,1], 2.0) + Assert.AreEqual(m1.[0,0,*,0], newSlice) + + [] + member this.SlicingTripleFixed3() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = [|0.; 0.;|] + m1.[0,*,0,0] <- newSlice + Assert.AreEqual(m1.[1,0,0,0], 19.0) + Assert.AreEqual(m1.[0,*,0,0], newSlice) + + [] + member this.SlicingTripleFixed4() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = [|0.; 0.;|] + m1.[*,0,0,0] <- newSlice + Assert.AreEqual(m1.[0,1,0,0], 10.0) + Assert.AreEqual(m1.[*,0,0,0], newSlice) + + [] + member this.SlicingDoubleFixed1() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array2D [| + [|0.;0.;0.;0.;0.;0.|] + [|0.;0.;0.;0.;0.;0.|] + |] + m1.[0,0,*,*] <- newSlice + Assert.AreEqual(m1.[1,1,0,0], 109.0) + if m1.[0,0,*,*] <> newSlice then Assert.Fail() + + [] + member this.SlicingDoubleFixed2() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array2D [| + [|0.;0.;0.;0.;0.;0.|] + [|0.;0.;0.;0.;0.;0.|] + |] + m1.[0,*,0,*] <- newSlice + Assert.AreEqual(m1.[1,0,1,0], 119.0) + if m1.[0,*,0,*] <> newSlice then Assert.Fail() + + [] + member this.SlicingDoubleFixed3() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array2D [| + [|0.; 0.|] + [|0.; 0.|] + |] + m1.[0,*,*,0] <- newSlice + Assert.AreEqual(m1.[1,0,0,1], 29.0) + if m1.[0,*,*,0] <> newSlice then Assert.Fail() + + [] + member this.SlicingDoubleFixed4() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array2D [| + [|0.;0.;0.;0.;0.;0.|] + [|0.;0.;0.;0.;0.;0.|] + |] + + m1.[*,0,0,*] <- newSlice + Assert.AreEqual(m1.[0,1,0,0], 10.0) + if m1.[*,0,0,*] <> newSlice then Assert.Fail() + + + [] + member this.SlicingDoubleFixed5() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array2D [| + [|0.;0.|] + [|0.;0.|] + |] + + m1.[*,0,*,0] <- newSlice + Assert.AreEqual(m1.[0,1,0,1], 20.0) + if m1.[*,0,*,0] <> newSlice then Assert.Fail() + + [] + member this.SlicingDoubleFixed6() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array2D [| + [|0.;0.|] + [|0.;0.|] + |] + + m1.[*,*,0,0] <- newSlice + Assert.AreEqual(m1.[0,0,1,1], 21.0) + if m1.[*,*,0,0] <> newSlice then Assert.Fail() + + [] + member this.SlicingSingleFixed1() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array3d [| + [| [|0.;0.|]; + [|0.;0.|] |]; + [| [|0.;0.|]; + [|0.;0.|] |] + |] + + m1.[*,*,*,0] <- newSlice + Assert.AreEqual(m1.[0,0,0,1], 2.0) + if m1.[*,*,*,0] <> newSlice then Assert.Fail() + + [] + member this.SlicingSingleFixed2() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array3d [| + [| [|0.;0.;0.;0.;0.;0.|]; + [|0.;0.;0.;0.;0.;0.|] |]; + [| + [|0.;0.;0.;0.;0.;0.|]; + [|0.;0.;0.;0.;0.;0.|] |] + |] + + m1.[*,*,0,*] <- newSlice + Assert.AreEqual(m1.[0,0,1,0], 11.0) + if m1.[*,*,0,*] <> newSlice then Assert.Fail() + + [] + member this.SlicingSingleFixed3() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array3d [| + [| [|0.;0.;0.;0.;0.;0.|]; + [|0.;0.;0.;0.;0.;0.|] |]; + [| + [|0.;0.;0.;0.;0.;0.|]; + [|0.;0.;0.;0.;0.;0.|] |] + |] + + m1.[*,0,*,*] <- newSlice + Assert.AreEqual(m1.[0,1,0,0], 10.0) + if m1.[*,0,*,*] <> newSlice then Assert.Fail() + + [] + member this.SlicingSingleFixed4() = + let m1 = array4d [| + [| + [| [| 1.0;2.0;3.0;4.0;5.0;6.0 |]; + [| 11.0;21.0;31.0;41.0;51.0;61.0 |] |] + [| [| 10.0;20.0;30.0;40.0;50.0;60.0 |]; + [| 100.0;200.0;300.0;400.0;500.0;600.0 |] |] |] + [| + [| [| 19.0;29.0;39.0;49.0;59.0;69.0 |]; + [| 119.0;219.0;319.0;419.0;519.0;619.0 |] |] + [| [| 109.0;209.0;309.0;409.0;509.0;609.0 |]; + [| 1009.0;2009.0;3009.0;4009.0;5009.0;6009.0 |] |] |] + |] + + let newSlice = array3d [| + [| [|0.;0.;0.;0.;0.;0.|]; + [|0.;0.;0.;0.;0.;0.|] |]; + [| + [|0.;0.;0.;0.;0.;0.|]; + [|0.;0.;0.;0.;0.;0.|] |] + |] + + m1.[0,*,*,*] <- newSlice + Assert.AreEqual(m1.[1,0,0,0], 19.0) + if m1.[0,*,*,*] <> newSlice then Assert.Fail() + [] member this.``Slicing with reverse index in all slice expr behaves as expected``() = let arr = Array4D.init 5 5 5 5 (fun i j k l -> i*1000 + j*100 + k*10 + l) diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index a18ef909f0..0e4685a346 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -2021,6 +2021,34 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSin Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle2[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle1[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle2[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle3[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble1[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble3[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble5[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble6[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple1[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple3[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple4[T](T[,,,], Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble1[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble3[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble5[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble6[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle1[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle2[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle3[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple1[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple3[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple4[T](T[,,,], Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index 243d0a4be6..4857dba6c1 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -2021,6 +2021,34 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSin Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle2[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3DFixedSingle3[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle1[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle2[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle3[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice4DFixedSingle4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble1[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble3[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble5[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice4DFixedDouble6[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple1[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple3[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice4DFixedTriple4[T](T[,,,], Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble1[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble3[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble5[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedDouble6[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle1[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle2[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle3[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedSingle4[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple1[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple2[T](T[,,,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple3[T](T[,,,], Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4DFixedTriple4[T](T[,,,], Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) diff --git a/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs b/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs new file mode 100644 index 0000000000..56b47334a4 --- /dev/null +++ b/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs @@ -0,0 +1,139 @@ +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Compiler.SourceCodeServices + +[] +module FixedIndexSliceTests = + + [] + let ``Fixed index 3d slicing should not be available in 47``() = + CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:4.7"|] + """ +open System + +let arr3 = Array3D.create 2 2 2 2 +arr3.[1, *, *] +arr3.[*, 1, *] +arr3.[*, *, 1] +arr3.[1, 1, *] +arr3.[*, 1, *] +arr3.[*, 1, 1] + """ + [| + FSharpErrorSeverity.Error, 39, (5,1,5,15), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (6,1,6,15), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (7,1,7,15), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (8,1,8,15), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (9,1,9,15), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (10,1,10,15), "The field, constructor or member 'GetSlice' is not defined." + |] + + [] + let ``Fixed index 4d slicing should not be available in 47``() = + CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:4.7"|] + """ +open System + +let arr4 = Array4D.create 2 2 2 2 2 +arr4.[1, *, *, *] +arr4.[*, 1, *, *] +arr4.[*, *, 1, *] +arr4.[*, *, *, 1] +arr4.[1, 1, *, *] +arr4.[1, *, 1, *] +arr4.[1, *, *, 1] +arr4.[*, 1, 1, *] +arr4.[*, *, 1, 1] +arr4.[1, *, 1, 1] +arr4.[1, 1, *, 1] +arr4.[1, 1, 1, *] +arr4.[*, 1, 1, 1] + """ + [| + FSharpErrorSeverity.Error, 39, (5,1,5,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (6,1,6,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (7,1,7,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (8,1,8,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (9,1,9,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (10,1,10,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (11,1,11,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (12,1,12,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (13,1,13,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (14,1,14,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (15,1,15,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (16,1,16,18), "The field, constructor or member 'GetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (17,1,17,18), "The field, constructor or member 'GetSlice' is not defined." + |] + + [] + let ``Fixed index 3d set slicing should not be available in 47``() = + CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:4.7"|] + """ +open System + +let arr3 = Array3D.create 2 2 2 2 +let arr2 = array2D [ [1;2]; [3;4] ] +let arr1 = [|1;2|] +arr3.[1, *, *] <- arr2 +arr3.[*, 1, *] <- arr2 +arr3.[*, *, 1] <- arr2 +arr3.[1, 1, *] <- arr1 +arr3.[*, 1, *] <- arr1 +arr3.[*, 1, 1] <- arr1 + """ + [| + FSharpErrorSeverity.Error, 39, (7,1,7,15), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (8,1,8,15), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (9,1,9,15), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (10,1,10,15), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (11,1,11,15), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (12,1,12,15), "The field, constructor or member 'SetSlice' is not defined." + |] + + [] + let ``Fixed index 4d set slicing should not be available in 47``() = + CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:4.7"|] + """ +open System + +let arr4 = Array4D.create 2 2 2 2 2 +let arr3 = Array3D.create 2 2 2 2 +let arr2 = array2D [ [1;2]; [3;4] ] +let arr1 = [|1;2|] +arr4.[1, *, *, *] <- arr3 +arr4.[*, 1, *, *] <- arr3 +arr4.[*, *, 1, *] <- arr3 +arr4.[*, *, *, 1] <- arr3 +arr4.[1, 1, *, *] <- arr2 +arr4.[1, *, 1, *] <- arr2 +arr4.[1, *, *, 1] <- arr2 +arr4.[*, 1, *, 1] <- arr2 +arr4.[*, 1, 1, *] <- arr2 +arr4.[*, *, 1, 1] <- arr2 +arr4.[1, *, 1, 1] <- arr1 +arr4.[1, 1, *, 1] <- arr1 +arr4.[1, 1, 1, *] <- arr1 +arr4.[*, 1, 1, 1] <- arr1 + """ + [| + FSharpErrorSeverity.Error, 39, (8,1,8,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (9,1,9,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (10,1,10,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (11,1,11,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (12,1,12,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (13,1,13,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (14,1,14,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (15,1,15,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (16,1,16,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (17,1,17,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (18,1,18,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (19,1,19,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (20,1,20,18), "The field, constructor or member 'SetSlice' is not defined." + FSharpErrorSeverity.Error, 39, (21,1,21,18), "The field, constructor or member 'SetSlice' is not defined." + |] + + + + + diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index c0c63543ae..41ef988bc7 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -57,6 +57,7 @@ + From 2fbd4d81c826043831c34f17f2f4b9d61b0909c0 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 4 Dec 2019 10:58:14 -0800 Subject: [PATCH 117/214] Update dependencies from https://github.com/dotnet/arcade build 20191203.17 (#7933) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19603.17 --- eng/Version.Details.xml | 4 +- eng/common/SetupNugetSources.ps1 | 65 ++++++++++--------- eng/common/SetupNugetSources.sh | 78 ++++++++++++++++------- eng/common/build.ps1 | 11 +--- eng/common/init-tools-native.ps1 | 6 +- eng/common/native/install-tool.ps1 | 2 +- eng/common/pipeline-logging-functions.ps1 | 2 +- global.json | 2 +- 8 files changed, 103 insertions(+), 67 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 0288911f9e..c39e4f27f1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 9d34fd008e754e1ada35c8b6bc3694e7a90b4ed7 + b902fd6b6948e689a5128fa6d94dc7de13e6af84 diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 6662e4bc1e..a5a1e711d7 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -16,7 +16,7 @@ # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: # filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 -# arguments: -ConfigFile ${Env:BUILD_SOURCESDIRECTORY}/NuGet.config -Password $Env:Token +# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token # env: # Token: $(dn-bot-dnceng-artifact-feeds-rw) @@ -94,41 +94,48 @@ function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Password) { } } -try { - if (!(Test-Path $ConfigFile -PathType Leaf)) { - Write-PipelineTelemetryError -Category 'Build' -Message "Couldn't find the file NuGet config file: $ConfigFile" +if (!(Test-Path $ConfigFile -PathType Leaf)) { + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile" + ExitWithExitCode 1 +} + +if (!$Password) { + Write-PipelineTelemetryError -Category 'Build' -Message 'Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. Please supply a valid PAT' ExitWithExitCode 1 - } +} - # Load NuGet.config - $doc = New-Object System.Xml.XmlDocument - $filename = (Get-Item $ConfigFile).FullName - $doc.Load($filename) +# Load NuGet.config +$doc = New-Object System.Xml.XmlDocument +$filename = (Get-Item $ConfigFile).FullName +$doc.Load($filename) - # Get reference to or create one if none exist already - $sources = $doc.DocumentElement.SelectSingleNode("packageSources") - if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null - } +# Get reference to or create one if none exist already +$sources = $doc.DocumentElement.SelectSingleNode("packageSources") +if ($sources -eq $null) { + $sources = $doc.CreateElement("packageSources") + $doc.DocumentElement.AppendChild($sources) | Out-Null +} - # Looks for a node. Create it if none is found. - $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") - if ($creds -eq $null) { - $creds = $doc.CreateElement("packageSourceCredentials") - $doc.DocumentElement.AppendChild($creds) | Out-Null - } +# Looks for a node. Create it if none is found. +$creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") +if ($creds -eq $null) { + $creds = $doc.CreateElement("packageSourceCredentials") + $doc.DocumentElement.AppendChild($creds) | Out-Null +} - # Insert credential nodes for Maestro's private feeds - InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password +# Insert credential nodes for Maestro's private feeds +InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password +$dotnet3Source = $sources.SelectSingleNode("add[@key='dotnet3']") +if ($dotnet3Source -ne $null) { AddPackageSource -Sources $sources -SourceName "dotnet3-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password AddPackageSource -Sources $sources -SourceName "dotnet3-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password - - $doc.Save($filename) } -catch { - Write-Host $_.ScriptStackTrace - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ - ExitWithExitCode 1 + +$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") +if ($dotnet31Source -ne $null) { + AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password + AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password } + +$doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index 55ad70e366..7d6fef27fe 100644 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -17,7 +17,7 @@ # displayName: Setup Private Feeds Credentials # inputs: # filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh -# arguments: $BUILD_SOURCESDIRECTORY/NuGet.config $Token +# arguments: $(Build.SourcesDirectory)/NuGet.config $Token # condition: ne(variables['Agent.OS'], 'Windows_NT') # env: # Token: $(dn-bot-dnceng-artifact-feeds-rw) @@ -42,7 +42,12 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" . "$scriptroot/tools.sh" if [ ! -f "$ConfigFile" ]; then - Write-PipelineTelemetryError -Category 'Build' -Message "Couldn't find the file NuGet config file: $ConfigFile" + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile" + ExitWithExitCode 1 +fi + +if [ -z "$CredToken" ]; then + Write-PipelineTelemetryError -category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. Please supply a valid PAT" ExitWithExitCode 1 fi @@ -52,7 +57,7 @@ if [[ `uname -s` == "Darwin" ]]; then fi # Ensure there is a ... section. -grep -i "" $ConfigFile +grep -i "" $ConfigFile if [ "$?" != "0" ]; then echo "Adding ... section." ConfigNodeHeader="" @@ -62,7 +67,7 @@ if [ "$?" != "0" ]; then fi # Ensure there is a ... section. -grep -i "" $ConfigFile +grep -i "" $ConfigFile if [ "$?" != "0" ]; then echo "Adding ... section." @@ -72,37 +77,64 @@ if [ "$?" != "0" ]; then sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" NuGet.config fi -# Ensure dotnet3-internal and dotnet3-internal-transport is in the packageSources -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding dotnet3-internal to the packageSources." +PackageSources=() - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" +# Ensure dotnet3-internal and dotnet3-internal-transport are in the packageSources if the public dotnet3 feeds are present +grep -i "" $ConfigFile + if [ "$?" != "0" ]; then + echo "Adding dotnet3-internal to the packageSources." + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3-internal') + + grep -i "" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" NuGet.config + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3-internal-transport') fi -# Ensure dotnet3-internal and dotnet3-internal-transport is in the packageSources -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding dotnet3-internal-transport to the packageSources." +# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present +grep -i "" - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3.1-internal') + + grep -i "" $ConfigFile + if [ "$?" != "0" ]; then + echo "Adding dotnet3.1-internal-transport to the packageSources." + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" NuGet.config + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3.1-internal-transport') fi # I want things split line by line PrevIFS=$IFS IFS=$'\n' -PackageSources=$(grep -oh '"darc-int-[^"]*"' $ConfigFile | tr -d '"') +PackageSources+="$IFS" +PackageSources+=$(grep -oh '"darc-int-[^"]*"' $ConfigFile | tr -d '"') IFS=$PrevIFS -PackageSources+=('dotnet3-internal') -PackageSources+=('dotnet3-internal-transport') - for FeedName in ${PackageSources[@]} ; do # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile @@ -112,6 +144,6 @@ for FeedName in ${PackageSources[@]} ; do PackageSourceCredentialsNodeFooter="" NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" - sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" NuGet.config + sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 0fd4d9c7f2..88814514d8 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -62,6 +62,8 @@ function Print-Usage() { Write-Host "The above arguments can be shortened as much as to be unambiguous (e.g. -co for configuration, -t for test, etc.)." } +. $PSScriptRoot\tools.ps1 + function InitializeCustomToolset { if (-not $restore) { return @@ -113,8 +115,6 @@ function Build { } try { - . $PSScriptRoot\tools.ps1 - if ($clean) { if (Test-Path $ArtifactsDir) { Remove-Item -Recurse -Force $ArtifactsDir @@ -122,12 +122,7 @@ try { } exit 0 } - - if ((Test-Path variable:LastExitCode) -And ($LastExitCode -ne 0)) { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message 'Eng/common/tools.ps1 returned a non-zero exit code.' - ExitWithExitCode $LastExitCode - } - + if ($help -or (($null -ne $properties) -and ($properties.Contains('/help') -or $properties.Contains('/?')))) { Print-Usage exit 0 diff --git a/eng/common/init-tools-native.ps1 b/eng/common/init-tools-native.ps1 index f4409f0835..db830c00a6 100644 --- a/eng/common/init-tools-native.ps1 +++ b/eng/common/init-tools-native.ps1 @@ -113,14 +113,16 @@ try { } $toolInstallationFailure = $true } else { - Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message $errMsg + # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482 + Write-Host $errMsg exit 1 } } } if ((Get-Variable 'toolInstallationFailure' -ErrorAction 'SilentlyContinue') -and $toolInstallationFailure) { - Write-PipelineTelemetryError -Category 'NativeToolsBootstrap' -Message 'Native tools bootstrap failed' + # We cannot change this to Write-PipelineTelemetryError because of https://github.com/dotnet/arcade/issues/4482 + Write-Host 'Native tools bootstrap failed' exit 1 } } diff --git a/eng/common/native/install-tool.ps1 b/eng/common/native/install-tool.ps1 index ca180d03ba..f397e1c75d 100644 --- a/eng/common/native/install-tool.ps1 +++ b/eng/common/native/install-tool.ps1 @@ -105,7 +105,7 @@ try { Write-Error "There are multiple copies of $ToolName in $($ToolInstallDirectory): `n$(@($ToolFilePath | out-string))" exit 1 } elseif (@($ToolFilePath).Length -Lt 1) { - Write-Error "$ToolName was not found in $ToolFilePath." + Write-Host "$ToolName was not found in $ToolFilePath." exit 1 } diff --git a/eng/common/pipeline-logging-functions.ps1 b/eng/common/pipeline-logging-functions.ps1 index e065618588..2688c389bd 100644 --- a/eng/common/pipeline-logging-functions.ps1 +++ b/eng/common/pipeline-logging-functions.ps1 @@ -85,7 +85,7 @@ function Write-PipelineTaskError { [switch]$AsOutput, [bool]$IsMultiJobVariable=$true) - if(-Not (Test-Path variable:ci) -Or !$ci) { + if((Test-Path variable:ci) -And $ci) { Write-LoggingCommand -Area 'task' -Event 'setvariable' -Data $Value -Properties @{ 'variable' = $Name 'isSecret' = $Secret diff --git a/global.json b/global.json index 707f7b7357..bbe81be30c 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19602.4", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19603.17", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 7b25d7f828808fd8fb2846593d59a11f7efeaded Mon Sep 17 00:00:00 2001 From: Will Smith Date: Sun, 8 Dec 2019 15:09:20 -0800 Subject: [PATCH 118/214] Use MemoryMappedFile API instead of p/invoke win32 calls (#7944) * Remove win32 mmf calls. Use .NET MemoryMappedFile API instead * Use DangerousGetHandle as it's an implementation detail * minor cleanup --- src/absil/ilread.fs | 154 ++++++-------------------------------------- 1 file changed, 21 insertions(+), 133 deletions(-) diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index cc5c865515..de201333a0 100644 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -14,6 +14,7 @@ open System.Collections.Concurrent open System.Collections.Generic open System.Diagnostics open System.IO +open System.IO.MemoryMappedFiles open System.Runtime.InteropServices open System.Text open Internal.Utilities @@ -184,124 +185,6 @@ type RawMemoryFile(fileName: string, obj: obj, addr: nativeint, length: int) = interface BinaryFile with override __.GetView() = view :>_ -/// Read from memory mapped files. -module MemoryMapping = - - type HANDLE = nativeint - type ADDR = nativeint - type SIZE_T = nativeint - - [] - extern bool CloseHandle (HANDLE _handler) - - [] - extern HANDLE CreateFile (string _lpFileName, - int _dwDesiredAccess, - int _dwShareMode, - HANDLE _lpSecurityAttributes, - int _dwCreationDisposition, - int _dwFlagsAndAttributes, - HANDLE _hTemplateFile) - - [] - extern HANDLE CreateFileMapping (HANDLE _hFile, - HANDLE _lpAttributes, - int _flProtect, - int _dwMaximumSizeLow, - int _dwMaximumSizeHigh, - string _lpName) - - [] - extern ADDR MapViewOfFile (HANDLE _hFileMappingObject, - int _dwDesiredAccess, - int _dwFileOffsetHigh, - int _dwFileOffsetLow, - SIZE_T _dwNumBytesToMap) - - [] - extern bool UnmapViewOfFile (ADDR _lpBaseAddress) - - let INVALID_HANDLE = new IntPtr(-1) - let MAP_READ = 0x0004 - let GENERIC_READ = 0x80000000 - let NULL_HANDLE = IntPtr.Zero - let FILE_SHARE_NONE = 0x0000 - let FILE_SHARE_READ = 0x0001 - let FILE_SHARE_WRITE = 0x0002 - let FILE_SHARE_READ_WRITE = 0x0003 - let CREATE_ALWAYS = 0x0002 - let OPEN_EXISTING = 0x0003 - let OPEN_ALWAYS = 0x0004 - -/// A view over a raw pointer to memory given by a memory mapped file. -/// NOTE: we should do more checking of validity here. -type MemoryMapView(start: nativeint) = - inherit BinaryView() - - override m.ReadByte i = - Marshal.ReadByte(start + nativeint i) - - override m.ReadBytes i n = - let res = Bytes.zeroCreate n - Marshal.Copy(start + nativeint i, res, 0, n) - res - - override m.ReadInt32 i = - Marshal.ReadInt32(start + nativeint i) - - override m.ReadUInt16 i = - uint16(Marshal.ReadInt16(start + nativeint i)) - - override m.CountUtf8String i = - let pStart = start + nativeint i - let mutable p = start - while Marshal.ReadByte p <> 0uy do - p <- p + 1n - int (p - pStart) - - override m.ReadUTF8String i = - let n = m.CountUtf8String i - System.Runtime.InteropServices.Marshal.PtrToStringAnsi(start + nativeint i, n) - -/// Memory maps a file and creates a single view over the entirety of its contents. The -/// lock on the file is only released when the object is disposed. -/// For memory mapping we currently take one view and never release it. -[] -type MemoryMapFile(fileName: string, view: MemoryMapView, hMap: MemoryMapping.HANDLE, hView: nativeint) = - - do stats.memoryMapFileOpenedCount <- stats.memoryMapFileOpenedCount + 1 - let mutable closed = false - static member Create fileName = - let hFile = MemoryMapping.CreateFile (fileName, MemoryMapping.GENERIC_READ, MemoryMapping.FILE_SHARE_READ_WRITE, IntPtr.Zero, MemoryMapping.OPEN_EXISTING, 0, IntPtr.Zero ) - if hFile.Equals MemoryMapping.INVALID_HANDLE then - failwithf "CreateFile(0x%08x)" (Marshal.GetHRForLastWin32Error()) - let protection = 0x00000002 - let hMap = MemoryMapping.CreateFileMapping (hFile, IntPtr.Zero, protection, 0, 0, null ) - ignore(MemoryMapping.CloseHandle hFile) - if hMap.Equals MemoryMapping.NULL_HANDLE then - failwithf "CreateFileMapping(0x%08x)" (Marshal.GetHRForLastWin32Error()) - - let hView = MemoryMapping.MapViewOfFile (hMap, MemoryMapping.MAP_READ, 0, 0, 0n) - - if hView.Equals IntPtr.Zero then - failwithf "MapViewOfFile(0x%08x)" (Marshal.GetHRForLastWin32Error()) - - let view = MemoryMapView hView - - MemoryMapFile(fileName, view, hMap, hView) - - member __.FileName = fileName - - member __.Close() = - stats.memoryMapFileClosedCount <- stats.memoryMapFileClosedCount + 1 - if not closed then - closed <- true - MemoryMapping.UnmapViewOfFile hView |> ignore - MemoryMapping.CloseHandle hMap |> ignore - - interface BinaryFile with - override __.GetView() = (view :> BinaryView) - /// Read file from memory blocks type ByteView(bytes: byte[]) = inherit BinaryView() @@ -3989,19 +3872,24 @@ let createByteFileChunk opts fileName chunk = | Some (start, length) -> File.ReadBinaryChunk(fileName, start, length) ByteFile(fileName, bytes) :> BinaryFile -let tryMemoryMapWholeFile opts fileName = - let file = - try - MemoryMapFile.Create fileName :> BinaryFile - with _ -> - createByteFileChunk opts fileName None - let disposer = - { new IDisposable with - member __.Dispose() = - match file with - | :? MemoryMapFile as m -> m.Close() // Note that the PE file reader is not required after this point for metadata-only reading - | _ -> () } - disposer, file +let createMemoryMapFile fileName = + let mmf, accessor, length = + let fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read) + let length = fileStream.Length + let mmf = MemoryMappedFile.CreateFromFile(fileStream, null, length, MemoryMappedFileAccess.Read, HandleInheritability.None, leaveOpen=false) + mmf, mmf.CreateViewAccessor(0L, fileStream.Length, MemoryMappedFileAccess.Read), length + let safeHolder = + { new obj() with + override x.Finalize() = + (x :?> IDisposable).Dispose() + interface IDisposable with + member x.Dispose() = + GC.SuppressFinalize x + accessor.Dispose() + mmf.Dispose() + stats.memoryMapFileClosedCount <- stats.memoryMapFileClosedCount + 1 } + stats.memoryMapFileOpenedCount <- stats.memoryMapFileOpenedCount + 1 + safeHolder, RawMemoryFile(fileName, safeHolder, accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length) :> BinaryFile let OpenILModuleReaderFromBytes fileName bytes opts = let pefile = ByteFile(fileName, bytes) :> BinaryFile @@ -4067,7 +3955,7 @@ let OpenILModuleReader fileName opts = // For metadata-only, always use a temporary, short-lived PE file reader, preferably over a memory mapped file. // Then use the metadata blob as the long-lived memory resource. - let disposer, pefileEager = tryMemoryMapWholeFile opts fullPath + let disposer, pefileEager = createMemoryMapFile fullPath use _disposer = disposer let (metadataPhysLoc, metadataSize, peinfo, pectxtEager, pevEager, _pdb) = openPEFileReader (fullPath, pefileEager, None, false) let mdfile = @@ -4106,7 +3994,7 @@ let OpenILModuleReader fileName opts = // still use an in-memory ByteFile let _disposer, pefile = if alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath then - tryMemoryMapWholeFile opts fullPath + createMemoryMapFile fullPath else let pefile = createByteFileChunk opts fullPath None let disposer = { new IDisposable with member __.Dispose() = () } From 32d8e9ad2a0c432af54ca9f7bc7ca311a0455394 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2019 22:40:24 +0000 Subject: [PATCH 119/214] [release/dev16.4] Update dependencies from dotnet/arcade (#7937) * Update dependencies from https://github.com/dotnet/arcade build 20191203.16 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19603.16 * rationalize package icon inclusion --- eng/Version.Details.xml | 4 +- eng/common/SetupNugetSources.ps1 | 141 ++++++++++ eng/common/SetupNugetSources.sh | 149 +++++++++++ eng/common/init-tools-native.ps1 | 1 - eng/common/sdl/execute-all-sdl-tools.ps1 | 52 ++-- eng/common/templates/job/execute-sdl.yml | 36 ++- eng/common/templates/job/job.yml | 142 +++++----- eng/common/templates/jobs/jobs.yml | 74 ++++-- ...dev-5.yml => generic-internal-channel.yml} | 39 +-- ...rnal-30.yml => generic-public-channel.yml} | 42 +-- .../post-build/channels/netcore-dev-31.yml | 132 ---------- .../channels/netcore-release-30.yml | 132 ---------- .../channels/netcore-release-31.yml | 132 ---------- .../channels/netcore-tools-latest.yml | 132 ---------- .../channels/public-validation-release.yml | 97 ------- .../templates/post-build/common-variables.yml | 28 +- .../templates/post-build/post-build.yml | 248 +++++++++++++++--- eng/common/tools.ps1 | 14 +- eng/common/tools.sh | 14 +- eng/targets/Settings.props | 1 + global.json | 4 +- .../FSharp.Compiler.Private.Scripting.nuspec | 1 + .../Microsoft.FSharp.Compiler.nuspec | 1 + .../FSharp.Core.nuget.csproj | 4 - .../FSharp.Core.nuget/FSharp.Core.nuspec | 3 +- src/fsharp/{FSharp.Core.nuget => }/icon.png | Bin 26 files changed, 762 insertions(+), 861 deletions(-) create mode 100644 eng/common/SetupNugetSources.ps1 create mode 100644 eng/common/SetupNugetSources.sh rename eng/common/templates/post-build/channels/{netcore-dev-5.yml => generic-internal-channel.yml} (78%) rename eng/common/templates/post-build/channels/{netcore-internal-30.yml => generic-public-channel.yml} (79%) delete mode 100644 eng/common/templates/post-build/channels/netcore-dev-31.yml delete mode 100644 eng/common/templates/post-build/channels/netcore-release-30.yml delete mode 100644 eng/common/templates/post-build/channels/netcore-release-31.yml delete mode 100644 eng/common/templates/post-build/channels/netcore-tools-latest.yml delete mode 100644 eng/common/templates/post-build/channels/public-validation-release.yml rename src/fsharp/{FSharp.Core.nuget => }/icon.png (100%) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index aef250643d..d50d7faa10 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - b449f372df1a3374ebdc85f42ff137dcda08776b + 8e47254f93b276c974968aff83222f89ec3931ed diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 new file mode 100644 index 0000000000..f7867a56b8 --- /dev/null +++ b/eng/common/SetupNugetSources.ps1 @@ -0,0 +1,141 @@ +# This file is a temporary workaround for internal builds to be able to restore from private AzDO feeds. +# This file should be removed as part of this issue: https://github.com/dotnet/arcade/issues/4080 +# +# What the script does is iterate over all package sources in the pointed NuGet.config and add a credential entry +# under for each Maestro managed private feed. Two additional credential +# entries are also added for the two private static internal feeds: dotnet3-internal and dotnet3-internal-transport. +# +# This script needs to be called in every job that will restore packages and which the base repo has +# private AzDO feeds in the NuGet.config. +# +# See example YAML call for this script below. Note the use of the variable `$(dn-bot-dnceng-artifact-feeds-rw)` +# from the AzureDevOps-Artifact-Feeds-Pats variable group. +# +# - task: PowerShell@2 +# displayName: Setup Private Feeds Credentials +# condition: eq(variables['Agent.OS'], 'Windows_NT') +# inputs: +# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 +# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token +# env: +# Token: $(dn-bot-dnceng-artifact-feeds-rw) + +[CmdletBinding()] +param ( + [Parameter(Mandatory = $true)][string]$ConfigFile, + [Parameter(Mandatory = $true)][string]$Password +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version 2.0 +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + +. $PSScriptRoot\tools.ps1 + +# Add source entry to PackageSources +function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) { + $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") + + if ($packageSource -eq $null) + { + $packageSource = $doc.CreateElement("add") + $packageSource.SetAttribute("key", $SourceName) + $packageSource.SetAttribute("value", $SourceEndPoint) + $sources.AppendChild($packageSource) | Out-Null + } + else { + Write-Host "Package source $SourceName already present." + } + + AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password +} + +# Add a credential node for the specified source +function AddCredential($creds, $source, $username, $password) { + # Looks for credential configuration for the given SourceName. Create it if none is found. + $sourceElement = $creds.SelectSingleNode($Source) + if ($sourceElement -eq $null) + { + $sourceElement = $doc.CreateElement($Source) + $creds.AppendChild($sourceElement) | Out-Null + } + + # Add the node to the credential if none is found. + $usernameElement = $sourceElement.SelectSingleNode("add[@key='Username']") + if ($usernameElement -eq $null) + { + $usernameElement = $doc.CreateElement("add") + $usernameElement.SetAttribute("key", "Username") + $sourceElement.AppendChild($usernameElement) | Out-Null + } + $usernameElement.SetAttribute("value", $Username) + + # Add the to the credential if none is found. + # Add it as a clear text because there is no support for encrypted ones in non-windows .Net SDKs. + # -> https://github.com/NuGet/Home/issues/5526 + $passwordElement = $sourceElement.SelectSingleNode("add[@key='ClearTextPassword']") + if ($passwordElement -eq $null) + { + $passwordElement = $doc.CreateElement("add") + $passwordElement.SetAttribute("key", "ClearTextPassword") + $sourceElement.AppendChild($passwordElement) | Out-Null + } + $passwordElement.SetAttribute("value", $Password) +} + +function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Password) { + $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") + + Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." + + ForEach ($PackageSource in $maestroPrivateSources) { + Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key + AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password + } +} + +if (!(Test-Path $ConfigFile -PathType Leaf)) { + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile" + ExitWithExitCode 1 +} + +if (!$Password) { + Write-PipelineTelemetryError -Category 'Build' -Message 'Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. Please supply a valid PAT' + ExitWithExitCode 1 +} + +# Load NuGet.config +$doc = New-Object System.Xml.XmlDocument +$filename = (Get-Item $ConfigFile).FullName +$doc.Load($filename) + +# Get reference to or create one if none exist already +$sources = $doc.DocumentElement.SelectSingleNode("packageSources") +if ($sources -eq $null) { + $sources = $doc.CreateElement("packageSources") + $doc.DocumentElement.AppendChild($sources) | Out-Null +} + +# Looks for a node. Create it if none is found. +$creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") +if ($creds -eq $null) { + $creds = $doc.CreateElement("packageSourceCredentials") + $doc.DocumentElement.AppendChild($creds) | Out-Null +} + +# Insert credential nodes for Maestro's private feeds +InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password + +$dotnet3Source = $sources.SelectSingleNode("add[@key='dotnet3']") +if ($dotnet3Source -ne $null) { + AddPackageSource -Sources $sources -SourceName "dotnet3-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password + AddPackageSource -Sources $sources -SourceName "dotnet3-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password +} + +$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") +if ($dotnet31Source -ne $null) { + AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password + AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password +} + +$doc.Save($filename) \ No newline at end of file diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh new file mode 100644 index 0000000000..4ebb1e5a44 --- /dev/null +++ b/eng/common/SetupNugetSources.sh @@ -0,0 +1,149 @@ +#!/usr/bin/env bash + +# This file is a temporary workaround for internal builds to be able to restore from private AzDO feeds. +# This file should be removed as part of this issue: https://github.com/dotnet/arcade/issues/4080 +# +# What the script does is iterate over all package sources in the pointed NuGet.config and add a credential entry +# under for each Maestro's managed private feed. Two additional credential +# entries are also added for the two private static internal feeds: dotnet3-internal and dotnet3-internal-transport. +# +# This script needs to be called in every job that will restore packages and which the base repo has +# private AzDO feeds in the NuGet.config. +# +# See example YAML call for this script below. Note the use of the variable `$(dn-bot-dnceng-artifact-feeds-rw)` +# from the AzureDevOps-Artifact-Feeds-Pats variable group. +# +# - task: Bash@3 +# displayName: Setup Private Feeds Credentials +# inputs: +# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh +# arguments: $(Build.SourcesDirectory)/NuGet.config $Token +# condition: ne(variables['Agent.OS'], 'Windows_NT') +# env: +# Token: $(dn-bot-dnceng-artifact-feeds-rw) + +ConfigFile=$1 +CredToken=$2 +NL='\n' +TB=' ' + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +. "$scriptroot/tools.sh" + +if [ ! -f "$ConfigFile" ]; then + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. Couldn't find the NuGet config file: $ConfigFile" + ExitWithExitCode 1 +fi + +if [ -z "$CredToken" ]; then + Write-PipelineTelemetryError -category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. Please supply a valid PAT" + ExitWithExitCode 1 +fi + +if [[ `uname -s` == "Darwin" ]]; then + NL=$'\\\n' + TB='' +fi + +# Ensure there is a ... section. +grep -i "" $ConfigFile +if [ "$?" != "0" ]; then + echo "Adding ... section." + ConfigNodeHeader="" + PackageSourcesTemplate="${TB}${NL}${TB}" + + sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" NuGet.config +fi + +# Ensure there is a ... section. +grep -i "" $ConfigFile +if [ "$?" != "0" ]; then + echo "Adding ... section." + + PackageSourcesNodeFooter="" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" NuGet.config +fi + +PackageSources=() + +# Ensure dotnet3-internal and dotnet3-internal-transport are in the packageSources if the public dotnet3 feeds are present +grep -i "" $ConfigFile + if [ "$?" != "0" ]; then + echo "Adding dotnet3-internal to the packageSources." + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3-internal') + + grep -i "" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3-internal-transport') +fi + +# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present +grep -i "" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3.1-internal') + + grep -i "" $ConfigFile + if [ "$?" != "0" ]; then + echo "Adding dotnet3.1-internal-transport to the packageSources." + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + fi + PackageSources+=('dotnet3.1-internal-transport') +fi + +# I want things split line by line +PrevIFS=$IFS +IFS=$'\n' +PackageSources+="$IFS" +PackageSources+=$(grep -oh '"darc-int-[^"]*"' $ConfigFile | tr -d '"') +IFS=$PrevIFS + +for FeedName in ${PackageSources[@]} ; do + # Check if there is no existing credential for this FeedName + grep -i "<$FeedName>" $ConfigFile + if [ "$?" != "0" ]; then + echo "Adding credentials for $FeedName." + + PackageSourceCredentialsNodeFooter="" + NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + + sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile + fi +done \ No newline at end of file diff --git a/eng/common/init-tools-native.ps1 b/eng/common/init-tools-native.ps1 index 0fc0503ab9..8cf18bcfeb 100644 --- a/eng/common/init-tools-native.ps1 +++ b/eng/common/init-tools-native.ps1 @@ -133,7 +133,6 @@ try { if (Test-Path $InstallBin) { Write-Host "Native tools are available from" (Convert-Path -Path $InstallBin) Write-Host "##vso[task.prependpath]$(Convert-Path -Path $InstallBin)" - return $InstallBin } else { Write-Error "Native tools install directory does not exist, installation failed" diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index eb21321ba2..01799d63ff 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -1,30 +1,30 @@ Param( - [string] $GuardianPackageName, # Required: the name of guardian CLI package (not needed if GuardianCliLocation is specified) - [string] $NugetPackageDirectory, # Required: directory where NuGet packages are installed (not needed if GuardianCliLocation is specified) - [string] $GuardianCliLocation, # Optional: Direct location of Guardian CLI executable if GuardianPackageName & NugetPackageDirectory are not specified - [string] $Repository=$env:BUILD_REPOSITORY_NAME, # Required: the name of the repository (e.g. dotnet/arcade) - [string] $BranchName=$env:BUILD_SOURCEBRANCH, # Optional: name of branch or version of gdn settings; defaults to master - [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, # Required: the directory where source files are located - [string] $ArtifactsDirectory = (Join-Path $env:BUILD_ARTIFACTSTAGINGDIRECTORY ("artifacts")), # Required: the directory where build artifacts are located - [string] $AzureDevOpsAccessToken, # Required: access token for dnceng; should be provided via KeyVault - [string[]] $SourceToolsList, # Optional: list of SDL tools to run on source code - [string[]] $ArtifactToolsList, # Optional: list of SDL tools to run on built artifacts - [bool] $TsaPublish=$False, # Optional: true will publish results to TSA; only set to true after onboarding to TSA; TSA is the automated framework used to upload test results as bugs. - [string] $TsaBranchName=$env:BUILD_SOURCEBRANCH, # Optional: required for TSA publish; defaults to $(Build.SourceBranchName); TSA is the automated framework used to upload test results as bugs. - [string] $TsaRepositoryName=$env:BUILD_REPOSITORY_NAME, # Optional: TSA repository name; will be generated automatically if not submitted; TSA is the automated framework used to upload test results as bugs. - [string] $BuildNumber=$env:BUILD_BUILDNUMBER, # Optional: required for TSA publish; defaults to $(Build.BuildNumber) - [bool] $UpdateBaseline=$False, # Optional: if true, will update the baseline in the repository; should only be run after fixing any issues which need to be fixed - [bool] $TsaOnboard=$False, # Optional: if true, will onboard the repository to TSA; should only be run once; TSA is the automated framework used to upload test results as bugs. - [string] $TsaInstanceUrl, # Optional: only needed if TsaOnboard or TsaPublish is true; the instance-url registered with TSA; TSA is the automated framework used to upload test results as bugs. - [string] $TsaCodebaseName, # Optional: only needed if TsaOnboard or TsaPublish is true; the name of the codebase registered with TSA; TSA is the automated framework used to upload test results as bugs. - [string] $TsaProjectName, # Optional: only needed if TsaOnboard or TsaPublish is true; the name of the project registered with TSA; TSA is the automated framework used to upload test results as bugs. - [string] $TsaNotificationEmail, # Optional: only needed if TsaOnboard is true; the email(s) which will receive notifications of TSA bug filings (e.g. alias@microsoft.com); TSA is the automated framework used to upload test results as bugs. - [string] $TsaCodebaseAdmin, # Optional: only needed if TsaOnboard is true; the aliases which are admins of the TSA codebase (e.g. DOMAIN\alias); TSA is the automated framework used to upload test results as bugs. - [string] $TsaBugAreaPath, # Optional: only needed if TsaOnboard is true; the area path where TSA will file bugs in AzDO; TSA is the automated framework used to upload test results as bugs. - [string] $TsaIterationPath, # Optional: only needed if TsaOnboard is true; the iteration path where TSA will file bugs in AzDO; TSA is the automated framework used to upload test results as bugs. - [string] $GuardianLoggerLevel="Standard", # Optional: the logger level for the Guardian CLI; options are Trace, Verbose, Standard, Warning, and Error - [string[]] $CrScanAdditionalRunConfigParams, # Optional: Additional Params to custom build a CredScan run config in the format @("xyz:abc","sdf:1") - [string[]] $PoliCheckAdditionalRunConfigParams # Optional: Additional Params to custom build a Policheck run config in the format @("xyz:abc","sdf:1") + [string] $GuardianPackageName, # Required: the name of guardian CLI package (not needed if GuardianCliLocation is specified) + [string] $NugetPackageDirectory, # Required: directory where NuGet packages are installed (not needed if GuardianCliLocation is specified) + [string] $GuardianCliLocation, # Optional: Direct location of Guardian CLI executable if GuardianPackageName & NugetPackageDirectory are not specified + [string] $Repository=$env:BUILD_REPOSITORY_NAME, # Required: the name of the repository (e.g. dotnet/arcade) + [string] $BranchName=$env:BUILD_SOURCEBRANCH, # Optional: name of branch or version of gdn settings; defaults to master + [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, # Required: the directory where source files are located + [string] $ArtifactsDirectory = (Join-Path $env:BUILD_SOURCESDIRECTORY ("artifacts")), # Required: the directory where build artifacts are located + [string] $AzureDevOpsAccessToken, # Required: access token for dnceng; should be provided via KeyVault + [string[]] $SourceToolsList, # Optional: list of SDL tools to run on source code + [string[]] $ArtifactToolsList, # Optional: list of SDL tools to run on built artifacts + [bool] $TsaPublish=$False, # Optional: true will publish results to TSA; only set to true after onboarding to TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaBranchName=$env:BUILD_SOURCEBRANCH, # Optional: required for TSA publish; defaults to $(Build.SourceBranchName); TSA is the automated framework used to upload test results as bugs. + [string] $TsaRepositoryName=$env:BUILD_REPOSITORY_NAME, # Optional: TSA repository name; will be generated automatically if not submitted; TSA is the automated framework used to upload test results as bugs. + [string] $BuildNumber=$env:BUILD_BUILDNUMBER, # Optional: required for TSA publish; defaults to $(Build.BuildNumber) + [bool] $UpdateBaseline=$False, # Optional: if true, will update the baseline in the repository; should only be run after fixing any issues which need to be fixed + [bool] $TsaOnboard=$False, # Optional: if true, will onboard the repository to TSA; should only be run once; TSA is the automated framework used to upload test results as bugs. + [string] $TsaInstanceUrl, # Optional: only needed if TsaOnboard or TsaPublish is true; the instance-url registered with TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaCodebaseName, # Optional: only needed if TsaOnboard or TsaPublish is true; the name of the codebase registered with TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaProjectName, # Optional: only needed if TsaOnboard or TsaPublish is true; the name of the project registered with TSA; TSA is the automated framework used to upload test results as bugs. + [string] $TsaNotificationEmail, # Optional: only needed if TsaOnboard is true; the email(s) which will receive notifications of TSA bug filings (e.g. alias@microsoft.com); TSA is the automated framework used to upload test results as bugs. + [string] $TsaCodebaseAdmin, # Optional: only needed if TsaOnboard is true; the aliases which are admins of the TSA codebase (e.g. DOMAIN\alias); TSA is the automated framework used to upload test results as bugs. + [string] $TsaBugAreaPath, # Optional: only needed if TsaOnboard is true; the area path where TSA will file bugs in AzDO; TSA is the automated framework used to upload test results as bugs. + [string] $TsaIterationPath, # Optional: only needed if TsaOnboard is true; the iteration path where TSA will file bugs in AzDO; TSA is the automated framework used to upload test results as bugs. + [string] $GuardianLoggerLevel="Standard", # Optional: the logger level for the Guardian CLI; options are Trace, Verbose, Standard, Warning, and Error + [string[]] $CrScanAdditionalRunConfigParams, # Optional: Additional Params to custom build a CredScan run config in the format @("xyz:abc","sdf:1") + [string[]] $PoliCheckAdditionalRunConfigParams # Optional: Additional Params to custom build a Policheck run config in the format @("xyz:abc","sdf:1") ) $ErrorActionPreference = "Stop" diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index 9a00430d65..52e2ff021d 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -6,6 +6,11 @@ parameters: # This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter sdlContinueOnError: false # optional: determines whether to continue the build if the step errors; dependsOn: '' # Optional: dependencies of the job + artifactNames: '' # Optional: patterns supplied to DownloadBuildArtifacts + # Usage: + # artifactNames: + # - 'BlobArtifacts' + # - 'Artifacts_Windows_NT_Release' jobs: - job: Run_SDL @@ -18,21 +23,30 @@ jobs: steps: - checkout: self clean: true - - task: DownloadBuildArtifacts@0 - displayName: Download Build Artifacts - inputs: - buildType: current - downloadType: specific files - matchingPattern: "**" - downloadPath: $(Build.ArtifactStagingDirectory)\artifacts + - ${{ if ne(parameters.artifactNames, '') }}: + - ${{ each artifactName in parameters.artifactNames }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Build Artifacts + inputs: + buildType: current + artifactName: ${{ artifactName }} + downloadPath: $(Build.ArtifactStagingDirectory)\artifacts + - ${{ if eq(parameters.artifactNames, '') }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Build Artifacts + inputs: + buildType: current + downloadType: specific files + itemPattern: "**" + downloadPath: $(Build.ArtifactStagingDirectory)\artifacts - powershell: eng/common/sdl/extract-artifact-packages.ps1 - -InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts - -ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts + -InputPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts + -ExtractPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts displayName: Extract Blob Artifacts continueOnError: ${{ parameters.sdlContinueOnError }} - powershell: eng/common/sdl/extract-artifact-packages.ps1 - -InputPath $(Build.ArtifactStagingDirectory)\artifacts\PackageArtifacts - -ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\PackageArtifacts + -InputPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts + -ExtractPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts displayName: Extract Package Artifacts continueOnError: ${{ parameters.sdlContinueOnError }} - task: NuGetToolInstaller@1 diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 13dd40e26c..ffda80a197 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -1,33 +1,67 @@ -# Internal resources (telemetry, microbuild) can only be accessed from non-public projects, -# and some (Microbuild) should only be applied to non-PR cases for internal builds. - parameters: # Job schema parameters - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job cancelTimeoutInMinutes: '' + condition: '' - container: '' + continueOnError: false + + container: '' + dependsOn: '' + displayName: '' - pool: '' + steps: [] + + pool: '' + strategy: '' + timeoutInMinutes: '' + variables: [] + workspace: '' -# Job base template specific parameters - # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md - artifacts: '' + # Job base template specific parameters + # Optional: Enable installing Microbuild plugin + # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix + # _TeamName - the name of your team + # _SignType - 'test' or 'real' enableMicrobuild: false + + # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false + + # Optional: Enable publishing to the build asset registry enablePublishBuildAssets: false - enablePublishTestResults: false + + # Optional: Prevent gather/push manifest from executing when using publishing pipelines enablePublishUsingPipelines: false + + # Optional: Include PublishTestResults task + enablePublishTestResults: false + + # Optional: enable sending telemetry + enableTelemetry: false + + # Optional: define the helix repo for telemetry (example: 'dotnet/arcade') + helixRepo: '' + + # Optional: define the helix type for telemetry (example: 'build/product/') + helixType: '' + + # Required: name of the job name: '' - preSteps: [] + + # Optional: should run as a public build even in the internal project + # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false +# Internal resources (telemetry, microbuild) can only be accessed from non-public projects, +# and some (Microbuild) should only be applied to non-PR cases for internal builds. + jobs: - job: ${{ parameters.name }} @@ -59,7 +93,7 @@ jobs: timeoutInMinutes: ${{ parameters.timeoutInMinutes }} variables: - - ${{ if ne(parameters.enableTelemetry, 'false') }}: + - ${{ if eq(parameters.enableTelemetry, 'true') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - ${{ each variable in parameters.variables }}: @@ -91,12 +125,21 @@ jobs: workspace: ${{ parameters.workspace }} steps: - - ${{ if ne(parameters.preSteps, '') }}: - - ${{ each preStep in parameters.preSteps }}: - - ${{ preStep }} + - ${{ if eq(parameters.enableTelemetry, 'true') }}: + # Telemetry tasks are built from https://github.com/dotnet/arcade-extensions + - task: sendStartTelemetry@0 + displayName: 'Send Helix Start Telemetry' + inputs: + helixRepo: ${{ parameters.helixRepo }} + ${{ if ne(parameters.helixType, '') }}: + helixType: ${{ parameters.helixType }} + buildConfig: $(_BuildConfig) + runAsPublic: ${{ parameters.runAsPublic }} + continueOnError: ${{ parameters.continueOnError }} + condition: always() - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: MicroBuildSigningPlugin@2 displayName: Install MicroBuild plugin inputs: @@ -108,16 +151,9 @@ jobs: continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: NuGetAuthenticate@0 - - ${{ if or(eq(parameters.artifacts.download, 'true'), ne(parameters.artifacts.download, '')) }}: - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: ${{ coalesce(parameters.artifacts.download.name, 'Artifacts_$(Agent.OS)_$(_BuildConfig)') }} - targetPath: ${{ coalesce(parameters.artifacts.download.path, 'artifacts') }} - itemPattern: ${{ coalesce(parameters.artifacts.download.pattern, '**') }} - - ${{ each step in parameters.steps }}: - ${{ step }} @@ -130,60 +166,20 @@ jobs: env: TeamName: $(_TeamName) - - ${{ if ne(parameters.artifacts.publish, '') }}: - - ${{ if or(eq(parameters.artifacts.publish.artifacts, 'true'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - task: CopyFiles@2 - displayName: Gather binaries for publish to artifacts - inputs: - SourceFolder: 'artifacts/bin' - Contents: '**' - TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/bin' - - task: CopyFiles@2 - displayName: Gather packages for publish to artifacts - inputs: - SourceFolder: 'artifacts/packages' - Contents: '**' - TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/packages' - - task: PublishBuildArtifacts@1 - displayName: Publish pipeline artifacts - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' - PublishLocation: Container - ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} - continueOnError: true - condition: always() - - ${{ if or(eq(parameters.artifacts.publish.logs, 'true'), ne(parameters.artifacts.publish.logs, '')) }}: - - publish: artifacts/log - artifact: ${{ coalesce(parameters.artifacts.publish.logs.name, 'Logs_Build_$(Agent.Os)_$(_BuildConfig)') }} - displayName: Publish logs - continueOnError: true - condition: always() - - ${{ if or(eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: - - ${{ if and(ne(parameters.enablePublishUsingPipelines, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: CopyFiles@2 - displayName: Gather Asset Manifests - inputs: - SourceFolder: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/AssetManifest' - TargetFolder: '$(Build.ArtifactStagingDirectory)/AssetManifests' - continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) - - - task: PublishBuildArtifacts@1 - displayName: Push Asset Manifests - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/AssetManifests' - PublishLocation: Container - ArtifactName: AssetManifests - continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) - - - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: + - ${{ if eq(parameters.enableTelemetry, 'true') }}: + # Telemetry tasks are built from https://github.com/dotnet/arcade-extensions + - task: sendEndTelemetry@0 + displayName: 'Send Helix End Telemetry' + continueOnError: ${{ parameters.continueOnError }} + condition: always() + + - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - task: PublishBuildArtifacts@1 displayName: Publish Logs inputs: PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)' PublishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + ArtifactName: $(Agent.Os)_$(Agent.JobName) continueOnError: true condition: always() diff --git a/eng/common/templates/jobs/jobs.yml b/eng/common/templates/jobs/jobs.yml index c08225a9a9..6a2f98c036 100644 --- a/eng/common/templates/jobs/jobs.yml +++ b/eng/common/templates/jobs/jobs.yml @@ -1,10 +1,19 @@ parameters: - # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md + # Optional: 'true' if failures in job.yml job should not fail the job continueOnError: false + # Optional: Enable installing Microbuild plugin + # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix + # _TeamName - the name of your team + # _SignType - 'test' or 'real' + enableMicrobuild: false + # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false + # Optional: Enable publishing to the build asset registry + enablePublishBuildAssets: false + # Optional: Enable publishing using release pipelines enablePublishUsingPipelines: false @@ -14,9 +23,19 @@ parameters: # Optional: Include toolset dependencies in the generated graph files includeToolset: false + # Optional: Include PublishTestResults task + enablePublishTestResults: false + + # Optional: enable sending telemetry + # if enabled then the 'helixRepo' parameter should also be specified + enableTelemetry: false + # Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job jobs: [] + # Optional: define the helix repo for telemetry (example: 'dotnet/arcade') + helixRepo: '' + # Optional: Override automatically derived dependsOn value for "publish build assets" job publishBuildAssetsDependsOn: '' @@ -43,30 +62,29 @@ jobs: name: ${{ job.job }} -- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: - - template: ../job/publish-build-assets.yml - parameters: - continueOnError: ${{ parameters.continueOnError }} - dependsOn: - - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: - - ${{ each job in parameters.publishBuildAssetsDependsOn }}: - - ${{ job.job }} - - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - - ${{ each job in parameters.jobs }}: - - ${{ job.job }} - pool: - vmImage: vs2017-win2016 - runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} - - - ${{ if eq(parameters.graphFileGeneration.enabled, true) }}: - - template: ../job/generate-graph-files.yml - parameters: - continueOnError: ${{ parameters.continueOnError }} - includeToolset: ${{ parameters.graphFileGeneration.includeToolset }} - dependsOn: - - Asset_Registry_Publish - pool: - vmImage: vs2017-win2016 +- ${{ if and(eq(parameters.enablePublishBuildAssets, true), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: ../job/publish-build-assets.yml + parameters: + continueOnError: ${{ parameters.continueOnError }} + dependsOn: + - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: + - ${{ each job in parameters.publishBuildAssetsDependsOn }}: + - ${{ job.job }} + - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: + - ${{ each job in parameters.jobs }}: + - ${{ job.job }} + pool: + vmImage: vs2017-win2016 + runAsPublic: ${{ parameters.runAsPublic }} + publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} + enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} + +- ${{ if and(eq(parameters.graphFileGeneration.enabled, true), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: ../job/generate-graph-files.yml + parameters: + continueOnError: ${{ parameters.continueOnError }} + includeToolset: ${{ parameters.graphFileGeneration.includeToolset }} + dependsOn: + - Asset_Registry_Publish + pool: + vmImage: vs2017-win2016 diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/generic-internal-channel.yml similarity index 78% rename from eng/common/templates/post-build/channels/netcore-dev-5.yml rename to eng/common/templates/post-build/channels/generic-internal-channel.yml index 6c8dff5424..68fdec0290 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/generic-internal-channel.yml @@ -1,23 +1,26 @@ parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate publishInstallersAndChecksums: false symbolPublishingAdditionalParameters: '' + stageName: '' + channelName: '' + channelId: '' + transportFeed: '' + shippingFeed: '' + symbolsFeed: '' stages: -- stage: NetCore_Dev5_Publish - dependsOn: ${{ parameters.dependsOn }} +- stage: ${{ parameters.stageName }} + dependsOn: validate variables: - template: ../common-variables.yml - displayName: .NET Core 5 Dev Publishing + displayName: ${{ parameters.channelName }} Publishing jobs: - template: ../setup-maestro-vars.yml - job: displayName: Symbol Publishing dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id)) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )) variables: - group: DotNet-Symbol-Server-Pats pool: @@ -58,7 +61,7 @@ stages: value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id)) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }})) pool: vmImage: 'windows-2019' steps: @@ -98,7 +101,6 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) @@ -113,20 +115,21 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishInstallersAndChecksums=true + /p:ChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(InternalChecksumsBlobFeedKey) + /p:InstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(InternalInstallersBlobFeedKey) /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeed='${{ parameters.shippingFeed }}' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeed='${{ parameters.transportFeed }}' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeed='${{ parameters.symbolsFeed }}' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:PublishToMSDL=false ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml parameters: - ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} + ChannelId: ${{ parameters.channelId }} diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/generic-public-channel.yml similarity index 79% rename from eng/common/templates/post-build/channels/netcore-internal-30.yml rename to eng/common/templates/post-build/channels/generic-public-channel.yml index 201ed570ae..c4bc1897d8 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/generic-public-channel.yml @@ -1,22 +1,27 @@ parameters: artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate + publishInstallersAndChecksums: false symbolPublishingAdditionalParameters: '' + stageName: '' + channelName: '' + channelId: '' + transportFeed: '' + shippingFeed: '' + symbolsFeed: '' stages: -- stage: NetCore_30_Internal_Servicing_Publishing - dependsOn: ${{ parameters.dependsOn }} +- stage: ${{ parameters.stageName }} + dependsOn: validate variables: - template: ../common-variables.yml - displayName: .NET Core 3.0 Internal Servicing Publishing + displayName: ${{ parameters.channelName }} Publishing jobs: - template: ../setup-maestro-vars.yml - job: displayName: Symbol Publishing dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id)) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )) variables: - group: DotNet-Symbol-Server-Pats pool: @@ -63,13 +68,11 @@ stages: displayName: Publish Assets dependsOn: setupMaestroVars variables: - - group: DotNet-Blob-Feed - - group: AzureDevOps-Artifact-Feeds-Pats - name: BARBuildId value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id)) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }})) pool: vmImage: 'windows-2019' steps: @@ -78,12 +81,14 @@ stages: inputs: buildType: current artifactName: PackageArtifacts + continueOnError: true - task: DownloadBuildArtifacts@0 displayName: Download Blob Artifacts inputs: buildType: current artifactName: BlobArtifacts + continueOnError: true - task: DownloadBuildArtifacts@0 displayName: Download Asset Manifests @@ -109,6 +114,7 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) @@ -123,20 +129,20 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release - /p:PublishInstallersAndChecksums=true - /p:ChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(InternalChecksumsBlobFeedKey) - /p:InstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(InternalInstallersBlobFeedKey) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeed='${{ parameters.shippingFeed }}' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeed='${{ parameters.transportFeed }}' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeed='${{ parameters.symbolsFeed }}' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml parameters: - ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} + ChannelId: ${{ parameters.channelId }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml deleted file mode 100644 index af64724f79..0000000000 --- a/eng/common/templates/post-build/channels/netcore-dev-31.yml +++ /dev/null @@ -1,132 +0,0 @@ -parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate - publishInstallersAndChecksums: false - symbolPublishingAdditionalParameters: '' - -stages: -- stage: NetCore_Dev31_Publish - dependsOn: ${{ parameters.dependsOn }} - variables: - - template: ../common-variables.yml - displayName: .NET Core 3.1 Dev Publishing - jobs: - - template: ../setup-maestro-vars.yml - - - job: - displayName: Symbol Publishing - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id)) - variables: - - group: DotNet-Symbol-Server-Pats - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - artifactName: 'BlobArtifacts' - continueOnError: true - - - task: DownloadBuildArtifacts@0 - displayName: Download PDB Artifacts - inputs: - artifactName: 'PDBArtifacts' - continueOnError: true - - - task: PowerShell@2 - displayName: Publish - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' - /p:Configuration=Release - ${{ parameters.symbolPublishingAdditionalParameters }} - - - job: publish_assets - displayName: Publish Assets - dependsOn: setupMaestroVars - variables: - - group: DotNet-Blob-Feed - - group: AzureDevOps-Artifact-Feeds-Pats - - name: BARBuildId - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - - name: IsStableBuild - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: current - artifactName: BlobArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Asset Manifests - inputs: - buildType: current - artifactName: AssetManifests - - - task: NuGetToolInstaller@1 - displayName: 'Install NuGet.exe' - - # This is necessary whenever we want to publish/restore to an AzDO private feed - - task: NuGetAuthenticate@0 - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - - task: PowerShell@2 - displayName: Publish Assets - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ArtifactsCategory=$(_DotNetArtifactsCategory) - /p:IsStableBuild=$(IsStableBuild) - /p:IsInternalBuild=$(IsInternalBuild) - /p:RepositoryName=$(Build.Repository.Name) - /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' - /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' - /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - ${{ parameters.artifactsPublishingAdditionalParameters }} - - - template: ../../steps/promote-build.yml - parameters: - ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-30.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml deleted file mode 100644 index 206dd43e3a..0000000000 --- a/eng/common/templates/post-build/channels/netcore-release-30.yml +++ /dev/null @@ -1,132 +0,0 @@ -parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate - publishInstallersAndChecksums: false - symbolPublishingAdditionalParameters: '' - -stages: -- stage: NetCore_Release30_Publish - dependsOn: ${{ parameters.dependsOn }} - variables: - - template: ../common-variables.yml - displayName: .NET Core 3.0 Release Publishing - jobs: - - template: ../setup-maestro-vars.yml - - - job: - displayName: Symbol Publishing - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)) - variables: - - group: DotNet-Symbol-Server-Pats - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - artifactName: 'BlobArtifacts' - continueOnError: true - - - task: DownloadBuildArtifacts@0 - displayName: Download PDB Artifacts - inputs: - artifactName: 'PDBArtifacts' - continueOnError: true - - - task: PowerShell@2 - displayName: Publish - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' - /p:Configuration=Release - ${{ parameters.symbolPublishingAdditionalParameters }} - - - job: publish_assets - displayName: Publish Assets - dependsOn: setupMaestroVars - variables: - - group: DotNet-Blob-Feed - - group: AzureDevOps-Artifact-Feeds-Pats - - name: BARBuildId - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - - name: IsStableBuild - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: current - artifactName: BlobArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Asset Manifests - inputs: - buildType: current - artifactName: AssetManifests - - - task: NuGetToolInstaller@1 - displayName: 'Install NuGet.exe' - - # This is necessary whenever we want to publish/restore to an AzDO private feed - - task: NuGetAuthenticate@0 - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - - task: PowerShell@2 - displayName: Publish Assets - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ArtifactsCategory=$(_DotNetArtifactsCategory) - /p:IsStableBuild=$(IsStableBuild) - /p:IsInternalBuild=$(IsInternalBuild) - /p:RepositoryName=$(Build.Repository.Name) - /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' - /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' - /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - ${{ parameters.artifactsPublishingAdditionalParameters }} - - - template: ../../steps/promote-build.yml - parameters: - ChannelId: ${{ variables.PublicRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml deleted file mode 100644 index 6270c82835..0000000000 --- a/eng/common/templates/post-build/channels/netcore-release-31.yml +++ /dev/null @@ -1,132 +0,0 @@ -parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate - publishInstallersAndChecksums: false - symbolPublishingAdditionalParameters: '' - -stages: -- stage: NetCore_Release31_Publish - dependsOn: ${{ parameters.dependsOn }} - variables: - - template: ../common-variables.yml - displayName: .NET Core 3.1 Release Publishing - jobs: - - template: ../setup-maestro-vars.yml - - - job: - displayName: Symbol Publishing - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)) - variables: - - group: DotNet-Symbol-Server-Pats - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - artifactName: 'BlobArtifacts' - continueOnError: true - - - task: DownloadBuildArtifacts@0 - displayName: Download PDB Artifacts - inputs: - artifactName: 'PDBArtifacts' - continueOnError: true - - - task: PowerShell@2 - displayName: Publish - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' - /p:Configuration=Release - ${{ parameters.symbolPublishingAdditionalParameters }} - - - job: publish_assets - displayName: Publish Assets - dependsOn: setupMaestroVars - variables: - - group: DotNet-Blob-Feed - - group: AzureDevOps-Artifact-Feeds-Pats - - name: BARBuildId - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - - name: IsStableBuild - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: current - artifactName: BlobArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Asset Manifests - inputs: - buildType: current - artifactName: AssetManifests - - - task: NuGetToolInstaller@1 - displayName: 'Install NuGet.exe' - - # This is necessary whenever we want to publish/restore to an AzDO private feed - - task: NuGetAuthenticate@0 - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - - task: PowerShell@2 - displayName: Publish Assets - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ArtifactsCategory=$(_DotNetArtifactsCategory) - /p:IsStableBuild=$(IsStableBuild) - /p:IsInternalBuild=$(IsInternalBuild) - /p:RepositoryName=$(Build.Repository.Name) - /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' - /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' - /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - ${{ parameters.artifactsPublishingAdditionalParameters }} - - - template: ../../steps/promote-build.yml - parameters: - ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml deleted file mode 100644 index 9bf9626ca3..0000000000 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ /dev/null @@ -1,132 +0,0 @@ -parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate - publishInstallersAndChecksums: false - symbolPublishingAdditionalParameters: '' - -stages: -- stage: NetCore_Tools_Latest_Publish - dependsOn: ${{ parameters.dependsOn }} - variables: - - template: ../common-variables.yml - displayName: .NET Tools - Latest Publishing - jobs: - - template: ../setup-maestro-vars.yml - - - job: - displayName: Symbol Publishing - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id)) - variables: - - group: DotNet-Symbol-Server-Pats - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - artifactName: 'BlobArtifacts' - continueOnError: true - - - task: DownloadBuildArtifacts@0 - displayName: Download PDB Artifacts - inputs: - artifactName: 'PDBArtifacts' - continueOnError: true - - - task: PowerShell@2 - displayName: Publish - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' - /p:Configuration=Release - ${{ parameters.symbolPublishingAdditionalParameters }} - - - job: publish_assets - displayName: Publish Assets - dependsOn: setupMaestroVars - variables: - - group: DotNet-Blob-Feed - - group: AzureDevOps-Artifact-Feeds-Pats - - name: BARBuildId - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - - name: IsStableBuild - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: current - artifactName: BlobArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Asset Manifests - inputs: - buildType: current - artifactName: AssetManifests - - - task: NuGetToolInstaller@1 - displayName: 'Install NuGet.exe' - - # This is necessary whenever we want to publish/restore to an AzDO private feed - - task: NuGetAuthenticate@0 - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - - task: PowerShell@2 - displayName: Publish Assets - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ArtifactsCategory=$(_DotNetArtifactsCategory) - /p:IsStableBuild=$(IsStableBuild) - /p:IsInternalBuild=$(IsInternalBuild) - /p:RepositoryName=$(Build.Repository.Name) - /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' - /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - ${{ parameters.artifactsPublishingAdditionalParameters }} - - - template: ../../steps/promote-build.yml - parameters: - ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} \ No newline at end of file diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml deleted file mode 100644 index 5c8e91cce1..0000000000 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ /dev/null @@ -1,97 +0,0 @@ -parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate - publishInstallersAndChecksums: false - -stages: -- stage: PVR_Publish - dependsOn: ${{ parameters.dependsOn }} - variables: - - template: ../common-variables.yml - displayName: .NET Tools - Validation Publishing - jobs: - - template: ../setup-maestro-vars.yml - - - job: publish_assets - displayName: Publish Assets - dependsOn: setupMaestroVars - variables: - - group: DotNet-Blob-Feed - - group: AzureDevOps-Artifact-Feeds-Pats - - name: BARBuildId - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - - name: IsStableBuild - value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicValidationRelease_30_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: current - artifactName: BlobArtifacts - - - task: DownloadBuildArtifacts@0 - displayName: Download Asset Manifests - inputs: - buildType: current - artifactName: AssetManifests - - - task: NuGetToolInstaller@1 - displayName: 'Install NuGet.exe' - - # This is necessary whenever we want to publish/restore to an AzDO private feed - - task: NuGetAuthenticate@0 - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - - task: PowerShell@2 - displayName: Publish Assets - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ArtifactsCategory=$(_DotNetValidationArtifactsCategory) - /p:IsStableBuild=$(IsStableBuild) - /p:IsInternalBuild=$(IsInternalBuild) - /p:RepositoryName=$(Build.Repository.Name) - /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) - /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) - /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=true - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' - /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - ${{ parameters.artifactsPublishingAdditionalParameters }} - - - template: ../../steps/promote-build.yml - parameters: - ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 9ccc08b2c8..216d043e4e 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -1,7 +1,9 @@ variables: - - group: Publish-Build-Assets + - group: AzureDevOps-Artifact-Feeds-Pats + - group: DotNet-Blob-Feed - group: DotNet-DotNetCli-Storage - group: DotNet-MSRC-Storage + - group: Publish-Build-Assets # .NET Core 3.1 Dev - name: PublicDevRelease_31_Channel_Id @@ -11,14 +13,22 @@ variables: - name: NetCore_5_Dev_Channel_Id value: 131 - # .NET Tools - Validation - - name: PublicValidationRelease_30_Channel_Id + # .NET Eng - Validation + - name: Net_Eng_Validation_Channel_Id value: 9 - # .NET Tools - Latest - - name: NetCore_Tools_Latest_Channel_Id + # .NET Eng - Latest + - name: Net_Eng_Latest_Channel_Id value: 2 + # .NET 3 Eng - Validation + - name: NET_3_Eng_Validation_Channel_Id + value: 390 + + # .NET 3 Eng + - name: NetCore_3_Tools_Channel_Id + value: 344 + # .NET Core 3.0 Internal Servicing - name: InternalServicing_30_Channel_Id value: 184 @@ -31,6 +41,14 @@ variables: - name: PublicRelease_31_Channel_Id value: 129 + # General Testing + - name: GeneralTesting_Channel_Id + value: 529 + + # .NET Core 3.1 Blazor Features + - name: NetCore_31_Blazor_Features_Channel_Id + value: 531 + # Whether the build is internal or not - name: IsInternalBuild value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 3f06b5d146..9921743bcd 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -8,6 +8,7 @@ parameters: enable: false continueOnError: false params: '' + artifactNames: '' # These parameters let the user customize the call to sdk-task.ps1 for publishing # symbols & general artifacts as well as for signing validation @@ -16,14 +17,11 @@ parameters: signingValidationAdditionalParameters: '' # Which stages should finish execution before post-build stages start - validateDependsOn: - - build - publishDependsOn: - - Validate + dependsOn: [build] stages: -- stage: Validate - dependsOn: ${{ parameters.validateDependsOn }} +- stage: validate + dependsOn: ${{ parameters.dependsOn }} displayName: Validate jobs: - ${{ if eq(parameters.enableNugetValidation, 'true') }}: @@ -48,9 +46,6 @@ stages: - ${{ if eq(parameters.enableSigningValidation, 'true') }}: - job: displayName: Signing Validation - variables: - - template: common-variables.yml - - group: AzureDevOps-Artifact-Feeds-Pats pool: vmImage: 'windows-2019' steps: @@ -60,19 +55,6 @@ stages: buildType: current artifactName: PackageArtifacts - # This is necessary whenever we want to publish/restore to an AzDO private feed - # Since sdk-task.ps1 tries to restore packages we need to do this authentication here - # otherwise it'll complain about accessing a private feed. - - task: NuGetAuthenticate@0 - condition: eq(variables['IsInternalBuild'], 'true') - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - task: PowerShell@2 displayName: Validate inputs: @@ -113,50 +95,244 @@ stages: parameters: additionalParameters: ${{ parameters.SDLValidationParameters.params }} continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }} + artifactNames: ${{ parameters.SDLValidationParameters.artifactNames }} -- template: \eng\common\templates\post-build\channels\netcore-dev-5.yml +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Dev5_Publish' + channelName: '.NET Core 5 Dev' + channelId: 131 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-symbols/nuget/v3/index.json' -- template: \eng\common\templates\post-build\channels\netcore-dev-31.yml +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Dev31_Publish' + channelName: '.NET Core 3.1 Dev' + channelId: 128 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' -- template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'Net_Eng_Latest_Publish' + channelName: '.NET Eng - Latest' + channelId: 2 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' -- template: \eng\common\templates\post-build\channels\public-validation-release.yml +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'Net_Eng_Validation_Publish' + channelName: '.NET Eng - Validation' + channelId: 9 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_3_Tools_Validation_Publish' + channelName: '.NET 3 Tools - Validation' + channelId: 390 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_3_Tools_Publish' + channelName: '.NET 3 Tools' + channelId: 344 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Release30_Publish' + channelName: '.NET Core 3.0 Release' + channelId: 19 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Release31_Publish' + channelName: '.NET Core 3.1 Release' + channelId: 129 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Blazor31_Features_Publish' + channelName: '.NET Core 3.1 Blazor Features' + channelId: 531 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_30_Internal_Servicing_Publishing' + channelName: '.NET Core 3.0 Internal Servicing' + channelId: 184 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-symbols/nuget/v3/index.json' -- template: \eng\common\templates\post-build\channels\netcore-release-30.yml +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_31_Internal_Servicing_Publishing' + channelName: '.NET Core 3.1 Internal Servicing' + channelId: 550 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json' -- template: \eng\common\templates\post-build\channels\netcore-release-31.yml +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'General_Testing_Publish' + channelName: 'General Testing' + channelId: 529 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing-symbols/nuget/v3/index.json' -- template: \eng\common\templates\post-build\channels\netcore-internal-30.yml +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_Tooling_Dev_Publishing' + channelName: '.NET Core Tooling Dev' + channelId: 548 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_Tooling_Release_Publishing' + channelName: '.NET Core Tooling Release' + channelId: 549 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_301xx_Publishing' + channelName: '.NET Core SDK 3.0.1xx' + channelId: 556 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_301xx_Internal_Publishing' + channelName: '.NET Core SDK 3.0.1xx Internal' + channelId: 555 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_311xx_Publishing' + channelName: '.NET Core SDK 3.1.1xx' + channelId: 560 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_311xx_Internal_Publishing' + channelName: '.NET Core SDK 3.1.1xx Internal' + channelId: 559 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_312xx_Publishing' + channelName: '.NET Core SDK 3.1.2xx' + channelId: 558 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_312xx_Internal_Publishing' + channelName: '.NET Core SDK 3.1.2xx Internal' + channelId: 557 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json' \ No newline at end of file diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 5c94bd78d6..91efea9405 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -154,6 +154,15 @@ function InitializeDotNetCli([bool]$install) { # Make Sure that our bootstrapped dotnet cli is available in future steps of the Azure Pipelines build Write-PipelinePrependPath -Path $dotnetRoot + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if ($ci) { + $env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20 + $env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20 + Write-PipelineSetVariable -Name 'NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS' -Value '20' + Write-PipelineSetVariable -Name 'NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS' -Value '20' + } + Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0' Write-PipelineSetVariable -Name 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE' -Value '1' @@ -495,11 +504,6 @@ function MSBuild() { # https://github.com/dotnet/arcade/issues/3932 if ($ci -and $buildTool.Tool -eq "dotnet") { dotnet nuget locals http-cache -c - - $env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20 - $env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20 - Write-PipelineSetVariable -Name 'NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS' -Value '20' - Write-PipelineSetVariable -Name 'NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS' -Value '20' } $toolsetBuildProject = InitializeToolset diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 93ee4d67e3..757d5b9ea4 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -152,6 +152,15 @@ function InitializeDotNetCli { # build steps from using anything other than what we've downloaded. Write-PipelinePrependPath -path "$dotnet_root" + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if [[ "$ci" == true ]]; then + export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 + export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 + Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20" + Write-PipelineSetVariable -name "NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS" -value "20" + fi + Write-PipelineSetVariable -name "DOTNET_MULTILEVEL_LOOKUP" -value "0" Write-PipelineSetVariable -name "DOTNET_SKIP_FIRST_TIME_EXPERIENCE" -value "1" @@ -333,11 +342,6 @@ function MSBuild { # https://github.com/dotnet/arcade/issues/3932 if [[ "$ci" == true ]]; then dotnet nuget locals http-cache -c - - export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 - export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 - Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20" - Write-PipelineSetVariable -name "NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS" -value "20" fi local toolset_dir="${_InitializeToolset%/*}" diff --git a/eng/targets/Settings.props b/eng/targets/Settings.props index 3290288182..977cc2906e 100644 --- a/eng/targets/Settings.props +++ b/eng/targets/Settings.props @@ -2,6 +2,7 @@ MIT + $(MSBuildThisFileDirectory)..\..\src\fsharp\icon.png Visual F# Compiler FSharp functional programming $(ArtifactsBinDir) diff --git a/global.json b/global.json index 39f9ea968e..951a2ccba1 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "tools": { - "dotnet": "3.0.100", + "dotnet": "3.0.101", "vs": { "version": "16.3", "components": [ @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19476.6", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19603.16", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec index dac8f0c240..fb54c7f393 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -10,6 +10,7 @@ + $CommonFileElements$ diff --git a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec index dd9293cd88..9505cf61e5 100644 --- a/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/FSharp.Compiler.nuget/Microsoft.FSharp.Compiler.nuspec @@ -34,6 +34,7 @@ + $CommonFileElements$ - 16.0.461 + 16.4 $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) diff --git a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj index 8c70a8c5e0..d2613d8c21 100644 --- a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj +++ b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj @@ -24,7 +24,9 @@ - + + + From dad70de4c2adb28a563a5410e2a33a77e32d59ad Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sun, 15 Dec 2019 12:07:27 -0800 Subject: [PATCH 126/214] [master] Update dependencies from dotnet/arcade (#7967) * Update dependencies from https://github.com/dotnet/arcade build 20191212.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19612.1 * Update dependencies from https://github.com/dotnet/arcade build 20191213.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19613.1 * Update dependencies from https://github.com/dotnet/arcade build 20191214.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19614.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 0476544f56..6e4ca65dcf 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 71a91bbb3c49bad2f1e7f2c7f28b32c5c0efc9e5 + 64e95735b49d37b6cf908cfa5228ff65bee6dfff diff --git a/global.json b/global.json index a1e777b239..7baf11e827 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19611.6", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19614.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 24407d5705c8baf46c40fd91bbb21f75b0790c8c Mon Sep 17 00:00:00 2001 From: Will Smith Date: Sun, 15 Dec 2019 18:47:10 -0800 Subject: [PATCH 127/214] LOH allocation fixes for strings and char arrays (#7972) * Removed UnicodeFileAsLexbuf. Replaced it with StreamReaderAsLexbuf. No longer allocating string and chars as a result. * Make these private --- src/absil/illib.fs | 43 +++++++++++++++++++++++++- src/fsharp/CompileOps.fs | 5 +-- src/fsharp/UnicodeLexing.fs | 59 ++++++++---------------------------- src/fsharp/UnicodeLexing.fsi | 5 ++- src/fsharp/fsi/fsi.fs | 7 +++-- 5 files changed, 65 insertions(+), 54 deletions(-) diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 70e67a0815..0a7d471e14 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -1361,7 +1361,45 @@ module Shim = directory.Contains("packages\\") || directory.Contains("lib/mono/") - let mutable FileSystem = DefaultFileSystem() :> IFileSystem + let mutable FileSystem = DefaultFileSystem() :> IFileSystem + + // The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure + // uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold + // plus 1 second. Once past the threshold the incremental builder will be able to retry asynchronously based + // on plain old timestamp checking. + // + // The sleep time of 50ms is chosen so that we can respond to the user more quickly for Intellisense operations. + // + // This is not run on the UI thread for VS but it is on a thread that must be stopped before Intellisense + // can return any result except for pending. + let private retryDelayMilliseconds = 50 + let private numRetries = 60 + + let private getReader (filename, codePage: int option, retryLocked: bool) = + // Retry multiple times since other processes may be writing to this file. + let rec getSource retryNumber = + try + // Use the .NET functionality to auto-detect the unicode encoding + let stream = FileSystem.FileStreamReadShim(filename) + match codePage with + | None -> new StreamReader(stream,true) + | Some n -> new StreamReader(stream,System.Text.Encoding.GetEncoding(n)) + with + // We can get here if the file is locked--like when VS is saving a file--we don't have direct + // access to the HRESULT to see that this is EONOACCESS. + | :? System.IO.IOException as err when retryLocked && err.GetType() = typeof -> + // This second check is to make sure the exception is exactly IOException and none of these for example: + // DirectoryNotFoundException + // EndOfStreamException + // FileNotFoundException + // FileLoadException + // PathTooLongException + if retryNumber < numRetries then + System.Threading.Thread.Sleep (retryDelayMilliseconds) + getSource (retryNumber + 1) + else + reraise() + getSource 0 type File with @@ -1374,3 +1412,6 @@ module Shim = n <- n + stream.Read(buffer, n, len-n) buffer + static member OpenReaderAndRetry (filename, codepage, retryLocked) = + getReader (filename, codepage, retryLocked) + diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index ab20bfcf13..3af0e04e20 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -3436,7 +3436,7 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp if verbose then dprintn ("Parsed "+shortFilename) Some input with e -> (* errorR(Failure("parse failed")); *) errorRecovery e rangeStartup; None - + let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = try @@ -3445,7 +3445,8 @@ let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompil if not(FileSystem.SafeExists filename) then error(Error(FSComp.SR.buildCouldNotFindSourceFile filename, rangeStartup)) let isFeatureSupported featureId = tcConfig.langVersion.SupportsFeature featureId - let lexbuf = UnicodeLexing.UnicodeFileAsLexbuf(isFeatureSupported, filename, tcConfig.inputCodePage, retryLocked) + use reader = File.OpenReaderAndRetry (filename, tcConfig.inputCodePage, retryLocked) + let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(isFeatureSupported, reader) ParseOneInputLexbuf(tcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) else error(Error(FSComp.SR.buildInvalidSourceFileExtension(SanitizeFileName filename tcConfig.implicitIncludeDir), rangeStartup)) with e -> (* errorR(Failure("parse failed")); *) errorRecovery e rangeStartup; None diff --git a/src/fsharp/UnicodeLexing.fs b/src/fsharp/UnicodeLexing.fs index c776a1f1f7..70a253da1b 100644 --- a/src/fsharp/UnicodeLexing.fs +++ b/src/fsharp/UnicodeLexing.fs @@ -22,50 +22,15 @@ let FunctionAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, bufferF let SourceTextAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, sourceText) = LexBuffer.FromSourceText(supportsFeature, sourceText) -// The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure -// uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold -// plus 1 second. Once past the threshold the incremental builder will be able to retry asynchronously based -// on plain old timestamp checking. -// -// The sleep time of 50ms is chosen so that we can respond to the user more quickly for Intellisense operations. -// -// This is not run on the UI thread for VS but it is on a thread that must be stopped before Intellisense -// can return any result except for pending. -let retryDelayMilliseconds = 50 -let numRetries = 60 - -/// Standard utility to create a Unicode LexBuffer -/// -/// One small annoyance is that LexBuffers and not IDisposable. This means -/// we can't just return the LexBuffer object, since the file it wraps wouldn't -/// get closed when we're finished with the LexBuffer. Hence we return the stream, -/// the reader and the LexBuffer. The caller should dispose the first two when done. -let UnicodeFileAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, filename, codePage: int option, retryLocked: bool): Lexbuf = - // Retry multiple times since other processes may be writing to this file. - let rec getSource retryNumber = - try - // Use the .NET functionality to auto-detect the unicode encoding - use stream = FileSystem.FileStreamReadShim(filename) - use reader = - match codePage with - | None -> new StreamReader(stream,true) - | Some n -> new StreamReader(stream,System.Text.Encoding.GetEncoding(n)) - reader.ReadToEnd() - with - // We can get here if the file is locked--like when VS is saving a file--we don't have direct - // access to the HRESULT to see that this is EONOACCESS. - | :? System.IO.IOException as err when retryLocked && err.GetType() = typeof -> - // This second check is to make sure the exception is exactly IOException and none of these for example: - // DirectoryNotFoundException - // EndOfStreamException - // FileNotFoundException - // FileLoadException - // PathTooLongException - if retryNumber < numRetries then - System.Threading.Thread.Sleep (retryDelayMilliseconds) - getSource (retryNumber + 1) - else - reraise() - let source = getSource 0 - let lexbuf = LexBuffer<_>.FromChars(supportsFeature, source.ToCharArray()) - lexbuf +let StreamReaderAsLexbuf (supportsFeature: Features.LanguageFeature -> bool, reader: StreamReader) = + let mutable isFinished = false + FunctionAsLexbuf (supportsFeature, fun (chars, start, length) -> + if isFinished then 0 + else + let nBytesRead = reader.Read(chars, start, length) + if nBytesRead = 0 then + isFinished <- true + 0 + else + nBytesRead + ) diff --git a/src/fsharp/UnicodeLexing.fsi b/src/fsharp/UnicodeLexing.fsi index 2478c7f857..a3f0fb8fb3 100644 --- a/src/fsharp/UnicodeLexing.fsi +++ b/src/fsharp/UnicodeLexing.fsi @@ -2,6 +2,7 @@ module internal FSharp.Compiler.UnicodeLexing +open System.IO open FSharp.Compiler.Features open FSharp.Compiler.Text open Microsoft.FSharp.Text @@ -10,5 +11,7 @@ open Internal.Utilities.Text.Lexing type Lexbuf = LexBuffer val internal StringAsLexbuf: (Features.LanguageFeature -> bool) * string -> Lexbuf val public FunctionAsLexbuf: (Features.LanguageFeature -> bool) * (char [] * int * int -> int) -> Lexbuf -val public UnicodeFileAsLexbuf: (Features.LanguageFeature -> bool) * string * int option * (*retryLocked*) bool -> Lexbuf val public SourceTextAsLexbuf: (Features.LanguageFeature -> bool) * ISourceText -> Lexbuf + +/// Will not dispose of the stream reader. +val public StreamReaderAsLexbuf: (Features.LanguageFeature -> bool) * StreamReader -> Lexbuf diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index c5e71384f1..60f53b3964 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1677,8 +1677,8 @@ type internal FsiStdinLexerProvider CreateLexerForLexBuffer (Lexhelp.stdinMockFilename, lexbuf, errorLogger) // Create a new lexer to read an "included" script file - member __.CreateIncludedScriptLexer (sourceFileName, errorLogger) = - let lexbuf = UnicodeLexing.UnicodeFileAsLexbuf(isFeatureSupported, sourceFileName, tcConfigB.inputCodePage, (*retryLocked*)false) + member __.CreateIncludedScriptLexer (sourceFileName, reader, errorLogger) = + let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(isFeatureSupported, reader) CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) // Create a new lexer to read a string @@ -2037,7 +2037,8 @@ type internal FsiInteractionProcessor WithImplicitHome (tcConfigB, directoryName sourceFile) (fun () -> // An included script file may contain maybe several interaction blocks. // We repeatedly parse and process these, until an error occurs. - let tokenizer = fsiStdinLexerProvider.CreateIncludedScriptLexer (sourceFile, errorLogger) + use reader = File.OpenReaderAndRetry (sourceFile, tcConfigB.inputCodePage, (*retryLocked*)false) + let tokenizer = fsiStdinLexerProvider.CreateIncludedScriptLexer (sourceFile, reader, errorLogger) let rec run istate = let istate,cont = processor.ParseAndExecOneSetOfInteractionsFromLexbuf ((fun f istate -> f ctok istate), istate, tokenizer, errorLogger) match cont with Completed _ -> run istate | _ -> istate,cont From 1528331f5e7c17be32cb978e337e6669244c94ec Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2019 10:44:58 -0800 Subject: [PATCH 128/214] Update dependencies from https://github.com/dotnet/arcade build 20191215.1 (#7988) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19615.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6e4ca65dcf..7e92b0a484 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 64e95735b49d37b6cf908cfa5228ff65bee6dfff + 77698ebba1ab096ad9580a5d9ebefe0499ba00ce diff --git a/global.json b/global.json index 7baf11e827..73b5446857 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19614.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19615.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 1e8edefb98f7ff489f620f188e568f7ffcf94944 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 16 Dec 2019 14:21:27 -0800 Subject: [PATCH 129/214] Fixed LOH byte array allocations in the IDE from metadata (#7971) * Fixed LOH byte array allocations in the IDE. Unified memory handling for IL and FSharp metadata. * minor cleanup * minor cleanup * rename EmitBytes to EmitByteMemory * Fixed ByteArrayMemory * fixing build * Fixing build again * Better ReadInt32/ReadUInt16 * ILResourceLocation.Local should use a ReadOnlyByteMemory * Able to have a ReadOnlyStream * Using OutOfRangeException according to feedback --- src/absil/bytes.fs | 302 ++++++++++++++++++++++++- src/absil/bytes.fsi | 85 ++++++- src/absil/il.fs | 10 +- src/absil/il.fsi | 11 +- src/absil/ilprint.fs | 3 +- src/absil/ilread.fs | 152 +++---------- src/absil/ilreflect.fs | 8 +- src/absil/ilwrite.fs | 7 +- src/fsharp/CompileOps.fs | 12 +- src/fsharp/CompileOps.fsi | 5 +- src/fsharp/TastPickle.fs | 9 +- src/fsharp/TastPickle.fsi | 2 +- src/fsharp/fsc.fs | 8 +- src/fsharp/service/IncrementalBuild.fs | 1 + src/fsharp/service/service.fs | 2 +- 15 files changed, 449 insertions(+), 168 deletions(-) diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index fd5f14247c..56f3a3c1ac 100644 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -3,7 +3,14 @@ /// Byte arrays namespace FSharp.Compiler.AbstractIL.Internal +open System +open System.IO +open System.IO.MemoryMappedFiles +open System.Runtime.InteropServices +open System.Runtime.CompilerServices +open FSharp.NativeInterop +#nowarn "9" module internal Bytes = let b0 n = (n &&& 0xFF) @@ -26,10 +33,286 @@ module internal Bytes = Array.append (System.Text.Encoding.UTF8.GetBytes s) (ofInt32Array [| 0x0 |]) let stringAsUnicodeNullTerminated (s:string) = - Array.append (System.Text.Encoding.Unicode.GetBytes s) (ofInt32Array [| 0x0;0x0 |]) + Array.append (System.Text.Encoding.Unicode.GetBytes s) (ofInt32Array [| 0x0;0x0 |]) + +[] +type ByteMemory () = + + abstract Item: int -> byte with get, set + + abstract Length: int + + abstract ReadBytes: pos: int * count: int -> byte[] + + abstract ReadInt32: pos: int -> int + + abstract ReadUInt16: pos: int -> uint16 + + abstract ReadUtf8String: pos: int * count: int -> string + + abstract Slice: pos: int * count: int -> ByteMemory + + abstract CopyTo: Stream -> unit + + abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + + abstract ToArray: unit -> byte[] + + abstract AsStream: unit -> Stream + + abstract AsReadOnlyStream: unit -> Stream + +[] +type ByteArrayMemory(bytes: byte[], offset, length) = + inherit ByteMemory() + + do + if length <= 0 || length > bytes.Length then + raise (ArgumentOutOfRangeException("length")) + + if offset < 0 || (offset + length) > bytes.Length then + raise (ArgumentOutOfRangeException("offset")) + + override _.Item + with get i = bytes.[offset + i] + and set i v = bytes.[offset + i] <- v + + override _.Length = length + + override _.ReadBytes(pos, count) = + Array.sub bytes (offset + pos) count + + override _.ReadInt32 pos = + let finalOffset = offset + pos + (uint32 bytes.[finalOffset]) ||| + ((uint32 bytes.[finalOffset + 1]) <<< 8) ||| + ((uint32 bytes.[finalOffset + 2]) <<< 16) ||| + ((uint32 bytes.[finalOffset + 3]) <<< 24) + |> int + + override _.ReadUInt16 pos = + let finalOffset = offset + pos + (uint16 bytes.[finalOffset]) ||| + ((uint16 bytes.[finalOffset + 1]) <<< 8) + + override _.ReadUtf8String(pos, count) = + System.Text.Encoding.UTF8.GetString(bytes, offset + pos, count) + + override _.Slice(pos, count) = + ByteArrayMemory(bytes, offset + pos, count) :> ByteMemory + + override _.CopyTo stream = + stream.Write(bytes, offset, length) + + override _.Copy(srcOffset, dest, destOffset, count) = + Array.blit bytes (offset + srcOffset) dest destOffset count + + override _.ToArray() = + Array.sub bytes offset length + + override _.AsStream() = + new MemoryStream(bytes, offset, length) :> Stream + + override _.AsReadOnlyStream() = + new MemoryStream(bytes, offset, length, false) :> Stream + +[] +type RawByteMemory(addr: nativeptr, length: int, hold: obj) = + inherit ByteMemory () + + let check i = + if i < 0 || i >= length then + raise (ArgumentOutOfRangeException("i")) + + do + if length <= 0 then + raise (ArgumentOutOfRangeException("length")) + + override _.Item + with get i = + check i + NativePtr.add addr i + |> NativePtr.read + and set i v = + check i + NativePtr.set addr i v + + override _.Length = length + + override _.ReadUtf8String(pos, count) = + check pos + check (pos + count - 1) + System.Text.Encoding.UTF8.GetString(NativePtr.add addr pos, count) + + override _.ReadBytes(pos, count) = + check pos + check (pos + count - 1) + let res = Bytes.zeroCreate count + Marshal.Copy(NativePtr.toNativeInt addr + nativeint pos, res, 0, count) + res + + override _.ReadInt32 pos = + check pos + check (pos + 3) + Marshal.ReadInt32(NativePtr.toNativeInt addr + nativeint pos) + + override _.ReadUInt16 pos = + check pos + check (pos + 1) + uint16(Marshal.ReadInt16(NativePtr.toNativeInt addr + nativeint pos)) + + override _.Slice(pos, count) = + check pos + check (pos + count - 1) + RawByteMemory(NativePtr.add addr pos, count, hold) :> ByteMemory + + override x.CopyTo stream = + use stream2 = x.AsStream() + stream2.CopyTo stream + + override x.Copy(srcOffset, dest, destOffset, count) = + check srcOffset + Marshal.Copy(NativePtr.toNativeInt addr + nativeint srcOffset, dest, destOffset, count) + + override _.ToArray() = + let res = Array.zeroCreate length + Marshal.Copy(NativePtr.toNativeInt addr, res, 0, res.Length) + res + + override _.AsStream() = + new UnmanagedMemoryStream(addr, int64 length) :> Stream + + override _.AsReadOnlyStream() = + new UnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read) :> Stream + +[] +type ReadOnlyByteMemory(bytes: ByteMemory) = + + member _.Item with [] get i = bytes.[i] + + member _.Length with [] get () = bytes.Length + + [] + member _.ReadBytes(pos, count) = bytes.ReadBytes(pos, count) + + [] + member _.ReadInt32 pos = bytes.ReadInt32 pos + + [] + member _.ReadUInt16 pos = bytes.ReadUInt16 pos + + [] + member _.ReadUtf8String(pos, count) = bytes.ReadUtf8String(pos, count) + + [] + member _.Slice(pos, count) = bytes.Slice(pos, count) |> ReadOnlyByteMemory + + [] + member _.CopyTo stream = bytes.CopyTo stream + + [] + member _.Copy(srcOffset, dest, destOffset, count) = bytes.Copy(srcOffset, dest, destOffset, count) + + [] + member _.ToArray() = bytes.ToArray() + + [] + member _.AsStream() = bytes.AsReadOnlyStream() + +type ByteMemory with + + member x.AsReadOnly() = ReadOnlyByteMemory x + + static member CreateMemoryMappedFile(bytes: ReadOnlyByteMemory) = + let length = int64 bytes.Length + let mmf = + let mmf = + MemoryMappedFile.CreateNew( + null, + length, + MemoryMappedFileAccess.ReadWrite, + MemoryMappedFileOptions.None, + HandleInheritability.None) + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) + bytes.CopyTo stream + mmf + + let accessor = mmf.CreateViewAccessor(0L, length, MemoryMappedFileAccess.ReadWrite) + + let safeHolder = + { new obj() with + override x.Finalize() = + (x :?> IDisposable).Dispose() + interface IDisposable with + member x.Dispose() = + GC.SuppressFinalize x + accessor.Dispose() + mmf.Dispose() } + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, safeHolder) + + static member FromFile(path, access, ?canShadowCopy: bool) = + let canShadowCopy = defaultArg canShadowCopy false + + let memoryMappedFileAccess = + match access with + | FileAccess.Read -> MemoryMappedFileAccess.Read + | FileAccess.Write -> MemoryMappedFileAccess.Write + | _ -> MemoryMappedFileAccess.ReadWrite + + let mmf, accessor, length = + let fileStream = File.Open(path, FileMode.Open, access, FileShare.Read) + let length = fileStream.Length + let mmf = + if canShadowCopy then + let mmf = + MemoryMappedFile.CreateNew( + null, + length, + MemoryMappedFileAccess.ReadWrite, + MemoryMappedFileOptions.None, + HandleInheritability.None) + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) + fileStream.CopyTo(stream) + fileStream.Dispose() + mmf + else + MemoryMappedFile.CreateFromFile( + fileStream, + null, + length, + memoryMappedFileAccess, + HandleInheritability.None, + leaveOpen=false) + mmf, mmf.CreateViewAccessor(0L, length, memoryMappedFileAccess), length + + match access with + | FileAccess.Read when not accessor.CanRead -> failwith "Cannot read file" + | FileAccess.Write when not accessor.CanWrite -> failwith "Cannot write file" + | _ when not accessor.CanRead || not accessor.CanWrite -> failwith "Cannot read or write file" + | _ -> () + + let safeHolder = + { new obj() with + override x.Finalize() = + (x :?> IDisposable).Dispose() + interface IDisposable with + member x.Dispose() = + GC.SuppressFinalize x + accessor.Dispose() + mmf.Dispose() } + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, safeHolder) + + static member FromUnsafePointer(addr, length, hold: obj) = + RawByteMemory(NativePtr.ofNativeInt addr, length, hold) :> ByteMemory + + static member FromArray(bytes, offset, length) = + ByteArrayMemory(bytes, offset, length) :> ByteMemory + + static member FromArray bytes = + ByteArrayMemory.FromArray(bytes, 0, bytes.Length) type internal ByteStream = - { bytes: byte[] + { bytes: ReadOnlyByteMemory mutable pos: int max: int } member b.ReadByte() = @@ -38,18 +321,18 @@ type internal ByteStream = b.pos <- b.pos + 1 res member b.ReadUtf8String n = - let res = System.Text.Encoding.UTF8.GetString(b.bytes,b.pos,n) + let res = b.bytes.ReadUtf8String(b.pos,n) b.pos <- b.pos + n; res - static member FromBytes (b:byte[],n,len) = + static member FromBytes (b: ReadOnlyByteMemory,n,len) = if n < 0 || (n+len) > b.Length then failwith "FromBytes" { bytes = b; pos = n; max = n+len } member b.ReadBytes n = if b.pos + n > b.max then failwith "ReadBytes: end of stream" - let res = Bytes.sub b.bytes b.pos n + let res = b.bytes.Slice(b.pos, n) b.pos <- b.pos + n - res + res member b.Position = b.pos #if LAZY_UNPICKLE @@ -108,6 +391,13 @@ type internal ByteBuffer = Bytes.blit i 0 buf.bbArray buf.bbCurrent n buf.bbCurrent <- newSize + member buf.EmitByteMemory (i:ReadOnlyByteMemory) = + let n = i.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + i.Copy(0, buf.bbArray, buf.bbCurrent, n) + buf.bbCurrent <- newSize + member buf.EmitInt32AsUInt16 n = let newSize = buf.bbCurrent + 2 buf.Ensure newSize diff --git a/src/absil/bytes.fsi b/src/absil/bytes.fsi index c611e80c77..11e7c9f58c 100644 --- a/src/absil/bytes.fsi +++ b/src/absil/bytes.fsi @@ -3,6 +3,7 @@ /// Blobs of bytes, cross-compiling namespace FSharp.Compiler.AbstractIL.Internal +open System.IO open Internal.Utilities open FSharp.Compiler.AbstractIL @@ -22,6 +23,85 @@ module internal Bytes = val stringAsUnicodeNullTerminated: string -> byte[] val stringAsUtf8NullTerminated: string -> byte[] +/// May be backed by managed or unmanaged memory, or memory mapped file. +[] +type internal ByteMemory = + + abstract Item: int -> byte with get + + abstract Length: int + + abstract ReadBytes: pos: int * count: int -> byte[] + + abstract ReadInt32: pos: int -> int + + abstract ReadUInt16: pos: int -> uint16 + + abstract ReadUtf8String: pos: int * count: int -> string + + abstract Slice: pos: int * count: int -> ByteMemory + + abstract CopyTo: Stream -> unit + + abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + + abstract ToArray: unit -> byte[] + + /// Get a stream representation of the backing memory. + /// Disposing this will not free up any of the backing memory. + abstract AsStream: unit -> Stream + + /// Get a stream representation of the backing memory. + /// Disposing this will not free up any of the backing memory. + /// Stream cannot be written to. + abstract AsReadOnlyStream: unit -> Stream + +[] +type internal ReadOnlyByteMemory = + + new: ByteMemory -> ReadOnlyByteMemory + + member Item: int -> byte with get + + member Length: int + + member ReadBytes: pos: int * count: int -> byte[] + + member ReadInt32: pos: int -> int + + member ReadUInt16: pos: int -> uint16 + + member ReadUtf8String: pos: int * count: int -> string + + member Slice: pos: int * count: int -> ReadOnlyByteMemory + + member CopyTo: Stream -> unit + + member Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + + member ToArray: unit -> byte[] + + member AsStream: unit -> Stream + +type ByteMemory with + + member AsReadOnly: unit -> ReadOnlyByteMemory + + /// Create another ByteMemory object that has a backing memory mapped file based on another ByteMemory's contents. + static member CreateMemoryMappedFile: ReadOnlyByteMemory -> ByteMemory + + /// Creates a ByteMemory object that has a backing memory mapped file from a file on-disk. + static member FromFile: path: string * FileAccess * ?canShadowCopy: bool -> ByteMemory + + /// Creates a ByteMemory object that is backed by a raw pointer. + /// Use with care. + static member FromUnsafePointer: addr: nativeint * length: int * hold: obj -> ByteMemory + + /// Creates a ByteMemory object that is backed by a byte array with the specified offset and length. + static member FromArray: bytes: byte[] * offset: int * length: int -> ByteMemory + + /// Creates a ByteMemory object that is backed by a byte array. + static member FromArray: bytes: byte[] -> ByteMemory /// Imperative buffers and streams of byte[] [] @@ -31,6 +111,7 @@ type internal ByteBuffer = member EmitIntsAsBytes : int[] -> unit member EmitByte : byte -> unit member EmitBytes : byte[] -> unit + member EmitByteMemory : ReadOnlyByteMemory -> unit member EmitInt32 : int32 -> unit member EmitInt64 : int64 -> unit member FixupInt32 : pos: int -> value: int32 -> unit @@ -44,10 +125,10 @@ type internal ByteBuffer = [] type internal ByteStream = member ReadByte : unit -> byte - member ReadBytes : int -> byte[] + member ReadBytes : int -> ReadOnlyByteMemory member ReadUtf8String : int -> string member Position : int - static member FromBytes : byte[] * start:int * length:int -> ByteStream + static member FromBytes : ReadOnlyByteMemory * start:int * length:int -> ByteStream #if LAZY_UNPICKLE member CloneAndSeek : int -> ByteStream diff --git a/src/absil/il.fs b/src/absil/il.fs index fb6e5bc320..4736a29b39 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -2208,8 +2208,7 @@ type ILResourceAccess = [] type ILResourceLocation = - | LocalIn of string * int * int - | LocalOut of byte[] + | Local of ReadOnlyByteMemory | File of ILModuleRef * int32 | Assembly of ILAssemblyRef @@ -2223,9 +2222,7 @@ type ILResource = /// Read the bytes from a resource local to an assembly member r.GetBytes() = match r.Location with - | ILResourceLocation.LocalIn (file, start, len) -> - File.ReadBinaryChunk(file, start, len) - | ILResourceLocation.LocalOut bytes -> bytes + | ILResourceLocation.Local bytes -> bytes | _ -> failwith "GetBytes" member x.CustomAttrs = x.CustomAttrsStored.GetCustomAttrs x.MetadataIndex @@ -4208,8 +4205,7 @@ and refs_of_exported_types s (tab: ILExportedTypesAndForwarders) = List.iter (re and refs_of_resource_where s x = match x with - | ILResourceLocation.LocalIn _ -> () - | ILResourceLocation.LocalOut _ -> () + | ILResourceLocation.Local _ -> () | ILResourceLocation.File (mref, _) -> refs_of_modref s mref | ILResourceLocation.Assembly aref -> refs_of_assemblyRef s aref diff --git a/src/absil/il.fsi b/src/absil/il.fsi index e981e8e8b5..ccafd6334f 100644 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -3,6 +3,7 @@ /// The "unlinked" view of .NET metadata and code. Central to the Abstract IL library module public FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal open System.Collections.Generic open System.Reflection @@ -1405,11 +1406,9 @@ type ILResourceAccess = [] type ILResourceLocation = - /// Represents a manifest resource that can be read from within the PE file - | LocalIn of string * int * int - - /// Represents a manifest resource that is due to be written to the output PE file - | LocalOut of byte[] + internal + /// Represents a manifest resource that can be read or written to a PE file + | Local of ReadOnlyByteMemory /// Represents a manifest resource in an associated file | File of ILModuleRef * int32 @@ -1429,7 +1428,7 @@ type ILResource = MetadataIndex: int32 } /// Read the bytes from a resource local to an assembly. Will fail for non-local resources. - member GetBytes : unit -> byte[] + member internal GetBytes : unit -> ReadOnlyByteMemory member CustomAttrs: ILAttributes diff --git a/src/absil/ilprint.fs b/src/absil/ilprint.fs index 7f408d48cb..2515634395 100644 --- a/src/absil/ilprint.fs +++ b/src/absil/ilprint.fs @@ -1024,8 +1024,7 @@ let goutput_resource env os r = output_string os " { " goutput_custom_attrs env os r.CustomAttrs match r.Location with - | ILResourceLocation.LocalIn _ - | ILResourceLocation.LocalOut _ -> + | ILResourceLocation.Local _ -> output_string os " /* loc nyi */ " | ILResourceLocation.File (mref, off) -> output_string os " .file " diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index de201333a0..fed858c4d5 100644 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -19,6 +19,7 @@ open System.Runtime.InteropServices open System.Text open Internal.Utilities open Internal.Utilities.Collections +open FSharp.NativeInterop open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Support open FSharp.Compiler.AbstractIL.Diagnostics @@ -29,6 +30,8 @@ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Range open System.Reflection +#nowarn "9" + let checking = false let logging = false let _ = if checking then dprintn "warning: ILBinaryReader.checking is on" @@ -104,125 +107,31 @@ let stats = let GetStatistics() = stats -[] -/// An abstraction over how we access the contents of .NET binaries. May be backed by managed or unmanaged memory, -/// memory mapped file or by on-disk resources. These objects should never need explicit disposal - they must either -/// not hold resources of clean up after themselves when collected. -type BinaryView() = - - /// Read a byte from the file - abstract ReadByte: addr: int -> byte - - /// Read a chunk of bytes from the file - abstract ReadBytes: addr: int -> int -> byte[] - - /// Read an Int32 from the file - abstract ReadInt32: addr: int -> int +type private BinaryView = ReadOnlyByteMemory - /// Read a UInt16 from the file - abstract ReadUInt16: addr: int -> uint16 - - /// Read a length of a UTF8 string from the file - abstract CountUtf8String: addr: int -> int - - /// Read a UTF8 string from the file - abstract ReadUTF8String: addr: int -> string - -/// An abstraction over how we access the contents of .NET binaries. May be backed by managed or unmanaged memory, -/// memory mapped file or by on-disk resources. +/// An abstraction over how we access the contents of .NET binaries. type BinaryFile = - /// Return a BinaryView for temporary use which eagerly holds any necessary memory resources for the duration of its lifetime, - /// and is faster to access byte-by-byte. The returned BinaryView should _not_ be captured in a closure that outlives the - /// desired lifetime. abstract GetView: unit -> BinaryView -/// A view over a raw pointer to memory -type RawMemoryView(obj: obj, start: nativeint, len: int) = - inherit BinaryView() - - override m.ReadByte i = - if nativeint i + 1n > nativeint len then failwithf "RawMemoryView overrun, i = %d, obj = %A" i obj - Marshal.ReadByte(start + nativeint i) - - override m.ReadBytes i n = - if nativeint i + nativeint n > nativeint len then failwithf "RawMemoryView overrun, i = %d, n = %d, obj = %A" i n obj - let res = Bytes.zeroCreate n - Marshal.Copy(start + nativeint i, res, 0, n) - res - - override m.ReadInt32 i = - if nativeint i + 4n > nativeint len then failwithf "RawMemoryView overrun, i = %d, obj = %A" i obj - Marshal.ReadInt32(start + nativeint i) - - override m.ReadUInt16 i = - if nativeint i + 2n > nativeint len then failwithf "RawMemoryView overrun, i = %d, obj = %A" i obj - uint16(Marshal.ReadInt16(start + nativeint i)) - - override m.CountUtf8String i = - if nativeint i > nativeint len then failwithf "RawMemoryView overrun, i = %d, obj = %A" i obj - let pStart = start + nativeint i - let mutable p = start - while Marshal.ReadByte p <> 0uy do - p <- p + 1n - int (p - pStart) - - override m.ReadUTF8String i = - let n = m.CountUtf8String i - if nativeint i + nativeint n > nativeint len then failwithf "RawMemoryView overrun, i = %d, n = %d, obj = %A" i n obj - System.Runtime.InteropServices.Marshal.PtrToStringAnsi(start + nativeint i, n) - - member __.HoldObj() = obj - - /// Gives views over a raw chunk of memory, for example those returned to us by the memory manager in Roslyn's /// Visual Studio integration. 'obj' must keep the memory alive. The object will capture it and thus also keep the memory alive for /// the lifetime of this object. type RawMemoryFile(fileName: string, obj: obj, addr: nativeint, length: int) = do stats.rawMemoryFileCount <- stats.rawMemoryFileCount + 1 - let view = RawMemoryView(obj, addr, length) + let view = ByteMemory.FromUnsafePointer(addr, length, obj).AsReadOnly() member __.HoldObj() = obj // make sure we capture 'obj' member __.FileName = fileName interface BinaryFile with - override __.GetView() = view :>_ - -/// Read file from memory blocks -type ByteView(bytes: byte[]) = - inherit BinaryView() - - override __.ReadByte addr = bytes.[addr] - - override __.ReadBytes addr len = Array.sub bytes addr len - - override __.CountUtf8String addr = - let mutable p = addr - while bytes.[p] <> 0uy do - p <- p + 1 - p - addr - - override bfv.ReadUTF8String addr = - let n = bfv.CountUtf8String addr - System.Text.Encoding.UTF8.GetString (bytes, addr, n) - - override bfv.ReadInt32 addr = - let b0 = bfv.ReadByte addr - let b1 = bfv.ReadByte (addr+1) - let b2 = bfv.ReadByte (addr+2) - let b3 = bfv.ReadByte (addr+3) - int b0 ||| (int b1 <<< 8) ||| (int b2 <<< 16) ||| (int b3 <<< 24) - - override bfv.ReadUInt16 addr = - let b0 = bfv.ReadByte addr - let b1 = bfv.ReadByte (addr+1) - uint16 b0 ||| (uint16 b1 <<< 8) + override __.GetView() = view /// A BinaryFile backed by an array of bytes held strongly as managed memory [] type ByteFile(fileName: string, bytes: byte[]) = - let view = ByteView bytes + let view = ByteMemory.FromArray(bytes).AsReadOnly() do stats.byteFileCount <- stats.byteFileCount + 1 member __.FileName = fileName interface BinaryFile with - override bf.GetView() = view :> BinaryView + override bf.GetView() = view /// Same as ByteFile but holds the bytes weakly. The bytes will be re-read from the backing file when a view is requested. /// This is the default implementation used by F# Compiler Services when accessing "stable" binaries. It is not used @@ -261,11 +170,11 @@ type WeakByteFile(fileName: string, chunk: (int * int) option) = tg - (ByteView strongBytes :> BinaryView) + ByteMemory.FromArray(strongBytes).AsReadOnly() -let seekReadByte (mdv: BinaryView) addr = mdv.ReadByte addr -let seekReadBytes (mdv: BinaryView) addr len = mdv.ReadBytes addr len +let seekReadByte (mdv: BinaryView) addr = mdv.[addr] +let seekReadBytes (mdv: BinaryView) addr len = mdv.ReadBytes(addr, len) let seekReadInt32 (mdv: BinaryView) addr = mdv.ReadInt32 addr let seekReadUInt16 (mdv: BinaryView) addr = mdv.ReadUInt16 addr @@ -1502,7 +1411,7 @@ let rvaToData (ctxt: ILMetadataReader) (pectxt: PEReader) nm rva = let isSorted (ctxt: ILMetadataReader) (tab: TableName) = ((ctxt.sorted &&& (int64 1 <<< tab.Index)) <> int64 0x0) // Note, pectxtEager and pevEager must not be captured by the results of this function -let rec seekReadModule (ctxt: ILMetadataReader) (pectxtEager: PEReader) pevEager peinfo ilMetadataVersion idx = +let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PEReader) pevEager peinfo ilMetadataVersion idx = let (subsys, subsysversion, useHighEntropyVA, ilOnly, only32, is32bitpreferred, only64, platform, isDll, alignVirt, alignPhys, imageBaseReal) = peinfo let mdv = ctxt.mdfile.GetView() let (_generation, nameIdx, _mvidIdx, _encidIdx, _encbaseidIdx) = seekReadModuleRow ctxt mdv idx @@ -1531,7 +1440,7 @@ let rec seekReadModule (ctxt: ILMetadataReader) (pectxtEager: PEReader) pevEager PhysicalAlignment = alignPhys ImageBase = imageBaseReal MetadataVersion = ilMetadataVersion - Resources = seekReadManifestResources ctxt mdv pectxtEager pevEager } + Resources = seekReadManifestResources ctxt canReduceMemory mdv pectxtEager pevEager } and seekReadAssemblyManifest (ctxt: ILMetadataReader) pectxt idx = let mdview = ctxt.mdfile.GetView() @@ -3101,10 +3010,10 @@ and sigptrGetILNativeType ctxt bytes sigptr = else sigptrGetZInt32 bytes sigptr ILNativeType.Array (Some nt, Some(pnum, Some additive)), sigptr else (ILNativeType.Empty, sigptr) - + // Note, pectxtEager and pevEager must not be captured by the results of this function // As a result, reading the resource offsets in the physical file is done eagerly to avoid holding on to any resources -and seekReadManifestResources (ctxt: ILMetadataReader) (mdv: BinaryView) (pectxtEager: PEReader) (pevEager: BinaryView) = +and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: BinaryView) (pectxtEager: PEReader) (pevEager: BinaryView) = mkILResources [ for i = 1 to ctxt.getNumRows TableNames.ManifestResource do let (offset, flags, nameIdx, implIdx) = seekReadManifestResourceRow ctxt mdv i @@ -3117,10 +3026,14 @@ and seekReadManifestResources (ctxt: ILMetadataReader) (mdv: BinaryView) (pectxt let start = pectxtEager.anyV2P ("resource", offset + pectxtEager.resourcesAddr) let resourceLength = seekReadInt32 pevEager start let offsetOfBytesFromStartOfPhysicalPEFile = start + 4 - if pectxtEager.noFileOnDisk then - ILResourceLocation.LocalOut (seekReadBytes pevEager offsetOfBytesFromStartOfPhysicalPEFile resourceLength) - else - ILResourceLocation.LocalIn (ctxt.fileName, offsetOfBytesFromStartOfPhysicalPEFile, resourceLength) + let bytes = + let bytes = pevEager.Slice(offsetOfBytesFromStartOfPhysicalPEFile, resourceLength) + // If we are trying to reduce memory, create a memory mapped file based on the contents. + if canReduceMemory then + ByteMemory.CreateMemoryMappedFile bytes + else + ByteMemory.FromArray(bytes.ToArray()) + ILResourceLocation.Local(bytes.AsReadOnly()) | ILScopeRef.Module mref -> ILResourceLocation.File (mref, offset) | ILScopeRef.Assembly aref -> ILResourceLocation.Assembly aref @@ -3207,7 +3120,7 @@ let getPdbReader pdbDirPath fileName = #endif // Note, pectxtEager and pevEager must not be captured by the results of this function -let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager: BinaryView, pectxtCaptured, reduceMemoryUsage, ilGlobals) = +let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage, ilGlobals) = let mdv = mdfile.GetView() let magic = seekReadUInt16AsInt32 mdv metadataPhysLoc if magic <> 0x5342 then failwith (fileName + ": bad metadata magic number: " + string magic) @@ -3584,7 +3497,7 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p tableBigness=tableBigness } ctxtH := Some ctxt - let ilModule = seekReadModule ctxt pectxtEager pevEager peinfo (System.Text.Encoding.UTF8.GetString (ilMetadataVersion, 0, ilMetadataVersion.Length)) 1 + let ilModule = seekReadModule ctxt reduceMemoryUsage pectxtEager pevEager peinfo (System.Text.Encoding.UTF8.GetString (ilMetadataVersion, 0, ilMetadataVersion.Length)) 1 let ilAssemblyRefs = lazy [ for i in 1 .. getNumRows TableNames.AssemblyRef do yield seekReadAssemblyRef ctxt i ] ilModule, ilAssemblyRefs @@ -3797,8 +3710,8 @@ let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, ilGlobals, noFileOn let ilModule, ilAssemblyRefs = openMetadataReader (fileName, pefile, metadataPhysLoc, peinfo, pectxt, pev, Some pectxt, reduceMemoryUsage, ilGlobals) ilModule, ilAssemblyRefs, pdb -let openPEMetadataOnly (fileName, peinfo, pectxtEager, pev, mdfile: BinaryFile, reduceMemoryUsage, ilGlobals) = - openMetadataReader (fileName, mdfile, 0, peinfo, pectxtEager, pev, None, reduceMemoryUsage, ilGlobals) +let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage, ilGlobals) = + openMetadataReader (fileName, mdfile, 0, peinfo, pectxtEager, pevEager, None, reduceMemoryUsage, ilGlobals) let ClosePdbReader pdb = #if FX_NO_PDB_READER @@ -3992,13 +3905,12 @@ let OpenILModuleReader fileName opts = // We do however care about avoiding locks on files that prevent their deletion during a // multi-proc build. So use memory mapping, but only for stable files. Other files // still use an in-memory ByteFile - let _disposer, pefile = + let pefile = if alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath then - createMemoryMapFile fullPath + let _, pefile = createMemoryMapFile fullPath + pefile else - let pefile = createByteFileChunk opts fullPath None - let disposer = { new IDisposable with member __.Dispose() = () } - disposer, pefile + createByteFileChunk opts fullPath None let ilModule, ilAssemblyRefs, pdb = openPE (fullPath, pefile, opts.pdbDirPath, reduceMemoryUsage, opts.ilGlobals, false) let ilModuleReader = new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index 69209100b9..c6a79dd5b8 100644 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -2070,11 +2070,9 @@ let buildModuleFragment cenv emEnv (asmB: AssemblyBuilder) (modB: ModuleBuilder) m.Resources.AsList |> List.iter (fun r -> let attribs = (match r.Access with ILResourceAccess.Public -> ResourceAttributes.Public | ILResourceAccess.Private -> ResourceAttributes.Private) match r.Location with - | ILResourceLocation.LocalIn (file, start, len) -> - let bytes = FileSystem.ReadAllBytesShim(file).[start .. start + len - 1] - modB.DefineManifestResourceAndLog (r.Name, new MemoryStream(bytes), attribs) - | ILResourceLocation.LocalOut bytes -> - modB.DefineManifestResourceAndLog (r.Name, new MemoryStream(bytes), attribs) + | ILResourceLocation.Local bytes -> + use stream = bytes.AsStream() + modB.DefineManifestResourceAndLog (r.Name, stream, attribs) | ILResourceLocation.File (mr, _) -> asmB.AddResourceFileAndLog (r.Name, mr.Name, attribs) | ILResourceLocation.Assembly _ -> diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index 409c91d590..802ad3d3a0 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -2689,7 +2689,7 @@ and GenEventPass3 cenv env (md: ILEventDef) = let rec GetResourceAsManifestResourceRow cenv r = let data, impl = - let embedManagedResources (bytes: byte[]) = + let embedManagedResources (bytes: ReadOnlyByteMemory) = // Embedded managed resources must be word-aligned. However resource format is // not specified in ECMA. Some mscorlib resources appear to be non-aligned - it seems it doesn't matter.. let offset = cenv.resources.Position @@ -2698,12 +2698,11 @@ let rec GetResourceAsManifestResourceRow cenv r = let resourceSize = bytes.Length cenv.resources.EmitPadding pad cenv.resources.EmitInt32 resourceSize - cenv.resources.EmitBytes bytes + cenv.resources.EmitByteMemory bytes Data (alignedOffset, true), (i_File, 0) match r.Location with - | ILResourceLocation.LocalIn _ -> embedManagedResources (r.GetBytes()) - | ILResourceLocation.LocalOut bytes -> embedManagedResources bytes + | ILResourceLocation.Local bytes -> embedManagedResources bytes | ILResourceLocation.File (mref, offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 3af0e04e20..69f8305556 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -1893,9 +1893,9 @@ type IRawFSharpAssemblyData = /// in the language service abstract TryGetILModuleDef: unit -> ILModuleDef option /// The raw F# signature data in the assembly, if any - abstract GetRawFSharpSignatureData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> byte[])) list + abstract GetRawFSharpSignatureData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> ReadOnlyByteMemory)) list /// The raw F# optimization data in the assembly, if any - abstract GetRawFSharpOptimizationData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> byte[])) list + abstract GetRawFSharpOptimizationData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> ReadOnlyByteMemory)) list /// The table of type forwarders in the assembly abstract GetRawTypeForwarders: unit -> ILExportedTypesAndForwarders /// The identity of the module @@ -3590,7 +3590,7 @@ let IsReflectedDefinitionsResource (r: ILResource) = let MakeILResource rName bytes = { Name = rName - Location = ILResourceLocation.LocalOut bytes + Location = ILResourceLocation.Local(ByteMemory.FromArray(bytes).AsReadOnly()) Access = ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } @@ -3599,7 +3599,7 @@ let PickleToResource inMem file (g: TcGlobals) scope rName p x = let file = PathMap.apply g.pathMap file { Name = rName - Location = (let bytes = pickleObjWithDanglingCcus inMem file g scope p x in ILResourceLocation.LocalOut bytes) + Location = (let bytes = pickleObjWithDanglingCcus inMem file g scope p x in ILResourceLocation.Local(ByteMemory.FromArray(bytes).AsReadOnly())) Access = ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } @@ -3657,7 +3657,7 @@ type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyR let sigFileName = Path.ChangeExtension(filename, "sigdata") if not (FileSystem.SafeExists sigFileName) then error(Error(FSComp.SR.buildExpectedSigdataFile (FileSystem.GetFullPathShim sigFileName), m)) - [ (ilShortAssemName, fun () -> FileSystem.ReadAllBytesShim sigFileName)] + [ (ilShortAssemName, fun () -> ByteMemory.FromFile(sigFileName, FileAccess.Read, canShadowCopy=true).AsReadOnly())] else sigDataReaders sigDataReaders @@ -3672,7 +3672,7 @@ type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyR let optDataFile = Path.ChangeExtension(filename, "optdata") if not (FileSystem.SafeExists optDataFile) then error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile, FileSystem.GetFullPathShim optDataFile), m)) - [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim optDataFile))] + [ (ilShortAssemName, (fun () -> ByteMemory.FromFile(optDataFile, FileAccess.Read, canShadowCopy=true).AsReadOnly()))] else optDataReaders optDataReaders diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 51b10bc028..230bd508de 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -11,6 +11,7 @@ open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.ILPdbWriter +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler open FSharp.Compiler.TypeChecker @@ -154,9 +155,9 @@ type IRawFSharpAssemblyData = abstract HasAnyFSharpSignatureDataAttribute: bool abstract HasMatchingFSharpSignatureDataAttribute: ILGlobals -> bool /// The raw F# signature data in the assembly, if any - abstract GetRawFSharpSignatureData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> byte[])) list + abstract GetRawFSharpSignatureData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> ReadOnlyByteMemory)) list /// The raw F# optimization data in the assembly, if any - abstract GetRawFSharpOptimizationData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> byte[])) list + abstract GetRawFSharpOptimizationData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> ReadOnlyByteMemory)) list /// The table of type forwarders in the assembly abstract GetRawTypeForwarders: unit -> ILExportedTypesAndForwarders /// The identity of the module diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index 97a723f6cf..5098b16ecd 100644 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -284,10 +284,13 @@ let u_int32 st = assert(b0 = 0xFF) prim_u_int32 st -let u_bytes st = +let u_byte_memory st = let n = (u_int32 st) st.is.ReadBytes n +let u_bytes st = + (u_byte_memory st).ToArray() + let u_prim_string st = let len = (u_int32 st) st.is.ReadUtf8String len @@ -832,7 +835,7 @@ let check (ilscope: ILScopeRef) (inMap : NodeInTable<_, _>) = // an identical copy of the source for the DLL containing the data being unpickled. A message will // then be printed indicating the name of the item. -let unpickleObjWithDanglingCcus file ilscope (iILModule: ILModuleDef option) u (phase2bytes: byte[]) = +let unpickleObjWithDanglingCcus file ilscope (iILModule: ILModuleDef option) u (phase2bytes: ReadOnlyByteMemory) = let st2 = { is = ByteStream.FromBytes (phase2bytes, 0, phase2bytes.Length) iilscope= ilscope @@ -858,7 +861,7 @@ let unpickleObjWithDanglingCcus file ilscope (iILModule: ILModuleDef option) u ( (u_array u_encoded_pubpath) (u_array u_encoded_nleref) (u_array u_encoded_simpletyp) - u_bytes + u_byte_memory st2 let ccuTab = new_itbl "iccus" (Array.map (CcuThunk.CreateDelayed) ccuNameTab) let stringTab = new_itbl "istrings" (Array.map decode_string stringTab) diff --git a/src/fsharp/TastPickle.fsi b/src/fsharp/TastPickle.fsi index 2b659b0598..e3d9379c07 100644 --- a/src/fsharp/TastPickle.fsi +++ b/src/fsharp/TastPickle.fsi @@ -142,7 +142,7 @@ val internal u_ty : unpickler val internal unpickleCcuInfo : ReaderState -> PickledCcuInfo /// Deserialize an arbitrary object which may have holes referring to other compilation units -val internal unpickleObjWithDanglingCcus : file:string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef option -> ('T unpickler) -> byte[] -> PickledDataWithReferences<'T> +val internal unpickleObjWithDanglingCcus : file:string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef option -> ('T unpickler) -> ReadOnlyByteMemory -> PickledDataWithReferences<'T> diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index bb46f75e1d..61cc6e8547 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -442,7 +442,9 @@ let EncodeInterfaceData(tcConfig: TcConfig, tcGlobals, exportRemapping, generate let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild if useDataFiles then let sigDataFileName = (Filename.chopExtension outfile)+".sigdata" - File.WriteAllBytes(sigDataFileName, resource.GetBytes()) + let bytes = resource.GetBytes() + use fileStream = File.Create(sigDataFileName, bytes.Length) + bytes.CopyTo fileStream let resources = [ resource ] let sigAttr = mkSignatureDataVersionAttr tcGlobals (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) @@ -892,7 +894,7 @@ module MainModuleBuilder = [ ] let reflectedDefinitionResource = { Name=reflectedDefinitionResourceName - Location = ILResourceLocation.LocalOut reflectedDefinitionBytes + Location = ILResourceLocation.Local(ByteMemory.FromArray(reflectedDefinitionBytes).AsReadOnly()) Access= ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } @@ -936,7 +938,7 @@ module MainModuleBuilder = let bytes = FileSystem.ReadAllBytesShim file name, bytes, pub yield { Name=name - Location=ILResourceLocation.LocalOut bytes + Location=ILResourceLocation.Local(ByteMemory.FromArray(bytes).AsReadOnly()) Access=pub CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 774fd78e10..4cb4c23ea4 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -14,6 +14,7 @@ open FSharp.Compiler.Lib open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompileOps open FSharp.Compiler.CompileOptions diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 254491005a..a98cb2966b 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -225,7 +225,7 @@ module CompileHelpers = // Register the reflected definitions for the dynamically generated assembly for resource in ilxMainModule.Resources.AsList do if IsReflectedDefinitionsResource resource then - Quotations.Expr.RegisterReflectedDefinitions (assemblyBuilder, moduleBuilder.Name, resource.GetBytes()) + Quotations.Expr.RegisterReflectedDefinitions (assemblyBuilder, moduleBuilder.Name, resource.GetBytes().ToArray()) // Save the result assemblyBuilderRef := Some assemblyBuilder From 230f82b4da8b708bcc9a5abc5dcca93c0628e2c3 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 16 Dec 2019 14:57:28 -0800 Subject: [PATCH 130/214] Fixed type abbreviation from bypassing ByRefLike rules (#7953) * Trying to fix span type abbrev * Fixed type abbrev issue on span * Fixing build * Update test * Apply suggestions from code review I like @cartermps test name changes. Co-Authored-By: Phillip Carter * Update PostInferenceChecks.fs --- src/fsharp/PostInferenceChecks.fs | 11 +++- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- tests/fsharp/Compiler/Language/SpanTests.fs | 54 +++++++++++++++++++- tests/fsharp/typecheck/sigs/neg_byref_13.bsl | 6 +++ 4 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index c718a94665..1730f88bd2 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -313,7 +313,7 @@ let RecordAnonRecdInfo cenv (anonInfo: AnonRecdTypeInfo) = // approx walk of type //-------------------------------------------------------------------------- -let rec CheckTypeDeep (cenv: cenv) ((visitTy, visitTyconRefOpt, visitAppTyOpt, visitTraitSolutionOpt, visitTyparOpt) as f) g env isInner ty = +let rec CheckTypeDeep (cenv: cenv) ((visitTy, visitTyconRefOpt, visitAppTyOpt, visitTraitSolutionOpt, visitTyparOpt) as f) (g: TcGlobals) env isInner ty = // We iterate the _solved_ constraints as well, to pick up any record of trait constraint solutions // This means we walk _all_ the constraints _everywhere_ in a type, including // those attached to _solved_ type variables. This is used by PostTypeCheckSemanticChecks to detect uses of @@ -332,7 +332,14 @@ let rec CheckTypeDeep (cenv: cenv) ((visitTy, visitTyconRefOpt, visitAppTyOpt, v | _ -> ()) | _ -> () - let ty = stripTyparEqns ty + let ty = + if g.compilingFslib then + match stripTyparEqns ty with + // When compiling FSharp.Core, do not strip type equations at this point if we can't dereference a tycon. + | TType_app (tcref, _) when not tcref.CanDeref -> ty + | _ -> stripTyEqns g ty + else + stripTyEqns g ty visitTy ty match ty with diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 50102ab21c..1c753cd25e 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -211,7 +211,7 @@ let main argv = 0""" typeCheckResults.Errors |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) - Assert.AreEqual(Array.length expectedTypeErrors, errors.Length, sprintf "Type check errors: %A" typeCheckResults.Errors) + Assert.AreEqual(Array.length expectedTypeErrors, errors.Length, sprintf "Type check errors: %A" errors) Array.zip errors expectedTypeErrors |> Array.iter (fun (info, expectedError) -> diff --git a/tests/fsharp/Compiler/Language/SpanTests.fs b/tests/fsharp/Compiler/Language/SpanTests.fs index cbac744a71..646032880a 100644 --- a/tests/fsharp/Compiler/Language/SpanTests.fs +++ b/tests/fsharp/Compiler/Language/SpanTests.fs @@ -3,6 +3,7 @@ namespace FSharp.Compiler.UnitTests open System +open FSharp.Compiler.SourceCodeServices open NUnit.Framework #if NETCOREAPP @@ -50,4 +51,55 @@ test () // We expect this error until System.Reflection.Emit gets fixed for emitting `modreq` on method calls. // See: https://github.com/dotnet/corefx/issues/29254 CompilerAssert.RunScript script [ "Method not found: '!0 ByRef System.ReadOnlySpan`1.get_Item(Int32)'." ] -#endif \ No newline at end of file + + + [] + let ``Invalid usage of type abbreviated span should fail to compile``() = + CompilerAssert.TypeCheckWithErrors """ +open System + +type Bytes = ReadOnlySpan + +type Test() = + + member _.M1 (data: Bytes) = + let x = + if false then + failwith "" + else + data + x + + member _.M2 (data: Bytes) = + let x = + if false then + failwithf "" + else + data + x + +let test () = + let span = ReadOnlySpan<_>(Array.empty) + let result = Test().M1(span) + let result = Test().M2(span) + 0 + """ + [| + FSharpErrorSeverity.Error, 412, (11, 17, 11, 28), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpErrorSeverity.Error, 412, (19, 17, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpErrorSeverity.Error, 412, (19, 27, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + |] + + [] + let ``Type abbreviation that boxes a span should fail to compile``() = + CompilerAssert.TypeCheckWithErrors """ +open System + +type TA = Span * Span + +let f (x: TA) = () + """ + [| + FSharpErrorSeverity.Error, 3300, (6, 8, 6, 9), "The parameter 'x' has an invalid type 'TA'. This is not permitted by the rules of Common IL." + |] +#endif diff --git a/tests/fsharp/typecheck/sigs/neg_byref_13.bsl b/tests/fsharp/typecheck/sigs/neg_byref_13.bsl index 92efcae6d9..985177e979 100644 --- a/tests/fsharp/typecheck/sigs/neg_byref_13.bsl +++ b/tests/fsharp/typecheck/sigs/neg_byref_13.bsl @@ -1,2 +1,8 @@ neg_byref_13.fs(2,6,2,8): typecheck error FS0445: The type abbreviation contains byrefs. This is not permitted by F#. + +neg_byref_13.fs(3,12,3,13): typecheck error FS3300: The parameter 'x' has an invalid type 'M5'. This is not permitted by the rules of Common IL. + +neg_byref_13.fs(3,5,3,10): typecheck error FS3301: The function or method has an invalid return type 'M5'. This is not permitted by the rules of Common IL. + +neg_byref_13.fs(3,20,3,21): typecheck error FS0412: A type instantiation involves a byref type. This is not permitted by the rules of Common IL. \ No newline at end of file From 27ddee738378fd38575a8b6c4835dc02f6ef1e8d Mon Sep 17 00:00:00 2001 From: Will Smith Date: Tue, 17 Dec 2019 14:16:14 -0800 Subject: [PATCH 131/214] Added SafeUnmanagedMemoryStream for AsStream/AsReadOnlyStream (#8005) * Added SafeUnmanagedMemoryStream for AsStream/AsReadOnlyStream on RawByteMemory * Disposed should be true --- src/absil/bytes.fs | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index 56f3a3c1ac..bc7ceb96b4 100644 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -116,6 +116,36 @@ type ByteArrayMemory(bytes: byte[], offset, length) = override _.AsReadOnlyStream() = new MemoryStream(bytes, offset, length, false) :> Stream +[] +type SafeUnmanagedMemoryStream = + inherit UnmanagedMemoryStream + + val mutable private hold: obj + val mutable private isDisposed: bool + + new (addr, length, hold) = + { + inherit UnmanagedMemoryStream(addr, length) + hold = hold + isDisposed = false + } + + new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, hold) = + { + inherit UnmanagedMemoryStream(addr, length, capacity, access) + hold = hold + isDisposed = false + } + + override x.Finalize() = + x.Dispose false + + override x.Dispose disposing = + base.Dispose disposing + if not x.isDisposed then + x.hold <- null // Null out so it can be collected. + x.isDisposed <- true + [] type RawByteMemory(addr: nativeptr, length: int, hold: obj) = inherit ByteMemory () @@ -170,7 +200,7 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = use stream2 = x.AsStream() stream2.CopyTo stream - override x.Copy(srcOffset, dest, destOffset, count) = + override _.Copy(srcOffset, dest, destOffset, count) = check srcOffset Marshal.Copy(NativePtr.toNativeInt addr + nativeint srcOffset, dest, destOffset, count) @@ -180,10 +210,10 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = res override _.AsStream() = - new UnmanagedMemoryStream(addr, int64 length) :> Stream + new SafeUnmanagedMemoryStream(addr, int64 length, hold) :> Stream override _.AsReadOnlyStream() = - new UnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read) :> Stream + new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, hold) :> Stream [] type ReadOnlyByteMemory(bytes: ByteMemory) = From 06537fb64cfa2873cf5cb8bc2cde3303cc3ed930 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2019 16:31:35 -0800 Subject: [PATCH 132/214] Update dependencies from https://github.com/dotnet/arcade build 20191216.4 (#8002) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19616.4 --- eng/Version.Details.xml | 4 +-- eng/common/templates/steps/publish-logs.yml | 2 +- eng/common/tools.ps1 | 33 ++++++++++++--------- global.json | 2 +- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7e92b0a484..5ad9b6c11b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 77698ebba1ab096ad9580a5d9ebefe0499ba00ce + 4736ddca60a4040447b450437cf3767c9045edc0 diff --git a/eng/common/templates/steps/publish-logs.yml b/eng/common/templates/steps/publish-logs.yml index 8903ba57c0..f91751fe78 100644 --- a/eng/common/templates/steps/publish-logs.yml +++ b/eng/common/templates/steps/publish-logs.yml @@ -18,6 +18,6 @@ steps: inputs: PathtoPublish: '$(Build.SourcesDirectory)/PostBuildLogs' PublishLocation: Container - ArtifactName: PostBuilLogs + ArtifactName: PostBuildLogs continueOnError: true condition: always() diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 09c3a3325e..d3a432878e 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -98,6 +98,9 @@ function Exec-Process([string]$command, [string]$commandArgs) { } } +# createSdkLocationFile parameter enables a file being generated under the toolset directory +# which writes the sdk's location into. This is only necessary for cmd --> powershell invocations +# as dot sourcing isn't possible. function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { if (Test-Path variable:global:_DotNetInstallDir) { return $global:_DotNetInstallDir @@ -146,21 +149,23 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { } $env:DOTNET_INSTALL_DIR = $dotnetRoot + } - if ($createSdkLocationFile) { - # Create a temporary file under the toolset dir and rename it to sdk.txt to avoid races. - do { - $sdkCacheFileTemp = Join-Path $ToolsetDir $([System.IO.Path]::GetRandomFileName()) - } - until (!(Test-Path $sdkCacheFileTemp)) - Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot - - try { - Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt' - } catch { - # Somebody beat us - Remove-Item -Path $sdkCacheFileTemp - } + # Creates a temporary file under the toolset dir. + # The following code block is protecting against concurrent access so that this function can + # be called in parallel. + if ($createSdkLocationFile) { + do { + $sdkCacheFileTemp = Join-Path $ToolsetDir $([System.IO.Path]::GetRandomFileName()) + } + until (!(Test-Path $sdkCacheFileTemp)) + Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot + + try { + Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt' + } catch { + # Somebody beat us + Remove-Item -Path $sdkCacheFileTemp } } diff --git a/global.json b/global.json index 73b5446857..7201e70435 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19615.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19616.4", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 0770d3069158f490cfe36c038cc8c42afc89b060 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 17 Dec 2019 19:07:50 -0800 Subject: [PATCH 133/214] Fix expr tests to work on debug (#8010) --- tests/service/ExprTests.fs | 68 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index f2215974b9..a4d7e9696a 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -1059,8 +1059,12 @@ let ``Test Operator Declarations for Byte`` () = "let testByteToDoubleOperator(e1) = Operators.ToDouble (Operators.ToDouble (e1)) @ (53,43--53,51)"; "let testByteToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,43--54,53)"; "let testByteToCharOperator(e1) = Operators.ToChar (e1) @ (55,43--55,50)"; +#if DEBUG + @"let testByteToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,43--56,52)"; +#else "let testByteToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,43--56,52)"; - ] +#endif + ] testOperators "Byte" "byte" excludedTests expectedUnoptimized expectedOptimized @@ -1169,8 +1173,12 @@ let ``Test Operator Declarations for SByte`` () = "let testSByteToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,45--53,53)"; "let testSByteToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,45--54,55)"; "let testSByteToCharOperator(e1) = Operators.ToChar (e1) @ (55,45--55,52)"; +#if DEBUG + @"let testSByteToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)"; +#else "let testSByteToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)"; - ] +#endif + ] testOperators "SByte" "sbyte" excludedTests expectedUnoptimized expectedOptimized @@ -1279,7 +1287,11 @@ let ``Test Operator Declarations for Int16`` () = "let testInt16ToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,45--53,53)"; "let testInt16ToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,45--54,55)"; "let testInt16ToCharOperator(e1) = Operators.ToChar (e1) @ (55,45--55,52)"; +#if DEBUG + @"let testInt16ToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)"; +#else "let testInt16ToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)"; +#endif ] testOperators "Int16" "int16" excludedTests expectedUnoptimized expectedOptimized @@ -1388,7 +1400,11 @@ let ``Test Operator Declarations for UInt16`` () = "let testUInt16ToDoubleOperator(e1) = Operators.ToDouble (Operators.ToDouble (e1)) @ (53,47--53,55)"; "let testUInt16ToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,47--54,57)"; "let testUInt16ToCharOperator(e1) = Operators.ToChar (e1) @ (55,47--55,54)"; +#if DEBUG + @"let testUInt16ToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)" +#else "let testUInt16ToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)"; +#endif ] testOperators "UInt16" "uint16" excludedTests expectedUnoptimized expectedOptimized @@ -1498,7 +1514,11 @@ let ``Test Operator Declarations for Int`` () = "let testIntToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,41--53,49)"; "let testIntToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,41--54,51)"; "let testIntToCharOperator(e1) = Operators.ToChar (e1) @ (55,41--55,48)"; +#if DEBUG + @"let testIntToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,41--56,50)" +#else "let testIntToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,41--56,50)"; +#endif ] testOperators "Int" "int" excludedTests expectedUnoptimized expectedOptimized @@ -1608,7 +1628,11 @@ let ``Test Operator Declarations for Int32`` () = "let testInt32ToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,45--53,53)"; "let testInt32ToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,45--54,55)"; "let testInt32ToCharOperator(e1) = Operators.ToChar (e1) @ (55,45--55,52)"; +#if DEBUG + @"let testInt32ToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)" +#else "let testInt32ToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)"; +#endif ] testOperators "Int32" "int32" excludedTests expectedUnoptimized expectedOptimized @@ -1717,7 +1741,11 @@ let ``Test Operator Declarations for UInt32`` () = "let testUInt32ToDoubleOperator(e1) = Operators.ToDouble (Operators.ToDouble (e1)) @ (53,47--53,55)"; "let testUInt32ToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,47--54,57)"; "let testUInt32ToCharOperator(e1) = Operators.ToChar (e1) @ (55,47--55,54)"; +#if DEBUG + @"let testUInt32ToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)" +#else "let testUInt32ToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)"; +#endif ] testOperators "UInt32" "uint32" excludedTests expectedUnoptimized expectedOptimized @@ -1827,7 +1855,11 @@ let ``Test Operator Declarations for Int64`` () = "let testInt64ToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,45--53,53)"; "let testInt64ToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,45--54,55)"; "let testInt64ToCharOperator(e1) = Operators.ToChar (e1) @ (55,45--55,52)"; +#if DEBUG + @"let testInt64ToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)" +#else "let testInt64ToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,45--56,54)"; +#endif ] testOperators "Int64" "int64" excludedTests expectedUnoptimized expectedOptimized @@ -1936,7 +1968,11 @@ let ``Test Operator Declarations for UInt64`` () = "let testUInt64ToDoubleOperator(e1) = Operators.ToDouble (Operators.ToDouble (e1)) @ (53,47--53,55)"; "let testUInt64ToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,47--54,57)"; "let testUInt64ToCharOperator(e1) = Operators.ToChar (e1) @ (55,47--55,54)"; +#if DEBUG + @"let testUInt64ToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)" +#else "let testUInt64ToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)"; +#endif ] testOperators "UInt64" "uint64" excludedTests expectedUnoptimized expectedOptimized @@ -2046,7 +2082,11 @@ let ``Test Operator Declarations for IntPtr`` () = "let testIntPtrToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,50--53,58)"; "let testIntPtrToDecimalOperator(e1) = Convert.ToDecimal (Operators.ToInt64 (e1)) @ (54,50--54,60)"; "let testIntPtrToCharOperator(e1) = Operators.ToChar (e1) @ (55,50--55,57)"; +#if DEBUG + @"let testIntPtrToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,50--56,59)" +#else "let testIntPtrToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,50--56,59)"; +#endif ] testOperators "IntPtr" "nativeint" excludedTests expectedUnoptimized expectedOptimized @@ -2155,7 +2195,11 @@ let ``Test Operator Declarations for UIntPtr`` () = "let testUIntPtrToDoubleOperator(e1) = Operators.ToDouble (Operators.ToDouble (e1)) @ (53,52--53,60)"; "let testUIntPtrToDecimalOperator(e1) = Convert.ToDecimal (Operators.ToUInt64 (e1)) @ (54,52--54,62)"; "let testUIntPtrToCharOperator(e1) = Operators.ToChar (e1) @ (55,52--55,59)"; +#if DEBUG + @"let testUIntPtrToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,52--56,61)" +#else "let testUIntPtrToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,52--56,61)"; +#endif ] testOperators "UIntPtr" "unativeint" excludedTests expectedUnoptimized expectedOptimized @@ -2261,7 +2305,11 @@ let ``Test Operator Declarations for Single`` () = "let testSingleToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,48--53,56)"; "let testSingleToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,48--54,58)"; "let testSingleToCharOperator(e1) = Operators.ToChar (e1) @ (55,48--55,55)"; +#if DEBUG + @"let testSingleToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,48--56,57)" +#else "let testSingleToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,48--56,57)"; +#endif ] testOperators "Single" "float32" excludedTests expectedUnoptimized expectedOptimized @@ -2367,7 +2415,11 @@ let ``Test Operator Declarations for Double`` () = "let testDoubleToDoubleOperator(e1) = Operators.ToDouble (e1) @ (53,46--53,54)"; "let testDoubleToDecimalOperator(e1) = Convert.ToDecimal (e1) @ (54,46--54,56)"; "let testDoubleToCharOperator(e1) = Operators.ToChar (e1) @ (55,46--55,53)"; +#if DEBUG + @"let testDoubleToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,46--56,55)" +#else "let testDoubleToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,46--56,55)"; +#endif ] testOperators "Double" "float" excludedTests expectedUnoptimized expectedOptimized @@ -2465,7 +2517,11 @@ let ``Test Operator Declarations for Decimal`` () = "let testDecimalToDoubleOperator(e1) = Convert.ToDouble (e1) @ (53,49--53,57)"; "let testDecimalToDecimalOperator(e1) = e1 @ (54,57--54,59)"; "let testDecimalToCharOperator(e1) = Decimal.op_Explicit (e1) @ (55,49--55,56)"; +#if DEBUG + @"let testDecimalToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,49--56,58)" +#else "let testDecimalToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,49--56,58)"; +#endif ] testOperators "Decimal" "decimal" excludedTests expectedUnoptimized expectedOptimized @@ -2562,7 +2618,11 @@ let ``Test Operator Declarations for Char`` () = "let testCharToSingleOperator(e1) = Operators.ToSingle (Operators.ToDouble (e1)) @ (52,43--52,53)"; "let testCharToDoubleOperator(e1) = Operators.ToDouble (Operators.ToDouble (e1)) @ (53,43--53,51)"; "let testCharToCharOperator(e1) = Operators.ToChar (e1) @ (55,43--55,50)"; +#if DEBUG + @"let testCharToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,43--56,52)" +#else "let testCharToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,43--56,52)"; +#endif ] testOperators "Char" "char" excludedTests expectedUnoptimized expectedOptimized @@ -2656,7 +2716,11 @@ let ``Test Operator Declarations for String`` () = "let testStringToDoubleOperator(e1) = Double.Parse ((if Operators.op_Equality (e1,dflt) then dflt else e1.Replace(\"_\",\"\")),167,CultureInfo.get_InvariantCulture () :> System.IFormatProvider) @ (53,47--53,55)"; "let testStringToDecimalOperator(e1) = Decimal.Parse (e1,167,CultureInfo.get_InvariantCulture () :> System.IFormatProvider) @ (54,47--54,57)"; "let testStringToCharOperator(e1) = Char.Parse (e1) @ (55,47--55,54)"; +#if DEBUG + @"let testStringToStringOperator(e1) = let nullStr: Microsoft.FSharp.Core.string = """" in let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)" +#else "let testStringToStringOperator(e1) = let matchValue: Microsoft.FSharp.Core.obj = Operators.Box (e1) in match (if Operators.op_Equality (matchValue,dflt) then $0 else (if matchValue :? System.IFormattable then $1 else $2)) targets ... @ (56,47--56,56)"; +#endif ] testOperators "String" "string" excludedTests expectedUnoptimized expectedOptimized From fbcbc8ee278706ddf640b7643ae6448afb7be2e6 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 18 Dec 2019 11:50:55 -0800 Subject: [PATCH 134/214] Fix expr tests to work on debug (#8011) From 6c3b97f93684043363c25df38742eb915ce61d28 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 18 Dec 2019 11:51:30 -0800 Subject: [PATCH 135/214] Improven netcore implementation references (#7966) --- src/fsharp/DotNetFrameworkDependencies.fs | 19 ++++++++++++------- .../FSharpScript.fs | 6 +++++- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 8c9c98c16d..b3fea6177e 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -130,12 +130,17 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies if not (assemblies.ContainsKey(referenceName)) then try - assemblies.Add(referenceName, path) |> ignore - if referenceName <> "System.Private.CoreLib" then - let asm = System.Reflection.Assembly.LoadFrom(path) - for reference in asm.GetReferencedAssemblies() do - // System.Private.CoreLib doesn't load with reflection - traverseDependencies reference.Name + if File.Exists(path) then + // System.Private.CoreLib doesn't load with reflection + if referenceName = "System.Private.CoreLib" then + assemblies.Add(referenceName, path) + else + try + let asm = System.Reflection.Assembly.LoadFrom(path) + assemblies.Add(referenceName, path) + for reference in asm.GetReferencedAssemblies() do + traverseDependencies reference.Name + with e -> () with e -> () assemblyReferences |> List.iter(traverseDependencies) @@ -193,7 +198,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let getImplementationReferences () = // Coreclr supports netstandard assemblies only for now (getDependenciesOf [ - yield Path.Combine(implementationAssemblyDir, "netstandard.dll") + yield! Directory.GetFiles(implementationAssemblyDir, "*.dll") yield getDefaultFSharpCoreReference if useFsiAuxLib then yield getFsiLibraryName ]).Values |> Seq.toList diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 3d9e113bcc..29cdf6d6d0 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -32,7 +32,11 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st ())() let config = FsiEvaluationSession.GetDefaultConfiguration() - let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] + let computedProfile = + // If we are being executed on the desktop framework (we can tell because the assembly containing int is mscorlib) then profile must be mscorlib otherwise use netcore + if typeof.Assembly.GetName().Name = "mscorlib" then "mscorlib" + else "netcore" + let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:" + computedProfile; "--quiet" |] let argv = Array.append baseArgs additionalArgs let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) From 3511ca3f39f974e01aa523c272e16905b452c3a2 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2019 13:41:57 -0800 Subject: [PATCH 136/214] Update dependencies from https://github.com/dotnet/arcade build 20191217.1 (#8017) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19617.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5ad9b6c11b..5eb17948fb 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 4736ddca60a4040447b450437cf3767c9045edc0 + 66175ebd3756697a3ca515e16cd5ffddc30582cd diff --git a/global.json b/global.json index 7201e70435..82aa0ecba7 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19616.4", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19617.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 3cb5b831c6de2d622e85d780332730e1a8d72f14 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 19 Dec 2019 03:42:12 +0300 Subject: [PATCH 137/214] Fix OpenDeclaration.AppliedScope inside recursive modules (#7868) * Fix OpenDeclaration.AppliedScope inside recursive modules * Add tests for open declarations applied scope * Cherry-pick tests change --- src/fsharp/TypeChecker.fs | 38 ++++++++++---------- tests/service/Common.fs | 3 ++ tests/service/ProjectAnalysisTests.fs | 52 +++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 978949fd47..5c5dae51b8 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -4232,7 +4232,7 @@ type ValSpecResult = ValSpecResult of ParentRef * ValMemberInfoTransient option type RecDefnBindingInfo = RecDefnBindingInfo of ContainerInfo * NewSlotsOK * DeclKind * SynBinding -type MutRecDataForOpen = MutRecDataForOpen of LongIdent * range +type MutRecDataForOpen = MutRecDataForOpen of LongIdent * range * appliedScope: range type MutRecDataForModuleAbbrev = MutRecDataForModuleAbbrev of Ident * LongIdent * range type MutRecSigsInitialData = MutRecShape list @@ -14030,7 +14030,7 @@ module MutRecBindingChecking = let tycons = decls |> List.choose (function MutRecShape.Tycon d -> getTyconOpt d | _ -> None) let mspecs = decls |> List.choose (function MutRecShape.Module (MutRecDefnsPhase2DataForModule (_, mspec), _) -> Some mspec | _ -> None) let moduleAbbrevs = decls |> List.choose (function MutRecShape.ModuleAbbrev (MutRecDataForModuleAbbrev (id, mp, m)) -> Some (id, mp, m) | _ -> None) - let opens = decls |> List.choose (function MutRecShape.Open (MutRecDataForOpen (mp, m)) -> Some (mp, m) | _ -> None) + let opens = decls |> List.choose (function MutRecShape.Open (MutRecDataForOpen (mp, m, moduleRange)) -> Some (mp, m, moduleRange) | _ -> None) let lets = decls |> List.collect (function MutRecShape.Lets binds -> getVals binds | _ -> []) let exns = tycons |> List.filter (fun (tycon: Tycon) -> tycon.IsExceptionDecl) @@ -14056,7 +14056,7 @@ module MutRecBindingChecking = // Add the modules being defined let envForDecls = (envForDecls, mspecs) ||> List.fold ((if report then AddLocalSubModuleAndReport cenv.tcSink scopem else AddLocalSubModule) cenv.g cenv.amap m) // Process the 'open' declarations - let envForDecls = (envForDecls, opens) ||> List.fold (fun env (mp, m) -> TcOpenDecl cenv.tcSink cenv.g cenv.amap m scopem env mp) + let envForDecls = (envForDecls, opens) ||> List.fold (fun env (mp, m, moduleRange) -> TcOpenDecl cenv.tcSink cenv.g cenv.amap m moduleRange env mp) // Add the type definitions being defined let envForDecls = (if report then AddLocalTyconsAndReport cenv.tcSink scopem else AddLocalTycons) cenv.g cenv.amap m tycons envForDecls // Add the exception definitions being defined @@ -16931,13 +16931,13 @@ and TcSignatureElementsNonMutRec cenv parent typeNames endm env defs = return! Eventually.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs } -and TcSignatureElementsMutRec cenv parent typeNames endm mutRecNSInfo envInitial (defs: SynModuleSigDecl list) = +and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (defs: SynModuleSigDecl list) = eventually { - let m = match defs with [] -> endm | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges - let scopem = (defs, endm) ||> List.foldBack (fun h m -> unionRanges h.Range m) + let m = match defs with [] -> m | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges + let scopem = (defs, m) ||> List.foldBack (fun h m -> unionRanges h.Range m) let mutRecDefns = - let rec loop isNamespace defs: MutRecSigsInitialData = + let rec loop isNamespace moduleRange defs: MutRecSigsInitialData = ((true, true), defs) ||> List.collectFold (fun (openOk, moduleAbbrevOk) def -> match def with | SynModuleSigDecl.Types (typeSpecs, _) -> @@ -16946,7 +16946,7 @@ and TcSignatureElementsMutRec cenv parent typeNames endm mutRecNSInfo envInitial | SynModuleSigDecl.Open (lid, m) -> if not openOk then errorR(Error(FSComp.SR.tcOpenFirstInMutRec(), m)) - let decls = [ MutRecShape.Open (MutRecDataForOpen(lid, m)) ] + let decls = [ MutRecShape.Open (MutRecDataForOpen(lid, m, moduleRange)) ] decls, (openOk, moduleAbbrevOk) | SynModuleSigDecl.Exception (SynExceptionSig(exnRepr, members, _), _) -> @@ -16960,9 +16960,9 @@ and TcSignatureElementsMutRec cenv parent typeNames endm mutRecNSInfo envInitial let decls = [ MutRecShape.Lets vspec ] decls, (false, false) - | SynModuleSigDecl.NestedModule(compInfo, isRec, synDefs, _) -> + | SynModuleSigDecl.NestedModule(compInfo, isRec, synDefs, moduleRange) -> if isRec then warning(Error(FSComp.SR.tcRecImplied(), compInfo.Range)) - let mutRecDefs = loop false synDefs + let mutRecDefs = loop false moduleRange synDefs let decls = [MutRecShape.Module (compInfo, mutRecDefs)] decls, (false, false) @@ -16978,7 +16978,7 @@ and TcSignatureElementsMutRec cenv parent typeNames endm mutRecNSInfo envInitial error(Error(FSComp.SR.tcUnsupportedMutRecDecl(), def.Range))) |> fst - loop (match parent with ParentNone -> true | Parent _ -> false) defs + loop (match parent with ParentNone -> true | Parent _ -> false) m defs return TcDeclarations.TcMutRecSignatureDecls cenv envInitial parent typeNames emptyUnscopedTyparEnv m scopem mutRecNSInfo mutRecDefns } @@ -17244,14 +17244,14 @@ and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar, } /// The mutually recursive case for a sequence of declarations (and nested modules) -and TcModuleOrNamespaceElementsMutRec cenv parent typeNames endm envInitial mutRecNSInfo (defs: SynModuleDecl list) = +and TcModuleOrNamespaceElementsMutRec cenv parent typeNames m envInitial mutRecNSInfo (defs: SynModuleDecl list) = eventually { - let m = match defs with [] -> endm | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges - let scopem = (defs, endm) ||> List.foldBack (fun h m -> unionRanges h.Range m) + let m = match defs with [] -> m | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges + let scopem = (defs, m) ||> List.foldBack (fun h m -> unionRanges h.Range m) let (mutRecDefns, (_, _, Attributes synAttrs)) = - let rec loop isNamespace attrs defs: (MutRecDefnsInitialData * _) = + let rec loop isNamespace moduleRange attrs defs: (MutRecDefnsInitialData * _) = ((true, true, attrs), defs) ||> List.collectFold (fun (openOk, moduleAbbrevOk, attrs) def -> match ElimModuleDoBinding def with @@ -17268,15 +17268,15 @@ and TcModuleOrNamespaceElementsMutRec cenv parent typeNames endm envInitial mutR else List.map (List.singleton >> MutRecShape.Lets) binds binds, (false, false, attrs) - | SynModuleDecl.NestedModule(compInfo, isRec, synDefs, _isContinuingModule, _) -> + | SynModuleDecl.NestedModule(compInfo, isRec, synDefs, _isContinuingModule, moduleRange) -> if isRec then warning(Error(FSComp.SR.tcRecImplied(), compInfo.Range)) - let mutRecDefs, (_, _, attrs) = loop false attrs synDefs + let mutRecDefs, (_, _, attrs) = loop false moduleRange attrs synDefs let decls = [MutRecShape.Module (compInfo, mutRecDefs)] decls, (false, false, attrs) | SynModuleDecl.Open (LongIdentWithDots(lid, _), m) -> if not openOk then errorR(Error(FSComp.SR.tcOpenFirstInMutRec(), m)) - let decls = [ MutRecShape.Open (MutRecDataForOpen(lid, m)) ] + let decls = [ MutRecShape.Open (MutRecDataForOpen(lid, m, moduleRange)) ] decls, (openOk, moduleAbbrevOk, attrs) | SynModuleDecl.Exception (SynExceptionDefn(repr, members, _), _m) -> @@ -17300,7 +17300,7 @@ and TcModuleOrNamespaceElementsMutRec cenv parent typeNames endm envInitial mutR | (SynModuleDecl.NamespaceFragment _ as d) -> error(Error(FSComp.SR.tcUnsupportedMutRecDecl(), d.Range))) - loop (match parent with ParentNone -> true | Parent _ -> false) [] defs + loop (match parent with ParentNone -> true | Parent _ -> false) m [] defs let tpenv = emptyUnscopedTyparEnv let mutRecDefnsChecked, envAfter = TcDeclarations.TcMutRecDefinitions cenv envInitial parent typeNames tpenv m scopem mutRecNSInfo mutRecDefns diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 4b34c861d0..42b270ca5d 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -304,6 +304,9 @@ let rec allSymbolsInEntities compGen (entities: IList) = yield! allSymbolsInEntities compGen e.NestedEntities ] +let getParseAndCheckResults (source: string) = + parseAndCheckScript("/home/user/Test.fsx", source) + let getSymbolUses (source: string) = let _, typeCheckResults = parseAndCheckScript("/home/user/Test.fsx", source) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 45b5dc1b50..f3fec4ffec 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -5529,3 +5529,55 @@ module M2 = (((25, 5), (25, 21)), "open SomeUnusedModule")] unusedOpensData |> shouldEqual expected + +[] +let ``Opens in nested recursive modules`` () = + let _, checkResults = getParseAndCheckResults """ +module rec Module + +open System + +module Nested = + open System +""" + checkResults.OpenDeclarations + |> Seq.filter (fun openDeclaration -> + match openDeclaration.Range with + | Some range -> range <> Range.rangeStartup + | _ -> false) + |> List.ofSeq + |> List.map(fun openDeclaration -> tups openDeclaration.AppliedScope) + |> shouldEqual + [ (2, 0), (7, 15) + (6, 0), (7, 15) ] + +[] +let ``Opens in nested recursive modules - namespaces`` () = + let _, checkResults = getParseAndCheckResults """ +namespace rec Ns1 + +open System + +module Nested = + open System + +namespace rec Ns2 + +open System + +module Nested = + open System + +""" + checkResults.OpenDeclarations + |> Seq.filter (fun openDeclaration -> + match openDeclaration.Range with + | Some range -> range <> Range.rangeStartup + | _ -> false) + |> List.ofSeq + |> List.map(fun openDeclaration -> tups openDeclaration.AppliedScope) + |> shouldEqual + [ (4, 5), (7, 15) + (6, 0), (7, 15) + (11, 5), (14, 15) + (13, 0), (14, 15) ] From 03f3f1c35f82af26593d025dabca57a6ef3ea9a1 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 19 Dec 2019 09:11:46 -0800 Subject: [PATCH 138/214] Fix squiggle with editor and fsi. (#7968) * VS Unit test case * Include FSharp.Compiler.Interactive in fcs tests. * Do it in an app domain --- .../FSharp.Compiler.Service.Tests.fsproj | 1 + src/fsharp/CompileOps.fs | 1 + src/fsharp/service/FSharpCheckerResults.fs | 2 +- src/fsharp/service/IncrementalBuild.fs | 2 +- .../UnitTests/FsxCompletionProviderTests.fs | 161 ++++++++++++++++++ .../UnitTests/VisualFSharp.UnitTests.fsproj | 3 + 6 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs diff --git a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index d6c71b5545..6ee0cfab37 100644 --- a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -101,5 +101,6 @@ + \ No newline at end of file diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 69f8305556..22e5923374 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2321,6 +2321,7 @@ type TcConfigBuilder = isInvalidationSupported = isInvalidationSupported copyFSharpCore = defaultCopyFSharpCore tryGetMetadataSnapshot = tryGetMetadataSnapshot + useFsiAuxLib = isInteractive } member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) = diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index ab8ee3d216..cd9b187d3a 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -58,7 +58,7 @@ module internal FSharpCheckerResultsSettings = | s -> int64 s // Look for DLLs in the location of the service DLL first. - let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(Some(typeof.Assembly.Location)).Value + let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(Some(Path.GetDirectoryName(typeof.Assembly.Location))).Value [] type FSharpFindDeclFailureReason = diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 4cb4c23ea4..365570b5d6 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -1732,7 +1732,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput defaultFSharpBinariesDir, implicitIncludeDir=projectDirectory, reduceMemoryUsage=ReduceMemoryFlag.Yes, - isInteractive=false, + isInteractive=useScriptResolutionRules, isInvalidationSupported=true, defaultCopyFSharpCore=CopyFSharpCoreFlag.No, tryGetMetadataSnapshot=tryGetMetadataSnapshot) diff --git a/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs b/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs new file mode 100644 index 0000000000..468c916dc9 --- /dev/null +++ b/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs @@ -0,0 +1,161 @@ +// To run the tests in this file: +// +// Technique 1: Compile VisualFSharp.UnitTests.dll and run it as a set of unit tests +// +// Technique 2: +// +// Enable some tests in the #if EXE section at the end of the file, +// then compile this file as an EXE that has InternalsVisibleTo access into the +// appropriate DLLs. This can be the quickest way to get turnaround on updating the tests +// and capturing large amounts of structured output. +(* + cd Debug\net40\bin + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\FsxCompletionProviderTests.fs + .\VisualFSharp.UnitTests.exe +*) +// Technique 3: +// +// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API + +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn + +open System +open System.Collections.Generic +open System.IO +open System.Linq +open System.Reflection + +open NUnit.Framework + +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Completion +open Microsoft.CodeAnalysis.Text +open Microsoft.VisualStudio.FSharp.Editor + +open FSharp.Compiler.SourceCodeServices +open UnitTests.TestLib.LanguageService + +// AppDomain helper +type Worker () = + inherit MarshalByRefObject() + + let filePath = "C:\\test.fsx" + let projectOptions = { + ProjectFileName = "C:\\test.fsproj" + ProjectId = None + SourceFiles = [| filePath |] + ReferencedProjects = [| |] + OtherOptions = [| |] + IsIncompleteTypeCheckEnvironment = true + UseScriptResolutionRules = true + LoadTime = DateTime.MaxValue + OriginalLoadReferences = [] + UnresolvedReferences = None + ExtraProjectInfo = None + Stamp = None + } + + let formatCompletions(completions : string seq) = + "\n\t" + String.Join("\n\t", completions) + + let VerifyCompletionList(fileContents: string, marker: string, expected: string list, unexpected: string list) = + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let results = + FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) + |> Async.RunSynchronously + |> Option.defaultValue (ResizeArray()) + |> Seq.map(fun result -> result.DisplayText) + + let expectedFound = + expected + |> Seq.filter results.Contains + + let expectedNotFound = + expected + |> Seq.filter (expectedFound.Contains >> not) + + let unexpectedNotFound = + unexpected + |> Seq.filter (results.Contains >> not) + + let unexpectedFound = + unexpected + |> Seq.filter (unexpectedNotFound.Contains >> not) + + // If either of these are true, then the test fails. + let hasExpectedNotFound = not (Seq.isEmpty expectedNotFound) + let hasUnexpectedFound = not (Seq.isEmpty unexpectedFound) + + if hasExpectedNotFound || hasUnexpectedFound then + let expectedNotFoundMsg = + if hasExpectedNotFound then + sprintf "\nExpected completions not found:%s\n" (formatCompletions expectedNotFound) + else + String.Empty + + let unexpectedFoundMsg = + if hasUnexpectedFound then + sprintf "\nUnexpected completions found:%s\n" (formatCompletions unexpectedFound) + else + String.Empty + + let completionsMsg = sprintf "\nin Completions:%s" (formatCompletions results) + + let msg = sprintf "%s%s%s" expectedNotFoundMsg unexpectedFoundMsg completionsMsg + + Assert.Fail(msg) + + member __.VerifyCompletionListExactly(fileContents: string, marker: string, expected: List) = + + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let expected = expected |> Seq.toList + let actual = + let x = FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) + |> Async.RunSynchronously + x |> Option.defaultValue (ResizeArray()) + |> Seq.toList + // sort items as Roslyn do - by `SortText` + |> List.sortBy (fun x -> x.SortText) + + let actualNames = actual |> List.map (fun x -> x.DisplayText) + + if actualNames <> expected then + Assert.Fail(sprintf "Expected:\n%s,\nbut was:\n%s\nactual with sort text:\n%s" + (String.Join("; ", expected |> List.map (sprintf "\"%s\""))) + (String.Join("; ", actualNames |> List.map (sprintf "\"%s\""))) + (String.Join("\n", actual |> List.map (fun x -> sprintf "%s => %s" x.DisplayText x.SortText)))) + +module FsxCompletionProviderTests = + + let pathToThisDll = Assembly.GetExecutingAssembly().CodeBase + + let getWorker () = + + let adSetup = + let setup = new System.AppDomainSetup () + setup.PrivateBinPath <- pathToThisDll + setup.ApplicationBase <- Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SomeNonExistentDirectory") + setup + + let ad = AppDomain.CreateDomain((Guid()).ToString(), null, adSetup) + (ad.CreateInstanceFromAndUnwrap(pathToThisDll, typeof.FullName)) :?> Worker + + [] + let fsiShouldTriggerCompletionInFsxFile() = + + let fileContents = """ + fsi. + """ + let expected = List([ + "CommandLineArgs"; "EventLoop"; "FloatingPointFormat"; "FormatProvider"; "PrintDepth"; + "PrintLength"; "PrintSize"; "PrintWidth"; "ShowDeclarationValues"; "ShowIEnumerable"; + "ShowProperties"; "AddPrinter"; "AddPrintTransformer"; "Equals"; "GetHashCode"; + "GetType"; "ToString"; ]) + + // We execute in a seperate appdomain so that we can set BaseDirectory to a non-existent location + getWorker().VerifyCompletionListExactly(fileContents, "fsi.", expected) + +#if EXE +ShouldTriggerCompletionInFsxFile() +#endif diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index 6a3cae016a..9598b23b5c 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -148,6 +148,9 @@ Roslyn\CompletionProviderTests.fs + + Roslyn\FsxCompletionProviderTests.fs + Roslyn\SignatureHelpProviderTests.fs From f1747487cd632a57fd149e7ce38c7d0a3c3d28cf Mon Sep 17 00:00:00 2001 From: Will Smith Date: Thu, 19 Dec 2019 14:18:34 -0800 Subject: [PATCH 139/214] Small LOH fix for Dictionary (#8024) * Small LOH fix for Dictionary Dictionary started with 10000 capacity which will be put on the LOH * Update Optimizer.fs --- src/fsharp/Optimizer.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 69b7d640a7..09d6787f79 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -3435,7 +3435,7 @@ let OptimizeImplFile (settings, ccu, tcGlobals, tcVal, importMap, optEnv, isIncr g=tcGlobals amap=importMap optimizing=true - localInternalVals=Dictionary(10000) + localInternalVals=Dictionary() emitTailcalls=emitTailcalls casApplied=new Dictionary() } let (optEnvNew, _, _, _ as results) = OptimizeImplFileInternal cenv optEnv isIncrementalFragment hidden mimpls From 0f912e6ae7bdc7f98d8228cd80b63779b8840ca6 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Thu, 19 Dec 2019 22:19:33 -0800 Subject: [PATCH 140/214] Simplify langversion code (#8020) * Simplify langversion code * Simplify getting list of language versions --- src/fsharp/LanguageFeatures.fs | 33 ++++++++++++--------------------- src/fsharp/LanguageFeatures.fsi | 16 ++++++---------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 0472582f1b..832eaf8326 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -16,18 +16,14 @@ open System // * When a feature is assigned a release language, we will scrub the code of feature references and apply // the Release Language version. -/// LanguageFeature enumeration [] type LanguageFeature = - | PreviewVersion = 0 - | LanguageVersion46 = 1 - | LanguageVersion47 = 2 - | SingleUnderscorePattern = 3 - | WildCardInForLoop = 4 - | RelaxWhitespace = 5 - | NameOf = 6 - | ImplicitYield = 7 - | OpenStaticClasses = 8 + | SingleUnderscorePattern + | WildCardInForLoop + | RelaxWhitespace + | NameOf + | ImplicitYield + | OpenStaticClasses /// LanguageVersion management type LanguageVersion (specifiedVersionAsString) = @@ -45,18 +41,13 @@ type LanguageVersion (specifiedVersionAsString) = static let features = dict [ - // Add new LanguageVersions here ... - LanguageFeature.LanguageVersion46, languageVersion46 - LanguageFeature.LanguageVersion47, languageVersion47 - LanguageFeature.PreviewVersion, previewVersion - // F# 4.7 LanguageFeature.SingleUnderscorePattern, languageVersion47 LanguageFeature.WildCardInForLoop, languageVersion47 LanguageFeature.RelaxWhitespace, languageVersion47 LanguageFeature.ImplicitYield, languageVersion47 - // Add new Language Features here... + // F# preview LanguageFeature.NameOf, previewVersion LanguageFeature.OpenStaticClasses, previewVersion ] @@ -88,11 +79,11 @@ type LanguageVersion (specifiedVersionAsString) = member __.ValidOptions = validOptions /// Get a list of valid versions for help text - member __.ValidVersions = [| - for v in languageVersions |> Seq.sort do - let label = if v = defaultVersion then " (Default)" else "" - yield sprintf "%M%s" v label - |] + member __.ValidVersions = + [| + for v in languageVersions |> Seq.sort -> + sprintf "%M%s" v (if v = defaultVersion then " (Default)" else "") + |] /// Get the specified LanguageVersion member __.SpecifiedVersion = specified diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index 2b42698dd0..fa9a87598d 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -6,16 +6,12 @@ module internal FSharp.Compiler.Features /// LanguageFeature enumeration [] type LanguageFeature = - | PreviewVersion = 0 - | LanguageVersion46 = 1 - | LanguageVersion47 = 2 - | SingleUnderscorePattern = 3 - | WildCardInForLoop = 4 - | RelaxWhitespace = 5 - | NameOf = 6 - | ImplicitYield = 7 - | OpenStaticClasses = 8 - + | SingleUnderscorePattern + | WildCardInForLoop + | RelaxWhitespace + | NameOf + | ImplicitYield + | OpenStaticClasses /// LanguageVersion management type LanguageVersion = From 95b1977fd9648ff71663583b10f7198a7537a563 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 19 Dec 2019 22:27:23 -0800 Subject: [PATCH 141/214] Clean up some compiler location redundencies (#8026) --- src/fsharp/CompileOps.fs | 10 ++---- src/fsharp/DotNetFrameworkDependencies.fs | 41 +++++++++++++-------- src/utils/CompilerLocationUtils.fs | 43 +++++++++++------------ 3 files changed, 50 insertions(+), 44 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 22e5923374..45d93c5cec 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2586,7 +2586,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let dllReference, fileNameOpt = computeKnownDllReference getFSharpCoreLibraryName match fileNameOpt with | Some _ -> dllReference - | None -> AssemblyReference(range0, getDefaultFSharpCoreReference, None) + | None -> AssemblyReference(range0, getDefaultFSharpCoreLocation, None) // clrRoot: the location of the primary assembly (mscorlib.dll or netstandard.dll or System.Runtime.dll) // @@ -3513,13 +3513,9 @@ type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, let assumeDotNetFramework = primaryReference.SimpleAssemblyNameIs("mscorlib") if tcConfig.framework then - for s in defaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework tcConfig.useSdkRefs do + for s in defaultReferencesForScriptsAndOutOfProjectSources tcConfig.useFsiAuxLib assumeDotNetFramework tcConfig.useSdkRefs do yield AssemblyReference(rangeStartup, (if s.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) then s else s+".dll"), None) - if tcConfig.useFsiAuxLib then - let name = Path.Combine(tcConfig.fsharpBinariesDir, getFsiLibraryName + ".dll") - yield AssemblyReference(rangeStartup, name, None) - yield! tcConfig.referencedDLLs ] @@ -5555,4 +5551,4 @@ let TypeCheckClosedInputSet (ctok, checkForErrors, tcConfig, tcImports, tcGlobal // Existing public APIs delegate to newer implementations let GetFSharpCoreLibraryName () = getFSharpCoreLibraryName -let DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework = defaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework false +let DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework = defaultReferencesForScriptsAndOutOfProjectSources (*useFsiAuxLib*)false assumeDotNetFramework (*useSdkRefs*)false diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index b3fea6177e..17fda4c5a2 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -1,22 +1,34 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. // Functions to retrieve framework dependencies - module internal FSharp.Compiler.DotNetFrameworkDependencies open System open System.Collections.Generic + open System.Diagnostics open System.Globalization open System.IO open System.Reflection + open Internal.Utilities type private TypeInThisAssembly = class end + let implementationAssemblyDir = Path.GetDirectoryName(typeof.Assembly.Location) + let fSharpCompilerLocation = + let location = Path.GetDirectoryName(typeof.Assembly.Location) + match FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some location) with + | Some path -> path + | None -> +#if DEBUG + Debug.Print(sprintf "FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some '%s') returned None Location customized incorrectly: algorithm here: https://github.com/dotnet/fsharp/blob/03f3f1c35f82af26593d025dabca57a6ef3ea9a1/src/utils/CompilerLocationUtils.fs#L171" location) +#endif + // Use the location of this dll + location + let getFSharpCoreLibraryName = "FSharp.Core" let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" - let implementationAssemblyDir = Path.GetDirectoryName(typeof.Assembly.Location) - let getDefaultFSharpCoreReference = typeof.Assembly.Location - let getFSharpCompilerLocation = Path.GetDirectoryName(typeof.Assembly.Location) + let getDefaultFSharpCoreLocation = Path.Combine(fSharpCompilerLocation, getFSharpCoreLibraryName + ".dll") + let getDefaultFsiLibraryLocation = Path.Combine(fSharpCompilerLocation, getFsiLibraryName + ".dll") // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) @@ -26,15 +38,13 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies if asm.FullName.StartsWith("System.ValueTuple", StringComparison.OrdinalIgnoreCase) then Some asm.Location else - let location = Path.GetDirectoryName(typeof.Assembly.Location) - let valueTuplePath = Path.Combine(location, "System.ValueTuple.dll") + let valueTuplePath = Path.Combine(fSharpCompilerLocation, "System.ValueTuple.dll") if File.Exists(valueTuplePath) then Some valueTuplePath else None with _ -> None - // Algorithm: // use implementation location of obj type, on shared frameworks it will always be in: // @@ -161,11 +171,12 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies yield "System.Data" yield "System.Drawing" yield "System.Core" - yield getDefaultFSharpCoreReference + + yield getFSharpCoreLibraryName if useFsiAuxLib then yield getFsiLibraryName // always include a default reference to System.ValueTuple.dll in scripts and out-of-project sources - match getDefaultSystemValueTupleReference() with + match getDefaultSystemValueTupleReference () with | None -> () | Some v -> yield v @@ -199,8 +210,8 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies // Coreclr supports netstandard assemblies only for now (getDependenciesOf [ yield! Directory.GetFiles(implementationAssemblyDir, "*.dll") - yield getDefaultFSharpCoreReference - if useFsiAuxLib then yield getFsiLibraryName + yield getDefaultFSharpCoreLocation + if useFsiAuxLib then yield getDefaultFsiLibraryLocation ]).Values |> Seq.toList if useSdkRefs then @@ -208,8 +219,8 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies match frameworkRefsPackDirectory with | Some path -> try [ yield! Directory.GetFiles(path, "*.dll") - yield getDefaultFSharpCoreReference - if useFsiAuxLib then yield getFsiLibraryName + yield getDefaultFSharpCoreLocation + if useFsiAuxLib then yield getDefaultFsiLibraryLocation ] with | _ -> List.empty | None -> @@ -219,8 +230,8 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies dependencies results - let defaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework useSdkRefs = - fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources false useSdkRefs assumeDotNetFramework + let defaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib assumeDotNetFramework useSdkRefs = + fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework // A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared // resources between projects in the compiler services. Also all assemblies where well-known system types exist diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 6d2a929f45..eef5184ef6 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -2,6 +2,7 @@ namespace Internal.Utilities open System +open System.Diagnostics open System.IO open Microsoft.Win32 open System.Runtime.InteropServices @@ -71,10 +72,11 @@ module internal FSharpEnvironment = (try downcast Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\"+subKey,null,null) with e-> - System.Diagnostics.Debug.Assert(false, sprintf "Failed in GetDefaultRegistryStringValueViaDotNet: %s" (e.ToString())) +#if DEBUG + Debug.Assert(false, sprintf "Failed in GetDefaultRegistryStringValueViaDotNet: %s" (e.ToString())) +#endif null) - let Get32BitRegistryStringValueViaPInvoke(subKey:string) = Option.ofString (try @@ -114,11 +116,13 @@ module internal FSharpEnvironment = if pathResult <> IntPtr.Zero then Marshal.FreeCoTaskMem(pathResult) with e-> - System.Diagnostics.Debug.Assert(false, sprintf "Failed in Get32BitRegistryStringValueViaPInvoke: %s" (e.ToString())) +#if DEBUG + Debug.Assert(false, sprintf "Failed in Get32BitRegistryStringValueViaPInvoke: %s" (e.ToString())) +#endif null) let is32Bit = IntPtr.Size = 4 - + let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e-> false let tryRegKey(subKey:string) = @@ -133,7 +137,7 @@ module internal FSharpEnvironment = // by comparing against the result from GetDefaultRegistryStringValueViaDotNet(...) #if DEBUG let viaPinvoke = Get32BitRegistryStringValueViaPInvoke(subKey) - System.Diagnostics.Debug.Assert((s = viaPinvoke), sprintf "32bit path: pi=%A def=%A" viaPinvoke s) + Debug.Assert((s = viaPinvoke), sprintf "32bit path: pi=%A def=%A" viaPinvoke s) #endif s else @@ -141,13 +145,9 @@ module internal FSharpEnvironment = #endif let internal tryCurrentDomain() = - let pathFromCurrentDomain = -#if FX_NO_APP_DOMAINS - System.AppContext.BaseDirectory -#else - System.AppDomain.CurrentDomain.BaseDirectory -#endif - if not(String.IsNullOrEmpty(pathFromCurrentDomain)) then + let pathFromCurrentDomain = + AppDomain.CurrentDomain.BaseDirectory + if not(String.IsNullOrEmpty(pathFromCurrentDomain)) then Some pathFromCurrentDomain else None @@ -157,14 +157,17 @@ module internal FSharpEnvironment = #else let internal tryAppConfig (_appConfigKey:string) = let locationFromAppConfig = System.Configuration.ConfigurationSettings.AppSettings.[_appConfigKey] - System.Diagnostics.Debug.Print(sprintf "Considering _appConfigKey %s which has value '%s'" _appConfigKey locationFromAppConfig) - +#if DEBUG + Debug.Print(sprintf "Considering _appConfigKey %s which has value '%s'" _appConfigKey locationFromAppConfig) +#endif if String.IsNullOrEmpty(locationFromAppConfig) then None else let exeAssemblyFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) let locationFromAppConfig = locationFromAppConfig.Replace("{exepath}", exeAssemblyFolder) - System.Diagnostics.Debug.Print(sprintf "Using path %s" locationFromAppConfig) +#if DEBUG + Debug.Print(sprintf "Using path %s" locationFromAppConfig) +#endif Some locationFromAppConfig #endif @@ -175,14 +178,10 @@ module internal FSharpEnvironment = // - default F# binaries directory in service.fs (REVIEW: check this) // - default location of fsi.exe in FSharp.VS.FSI.dll (REVIEW: check this) // - default F# binaries directory in (project system) Project.fs - let BinFolderOfDefaultFSharpCompiler(probePoint:string option) = + let BinFolderOfDefaultFSharpCompiler(probePoint:string option) = #if FX_NO_WIN_REGISTRY ignore probePoint -#if FX_NO_APP_DOMAINS - Some System.AppContext.BaseDirectory -#else - Some System.AppDomain.CurrentDomain.BaseDirectory -#endif + Some AppDomain.CurrentDomain.BaseDirectory #else // Check for an app.config setting to redirect the default compiler location // Like fsharp-compiler-location @@ -199,7 +198,7 @@ module internal FSharpEnvironment = | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p | _ -> // We let you set FSHARP_COMPILER_BIN. I've rarely seen this used and its not documented in the install instructions. - let result = System.Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN") + let result = Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN") if not (String.IsNullOrEmpty(result)) then Some result else From 3a1f4b88bde53ad22512d2d8fa9d49b0f87710f1 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 20 Dec 2019 10:46:04 -0800 Subject: [PATCH 142/214] update insertion link to reflect URL shape change --- INTERNAL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INTERNAL.md b/INTERNAL.md index b62e757de6..15550dcedc 100644 --- a/INTERNAL.md +++ b/INTERNAL.md @@ -43,7 +43,7 @@ near the bottom of the build under the title 'Insert into VS'. Examine the log bottom you'll see a line that looks like `Created request #xxxxxx at https://...`. To see all insertions created this way (possibly including for other internal teams), check -[here](https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequests?creatorId=122d5278-3e55-4868-9d40-1e28c2515fc4&_a=active). +[here](https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequests?createdBy=122d5278-3e55-4868-9d40-1e28c2515fc4&_a=active). ## Less interesting links From 3c90593211908287bfe02437bd0bc1c2269ea438 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2019 10:46:05 -0800 Subject: [PATCH 143/214] Update dependencies from https://github.com/dotnet/arcade build 20191219.10 (#8032) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19619.10 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5eb17948fb..7a8186f658 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 66175ebd3756697a3ca515e16cd5ffddc30582cd + 154d5981c6d2fe19f80e71a654ceddeba76ba7b5 diff --git a/global.json b/global.json index 82aa0ecba7..6c3afce987 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19617.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19619.10", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 7228b94f2735339b3b8391aa66f3670d8a1ad2e7 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Sat, 21 Dec 2019 16:38:50 -0800 Subject: [PATCH 144/214] Revert "Small LOH fix for Dictionary (#8024)" (#8028) This reverts commit f1747487cd632a57fd149e7ce38c7d0a3c3d28cf. --- src/fsharp/Optimizer.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 09d6787f79..69b7d640a7 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -3435,7 +3435,7 @@ let OptimizeImplFile (settings, ccu, tcGlobals, tcVal, importMap, optEnv, isIncr g=tcGlobals amap=importMap optimizing=true - localInternalVals=Dictionary() + localInternalVals=Dictionary(10000) emitTailcalls=emitTailcalls casApplied=new Dictionary() } let (optEnvNew, _, _, _ as results) = OptimizeImplFileInternal cenv optEnv isIncrementalFragment hidden mimpls From 57b7206868c5d5a487cd2faa4ae4e5eaa639fe3c Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Sat, 21 Dec 2019 16:39:47 -0800 Subject: [PATCH 145/214] Set LOH threshold for chunked resizearray to be smaller to avoid LOH allocations (#8027) * Set LOH threshold for chunked resizearray to be smaller to avoid LOH allocations * Update illib.fs --- src/absil/illib.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 0a7d471e14..9a84e94e34 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -40,8 +40,8 @@ let inline nonNull msg x = if isNull x then failwith ("null: " + msg) else x let inline (===) x y = LanguagePrimitives.PhysicalEquality x y /// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them -/// We set the limit to slightly under that to allow for some 'slop' -let LOH_SIZE_THRESHOLD_BYTES = 84_900 +/// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. +let LOH_SIZE_THRESHOLD_BYTES = 80_000 //--------------------------------------------------------------------- // Library: ReportTime From 8a9cf9885fefad80a3080d095e90ba5795d4aaaa Mon Sep 17 00:00:00 2001 From: Will Smith Date: Thu, 26 Dec 2019 11:58:56 -0800 Subject: [PATCH 146/214] Remove inline IL parsing method call (#7947) * Remove inline IL parsing method call * Remove now dead code * Fixing tests * Trying to fix tests * Trying to fix tests * Trying to fix tests * Update ExprTests.fs --- src/absil/ilascii.fs | 6 -- src/absil/ilascii.fsi | 1 - src/absil/illex.fsl | 1 - src/absil/ilpars.fsy | 74 ------------------- src/fsharp/FSharp.Core/prim-types.fs | 3 +- .../GenericComparison/Hash03.il.bsl | 2 +- .../GenericComparison/Hash04.il.bsl | 2 +- tests/service/ExprTests.fs | 3 +- 8 files changed, 5 insertions(+), 87 deletions(-) diff --git a/src/absil/ilascii.fs b/src/absil/ilascii.fs index 6c89ca69b5..4bd48cb59b 100644 --- a/src/absil/ilascii.fs +++ b/src/absil/ilascii.fs @@ -226,12 +226,6 @@ let DoubleInstrs : Lazy> = ["ldc";"r8"], (fun x -> (AI_ldc (DT_R8, x))) ] -/// Table of parsing and pretty printing data for instructions. -let MethodSpecInstrs : Lazy> = - lazy [ - ["call"], (fun (mspec, y) -> I_call (Normalcall, mspec, y)) - ] - /// Table of parsing and pretty printing data for instructions. let StringInstrs : Lazy> = lazy [ diff --git a/src/absil/ilascii.fsi b/src/absil/ilascii.fsi index 1b94bbed22..3a8543e4e1 100644 --- a/src/absil/ilascii.fsi +++ b/src/absil/ilascii.fsi @@ -41,7 +41,6 @@ val Int64Instrs: LazyInstrTable val Int32Instrs: LazyInstrTable val Int32Int32Instrs: LazyInstrTable val DoubleInstrs: LazyInstrTable -val MethodSpecInstrs: LazyInstrTable val StringInstrs: LazyInstrTable val TokenInstrs: LazyInstrTable val TypeInstrs: LazyInstrTable diff --git a/src/absil/illex.fsl b/src/absil/illex.fsl index 849ebd17b8..149cd087b9 100644 --- a/src/absil/illex.fsl +++ b/src/absil/illex.fsl @@ -70,7 +70,6 @@ let kwdInstrTable = addTable (fun i -> INSTR_I32_I32 i) Int32Int32Instrs; addTable (fun i -> INSTR_I8 i) Int64Instrs; addTable (fun i -> INSTR_R i) DoubleInstrs; - addTable (fun i -> INSTR_METHOD i) MethodSpecInstrs; addTable (fun i -> INSTR_TYPE i) TypeInstrs; addTable (fun i -> INSTR_INT_TYPE i) IntTypeInstrs; addTable (fun i -> INSTR_VALUETYPE i) ValueTypeInstrs; diff --git a/src/absil/ilpars.fsy b/src/absil/ilpars.fsy index 3f812caeb4..849c5f9fd1 100644 --- a/src/absil/ilpars.fsy +++ b/src/absil/ilpars.fsy @@ -20,21 +20,6 @@ let pfailwith s = stderr.WriteLine ("*** error: "+s); raise Parsing.RecoverableParseError -/// vararg sentinels -type SigArg = SigArg of (string option * ILType) | Sentinel - -let decodeVarargs args = - let rec normals = function - | [] -> ([],None) - | Sentinel :: t -> ([],Some (varargs t)) - | SigArg (_,p) :: t -> let (n,r) = normals t in (p :: n, r) - and varargs = function - | [] -> [] - | SigArg (_,ty) :: t -> let l = varargs t in ty :: l - | Sentinel :: t -> pfailwith "two sentinels in vararg call" - normals args - - type ResolvedAtMethodSpecScope<'T> = ResolvedAtMethodSpecScope of (ILGenericParameterDefs -> 'T) @@ -43,11 +28,6 @@ let resolveMethodSpecScope (ResolvedAtMethodSpecScope f) x = f x let resolveMethodSpecScopeThen (ResolvedAtMethodSpecScope f) g = ResolvedAtMethodSpecScope (fun x -> resolveMethodSpecScope (g(f x)) x) -let resolveFormalMethodSpecScope tspeco obj = - match tspeco with - None -> resolveMethodSpecScope obj mkILEmptyGenericParams - | Some (tspec:ILTypeSpec) -> resolveMethodSpecScope obj (mkILFormalTypars tspec.GenericArgs) - let resolveCurrentMethodSpecScope obj = resolveMethodSpecScope obj mkILEmptyGenericParams @@ -75,7 +55,6 @@ let findAssemblyRef nm = %token INSTR_I32_I32 %token INSTR_I8 %token INSTR_R -%token INSTR_METHOD %token INSTR_NONE %token INSTR_STRING %token INSTR_TOK @@ -163,18 +142,6 @@ instrs2: { $1 :: $2 } | { [] } - - -methodSpecMaybeArrayMethod: - callConv typ typSpec DCOLON methodName opt_actual_tyargs LPAREN sigArgs0 RPAREN - { let callee_class_typ : ILType = resolveCurrentMethodSpecScope $3 - let gscope = (if isILArrTy callee_class_typ then None else Some callee_class_typ.TypeSpec) - let argtys_n_varargs = resolveFormalMethodSpecScope gscope $8 - let (argtys,varargs) = decodeVarargs argtys_n_varargs - let minst = resolveCurrentMethodSpecScope $6 - let callee_retty = resolveFormalMethodSpecScope gscope $2 - (callee_class_typ, $1, $5, argtys, callee_retty, minst), varargs } - instr: INSTR_NONE { ($1 ()) } @@ -188,19 +155,6 @@ instr: { ($1 (ILConst.R8 $2)) } | INSTR_R int64 { ($1 (ILConst.R8 (float $2))) } - | INSTR_METHOD methodSpecMaybeArrayMethod - { - let ((encl_typ, _cc, nm, _argtys, _retty, _minst) as data),varargs = $2 - if isILArrTy encl_typ then - let (shape,ty) = destILArrTy encl_typ - match nm with - | "Get" -> I_ldelem_any(shape,ty) - | "Set" -> I_stelem_any(shape,ty) - | "Address" -> I_ldelema(NormalAddress,false,shape,ty) - | ".ctor" -> I_newarr(shape,ty) - | _ -> failwith "bad method on array type" - else - $1 (mkILMethSpecInTy data, varargs) } | INSTR_TYPE typSpec { $1 (resolveCurrentMethodSpecScope $2) } | INSTR_INT_TYPE int32 typSpec @@ -209,34 +163,6 @@ instr: { $1 (resolveCurrentMethodSpecScope $2) } | INSTR_TOK typSpec { ($1 (ILToken.ILType (resolveCurrentMethodSpecScope $2))) } - -/*----------------------------------------------- - * Formal signatures of methods etc. - *---------------------------------------------*/ - -sigArgs0: - { noMethodSpecScope [] } - | sigArgs1 { $1 } - -sigArgs1: - sigArgs1a - { ResolvedAtMethodSpecScope (fun c -> List.map (fun obj -> resolveMethodSpecScope obj c) (List.rev $1)) } - -sigArgs1a: - sigArg - { [$1] } - | sigArgs1a COMMA sigArg - { $3 :: $1 } - -sigArg: - | typ opt_id - { resolveMethodSpecScopeThen $1 (fun ty -> - noMethodSpecScope (SigArg($2, ty))) } - - - -opt_id: { None } | id { Some $1 } - /*----------------------------------------------- * Type names diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 664e1d4c02..554c19113e 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -1663,11 +1663,10 @@ namespace Microsoft.FSharp.Core let GenericHashWithComparerIntrinsic<'T> (comp : System.Collections.IEqualityComparer) (input : 'T) : int = GenericHashParamObj comp (box input) - /// Direct call to GetHashCode on the string type let inline HashString (s:string) = match s with | null -> 0 - | _ -> (# "call instance int32 [mscorlib]System.String :: GetHashCode()" s : int #) + | _ -> s.GetHashCode() // from mscorlib v4.0.30319 let inline HashChar (x:char) = (# "or" (# "shl" x 16 : int #) x : int #) diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl index 94e5977da0..4a2c0b76fb 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl @@ -74,7 +74,7 @@ IL_0006: ldc.i4 0x483 IL_000b: ldc.i4.s 99 IL_000d: ldstr "5" - IL_0012: call instance int32 [mscorlib]System.String::GetHashCode() + IL_0012: callvirt instance int32 [mscorlib]System.Object::GetHashCode() IL_0017: xor IL_0018: xor IL_0019: stloc.0 diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl index 79b1e6d5ad..550faa686b 100644 --- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl @@ -74,7 +74,7 @@ IL_0006: ldc.i4 0x483 IL_000b: ldc.i4.s 99 IL_000d: ldstr "5" - IL_0012: call instance int32 [mscorlib]System.String::GetHashCode() + IL_0012: callvirt instance int32 [mscorlib]System.Object::GetHashCode() IL_0017: xor IL_0018: xor IL_0019: stloc.0 diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index a4d7e9696a..8a33ed53c6 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -784,6 +784,7 @@ let ``Test Unoptimized Declarations Project1`` () = //#if NETCOREAPP2_0 //[] //#endif +[] let ``Test Optimized Declarations Project1`` () = let wholeProjectResults = exprChecker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously @@ -903,7 +904,7 @@ let ``Test Optimized Declarations Project1`` () = "let testHashUInt64(x) = Operators.op_ExclusiveOr (Operators.ToInt32 (x),Operators.ToInt32 (Operators.op_RightShift (x,32))) @ (12,32--12,38)"; "let testHashIntPtr(x) = Operators.ToInt32 (Operators.ToUInt64 (x)) @ (13,35--13,41)"; "let testHashUIntPtr(x) = Operators.op_BitwiseAnd (Operators.ToInt32 (Operators.ToUInt64 (x)),2147483647) @ (14,37--14,43)"; - "let testHashString(x) = (if Operators.op_Equality (x,dflt) then 0 else Operators.Hash (x)) @ (16,32--16,38)"; + "let testHashString(x) = (if Operators.op_Equality (x,dflt) then 0 else x.GetHashCode()) @ (16,32--16,38)"; "let testTypeOf(x) = Operators.TypeOf<'T> () @ (17,24--17,30)"; "let mutableVar(x) = (if Operators.op_GreaterThan (x,0) then let mutable acc: Microsoft.FSharp.Core.int = x in acc <- x else ()) @ (20,4--22,16)"; "let mutableConst(unitVar0) = let mutable acc: Microsoft.FSharp.Core.unit = () in acc <- () @ (25,16--25,19)"; From 343156ddc9eb3d3988a7f3c99f5abbe186693869 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 27 Dec 2019 22:23:44 -0800 Subject: [PATCH 147/214] [master] Update dependencies from dotnet/arcade (#8038) * Update dependencies from https://github.com/dotnet/arcade build 20191220.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19620.1 * Update dependencies from https://github.com/dotnet/arcade build 20191221.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19621.1 * Update dependencies from https://github.com/dotnet/arcade build 20191222.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19622.1 * Update dependencies from https://github.com/dotnet/arcade build 20191223.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19623.1 * Update dependencies from https://github.com/dotnet/arcade build 20191224.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19624.1 * Update dependencies from https://github.com/dotnet/arcade build 20191225.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19625.1 * Update dependencies from https://github.com/dotnet/arcade build 20191226.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19626.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7a8186f658..fa6b39c529 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 154d5981c6d2fe19f80e71a654ceddeba76ba7b5 + ade7c8cb46ba88f5e698c91da9e7605619e34b6c diff --git a/global.json b/global.json index 6c3afce987..0c14b7e6aa 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19619.10", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19626.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From f1849546e1151467e147c2978d41c55996bb114c Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 28 Dec 2019 13:20:35 +0000 Subject: [PATCH 148/214] Update dependencies from https://github.com/dotnet/arcade build 20191227.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19627.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index fa6b39c529..ce181f02b8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - ade7c8cb46ba88f5e698c91da9e7605619e34b6c + d2d025c1de37b1258f147851cb3e7373ad5ff09d diff --git a/global.json b/global.json index 0c14b7e6aa..699ccb65f8 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19626.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19627.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From af841de4c87da3c584e33f9a7b62f3bd48e26921 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Sat, 28 Dec 2019 17:47:22 -0800 Subject: [PATCH 149/214] Remove IsModuleRef/IsAssemblyRef/ModuleRef/AssemblyRef properties (#8045) * Remove IsModuleRef/IsAssemblyRef/ModuleRef/AssemblyRef properties on ILScopeRef * Use m_typ_Object for scope --- src/absil/il.fs | 13 ++++--------- src/absil/il.fsi | 4 ---- src/fsharp/Optimizer.fs | 9 +++++---- src/fsharp/fsc.fs | 5 ++++- src/fsharp/tast.fs | 5 +---- 5 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/absil/il.fs b/src/absil/il.fs index 4736a29b39..a55c8be248 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -493,14 +493,6 @@ type ILScopeRef = member x.IsLocalRef = match x with ILScopeRef.Local -> true | _ -> false - member x.IsModuleRef = match x with ILScopeRef.Module _ -> true | _ -> false - - member x.IsAssemblyRef= match x with ILScopeRef.Assembly _ -> true | _ -> false - - member x.ModuleRef = match x with ILScopeRef.Module x -> x | _ -> failwith "not a module reference" - - member x.AssemblyRef = match x with ILScopeRef.Assembly x -> x | _ -> failwith "not an assembly reference" - member x.QualifiedName = match x with | ILScopeRef.Local -> "" @@ -2627,7 +2619,10 @@ type ILGlobals(primaryScopeRef) = let m_typ_UIntPtr = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_UIntPtr)) member x.primaryAssemblyScopeRef = m_typ_Object.TypeRef.Scope - member x.primaryAssemblyName = m_typ_Object.TypeRef.Scope.AssemblyRef.Name + member x.primaryAssemblyName = + match m_typ_Object.TypeRef.Scope with + | ILScopeRef.Assembly aref -> aref.Name + | _ -> failwith "Invalid primary assembly" member x.typ_Object = m_typ_Object member x.typ_String = m_typ_String member x.typ_Array = m_typ_Array diff --git a/src/absil/il.fsi b/src/absil/il.fsi index ccafd6334f..a0b818259d 100644 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -99,10 +99,6 @@ type ILScopeRef = /// A reference to a type in another assembly | Assembly of ILAssemblyRef member IsLocalRef: bool - member IsModuleRef: bool - member IsAssemblyRef: bool - member ModuleRef: ILModuleRef - member AssemblyRef: ILAssemblyRef member QualifiedName: string // Calling conventions. diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 69b7d640a7..37d121cad4 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -2070,9 +2070,7 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) = // guarantees to optimize. | TOp.ILCall (_, _, _, _, _, _, _, mref, _enclTypeArgs, _methTypeArgs, _tys), _, [arg] - when (mref.DeclaringTypeRef.Scope.IsAssemblyRef && - mref.DeclaringTypeRef.Scope.AssemblyRef.Name = cenv.g.ilg.typ_Array.TypeRef.Scope.AssemblyRef.Name && - mref.DeclaringTypeRef.Name = cenv.g.ilg.typ_Array.TypeRef.Name && + when (mref.DeclaringTypeRef.Name = cenv.g.ilg.typ_Array.TypeRef.Name && mref.Name = "get_Length" && isArray1DTy cenv.g (tyOfExpr cenv.g arg)) -> OptimizeExpr cenv env (Expr.Op (TOp.ILAsm (i_ldlen, [cenv.g.int_ty]), [], [arg], m)) @@ -2785,7 +2783,10 @@ and TryInlineApplication cenv env finfo (tyargs: TType list, args: Expr list, m) match vref.ApparentEnclosingEntity with | Parent tcr when (tyconRefEq cenv.g cenv.g.lazy_tcr_canon tcr) -> match tcr.CompiledRepresentation with - | CompiledTypeRepr.ILAsmNamed(iltr, _, _) -> iltr.Scope.AssemblyRef.Name = "FSharp.Core" + | CompiledTypeRepr.ILAsmNamed(iltr, _, _) -> + match iltr.Scope with + | ILScopeRef.Assembly aref -> aref.Name = "FSharp.Core" + | _ -> false | _ -> false | _ -> false | _ -> false diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 61cc6e8547..ba9e1bcd8d 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1397,7 +1397,10 @@ module StaticLinker = // Add all provider-generated assemblies into the static linking set let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGeneratedAssemblies: (ImportedBinary * _) list) = [ for (importedBinary, provAssemStaticLinkInfo) in providerGeneratedAssemblies do - let ilAssemRef = importedBinary.ILScopeRef.AssemblyRef + let ilAssemRef = + match importedBinary.ILScopeRef with + | ILScopeRef.Assembly aref -> aref + | _ -> failwith "Invalid ILScopeRef, expected ILScopeRef.Assembly" if debugStaticLinking then printfn "adding provider-generated assembly '%s' into static linking set" ilAssemRef.Name match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with | Some dllInfo -> diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index a122bfe146..98ededce05 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -5775,10 +5775,7 @@ let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPre let NewILTycon nlpath (nm, m) tps (scoref: ILScopeRef, enc, tdef: ILTypeDef) mtyp = - - // NOTE: hasSelfReferentialCtor=false is an assumption about mscorlib - let hasSelfReferentialCtor = tdef.IsClass && (not scoref.IsAssemblyRef && scoref.AssemblyRef.Name = "mscorlib") - let tycon = NewTycon(nlpath, nm, m, taccessPublic, taccessPublic, TyparKind.Type, tps, XmlDoc.Empty, true, false, hasSelfReferentialCtor, mtyp) + let tycon = NewTycon(nlpath, nm, m, taccessPublic, taccessPublic, TyparKind.Type, tps, XmlDoc.Empty, true, false, false, mtyp) tycon.entity_tycon_repr <- TILObjectRepr (TILObjectReprData (scoref, enc, tdef)) tycon.TypeContents.tcaug_closed <- true From 2d3e4d8c4bfc96d71124dd6cf6134b713ce88721 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sun, 29 Dec 2019 13:18:54 +0000 Subject: [PATCH 150/214] Update dependencies from https://github.com/dotnet/arcade build 20191228.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19628.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ce181f02b8..818b032644 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - d2d025c1de37b1258f147851cb3e7373ad5ff09d + 44a53c66de431dbd54b4277d6338d2b103d6852d diff --git a/global.json b/global.json index 699ccb65f8..b86f1d924e 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19627.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19628.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 7721fd2af671abbdf48e5409c1647d6c24d50eda Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 30 Dec 2019 13:19:44 +0000 Subject: [PATCH 151/214] Update dependencies from https://github.com/dotnet/arcade build 20191229.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19629.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 818b032644..22c2b3ce42 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 44a53c66de431dbd54b4277d6338d2b103d6852d + f40849c5bbdfd1f1b99801f5a40343f8d4a192c9 diff --git a/global.json b/global.json index b86f1d924e..42fff6c470 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19628.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19629.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From e74d640311761826010deeca965f65e84cbba810 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 31 Dec 2019 13:16:28 +0000 Subject: [PATCH 152/214] Update dependencies from https://github.com/dotnet/arcade build 20191230.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19630.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 22c2b3ce42..074a61a9c2 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - f40849c5bbdfd1f1b99801f5a40343f8d4a192c9 + 01d0b636bfb96edf62a77912de25aa5cef143946 diff --git a/global.json b/global.json index 42fff6c470..0ed908c0d9 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19629.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19630.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 67afba311c80e64c3865be3f96c18b98339d9ff8 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 1 Jan 2020 13:16:15 +0000 Subject: [PATCH 153/214] Update dependencies from https://github.com/dotnet/arcade build 20191231.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19631.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 074a61a9c2..b38d39faa6 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 01d0b636bfb96edf62a77912de25aa5cef143946 + cc596c55ac68c952d0e052e6ed50334ed170b53a diff --git a/global.json b/global.json index 0ed908c0d9..b01c2c0341 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19630.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19631.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 6147a6888f54579507da1cdd64948a1be29b48ba Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Jan 2020 13:19:30 +0000 Subject: [PATCH 154/214] Update dependencies from https://github.com/dotnet/arcade build 20200101.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20051.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b38d39faa6..8691a8dad9 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - cc596c55ac68c952d0e052e6ed50334ed170b53a + bbd4a95d4bcb6e06f88a8590e18e499a6169b66e diff --git a/global.json b/global.json index b01c2c0341..1a1f6368ff 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19631.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20051.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From e69e4f1329837482a0772377a94150c1b33781f6 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2020 23:56:51 +0000 Subject: [PATCH 155/214] Update dependencies from https://github.com/dotnet/arcade build 20191216.5 (#8079) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19616.5 --- eng/Version.Details.xml | 4 +- eng/common/CheckSymbols.ps1 | 53 ++-- eng/common/PublishToSymbolServers.proj | 6 +- eng/common/SetupNugetSources.ps1 | 16 +- eng/common/SetupNugetSources.sh | 2 +- eng/common/SourceLinkValidation.ps1 | 269 +++++++++--------- eng/common/build.ps1 | 97 +++---- eng/common/build.sh | 24 +- eng/common/cross/build-rootfs.sh | 2 +- eng/common/cross/toolchain.cmake | 49 +++- eng/common/darc-init.ps1 | 26 +- eng/common/darc-init.sh | 30 +- eng/common/dotnet-install.ps1 | 25 +- eng/common/dotnet-install.sh | 37 +-- eng/common/enable-cross-org-publishing.ps1 | 6 +- eng/common/generate-graph-files.ps1 | 49 ++-- eng/common/init-tools-native.ps1 | 37 ++- eng/common/init-tools-native.sh | 5 +- eng/common/internal-feed-operations.ps1 | 28 +- eng/common/internal-feed-operations.sh | 4 +- eng/common/msbuild.ps1 | 5 +- eng/common/native/common-library.sh | 10 +- eng/common/native/install-cmake-test.sh | 4 +- eng/common/native/install-cmake.sh | 4 +- eng/common/native/install-tool.ps1 | 12 +- eng/common/pipeline-logging-functions.ps1 | 72 +++-- eng/common/pipeline-logging-functions.sh | 11 +- eng/common/post-build/darc-gather-drop.ps1 | 15 +- eng/common/post-build/nuget-validation.ps1 | 11 +- eng/common/post-build/post-build-utils.ps1 | 27 +- eng/common/post-build/promote-build.ps1 | 18 +- eng/common/post-build/setup-maestro-vars.ps1 | 26 ++ .../post-build/sourcelink-validation.ps1 | 42 +-- eng/common/post-build/symbols-validation.ps1 | 71 ++--- .../post-build/trigger-subscriptions.ps1 | 87 +++--- eng/common/sdk-task.ps1 | 19 +- eng/common/sdl/execute-all-sdl-tools.ps1 | 176 ++++++------ eng/common/sdl/extract-artifact-packages.ps1 | 89 +++--- eng/common/sdl/init-sdl.ps1 | 38 +-- eng/common/sdl/push-gdn.ps1 | 92 +++--- eng/common/sdl/run-sdl.ps1 | 86 +++--- eng/common/templates/job/execute-sdl.yml | 8 +- eng/common/templates/job/job.yml | 142 +++++---- eng/common/templates/jobs/jobs.yml | 74 +++-- .../channels/generic-internal-channel.yml | 40 +-- .../channels/generic-public-channel.yml | 17 +- .../templates/post-build/common-variables.yml | 6 +- .../templates/post-build/post-build.yml | 207 +++++++++++--- .../post-build/setup-maestro-vars.yml | 26 +- eng/common/templates/steps/publish-logs.yml | 23 -- eng/common/templates/steps/send-to-helix.yml | 3 - eng/common/tools.ps1 | 201 ++++++------- eng/common/tools.sh | 44 +-- global.json | 2 +- 54 files changed, 1190 insertions(+), 1287 deletions(-) create mode 100644 eng/common/post-build/setup-maestro-vars.ps1 delete mode 100644 eng/common/templates/steps/publish-logs.yml diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8691a8dad9..4f40053c4c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - bbd4a95d4bcb6e06f88a8590e18e499a6169b66e + d4a1ce6278134f5dc25843e228d0498203031e61 diff --git a/eng/common/CheckSymbols.ps1 b/eng/common/CheckSymbols.ps1 index 5442eff386..b8d84607b8 100644 --- a/eng/common/CheckSymbols.ps1 +++ b/eng/common/CheckSymbols.ps1 @@ -5,12 +5,11 @@ param( ) Add-Type -AssemblyName System.IO.Compression.FileSystem -. $PSScriptRoot\pipeline-logging-functions.ps1 function FirstMatchingSymbolDescriptionOrDefault { param( [string] $FullPath, # Full path to the module that has to be checked - [string] $TargetServerParameter, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols + [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols [string] $SymbolsPath ) @@ -22,36 +21,36 @@ function FirstMatchingSymbolDescriptionOrDefault { # checking and which type of file was uploaded. # The file itself is returned - $SymbolPath = $SymbolsPath + '\' + $FileName + $SymbolPath = $SymbolsPath + "\" + $FileName # PDB file for the module - $PdbPath = $SymbolPath.Replace($Extension, '.pdb') + $PdbPath = $SymbolPath.Replace($Extension, ".pdb") # PDB file for R2R module (created by crossgen) - $NGenPdb = $SymbolPath.Replace($Extension, '.ni.pdb') + $NGenPdb = $SymbolPath.Replace($Extension, ".ni.pdb") # DBG file for a .so library - $SODbg = $SymbolPath.Replace($Extension, '.so.dbg') + $SODbg = $SymbolPath.Replace($Extension, ".so.dbg") # DWARF file for a .dylib - $DylibDwarf = $SymbolPath.Replace($Extension, '.dylib.dwarf') + $DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf") - .\dotnet-symbol.exe --symbols --modules --windows-pdbs $TargetServerParameter $FullPath -o $SymbolsPath | Out-Null + .\dotnet-symbol.exe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null if (Test-Path $PdbPath) { - return 'PDB' + return "PDB" } elseif (Test-Path $NGenPdb) { - return 'NGen PDB' + return "NGen PDB" } elseif (Test-Path $SODbg) { - return 'DBG for SO' + return "DBG for SO" } elseif (Test-Path $DylibDwarf) { - return 'Dwarf for Dylib' + return "Dwarf for Dylib" } elseif (Test-Path $SymbolPath) { - return 'Module' + return "Module" } else { return $null @@ -69,7 +68,7 @@ function CountMissingSymbols { } # Extensions for which we'll look for symbols - $RelevantExtensions = @('.dll', '.exe', '.so', '.dylib') + $RelevantExtensions = @(".dll", ".exe", ".so", ".dylib") # How many files are missing symbol information $MissingSymbols = 0 @@ -77,7 +76,7 @@ function CountMissingSymbols { $PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath) $PackageGuid = New-Guid $ExtractPath = Join-Path -Path $ExtractPath -ChildPath $PackageGuid - $SymbolsPath = Join-Path -Path $ExtractPath -ChildPath 'Symbols' + $SymbolsPath = Join-Path -Path $ExtractPath -ChildPath "Symbols" [System.IO.Compression.ZipFile]::ExtractToDirectory($PackagePath, $ExtractPath) @@ -87,31 +86,31 @@ function CountMissingSymbols { Get-ChildItem -Recurse $ExtractPath | Where-Object {$RelevantExtensions -contains $_.Extension} | ForEach-Object { - if ($_.FullName -Match '\\ref\\') { + if ($_.FullName -Match "\\ref\\") { Write-Host "`t Ignoring reference assembly file" $_.FullName return } - $SymbolsOnMSDL = FirstMatchingSymbolDescriptionOrDefault -FullPath $_.FullName -TargetServerParameter '--microsoft-symbol-server' -SymbolsPath $SymbolsPath - $SymbolsOnSymWeb = FirstMatchingSymbolDescriptionOrDefault -FullPath $_.FullName -TargetServerParameter '--internal-server' -SymbolsPath $SymbolsPath + $SymbolsOnMSDL = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--microsoft-symbol-server" $SymbolsPath + $SymbolsOnSymWeb = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--internal-server" $SymbolsPath Write-Host -NoNewLine "`t Checking file" $_.FullName "... " if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { - Write-Host "Symbols found on MSDL (${$SymbolsOnMSDL}) and SymWeb (${$SymbolsOnSymWeb})" + Write-Host "Symbols found on MSDL (" $SymbolsOnMSDL ") and SymWeb (" $SymbolsOnSymWeb ")" } else { $MissingSymbols++ if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { - Write-Host 'No symbols found on MSDL or SymWeb!' + Write-Host "No symbols found on MSDL or SymWeb!" } else { if ($SymbolsOnMSDL -eq $null) { - Write-Host 'No symbols found on MSDL!' + Write-Host "No symbols found on MSDL!" } else { - Write-Host 'No symbols found on SymWeb!' + Write-Host "No symbols found on SymWeb!" } } } @@ -130,26 +129,26 @@ function CheckSymbolsAvailable { Get-ChildItem "$InputPath\*.nupkg" | ForEach-Object { $FileName = $_.Name - + # These packages from Arcade-Services include some native libraries that # our current symbol uploader can't handle. Below is a workaround until # we get issue: https://github.com/dotnet/arcade/issues/2457 sorted. - if ($FileName -Match 'Microsoft\.DotNet\.Darc\.') { + if ($FileName -Match "Microsoft\.DotNet\.Darc\.") { Write-Host "Ignoring Arcade-services file: $FileName" Write-Host return } - elseif ($FileName -Match 'Microsoft\.DotNet\.Maestro\.Tasks\.') { + elseif ($FileName -Match "Microsoft\.DotNet\.Maestro\.Tasks\.") { Write-Host "Ignoring Arcade-services file: $FileName" Write-Host return } - + Write-Host "Validating $FileName " $Status = CountMissingSymbols "$InputPath\$FileName" if ($Status -ne 0) { - Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Missing symbols for $Status modules in the package $FileName" + Write-Error "Missing symbols for $Status modules in the package $FileName" } Write-Host diff --git a/eng/common/PublishToSymbolServers.proj b/eng/common/PublishToSymbolServers.proj index 311e2bbe0f..5d55e312b0 100644 --- a/eng/common/PublishToSymbolServers.proj +++ b/eng/common/PublishToSymbolServers.proj @@ -37,8 +37,6 @@ 3650 true - true - true false @@ -58,7 +56,7 @@ DryRun="false" ConvertPortablePdbsToWindowsPdbs="false" PdbConversionTreatAsWarning="" - Condition="$(PublishToSymbolServer) and $(PublishToMSDL)"/> + Condition="$(PublishToSymbolServer)"/> git commit --> git push - Write-Host 'git add .' - git add . - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git add failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } - Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" - git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git commit failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } - Write-Host 'git push' - git push - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git push failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } +# We create the temp directory where we'll store the sdl-config repository +$sdlDir = Join-Path $env:TEMP "sdl" +if (Test-Path $sdlDir) { + Remove-Item -Force -Recurse $sdlDir +} - # Return to the original directory - Pop-Location +Write-Host "git clone https://dnceng:`$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir" +git clone https://dnceng:$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir +if ($LASTEXITCODE -ne 0) { + Write-Error "Git clone failed with exit code $LASTEXITCODE." +} +# We copy the .gdn folder from our local run into the git repository so it can be committed +$sdlRepositoryFolder = Join-Path (Join-Path (Join-Path $sdlDir $Repository) $BranchName) ".gdn" +if (Get-Command Robocopy) { + Robocopy /S $GdnFolder $sdlRepositoryFolder +} else { + rsync -r $GdnFolder $sdlRepositoryFolder } -catch { - Write-Host $_.ScriptStackTrace - Write-PipelineTelemetryError -Category 'Sdl' -Message $_ - ExitWithExitCode 1 -} \ No newline at end of file +# cd to the sdl-config directory so we can run git there +Push-Location $sdlDir +# git add . --> git commit --> git push +Write-Host "git add ." +git add . +if ($LASTEXITCODE -ne 0) { + Write-Error "Git add failed with exit code $LASTEXITCODE." +} +Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" +git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" +if ($LASTEXITCODE -ne 0) { + Write-Error "Git commit failed with exit code $LASTEXITCODE." +} +Write-Host "git push" +git push +if ($LASTEXITCODE -ne 0) { + Write-Error "Git push failed with exit code $LASTEXITCODE." +} + +# Return to the original directory +Pop-Location \ No newline at end of file diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index 40a084f796..9bc25314ae 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -5,65 +5,55 @@ Param( [string] $GdnFolder, [string[]] $ToolsList, [string] $UpdateBaseline, - [string] $GuardianLoggerLevel='Standard', + [string] $GuardianLoggerLevel="Standard", [string[]] $CrScanAdditionalRunConfigParams, [string[]] $PoliCheckAdditionalRunConfigParams ) -$ErrorActionPreference = 'Stop' +$ErrorActionPreference = "Stop" Set-StrictMode -Version 2.0 -$disableConfigureToolsetImport = $true $LASTEXITCODE = 0 -try { - . $PSScriptRoot\..\tools.ps1 +# We store config files in the r directory of .gdn +Write-Host $ToolsList +$gdnConfigPath = Join-Path $GdnFolder "r" +$ValidPath = Test-Path $GuardianCliLocation - # We store config files in the r directory of .gdn - Write-Host $ToolsList - $gdnConfigPath = Join-Path $GdnFolder 'r' - $ValidPath = Test-Path $GuardianCliLocation - - if ($ValidPath -eq $False) - { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Invalid Guardian CLI Location." - ExitWithExitCode 1 - } - - $configParam = @('--config') +if ($ValidPath -eq $False) +{ + Write-Host "Invalid Guardian CLI Location." + exit 1 +} - foreach ($tool in $ToolsList) { - $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" - Write-Host $tool - # We have to manually configure tools that run on source to look at the source directory only - if ($tool -eq 'credscan') { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory < $TargetDirectory `" `" OutputType < pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory < $TargetDirectory " "OutputType < pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Guardian configure for $tool failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } +$configParam = @("--config") + +foreach ($tool in $ToolsList) { + $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" + Write-Host $tool + # We have to manually configure tools that run on source to look at the source directory only + if ($tool -eq "credscan") { + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory < $TargetDirectory `" `" OutputType < pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory < $TargetDirectory " "OutputType < pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE } - if ($tool -eq 'policheck') { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target < $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target < $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Guardian configure for $tool failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } + } + if ($tool -eq "policheck") { + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target < $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target < $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) + if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE } - - $configParam+=$gdnConfigFile } - Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam" - & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } + $configParam+=$gdnConfigFile +} + +Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam" +& $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam +if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE } -catch { - Write-Host $_.ScriptStackTrace - Write-PipelineTelemetryError -Category 'Sdl' -Message $_ - ExitWithExitCode 1 -} \ No newline at end of file diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index 2973bcaf3a..52e2ff021d 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -40,13 +40,13 @@ jobs: itemPattern: "**" downloadPath: $(Build.ArtifactStagingDirectory)\artifacts - powershell: eng/common/sdl/extract-artifact-packages.ps1 - -InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts - -ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts + -InputPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts + -ExtractPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts displayName: Extract Blob Artifacts continueOnError: ${{ parameters.sdlContinueOnError }} - powershell: eng/common/sdl/extract-artifact-packages.ps1 - -InputPath $(Build.ArtifactStagingDirectory)\artifacts\PackageArtifacts - -ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\PackageArtifacts + -InputPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts + -ExtractPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts displayName: Extract Package Artifacts continueOnError: ${{ parameters.sdlContinueOnError }} - task: NuGetToolInstaller@1 diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index ecebd0f03e..ffda80a197 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -1,33 +1,67 @@ -# Internal resources (telemetry, microbuild) can only be accessed from non-public projects, -# and some (Microbuild) should only be applied to non-PR cases for internal builds. - parameters: # Job schema parameters - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job cancelTimeoutInMinutes: '' + condition: '' - container: '' + continueOnError: false + + container: '' + dependsOn: '' + displayName: '' - pool: '' + steps: [] + + pool: '' + strategy: '' + timeoutInMinutes: '' + variables: [] + workspace: '' -# Job base template specific parameters - # See schema documentation - https://github.com/dotnet/arcade/blob/master/Documentation/AzureDevOps/TemplateSchema.md - artifacts: '' + # Job base template specific parameters + # Optional: Enable installing Microbuild plugin + # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix + # _TeamName - the name of your team + # _SignType - 'test' or 'real' enableMicrobuild: false + + # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false + + # Optional: Enable publishing to the build asset registry enablePublishBuildAssets: false - enablePublishTestResults: false + + # Optional: Prevent gather/push manifest from executing when using publishing pipelines enablePublishUsingPipelines: false + + # Optional: Include PublishTestResults task + enablePublishTestResults: false + + # Optional: enable sending telemetry + enableTelemetry: false + + # Optional: define the helix repo for telemetry (example: 'dotnet/arcade') + helixRepo: '' + + # Optional: define the helix type for telemetry (example: 'build/product/') + helixType: '' + + # Required: name of the job name: '' - preSteps: [] + + # Optional: should run as a public build even in the internal project + # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false +# Internal resources (telemetry, microbuild) can only be accessed from non-public projects, +# and some (Microbuild) should only be applied to non-PR cases for internal builds. + jobs: - job: ${{ parameters.name }} @@ -59,7 +93,7 @@ jobs: timeoutInMinutes: ${{ parameters.timeoutInMinutes }} variables: - - ${{ if ne(parameters.enableTelemetry, 'false') }}: + - ${{ if eq(parameters.enableTelemetry, 'true') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - ${{ each variable in parameters.variables }}: @@ -91,12 +125,21 @@ jobs: workspace: ${{ parameters.workspace }} steps: - - ${{ if ne(parameters.preSteps, '') }}: - - ${{ each preStep in parameters.preSteps }}: - - ${{ preStep }} + - ${{ if eq(parameters.enableTelemetry, 'true') }}: + # Telemetry tasks are built from https://github.com/dotnet/arcade-extensions + - task: sendStartTelemetry@0 + displayName: 'Send Helix Start Telemetry' + inputs: + helixRepo: ${{ parameters.helixRepo }} + ${{ if ne(parameters.helixType, '') }}: + helixType: ${{ parameters.helixType }} + buildConfig: $(_BuildConfig) + runAsPublic: ${{ parameters.runAsPublic }} + continueOnError: ${{ parameters.continueOnError }} + condition: always() - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: MicroBuildSigningPlugin@2 displayName: Install MicroBuild plugin inputs: @@ -108,16 +151,9 @@ jobs: continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: NuGetAuthenticate@0 - - ${{ if or(eq(parameters.artifacts.download, 'true'), ne(parameters.artifacts.download, '')) }}: - - task: DownloadPipelineArtifact@2 - inputs: - buildType: current - artifactName: ${{ coalesce(parameters.artifacts.download.name, 'Artifacts_$(Agent.OS)_$(_BuildConfig)') }} - targetPath: ${{ coalesce(parameters.artifacts.download.path, 'artifacts') }} - itemPattern: ${{ coalesce(parameters.artifacts.download.pattern, '**') }} - - ${{ each step in parameters.steps }}: - ${{ step }} @@ -130,60 +166,20 @@ jobs: env: TeamName: $(_TeamName) - - ${{ if ne(parameters.artifacts.publish, '') }}: - - ${{ if or(eq(parameters.artifacts.publish.artifacts, 'true'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - task: CopyFiles@2 - displayName: Gather binaries for publish to artifacts - inputs: - SourceFolder: 'artifacts/bin' - Contents: '**' - TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/bin' - - task: CopyFiles@2 - displayName: Gather packages for publish to artifacts - inputs: - SourceFolder: 'artifacts/packages' - Contents: '**' - TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/packages' - - task: PublishBuildArtifacts@1 - displayName: Publish pipeline artifacts - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' - PublishLocation: Container - ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} - continueOnError: true - condition: always() - - ${{ if or(eq(parameters.artifacts.publish.logs, 'true'), ne(parameters.artifacts.publish.logs, '')) }}: - - publish: artifacts/log - artifact: ${{ coalesce(parameters.artifacts.publish.logs.name, 'Logs_Build_$(Agent.Os)_$(_BuildConfig)') }} - displayName: Publish logs - continueOnError: true - condition: always() - - ${{ if or(eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: - - ${{ if and(ne(parameters.enablePublishUsingPipelines, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: CopyFiles@2 - displayName: Gather Asset Manifests - inputs: - SourceFolder: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/AssetManifest' - TargetFolder: '$(Build.ArtifactStagingDirectory)/AssetManifests' - continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) - - - task: PublishBuildArtifacts@1 - displayName: Push Asset Manifests - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/AssetManifests' - PublishLocation: Container - ArtifactName: AssetManifests - continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) - - - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: + - ${{ if eq(parameters.enableTelemetry, 'true') }}: + # Telemetry tasks are built from https://github.com/dotnet/arcade-extensions + - task: sendEndTelemetry@0 + displayName: 'Send Helix End Telemetry' + continueOnError: ${{ parameters.continueOnError }} + condition: always() + + - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - task: PublishBuildArtifacts@1 displayName: Publish Logs inputs: PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)' PublishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + ArtifactName: $(Agent.Os)_$(Agent.JobName) continueOnError: true condition: always() diff --git a/eng/common/templates/jobs/jobs.yml b/eng/common/templates/jobs/jobs.yml index c08225a9a9..6a2f98c036 100644 --- a/eng/common/templates/jobs/jobs.yml +++ b/eng/common/templates/jobs/jobs.yml @@ -1,10 +1,19 @@ parameters: - # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md + # Optional: 'true' if failures in job.yml job should not fail the job continueOnError: false + # Optional: Enable installing Microbuild plugin + # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix + # _TeamName - the name of your team + # _SignType - 'test' or 'real' + enableMicrobuild: false + # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false + # Optional: Enable publishing to the build asset registry + enablePublishBuildAssets: false + # Optional: Enable publishing using release pipelines enablePublishUsingPipelines: false @@ -14,9 +23,19 @@ parameters: # Optional: Include toolset dependencies in the generated graph files includeToolset: false + # Optional: Include PublishTestResults task + enablePublishTestResults: false + + # Optional: enable sending telemetry + # if enabled then the 'helixRepo' parameter should also be specified + enableTelemetry: false + # Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job jobs: [] + # Optional: define the helix repo for telemetry (example: 'dotnet/arcade') + helixRepo: '' + # Optional: Override automatically derived dependsOn value for "publish build assets" job publishBuildAssetsDependsOn: '' @@ -43,30 +62,29 @@ jobs: name: ${{ job.job }} -- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: - - template: ../job/publish-build-assets.yml - parameters: - continueOnError: ${{ parameters.continueOnError }} - dependsOn: - - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: - - ${{ each job in parameters.publishBuildAssetsDependsOn }}: - - ${{ job.job }} - - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - - ${{ each job in parameters.jobs }}: - - ${{ job.job }} - pool: - vmImage: vs2017-win2016 - runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} - - - ${{ if eq(parameters.graphFileGeneration.enabled, true) }}: - - template: ../job/generate-graph-files.yml - parameters: - continueOnError: ${{ parameters.continueOnError }} - includeToolset: ${{ parameters.graphFileGeneration.includeToolset }} - dependsOn: - - Asset_Registry_Publish - pool: - vmImage: vs2017-win2016 +- ${{ if and(eq(parameters.enablePublishBuildAssets, true), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: ../job/publish-build-assets.yml + parameters: + continueOnError: ${{ parameters.continueOnError }} + dependsOn: + - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: + - ${{ each job in parameters.publishBuildAssetsDependsOn }}: + - ${{ job.job }} + - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: + - ${{ each job in parameters.jobs }}: + - ${{ job.job }} + pool: + vmImage: vs2017-win2016 + runAsPublic: ${{ parameters.runAsPublic }} + publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} + enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} + +- ${{ if and(eq(parameters.graphFileGeneration.enabled, true), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: ../job/generate-graph-files.yml + parameters: + continueOnError: ${{ parameters.continueOnError }} + includeToolset: ${{ parameters.graphFileGeneration.includeToolset }} + dependsOn: + - Asset_Registry_Publish + pool: + vmImage: vs2017-win2016 diff --git a/eng/common/templates/post-build/channels/generic-internal-channel.yml b/eng/common/templates/post-build/channels/generic-internal-channel.yml index 3a8755fbbb..ad9375f5e5 100644 --- a/eng/common/templates/post-build/channels/generic-internal-channel.yml +++ b/eng/common/templates/post-build/channels/generic-internal-channel.yml @@ -1,7 +1,4 @@ parameters: - artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate publishInstallersAndChecksums: false symbolPublishingAdditionalParameters: '' stageName: '' @@ -13,14 +10,14 @@ parameters: stages: - stage: ${{ parameters.stageName }} - dependsOn: ${{ parameters.dependsOn }} + dependsOn: validate variables: - template: ../common-variables.yml displayName: ${{ parameters.channelName }} Publishing jobs: - template: ../setup-maestro-vars.yml - - job: publish_symbols + - job: displayName: Symbol Publishing dependsOn: setupMaestroVars condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )) @@ -29,6 +26,10 @@ stages: pool: vmImage: 'windows-2019' steps: + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: DownloadBuildArtifacts@0 displayName: Download Blob Artifacts inputs: @@ -41,18 +42,6 @@ stages: artifactName: 'PDBArtifacts' continueOnError: true - # This is necessary whenever we want to publish/restore to an AzDO private feed - # Since sdk-task.ps1 tries to restore packages we need to do this authentication here - # otherwise it'll complain about accessing a private feed. - - task: NuGetAuthenticate@0 - displayName: 'Authenticate to AzDO Feeds' - - - task: PowerShell@2 - displayName: Enable cross-org publishing - inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) - - task: PowerShell@2 displayName: Publish inputs: @@ -64,18 +53,14 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release - /p:PublishToMSDL=false ${{ parameters.symbolPublishingAdditionalParameters }} - - template: ../../steps/publish-logs.yml - parameters: - StageLabel: '${{ parameters.stageName }}' - JobLabel: 'SymbolPublishing' - - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars variables: + - group: DotNet-Blob-Feed + - group: AzureDevOps-Artifact-Feeds-Pats - name: BARBuildId value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild @@ -89,14 +74,13 @@ stages: inputs: buildType: current artifactName: PackageArtifacts - continueOnError: true - task: DownloadBuildArtifacts@0 displayName: Download Blob Artifacts inputs: buildType: current artifactName: BlobArtifacts - continueOnError: true + - task: DownloadBuildArtifacts@0 displayName: Download Asset Manifests inputs: @@ -140,6 +124,7 @@ stages: /p:ChecksumsAzureAccountKey=$(InternalChecksumsBlobFeedKey) /p:InstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(InternalInstallersBlobFeedKey) + /p:PublishToAzureDevOpsNuGetFeeds=true /p:AzureDevOpsStaticShippingFeed='${{ parameters.shippingFeed }}' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeed='${{ parameters.transportFeed }}' @@ -149,11 +134,6 @@ stages: /p:PublishToMSDL=false ${{ parameters.artifactsPublishingAdditionalParameters }} - - template: ../../steps/publish-logs.yml - parameters: - StageLabel: '${{ parameters.stageName }}' - JobLabel: 'AssetsPublishing' - - template: ../../steps/promote-build.yml parameters: ChannelId: ${{ parameters.channelId }} diff --git a/eng/common/templates/post-build/channels/generic-public-channel.yml b/eng/common/templates/post-build/channels/generic-public-channel.yml index 3f572f8b12..c4bc1897d8 100644 --- a/eng/common/templates/post-build/channels/generic-public-channel.yml +++ b/eng/common/templates/post-build/channels/generic-public-channel.yml @@ -1,7 +1,5 @@ parameters: artifactsPublishingAdditionalParameters: '' - dependsOn: - - Validate publishInstallersAndChecksums: false symbolPublishingAdditionalParameters: '' stageName: '' @@ -13,14 +11,14 @@ parameters: stages: - stage: ${{ parameters.stageName }} - dependsOn: ${{ parameters.dependsOn }} + dependsOn: validate variables: - template: ../common-variables.yml displayName: ${{ parameters.channelName }} Publishing jobs: - template: ../setup-maestro-vars.yml - - job: publish_symbols + - job: displayName: Symbol Publishing dependsOn: setupMaestroVars condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.channelId }} )) @@ -66,11 +64,6 @@ stages: /p:Configuration=Release ${{ parameters.symbolPublishingAdditionalParameters }} - - template: ../../steps/publish-logs.yml - parameters: - StageLabel: '${{ parameters.stageName }}' - JobLabel: 'SymbolPublishing' - - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars @@ -141,6 +134,7 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=true /p:AzureDevOpsStaticShippingFeed='${{ parameters.shippingFeed }}' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeed='${{ parameters.transportFeed }}' @@ -149,11 +143,6 @@ stages: /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - - template: ../../steps/publish-logs.yml - parameters: - StageLabel: '${{ parameters.stageName }}' - JobLabel: 'AssetsPublishing' - - template: ../../steps/promote-build.yml parameters: ChannelId: ${{ parameters.channelId }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 9505cf170f..216d043e4e 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -4,7 +4,7 @@ variables: - group: DotNet-DotNetCli-Storage - group: DotNet-MSRC-Storage - group: Publish-Build-Assets - + # .NET Core 3.1 Dev - name: PublicDevRelease_31_Channel_Id value: 128 @@ -49,10 +49,6 @@ variables: - name: NetCore_31_Blazor_Features_Channel_Id value: 531 - # .NET Core Experimental - - name: NetCore_Experimental_Channel_Id - value: 562 - # Whether the build is internal or not - name: IsInternalBuild value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 8a8d84f202..b121d77e07 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -17,14 +17,11 @@ parameters: signingValidationAdditionalParameters: '' # Which stages should finish execution before post-build stages start - validateDependsOn: - - build - publishDependsOn: - - Validate + dependsOn: [build] stages: -- stage: Validate - dependsOn: ${{ parameters.validateDependsOn }} +- stage: validate + dependsOn: ${{ parameters.dependsOn }} displayName: Validate jobs: - ${{ if eq(parameters.enableNugetValidation, 'true') }}: @@ -49,28 +46,20 @@ stages: - ${{ if eq(parameters.enableSigningValidation, 'true') }}: - job: displayName: Signing Validation - variables: - - template: common-variables.yml pool: vmImage: 'windows-2019' steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here # otherwise it'll complain about accessing a private feed. - task: NuGetAuthenticate@0 displayName: 'Authenticate to AzDO Feeds' - - task: PowerShell@2 - displayName: Enable cross-org publishing + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts inputs: - filePath: eng\common\enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) + buildType: current + artifactName: PackageArtifacts - task: PowerShell@2 displayName: Validate @@ -79,13 +68,9 @@ stages: arguments: -task SigningValidation -restore -msbuildEngine dotnet /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' + /p:Configuration=Release ${{ parameters.signingValidationAdditionalParameters }} - - template: ../steps/publish-logs.yml - parameters: - StageLabel: 'Validation' - JobLabel: 'Signing' - - ${{ if eq(parameters.enableSourceLinkValidation, 'true') }}: - job: displayName: SourceLink Validation @@ -121,7 +106,6 @@ stages: - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} stageName: 'NetCore_Dev5_Publish' @@ -134,7 +118,18 @@ stages: - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Dev31_Publish' + channelName: '.NET Core 3.1 Dev' + channelId: 128 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} stageName: 'Net_Eng_Latest_Publish' @@ -147,7 +142,6 @@ stages: - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} stageName: 'Net_Eng_Validation_Publish' @@ -160,7 +154,90 @@ stages: - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_3_Tools_Validation_Publish' + channelName: '.NET 3 Tools - Validation' + channelId: 390 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_3_Tools_Publish' + channelName: '.NET 3 Tools' + channelId: 344 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Release30_Publish' + channelName: '.NET Core 3.0 Release' + channelId: 19 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Release31_Publish' + channelName: '.NET Core 3.1 Release' + channelId: 129 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_Blazor31_Features_Publish' + channelName: '.NET Core 3.1 Blazor Features' + channelId: 531 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_30_Internal_Servicing_Publishing' + channelName: '.NET Core 3.0 Internal Servicing' + channelId: 184 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NetCore_31_Internal_Servicing_Publishing' + channelName: '.NET Core 3.1 Internal Servicing' + channelId: 550 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} stageName: 'General_Testing_Publish' @@ -173,7 +250,6 @@ stages: - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} stageName: 'NETCore_Tooling_Dev_Publishing' @@ -186,7 +262,6 @@ stages: - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} stageName: 'NETCore_Tooling_Release_Publishing' @@ -196,28 +271,74 @@ stages: shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_301xx_Publishing' + channelName: '.NET Core SDK 3.0.1xx' + channelId: 556 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' + - template: \eng\common\templates\post-build\channels\generic-internal-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} - stageName: 'NET_Internal_Tooling_Publishing' - channelName: '.NET Internal Tooling' - channelId: 551 - transportFeed: 'https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/v3/index.json' - shippingFeed: 'https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/v3/index.json' - symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal-symbols/nuget/v3/index.json' + stageName: 'NETCore_SDK_301xx_Internal_Publishing' + channelName: '.NET Core SDK 3.0.1xx Internal' + channelId: 555 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-symbols/nuget/v3/index.json' - template: \eng\common\templates\post-build\channels\generic-public-channel.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} - stageName: 'NETCore_Experimental_Publishing' - channelName: '.NET Core Experimental' - channelId: 562 - transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json' - shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json' - symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental-symbols/nuget/v3/index.json' + stageName: 'NETCore_SDK_311xx_Publishing' + channelName: '.NET Core SDK 3.1.1xx' + channelId: 560 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_311xx_Internal_Publishing' + channelName: '.NET Core SDK 3.1.1xx Internal' + channelId: 559 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_312xx_Publishing' + channelName: '.NET Core SDK 3.1.2xx' + channelId: 558 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + +- template: \eng\common\templates\post-build\channels\generic-internal-channel.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'NETCore_SDK_312xx_Internal_Publishing' + channelName: '.NET Core SDK 3.1.2xx Internal' + channelId: 557 + transportFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-symbols/nuget/v3/index.json' \ No newline at end of file diff --git a/eng/common/templates/post-build/setup-maestro-vars.yml b/eng/common/templates/post-build/setup-maestro-vars.yml index 716b53f740..56242b068e 100644 --- a/eng/common/templates/post-build/setup-maestro-vars.yml +++ b/eng/common/templates/post-build/setup-maestro-vars.yml @@ -4,8 +4,6 @@ jobs: pool: vmImage: 'windows-2019' steps: - - checkout: none - - task: DownloadBuildArtifacts@0 displayName: Download Release Configs inputs: @@ -16,25 +14,5 @@ jobs: name: setReleaseVars displayName: Set Release Configs Vars inputs: - targetType: inline - script: | - try { - $Content = Get-Content $(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt - - $BarId = $Content | Select -Index 0 - - $Channels = "" - $Content | Select -Index 1 | ForEach-Object { $Channels += "$_ ," } - - $IsStableBuild = $Content | Select -Index 2 - - Write-Host "##vso[task.setvariable variable=BARBuildId;isOutput=true]$BarId" - Write-Host "##vso[task.setvariable variable=InitialChannels;isOutput=true]$Channels" - Write-Host "##vso[task.setvariable variable=IsStableBuild;isOutput=true]$IsStableBuild" - } - catch { - Write-Host $_ - Write-Host $_.Exception - Write-Host $_.ScriptStackTrace - exit 1 - } + filePath: $(Build.SourcesDirectory)/eng/common/post-build/setup-maestro-vars.ps1 + arguments: -ReleaseConfigsPath '$(Build.StagingDirectory)/ReleaseConfigs/ReleaseConfigs.txt' diff --git a/eng/common/templates/steps/publish-logs.yml b/eng/common/templates/steps/publish-logs.yml deleted file mode 100644 index f91751fe78..0000000000 --- a/eng/common/templates/steps/publish-logs.yml +++ /dev/null @@ -1,23 +0,0 @@ -parameters: - StageLabel: '' - JobLabel: '' - -steps: -- task: Powershell@2 - displayName: Prepare Binlogs to Upload - inputs: - targetType: inline - script: | - New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ - Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ - continueOnError: true - condition: always() - -- task: PublishBuildArtifacts@1 - displayName: Publish Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/PostBuildLogs' - PublishLocation: Container - ArtifactName: PostBuildLogs - continueOnError: true - condition: always() diff --git a/eng/common/templates/steps/send-to-helix.yml b/eng/common/templates/steps/send-to-helix.yml index 30becf01ea..05df886f55 100644 --- a/eng/common/templates/steps/send-to-helix.yml +++ b/eng/common/templates/steps/send-to-helix.yml @@ -23,7 +23,6 @@ parameters: EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set - HelixBaseUri: 'https://helix.dot.net/' # optional -- sets the Helix API base URI (allows targeting int) Creator: '' # optional -- if the build is external, use this to specify who is sending the job DisplayNamePrefix: 'Run Tests' # optional -- rename the beginning of the displayName of the steps in AzDO condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() @@ -56,7 +55,6 @@ steps: DotNetCliVersion: ${{ parameters.DotNetCliVersion }} EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} - HelixBaseUri: ${{ parameters.HelixBaseUri }} Creator: ${{ parameters.Creator }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT')) @@ -87,7 +85,6 @@ steps: DotNetCliVersion: ${{ parameters.DotNetCliVersion }} EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} - HelixBaseUri: ${{ parameters.HelixBaseUri }} Creator: ${{ parameters.Creator }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT')) diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index d3a432878e..92a053bd16 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -5,7 +5,7 @@ [bool]$ci = if (Test-Path variable:ci) { $ci } else { $false } # Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names. -[string]$configuration = if (Test-Path variable:configuration) { $configuration } else { 'Debug' } +[string]$configuration = if (Test-Path variable:configuration) { $configuration } else { "Debug" } # Set to true to output binary log from msbuild. Note that emitting binary log slows down the build. # Binary log must be enabled on CI. @@ -24,7 +24,7 @@ [bool]$restore = if (Test-Path variable:restore) { $restore } else { $true } # Adjusts msbuild verbosity level. -[string]$verbosity = if (Test-Path variable:verbosity) { $verbosity } else { 'minimal' } +[string]$verbosity = if (Test-Path variable:verbosity) { $verbosity } else { "minimal" } # Set to true to reuse msbuild nodes. Recommended to not reuse on CI. [bool]$nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { !$ci } @@ -41,23 +41,21 @@ # Enable repos to use a particular version of the on-line dotnet-install scripts. # default URL: https://dot.net/v1/dotnet-install.ps1 -[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { 'v1' } +[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { "v1" } # True to use global NuGet cache instead of restoring packages to repository-local directory. [bool]$useGlobalNuGetCache = if (Test-Path variable:useGlobalNuGetCache) { $useGlobalNuGetCache } else { !$ci } # An array of names of processes to stop on script exit if prepareMachine is true. -$processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @('msbuild', 'dotnet', 'vbcscompiler') } - -$disableConfigureToolsetImport = if (Test-Path variable:disableConfigureToolsetImport) { $disableConfigureToolsetImport } else { $null } +$processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @("msbuild", "dotnet", "vbcscompiler") } set-strictmode -version 2.0 -$ErrorActionPreference = 'Stop' +$ErrorActionPreference = "Stop" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 function Create-Directory([string[]] $path) { if (!(Test-Path $path)) { - New-Item -path $path -force -itemType 'Directory' | Out-Null + New-Item -path $path -force -itemType "Directory" | Out-Null } } @@ -98,10 +96,7 @@ function Exec-Process([string]$command, [string]$commandArgs) { } } -# createSdkLocationFile parameter enables a file being generated under the toolset directory -# which writes the sdk's location into. This is only necessary for cmd --> powershell invocations -# as dot sourcing isn't possible. -function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { +function InitializeDotNetCli([bool]$install) { if (Test-Path variable:global:_DotNetInstallDir) { return $global:_DotNetInstallDir } @@ -124,7 +119,7 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { # Find the first path on %PATH% that contains the dotnet.exe if ($useInstalledDotNetCli -and (-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -eq $null)) { - $dotnetCmd = Get-Command 'dotnet.exe' -ErrorAction SilentlyContinue + $dotnetCmd = Get-Command "dotnet.exe" -ErrorAction SilentlyContinue if ($dotnetCmd -ne $null) { $env:DOTNET_INSTALL_DIR = Split-Path $dotnetCmd.Path -Parent } @@ -137,13 +132,13 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { if ((-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -ne $null) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { - $dotnetRoot = Join-Path $RepoRoot '.dotnet' + $dotnetRoot = Join-Path $RepoRoot ".dotnet" if (-not (Test-Path(Join-Path $dotnetRoot "sdk\$dotnetSdkVersion"))) { if ($install) { InstallDotNetSdk $dotnetRoot $dotnetSdkVersion } else { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unable to find dotnet with SDK version '$dotnetSdkVersion'" + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unable to find dotnet with SDK version '$dotnetSdkVersion'" ExitWithExitCode 1 } } @@ -151,24 +146,6 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { $env:DOTNET_INSTALL_DIR = $dotnetRoot } - # Creates a temporary file under the toolset dir. - # The following code block is protecting against concurrent access so that this function can - # be called in parallel. - if ($createSdkLocationFile) { - do { - $sdkCacheFileTemp = Join-Path $ToolsetDir $([System.IO.Path]::GetRandomFileName()) - } - until (!(Test-Path $sdkCacheFileTemp)) - Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot - - try { - Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt' - } catch { - # Somebody beat us - Remove-Item -Path $sdkCacheFileTemp - } - } - # Add dotnet to PATH. This prevents any bare invocation of dotnet in custom # build steps from using anything other than what we've downloaded. # It also ensures that VS msbuild will use the downloaded sdk targets. @@ -177,6 +154,15 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { # Make Sure that our bootstrapped dotnet cli is available in future steps of the Azure Pipelines build Write-PipelinePrependPath -Path $dotnetRoot + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if ($ci) { + $env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20 + $env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20 + Write-PipelineSetVariable -Name 'NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS' -Value '20' + Write-PipelineSetVariable -Name 'NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS' -Value '20' + } + Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0' Write-PipelineSetVariable -Name 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE' -Value '1' @@ -184,7 +170,7 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { } function GetDotNetInstallScript([string] $dotnetRoot) { - $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $installScript = Join-Path $dotnetRoot "dotnet-install.ps1" if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit @@ -194,17 +180,17 @@ function GetDotNetInstallScript([string] $dotnetRoot) { return $installScript } -function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = '') { +function InstallDotNetSdk([string] $dotnetRoot, [string] $version, [string] $architecture = "") { InstallDotNet $dotnetRoot $version $architecture } function InstallDotNet([string] $dotnetRoot, [string] $version, - [string] $architecture = '', - [string] $runtime = '', + [string] $architecture = "", + [string] $runtime = "", [bool] $skipNonVersionedFiles = $false, - [string] $runtimeSourceFeed = '', - [string] $runtimeSourceFeedKey = '') { + [string] $runtimeSourceFeed = "", + [string] $runtimeSourceFeedKey = "") { $installScript = GetDotNetInstallScript $dotnetRoot $installParameters = @{ @@ -220,7 +206,7 @@ function InstallDotNet([string] $dotnetRoot, & $installScript @installParameters } catch { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from public location." + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet runtime '$runtime' from public location." # Only the runtime can be installed from a custom [private] location. if ($runtime -and ($runtimeSourceFeed -or $runtimeSourceFeedKey)) { @@ -236,7 +222,7 @@ function InstallDotNet([string] $dotnetRoot, & $installScript @installParameters } catch { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from custom location '$runtimeSourceFeed'." + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Failed to install dotnet runtime '$runtime' from custom location '$runtimeSourceFeed'." ExitWithExitCode 1 } } else { @@ -262,16 +248,16 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { '15.9' } + $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { "15.9" } $vsMinVersion = [Version]::new($vsMinVersionStr) # Try msbuild command available in the environment. if ($env:VSINSTALLDIR -ne $null) { - $msbuildCmd = Get-Command 'msbuild.exe' -ErrorAction SilentlyContinue + $msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue if ($msbuildCmd -ne $null) { # Workaround for https://github.com/dotnet/roslyn/issues/35793 # Due to this issue $msbuildCmd.Version returns 0.0.0.0 for msbuild.exe 16.2+ - $msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split([char[]]@('-', '+'))[0]) + $msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split(@('-', '+'))[0]) if ($msbuildVersion -ge $vsMinVersion) { return $global:_MSBuildExe = $msbuildCmd.Path @@ -291,20 +277,17 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = InitializeVisualStudioEnvironmentVariables $vsInstallDir $vsMajorVersion } else { - if (Get-Member -InputObject $GlobalJson.tools -Name 'xcopy-msbuild') { + if (Get-Member -InputObject $GlobalJson.tools -Name "xcopy-msbuild") { $xcopyMSBuildVersion = $GlobalJson.tools.'xcopy-msbuild' $vsMajorVersion = $xcopyMSBuildVersion.Split('.')[0] } else { $vsMajorVersion = $vsMinVersion.Major $xcopyMSBuildVersion = "$vsMajorVersion.$($vsMinVersion.Minor).0-alpha" } - - $vsInstallDir = $null - if ($xcopyMSBuildVersion.Trim() -ine "none") { - $vsInstallDir = InitializeXCopyMSBuild $xcopyMSBuildVersion $install - } + + $vsInstallDir = InitializeXCopyMSBuild $xcopyMSBuildVersion $install if ($vsInstallDir -eq $null) { - throw 'Unable to find Visual Studio that has required version and components installed' + throw "Unable to find Visual Studio that has required version and components installed" } } @@ -328,7 +311,7 @@ function InstallXCopyMSBuild([string]$packageVersion) { } function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { - $packageName = 'RoslynTools.MSBuild' + $packageName = "RoslynTools.MSBuild" $packageDir = Join-Path $ToolsDir "msbuild\$packageVersion" $packagePath = Join-Path $packageDir "$packageName.$packageVersion.nupkg" @@ -344,7 +327,7 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { Unzip $packagePath $packageDir } - return Join-Path $packageDir 'tools' + return Join-Path $packageDir "tools" } # @@ -361,32 +344,32 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { # or $null if no instance meeting the requirements is found on the machine. # function LocateVisualStudio([object]$vsRequirements = $null){ - if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { + if (Get-Member -InputObject $GlobalJson.tools -Name "vswhere") { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + $vswhereVersion = "2.5.2" } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" - $vsWhereExe = Join-Path $vsWhereDir 'vswhere.exe' + $vsWhereExe = Join-Path $vsWhereDir "vswhere.exe" if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere" Invoke-WebRequest "https://github.com/Microsoft/vswhere/releases/download/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $args = @('-latest', '-prerelease', '-format', 'json', '-requires', 'Microsoft.Component.MSBuild', '-products', '*') + $args = @("-latest", "-prerelease", "-format", "json", "-requires", "Microsoft.Component.MSBuild", "-products", "*") - if (Get-Member -InputObject $vsRequirements -Name 'version') { - $args += '-version' + if (Get-Member -InputObject $vsRequirements -Name "version") { + $args += "-version" $args += $vsRequirements.version } - if (Get-Member -InputObject $vsRequirements -Name 'components') { + if (Get-Member -InputObject $vsRequirements -Name "components") { foreach ($component in $vsRequirements.components) { - $args += '-requires' + $args += "-requires" $args += $component } } @@ -412,27 +395,27 @@ function InitializeBuildTool() { # Initialize dotnet cli if listed in 'tools' $dotnetRoot = $null - if (Get-Member -InputObject $GlobalJson.tools -Name 'dotnet') { + if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { $dotnetRoot = InitializeDotNetCli -install:$restore } - if ($msbuildEngine -eq 'dotnet') { + if ($msbuildEngine -eq "dotnet") { if (!$dotnetRoot) { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "/global.json must specify 'tools.dotnet'." + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "/global.json must specify 'tools.dotnet'." ExitWithExitCode 1 } - $buildTool = @{ Path = Join-Path $dotnetRoot 'dotnet.exe'; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'netcoreapp2.1' } + $buildTool = @{ Path = Join-Path $dotnetRoot "dotnet.exe"; Command = "msbuild"; Tool = "dotnet"; Framework = "netcoreapp2.1" } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore } catch { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ + Write-PipelineTelemetryError -Category "InitializeToolset" -Message $_ ExitWithExitCode 1 } $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" } } else { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 } @@ -441,15 +424,15 @@ function InitializeBuildTool() { function GetDefaultMSBuildEngine() { # Presence of tools.vs indicates the repo needs to build using VS msbuild on Windows. - if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { - return 'vs' + if (Get-Member -InputObject $GlobalJson.tools -Name "vs") { + return "vs" } - if (Get-Member -InputObject $GlobalJson.tools -Name 'dotnet') { - return 'dotnet' + if (Get-Member -InputObject $GlobalJson.tools -Name "dotnet") { + return "dotnet" } - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." ExitWithExitCode 1 } @@ -458,9 +441,9 @@ function GetNuGetPackageCachePath() { # Use local cache on CI to ensure deterministic build, # use global cache in dev builds to avoid cost of downloading packages. if ($useGlobalNuGetCache) { - $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages' + $env:NUGET_PACKAGES = Join-Path $env:UserProfile ".nuget\packages" } else { - $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages' + $env:NUGET_PACKAGES = Join-Path $RepoRoot ".packages" } } @@ -473,7 +456,7 @@ function GetSdkTaskProject([string]$taskName) { } function InitializeNativeTools() { - if (-Not (Test-Path variable:DisableNativeToolsetInstalls) -And (Get-Member -InputObject $GlobalJson -Name "native-tools")) { + if (Get-Member -InputObject $GlobalJson -Name "native-tools") { $nativeArgs= @{} if ($ci) { $nativeArgs = @{ @@ -502,14 +485,14 @@ function InitializeToolset() { } if (-not $restore) { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Toolset version $toolsetVersion has not been restored." + Write-PipelineTelemetryError -Category "InitializeToolset" -Message "Toolset version $toolsetVersion has not been restored." ExitWithExitCode 1 } $buildTool = InitializeBuildTool - $proj = Join-Path $ToolsetDir 'restore.proj' - $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'ToolsetRestore.binlog') } else { '' } + $proj = Join-Path $ToolsetDir "restore.proj" + $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "ToolsetRestore.binlog") } else { "" } '' | Set-Content $proj @@ -531,7 +514,7 @@ function ExitWithExitCode([int] $exitCode) { } function Stop-Processes() { - Write-Host 'Killing running build processes...' + Write-Host "Killing running build processes..." foreach ($processName in $processesToStopOnExit) { Get-Process -Name $processName -ErrorAction SilentlyContinue | Stop-Process } @@ -548,18 +531,13 @@ function MSBuild() { # Work around issues with Azure Artifacts credential provider # https://github.com/dotnet/arcade/issues/3932 - if ($ci -and $buildTool.Tool -eq 'dotnet') { + if ($ci -and $buildTool.Tool -eq "dotnet") { dotnet nuget locals http-cache -c - - $env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20 - $env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20 - Write-PipelineSetVariable -Name 'NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS' -Value '20' - Write-PipelineSetVariable -Name 'NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS' -Value '20' } $toolsetBuildProject = InitializeToolset $path = Split-Path -parent $toolsetBuildProject - $path = Join-Path $path (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll') + $path = Join-Path $path (Join-Path $buildTool.Framework "Microsoft.DotNet.Arcade.Sdk.dll") $args += "/logger:$path" } @@ -574,12 +552,12 @@ function MSBuild() { function MSBuild-Core() { if ($ci) { if (!$binaryLog) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Binary log must be enabled in CI build.' + Write-PipelineTaskError -Message "Binary log must be enabled in CI build." ExitWithExitCode 1 } if ($nodeReuse) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Node reuse must be disabled in CI build.' + Write-PipelineTaskError -Message "Node reuse must be disabled in CI build." ExitWithExitCode 1 } } @@ -589,10 +567,10 @@ function MSBuild-Core() { $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" if ($warnAsError) { - $cmdArgs += ' /warnaserror /p:TreatWarningsAsErrors=true' + $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true" } else { - $cmdArgs += ' /p:TreatWarningsAsErrors=false' + $cmdArgs += " /p:TreatWarningsAsErrors=false" } foreach ($arg in $args) { @@ -604,7 +582,7 @@ function MSBuild-Core() { $exitCode = Exec-Process $buildTool.Path $cmdArgs if ($exitCode -ne 0) { - Write-PipelineTelemetryError Category 'Build' -Message 'Build failed.' + Write-PipelineTaskError -Message "Build failed." $buildLog = GetMSBuildBinaryLogCommandLineArgument $args if ($buildLog -ne $null) { @@ -619,12 +597,12 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) { foreach ($argument in $arguments) { if ($argument -ne $null) { $arg = $argument.Trim() - if ($arg.StartsWith('/bl:', "OrdinalIgnoreCase")) { - return $arg.Substring('/bl:'.Length) + if ($arg.StartsWith("/bl:", "OrdinalIgnoreCase")) { + return $arg.Substring("/bl:".Length) } - if ($arg.StartsWith('/binaryLogger:', 'OrdinalIgnoreCase')) { - return $arg.Substring('/binaryLogger:'.Length) + if ($arg.StartsWith("/binaryLogger:", "OrdinalIgnoreCase")) { + return $arg.Substring("/binaryLogger:".Length) } } } @@ -634,14 +612,14 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) { . $PSScriptRoot\pipeline-logging-functions.ps1 -$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..') -$EngRoot = Resolve-Path (Join-Path $PSScriptRoot '..') -$ArtifactsDir = Join-Path $RepoRoot 'artifacts' -$ToolsetDir = Join-Path $ArtifactsDir 'toolset' -$ToolsDir = Join-Path $RepoRoot '.tools' -$LogDir = Join-Path (Join-Path $ArtifactsDir 'log') $configuration -$TempDir = Join-Path (Join-Path $ArtifactsDir 'tmp') $configuration -$GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot 'global.json') | ConvertFrom-Json +$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..\..") +$EngRoot = Resolve-Path (Join-Path $PSScriptRoot "..") +$ArtifactsDir = Join-Path $RepoRoot "artifacts" +$ToolsetDir = Join-Path $ArtifactsDir "toolset" +$ToolsDir = Join-Path $RepoRoot ".tools" +$LogDir = Join-Path (Join-Path $ArtifactsDir "log") $configuration +$TempDir = Join-Path (Join-Path $ArtifactsDir "tmp") $configuration +$GlobalJson = Get-Content -Raw -Path (Join-Path $RepoRoot "global.json") | ConvertFrom-Json # true if global.json contains a "runtimes" section $globalJsonHasRuntimes = if ($GlobalJson.tools.PSObject.Properties.Name -Match 'runtimes') { $true } else { $false } @@ -654,18 +632,3 @@ Write-PipelineSetVariable -Name 'Artifacts.Toolset' -Value $ToolsetDir Write-PipelineSetVariable -Name 'Artifacts.Log' -Value $LogDir Write-PipelineSetVariable -Name 'TEMP' -Value $TempDir Write-PipelineSetVariable -Name 'TMP' -Value $TempDir - -# Import custom tools configuration, if present in the repo. -# Note: Import in global scope so that the script set top-level variables without qualification. -if (!$disableConfigureToolsetImport) { - $configureToolsetScript = Join-Path $EngRoot 'configure-toolset.ps1' - if (Test-Path $configureToolsetScript) { - . $configureToolsetScript - if ((Test-Path variable:failOnConfigureToolsetError) -And $failOnConfigureToolsetError) { - if ((Test-Path variable:LastExitCode) -And ($LastExitCode -ne 0)) { - Write-PipelineTelemetryError -Category 'Build' -Message 'configure-toolset.ps1 returned a non-zero exit code' - ExitWithExitCode $LastExitCode - } - } - } -} diff --git a/eng/common/tools.sh b/eng/common/tools.sh index e071af4ee4..94965a8fd2 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -81,7 +81,7 @@ function ReadGlobalVersion { local pattern="\"$key\" *: *\"(.*)\"" if [[ ! $line =~ $pattern ]]; then - Write-PipelineTelemetryError -category 'Build' "Error: Cannot find \"$key\" in $global_json_file" + Write-PipelineTelemetryError -category 'InitializeToolset' "Error: Cannot find \"$key\" in $global_json_file" ExitWithExitCode 1 fi @@ -152,6 +152,15 @@ function InitializeDotNetCli { # build steps from using anything other than what we've downloaded. Write-PipelinePrependPath -path "$dotnet_root" + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if [[ "$ci" == true ]]; then + export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 + export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 + Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20" + Write-PipelineSetVariable -name "NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS" -value "20" + fi + Write-PipelineSetVariable -name "DOTNET_MULTILEVEL_LOOKUP" -value "0" Write-PipelineSetVariable -name "DOTNET_SKIP_FIRST_TIME_EXPERIENCE" -value "1" @@ -274,9 +283,6 @@ function GetNuGetPackageCachePath { } function InitializeNativeTools() { - if [[ -n "${DisableNativeToolsetInstalls:-}" ]]; then - return - fi if grep -Fq "native-tools" $global_json_file then local nativeArgs="" @@ -326,7 +332,7 @@ function InitializeToolset { local toolset_build_proj=`cat "$toolset_location_file"` if [[ ! -a "$toolset_build_proj" ]]; then - Write-PipelineTelemetryError -category 'Build' "Invalid toolset path: $toolset_build_proj" + Write-PipelineTelemetryError -category 'InitializeToolset' "Invalid toolset path: $toolset_build_proj" ExitWithExitCode 3 fi @@ -357,12 +363,7 @@ function MSBuild { # Work around issues with Azure Artifacts credential provider # https://github.com/dotnet/arcade/issues/3932 if [[ "$ci" == true ]]; then - "$_InitializeBuildTool" nuget locals http-cache -c - - export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 - export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 - Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20" - Write-PipelineSetVariable -name "NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS" -value "20" + dotnet nuget locals http-cache -c fi local toolset_dir="${_InitializeToolset%/*}" @@ -376,12 +377,12 @@ function MSBuild { function MSBuild-Core { if [[ "$ci" == true ]]; then if [[ "$binary_log" != true ]]; then - Write-PipelineTelemetryError -category 'Build' "Binary log must be enabled in CI build." + Write-PipelineTaskError "Binary log must be enabled in CI build." ExitWithExitCode 1 fi if [[ "$node_reuse" == true ]]; then - Write-PipelineTelemetryError -category 'Build' "Node reuse must be disabled in CI build." + Write-PipelineTaskError "Node reuse must be disabled in CI build." ExitWithExitCode 1 fi fi @@ -395,7 +396,7 @@ function MSBuild-Core { "$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || { local exit_code=$? - Write-PipelineTelemetryError -category 'Build' "Build failed (exit code '$exit_code')." + Write-PipelineTaskError "Build failed (exit code '$exit_code')." ExitWithExitCode $exit_code } } @@ -436,18 +437,3 @@ Write-PipelineSetVariable -name "Artifacts.Toolset" -value "$toolset_dir" Write-PipelineSetVariable -name "Artifacts.Log" -value "$log_dir" Write-PipelineSetVariable -name "Temp" -value "$temp_dir" Write-PipelineSetVariable -name "TMP" -value "$temp_dir" - -# Import custom tools configuration, if present in the repo. -if [ -z "${disable_configure_toolset_import:-}" ]; then - configure_toolset_script="$eng_root/configure-toolset.sh" - if [[ -a "$configure_toolset_script" ]]; then - . "$configure_toolset_script" - fi -fi - -# TODO: https://github.com/dotnet/arcade/issues/1468 -# Temporary workaround to avoid breaking change. -# Remove once repos are updated. -if [[ -n "${useInstalledDotNetCli:-}" ]]; then - use_installed_dotnet_cli="$useInstalledDotNetCli" -fi diff --git a/global.json b/global.json index 1a1f6368ff..f12de76387 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20051.1", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19616.5", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 0600685f4cf1711a3ce9b3aecd8ee4d4c6c86792 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 3 Jan 2020 16:00:00 -0800 Subject: [PATCH 156/214] dispose fsi at the end of a scripting session (#8084) --- src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 29cdf6d6d0..7cb7327a27 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -83,3 +83,4 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st stdin.Dispose() stdout.Dispose() stderr.Dispose() + (fsi :> IDisposable).Dispose() From 7f4293c10cb3be9cf08aa5e6a0c07eb89b4802ef Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 6 Jan 2020 11:03:21 -0800 Subject: [PATCH 157/214] Added static link tests and extended CompilerAssert (#8101) * Changed CompilerAssert to static class. Added Compile/Execute methods that take a Compilation description. Added static link tests * Hiding compilation description internals * Added another test to check for sanity * Making a few optional parameters * Hiding internals of CompilationReference --- .../CodeGen/EmittedIL/StaticLinkTests.fs | 227 +++++++++++++++ tests/fsharp/Compiler/CompilerAssert.fs | 265 ++++++++++++++---- tests/fsharp/FSharpSuite.Tests.fsproj | 1 + 3 files changed, 438 insertions(+), 55 deletions(-) create mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs new file mode 100644 index 0000000000..8d47ba7dd7 --- /dev/null +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs @@ -0,0 +1,227 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL + +open System.IO +open System.Reflection +open FSharp.Compiler.UnitTests +open NUnit.Framework + +[] +module StaticLinkTests = + + [] + let ``Static link simple library``() = + let module1 = + let source = + """ +module Module1 + +type C() = class end + """ + Compilation.Create(source, Fsx, Library) + + let module2 = + let source = + """ +let y = Module1.C() +printfn "%A" y + """ + Compilation.Create(source, Fsx, Exe, cmplRefs=[CompilationReference.CreateFSharp(module1, staticLink=true)]) + + CompilerAssert.Execute(module2, + beforeExecute=(fun _ deps -> + deps + |> List.iter (fun dep -> try File.Delete dep with | _ -> ()))) + + [] + let ``Simple exe should fail to execute if dependency was not found and is not statically linked``() = + let module1 = + let source = + """ +module Module1 + +type C() = class end + """ + Compilation.Create(source, Fsx, Library) + + let module2 = + let source = + """ +let y = Module1.C() +printfn "%A" y + """ + Compilation.Create(source, Fsx, Exe, cmplRefs=[CompilationReference.CreateFSharp module1]) + + Assert.Throws(fun _ -> + CompilerAssert.Execute(module2, + beforeExecute=(fun _ deps -> + deps + |> List.iter (fun dep -> try File.Delete dep with | _ -> ())))) |> ignore + + [] + let ``Simple exe should execute if dependency was found and is not statically linked``() = + let module1 = + let source = + """ +module Module1 + +type C() = class end + """ + Compilation.Create(source, Fsx, Library) + + let module2 = + let source = + """ +let y = Module1.C() +printfn "%A" y + """ + Compilation.Create(source, Fsx, Exe, cmplRefs=[CompilationReference.CreateFSharp module1]) + + CompilerAssert.Execute module2 + + [] + let ``Static link quotes in multiple modules``() = + let module1 = + let source = + """ +module Module1 + +module Test = + let inline run() = + <@ fun (output:'T[]) (input:'T[]) (length:int) -> + let start = 0 + let mutable i = start + while i < length do + output.[i] <- input.[i] + i <- i + 1 @> + + let bar() = + sprintf "%A" (run()) + +type C() = + + [] + static member F x = (C(), System.DateTime.Now) + """ + Compilation.Create(source, Fsx, Library) + + let module2 = + let source = + """ + +let a = Module1.Test.bar() +let b = sprintf "%A" (Module1.Test.run()) + +let test1 = (a=b) +type D() = + + [] + static member F x = (Module1.C(), D(), System.DateTime.Now) + + +let z2 = Quotations.Expr.TryGetReflectedDefinition(typeof.GetMethod("F")) +let s2 = (sprintf "%2000A" z2) +let test2 = (s2 = "Some Lambda (x, NewTuple (NewObject (C), PropertyGet (None, Now, [])))") + +let z3 = Quotations.Expr.TryGetReflectedDefinition(typeof.GetMethod("F")) +let s3 = (sprintf "%2000A" z3) +let test3 = (s3 = "Some Lambda (x, NewTuple (NewObject (C), NewObject (D), PropertyGet (None, Now, [])))") + +#if EXTRAS +// Add some references to System.ValueTuple, and add a test case which statically links this DLL +let test4 = struct (3,4) +let test5 = struct (z2,z3) +#endif + +if not test1 then + stdout.WriteLine "*** test1 FAILED"; + eprintf "FAILED, in-module result %s is different from out-module call %s" a b + +if not test2 then + stdout.WriteLine "*** test2 FAILED"; + eprintf "FAILED, %s is different from expected" s2 +if not test3 then + stdout.WriteLine "*** test3 FAILED"; + eprintf "FAILED, %s is different from expected" s3 + + +if test1 && test2 && test3 then () +else failwith "Test Failed" + """ + Compilation.Create(source, Fsx, Exe, cmplRefs=[CompilationReference.CreateFSharp(module1, staticLink=true)]) + + CompilerAssert.Execute(module2, ignoreWarnings=true) + + [] + let ``Static link quotes in multiple modules - optimized``() = + let module1 = + let source = + """ +module Module1 + +module Test = + let inline run() = + <@ fun (output:'T[]) (input:'T[]) (length:int) -> + let start = 0 + let mutable i = start + while i < length do + output.[i] <- input.[i] + i <- i + 1 @> + + let bar() = + sprintf "%A" (run()) + +type C() = + + [] + static member F x = (C(), System.DateTime.Now) + """ + Compilation.Create(source, Fsx, Library, [|"--optimize+"|]) + + let module2 = + let source = + """ + +let a = Module1.Test.bar() +let b = sprintf "%A" (Module1.Test.run()) + +let test1 = (a=b) +type D() = + + [] + static member F x = (Module1.C(), D(), System.DateTime.Now) + + +let z2 = Quotations.Expr.TryGetReflectedDefinition(typeof.GetMethod("F")) +let s2 = (sprintf "%2000A" z2) +let test2 = (s2 = "Some Lambda (x, NewTuple (NewObject (C), PropertyGet (None, Now, [])))") + +let z3 = Quotations.Expr.TryGetReflectedDefinition(typeof.GetMethod("F")) +let s3 = (sprintf "%2000A" z3) +let test3 = (s3 = "Some Lambda (x, NewTuple (NewObject (C), NewObject (D), PropertyGet (None, Now, [])))") + +#if EXTRAS +// Add some references to System.ValueTuple, and add a test case which statically links this DLL +let test4 = struct (3,4) +let test5 = struct (z2,z3) +#endif + +if not test1 then + stdout.WriteLine "*** test1 FAILED"; + eprintf "FAILED, in-module result %s is different from out-module call %s" a b + +if not test2 then + stdout.WriteLine "*** test2 FAILED"; + eprintf "FAILED, %s is different from expected" s2 +if not test3 then + stdout.WriteLine "*** test3 FAILED"; + eprintf "FAILED, %s is different from expected" s3 + + +if test1 && test2 && test3 then () +else failwith "Test Failed" + """ + Compilation.Create(source, Fsx, Exe, [|"--optimize+"|], [CompilationReference.CreateFSharp(module1, staticLink=true)]) + + CompilerAssert.Execute(module2, ignoreWarnings=true) \ No newline at end of file diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 1c753cd25e..11e886a055 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.UnitTests +[] +module FSharp.Compiler.UnitTests.CompilerAssert open System open System.Diagnostics @@ -29,17 +30,54 @@ type ILVerifier (dllFilePath: string) = member this.VerifyILWithLineNumbers (qualifiedItemName: string, expectedIL: string) = ILChecker.checkILItemWithLineNumbers qualifiedItemName dllFilePath [ expectedIL ] -[] -module CompilerAssert = +type Worker () = + inherit MarshalByRefObject() - let checker = FSharpChecker.Create(suggestNamesForErrors=true) + member x.ExecuteTestCase assemblyPath (deps: string[]) = + AppDomain.CurrentDomain.add_AssemblyResolve(ResolveEventHandler(fun _ args -> + deps + |> Array.tryFind (fun (x: string) -> Path.GetFileNameWithoutExtension x = args.Name) + |> Option.bind (fun x -> if File.Exists x then Some x else None) + |> Option.map Assembly.LoadFile + |> Option.defaultValue null)) + let asm = Assembly.LoadFrom(assemblyPath) + let entryPoint = asm.EntryPoint + (entryPoint.Invoke(Unchecked.defaultof, [||])) |> ignore - let private config = TestFramework.initializeSuite () +type SourceKind = + | Fs + | Fsx + +type CompileOutput = + | Library + | Exe + +type CompilationReference = private CompilationReference of Compilation * staticLink: bool with + + static member CreateFSharp(cmpl: Compilation, ?staticLink) = + let staticLink = defaultArg staticLink false + CompilationReference(cmpl, staticLink) + +and Compilation = private Compilation of string * SourceKind * CompileOutput * options: string[] * CompilationReference list with + + static member Create(source, sourceKind, output, ?options, ?cmplRefs) = + let options = defaultArg options [||] + let cmplRefs = defaultArg cmplRefs [] + Compilation(source, sourceKind, output, options, cmplRefs) + +[] +type CompilerAssert private () = + + static let checker = FSharpChecker.Create(suggestNamesForErrors=true) + + static let config = TestFramework.initializeSuite () + + static let _ = config |> ignore // Do a one time dotnet sdk build to compute the proper set of reference assemblies to pass to the compiler #if !NETCOREAPP #else - let projectFile = """ + static let projectFile = """ @@ -56,13 +94,13 @@ module CompilerAssert = """ - let programFs = """ + static let programFs = """ open System [] let main argv = 0""" - let getNetCoreAppReferences = + static let getNetCoreAppReferences = let mutable output = "" let mutable errors = "" let mutable cleanUp = true @@ -107,37 +145,35 @@ let main argv = 0""" #endif #if FX_NO_APP_DOMAINS - let executeBuiltApp assembly = + static let executeBuiltApp assembly deps = let ctxt = AssemblyLoadContext("ContextName", true) try let asm = ctxt.LoadFromAssemblyPath(assembly) let entryPoint = asm.EntryPoint + ctxt.add_Resolving(fun ctxt name -> + deps + |> List.tryFind (fun (x: string) -> Path.GetFileNameWithoutExtension x = name.Name) + |> Option.map ctxt.LoadFromAssemblyPath + |> Option.defaultValue null) (entryPoint.Invoke(Unchecked.defaultof, [||])) |> ignore finally ctxt.Unload() #else - type Worker () = - inherit MarshalByRefObject() - - member __.ExecuteTestCase assemblyPath = - let asm = Assembly.LoadFrom(assemblyPath) - let entryPoint = asm.EntryPoint - (entryPoint.Invoke(Unchecked.defaultof, [||])) |> ignore - let pathToThisDll = Assembly.GetExecutingAssembly().CodeBase + static let pathToThisDll = Assembly.GetExecutingAssembly().CodeBase - let adSetup = + static let adSetup = let setup = new System.AppDomainSetup () setup.PrivateBinPath <- pathToThisDll setup - let executeBuiltApp assembly = + static let executeBuiltApp assembly deps = let ad = AppDomain.CreateDomain((Guid()).ToString(), null, adSetup) let worker = (ad.CreateInstanceFromAndUnwrap(pathToThisDll, typeof.FullName)) :?> Worker - worker.ExecuteTestCase assembly |>ignore + worker.ExecuteTestCase assembly (deps |> Array.ofList) |>ignore #endif - let private defaultProjectOptions = + static let defaultProjectOptions = { ProjectFileName = "Z:\\test.fsproj" ProjectId = None @@ -159,27 +195,146 @@ let main argv = 0""" Stamp = None } - let private gate = obj () - - let private compile isExe options source f = - lock gate <| fun () -> - let inputFilePath = Path.ChangeExtension(Path.GetTempFileName(), ".fs") - let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then ".exe" else ".dll") - try - File.WriteAllText (inputFilePath, source) - let args = - options - |> Array.append defaultProjectOptions.OtherOptions - |> Array.append [| "fsc.exe"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] - let errors, _ = checker.Compile args |> Async.RunSynchronously - - f (errors, outputFilePath) + static let rawCompile inputFilePath outputFilePath isExe options source = + File.WriteAllText (inputFilePath, source) + let args = + options + |> Array.append defaultProjectOptions.OtherOptions + |> Array.append [| "fsc.exe"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] + let errors, _ = checker.Compile args |> Async.RunSynchronously - finally - try File.Delete inputFilePath with | _ -> () - try File.Delete outputFilePath with | _ -> () + errors, outputFilePath - let Pass (source: string) = + static let compileAux isExe options source f : unit = + let inputFilePath = Path.ChangeExtension(Path.GetTempFileName(), ".fs") + let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then ".exe" else ".dll") + try + f (rawCompile inputFilePath outputFilePath isExe options source) + finally + try File.Delete inputFilePath with | _ -> () + try File.Delete outputFilePath with | _ -> () + + static let compileDisposable isScript isExe options source = + let ext = + if isScript then ".fsx" + else ".fs" + let inputFilePath = Path.ChangeExtension(Path.GetTempFileName(), ext) + let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then ".exe" else ".dll") + let o = + { new IDisposable with + member _.Dispose() = + try File.Delete inputFilePath with | _ -> () + try File.Delete outputFilePath with | _ -> () } + try + o, rawCompile inputFilePath outputFilePath isExe options source + with + | _ -> + o.Dispose() + reraise() + + static let gate = obj () + + static let compile isExe options source f = + lock gate (fun _ -> compileAux isExe options source f) + + static let assertErrors ignoreWarnings (errors: FSharpErrorInfo[]) = + let errors = + if ignoreWarnings then + errors + |> Array.filter (fun error -> error.Severity <> FSharpErrorSeverity.Warning) + else + errors + if errors.Length > 0 then + Assert.Fail(sprintf "%A" errors) + + static let rec compileCompilationAux (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = + let compilationRefs, deps = + match cmpl with + | Compilation(_, _, _, _, cmpls) -> + let compiledRefs = + cmpls + |> List.map (fun cmpl -> + match cmpl with + | CompilationReference (cmpl, staticLink) -> + compileCompilationAux disposals ignoreWarnings cmpl, staticLink) + + let compilationRefs = + compiledRefs + |> List.map (fun (((errors, outputFilePath), _), staticLink) -> + assertErrors ignoreWarnings errors + let rOption = "-r:" + outputFilePath + if staticLink then + [rOption;"--staticlink:" + Path.GetFileNameWithoutExtension outputFilePath] + else + [rOption]) + |> List.concat + |> Array.ofList + + let deps = + compiledRefs + |> List.map (fun ((_, deps), _) -> deps) + |> List.concat + |> List.distinct + + compilationRefs, deps + + let isScript = + match cmpl with + | Compilation(_, kind, _, _, _) -> + match kind with + | Fs -> false + | Fsx -> true + + let isExe = + match cmpl with + | Compilation(_, _, output, _, _) -> + match output with + | Library -> false + | Exe -> true + + let source = + match cmpl with + | Compilation(source, _, _, _, _) -> source + + let options = + match cmpl with + | Compilation(_, _, _, options, _) -> options + + let disposal, res = compileDisposable isScript isExe (Array.append options compilationRefs) source + disposals.Add disposal + + let deps2 = + compilationRefs + |> Array.filter (fun x -> not (x.Contains("--staticlink"))) + |> Array.map (fun x -> x.Replace("-r:", String.Empty)) + |> List.ofArray + + res, (deps @ deps2) + + static let rec compileCompilation ignoreWarnings (cmpl: Compilation) f = + let disposals = ResizeArray() + try + f (compileCompilationAux disposals ignoreWarnings cmpl) + finally + disposals + |> Seq.iter (fun x -> x.Dispose()) + + static member Compile(cmpl: Compilation, ?ignoreWarnings) = + let ignoreWarnings = defaultArg ignoreWarnings false + lock gate (fun () -> + compileCompilation ignoreWarnings cmpl (fun ((errors, _), _) -> + assertErrors ignoreWarnings errors)) + + static member Execute(cmpl: Compilation, ?ignoreWarnings, ?beforeExecute) = + let ignoreWarnings = defaultArg ignoreWarnings false + let beforeExecute = defaultArg beforeExecute (fun _ _ -> ()) + lock gate (fun () -> + compileCompilation ignoreWarnings cmpl (fun ((errors, outputFilePath), deps) -> + assertErrors ignoreWarnings errors + beforeExecute outputFilePath deps + executeBuiltApp outputFilePath deps)) + + static member Pass (source: string) = lock gate <| fun () -> let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously @@ -191,7 +346,7 @@ let main argv = 0""" Assert.IsEmpty(typeCheckResults.Errors, sprintf "Type Check errors: %A" typeCheckResults.Errors) - let TypeCheckWithErrorsAndOptions options (source: string) expectedTypeErrors = + static member TypeCheckWithErrorsAndOptions options (source: string) expectedTypeErrors = lock gate <| fun () -> let parseResults, fileAnswer = checker.ParseAndCheckFileInProject( @@ -222,30 +377,30 @@ let main argv = 0""" Assert.AreEqual(expectedErrorMsg, info.Message, "expectedErrorMsg") ) - let TypeCheckWithErrors (source: string) expectedTypeErrors = - TypeCheckWithErrorsAndOptions [||] source expectedTypeErrors + static member TypeCheckWithErrors (source: string) expectedTypeErrors = + CompilerAssert.TypeCheckWithErrorsAndOptions [||] source expectedTypeErrors - let TypeCheckSingleErrorWithOptions options (source: string) (expectedServerity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = - TypeCheckWithErrorsAndOptions options source [| expectedServerity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] + static member TypeCheckSingleErrorWithOptions options (source: string) (expectedServerity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = + CompilerAssert.TypeCheckWithErrorsAndOptions options source [| expectedServerity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] - let TypeCheckSingleError (source: string) (expectedServerity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = - TypeCheckWithErrors source [| expectedServerity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] + static member TypeCheckSingleError (source: string) (expectedServerity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = + CompilerAssert.TypeCheckWithErrors source [| expectedServerity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] - let CompileExe (source: string) = + static member CompileExe (source: string) = compile true [||] source (fun (errors, _) -> if errors.Length > 0 then Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors)) - let CompileExeAndRun (source: string) = + static member CompileExeAndRun (source: string) = compile true [||] source (fun (errors, outputExe) -> if errors.Length > 0 then Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors) - executeBuiltApp outputExe + executeBuiltApp outputExe [] ) - let CompileLibraryAndVerifyILWithOptions options (source: string) (f: ILVerifier -> unit) = + static member CompileLibraryAndVerifyILWithOptions options (source: string) (f: ILVerifier -> unit) = compile false options source (fun (errors, outputFilePath) -> let errors = errors |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error) @@ -255,10 +410,10 @@ let main argv = 0""" f (ILVerifier outputFilePath) ) - let CompileLibraryAndVerifyIL (source: string) (f: ILVerifier -> unit) = - CompileLibraryAndVerifyILWithOptions [||] source f + static member CompileLibraryAndVerifyIL (source: string) (f: ILVerifier -> unit) = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [||] source f - let RunScript (source: string) (expectedErrorMessages: string list) = + static member RunScript (source: string) (expectedErrorMessages: string list) = lock gate <| fun () -> // Intialize output and input streams use inStream = new StringReader("") @@ -294,7 +449,7 @@ let main argv = 0""" Assert.AreEqual(expectedErrorMessage, errorMessage) ) - let ParseWithErrors (source: string) expectedParseErrors = + static member ParseWithErrors (source: string) expectedParseErrors = let sourceFileName = "test.fs" let parsingOptions = { FSharpParsingOptions.Default with SourceFiles = [| sourceFileName |] } let parseResults = checker.ParseFile(sourceFileName, SourceText.ofString source, parsingOptions) |> Async.RunSynchronously diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 563358e1a1..baec3523e1 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -34,6 +34,7 @@ + From 75ae876feed22a50ccaec21bd61a602317eb09a0 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 6 Jan 2020 11:27:46 -0800 Subject: [PATCH 158/214] Parameterize product version (#8031) * Parameterize Product details * fcs * Repack pkgdef --- FSharpBuild.Directory.Build.targets | 33 ++++++- fcs/build.fsx | 6 +- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 1 + .../FSharp.Build/Microsoft.FSharp.Targets | 1 + src/fsharp/FSharp.Build/SubstituteText.fs | 92 +++++++++++++++++++ .../Vsix/RegisterFsharpPackage.pkgdef | 2 +- .../VisualFSharpFull/VisualFSharpFull.csproj | 16 +++- .../ProjectSystem.fsproj | 9 ++ .../VSPackage.resx | 6 +- .../xlf/VSPackage.cs.xlf | 12 +-- .../xlf/VSPackage.de.xlf | 12 +-- .../xlf/VSPackage.es.xlf | 12 +-- .../xlf/VSPackage.fr.xlf | 12 +-- .../xlf/VSPackage.it.xlf | 12 +-- .../xlf/VSPackage.ja.xlf | 12 +-- .../xlf/VSPackage.ko.xlf | 12 +-- .../xlf/VSPackage.pl.xlf | 12 +-- .../xlf/VSPackage.pt-BR.xlf | 12 +-- .../xlf/VSPackage.ru.xlf | 12 +-- .../xlf/VSPackage.tr.xlf | 12 +-- .../xlf/VSPackage.zh-Hans.xlf | 12 +-- .../xlf/VSPackage.zh-Hant.xlf | 12 +-- 22 files changed, 229 insertions(+), 93 deletions(-) create mode 100644 src/fsharp/FSharp.Build/SubstituteText.fs diff --git a/FSharpBuild.Directory.Build.targets b/FSharpBuild.Directory.Build.targets index 7548cef7ac..3132ba1c97 100644 --- a/FSharpBuild.Directory.Build.targets +++ b/FSharpBuild.Directory.Build.targets @@ -1,4 +1,5 @@ + @@ -8,7 +9,7 @@ + BeforeTargets="AssignTargetPaths;BeforeBuild;GenerateFSharpTextResources"> <__TargetFilePath>@(NoneSubstituteText->'$(IntermediateOutputPath)%(Filename)%(Extension)') @@ -20,16 +21,19 @@ <_CopyToOutputDirectory Condition="'%(NoneSubstituteText.CopyToOutputDirectory)' != ''">%(NoneSubstituteText.CopyToOutputDirectory) <_CopyToOutputDirectory Condition="'%(NoneSubstituteText.CopyToOutputDirectory)' == ''">Never + + <_IncludeInVsix>false + <_IncludeInVsix Condition="'%(NoneSubstituteText.IncludeInVsix)' == 'true'">true - - + + @@ -61,4 +65,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/fcs/build.fsx b/fcs/build.fsx index 1c2528dd2e..af21298e7a 100644 --- a/fcs/build.fsx +++ b/fcs/build.fsx @@ -66,16 +66,16 @@ Target.create "Build" (fun _ -> runDotnet __SOURCE_DIRECTORY__ "build" "../src/buildtools/buildtools.proj -v n -c Proto" let fslexPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fslex/Proto/netcoreapp2.1/fslex.dll" let fsyaccPath = __SOURCE_DIRECTORY__ + "/../artifacts/bin/fsyacc/Proto/netcoreapp2.1/fsyacc.dll" - runDotnet __SOURCE_DIRECTORY__ "build" (sprintf "FSharp.Compiler.Service.sln -v n -c Release /p:FsLexPath=%s /p:FsYaccPath=%s" fslexPath fsyaccPath) + runDotnet __SOURCE_DIRECTORY__ "build" (sprintf "FSharp.Compiler.Service.sln -nodereuse:false -v n -c Release /p:DisableCompilerRedirection=true /p:FsLexPath=%s /p:FsYaccPath=%s" fslexPath fsyaccPath) ) Target.create "Test" (fun _ -> // This project file is used for the netcoreapp2.0 tests to work out reference sets - runDotnet __SOURCE_DIRECTORY__ "build" "../tests/projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0/Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj -v n /restore /p:DisableCompilerRedirection=true" + runDotnet __SOURCE_DIRECTORY__ "build" "../tests/projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0/Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj -nodereuse:false -v n /restore /p:DisableCompilerRedirection=true" // Now run the tests let logFilePath = Path.Combine(__SOURCE_DIRECTORY__, "..", "artifacts", "TestResults", "Release", "FSharp.Compiler.Service.Test.xml") - runDotnet __SOURCE_DIRECTORY__ "test" (sprintf "FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj --no-restore --no-build -v n -c Release --test-adapter-path . --logger \"nunit;LogFilePath=%s\"" logFilePath) + runDotnet __SOURCE_DIRECTORY__ "test" (sprintf "FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj --no-restore --no-build -nodereuse:false -v n -c Release --test-adapter-path . --logger \"nunit;LogFilePath=%s\"" logFilePath) ) Target.create "NuGet" (fun _ -> diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 76b9c7043e..f427453df9 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -26,6 +26,7 @@ + diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets index 8421c8ea50..0b51d7204f 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets @@ -29,6 +29,7 @@ this file. + true diff --git a/src/fsharp/FSharp.Build/SubstituteText.fs b/src/fsharp/FSharp.Build/SubstituteText.fs new file mode 100644 index 0000000000..16b8eab524 --- /dev/null +++ b/src/fsharp/FSharp.Build/SubstituteText.fs @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Build + +open System +open System.Collections +open System.IO +open Microsoft.Build.Framework +open Microsoft.Build.Utilities + +type SubstituteText () = + + let mutable _buildEngine : IBuildEngine = null + let mutable _hostObject : ITaskHost = null + + let mutable copiedFiles = new ResizeArray() + let mutable embeddedResources : ITaskItem[] = [||] + + [] + member this.EmbeddedResources + with get() = embeddedResources + and set(value) = embeddedResources <- value + + [] + member this.CopiedFiles + with get() = copiedFiles.ToArray() + + interface ITask with + member this.BuildEngine + with get() = _buildEngine + and set(value) = _buildEngine <- value + + member this.HostObject + with get() = _hostObject + and set(value) = _hostObject <- value + + member this.Execute() = + copiedFiles.Clear() + if not(isNull embeddedResources) then + for item in embeddedResources do + // Update ITaskItem metadata to point to new location + let sourcePath = item.GetMetadata("FullPath") + + let pattern1 = item.GetMetadata("Pattern1") + let pattern2 = item.GetMetadata("Pattern2") + + // Is there any replacement to do? + if not (String.IsNullOrWhiteSpace(pattern1) && String.IsNullOrWhiteSpace(pattern2)) then + if not(String.IsNullOrWhiteSpace(sourcePath)) then + try + let getTargetPathFrom key = + let md = item.GetMetadata(key) + let path = Path.GetDirectoryName(md) + let filename = Path.GetFileName(md) + let target = Path.Combine(path, @"..\resources", filename) + target + + // Copy from the location specified in Identity + let sourcePath=item.GetMetadata("Identity") + + // Copy to the location specified in TargetPath unless no TargetPath is provided, then use Identity + let targetPath= + let identityPath = getTargetPathFrom "Identity" + let intermediateTargetPath = item.GetMetadata("IntermediateTargetPath") + if not (String.IsNullOrWhiteSpace(intermediateTargetPath)) then + let filename = Path.GetFileName(identityPath) + let target = Path.Combine(intermediateTargetPath, filename) + target + else + identityPath + + item.ItemSpec <- targetPath + + // Transform file + let mutable contents = File.ReadAllText(sourcePath) + if not (String.IsNullOrWhiteSpace(pattern1)) then + let replacement = item.GetMetadata("Replacement1") + contents <- contents.Replace(pattern1, replacement) + if not (String.IsNullOrWhiteSpace(pattern2)) then + let replacement = item.GetMetadata("Replacement2") + contents <- contents.Replace(pattern2, replacement) + + let directory = Path.GetDirectoryName(targetPath) + if not(Directory.Exists(directory)) then + Directory.CreateDirectory(directory) |>ignore + + File.WriteAllText(targetPath, contents) + with + | _ -> () + + copiedFiles.Add(item) + true diff --git a/vsintegration/Vsix/RegisterFsharpPackage.pkgdef b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef index c4a9de29e2..3c029f496c 100644 --- a/vsintegration/Vsix/RegisterFsharpPackage.pkgdef +++ b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef @@ -55,7 +55,7 @@ "1"="{92EF0900-2251-11D2-B72E-0000F87572EF}" [$RootKey$\Packages\{91a04a73-4f2c-4e7c-ad38-c1a68e7da05c}] -"ProductVersion"="10.4" +"ProductVersion"="{{FSProductVersion}}" "ProductName"="Visual F#" "CompanyName"="Microsoft Corp." diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index 68b8b5e112..4455493877 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -14,16 +14,22 @@ Designer - - Always - true - RegisterFsharpPackage.pkgdef - + + + RegisterFsharpPackage.pkgdef + {{FSProductVersion}} + $(FSProductVersion) + {{FSLanguageVersion}} + $(FSLanguageVersion) + true + + PreserveNewest License.txt true + PreserveNewest FSharp.Data.TypeProviders.dll diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj index 7779a1a3f0..8408b7a298 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj @@ -24,13 +24,22 @@ Menus.ctmenu Designer + + + true Microsoft.VisualStudio.FSharp.ProjectSystem.FSharpSR true VSPackage Designer + $(IntermediateOutputPath)resources\ + {{FSProductVersion}} + $(FSProductVersion) + {{FSLanguageVersion}} + $(FSLanguageVersion) + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx index 0e636602e5..f29e74b9ec 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx @@ -464,10 +464,10 @@ Customizes the environment to maximize code editor screen space and improve the visibility of F# commands and tool windows. - Microsoft Visual F# Tools 10.4 for F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} 1.0 @@ -476,7 +476,7 @@ Microsoft Visual F# Tools - Visual F# Tools 10.4 for F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} F# Interactive diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf index e27841feae..f047f0cf58 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Nástroje Microsoft Visual F# 10.4 pro F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Nástroje Microsoft Visual F# {{FSProductVersion}} pro F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Nástroje Microsoft Visual F# 10.4 pro F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Nástroje Microsoft Visual F# {{FSProductVersion}} pro F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Nástroje Visual F# 10.4 pro F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Nástroje Visual F# {{FSProductVersion}} pro F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf index 57e31224de..cd550b5494 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 für f# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} für f# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 für f# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} für f# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 für F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} für F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf index 2ff3a9663b..2204dcdc7d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Herramientas de Microsoft Visual F# 10.4 para F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Herramientas de Microsoft Visual F# {{FSProductVersion}} para F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Herramientas de Microsoft Visual F# 10.4 para F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Herramientas de Microsoft Visual F# {{FSProductVersion}} para F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 para F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} para F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf index 0e5d733739..a7bedb7cc5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 pour F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} pour F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 pour F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} pour F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 pour F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} pour F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf index 6e93bc28a7..ba72bff02e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 per F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} per F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 per F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} per F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 per F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} per F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf index e0c79c4a2b..710b54d5b7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - F# 4.6 用 Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}} 用 Microsoft Visual F# Tools {{FSProductVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - F# 4.6 用 Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}} 用 Microsoft Visual F# Tools {{FSProductVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - F# 4.6 用 Visual F# Tools 10.4 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}} 用 Visual F# Tools {{FSProductVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf index 4133f5ea29..588d5e014b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - F# 4.6용 Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}}용 Microsoft Visual F# Tools {{FSProductVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - F# 4.6용 Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}}용 Microsoft Visual F# Tools {{FSProductVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - F# 4.6용 Visual F# Tools 10.4 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}}용 Visual F# Tools {{FSProductVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf index 5ae72d11dc..08a4b45dfb 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 dla języka F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} dla języka F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 dla języka F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} dla języka F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 dla języka F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} dla języka F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf index eb0221892a..6ae72d28fd 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 para F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} para F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 para F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} para F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 para F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} para F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf index 897d2db04f..418494b459 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 для F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} для F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 для F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} для F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 для F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} для F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf index b435f62c81..53643a6ae2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - F# 4.6 için Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}} için Microsoft Visual F# Tools {{FSProductVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - F# 4.6 için Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}} için Microsoft Visual F# Tools {{FSProductVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - F# 4.6 için Visual F# Araçları 10.4 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + F# {{FSLanguageVersion}} için Visual F# Araçları {{FSProductVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf index 24e4048ae2..4e3108b778 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 for F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - Microsoft Visual F# Tools 10.4 for F# 4.6 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - Visual F# Tools 10.4 for F# 4.6 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf index 326a36bb81..7eb95bad0a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf @@ -433,13 +433,13 @@ - Microsoft Visual F# Tools 10.4 for F# 4.6 - 適用於 F# 4.6 的 Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + 適用於 F# {{FSLanguageVersion}} 的 Microsoft Visual F# Tools {{FSProductVersion}} - Microsoft Visual F# Tools 10.4 for F# 4.6 - 適用於 F# 4.6 的 Microsoft Visual F# Tools 10.4 + Microsoft Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + 適用於 F# {{FSLanguageVersion}} 的 Microsoft Visual F# Tools {{FSProductVersion}} @@ -453,8 +453,8 @@ - Visual F# Tools 10.4 for F# 4.6 - 適用於 F# 4.6 的 Visual F# Tools 10.4 + Visual F# Tools {{FSProductVersion}} for F# {{FSLanguageVersion}} + 適用於 F# {{FSLanguageVersion}} 的 Visual F# Tools {{FSProductVersion}} From 99c5a49465e4d0f1291867d2cdd1910f3f14674d Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 6 Jan 2020 13:35:29 -0800 Subject: [PATCH 159/214] [Performance] Use TokenTup object pool to reduce allocations in LexFilter (#8058) * not working * more fixes * fix * a change * Pool now works in lex filter * Added checks * Added comment to maxSize * Minor comment on TokenTup --- src/fsharp/LexFilter.fs | 172 +++++++++++++++++++++++++++------------- 1 file changed, 117 insertions(+), 55 deletions(-) diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index a998dfd699..e2d316bd29 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -399,39 +399,66 @@ type LexbufState(startPos: Position, member x.EndPos = endPos member x.PastEOF = pastEOF -[] -type PositionTuple = - val X: Position - val Y: Position - new (x: Position, y: Position) = { X = x; Y = y } - /// Used to save the state related to a token +/// Treat as though this is read-only. [] type TokenTup = - val Token : token - val LexbufState : LexbufState - val LastTokenPos: PositionTuple + // This is mutable for performance reasons. + val mutable Token : token + val mutable LexbufState : LexbufState + val mutable LastTokenPos: Position new (token, state, lastTokenPos) = { Token=token; LexbufState=state;LastTokenPos=lastTokenPos } /// Returns starting position of the token member x.StartPos = x.LexbufState.StartPos /// Returns end position of the token member x.EndPos = x.LexbufState.EndPos - + +type TokenTupPool() = + + /// Arbitrary. + /// When parsing the compiler's source files, the pool didn't come close to reaching this limit. + /// Therefore, this seems like a reasonable limit to handle 99% of cases. + [] + let maxSize = 100 + + let stack = System.Collections.Generic.Stack(Array.init maxSize (fun _ -> TokenTup(Unchecked.defaultof<_>, Unchecked.defaultof<_>, Unchecked.defaultof<_>))) + + member _.Rent() = + if stack.Count = 0 then + assert false + TokenTup(Unchecked.defaultof<_>, Unchecked.defaultof<_>, Unchecked.defaultof<_>) + else + stack.Pop() + + member _.Return(x: TokenTup) = + x.Token <- Unchecked.defaultof<_> + x.LexbufState <- Unchecked.defaultof<_> + x.LastTokenPos <- Unchecked.defaultof<_> + if stack.Count >= maxSize then + assert false + else + stack.Push x + /// Returns a token 'tok' with the same position as this token - member x.UseLocation tok = + member pool.UseLocation(x: TokenTup, tok) = let tokState = x.LexbufState - TokenTup(tok, LexbufState(tokState.StartPos, tokState.EndPos, false), x.LastTokenPos) + let tokTup = pool.Rent() + tokTup.Token <- tok + tokTup.LexbufState <- LexbufState(tokState.StartPos, tokState.EndPos, false) + tokTup.LastTokenPos <- x.LastTokenPos + tokTup /// Returns a token 'tok' with the same position as this token, except that /// it is shifted by specified number of characters from the left and from the right /// Note: positive value means shift to the right in both cases - member x.UseShiftedLocation(tok, shiftLeft, shiftRight) = - let tokState = x.LexbufState - TokenTup(tok, LexbufState(tokState.StartPos.ShiftColumnBy shiftLeft, - tokState.EndPos.ShiftColumnBy shiftRight, false), x.LastTokenPos) - - + member pool.UseShiftedLocation(x: TokenTup, tok, shiftLeft, shiftRight) = + let tokState = x.LexbufState + let tokTup = pool.Rent() + tokTup.Token <- tok + tokTup.LexbufState <- LexbufState(tokState.StartPos.ShiftColumnBy shiftLeft, tokState.EndPos.ShiftColumnBy shiftRight, false) + tokTup.LastTokenPos <- x.LastTokenPos + tokTup //---------------------------------------------------------------------------- // Utilities for the tokenizer that are needed in other places @@ -541,6 +568,12 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | Parser.EOF _ -> tokenTup.LexbufState.StartPos.ColumnMinusOne | _ -> tokenTup.LexbufState.StartPos + //---------------------------------------------------------------------------- + // TokenTup pool + //-------------------------------------------------------------------------- + + let pool = TokenTupPool() + //---------------------------------------------------------------------------- // Part II. The state of the new lex stream object. //-------------------------------------------------------------------------- @@ -552,7 +585,6 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, let runWrappedLexerInConsistentLexbufState() = let state = if haveLexbufState then savedLexbufState else getLexbufState() setLexbufState state - let lastTokenStart = state.StartPos let lastTokenEnd = state.EndPos let token = lexer lexbuf // Now we've got the token, remember the lexbuf state, associating it with the token @@ -560,7 +592,12 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, let tokenLexbufState = getLexbufState() savedLexbufState <- tokenLexbufState haveLexbufState <- true - TokenTup(token, tokenLexbufState, PositionTuple(lastTokenStart, lastTokenEnd)) + + let tokenTup = pool.Rent() + tokenTup.Token <- token + tokenTup.LexbufState <- tokenLexbufState + tokenTup.LastTokenPos <- lastTokenEnd + tokenTup //---------------------------------------------------------------------------- // Fetch a raw token, either from the old lexer or from our delayedStack @@ -898,7 +935,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // and insert a HIGH_PRECEDENCE_PAREN_APP if not hasAfterOp && (match nextTokenIsAdjacentLParenOrLBrack lookaheadTokenTup with Some LPAREN -> true | _ -> false) then let dotTokenTup = peekNextTokenTup() - stack := (dotTokenTup.UseLocation(HIGH_PRECEDENCE_PAREN_APP), false) :: !stack + stack := (pool.UseLocation(dotTokenTup, HIGH_PRECEDENCE_PAREN_APP), false) :: !stack true | INFIX_COMPARE_OP (TyparsCloseOp(greaters, afterOp)) -> let nParen = nParen - greaters.Length @@ -912,7 +949,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // and insert a HIGH_PRECEDENCE_PAREN_APP if afterOp.IsNone && (match nextTokenIsAdjacentLParenOrLBrack lookaheadTokenTup with Some LPAREN -> true | _ -> false) then let dotTokenTup = peekNextTokenTup() - stack := (dotTokenTup.UseLocation(HIGH_PRECEDENCE_PAREN_APP), false) :: !stack + stack := (pool.UseLocation(dotTokenTup, HIGH_PRECEDENCE_PAREN_APP), false) :: !stack true | (LPAREN | LESS _ | LBRACK | LBRACK_LESS | INFIX_COMPARE_OP " scanAhead (nParen+1) @@ -967,22 +1004,27 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, if smash then match tokenTup.Token with | INFIX_COMPARE_OP " - delayToken (tokenTup.UseShiftedLocation(INFIX_STAR_DIV_MOD_OP "/", 1, 0)) - delayToken (tokenTup.UseShiftedLocation(LESS res, 0, -1)) + delayToken (pool.UseShiftedLocation(tokenTup, INFIX_STAR_DIV_MOD_OP "/", 1, 0)) + delayToken (pool.UseShiftedLocation(tokenTup, LESS res, 0, -1)) + pool.Return tokenTup | GREATER_BAR_RBRACK -> - delayToken (tokenTup.UseShiftedLocation(BAR_RBRACK, 1, 0)) - delayToken (tokenTup.UseShiftedLocation(GREATER res, 0, -2)) + delayToken (pool.UseShiftedLocation(tokenTup, BAR_RBRACK, 1, 0)) + delayToken (pool.UseShiftedLocation(tokenTup, GREATER res, 0, -2)) + pool.Return tokenTup | GREATER_RBRACK -> - delayToken (tokenTup.UseShiftedLocation(RBRACK, 1, 0)) - delayToken (tokenTup.UseShiftedLocation(GREATER res, 0, -1)) + delayToken (pool.UseShiftedLocation(tokenTup, RBRACK, 1, 0)) + delayToken (pool.UseShiftedLocation(tokenTup, GREATER res, 0, -1)) + pool.Return tokenTup | GREATER _ -> - delayToken (tokenTup.UseLocation(GREATER res)) + delayToken (pool.UseLocation(tokenTup, GREATER res)) + pool.Return tokenTup | (INFIX_COMPARE_OP (TyparsCloseOp(greaters, afterOp) as opstr)) -> match afterOp with | None -> () - | Some tok -> delayToken (tokenTup.UseShiftedLocation(tok, greaters.Length, 0)) + | Some tok -> delayToken (pool.UseShiftedLocation(tokenTup, tok, greaters.Length, 0)) for i = greaters.Length - 1 downto 0 do - delayToken (tokenTup.UseShiftedLocation(greaters.[i] res, i, -opstr.Length + i + 1)) + delayToken (pool.UseShiftedLocation(tokenTup, greaters.[i] res, i, -opstr.Length + i + 1)) + pool.Return tokenTup | _ -> delayToken tokenTup else delayToken tokenTup) @@ -1109,7 +1151,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // span of inserted token lasts from the col + 1 of the prev token // to the beginning of current token let lastTokenPos = - let pos = tokenTup.LastTokenPos.Y + let pos = tokenTup.LastTokenPos pos.ShiftColumnBy 1 returnToken (lexbufStateForInsertedDummyTokens (lastTokenPos, tokenTup.LexbufState.StartPos)) tok @@ -1235,7 +1277,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, popCtxt() effectsToDo <- (fun() -> if debug then dprintf "--> because %s is coming, inserting OBLOCKEND\n" keywordName - delayTokenNoProcessing (tokenTup.UseLocation OBLOCKEND)) :: effectsToDo + delayTokenNoProcessing (pool.UseLocation(tokenTup, OBLOCKEND))) :: effectsToDo | CtxtSeqBlock(_, _, NoAddBlockEnd) -> if debug then dprintf "--> because %s is coming, popping CtxtSeqBlock\n" keywordName popCtxt() @@ -1243,7 +1285,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, popCtxt() effectsToDo <- (fun() -> if debug then dprintf "--> because %s is coming, inserting ORIGHT_BLOCK_END\n" keywordName - delayTokenNoProcessing (tokenTup.UseLocation(ORIGHT_BLOCK_END))) :: effectsToDo + delayTokenNoProcessing (pool.UseLocation(tokenTup, ORIGHT_BLOCK_END))) :: effectsToDo | CtxtVanilla _ -> if debug then dprintf "--> because %s is coming, popping CtxtVanilla\n" keywordName popCtxt() @@ -1253,12 +1295,16 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // Why _six_ TYPE_COMING_SOON? It's rather arbitrary, this means we can recover from up to six unmatched parens before failing. The unit tests (with 91609 in the name) demonstrate this. // Don't "delayToken tokenTup", we are replacing it, so consume it. if debug then dprintf "inserting 6 copies of %+A before %+A\n" comingSoon isHere - delayTokenNoProcessing (tokenTup.UseLocation isHere) + delayTokenNoProcessing (pool.UseLocation(tokenTup, isHere)) for i in 1..6 do - delayTokenNoProcessing (tokenTup.UseLocation comingSoon) + delayTokenNoProcessing (pool.UseLocation(tokenTup, comingSoon)) for e in List.rev effectsToDo do e() // push any END tokens after pushing the TYPE_IS_HERE and TYPE_COMING_SOON stuff, so that they come before those in the token stream + let returnToken tokenLexbufState token = + pool.Return tokenTup + returnToken tokenLexbufState token + match token, offsideStack with // inserted faux tokens need no other processing | _ when tokensThatNeedNoProcessingCount > 0 -> @@ -1279,7 +1325,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // reset on ';;' rule. A ';;' terminates ALL entries | SEMICOLON_SEMICOLON, [] -> if debug then dprintf ";; scheduling a reset\n" - delayToken(tokenTup.UseLocation ORESET) + delayToken(pool.UseLocation(tokenTup, ORESET)) returnToken tokenLexbufState SEMICOLON_SEMICOLON | ORESET, [] -> @@ -1287,6 +1333,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // NOTE: The parser thread of F# Interactive will often be blocked on this call, e.g. after an entry has been // processed and we're waiting for the first token of the next entry. peekInitial() |> ignore + pool.Return tokenTup hwTokenFetch true @@ -1300,7 +1347,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, if tokenStartCol < offsidePos.Column then warn tokenTup (FSComp.SR.lexfltIncorrentIndentationOfIn()) popCtxt() // Make sure we queue a dummy token at this position to check if any other pop rules apply - delayToken(tokenTup.UseLocation(ODUMMY token)) + delayToken(pool.UseLocation(tokenTup, ODUMMY token)) returnToken tokenLexbufState (if blockLet then ODECLEND else token) // Balancing rule. Encountering a 'done' balances with a 'do'. i.e. even a non-offside 'done' closes a 'do' @@ -1309,7 +1356,8 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, if debug then dprintf "DONE at %a terminates CtxtDo(offsidePos=%a)\n" outputPos tokenStartPos outputPos offsidePos popCtxt() // reprocess as the DONE may close a DO context - delayToken(tokenTup.UseLocation ODECLEND) + delayToken(pool.UseLocation(tokenTup, ODECLEND)) + pool.Return tokenTup hwTokenFetch useBlockRule // Balancing rule. Encountering a ')' or '}' balances with a '(' or '{', even if not offside @@ -1318,7 +1366,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, if debug then dprintf "RPAREN/RBRACE/BAR_RBRACE/RBRACK/BAR_RBRACK/RQUOTE/END at %a terminates CtxtParen()\n" outputPos tokenStartPos popCtxt() // Queue a dummy token at this position to check if any closing rules apply - delayToken(tokenTup.UseLocation(ODUMMY token)) + delayToken(pool.UseLocation(tokenTup, ODUMMY token)) returnToken tokenLexbufState token // Balancing rule. Encountering a 'end' can balance with a 'with' but only when not offside @@ -1326,7 +1374,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, when not (tokenStartCol + 1 <= offsidePos.Column) -> if debug then dprintf "END at %a terminates CtxtWithAsAugment()\n" outputPos tokenStartPos popCtxt() - delayToken(tokenTup.UseLocation(ODUMMY token)) // make sure we queue a dummy token at this position to check if any closing rules apply + delayToken(pool.UseLocation(tokenTup, ODUMMY token)) // make sure we queue a dummy token at this position to check if any closing rules apply returnToken tokenLexbufState OEND // Transition rule. CtxtNamespaceHead ~~~> CtxtSeqBlock @@ -1698,6 +1746,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, insertComingSoonTokens("MODULE", MODULE_COMING_SOON, MODULE_IS_HERE) if debug then dprintf "MODULE: entering CtxtModuleHead, awaiting EQUALS to go to CtxtSeqBlock (%a)\n" outputPos tokenStartPos pushCtxt tokenTup (CtxtModuleHead (tokenStartPos, token)) + pool.Return tokenTup hwTokenFetch useBlockRule // exception ... ~~~> CtxtException @@ -1746,7 +1795,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | Some tok -> popCtxt() if debug then dprintf "--> inserting %+A\n" tok - delayTokenNoProcessing (tokenTup.UseLocation tok) + delayTokenNoProcessing (pool.UseLocation(tokenTup, tok)) // for the rest, we silently pop them | _ -> popCtxt() popCtxt() // pop CtxtMemberBody @@ -2034,7 +2083,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // if e1 then e2 // else if e3 then e4 // else if e5 then e6 - let _ = popNextTokenTup() + popNextTokenTup() |> pool.Return if debug then dprintf "ELSE IF: replacing ELSE IF with ELIF, pushing CtxtIf, CtxtVanilla(%a)\n" outputPos tokenStartPos pushCtxt tokenTup (CtxtIf tokenStartPos) returnToken tokenLexbufState ELIF @@ -2102,6 +2151,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, insertComingSoonTokens("TYPE", TYPE_COMING_SOON, TYPE_IS_HERE) if debug then dprintf "TYPE, pushing CtxtTypeDefns(%a)\n" outputPos tokenStartPos pushCtxt tokenTup (CtxtTypeDefns tokenStartPos) + pool.Return tokenTup hwTokenFetch useBlockRule | TRY, _ -> @@ -2120,6 +2170,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | ODUMMY(_), _ -> if debug then dprintf "skipping dummy token as no offside rules apply\n" + pool.Return tokenTup hwTokenFetch (useBlockRule) // Ordinary tokens start a vanilla block @@ -2142,32 +2193,35 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | Some LPAREN -> HIGH_PRECEDENCE_PAREN_APP | Some LBRACK -> HIGH_PRECEDENCE_BRACK_APP | _ -> failwith "unreachable" - delayToken(dotTokenTup.UseLocation hpa) + delayToken(pool.UseLocation(dotTokenTup, hpa)) delayToken tokenTup true // Insert HIGH_PRECEDENCE_TYAPP if needed | (DELEGATE | IDENT _ | IEEE64 _ | IEEE32 _ | DECIMAL _ | INT8 _ | INT16 _ | INT32 _ | INT64 _ | NATIVEINT _ | UINT8 _ | UINT16 _ | UINT32 _ | UINT64 _ | BIGNUM _) when peekAdjacentTypars false tokenTup -> let lessTokenTup = popNextTokenTup() - delayToken (lessTokenTup.UseLocation(match lessTokenTup.Token with LESS _ -> LESS true | _ -> failwith "unreachable")) + delayToken (pool.UseLocation(lessTokenTup, match lessTokenTup.Token with LESS _ -> LESS true | _ -> failwith "unreachable")) if debug then dprintf "softwhite inserting HIGH_PRECEDENCE_TYAPP at dotTokenPos = %a\n" outputPos (startPosOfTokenTup lessTokenTup) - delayToken (lessTokenTup.UseLocation(HIGH_PRECEDENCE_TYAPP)) + delayToken (pool.UseLocation(lessTokenTup, HIGH_PRECEDENCE_TYAPP)) delayToken (tokenTup) + pool.Return lessTokenTup true // Split this token to allow "1..2" for range specification | INT32_DOT_DOT (i, v) -> let dotDotPos = new LexbufState(tokenTup.EndPos.ShiftColumnBy(-2), tokenTup.EndPos, false) - delayToken(new TokenTup(DOT_DOT, dotDotPos, tokenTup.LastTokenPos)) - delayToken(tokenTup.UseShiftedLocation(INT32(i, v), 0, -2)) + delayToken(let rented = pool.Rent() in rented.Token <- DOT_DOT; rented.LexbufState <- dotDotPos; rented.LastTokenPos <- tokenTup.LastTokenPos; rented) + delayToken(pool.UseShiftedLocation(tokenTup, INT32(i, v), 0, -2)) + pool.Return tokenTup true // Split @>. and @@>. into two | RQUOTE_DOT (s, raw) -> let dotPos = new LexbufState(tokenTup.EndPos.ShiftColumnBy(-1), tokenTup.EndPos, false) - delayToken(new TokenTup(DOT, dotPos, tokenTup.LastTokenPos)) - delayToken(tokenTup.UseShiftedLocation(RQUOTE(s, raw), 0, -1)) + delayToken(let rented = pool.Rent() in rented.Token <- DOT; rented.LexbufState <- dotPos; rented.LastTokenPos <- tokenTup.LastTokenPos; rented) + delayToken(pool.UseShiftedLocation(tokenTup, RQUOTE(s, raw), 0, -1)) + pool.Return tokenTup true | MINUS | PLUS_MINUS_OP _ | PERCENT_OP _ | AMP | AMP_AMP @@ -2176,7 +2230,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | PERCENT_OP s -> (s = "%") || (s = "%%") | _ -> true) && nextTokenIsAdjacent tokenTup && - not (prevWasAtomicEnd && (tokenTup.LastTokenPos.Y = startPosOfTokenTup tokenTup))) -> + not (prevWasAtomicEnd && (tokenTup.LastTokenPos = startPosOfTokenTup tokenTup))) -> let plus = match tokenTup.Token with @@ -2189,7 +2243,10 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | _ -> false let nextTokenTup = popNextTokenTup() /// Merge the location of the prefix token and the literal - let delayMergedToken tok = delayToken(new TokenTup(tok, new LexbufState(tokenTup.LexbufState.StartPos, nextTokenTup.LexbufState.EndPos, nextTokenTup.LexbufState.PastEOF), tokenTup.LastTokenPos)) + let delayMergedToken tok = + delayToken(let rented = pool.Rent() in rented.Token <- tok; rented.LexbufState <- new LexbufState(tokenTup.LexbufState.StartPos, nextTokenTup.LexbufState.EndPos, nextTokenTup.LexbufState.PastEOF); rented.LastTokenPos <- tokenTup.LastTokenPos; rented) + pool.Return nextTokenTup + pool.Return tokenTup let noMerge() = let tokenName = match tokenTup.Token with @@ -2201,7 +2258,8 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | _ -> failwith "unreachable" let token = ADJACENT_PREFIX_OP tokenName delayToken nextTokenTup - delayToken (tokenTup.UseLocation token) + delayToken (pool.UseLocation(tokenTup, token)) + pool.Return tokenTup if plusOrMinus then match nextTokenTup.Token with @@ -2227,14 +2285,18 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, and pushCtxtSeqBlockAt(p: TokenTup, addBlockBegin, addBlockEnd) = if addBlockBegin then if debug then dprintf "--> insert OBLOCKBEGIN \n" - delayToken(p.UseLocation OBLOCKBEGIN) + delayToken(pool.UseLocation(p, OBLOCKBEGIN)) pushCtxt p (CtxtSeqBlock(FirstInSeqBlock, startPosOfTokenTup p, addBlockEnd)) let rec swTokenFetch() = let tokenTup = popNextTokenTup() let tokenReplaced = rulesForBothSoftWhiteAndHardWhite tokenTup if tokenReplaced then swTokenFetch() - else returnToken tokenTup.LexbufState tokenTup.Token + else + let lexbufState = tokenTup.LexbufState + let tok = tokenTup.Token + pool.Return tokenTup + returnToken lexbufState tok //---------------------------------------------------------------------------- // Part VI. Publish the new lexer function. From 317700eb8b845aa9e6bd8de6c63d5cae3d975289 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Tue, 7 Jan 2020 09:39:38 -0800 Subject: [PATCH 160/214] Added standalone tests (#8109) --- .../CodeGen/EmittedIL/StaticLinkTests.fs | 32 ++++++++++++++- tests/fsharp/Compiler/CompilerAssert.fs | 41 ++++++++++++++++++- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs index 8d47ba7dd7..ad5c9eda65 100644 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/StaticLinkTests.fs @@ -224,4 +224,34 @@ else failwith "Test Failed" """ Compilation.Create(source, Fsx, Exe, [|"--optimize+"|], [CompilationReference.CreateFSharp(module1, staticLink=true)]) - CompilerAssert.Execute(module2, ignoreWarnings=true) \ No newline at end of file + CompilerAssert.Execute(module2, ignoreWarnings=true) + + [] + let ``Standalone linking``() = + let source = + """ +module Module1 + +let _ = List.iter (fun s -> eprintf "%s" s) ["hello"; " "; "world"] +let _ = eprintfn "%s" "." +let _ = exit 0 + """ + + let module1 = Compilation.Create(source, Fsx, Exe, [|"--standalone"|]) + + CompilerAssert.Execute(module1, newProcess=true) + + [] + let ``Standalone linking - optimized``() = + let source = + """ +module Module1 + +let _ = List.iter (fun s -> eprintf "%s" s) ["hello"; " "; "world"] +let _ = eprintfn "%s" "." +let _ = exit 0 + """ + + let module1 = Compilation.Create(source, Fsx, Exe, [|"--standalone"; "--optimize+"|]) + + CompilerAssert.Execute(module1, newProcess=true) \ No newline at end of file diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 11e886a055..b06d40fc03 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -325,14 +325,51 @@ let main argv = 0""" compileCompilation ignoreWarnings cmpl (fun ((errors, _), _) -> assertErrors ignoreWarnings errors)) - static member Execute(cmpl: Compilation, ?ignoreWarnings, ?beforeExecute) = + static member Execute(cmpl: Compilation, ?ignoreWarnings, ?beforeExecute, ?newProcess) = let ignoreWarnings = defaultArg ignoreWarnings false let beforeExecute = defaultArg beforeExecute (fun _ _ -> ()) + let newProcess = defaultArg newProcess false lock gate (fun () -> compileCompilation ignoreWarnings cmpl (fun ((errors, outputFilePath), deps) -> assertErrors ignoreWarnings errors beforeExecute outputFilePath deps - executeBuiltApp outputFilePath deps)) + if newProcess then + let mutable pinfo = ProcessStartInfo() + pinfo.RedirectStandardError <- true + pinfo.RedirectStandardOutput <- true +#if !NETCOREAPP + pinfo.FileName <- outputFilePath +#else + pinfo.FileName <- "dotnet" + pinfo.Arguments <- outputFilePath + + let runtimeconfig = + """ +{ + "runtimeOptions": { + "tfm": "netcoreapp3.1", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "3.1.0" + } + } +} + """ + + let runtimeconfigPath = Path.ChangeExtension(outputFilePath, ".runtimeconfig.json") + File.WriteAllText(runtimeconfigPath, runtimeconfig) + use _disposal = + { new IDisposable with + member _.Dispose() = try File.Delete runtimeconfigPath with | _ -> () } +#endif + pinfo.UseShellExecute <- false + let p = Process.Start pinfo + let errors = p.StandardError.ReadToEnd() + Assert.True(p.WaitForExit(120000)) + if p.ExitCode <> 0 then + Assert.Fail errors + else + executeBuiltApp outputFilePath deps)) static member Pass (source: string) = lock gate <| fun () -> From f9ea5824a321a0df73675ad392458af79297f092 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Tue, 7 Jan 2020 12:01:45 -0800 Subject: [PATCH 161/214] Replace (nearly) all ref cells in the compiler with mutable values (#8063) * # This is a combination of 9 commits. # This is the 1st commit message: ref -> mutable in more places in the compiler # The commit message #2 will be skipped: # Update dependencies from https://github.com/dotnet/arcade build 20191229.1 # # - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19629.1 # The commit message #3 will be skipped: # Update dependencies from https://github.com/dotnet/arcade build 20191230.1 # # - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19630.1 # The commit message #4 will be skipped: # Update dependencies from https://github.com/dotnet/arcade build 20191231.1 # # - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19631.1 # The commit message #5 will be skipped: # Update dependencies from https://github.com/dotnet/arcade build 20200101.1 # # - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20051.1 # The commit message #6 will be skipped: # Update dependencies from https://github.com/dotnet/arcade build 20191216.5 (#8079) # # - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19616.5 # The commit message #7 will be skipped: # dispose fsi at the end of a scripting session (#8084) # # The commit message #8 will be skipped: # Added static link tests and extended CompilerAssert (#8101) # # * Changed CompilerAssert to static class. Added Compile/Execute methods that take a Compilation description. Added static link tests # # * Hiding compilation description internals # # * Added another test to check for sanity # # * Making a few optional parameters # # * Hiding internals of CompilationReference # The commit message #9 will be skipped: # Parameterize product version (#8031) # # * Parameterize Product details # # * fcs # # * Repack pkgdef * no ilread --- src/absil/ilascii.fs | 2 +- src/absil/ilascii.fsi | 2 +- src/absil/ildiag.fs | 14 +- src/absil/illib.fs | 18 +- src/absil/ilpars.fsy | 44 ++-- src/fsharp/CompileOps.fs | 56 ++--- src/fsharp/CompileOps.fsi | 2 +- src/fsharp/CompileOptions.fs | 25 +- src/fsharp/ConstraintSolver.fs | 6 +- src/fsharp/ErrorLogger.fs | 6 +- .../FSharp.Build/FSharpEmbedResourceText.fs | 14 +- src/fsharp/FSharp.Core/async.fs | 24 +- src/fsharp/FSharp.Core/eventmodule.fs | 12 +- src/fsharp/FSharp.Core/local.fs | 10 +- src/fsharp/FSharp.Core/map.fs | 4 +- src/fsharp/FSharp.Core/prim-types.fs | 12 +- src/fsharp/FSharp.Core/reflect.fs | 8 +- src/fsharp/FSharp.Core/seq.fs | 143 +++++------ src/fsharp/FSharp.Core/seqcore.fs | 28 +-- src/fsharp/FSharp.Core/set.fs | 14 +- src/fsharp/LegacyHostedCompilerForTesting.fs | 8 +- src/fsharp/LegacyMSBuildReferenceResolver.fs | 6 +- src/fsharp/LexFilter.fs | 14 +- src/fsharp/NameResolution.fs | 6 +- src/fsharp/PatternMatchCompilation.fs | 12 +- src/fsharp/TastOps.fs | 12 +- src/fsharp/TastPickle.fs | 12 +- src/fsharp/TcGlobals.fs | 2 +- src/fsharp/TypeChecker.fs | 68 +++--- src/fsharp/ast.fs | 2 +- src/fsharp/fsc.fs | 40 +-- src/fsharp/fsi/console.fs | 92 +++---- src/fsharp/fsi/fsi.fs | 74 +++--- src/fsharp/fsi/fsimain.fs | 14 +- src/fsharp/lex.fsl | 230 +++++++++--------- src/fsharp/lexhelp.fs | 2 +- src/fsharp/lexhelp.fsi | 2 +- src/fsharp/lib.fs | 17 +- src/fsharp/service/FSharpCheckerResults.fs | 12 +- src/fsharp/service/IncrementalBuild.fs | 6 +- src/fsharp/service/ServiceAssemblyContent.fs | 20 +- src/fsharp/service/ServiceLexing.fs | 8 +- src/fsharp/service/ServiceNavigation.fs | 16 +- src/fsharp/service/service.fs | 2 +- src/fsharp/tast.fs | 44 ++-- src/ilx/ilxsettings.fs | 8 +- src/utils/TaggedCollections.fs | 30 +-- src/utils/sformat.fs | 6 +- .../HashIfExpression.fs | 3 +- .../LanguageService/Tokenizer.fs | 8 +- vsintegration/src/FSharp.VS.FSI/sessions.fs | 6 +- 51 files changed, 618 insertions(+), 608 deletions(-) diff --git a/src/absil/ilascii.fs b/src/absil/ilascii.fs index 4bd48cb59b..e5b7782ba7 100644 --- a/src/absil/ilascii.fs +++ b/src/absil/ilascii.fs @@ -9,7 +9,7 @@ open FSharp.Compiler.AbstractIL.IL // set to the proper value at CompileOps.fs (BuildFrameworkTcImports) // Only relevant when compiling FSharp.Core.dll -let parseILGlobals = ref EcmaMscorlibILGlobals +let mutable parseILGlobals = EcmaMscorlibILGlobals /// Table of parsing and pretty printing data for instructions. let noArgInstrs = diff --git a/src/absil/ilascii.fsi b/src/absil/ilascii.fsi index 3a8543e4e1..67a5c9eb4b 100644 --- a/src/absil/ilascii.fsi +++ b/src/absil/ilascii.fsi @@ -14,7 +14,7 @@ open FSharp.Compiler.AbstractIL.IL // IL Parser state - must be initialized before parsing a module // -------------------------------------------------------------------- -val parseILGlobals: ILGlobals ref +val mutable parseILGlobals: ILGlobals // -------------------------------------------------------------------- // IL Lexer and pretty-printer tables diff --git a/src/absil/ildiag.fs b/src/absil/ildiag.fs index 1cd20ad875..d43bdf8dca 100644 --- a/src/absil/ildiag.fs +++ b/src/absil/ildiag.fs @@ -5,18 +5,18 @@ module internal FSharp.Compiler.AbstractIL.Diagnostics -let diagnosticsLog = ref (Some stdout) +let mutable diagnosticsLog = Some stdout -let setDiagnosticsChannel s = diagnosticsLog := s +let setDiagnosticsChannel s = diagnosticsLog <- s -let dflushn () = match !diagnosticsLog with None -> () | Some d -> d.WriteLine(); d.Flush() -let dflush () = match !diagnosticsLog with None -> () | Some d -> d.Flush() +let dflushn () = match diagnosticsLog with None -> () | Some d -> d.WriteLine(); d.Flush() +let dflush () = match diagnosticsLog with None -> () | Some d -> d.Flush() let dprintn (s:string) = - match !diagnosticsLog with None -> () | Some d -> d.Write s; d.Write "\n"; dflush() + match diagnosticsLog with None -> () | Some d -> d.Write s; d.Write "\n"; dflush() let dprintf (fmt: Format<_,_,_,_>) = - Printf.kfprintf dflush (match !diagnosticsLog with None -> System.IO.TextWriter.Null | Some d -> d) fmt + Printf.kfprintf dflush (match diagnosticsLog with None -> System.IO.TextWriter.Null | Some d -> d) fmt let dprintfn (fmt: Format<_,_,_,_>) = - Printf.kfprintf dflushn (match !diagnosticsLog with None -> System.IO.TextWriter.Null | Some d -> d) fmt + Printf.kfprintf dflushn (match diagnosticsLog with None -> System.IO.TextWriter.Null | Some d -> d) fmt diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 9a84e94e34..33e0566a6c 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -47,15 +47,15 @@ let LOH_SIZE_THRESHOLD_BYTES = 80_000 // Library: ReportTime //--------------------------------------------------------------------- let reportTime = - let tFirst = ref None - let tPrev = ref None + let mutable tFirst =None + let mutable tPrev = None fun showTimes descr -> if showTimes then let t = Process.GetCurrentProcess().UserProcessorTime.TotalSeconds - let prev = match !tPrev with None -> 0.0 | Some t -> t - let first = match !tFirst with None -> (tFirst := Some t; t) | Some t -> t + let prev = match tPrev with None -> 0.0 | Some t -> t + let first = match tFirst with None -> (tFirst <- Some t; t) | Some t -> t printf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr - tPrev := Some t + tPrev <- Some t //------------------------------------------------------------------------- // Library: projections @@ -573,10 +573,10 @@ module String = let getLines (str: string) = use reader = new StringReader(str) [| - let line = ref (reader.ReadLine()) - while not (isNull !line) do - yield !line - line := reader.ReadLine() + let mutable line = reader.ReadLine() + while not (isNull line) do + yield line + line <- reader.ReadLine() if str.EndsWithOrdinal("\n") then // last trailing space not returned // http://stackoverflow.com/questions/19365404/stringreader-omits-trailing-linebreak diff --git a/src/absil/ilpars.fsy b/src/absil/ilpars.fsy index 849c5f9fd1..e831677e50 100644 --- a/src/absil/ilpars.fsy +++ b/src/absil/ilpars.fsy @@ -33,7 +33,7 @@ let resolveCurrentMethodSpecScope obj = let findSystemRuntimeAssemblyRef() = - match (!parseILGlobals).primaryAssemblyScopeRef with + match parseILGlobals.primaryAssemblyScopeRef with | ILScopeRef.Assembly aref -> aref | _ -> pfailwith "systemRuntimeScopeRef not set to valid assembly reference in parseILGlobals" @@ -235,9 +235,9 @@ callKind: *---------------------------------------------*/ typ: STRING - { noMethodSpecScope (!parseILGlobals).typ_String } + { noMethodSpecScope parseILGlobals.typ_String } | OBJECT - { noMethodSpecScope (!parseILGlobals).typ_Object } + { noMethodSpecScope parseILGlobals.typ_Object } | CLASS typeNameInst { resolveMethodSpecScopeThen $2 (fun tspec -> noMethodSpecScope (mkILBoxedType tspec)) } @@ -256,45 +256,45 @@ typ: STRING | typ STAR { resolveMethodSpecScopeThen $1 (fun ty -> noMethodSpecScope (ILType.Ptr ty)) } | CHAR - { noMethodSpecScope (!parseILGlobals).typ_Char } + { noMethodSpecScope parseILGlobals.typ_Char } | VOID { noMethodSpecScope ILType.Void } | BOOL - { noMethodSpecScope (!parseILGlobals).typ_Bool } + { noMethodSpecScope parseILGlobals.typ_Bool } | INT8 - { noMethodSpecScope (!parseILGlobals).typ_SByte } + { noMethodSpecScope parseILGlobals.typ_SByte } | INT16 - { noMethodSpecScope (!parseILGlobals).typ_Int16 } + { noMethodSpecScope parseILGlobals.typ_Int16 } | INT32 - { noMethodSpecScope (!parseILGlobals).typ_Int32 } + { noMethodSpecScope parseILGlobals.typ_Int32 } | INT64 - { noMethodSpecScope (!parseILGlobals).typ_Int64 } + { noMethodSpecScope parseILGlobals.typ_Int64 } | FLOAT32 - { noMethodSpecScope (!parseILGlobals).typ_Single } + { noMethodSpecScope parseILGlobals.typ_Single } | FLOAT64 - { noMethodSpecScope (!parseILGlobals).typ_Double } + { noMethodSpecScope parseILGlobals.typ_Double } | UNSIGNED INT8 - { noMethodSpecScope (!parseILGlobals).typ_Byte } + { noMethodSpecScope parseILGlobals.typ_Byte } | UNSIGNED INT16 - { noMethodSpecScope (!parseILGlobals).typ_UInt16 } + { noMethodSpecScope parseILGlobals.typ_UInt16 } | UNSIGNED INT32 - { noMethodSpecScope (!parseILGlobals).typ_UInt32 } + { noMethodSpecScope parseILGlobals.typ_UInt32 } | UNSIGNED INT64 - { noMethodSpecScope (!parseILGlobals).typ_UInt64 } + { noMethodSpecScope parseILGlobals.typ_UInt64 } | UINT8 - { noMethodSpecScope (!parseILGlobals).typ_Byte } + { noMethodSpecScope parseILGlobals.typ_Byte } | UINT16 - { noMethodSpecScope (!parseILGlobals).typ_UInt16 } + { noMethodSpecScope parseILGlobals.typ_UInt16 } | UINT32 - { noMethodSpecScope (!parseILGlobals).typ_UInt32 } + { noMethodSpecScope parseILGlobals.typ_UInt32 } | UINT64 - { noMethodSpecScope (!parseILGlobals).typ_UInt64 } + { noMethodSpecScope parseILGlobals.typ_UInt64 } | NATIVE INT - { noMethodSpecScope (!parseILGlobals).typ_IntPtr } + { noMethodSpecScope parseILGlobals.typ_IntPtr } | NATIVE UNSIGNED INT - { noMethodSpecScope (!parseILGlobals).typ_UIntPtr } + { noMethodSpecScope parseILGlobals.typ_UIntPtr } | NATIVE UINT - { noMethodSpecScope (!parseILGlobals).typ_UIntPtr } + { noMethodSpecScope parseILGlobals.typ_UIntPtr } | BANG int32 { noMethodSpecScope (ILType.TypeVar (uint16 ( $2))) } diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 45d93c5cec..067d3353a6 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2479,7 +2479,7 @@ type AssemblyResolution = resolvedPath: string prepareToolTip: unit -> string sysdir: bool - ilAssemblyRef: ILAssemblyRef option ref + mutable ilAssemblyRef: ILAssemblyRef option } override this.ToString() = sprintf "%s%s" (if this.sysdir then "[sys]" else "") this.resolvedPath @@ -2494,7 +2494,7 @@ type AssemblyResolution = // member this.GetILAssemblyRef(ctok, reduceMemoryUsage, tryGetMetadataSnapshot) = cancellable { - match !this.ilAssemblyRef with + match this.ilAssemblyRef with | Some assemblyRef -> return assemblyRef | None -> let! assemblyRefOpt = @@ -2522,7 +2522,7 @@ type AssemblyResolution = tryGetMetadataSnapshot = tryGetMetadataSnapshot } use reader = OpenILModuleReader this.resolvedPath readerSettings mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly - this.ilAssemblyRef := Some assemblyRef + this.ilAssemblyRef <- Some assemblyRef return assemblyRef } @@ -2892,7 +2892,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = resolvedPath = resolved prepareToolTip = (fun () -> resolved) sysdir = sysdir - ilAssemblyRef = ref None } + ilAssemblyRef = None } | None -> if String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase)=0 @@ -2927,7 +2927,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let line(append: string) = append.Trim([|' '|])+"\n" line resolved + line fusionName) sysdir = sysdir - ilAssemblyRef = ref None } + ilAssemblyRef = None } | None -> None else None @@ -3057,7 +3057,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = resolvedPath=canonicalItemSpec prepareToolTip = (fun () -> resolvedFile.prepareToolTip (originalReference.Text, canonicalItemSpec)) sysdir= tcConfig.IsSystemAssembly canonicalItemSpec - ilAssemblyRef = ref None }) + ilAssemblyRef = None }) (maxIndexOfReference, assemblyResolutions)) // When calculating the resulting resolutions, we're going to use the index of the reference @@ -3395,7 +3395,7 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp try let skip = true in (* don't report whitespace from lexer *) let lightSyntaxStatus = LightSyntaxStatus (tcConfig.ComputeLightSyntaxInitialStatus filename, true) - let lexargs = mkLexargs (filename, conditionalCompilationDefines@tcConfig.conditionalCompilationDefines, lightSyntaxStatus, lexResourceManager, ref [], errorLogger, tcConfig.pathMap) + let lexargs = mkLexargs (filename, conditionalCompilationDefines@tcConfig.conditionalCompilationDefines, lightSyntaxStatus, lexResourceManager, [], errorLogger, tcConfig.pathMap) let shortFilename = SanitizeFileName filename tcConfig.implicitIncludeDir let input = Lexhelp.usingLexbufForParsing (lexbuf, filename) (fun lexbuf -> @@ -3525,24 +3525,24 @@ type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, let frameworkDLLs, nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) let unresolved = resolutions.GetUnresolvedReferences() #if DEBUG - let itFailed = ref false + let mutable itFailed = false let addedText = "\nIf you want to debug this right now, attach a debugger, and put a breakpoint in 'CompileOps.fs' near the text '!itFailed', and you can re-step through the assembly resolution logic." unresolved |> List.iter (fun (UnresolvedAssemblyReference(referenceText, _ranges)) -> if referenceText.Contains("mscorlib") then System.Diagnostics.Debug.Assert(false, sprintf "whoops, did not resolve mscorlib: '%s'%s" referenceText addedText) - itFailed := true) + itFailed <- true) frameworkDLLs |> List.iter (fun x -> if not(FileSystem.IsPathRootedShim(x.resolvedPath)) then System.Diagnostics.Debug.Assert(false, sprintf "frameworkDLL should be absolute path: '%s'%s" x.resolvedPath addedText) - itFailed := true) + itFailed <- true) nonFrameworkReferences |> List.iter (fun x -> if not(FileSystem.IsPathRootedShim(x.resolvedPath)) then System.Diagnostics.Debug.Assert(false, sprintf "nonFrameworkReference should be absolute path: '%s'%s" x.resolvedPath addedText) - itFailed := true) - if !itFailed then + itFailed <- true) + if itFailed then // idea is, put a breakpoint here and then step through let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, []) @@ -4207,9 +4207,9 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let systemRuntimeContainsType = // NOTE: do not touch this, edit: but we did, we had no choice - TPs cannot hold a strong reference on TcImports "ever". let tcImports = tcImportsWeak - let systemRuntimeContainsTypeRef = ref (fun typeName -> tcImports.SystemRuntimeContainsType typeName) - tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> systemRuntimeContainsTypeRef := (fun _ -> raise (System.ObjectDisposedException("The type provider has been disposed")))) - fun arg -> systemRuntimeContainsTypeRef.Value arg + let mutable systemRuntimeContainsTypeRef = fun typeName -> tcImports.SystemRuntimeContainsType typeName + tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> systemRuntimeContainsTypeRef <- fun _ -> raise (System.ObjectDisposedException("The type provider has been disposed"))) + fun arg -> systemRuntimeContainsTypeRef arg let providers = [ for designTimeAssemblyName in designTimeAssemblyNames do @@ -4676,7 +4676,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse error(InternalError("BuildFrameworkTcImports: no successful import of "+coreLibraryResolution.resolvedPath, coreLibraryResolution.originalReference.Range)) | None -> error(InternalError(sprintf "BuildFrameworkTcImports: no resolution of '%s'" coreLibraryReference.Text, rangeStartup)) - IlxSettings.ilxFsharpCoreLibAssemRef := + IlxSettings.ilxFsharpCoreLibAssemRef <- (let scoref = fslibCcuInfo.ILScopeRef match scoref with | ILScopeRef.Assembly aref -> Some aref @@ -4691,11 +4691,11 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #if DEBUG // the global_g reference cell is used only for debug printing - global_g := Some tcGlobals + global_g <- Some tcGlobals #endif // do this prior to parsing, since parsing IL assembly code may refer to mscorlib #if !NO_INLINE_IL_PARSER - FSharp.Compiler.AbstractIL.Internal.AsciiConstants.parseILGlobals := tcGlobals.ilg + FSharp.Compiler.AbstractIL.Internal.AsciiConstants.parseILGlobals <- tcGlobals.ilg #endif frameworkTcImports.SetTcGlobals tcGlobals return tcGlobals, frameworkTcImports @@ -5035,8 +5035,8 @@ module private ScriptPreprocessClosure = (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = let tcConfigB = tcConfig.CloneOfOriginalBuilder - let nowarns = ref [] - let getWarningNumber = fun () (m, s) -> nowarns := (s, m) :: !nowarns + let mutable nowarns = [] + let getWarningNumber = fun () (m, s) -> nowarns <- (s, m) :: nowarns let addReferencedAssemblyByPath = fun () (m, s) -> tcConfigB.AddReferencedAssemblyByPath(m, s) let addLoadedSource = fun () (m, s) -> tcConfigB.AddLoadedSource(m, s, pathOfMetaCommandSource) try @@ -5056,7 +5056,7 @@ module private ScriptPreprocessClosure = (closureSources, tcConfig: TcConfig, codeContext, lexResourceManager: Lexhelp.LexResourceManager) = - let tcConfig = ref tcConfig + let mutable tcConfig = tcConfig let observedSources = Observed() let rec loop (ClosureSource(filename, m, sourceText, parseRequired)) = @@ -5067,7 +5067,7 @@ module private ScriptPreprocessClosure = let parseResult, parseDiagnostics = let errorLogger = CapturingErrorLogger("FindClosureParse") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let result = ParseScriptText (filename, sourceText, !tcConfig, codeContext, lexResourceManager, errorLogger) + let result = ParseScriptText (filename, sourceText, tcConfig, codeContext, lexResourceManager, errorLogger) result, errorLogger.Diagnostics match parseResult with @@ -5075,12 +5075,12 @@ module private ScriptPreprocessClosure = let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) let pathOfMetaCommandSource = Path.GetDirectoryName filename - let preSources = (!tcConfig).GetAvailableLoadedSources() + let preSources = tcConfig.GetAvailableLoadedSources() - let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (!tcConfig, parsedScriptAst, pathOfMetaCommandSource) - tcConfig := tcConfigResult // We accumulate the tcConfig in order to collect assembly references + let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig, parsedScriptAst, pathOfMetaCommandSource) + tcConfig <- tcConfigResult // We accumulate the tcConfig in order to collect assembly references - let postSources = (!tcConfig).GetAvailableLoadedSources() + let postSources = tcConfig.GetAvailableLoadedSources() let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] //for (_, subFile) in sources do @@ -5094,7 +5094,7 @@ module private ScriptPreprocessClosure = yield ClosureFile(subFile, m, None, [], [], []) //printfn "yielding source %s" filename - yield ClosureFile(filename, m, Some parsedScriptAst, parseDiagnostics, errorLogger.Diagnostics, !noWarns) + yield ClosureFile(filename, m, Some parsedScriptAst, parseDiagnostics, errorLogger.Diagnostics, noWarns) | None -> //printfn "yielding source %s (failed parse)" filename @@ -5104,7 +5104,7 @@ module private ScriptPreprocessClosure = //printfn "yielding non-script source %s" filename yield ClosureFile(filename, m, None, [], [], []) ] - closureSources |> List.collect loop, !tcConfig + closureSources |> List.collect loop, tcConfig /// Reduce the full directive closure into LoadClosure let GetLoadClosure(ctok, rootFilename, closureFiles, tcConfig: TcConfig, codeContext) = diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 230bd508de..a0b031092a 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -204,7 +204,7 @@ type AssemblyResolution = /// Whether or not this is an installed system assembly (for example, System.dll) sysdir: bool // Lazily populated ilAssemblyRef for this reference. - ilAssemblyRef: ILAssemblyRef option ref } + mutable ilAssemblyRef: ILAssemblyRef option } type UnresolvedAssemblyReference = UnresolvedAssemblyReference of string * AssemblyReference list diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index 29e854a83f..441df5f346 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -1015,7 +1015,7 @@ let testFlag tcConfigB = match s with | "StackSpan" -> tcConfigB.internalTestSpanStackReferring <- true | "ErrorRanges" -> tcConfigB.errorStyle <- ErrorStyle.TestErrors - | "Tracking" -> Lib.tracking := true (* general purpose on/off diagnostics flag *) + | "Tracking" -> Lib.tracking <- true (* general purpose on/off diagnostics flag *) | "NoNeedToTailcall" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportNoNeedToTailcall = true } | "FunctionSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportFunctionSizes = true } | "TotalSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportTotalSizes = true } @@ -1242,7 +1242,7 @@ let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = tcConfigB.compilingFslib <- true tcConfigB.TurnWarningOff(rangeStartup, "42") ErrorLogger.reportLibraryOnlyFeatures <- false - IlxSettings.ilxCompilingFSharpCoreLib := true), + IlxSettings.ilxCompilingFSharpCoreLib <- true), Some(InternalCommandLineOption("--compiling-fslib", rangeCmdArgs)), None) let compilingFsLib20Flag = @@ -1312,7 +1312,7 @@ let deprecatedFlagsFsc tcConfigB = CompilerOption ("progress", tagNone, - OptionUnit (fun () -> progress := true), + OptionUnit (fun () -> progress <- true), Some(DeprecatedCommandLineOptionNoDescription("--progress", rangeCmdArgs)), None) compilingFsLibFlag tcConfigB @@ -1588,14 +1588,13 @@ let ApplyCommandLineArgs(tcConfigB: TcConfigBuilder, sourceFiles: string list, c // PrintWholeAssemblyImplementation //---------------------------------------------------------------------------- -let showTermFileCount = ref 0 +let mutable showTermFileCount = 0 let PrintWholeAssemblyImplementation g (tcConfig:TcConfig) outfile header expr = if tcConfig.showTerms then if tcConfig.writeTermsToFiles then let filename = outfile + ".terms" - let n = !showTermFileCount - showTermFileCount := n+1 - use f = System.IO.File.CreateText (filename + "-" + string n + "-" + header) + use f = System.IO.File.CreateText (filename + "-" + string showTermFileCount + "-" + header) + showTermFileCount <- showTermFileCount + 1 Layout.outL f (Layout.squashTo 192 (DebugPrint.implFilesL g expr)) else dprintf "\n------------------\nshowTerm: %s:\n" header @@ -1606,11 +1605,11 @@ let PrintWholeAssemblyImplementation g (tcConfig:TcConfig) outfile header expr = // ReportTime //---------------------------------------------------------------------------- -let tPrev = ref None -let nPrev = ref None +let mutable tPrev = None +let mutable nPrev = None let ReportTime (tcConfig:TcConfig) descr = - match !nPrev with + match nPrev with | None -> () | Some prevDescr -> if tcConfig.pause then @@ -1651,7 +1650,7 @@ let ReportTime (tcConfig:TcConfig) descr = let ptime = System.Diagnostics.Process.GetCurrentProcess() let wsNow = ptime.WorkingSet64/1000000L - match !tPrev, !nPrev with + match tPrev, nPrev with | Some (timePrev, gcPrev:int []), Some prevDescr -> let spanGC = [| for i in 0 .. maxGen -> System.GC.CollectionCount i - gcPrev.[i] |] dprintf "TIME: %4.1f Delta: %4.1f Mem: %3d" @@ -1662,9 +1661,9 @@ let ReportTime (tcConfig:TcConfig) descr = prevDescr | _ -> () - tPrev := Some (timeNow, gcNow) + tPrev <- Some (timeNow, gcNow) - nPrev := Some descr + nPrev <- Some descr //---------------------------------------------------------------------------- // OPTIMIZATION - support - addDllToOptEnv diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index f5aade8400..e22437de14 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -1710,9 +1710,9 @@ and AddConstraint (csenv: ConstraintSolverEnv) ndeep m2 trace tp newConstraint // This works because the types on the r.h.s. of subtype // constraints are head-types and so any further inferences are equational. let collect ty = - let res = ref [] - IterateEntireHierarchyOfType (fun x -> res := x :: !res) g amap m AllowMultiIntfInstantiations.No ty - List.rev !res + let mutable res = [] + IterateEntireHierarchyOfType (fun x -> res <- x :: res) g amap m AllowMultiIntfInstantiations.No ty + List.rev res let parents1 = collect ty1 let parents2 = collect ty2 trackErrors { diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs index c37a339512..2f515d566a 100755 --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -441,8 +441,8 @@ let PushThreadBuildPhaseUntilUnwind (phase:BuildPhase) = let PushErrorLoggerPhaseUntilUnwind(errorLoggerTransformer : ErrorLogger -> #ErrorLogger) = let oldErrorLogger = CompileThreadStatic.ErrorLogger let newErrorLogger = errorLoggerTransformer oldErrorLogger - let newInstalled = ref true - let newIsInstalled() = if !newInstalled then () else (assert false; (); (*failwith "error logger used after unwind"*)) // REVIEW: ok to throw? + let mutable newInstalled = true + let newIsInstalled() = if newInstalled then () else (assert false; (); (*failwith "error logger used after unwind"*)) // REVIEW: ok to throw? let chkErrorLogger = { new ErrorLogger("PushErrorLoggerPhaseUntilUnwind") with member __.DiagnosticSink(phasedError, isError) = newIsInstalled(); newErrorLogger.DiagnosticSink(phasedError, isError) member __.ErrorCount = newIsInstalled(); newErrorLogger.ErrorCount } @@ -452,7 +452,7 @@ let PushErrorLoggerPhaseUntilUnwind(errorLoggerTransformer : ErrorLogger -> #Err { new System.IDisposable with member __.Dispose() = CompileThreadStatic.ErrorLogger <- oldErrorLogger - newInstalled := false } + newInstalled <- false } let SetThreadBuildPhaseNoUnwind(phase:BuildPhase) = CompileThreadStatic.BuildPhase <- phase let SetThreadErrorLoggerNoUnwind errorLogger = CompileThreadStatic.ErrorLogger <- errorLogger diff --git a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs index 63c9bf1245..3428d60ad8 100644 --- a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs +++ b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs @@ -394,18 +394,18 @@ open Printf stringInfos |> Seq.iter (fun (lineNum, (optErrNum,ident), str, holes, netFormatString) -> let formalArgs = new System.Text.StringBuilder() let actualArgs = new System.Text.StringBuilder() - let firstTime = ref true - let n = ref 0 + let mutable firstTime = true + let mutable n = 0 formalArgs.Append "(" |> ignore for hole in holes do - if !firstTime then - firstTime := false + if firstTime then + firstTime <- false else formalArgs.Append ", " |> ignore actualArgs.Append " " |> ignore - formalArgs.Append(sprintf "a%d : %s" !n hole) |> ignore - actualArgs.Append(sprintf "a%d" !n) |> ignore - n := !n + 1 + formalArgs.Append(sprintf "a%d : %s" n hole) |> ignore + actualArgs.Append(sprintf "a%d" n) |> ignore + n <- n + 1 formalArgs.Append ")" |> ignore fprintfn out " /// %s" str fprintfn out " /// (Originally from %s:%d)" filename (lineNum+1) diff --git a/src/fsharp/FSharp.Core/async.fs b/src/fsharp/FSharp.Core/async.fs index b6ab88a16f..4655b0d73f 100644 --- a/src/fsharp/FSharp.Core/async.fs +++ b/src/fsharp/FSharp.Core/async.fs @@ -1647,19 +1647,19 @@ namespace Microsoft.FSharp.Control let resultCell = new ResultCell<_>() let! cancellationToken = cancellationTokenAsync let innerCTS = new CancellationTokenSource() // innerCTS does not require disposal - let ctsRef = ref innerCTS + let mutable ctsRef = innerCTS let reg = cancellationToken.Register( (fun _ -> - match !ctsRef with + match ctsRef with | null -> () | otherwise -> otherwise.Cancel()), null) do QueueAsync innerCTS.Token // since innerCTS is not ever Disposed, can call reg.Dispose() without a safety Latch - (fun res -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Ok res, reuseThread=true)) - (fun edi -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Error edi, reuseThread=true)) - (fun err -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Canceled err, reuseThread=true)) + (fun res -> ctsRef <- null; reg.Dispose(); resultCell.RegisterResult (Ok res, reuseThread=true)) + (fun edi -> ctsRef <- null; reg.Dispose(); resultCell.RegisterResult (Error edi, reuseThread=true)) + (fun err -> ctsRef <- null; reg.Dispose(); resultCell.RegisterResult (Canceled err, reuseThread=true)) computation |> unfake @@ -1713,10 +1713,10 @@ namespace Microsoft.FSharp.Control [] // give the extension member a 'nice', unmangled compiled name, unique within this module member stream.AsyncRead count = async { let buffer = Array.zeroCreate count - let i = ref 0 - while !i < count do - let! n = stream.AsyncRead(buffer, !i, count - !i) - i := !i + n + let mutable i = 0 + while i < count do + let! n = stream.AsyncRead(buffer, i, count - i) + i <- i + n if n = 0 then raise(System.IO.EndOfStreamException(SR.GetString(SR.failedReadEnoughBytes))) return buffer } @@ -1746,16 +1746,16 @@ namespace Microsoft.FSharp.Control [] // give the extension member a 'nice', unmangled compiled name, unique within this module member req.AsyncGetResponse() : Async= - let canceled = ref false // WebException with Status = WebExceptionStatus.RequestCanceled can be raised in other situations except cancellation, use flag to filter out false positives + let mutable canceled = false // WebException with Status = WebExceptionStatus.RequestCanceled can be raised in other situations except cancellation, use flag to filter out false positives // Use CreateTryWithFilterAsync to allow propagation of exception without losing stack Async.FromBeginEnd(beginAction=req.BeginGetResponse, endAction = req.EndGetResponse, - cancelAction = fun() -> canceled := true; req.Abort()) + cancelAction = fun() -> canceled <- true; req.Abort()) |> CreateTryWithFilterAsync (fun exn -> match exn with | :? System.Net.WebException as webExn - when webExn.Status = System.Net.WebExceptionStatus.RequestCanceled && !canceled -> + when webExn.Status = System.Net.WebExceptionStatus.RequestCanceled && canceled -> Some (Async.BindResult(AsyncResult.Canceled (OperationCanceledException webExn.Message))) | _ -> diff --git a/src/fsharp/FSharp.Core/eventmodule.fs b/src/fsharp/FSharp.Core/eventmodule.fs index 1d615a307c..fe907373f5 100644 --- a/src/fsharp/FSharp.Core/eventmodule.fs +++ b/src/fsharp/FSharp.Core/eventmodule.fs @@ -40,12 +40,12 @@ namespace Microsoft.FSharp.Control [] let scan collector state (sourceEvent: IEvent<'Delegate,'T>) = - let state = ref state + let mutable state = state let ev = new Event<_>() sourceEvent.Add(fun msg -> - let z = !state + let z = state let z = collector z msg - state := z; + state <- z; ev.Trigger(z)) ev.Publish @@ -55,12 +55,12 @@ namespace Microsoft.FSharp.Control [] let pairwise (sourceEvent : IEvent<'Delegate,'T>) : IEvent<'T * 'T> = let ev = new Event<'T * 'T>() - let lastArgs = ref None + let mutable lastArgs = None sourceEvent.Add(fun args2 -> - (match !lastArgs with + (match lastArgs with | None -> () | Some args1 -> ev.Trigger(args1,args2)) - lastArgs := Some args2) + lastArgs <- Some args2) ev.Publish diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 0e97166352..89db09ecda 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -1185,13 +1185,13 @@ module internal Array = let count = min count len let res = zeroCreateUnchecked count : 'T[][] let minChunkSize = len / count - let startIndex = ref 0 + let mutable startIndex = 0 for i = 0 to len % count - 1 do - res.[i] <- subUnchecked !startIndex (minChunkSize + 1) array - startIndex := !startIndex + minChunkSize + 1 + res.[i] <- subUnchecked startIndex (minChunkSize + 1) array + startIndex <- startIndex + minChunkSize + 1 for i = len % count to count - 1 do - res.[i] <- subUnchecked !startIndex minChunkSize array - startIndex := !startIndex + minChunkSize + res.[i] <- subUnchecked startIndex minChunkSize array + startIndex <- startIndex + minChunkSize res module internal Seq = diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index d0fccda1fd..0c7554586f 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -374,8 +374,8 @@ module MapTree = mkFromEnumerator comparer empty ie let copyToArray m (arr: _[]) i = - let j = ref i - m |> iter (fun x y -> arr.[!j] <- KeyValuePair(x, y); j := !j + 1) + let mutable j = i + m |> iter (fun x y -> arr.[j] <- KeyValuePair(x, y); j <- j + 1) /// Imperative left-to-right iterators. [] diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 554c19113e..40a9e9571a 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -4681,14 +4681,14 @@ namespace Microsoft.FSharp.Core else // a constrained, common simple iterator that is fast. let singleStepRangeEnumerator () = - let value : Ref<'T> = ref (n - LanguagePrimitives.GenericOne) + let mutable value = n - LanguagePrimitives.GenericOne let inline current () = // according to IEnumerator.Current documentation, the result of of Current // is undefined prior to the first call of MoveNext and post called to MoveNext // that return false (see https://msdn.microsoft.com/en-us/library/58e146b7%28v=vs.110%29.aspx) // so we should be able to just return value here, which would be faster - let derefValue = !value + let derefValue = value if derefValue < n then notStarted () elif derefValue > m then @@ -4704,14 +4704,14 @@ namespace Microsoft.FSharp.Core interface IEnumerator with member __.Current = box (current ()) - member __.Reset () = value := n - LanguagePrimitives.GenericOne + member __.Reset () = value <- n - LanguagePrimitives.GenericOne member __.MoveNext () = - let derefValue = !value + let derefValue = value if derefValue < m then - value := derefValue + LanguagePrimitives.GenericOne + value <- derefValue + LanguagePrimitives.GenericOne true elif derefValue = m then - value := derefValue + LanguagePrimitives.GenericOne + value <- derefValue + LanguagePrimitives.GenericOne false else false } diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index 0dd38fe225..828fddac3d 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -391,12 +391,12 @@ module internal Impl = | false, _ -> // the Dictionary<>s here could be ConcurrentDictionary<>'s, but then // that would lock while initializing the Type array (maybe not an issue) - let a = ref (Array.init 8 (fun i -> makeIt (i + 1))) + let mutable a = Array.init 8 (fun i -> makeIt (i + 1)) lock dictionaryLock (fun () -> match tables.TryGetValue asm with - | true, t -> a := t - | false, _ -> tables.Add(asm, !a)) - !a + | true, t -> a <- t + | false, _ -> tables.Add(asm, a)) + a | true, t -> t match tys.Length with diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index 0b6e7ed2e5..71f16b6fa2 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -84,13 +84,13 @@ namespace Microsoft.FSharp.Collections let mapi f (e : IEnumerator<_>) : IEnumerator<_> = let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(f) - let i = ref (-1) + let mutable i = -1 upcast { new MapEnumerator<_>() with member __.DoMoveNext curr = - i := !i + 1 + i <- i + 1 if e.MoveNext() then - curr <- f.Invoke(!i, e.Current) + curr <- f.Invoke(i, e.Current) true else false @@ -118,13 +118,13 @@ namespace Microsoft.FSharp.Collections let mapi2 f (e1 : IEnumerator<_>) (e2 : IEnumerator<_>) : IEnumerator<_> = let f = OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt(f) - let i = ref (-1) + let mutable i = -1 upcast { new MapEnumerator<_>() with member __.DoMoveNext curr = - i := !i + 1 + i <- i + 1 if (e1.MoveNext() && e2.MoveNext()) then - curr <- f.Invoke(!i, e1.Current, e2.Current) + curr <- f.Invoke(i, e1.Current, e2.Current) true else false @@ -160,11 +160,11 @@ namespace Microsoft.FSharp.Collections } let choose f (e : IEnumerator<'T>) = - let started = ref false - let curr = ref None + let mutable started = false + let mutable curr = None let get() = - check !started - match !curr with + check started + match curr with | None -> alreadyFinished() | Some x -> x @@ -173,25 +173,25 @@ namespace Microsoft.FSharp.Collections interface IEnumerator with member __.Current = box (get()) member __.MoveNext() = - if not !started then started := true - curr := None - while ((!curr).IsNone && e.MoveNext()) do - curr := f e.Current - Option.isSome !curr + if not started then started <- true + curr <- None + while (curr.IsNone && e.MoveNext()) do + curr <- f e.Current + Option.isSome curr member __.Reset() = noReset() interface System.IDisposable with member __.Dispose() = e.Dispose() } let filter f (e : IEnumerator<'T>) = - let started = ref false + let mutable started = false let this = { new IEnumerator<'T> with - member __.Current = check !started; e.Current + member __.Current = check started; e.Current interface IEnumerator with - member __.Current = check !started; box e.Current + member __.Current = check started; box e.Current member __.MoveNext() = let rec next() = - if not !started then started := true + if not started then started <- true e.MoveNext() && (f e.Current || next()) next() member __.Reset() = noReset() @@ -200,15 +200,15 @@ namespace Microsoft.FSharp.Collections this let unfold f x : IEnumerator<_> = - let state = ref x + let mutable state = x upcast { new MapEnumerator<_>() with member __.DoMoveNext curr = - match f !state with + match f state with | None -> false | Some (r,s) -> curr <- r - state := s + state <- s true member __.Dispose() = () } @@ -229,34 +229,36 @@ namespace Microsoft.FSharp.Collections // The lazy creation of the cache nodes means enumerations that skip many Current values are not delayed by GC. // For example, the full enumeration of Seq.initInfinite in the tests. // state - let index = ref unstarted + let mutable index = unstarted // a Lazy node to cache the result/exception - let current = ref (Unchecked.defaultof<_>) - let setIndex i = index := i; current := (Unchecked.defaultof<_>) // cache node unprimed, initialised on demand. + let mutable current = Unchecked.defaultof<_> + let setIndex i = + index <- i + current <- (Unchecked.defaultof<_>) // cache node unprimed, initialised on demand. let getCurrent() = - if !index = unstarted then notStarted() - if !index = completed then alreadyFinished() - match box !current with - | null -> current := Lazy<_>.Create(fun () -> f !index) + if index = unstarted then notStarted() + if index = completed then alreadyFinished() + match box current with + | null -> current <- Lazy<_>.Create(fun () -> f index) | _ -> () // forced or re-forced immediately. - (!current).Force() + current.Force() { new IEnumerator<'U> with member __.Current = getCurrent() interface IEnumerator with member __.Current = box (getCurrent()) member __.MoveNext() = - if !index = completed then + if index = completed then false - elif !index = unstarted then + elif index = unstarted then setIndex 0 true else - if !index = System.Int32.MaxValue then raise <| System.InvalidOperationException (SR.GetString(SR.enumerationPastIntMaxValue)) - if !index = finalIndex then + if index = System.Int32.MaxValue then raise <| System.InvalidOperationException (SR.GetString(SR.enumerationPastIntMaxValue)) + if index = finalIndex then false else - setIndex (!index + 1) + setIndex (index + 1) true member __.Reset() = noReset() @@ -858,10 +860,10 @@ namespace Microsoft.FSharp.Collections let truncate count (source: seq<'T>) = checkNonNull "source" source if count <= 0 then empty else - seq { let i = ref 0 + seq { let mutable i = 0 use ie = source.GetEnumerator() - while !i < count && ie.MoveNext() do - i := !i + 1 + while i < count && ie.MoveNext() do + i <- i + 1 yield ie.Current } [] @@ -869,22 +871,22 @@ namespace Microsoft.FSharp.Collections checkNonNull "source" source seq { use ie = source.GetEnumerator() if ie.MoveNext() then - let iref = ref ie.Current + let mutable iref = ie.Current while ie.MoveNext() do let j = ie.Current - yield (!iref, j) - iref := j } + yield (iref, j) + iref <- j } [] let scan<'T,'State> folder (state:'State) (source : seq<'T>) = checkNonNull "source" source let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt folder - seq { let zref = ref state - yield !zref + seq { let mutable zref = state + yield zref use ie = source.GetEnumerator() while ie.MoveNext() do - zref := f.Invoke(!zref, ie.Current) - yield !zref } + zref <- f.Invoke(zref, ie.Current) + yield zref } [] let tryFindBack predicate (source : seq<'T>) = @@ -948,21 +950,21 @@ namespace Microsoft.FSharp.Collections [|SR.GetString SR.inputMustBePositive; windowSize|] seq { let arr = Array.zeroCreateUnchecked windowSize - let r = ref (windowSize - 1) - let i = ref 0 + let mutable r =windowSize - 1 + let mutable i = 0 use e = source.GetEnumerator() while e.MoveNext() do - arr.[!i] <- e.Current - i := (!i + 1) % windowSize - if !r = 0 then + arr.[i] <- e.Current + i <- (i + 1) % windowSize + if r = 0 then if windowSize < 32 then - yield Array.init windowSize (fun j -> arr.[(!i+j) % windowSize]) + yield Array.init windowSize (fun j -> arr.[(i+j) % windowSize]) else let result = Array.zeroCreateUnchecked windowSize - Array.Copy(arr, !i, result, 0, windowSize - !i) - Array.Copy(arr, 0, result, windowSize - !i, !i) + Array.Copy(arr, i, result, 0, windowSize - i) + Array.Copy(arr, 0, result, windowSize - i, i) yield result - else r := (!r - 1) + else r <- (r - 1) } [] @@ -978,7 +980,7 @@ namespace Microsoft.FSharp.Collections // * the prefix followed by elts from the enumerator are the initial sequence. // * the prefix contains only as many elements as the longest enumeration so far. let prefix = ResizeArray<_>() - let enumeratorR = ref None : IEnumerator<'T> option option ref // nested options rather than new type... + let enumeratorR = ref None // None = Unstarted. // Some(Some e) = Started. // Some None = Finished. @@ -1014,10 +1016,9 @@ namespace Microsoft.FSharp.Collections let cleanup() = lock enumeratorR (fun () -> prefix.Clear() - begin match !enumeratorR with + match !enumeratorR with | Some (Some e) -> IEnumerator.dispose e | _ -> () - end enumeratorR := None) (new CachedSeq<_>(cleanup, result) :> seq<_>) @@ -1305,9 +1306,9 @@ namespace Microsoft.FSharp.Collections let takeWhile predicate (source: seq<_>) = checkNonNull "source" source seq { use e = source.GetEnumerator() - let latest = ref Unchecked.defaultof<_> - while e.MoveNext() && (latest := e.Current; predicate !latest) do - yield !latest } + let mutable latest = Unchecked.defaultof<_> + while e.MoveNext() && (latest <- e.Current; predicate latest) do + yield latest } [] let skip count (source: seq<_>) = @@ -1324,12 +1325,12 @@ namespace Microsoft.FSharp.Collections let skipWhile predicate (source: seq<_>) = checkNonNull "source" source seq { use e = source.GetEnumerator() - let latest = ref (Unchecked.defaultof<_>) - let ok = ref false + let mutable latest = Unchecked.defaultof<_> + let mutable ok = false while e.MoveNext() do - if (latest := e.Current; (!ok || not (predicate !latest))) then - ok := true - yield !latest } + if (latest <- e.Current; (ok || not (predicate latest))) then + ok <- true + yield latest } [] let forall2 predicate (source1: seq<_>) (source2: seq<_>) = @@ -1469,14 +1470,14 @@ namespace Microsoft.FSharp.Collections let nextChunk() = let res = Array.zeroCreateUnchecked chunkSize res.[0] <- e.Current - let i = ref 1 - while !i < chunkSize && e.MoveNext() do - res.[!i] <- e.Current - i := !i + 1 - if !i = chunkSize then + let mutable i = 1 + while i < chunkSize && e.MoveNext() do + res.[i] <- e.Current + i <- i + 1 + if i = chunkSize then res else - res |> Array.subUnchecked 0 !i + res |> Array.subUnchecked 0 i while e.MoveNext() do yield nextChunk() } diff --git a/src/fsharp/FSharp.Core/seqcore.fs b/src/fsharp/FSharp.Core/seqcore.fs index 05bde3b90d..bc54d01e67 100644 --- a/src/fsharp/FSharp.Core/seqcore.fs +++ b/src/fsharp/FSharp.Core/seqcore.fs @@ -68,16 +68,16 @@ namespace Microsoft.FSharp.Collections lock r (fun () -> match !r with None -> None | Some _ as res -> r := None; res) let generateWhileSome openf compute closef : IEnumerator<'U> = - let started = ref false - let curr = ref None + let mutable started = false + let mutable curr = None let state = ref (Some(openf())) let getCurr() = - check !started - match !curr with None -> alreadyFinished() | Some x -> x - let start() = if not !started then (started := true) + check started + match curr with None -> alreadyFinished() | Some x -> x + let start() = if not started then (started <- true) let dispose() = readAndClear state |> Option.iter closef - let finish() = try dispose() finally curr := None + let finish() = try dispose() finally curr <- None { new IEnumerator<'U> with member __.Current = getCurr() interface IEnumerator with @@ -89,7 +89,7 @@ namespace Microsoft.FSharp.Collections | Some s -> match (try compute s with e -> finish(); reraise()) with | None -> finish(); false - | Some _ as x -> curr := x; true + | Some _ as x -> curr <- x; true member __.Reset() = noReset() interface System.IDisposable with @@ -306,14 +306,14 @@ namespace Microsoft.FSharp.Core.CompilerServices mkSeq (fun () -> new ConcatEnumerator<_,_>(sources) :> IEnumerator<'T>) let EnumerateWhile (guard: unit -> bool) (source: seq<'T>) : seq<'T> = - let started = ref false - let curr = ref None + let mutable started = false + let mutable curr = None let getCurr() = - IEnumerator.check !started - match !curr with None -> IEnumerator.alreadyFinished() | Some x -> x - let start() = if not !started then (started := true) + IEnumerator.check started + match curr with None -> IEnumerator.alreadyFinished() | Some x -> x + let start() = if not started then (started <- true) - let finish() = (curr := None) + let finish() = (curr <- None) mkConcatSeq (mkSeq (fun () -> { new IEnumerator<_> with @@ -324,7 +324,7 @@ namespace Microsoft.FSharp.Core.CompilerServices start() let keepGoing = (try guard() with e -> finish (); reraise ()) in if keepGoing then - curr := Some(source); true + curr <- Some(source); true else finish(); false member x.Reset() = IEnumerator.noReset() diff --git a/src/fsharp/FSharp.Core/set.fs b/src/fsharp/FSharp.Core/set.fs index 5da5152f29..bd6bb97000 100644 --- a/src/fsharp/FSharp.Core/set.fs +++ b/src/fsharp/FSharp.Core/set.fs @@ -429,13 +429,13 @@ module internal SetTree = not i.stack.IsEmpty let mkIEnumerator s = - let i = ref (mkIterator s) + let mutable i = mkIterator s { new IEnumerator<_> with - member __.Current = current !i + member __.Current = current i interface IEnumerator with - member __.Current = box (current !i) - member __.MoveNext() = moveNext !i - member __.Reset() = i := mkIterator s + member __.Current = box (current i) + member __.MoveNext() = moveNext i + member __.Reset() = i <- mkIterator s interface System.IDisposable with member __.Dispose() = () } @@ -486,8 +486,8 @@ module internal SetTree = loop s [] let copyToArray s (arr: _[]) i = - let j = ref i - iter (fun x -> arr.[!j] <- x; j := !j + 1) s + let mutable j = i + iter (fun x -> arr.[j] <- x; j <- j + 1) s let toArray s = let n = (count s) diff --git a/src/fsharp/LegacyHostedCompilerForTesting.fs b/src/fsharp/LegacyHostedCompilerForTesting.fs index b793915b5c..821882d84d 100644 --- a/src/fsharp/LegacyHostedCompilerForTesting.fs +++ b/src/fsharp/LegacyHostedCompilerForTesting.fs @@ -61,20 +61,20 @@ type internal InProcCompiler(legacyReferenceResolver) = let ctok = AssumeCompilationThreadWithoutEvidence () let loggerProvider = InProcErrorLoggerProvider() - let exitCode = ref 0 + let mutable exitCode = 0 let exiter = { new Exiter with - member this.Exit n = exitCode := n; raise StopProcessing } + member this.Exit n = exitCode <- n; raise StopProcessing } try typecheckAndCompile(ctok, argv, legacyReferenceResolver, false, ReduceMemoryFlag.Yes, CopyFSharpCoreFlag.Yes, exiter, loggerProvider.Provider, None, None) with | StopProcessing -> () | ReportedError _ | WrappedError(ReportedError _,_) -> - exitCode := 1 + exitCode <- 1 () let output : CompilationOutput = { Warnings = loggerProvider.CapturedWarnings; Errors = loggerProvider.CapturedErrors } - !exitCode = 0, output + exitCode = 0, output /// in-proc version of fsc.exe type internal FscCompiler(legacyReferenceResolver) = diff --git a/src/fsharp/LegacyMSBuildReferenceResolver.fs b/src/fsharp/LegacyMSBuildReferenceResolver.fs index 8425f6197b..a07941509f 100644 --- a/src/fsharp/LegacyMSBuildReferenceResolver.fs +++ b/src/fsharp/LegacyMSBuildReferenceResolver.fs @@ -255,12 +255,12 @@ module LegacyMSBuildReferenceResolver "Software\Microsoft\.NetFramework", "AssemblyFoldersEx" , "" if Array.isEmpty references then [| |] else - let backgroundException = ref false + let mutable backgroundException = false let protect f = - if not !backgroundException then + if not backgroundException then try f() - with _ -> backgroundException := true + with _ -> backgroundException <- true let engine = { new IBuildEngine with diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index e2d316bd29..e7630a84ff 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -907,11 +907,11 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | INFIX_COMPARE_OP " let tokenEndPos = tokenTup.LexbufState.EndPos if isAdjacent tokenTup lookaheadTokenTup then - let stack = ref [] + let mutable stack = [] let rec scanAhead nParen = let lookaheadTokenTup = popNextTokenTup() let lookaheadToken = lookaheadTokenTup.Token - stack := (lookaheadTokenTup, true) :: !stack + stack <- (lookaheadTokenTup, true) :: stack let lookaheadTokenStartPos = startPosOfTokenTup lookaheadTokenTup match lookaheadToken with | Parser.EOF _ | SEMICOLON_SEMICOLON -> false @@ -927,7 +927,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, let hasAfterOp = (match lookaheadToken with GREATER _ -> false | _ -> true) if nParen > 0 then // Don't smash the token if there is an after op and we're in a nested paren - stack := (lookaheadTokenTup, not hasAfterOp) :: (!stack).Tail + stack <- (lookaheadTokenTup, not hasAfterOp) :: stack.Tail scanAhead nParen else // On successful parse of a set of type parameters, look for an adjacent (, e.g. @@ -935,13 +935,13 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // and insert a HIGH_PRECEDENCE_PAREN_APP if not hasAfterOp && (match nextTokenIsAdjacentLParenOrLBrack lookaheadTokenTup with Some LPAREN -> true | _ -> false) then let dotTokenTup = peekNextTokenTup() - stack := (pool.UseLocation(dotTokenTup, HIGH_PRECEDENCE_PAREN_APP), false) :: !stack + stack <- (pool.UseLocation(dotTokenTup, HIGH_PRECEDENCE_PAREN_APP), false) :: stack true | INFIX_COMPARE_OP (TyparsCloseOp(greaters, afterOp)) -> let nParen = nParen - greaters.Length if nParen > 0 then // Don't smash the token if there is an after op and we're in a nested paren - stack := (lookaheadTokenTup, not afterOp.IsSome) :: (!stack).Tail + stack <- (lookaheadTokenTup, not afterOp.IsSome) :: stack.Tail scanAhead nParen else // On successful parse of a set of type parameters, look for an adjacent (, e.g. @@ -949,7 +949,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // and insert a HIGH_PRECEDENCE_PAREN_APP if afterOp.IsNone && (match nextTokenIsAdjacentLParenOrLBrack lookaheadTokenTup with Some LPAREN -> true | _ -> false) then let dotTokenTup = peekNextTokenTup() - stack := (pool.UseLocation(dotTokenTup, HIGH_PRECEDENCE_PAREN_APP), false) :: !stack + stack <- (pool.UseLocation(dotTokenTup, HIGH_PRECEDENCE_PAREN_APP), false) :: stack true | (LPAREN | LESS _ | LBRACK | LBRACK_LESS | INFIX_COMPARE_OP " scanAhead (nParen+1) @@ -1000,7 +1000,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, let res = scanAhead 0 // Put the tokens back on and smash them up if needed - !stack |> List.iter (fun (tokenTup, smash) -> + stack |> List.iter (fun (tokenTup, smash) -> if smash then match tokenTup.Token with | INFIX_COMPARE_OP " diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 389c6e16b0..30f456fd86 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -2528,7 +2528,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified ResolveExprLongIdentPrim sink ncenv false FullyQualified m ad nenv typeNameResInfo id2 rest2 isOpenDecl else if isNil rest && fullyQualified <> FullyQualified then - let typeError = ref None + let mutable typeError = None // Single identifier. Lookup the unqualified names in the environment let envSearch = match nenv.eUnqualifiedItems.TryGetValue id.idText with @@ -2549,7 +2549,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified let resInfo, item, rest = ForceRaise res ResolutionInfo.SendEntityPathToSink(sink, ncenv, nenv, ItemOccurence.Use, ad, resInfo, ResultTyparChecker(fun () -> CheckAllTyparsInferrable ncenv.amap m item)) Some(item, rest) - | Exception e -> typeError := Some e; None + | Exception e -> typeError <- Some e; None | true, res -> let fresh = FreshenUnqualifiedItem ncenv m res @@ -2587,7 +2587,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified | Result _ as res -> ForceRaise res | _ -> let failingCase = - match !typeError with + match typeError with | Some e -> raze e | _ -> let suggestNamesAndTypes (addToBuffer: string -> unit) = diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index 5a8eaa6534..6c5cc67e5a 100644 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -103,16 +103,16 @@ let BindSubExprOfInput g amap gtps (PBind(v, tyscheme)) m (SubExpr(accessf, (ve2 accessf [] ve2 else let tyargs = - let someSolved = ref false + let mutable someSolved = false let freezeVar gtp = if isBeingGeneralized gtp tyscheme then mkTyparTy gtp else - someSolved := true + someSolved <- true TypeRelations.ChooseTyparSolution g amap gtp let solutions = List.map freezeVar gtps - if !someSolved then + if someSolved then TypeRelations.IterativelySubstituteTyparSolutions g gtps solutions else solutions @@ -1268,10 +1268,10 @@ let CompilePatternBasic BindProjectionPatterns newActives s | TPat_range (c1, c2, m) -> - let res = ref [] + let mutable res = [] for i = int c1 to int c2 do - res := BindProjectionPattern (Active(path, subExpr, TPat_const(Const.Char(char i), m))) s @ !res - !res + res <- BindProjectionPattern (Active(path, subExpr, TPat_const(Const.Char(char i), m))) s @ res + res // Assign an identifier to each TPat_query based on our knowledge of the 'identity' of the active pattern, if any | TPat_query ((_, _, apatVrefOpt, _, _), _, _) -> let uniqId = diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 94d0bcffae..fe30b314d1 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -3348,7 +3348,7 @@ module DebugPrint = | TType_measure unt -> #if DEBUG leftL (tagText "{") ^^ - (match !global_g with + (match global_g with | None -> wordL (tagText "") | Some g -> let sortVars (vs:(Typar * Rational) list) = vs |> List.sortBy (fun (v, _) -> v.DisplayName) @@ -3407,7 +3407,7 @@ module DebugPrint = and auxTraitL env (ttrait: TraitConstraintInfo) = #if DEBUG let (TTrait(tys, nm, memFlags, argtys, rty, _)) = ttrait - match !global_g with + match global_g with | None -> wordL (tagText "") | Some g -> let rty = GetFSharpViewOfReturnType g rty @@ -3527,7 +3527,7 @@ module DebugPrint = let slotSigL (slotsig: SlotSig) = #if DEBUG let (TSlotSig(nm, ty, tps1, tps2, pms, rty)) = slotsig - match !global_g with + match global_g with | None -> wordL(tagText "") | Some g -> let rty = GetFSharpViewOfReturnType g rty @@ -6494,10 +6494,10 @@ let FoldImplFile folders state implFile = ExprFolders(folders).FoldImplFile stat //------------------------------------------------------------------------- let ExprStats x = - let count = ref 0 - let folders = {ExprFolder0 with exprIntercept = (fun _ noInterceptF z x -> (count := !count + 1; noInterceptF z x))} + let mutable count = 0 + let folders = {ExprFolder0 with exprIntercept = (fun _ noInterceptF z x -> (count <- count + 1; noInterceptF z x))} let () = FoldExpr folders () x - string !count + " TExpr nodes" + string count + " TExpr nodes" #endif //------------------------------------------------------------------------- diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index 5098b16ecd..5b0acbc517 100644 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -554,12 +554,12 @@ let p_maybe_lazy p (x: MaybeLazy<_>) st = p_lazy_impl p x.Value st let p_hole () = - let h = ref (None : ('T -> WriterState -> unit) option) - (fun f -> h := Some f), (fun x st -> match !h with Some f -> f x st | None -> pfailwith st "p_hole: unfilled hole") + let mutable h = None + (fun f -> h <- Some f), (fun x st -> match h with Some f -> f x st | None -> pfailwith st "p_hole: unfilled hole") let p_hole2 () = - let h = ref (None : ('Arg -> 'T -> WriterState -> unit) option) - (fun f -> h := Some f), (fun arg x st -> match !h with Some f -> f arg x st | None -> pfailwith st "p_hole2: unfilled hole") + let mutable h = None + (fun f -> h <- Some f), (fun arg x st -> match h with Some f -> f arg x st | None -> pfailwith st "p_hole2: unfilled hole") let u_array_core f n st = let res = Array.zeroCreate n @@ -675,8 +675,8 @@ let u_lazy u st = let u_hole () = - let h = ref (None : 'T unpickler option) - (fun f -> h := Some f), (fun st -> match !h with Some f -> f st | None -> ufailwith st "u_hole: unfilled hole") + let mutable h = None + (fun f -> h <- Some f), (fun st -> match h with Some f -> f st | None -> ufailwith st "u_hole: unfilled hole") //--------------------------------------------------------------------------- // Pickle/unpickle F# interface data diff --git a/src/fsharp/TcGlobals.fs b/src/fsharp/TcGlobals.fs index 339e8b4b7f..c70a378f6f 100755 --- a/src/fsharp/TcGlobals.fs +++ b/src/fsharp/TcGlobals.fs @@ -1491,5 +1491,5 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d #if DEBUG // This global is only used during debug output -let global_g = ref (None : TcGlobals option) +let mutable global_g = None : TcGlobals option #endif diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 5c5dae51b8..76efb55e44 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -3783,11 +3783,11 @@ let EliminateInitializationGraphs hash // The output of the analysis - let outOfOrder = ref false - let runtimeChecks = ref false - let directRecursiveData = ref false - let reportedEager = ref false - let definiteDependencies = ref [] + let mutable outOfOrder = false + let mutable runtimeChecks = false + let mutable directRecursiveData = false + let mutable reportedEager = false + let mutable definiteDependencies = [] let rec stripChooseAndExpr e = match stripExpr e with @@ -3883,21 +3883,21 @@ let EliminateInitializationGraphs | MaybeLazy -> if recursiveVals.TryFind v.Deref |> Option.isSome then warning (RecursiveUseCheckedAtRuntime (denv, v, m)) - if not !reportedEager then - (warning (LetRecCheckedAtRuntime m); reportedEager := true) - runtimeChecks := true + if not reportedEager then + (warning (LetRecCheckedAtRuntime m); reportedEager <- true) + runtimeChecks <- true | Top | DefinitelyStrict -> if recursiveVals.TryFind v.Deref |> Option.isSome then if availIfInOrder.TryFind v.Deref |> Option.isNone then warning (LetRecEvaluatedOutOfOrder (denv, boundv, v, m)) - outOfOrder := true - if not !reportedEager then - (warning (LetRecCheckedAtRuntime m); reportedEager := true) - definiteDependencies := (boundv, v) :: !definiteDependencies + outOfOrder <- true + if not reportedEager then + (warning (LetRecCheckedAtRuntime m); reportedEager <- true) + definiteDependencies <- (boundv, v) :: definiteDependencies | InnerTop -> if recursiveVals.TryFind v.Deref |> Option.isSome then - directRecursiveData := true + directRecursiveData <- true | DefinitelyLazy -> () and checkDelayed st b = match st with @@ -3919,11 +3919,11 @@ let EliminateInitializationGraphs // ddg = definiteDependencyGraph let ddgNodes = recursiveVals.Values |> Seq.toList |> List.map mkLocalValRef - let ddg = Graph((fun v -> v.Stamp), ddgNodes, !definiteDependencies ) + let ddg = Graph((fun v -> v.Stamp), ddgNodes, definiteDependencies ) ddg.IterateCycles (fun path -> error (LetRecUnsound (denv, path, path.Head.Range))) - let requiresLazyBindings = !runtimeChecks || !outOfOrder - if !directRecursiveData && requiresLazyBindings then + let requiresLazyBindings = runtimeChecks || outOfOrder + if directRecursiveData && requiresLazyBindings then error(Error(FSComp.SR.tcInvalidMixtureOfRecursiveForms(), bindsm)) if requiresLazyBindings then @@ -5176,9 +5176,9 @@ and ValidateOptArgOrder (spats: SynSimplePats) = let pats, m = getPats spats - let hitOptArg = ref false + let mutable hitOptArg = false - List.iter (fun pat -> if isOptArg pat then hitOptArg := true elif !hitOptArg then error(Error(FSComp.SR.tcOptionalArgsMustComeAfterNonOptionalArgs(), m))) pats + List.iter (fun pat -> if isOptArg pat then hitOptArg <- true elif hitOptArg then error(Error(FSComp.SR.tcOptionalArgsMustComeAfterNonOptionalArgs(), m))) pats /// Bind the patterns used in argument position for a function, method or lambda. @@ -5948,10 +5948,10 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // Always allow subsumption if a nominal type is known prior to type checking any arguments let flex = not (isTyparTy cenv.g argty) - let first = ref true + let mutable first = true let getInitEnv m = - if !first then - first := false + if first then + first <- false env else { env with eContextInfo = ContextInfo.CollectionElement (isArray, m) } @@ -10524,8 +10524,8 @@ and TcMatchPattern cenv inputTy env tpenv (pat: SynPat, optWhenExpr) = patf' (TcPatPhase2Input (values, true)), optWhenExpr', NameMap.range vspecMap, envinner, tpenv and TcMatchClauses cenv inputTy resultTy env tpenv clauses = - let first = ref true - let isFirst() = if !first then first := false; true else false + let mutable first = true + let isFirst() = if first then first <- false; true else false List.mapFold (fun clause -> TcMatchClause cenv inputTy resultTy env (isFirst()) clause) tpenv clauses and TcMatchClause cenv inputTy resultTy env isFirst tpenv (Clause(pat, optWhenExpr, e, patm, spTgt)) = @@ -14456,7 +14456,7 @@ module TyconConstraintInference = // Repeatedly eliminate structural type definitions whose structural component types no longer support // comparison. On the way record type variables which are support the comparison relation. let rec loop (assumedTycons: Set) (assumedTypars: Set) = - let assumedTyparsAcc = ref assumedTypars + let mutable assumedTyparsAcc = assumedTypars // Checks if a field type supports the 'comparison' constraint based on the assumptions about the type constructors // and type parameters. @@ -14472,7 +14472,7 @@ module TyconConstraintInference = // Within structural types, type parameters can be optimistically assumed to have comparison // We record the ones for which we have made this assumption. elif tycon.TyparsNoRange |> List.exists (fun tp2 -> typarRefEq tp tp2) then - assumedTyparsAcc := (!assumedTyparsAcc).Add(tp.Stamp) + assumedTyparsAcc <- assumedTyparsAcc.Add(tp.Stamp) true else @@ -14552,10 +14552,10 @@ module TyconConstraintInference = res) - if newSet = assumedTycons && assumedTypars = !assumedTyparsAcc then - newSet, !assumedTyparsAcc + if newSet = assumedTycons && assumedTypars = assumedTyparsAcc then + newSet, assumedTyparsAcc else - loop newSet !assumedTyparsAcc + loop newSet assumedTyparsAcc let uneliminatedTycons, assumedTyparsActual = loop initialAssumedTycons initialAssumedTypars @@ -14587,7 +14587,7 @@ module TyconConstraintInference = // Repeatedly eliminate structural type definitions whose structural component types no longer support // equality. On the way add type variables which are support the equality relation let rec loop (assumedTycons: Set) (assumedTypars: Set) = - let assumedTyparsAcc = ref assumedTypars + let mutable assumedTyparsAcc = assumedTypars // Checks if a field type supports the 'equality' constraint based on the assumptions about the type constructors // and type parameters. @@ -14601,7 +14601,7 @@ module TyconConstraintInference = // Within structural types, type parameters can be optimistically assumed to have equality // We record the ones for which we have made this assumption. elif tycon.Typars(tycon.Range) |> List.exists (fun tp2 -> typarRefEq tp tp2) then - assumedTyparsAcc := (!assumedTyparsAcc).Add(tp.Stamp) + assumedTyparsAcc <- assumedTyparsAcc.Add(tp.Stamp) true else false @@ -14681,10 +14681,10 @@ module TyconConstraintInference = res) - if newSet = assumedTycons && assumedTypars = !assumedTyparsAcc then - newSet, !assumedTyparsAcc + if newSet = assumedTycons && assumedTypars = assumedTyparsAcc then + newSet, assumedTyparsAcc else - loop newSet !assumedTyparsAcc + loop newSet assumedTyparsAcc let uneliminatedTycons, assumedTyparsActual = loop initialAssumedTycons initialAssumedTypars @@ -17157,7 +17157,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem | SynModuleDecl.NamespaceFragment(SynModuleOrNamespace(longId, isRec, kind, defs, xml, attribs, vis, m)) -> - if !progress then dprintn ("Typecheck implementation " + textOfLid longId) + if progress then dprintn ("Typecheck implementation " + textOfLid longId) let endm = m.EndRange do for id in longId do diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index f5a8382505..fa01b51673 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -2229,7 +2229,7 @@ let noInferredTypars = SynValTyparDecls([], false, []) type LexerIfdefStackEntry = IfDefIf | IfDefElse type LexerIfdefStackEntries = (LexerIfdefStackEntry * range) list -type LexerIfdefStack = LexerIfdefStackEntries ref +type LexerIfdefStack = LexerIfdefStackEntries /// Specifies how the 'endline' function in the lexer should continue after /// it reaches end of line or eof. The options are to continue with 'token' function diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index ba9e1bcd8d..17c8a21931 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -209,13 +209,13 @@ let AdjustForScriptCompile(ctok, tcConfigB: TcConfigBuilder, commandLineSourceFi commandLineSourceFiles |> List.map combineFilePath - let allSources = ref [] + let mutable allSources = [] let tcConfig = TcConfig.Create(tcConfigB, validate=false) let AddIfNotPresent(filename: string) = - if not(!allSources |> List.contains filename) then - allSources := filename :: !allSources + if not(allSources |> List.contains filename) then + allSources <- filename :: allSources let AppendClosureInformation filename = if IsScript filename then @@ -240,16 +240,16 @@ let AdjustForScriptCompile(ctok, tcConfigB: TcConfigBuilder, commandLineSourceFi // Find closure of .fsx files. commandLineSourceFiles |> List.iter AppendClosureInformation - List.rev !allSources + List.rev allSources let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, setProcessThreadLocals, lcidFromCodePage, argv) = - let inputFilesRef = ref ([] : string list) + let mutable inputFilesRef = [] let collect name = let lower = String.lowercase name if List.exists (Filename.checkSuffix lower) [".resx"] then error(Error(FSComp.SR.fscResxSourceFileDeprecated name, rangeStartup)) else - inputFilesRef := name :: !inputFilesRef + inputFilesRef <- name :: inputFilesRef let abbrevArgs = GetAbbrevFlagSet tcConfigB true // This is where flags are interpreted by the command line fsc.exe. @@ -268,7 +268,7 @@ let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, setProcessThreadLocals, if tcConfigB.pathMap <> PathMap.empty then error(Error(FSComp.SR.fscPathMapDebugRequiresPortablePdb(), rangeCmdArgs)) - let inputFiles = List.rev !inputFilesRef + let inputFiles = List.rev inputFilesRef // Check if we have a codepage from the console match tcConfigB.lcid with @@ -381,11 +381,11 @@ module XmlDocWriter = if not (Filename.hasSuffixCaseInsensitive "xml" xmlfile ) then error(Error(FSComp.SR.docfileNoXmlSuffix(), Range.rangeStartup)) (* the xmlDocSigOf* functions encode type into string to be used in "id" *) - let members = ref [] + let mutable members = [] let addMember id xmlDoc = if hasDoc xmlDoc then let doc = getDoc xmlDoc - members := (id, doc) :: !members + members <- (id, doc) :: members let doVal (v: Val) = addMember v.XmlDocSig v.XmlDoc let doUnionCase (uc: UnionCase) = addMember uc.XmlDocSig uc.XmlDoc let doField (rf: RecdField) = addMember rf.XmlDocSig rf.XmlDoc @@ -422,7 +422,7 @@ module XmlDocWriter = fprintfn os ("") fprintfn os ("%s") assemblyName fprintfn os ("") - !members |> List.iter (fun (id, doc) -> + members |> List.iter (fun (id, doc) -> fprintfn os "" id fprintfn os "%s" doc fprintfn os "") @@ -1298,10 +1298,10 @@ module StaticLinker = let assumedIndependentSet = set [ "mscorlib"; "System"; "System.Core"; "System.Xml"; "Microsoft.Build.Framework"; "Microsoft.Build.Utilities" ] begin - let remaining = ref (computeILRefs ilxMainModule).AssemblyReferences - while not (isNil !remaining) do - let ilAssemRef = List.head !remaining - remaining := List.tail !remaining + let mutable remaining = (computeILRefs ilxMainModule).AssemblyReferences + while not (isNil remaining) do + let ilAssemRef = List.head remaining + remaining <- List.tail remaining if assumedIndependentSet.Contains ilAssemRef.Name || (ilAssemRef.PublicKey = Some ecmaPublicKey) then depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name else @@ -1358,7 +1358,7 @@ module StaticLinker = visited = false } // Push the new work items - remaining := refs.AssemblyReferences @ !remaining + remaining <- refs.AssemblyReferences @ remaining | None -> warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name), rangeStartup)) @@ -1384,14 +1384,14 @@ module StaticLinker = | None -> error(Error(FSComp.SR.fscAssemblyNotFoundInDependencySet n, rangeStartup)) ] - let remaining = ref roots - [ while not (isNil !remaining) do - let n = List.head !remaining - remaining := List.tail !remaining + let mutable remaining = roots + [ while not (isNil remaining) do + let n = List.head remaining + remaining <- List.tail remaining if not n.visited then if verbose then dprintn ("Module "+n.name+" depends on "+GetFSharpCoreLibraryName()) n.visited <- true - remaining := n.edges @ !remaining + remaining <- n.edges @ remaining yield (n.ccu, n.data) ] // Add all provider-generated assemblies into the static linking set diff --git a/src/fsharp/fsi/console.fs b/src/fsharp/fsi/console.fs index 04147be769..0ffab65b35 100644 --- a/src/fsharp/fsi/console.fs +++ b/src/fsharp/fsi/console.fs @@ -215,13 +215,13 @@ type internal ReadLineConsole() = checkLeftEdge true /// Cursor anchor - position of !anchor when the routine was called - let anchor = ref (Anchor.Current x.Inset) + let mutable anchor = Anchor.Current x.Inset /// Length of the output currently rendered on screen. - let rendered = ref 0 + let mutable rendered = 0 /// Input has changed, therefore options cache is invalidated. - let changed = ref false + let mutable changed = false /// Cache of optionsCache - let optionsCache = ref (new Options()) + let mutable optionsCache = Options() let writeBlank() = Console.Write(' ') @@ -229,26 +229,26 @@ type internal ReadLineConsole() = let writeChar(c) = if Console.CursorTop = Console.BufferHeight - 1 && Console.CursorLeft = Console.BufferWidth - 1 then //printf "bottom right!\n" - anchor := { !anchor with top = (!anchor).top - 1 } + anchor <- { anchor with top = (anchor).top - 1 } checkLeftEdge true if (Char.IsControl(c)) then let s = x.MapCharacter(c) Console.Write(s) - rendered := !rendered + s.Length + rendered <- rendered + s.Length else Console.Write(c) - rendered := !rendered + 1 + rendered <- rendered + 1 checkLeftEdge true /// The console input buffer. let input = new StringBuilder() /// Current position - index into the input buffer - let current = ref 0 + let mutable current = 0 let render() = //printf "render\n" - let curr = !current - (!anchor).PlaceAt(x.Inset,0) + let curr = current + anchor.PlaceAt(x.Inset,0) let output = new StringBuilder() let mutable position = -1 for i = 0 to input.Length - 1 do @@ -264,59 +264,59 @@ type internal ReadLineConsole() = position <- output.Length // render the current text, computing a new value for "rendered" - let old_rendered = !rendered - rendered := 0 + let old_rendered = rendered + rendered <- 0 for i = 0 to input.Length - 1 do writeChar(input.Chars(i)) // blank out any dangling old text - for i = !rendered to old_rendered - 1 do + for i = rendered to old_rendered - 1 do writeBlank() - (!anchor).PlaceAt(x.Inset,position) + anchor.PlaceAt(x.Inset,position) render() let insertChar(c:char) = - if (!current = input.Length) then - current := !current + 1 + if (current = input.Length) then + current <- current + 1 input.Append(c) |> ignore writeChar(c) else - input.Insert(!current, c) |> ignore - current := !current + 1 + input.Insert(current, c) |> ignore + current <- current + 1 render() let insertTab() = - for i = ReadLineConsole.TabSize - (!current % ReadLineConsole.TabSize) downto 1 do + for i = ReadLineConsole.TabSize - (current % ReadLineConsole.TabSize) downto 1 do insertChar(' ') let moveLeft() = - if (!current > 0 && (!current - 1 < input.Length)) then - current := !current - 1 - let c = input.Chars(!current) + if (current > 0 && (current - 1 < input.Length)) then + current <- current - 1 + let c = input.Chars(current) Cursor.Move(x.Inset, - x.GetCharacterSize(c)) let moveRight() = - if (!current < input.Length) then - let c = input.Chars(!current) - current := !current + 1 + if (current < input.Length) then + let c = input.Chars(current) + current <- current + 1 Cursor.Move(x.Inset, x.GetCharacterSize(c)) let setInput(line:string) = input.Length <- 0 input.Append(line) |> ignore - current := input.Length + current <- input.Length render() let tabPress(shift) = let opts,prefix = - if !changed then - changed := false + if changed then + changed <- false x.GetOptions(input.ToString()) else - !optionsCache,false - optionsCache := opts + optionsCache,false + optionsCache <- opts if (opts.Count > 0) then let part = @@ -331,13 +331,13 @@ type internal ReadLineConsole() = insertTab() let delete() = - if (input.Length > 0 && !current < input.Length) then - input.Remove(!current, 1) |> ignore + if (input.Length > 0 && current < input.Length) then + input.Remove(current, 1) |> ignore render() let deleteToEndOfLine() = - if (!current < input.Length) then - input.Remove (!current, input.Length - !current) |> ignore + if (current < input.Length) then + input.Remove (current, input.Length - current) |> ignore render() let insert(key: ConsoleKeyInfo) = @@ -349,9 +349,9 @@ type internal ReadLineConsole() = insertChar(c) let backspace() = - if (input.Length > 0 && !current > 0) then - input.Remove(!current - 1, 1) |> ignore - current := !current - 1 + if (input.Length > 0 && current > 0) then + input.Remove(current - 1, 1) |> ignore + current <- current - 1 render() let enter() = @@ -394,24 +394,24 @@ type internal ReadLineConsole() = setInput String.Empty change() | ConsoleKey.Home -> - current := 0 - (!anchor).PlaceAt(x.Inset,0) + current <- 0 + anchor.PlaceAt(x.Inset,0) change() | ConsoleKey.End -> - current := input.Length - (!anchor).PlaceAt(x.Inset,!rendered) + current <- input.Length + anchor.PlaceAt(x.Inset,rendered) change() | _ -> match (key.Modifiers, key.KeyChar) with // Control-A | (ConsoleModifiers.Control, '\001') -> - current := 0 - (!anchor).PlaceAt(x.Inset,0) + current <- 0 + anchor.PlaceAt(x.Inset,0) change () // Control-E | (ConsoleModifiers.Control, '\005') -> - current := input.Length - (!anchor).PlaceAt(x.Inset,!rendered) + current <-input.Length + anchor.PlaceAt(x.Inset,rendered) change () // Control-B | (ConsoleModifiers.Control, '\002') -> @@ -452,6 +452,6 @@ type internal ReadLineConsole() = read() and change() = - changed := true + changed <- true read() read() diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 60f53b3964..f444341160 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -788,7 +788,7 @@ let internal SetCurrentUICultureForThread (lcid : int option) = //---------------------------------------------------------------------------- let internal InstallErrorLoggingOnThisThread errorLogger = - if !progress then dprintfn "Installing logger on id=%d name=%s" Thread.CurrentThread.ManagedThreadId Thread.CurrentThread.Name + if progress then dprintfn "Installing logger on id=%d name=%s" Thread.CurrentThread.ManagedThreadId Thread.CurrentThread.Name SetThreadErrorLoggerNoUnwind(errorLogger) SetThreadBuildPhaseNoUnwind(BuildPhase.Interactive) @@ -798,7 +798,7 @@ let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = match fsiOptions.FsiServerInputCodePage, fsiOptions.FsiServerOutputCodePage with | None,None -> () | inputCodePageOpt,outputCodePageOpt -> - let successful = ref false + let mutable successful = false Async.Start (async { do match inputCodePageOpt with | None -> () | Some(n:int) -> @@ -813,9 +813,9 @@ let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = // Note this modifies the real honest-to-goodness settings for the current shell. // and the modifications hang around even after the process has exited. Console.OutputEncoding <- encoding - do successful := true }); + do successful <- true }); for pause in [10;50;100;1000;2000;10000] do - if not !successful then + if not successful then Thread.Sleep(pause); #if LOGGING_GUI if not !successful then @@ -871,17 +871,17 @@ type internal FsiConsoleInput(fsi: FsiEvaluationSessionHostConfig, fsiOptions: F match consoleOpt with | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.IsInteractiveServer -> if List.isEmpty fsiOptions.SourceFiles then - if !progress then fprintfn outWriter "first-line-reader-thread reading first line..."; + if progress then fprintfn outWriter "first-line-reader-thread reading first line..."; firstLine <- Some(console()); - if !progress then fprintfn outWriter "first-line-reader-thread got first line = %A..." firstLine; + if progress then fprintfn outWriter "first-line-reader-thread got first line = %A..." firstLine; consoleReaderStartupDone.Set() |> ignore - if !progress then fprintfn outWriter "first-line-reader-thread has set signal and exited." ; + if progress then fprintfn outWriter "first-line-reader-thread has set signal and exited." ; | _ -> ignore(inReader.Peek()); consoleReaderStartupDone.Set() |> ignore )).Start() else - if !progress then fprintfn outWriter "first-line-reader-thread not in use." + if progress then fprintfn outWriter "first-line-reader-thread not in use." consoleReaderStartupDone.Set() |> ignore /// Try to get the first line, if we snarfed it while probing. @@ -969,7 +969,7 @@ type internal FsiDynamicCompiler /// Add attributes let CreateModuleFragment (tcConfigB: TcConfigBuilder, assemblyName, codegenResults) = - if !progress then fprintfn fsiConsoleOutput.Out "Creating main module..."; + if progress then fprintfn fsiConsoleOutput.Out "Creating main module..."; let mainModule = mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfigB.target assemblyName) (tcConfigB.target = CompilerTarget.Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" { mainModule with Manifest = @@ -1413,7 +1413,7 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso // Also sleep to give computations a bit of time to terminate Thread.Sleep(pauseMilliseconds) if (killThreadRequest = ThreadAbortRequest) then - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + if progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) killThreadRequest <- NoRequest threadToKill.Abort() ()),Name="ControlCAbortThread") @@ -1504,7 +1504,7 @@ module internal MagicAssemblyResolution = // Grab the name of the assembly let tcConfig = TcConfig.Create(tcConfigB,validate=false) let simpleAssemName = fullAssemName.Split([| ',' |]).[0] - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." + if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." // Special case: Mono Windows Forms attempts to load an assembly called something like "Windows.Forms.resources" // We can't resolve this, so don't try. @@ -1545,12 +1545,12 @@ module internal MagicAssemblyResolution = | OkResult (warns, [r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) | _ -> - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll + if progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll /// Take a look through the files quoted, perhaps with explicit paths let searchResult = (tcConfig.referencedDLLs |> List.tryPick (fun assemblyReference -> - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text + if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text if System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextDll,StringComparison.OrdinalIgnoreCase) = 0 || System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextExe,StringComparison.OrdinalIgnoreCase) = 0 then Some(tcImports.TryResolveAssemblyReference (ctok, assemblyReference, ResolveAssemblyReferenceMode.Speculative)) @@ -1628,7 +1628,7 @@ type internal FsiStdinLexerProvider inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) match inputOption with | Some(null) | None -> - if !progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine" + if progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine" 0 | Some (input:string) -> let input = input + "\n" @@ -1655,7 +1655,7 @@ type internal FsiStdinLexerProvider Lexhelp.resetLexbufPos sourceFileName lexbuf let skip = true // don't report whitespace from lexer let defines = "INTERACTIVE"::tcConfigB.conditionalCompilationDefines - let lexargs = mkLexargs (sourceFileName,defines, interactiveInputLightSyntaxStatus, lexResourceManager, ref [], errorLogger, PathMap.empty) + let lexargs = mkLexargs (sourceFileName,defines, interactiveInputLightSyntaxStatus, lexResourceManager, [], errorLogger, PathMap.empty) let tokenizer = LexFilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) tokenizer @@ -1756,15 +1756,15 @@ type internal FsiInteractionProcessor /// Parse one interaction. Called on the parser thread. let ParseInteraction (tokenizer:LexFilter.LexFilter) = - let lastToken = ref Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value + let mutable lastToken = Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value try - if !progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..." + if progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..." let input = Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> let lexerWhichSavesLastToken lexbuf = let tok = tokenizer.Lexer lexbuf - lastToken := tok + lastToken <- tok tok Parser.interaction lexerWhichSavesLastToken tokenizer.LexBuffer) Some input @@ -1772,7 +1772,7 @@ type internal FsiInteractionProcessor // On error, consume tokens until to ;; or EOF. // Caveat: Unless the error parse ended on ;; - so check the lastToken returned by the lexer function. // Caveat: What if this was a look-ahead? That's fine! Since we need to skip to the ;; anyway. - if (match !lastToken with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) then + if (match lastToken with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) then let mutable tok = Parser.ELSE (* <-- any token <> SEMICOLON_SEMICOLON will do *) while (match tok with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) && not tokenizer.LexBuffer.IsPastEndOfStream do @@ -1942,7 +1942,7 @@ type internal FsiInteractionProcessor let mainThreadProcessAction ctok action istate = try let tcConfig = TcConfig.Create(tcConfigB,validate=false) - if !progress then fprintfn fsiConsoleOutput.Out "In mainThreadProcessAction..."; + if progress then fprintfn fsiConsoleOutput.Out "In mainThreadProcessAction..."; fsiInterruptController.InterruptAllowed <- InterruptCanRaiseException; let res = action ctok tcConfig istate fsiInterruptController.ClearInterruptRequest() @@ -2010,19 +2010,19 @@ type internal FsiInteractionProcessor fsiConsolePrompt.Print(); istate |> InteractiveCatch errorLogger (fun istate -> - if !progress then fprintfn fsiConsoleOutput.Out "entering ParseInteraction..."; + if progress then fprintfn fsiConsoleOutput.Out "entering ParseInteraction..."; // Parse the interaction. When FSI.EXE is waiting for input from the console the // parser thread is blocked somewhere deep this call. let action = ParseInteraction tokenizer - if !progress then fprintfn fsiConsoleOutput.Out "returned from ParseInteraction...calling runCodeOnMainThread..."; + if progress then fprintfn fsiConsoleOutput.Out "returned from ParseInteraction...calling runCodeOnMainThread..."; // After we've unblocked and got something to run we switch // over to the run-thread (e.g. the GUI thread) let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken) - if !progress then fprintfn fsiConsoleOutput.Out "Just called runCodeOnMainThread, res = %O..." res; + if progress then fprintfn fsiConsoleOutput.Out "Just called runCodeOnMainThread, res = %O..." res; res) member __.CurrentState = currState @@ -2137,7 +2137,7 @@ type internal FsiInteractionProcessor // member processor.StartStdinReadAndProcessThread (errorLogger) = - if !progress then fprintfn fsiConsoleOutput.Out "creating stdinReaderThread"; + if progress then fprintfn fsiConsoleOutput.Out "creating stdinReaderThread"; let stdinReaderThread = new Thread(new ThreadStart(fun () -> @@ -2146,12 +2146,12 @@ type internal FsiInteractionProcessor try try let initialTokenizer = fsiStdinLexerProvider.CreateStdinLexer(errorLogger) - if !progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread started..."; + if progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread started..."; // Delay until we've peeked the input or read the entire first line fsiStdinLexerProvider.ConsoleInput.WaitForInitialConsoleInput() - if !progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread got first line..."; + if progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread got first line..."; let runCodeOnMainThread = runCodeOnEventLoop errorLogger @@ -2172,12 +2172,12 @@ type internal FsiInteractionProcessor loop initialTokenizer - if !progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting stdinReaderThread"; + if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting stdinReaderThread"; with e -> stopProcessingRecovery e range0; finally - if !progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting process because of failure/exit on stdinReaderThread"; + if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting process because of failure/exit on stdinReaderThread"; // REVIEW: On some flavors of Mono, calling exit may freeze the process if we're using the WinForms event handler // Basically, on Mono 2.6.3, the GUI thread may be left dangling on exit. At that point: // -- System.Environment.Exit will cause the process to stop responding @@ -2200,7 +2200,7 @@ type internal FsiInteractionProcessor ),Name="StdinReaderThread") - if !progress then fprintfn fsiConsoleOutput.Out "MAIN: starting stdin thread..." + if progress then fprintfn fsiConsoleOutput.Out "MAIN: starting stdin thread..." stdinReaderThread.Start() member __.CompletionsForPartialLID (istate, prefix:string) = @@ -2256,11 +2256,11 @@ let internal SpawnInteractiveServer /// This gives us a last chance to catch an abort on the main execution thread. let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput: FsiConsoleOutput) = let rec runLoop() = - if !progress then fprintfn fsiConsoleOutput.Out "GUI thread runLoop"; + if progress then fprintfn fsiConsoleOutput.Out "GUI thread runLoop"; let restart = try // BLOCKING POINT: The GUI Thread spends most (all) of its time this event loop - if !progress then fprintfn fsiConsoleOutput.Out "MAIN: entering event loop..."; + if progress then fprintfn fsiConsoleOutput.Out "MAIN: entering event loop..."; fsi.EventLoopRun() with | :? ThreadAbortException -> @@ -2274,7 +2274,7 @@ let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleO stopProcessingRecovery e range0; true // Try again, just case we can restart - if !progress then fprintfn fsiConsoleOutput.Out "MAIN: exited event loop..."; + if progress then fprintfn fsiConsoleOutput.Out "MAIN: exited event loop..."; if restart then runLoop() runLoop(); @@ -2656,7 +2656,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i [] member x.Run() = - progress := condition "FSHARP_INTERACTIVE_PROGRESS" + progress <- condition "FSHARP_INTERACTIVE_PROGRESS" // Explanation: When Run is called we do a bunch of processing. For fsi.exe // and fsiAnyCpu.exe there are no other active threads at this point, so we can assume this is the @@ -2674,7 +2674,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i if fsiOptions.Interact then // page in the type check env fsiInteractionProcessor.LoadDummyInteraction(ctokStartup, errorLogger) - if !progress then fprintfn fsiConsoleOutput.Out "MAIN: InstallKillThread!"; + if progress then fprintfn fsiConsoleOutput.Out "MAIN: InstallKillThread!"; // Compute how long to pause before a ThreadAbort is actually executed. // A somewhat arbitrary choice. @@ -2682,7 +2682,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // Request that ThreadAbort interrupts be performed on this (current) thread fsiInterruptController.InstallKillThread(Thread.CurrentThread, pauseMilliseconds) - if !progress then fprintfn fsiConsoleOutput.Out "MAIN: got initial state, creating form"; + if progress then fprintfn fsiConsoleOutput.Out "MAIN: got initial state, creating form"; #if !FX_NO_APP_DOMAINS // Route background exceptions to the exception handlers @@ -2699,10 +2699,10 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i DriveFsiEventLoop (fsi, fsiConsoleOutput ) else // not interact - if !progress then fprintfn fsiConsoleOutput.Out "Run: not interact, loading initial files..." + if progress then fprintfn fsiConsoleOutput.Out "Run: not interact, loading initial files..." fsiInteractionProcessor.LoadInitialFiles(ctokRun, errorLogger) - if !progress then fprintfn fsiConsoleOutput.Out "Run: done..." + if progress then fprintfn fsiConsoleOutput.Out "Run: done..." exit (min errorLogger.ErrorCount 1) // The Ctrl-C exception handler that we've passed to native code has diff --git a/src/fsharp/fsi/fsimain.fs b/src/fsharp/fsi/fsimain.fs index 653485ac18..3fdf044f78 100644 --- a/src/fsharp/fsi/fsimain.fs +++ b/src/fsharp/fsi/fsimain.fs @@ -65,13 +65,13 @@ type WinFormsEventLoop() = do mainForm.DoCreateHandle() let mutable lcid = None // Set the default thread exception handler - let restart = ref false + let mutable restart = false member __.LCID with get () = lcid and set v = lcid <- v interface IEventLoop with member x.Run() = - restart := false + restart <- false Application.Run() - !restart + restart member x.Invoke (f: unit -> 'T) : 'T = if not mainForm.InvokeRequired then f() @@ -79,7 +79,7 @@ type WinFormsEventLoop() = // Workaround: Mono's Control.Invoke returns a null result. Hence avoid the problem by // transferring the resulting state using a mutable location. - let mainFormInvokeResultHolder = ref None + let mutable mainFormInvokeResultHolder = None // Actually, Mono's Control.Invoke isn't even blocking (or wasn't on 1.1.15)! So use a signal to indicate completion. // Indeed, we should probably do this anyway with a timeout so we can report progress from @@ -94,7 +94,7 @@ type WinFormsEventLoop() = // When we get called back, someone may jack our culture // So we must reset our UI culture every time use _scope = SetCurrentUICultureForThread lcid - mainFormInvokeResultHolder := Some(f ()) + mainFormInvokeResultHolder <- Some(f ()) finally doneSignal.Set() |> ignore)) |> ignore @@ -103,9 +103,9 @@ type WinFormsEventLoop() = () // if !progress then fprintf outWriter "." outWriter.Flush() //if !progress then fprintfn outWriter "RunCodeOnWinFormsMainThread: Got completion signal, res = %b" (Option.isSome !mainFormInvokeResultHolder) - !mainFormInvokeResultHolder |> Option.get + mainFormInvokeResultHolder |> Option.get - member x.ScheduleRestart() = restart := true; Application.Exit() + member x.ScheduleRestart() = restart <- true; Application.Exit() /// Try to set the unhandled exception mode of System.Windows.Forms let internal TrySetUnhandledExceptionMode() = diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index a3a0003f57..397e148769 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -412,67 +412,67 @@ rule token args skip = parse | SingleChar(c) -> CHAR (char c) | _ -> fail args lexbuf (FSComp.SR.lexThisUnicodeOnlyInStringLiterals()) (CHAR (char 0)) } | "(*IF-FSHARP" - { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | "(*F#" - { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | "ENDIF-FSHARP*)" - { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | "F#*)" - { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | "(*)" { LPAREN_STAR_RPAREN } | "(*" { let m = lexbuf.LexemeRange - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,1,m))) else comment (1,m,args) skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,1,m))) else comment (1,m,args) skip lexbuf } | "(*IF-CAML*)" | "(*IF-OCAML*)" { let m = lexbuf.LexemeRange - if not skip then (COMMENT (LexCont.MLOnly(!args.ifdefStack,m))) else mlOnly m args skip lexbuf } + if not skip then (COMMENT (LexCont.MLOnly(args.ifdefStack,m))) else mlOnly m args skip lexbuf } | '"' { let buf,fin,m = startString args lexbuf - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string (buf,fin,m,args) skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string (buf,fin,m,args) skip lexbuf } | '"' '"' '"' { let buf,fin,m = startString args lexbuf - if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString (buf,fin,m,args) skip lexbuf } + if not skip then (STRING_TEXT (LexCont.TripleQuoteString(args.ifdefStack,m))) else tripleQuoteString (buf,fin,m,args) skip lexbuf } | '$' '"' - { fail args lexbuf (FSComp.SR.lexTokenReserved()) (WHITESPACE (LexCont.Token !args.ifdefStack)) } + { fail args lexbuf (FSComp.SR.lexTokenReserved()) (WHITESPACE (LexCont.Token args.ifdefStack)) } | '@' '"' { let buf,fin,m = startString args lexbuf - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString (buf,fin,m,args) skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString (buf,fin,m,args) skip lexbuf } | truewhite+ { if skip then token args skip lexbuf - else WHITESPACE (LexCont.Token !args.ifdefStack) } + else WHITESPACE (LexCont.Token args.ifdefStack) } | offwhite+ { if args.lightSyntaxStatus.Status then errorR(Error(FSComp.SR.lexTabsNotAllowed(),lexbuf.LexemeRange)) - if not skip then (WHITESPACE (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + if not skip then (WHITESPACE (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | "////" op_char* { // 4+ slash are 1-line comments, online 3 slash are XmlDoc let m = lexbuf.LexemeRange - if not skip then (LINE_COMMENT (LexCont.SingleLineComment(!args.ifdefStack,1,m))) else singleLineComment (None,1,m,args) skip lexbuf } + if not skip then (LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack,1,m))) else singleLineComment (None,1,m,args) skip lexbuf } | "///" op_char* { // Match exactly 3 slash, 4+ slash caught by preceding rule let m = lexbuf.LexemeRange let doc = lexemeTrimLeft lexbuf 3 let sb = (new StringBuilder(100)).Append(doc) - if not skip then (LINE_COMMENT (LexCont.SingleLineComment(!args.ifdefStack,1,m))) else singleLineComment (Some sb,1,m,args) skip lexbuf } + if not skip then (LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack,1,m))) else singleLineComment (Some sb,1,m,args) skip lexbuf } | "//" op_char* { // Need to read all operator symbols too, otherwise it might be parsed by a rule below let m = lexbuf.LexemeRange - if not skip then (LINE_COMMENT (LexCont.SingleLineComment(!args.ifdefStack,1,m))) else singleLineComment (None,1,m,args) skip lexbuf } + if not skip then (LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack,1,m))) else singleLineComment (None,1,m,args) skip lexbuf } | newline - { newline lexbuf; if not skip then (WHITESPACE (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { newline lexbuf; if not skip then (WHITESPACE (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | '`' '`' ([^'`' '\n' '\r' '\t'] | '`' [^'`''\n' '\r' '\t']) + '`' '`' { Keywords.IdentifierToken args lexbuf (lexemeTrimBoth lexbuf 2 2) } @@ -524,7 +524,7 @@ rule token args skip = parse else // add a newline when we don't apply a directive since we consumed a newline getting here newline lexbuf - (HASH_LINE (LexCont.Token !args.ifdefStack)) } + (HASH_LINE (LexCont.Token args.ifdefStack)) } | "<@" { checkExprOp lexbuf; LQUOTE ("<@ @>", false) } | "<@@" { checkExprOp lexbuf; LQUOTE ("<@@ @@>", true) } @@ -589,7 +589,7 @@ rule token args skip = parse | "#!" op_char* { // Treat shebangs like regular comments, but they are only allowed at the start of a file let m = lexbuf.LexemeRange - let tok = shouldStartFile args lexbuf m (0,FSComp.SR.lexHashBangMustBeFirstInFile()) (LINE_COMMENT (LexCont.SingleLineComment(!args.ifdefStack,1,m))) + let tok = shouldStartFile args lexbuf m (0,FSComp.SR.lexHashBangMustBeFirstInFile()) (LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack,1,m))) if not skip then tok else singleLineComment (None,1,m,args) skip lexbuf } | "#light" anywhite* @@ -598,59 +598,59 @@ rule token args skip = parse warning(Error((0,"#light should only occur as the first non-comment text in an F# source file"),lexbuf.LexemeRange)) // TODO unreachable error above, I think? - brianmcn args.lightSyntaxStatus.Status <- true - if not skip then (HASH_LIGHT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + if not skip then (HASH_LIGHT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | ("#indent" | "#light") anywhite+ "\"off\"" { args.lightSyntaxStatus.Status <- false mlCompatWarning (FSComp.SR.lexIndentOffForML()) lexbuf.LexemeRange - if not skip then (HASH_LIGHT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + if not skip then (HASH_LIGHT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | anywhite* "#if" anywhite+ anystring { let m = lexbuf.LexemeRange let lookup id = List.contains id args.defines let lexed = lexeme lexbuf let isTrue = evalIfDefExpression lexbuf.StartPos lexbuf.SupportsFeature args lookup lexed - args.ifdefStack := (IfDefIf,m) :: !(args.ifdefStack) + args.ifdefStack <- (IfDefIf,m) :: args.ifdefStack // Get the token; make sure it starts at zero position & return let cont, f = - ( if isTrue then (LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)), endline (LexerEndlineContinuation.Token !args.ifdefStack) args skip) - else (LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,0,m)), endline (LexerEndlineContinuation.Skip(!args.ifdefStack,0,m)) args skip) ) + ( if isTrue then (LexCont.EndLine(LexerEndlineContinuation.Token(args.ifdefStack)), endline (LexerEndlineContinuation.Token args.ifdefStack) args skip) + else (LexCont.EndLine(LexerEndlineContinuation.Skip(args.ifdefStack,0,m)), endline (LexerEndlineContinuation.Skip(args.ifdefStack,0,m)) args skip) ) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashIfMustBeFirst()) (HASH_IF(m,lexed,cont)) if not skip then tok else f lexbuf } | anywhite* "#else" anywhite* ("//" [^'\n''\r']*)? { let lexed = (lexeme lexbuf) - match !(args.ifdefStack) with + match args.ifdefStack with | [] -> LEX_FAILURE (FSComp.SR.lexHashElseNoMatchingIf()) | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) | (IfDefIf,_) :: rest -> let m = lexbuf.LexemeRange - args.ifdefStack := (IfDefElse,m) :: rest - let tok = HASH_ELSE(m,lexed, LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,0,m))) + args.ifdefStack <- (IfDefElse,m) :: rest + let tok = HASH_ELSE(m,lexed, LexCont.EndLine(LexerEndlineContinuation.Skip(args.ifdefStack,0,m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashElseMustBeFirst()) tok - if not skip then tok else endline (LexerEndlineContinuation.Skip(!args.ifdefStack,0,m)) args skip lexbuf } + if not skip then tok else endline (LexerEndlineContinuation.Skip(args.ifdefStack,0,m)) args skip lexbuf } | anywhite* "#endif" anywhite* ("//" [^'\n''\r']*)? { let lexed = (lexeme lexbuf) let m = lexbuf.LexemeRange - match !(args.ifdefStack) with + match args.ifdefStack with | []-> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) | _ :: rest -> - args.ifdefStack := rest - let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack))) + args.ifdefStack <- rest + let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(args.ifdefStack))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashEndifMustBeFirst()) tok - if not skip then tok else endline (LexerEndlineContinuation.Token(!args.ifdefStack)) args skip lexbuf } + if not skip then tok else endline (LexerEndlineContinuation.Token(args.ifdefStack)) args skip lexbuf } | "#if" - { let tok = fail args lexbuf (FSComp.SR.lexHashIfMustHaveIdent()) (WHITESPACE (LexCont.Token !args.ifdefStack)) + { let tok = fail args lexbuf (FSComp.SR.lexHashIfMustHaveIdent()) (WHITESPACE (LexCont.Token args.ifdefStack)) if not skip then tok else token args skip lexbuf } | surrogateChar surrogateChar | _ { unexpectedChar lexbuf } | eof - { EOF (LexCont.Token !args.ifdefStack) } + { EOF (LexCont.Token args.ifdefStack) } // Skips INACTIVE code until if finds #else / #endif matching with the #if or #else @@ -660,10 +660,10 @@ and ifdefSkip n m args skip = parse // If #if is the first thing on the line then increase depth, otherwise skip, because it is invalid (e.g. "(**) #if ...") if (m.StartColumn <> 0) then - if not skip then (INACTIVECODE (LexCont.IfDefSkip(!args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf + if not skip then (INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf else - let tok = INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,n+1,m))) - if not skip then tok else endline (LexerEndlineContinuation.Skip(!args.ifdefStack,n+1,m)) args skip lexbuf } + let tok = INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(args.ifdefStack,n+1,m))) + if not skip then tok else endline (LexerEndlineContinuation.Skip(args.ifdefStack,n+1,m)) args skip lexbuf } | anywhite* "#else" anywhite* ("//" [^'\n''\r']*)? { let lexed = (lexeme lexbuf) @@ -671,17 +671,17 @@ and ifdefSkip n m args skip = parse // If #else is the first thing on the line then process it, otherwise ignore, because it is invalid (e.g. "(**) #else ...") if (m.StartColumn <> 0) then - if not skip then (INACTIVECODE (LexCont.IfDefSkip(!args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf + if not skip then (INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf elif n = 0 then - match !(args.ifdefStack) with + match args.ifdefStack with | []-> LEX_FAILURE (FSComp.SR.lexHashElseNoMatchingIf()) | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) | (IfDefIf,_) :: rest -> let m = lexbuf.LexemeRange - args.ifdefStack := (IfDefElse,m) :: rest - if not skip then (HASH_ELSE(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)))) else endline (LexerEndlineContinuation.Token(!args.ifdefStack)) args skip lexbuf + args.ifdefStack <- (IfDefElse,m) :: rest + if not skip then (HASH_ELSE(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(args.ifdefStack)))) else endline (LexerEndlineContinuation.Token(args.ifdefStack)) args skip lexbuf else - if not skip then (INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,n,m)))) else endline (LexerEndlineContinuation.Skip(!args.ifdefStack,n,m)) args skip lexbuf } + if not skip then (INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(args.ifdefStack,n,m)))) else endline (LexerEndlineContinuation.Skip(args.ifdefStack,n,m)) args skip lexbuf } | anywhite* "#endif" anywhite* ("//" [^'\n''\r']*)? { let lexed = lexeme lexbuf @@ -689,17 +689,17 @@ and ifdefSkip n m args skip = parse // If #endif is the first thing on the line then process it, otherwise ignore, because it is invalid (e.g. "(**) #endif ...") if (m.StartColumn <> 0) then - if not skip then (INACTIVECODE (LexCont.IfDefSkip(!args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf + if not skip then (INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf elif n = 0 then - match !(args.ifdefStack) with + match args.ifdefStack with | [] -> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) | _ :: rest -> - args.ifdefStack := rest - if not skip then (HASH_ENDIF(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)))) else endline (LexerEndlineContinuation.Token(!args.ifdefStack)) args skip lexbuf + args.ifdefStack <- rest + if not skip then (HASH_ENDIF(m,lexed,LexCont.EndLine(LexerEndlineContinuation.Token(args.ifdefStack)))) else endline (LexerEndlineContinuation.Token(args.ifdefStack)) args skip lexbuf else - let tok = INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,n-1,m))) + let tok = INACTIVECODE(LexCont.EndLine(LexerEndlineContinuation.Skip(args.ifdefStack,n-1,m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexWrongNestedHashEndif()) tok - if not skip then tok else endline (LexerEndlineContinuation.Skip(!args.ifdefStack,(n-1),m)) args skip lexbuf } + if not skip then tok else endline (LexerEndlineContinuation.Skip(args.ifdefStack,(n-1),m)) args skip lexbuf } | newline { newline lexbuf; ifdefSkip n m args skip lexbuf } @@ -709,9 +709,9 @@ and ifdefSkip n m args skip = parse | surrogateChar surrogateChar | _ { // This tries to be nice and get tokens as 'words' because VS uses this when selecting stuff - if not skip then (INACTIVECODE (LexCont.IfDefSkip(!args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf } + if not skip then (INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack,n,m))) else ifdefSkip n m args skip lexbuf } | eof - { EOF (LexCont.IfDefSkip(!args.ifdefStack,n,m)) } + { EOF (LexCont.IfDefSkip(args.ifdefStack,n,m)) } // Called after lexing #if IDENT/#else/#endif - this checks whether there is nothing except end of line // or end of file and then calls the lexing function specified by 'cont' - either token or ifdefSkip @@ -729,40 +729,40 @@ and endline cont args skip = parse } | [^'\r' '\n']+ | _ - { let tok = fail args lexbuf (FSComp.SR.pplexExpectedSingleLineComment()) (WHITESPACE (LexCont.Token !args.ifdefStack)) + { let tok = fail args lexbuf (FSComp.SR.pplexExpectedSingleLineComment()) (WHITESPACE (LexCont.Token args.ifdefStack)) if not skip then tok else token args skip lexbuf } and string sargs skip = parse | '\\' newline anywhite* { let (_buf,_fin,m,args) = sargs newline lexbuf - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | escape_char { let (buf,_fin,m,args) = sargs addByteChar buf (escape (lexeme lexbuf).[1]) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | trigraph { let (buf,_fin,m,args) = sargs let s = lexeme lexbuf addByteChar buf (trigraph s.[1] s.[2] s.[3]) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | hexGraphShort { let (buf,_fin,m,args) = sargs addUnicodeChar buf (int (hexGraphShort (lexemeTrimLeft lexbuf 2))) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | unicodeGraphShort { let (buf,_fin,m,args) = sargs addUnicodeChar buf (int (unicodeGraphShort (lexemeTrimLeft lexbuf 2))) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | unicodeGraphLong { let (buf,_fin,m,args) = sargs let hexChars = lexemeTrimLeft lexbuf 2 - let result () = if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf + let result () = if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf match unicodeGraphLong hexChars with | Invalid -> fail args lexbuf (FSComp.SR.lexInvalidUnicodeLiteral hexChars) (result ()) @@ -788,38 +788,38 @@ and string sargs skip = parse { let (buf,_fin,m,args) = sargs newline lexbuf addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | ident { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | integer | xinteger { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | anywhite + { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } | eof { let (_buf,_fin,m,args) = sargs - EOF (LexCont.String(!args.ifdefStack,m)) } + EOF (LexCont.String(args.ifdefStack,m)) } | surrogateChar surrogateChar // surrogate code points always come in pairs | _ { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.String(args.ifdefStack,m))) else string sargs skip lexbuf } and verbatimString sargs skip = parse | '"' '"' { let (buf,_fin,m,args) = sargs addByteChar buf '\"' - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | '"' { let (buf,fin,_m,_args) = sargs @@ -835,32 +835,32 @@ and verbatimString sargs skip = parse { let (buf,_fin,m,args) = sargs newline lexbuf addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | ident { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | integer | xinteger { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | anywhite + { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString sargs skip lexbuf } | eof { let (_buf,_fin,m,args) = sargs - EOF (LexCont.VerbatimString(!args.ifdefStack,m)) } + EOF (LexCont.VerbatimString(args.ifdefStack,m)) } | surrogateChar surrogateChar // surrogate code points always come in pairs | _ { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.VerbatimString(!args.ifdefStack,m))) else verbatimString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.VerbatimString(args.ifdefStack,m))) else verbatimString sargs skip lexbuf } and tripleQuoteString sargs skip = parse | '"' '"' '"' @@ -872,33 +872,33 @@ and tripleQuoteString sargs skip = parse { let (buf,_fin,m,args) = sargs newline lexbuf addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.TripleQuoteString(args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } // The rest is to break into pieces to allow double-click-on-word and other such things | ident { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.TripleQuoteString(args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } | integer | xinteger { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.TripleQuoteString(args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } | anywhite + { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.TripleQuoteString(args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } | eof { let (_buf,_fin,m,args) = sargs - EOF (LexCont.TripleQuoteString(!args.ifdefStack,m)) } + EOF (LexCont.TripleQuoteString(args.ifdefStack,m)) } | surrogateChar surrogateChar // surrogate code points always come in pairs | _ { let (buf,_fin,m,args) = sargs addUnicodeString buf (lexeme lexbuf) - if not skip then (STRING_TEXT (LexCont.TripleQuoteString(!args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } + if not skip then (STRING_TEXT (LexCont.TripleQuoteString(args.ifdefStack,m))) else tripleQuoteString sargs skip lexbuf } // Parsing single-line comment - we need to split it into words for Visual Studio IDE and singleLineComment cargs skip = parse @@ -907,78 +907,78 @@ and singleLineComment cargs skip = parse trySaveXmlDoc lexbuf buff newline lexbuf // Saves the documentation (if we're collecting any) into a buffer-local variable. - if not skip then (LINE_COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + if not skip then (LINE_COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | eof { let _, _n,_m,args = cargs // NOTE: it is legal to end a file with this comment, so we'll return EOF as a token - EOF (LexCont.Token !args.ifdefStack) } + EOF (LexCont.Token args.ifdefStack) } | [^ ' ' '\n' '\r' ]+ | anywhite+ { let buff,n,m,args = cargs // Append the current token to the XML documentation if we're collecting it tryAppendXmlDoc buff (lexeme lexbuf) - if not skip then (LINE_COMMENT (LexCont.SingleLineComment(!args.ifdefStack,n,m))) else singleLineComment (buff,n,m,args) skip lexbuf } + if not skip then (LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack,n,m))) else singleLineComment (buff,n,m,args) skip lexbuf } | surrogateChar surrogateChar | _ { let _, _n,_m,args = cargs - if not skip then (LINE_COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + if not skip then (LINE_COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } and comment cargs skip = parse | char { let n,m,args = cargs - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } | '"' { let n,m,args = cargs - if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.StringInComment(args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } | '"' '"' '"' { let n,m,args = cargs - if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } | '@' '"' { let n,m,args = cargs - if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.VerbatimStringInComment(args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } | "(*)" { let n,m,args = cargs - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment cargs skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment cargs skip lexbuf } | '(' '*' { let n,m,args = cargs - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n+1,m))) else comment (n+1,m,args) skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n+1,m))) else comment (n+1,m,args) skip lexbuf } | newline { let n,m,args = cargs newline lexbuf - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment cargs skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment cargs skip lexbuf } | "*)" { let n,m,args = cargs - if n > 1 then if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n-1,m))) else comment (n-1,m,args) skip lexbuf - else if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + if n > 1 then if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n-1,m))) else comment (n-1,m,args) skip lexbuf + else if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | anywhite+ | [^ '\'' '(' '*' '\n' '\r' '"' ')' '@' ' ' '\t' ]+ { let n,m,args = cargs - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment cargs skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment cargs skip lexbuf } | eof { let n,m,args = cargs - EOF (LexCont.Comment(!args.ifdefStack,n,m)) } + EOF (LexCont.Comment(args.ifdefStack,n,m)) } | surrogateChar surrogateChar | _ { let n,m,args = cargs - if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } + if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } and stringInComment n m args skip = parse // Follow string lexing, skipping tokens until it finishes | '\\' newline anywhite* { newline lexbuf - if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.StringInComment(args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } | escape_char | trigraph @@ -989,69 +989,69 @@ and stringInComment n m args skip = parse | integer | xinteger | anywhite + - { if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.StringInComment(args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } | '"' - { if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } + { if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } | newline { newline lexbuf - if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.StringInComment(args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } | eof - { EOF (LexCont.StringInComment(!args.ifdefStack,n,m)) } + { EOF (LexCont.StringInComment(args.ifdefStack,n,m)) } | surrogateChar surrogateChar | _ - { if not skip then (COMMENT (LexCont.StringInComment(!args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.StringInComment(args.ifdefStack,n,m))) else stringInComment n m args skip lexbuf } and verbatimStringInComment n m args skip = parse // Follow verbatimString lexing, in short, skip double-quotes and other chars until we hit a single quote | '"' '"' - { if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.VerbatimStringInComment(args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } | '"' - { if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } + { if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } | ident | integer | xinteger | anywhite + - { if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.VerbatimStringInComment(args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } | newline { newline lexbuf - if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.VerbatimStringInComment(args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } | eof - { EOF (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m)) } + { EOF (LexCont.VerbatimStringInComment(args.ifdefStack,n,m)) } | surrogateChar surrogateChar | _ - { if not skip then (COMMENT (LexCont.VerbatimStringInComment(!args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.VerbatimStringInComment(args.ifdefStack,n,m))) else verbatimStringInComment n m args skip lexbuf } and tripleQuoteStringInComment n m args skip = parse // Follow tripleQuoteString lexing | '"' '"' '"' - { if not skip then (COMMENT (LexCont.Comment(!args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } + { if not skip then (COMMENT (LexCont.Comment(args.ifdefStack,n,m))) else comment (n,m,args) skip lexbuf } | ident | integer | xinteger | anywhite + - { if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } | newline { newline lexbuf - if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } + if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } | eof - { EOF (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m)) } + { EOF (LexCont.TripleQuoteStringInComment(args.ifdefStack,n,m)) } | surrogateChar surrogateChar | _ - { if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(!args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } + { if not skip then (COMMENT (LexCont.TripleQuoteStringInComment(args.ifdefStack,n,m))) else tripleQuoteStringInComment n m args skip lexbuf } and mlOnly m args skip = parse @@ -1059,17 +1059,17 @@ and mlOnly m args skip = parse { let buf = ByteBuffer.Create 100 let m2 = lexbuf.LexemeRange let _ = string (buf,defaultStringFinisher,m2,args) skip lexbuf - if not skip then (COMMENT (LexCont.MLOnly(!args.ifdefStack,m))) else mlOnly m args skip lexbuf } + if not skip then (COMMENT (LexCont.MLOnly(args.ifdefStack,m))) else mlOnly m args skip lexbuf } | newline - { newline lexbuf; if not skip then (COMMENT (LexCont.MLOnly(!args.ifdefStack,m))) else mlOnly m args skip lexbuf } + { newline lexbuf; if not skip then (COMMENT (LexCont.MLOnly(args.ifdefStack,m))) else mlOnly m args skip lexbuf } | "(*ENDIF-CAML*)" - { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | "(*ENDIF-OCAML*)" - { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } + { if not skip then (COMMENT (LexCont.Token args.ifdefStack)) else token args skip lexbuf } | [^ '(' '"' '\n' '\r' ]+ - { if not skip then (COMMENT (LexCont.MLOnly(!args.ifdefStack,m))) else mlOnly m args skip lexbuf } + { if not skip then (COMMENT (LexCont.MLOnly(args.ifdefStack,m))) else mlOnly m args skip lexbuf } | eof - { EOF (LexCont.MLOnly(!args.ifdefStack,m)) } + { EOF (LexCont.MLOnly(args.ifdefStack,m)) } | surrogateChar surrogateChar | _ - { if not skip then (COMMENT (LexCont.MLOnly(!args.ifdefStack,m))) else mlOnly m args skip lexbuf } + { if not skip then (COMMENT (LexCont.MLOnly(args.ifdefStack,m))) else mlOnly m args skip lexbuf } diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs index b25627e9a4..6201ec8a41 100644 --- a/src/fsharp/lexhelp.fs +++ b/src/fsharp/lexhelp.fs @@ -49,7 +49,7 @@ type LexResourceManager() = /// Lexer parameters type lexargs = { defines: string list - ifdefStack: LexerIfdefStack + mutable ifdefStack: LexerIfdefStack resourceManager: LexResourceManager lightSyntaxStatus : LightSyntaxStatus errorLogger: ErrorLogger diff --git a/src/fsharp/lexhelp.fsi b/src/fsharp/lexhelp.fsi index f75ecd392d..bcc1bc3dc8 100644 --- a/src/fsharp/lexhelp.fsi +++ b/src/fsharp/lexhelp.fsi @@ -29,7 +29,7 @@ type LexResourceManager = type lexargs = { defines: string list - ifdefStack: LexerIfdefStack + mutable ifdefStack: LexerIfdefStack resourceManager: LexResourceManager lightSyntaxStatus : LightSyntaxStatus errorLogger: ErrorLogger diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index fba1c975e8..b9653f35c7 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -13,8 +13,8 @@ open FSharp.Compiler.AbstractIL.Internal.Library /// is this the developer-debug build? let debug = false let verbose = false -let progress = ref false -let tracking = ref false // intended to be a general hook to control diagnostic output when tracking down bugs +let mutable progress = false +let mutable tracking = false // intended to be a general hook to control diagnostic output when tracking down bugs let condition s = try (System.Environment.GetEnvironmentVariable(s) <> null) with _ -> false @@ -387,8 +387,19 @@ let inline cached cache resF = | _ -> cache.cacheVal +let inline cacheOptByref (cache: byref<'T option>) f = + match cache with + | Some v -> v + | None -> + let res = f() + cache <- Some res + res + +// REVIEW: this is only used because we want to mutate a record field, +// and because you cannot take a byref<_> of such a thing directly, +// we cannot use 'cacheOptByref'. If that is changed, this can be removed. let inline cacheOptRef cache f = - match !cache with + match !cache with | Some v -> v | None -> let res = f() diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index cd9b187d3a..76585ba9d5 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -193,7 +193,7 @@ type internal TypeCheckInfo // We guarantee to only refine to a more nested environment. It may not be strictly // the right environment, but will always be at least as rich - let bestAlmostIncludedSoFar = ref None + let mutable bestAlmostIncludedSoFar = None sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> // take only ranges that strictly do not include cursorPos (all ranges that touch cursorPos were processed during 'Strict Inclusion' part) @@ -204,15 +204,15 @@ type internal TypeCheckInfo | None -> true if contained then - match !bestAlmostIncludedSoFar with + match bestAlmostIncludedSoFar with | Some (rightm:range,_,_) -> if posGt possm.End rightm.End || (posEq possm.End rightm.End && posGt possm.Start rightm.Start) then - bestAlmostIncludedSoFar := Some (possm,env,ad) - | _ -> bestAlmostIncludedSoFar := Some (possm,env,ad)) + bestAlmostIncludedSoFar <- Some (possm,env,ad) + | _ -> bestAlmostIncludedSoFar <- Some (possm,env,ad)) let resEnv = - match !bestAlmostIncludedSoFar, mostDeeplyNestedEnclosingScope with + match bestAlmostIncludedSoFar, mostDeeplyNestedEnclosingScope with | Some (_,env,ad), None -> env, ad | Some (_,almostIncludedEnv,ad), Some (_,mostDeeplyNestedEnv,_) when almostIncludedEnv.eFieldLabels.Count >= mostDeeplyNestedEnv.eFieldLabels.Count -> @@ -1525,7 +1525,7 @@ module internal ParseAndCheckFile = // When analyzing files using ParseOneFile, i.e. for the use of editing clients, we do not apply line directives. // TODO(pathmap): expose PathMap on the service API, and thread it through here - let lexargs = mkLexargs(fileName, defines, lightSyntaxStatus, lexResourceManager, ref [], errHandler.ErrorLogger, PathMap.empty) + let lexargs = mkLexargs(fileName, defines, lightSyntaxStatus, lexResourceManager, [], errHandler.ErrorLogger, PathMap.empty) let lexargs = { lexargs with applyLineDirectives = false } let tokenizer = LexFilter.LexFilter(lightSyntaxStatus, options.CompilingFsLib, Lexer.token lexargs true, lexbuf) diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 365570b5d6..de773fd3aa 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -125,10 +125,10 @@ module internal IncrementalBuild = | VectorBuildRule ve -> ve.Name // Ids of exprs - let nextid = ref 999 // Number ids starting with 1000 to discern them + let mutable nextid = 999 // Number ids starting with 1000 to discern them let NextId() = - nextid:=!nextid+1 - Id(!nextid) + nextid <- nextid + 1 + Id(nextid) type INode = abstract Name: string diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index a86b26db8a..f3c27337ab 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -860,8 +860,8 @@ module ParsedInput = // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. use _ignoreAllDiagnostics = new ErrorScope() - let result: (Scope * pos * (* finished *) bool) option ref = ref None - let ns: string[] option ref = ref None + let mutable result = None + let mutable ns = None let modules = ResizeArray() let inline longIdentToIdents ident = ident |> Seq.map (fun x -> string x) |> Seq.toArray @@ -873,17 +873,17 @@ module ParsedInput = let doRange kind (scope: LongIdent) line col = if line <= currentLine then - match !result, insertionPoint with + match result, insertionPoint with | None, _ -> - result := Some ({ Idents = longIdentToIdents scope; Kind = kind }, mkPos line col, false) + result <- Some ({ Idents = longIdentToIdents scope; Kind = kind }, mkPos line col, false) | Some (_, _, true), _ -> () | Some (oldScope, oldPos, false), OpenStatementInsertionPoint.TopLevel when kind <> OpenDeclaration -> - result := Some (oldScope, oldPos, true) + result <- Some (oldScope, oldPos, true) | Some (oldScope, oldPos, _), _ -> match kind, oldScope.Kind with | (Namespace | NestedModule | TopModule), OpenDeclaration | _ when oldPos.Line <= line -> - result := + result <- Some ({ Idents = match scope with | [] -> oldScope.Idents @@ -916,11 +916,11 @@ module ParsedInput = if range.EndLine >= currentLine then let isModule = kind.IsModule match isModule, parent, ident with - | false, _, _ -> ns := Some (longIdentToIdents ident) + | false, _, _ -> ns <- Some (longIdentToIdents ident) // top level module with "inlined" namespace like Ns1.Ns2.TopModule | true, [], _f :: _s :: _ -> let ident = longIdentToIdents ident - ns := Some (ident.[0..ident.Length - 2]) + ns <- Some (ident.[0..ident.Length - 2]) | _ -> () let fullIdent = parent @ ident @@ -958,9 +958,9 @@ module ParsedInput = | ParsedInput.ImplFile input -> walkImplFileInput input let res = - !result + result |> Option.map (fun (scope, pos, _) -> - let ns = !ns |> Option.map longIdentToIdents + let ns = ns |> Option.map longIdentToIdents scope, ns, mkPos (pos.Line + 1) pos.Column) let modules = diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs index c37ea56d90..a984a5ce1e 100644 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -475,10 +475,10 @@ module internal LexerStateEncoding = let callLexCont lexcont args skip lexbuf = let argsWithIfDefs ifd = - if !args.ifdefStack = ifd then + if args.ifdefStack = ifd then args else - {args with ifdefStack = ref ifd} + {args with ifdefStack = ifd} match lexcont with | LexCont.EndLine cont -> Lexer.endline cont args skip lexbuf | LexCont.Token ifd -> Lexer.token (argsWithIfDefs ifd) skip lexbuf @@ -775,8 +775,8 @@ type FSharpSourceTokenizer(defineConstants: string list, filename: string option let lexResourceManager = new Lexhelp.LexResourceManager() - let lexArgsLightOn = mkLexargs(filename, defineConstants, LightSyntaxStatus(true, false), lexResourceManager, ref [], DiscardErrorsLogger, PathMap.empty) - let lexArgsLightOff = mkLexargs(filename, defineConstants, LightSyntaxStatus(false, false), lexResourceManager, ref [], DiscardErrorsLogger, PathMap.empty) + let lexArgsLightOn = mkLexargs(filename, defineConstants, LightSyntaxStatus(true, false), lexResourceManager, [], DiscardErrorsLogger, PathMap.empty) + let lexArgsLightOff = mkLexargs(filename, defineConstants, LightSyntaxStatus(false, false), lexResourceManager, [], DiscardErrorsLogger, PathMap.empty) member this.CreateLineTokenizer(lineText: string) = let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, lineText) diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs index 3578543b65..dbecc3b101 100755 --- a/src/fsharp/service/ServiceNavigation.fs +++ b/src/fsharp/service/ServiceNavigation.fs @@ -97,15 +97,15 @@ module NavigationImpl = /// Get information for implementation file let getNavigationFromImplFile (modules: SynModuleOrNamespace list) = // Map for dealing with name conflicts - let nameMap = ref Map.empty + let mutable nameMap = Map.empty let addItemName name = - let count = defaultArg (!nameMap |> Map.tryFind name) 0 - nameMap := (Map.add name (count + 1) (!nameMap)) + let count = defaultArg (nameMap |> Map.tryFind name) 0 + nameMap <- (Map.add name (count + 1) (nameMap)) (count + 1) let uniqueName name idx = - let total = Map.find name (!nameMap) + let total = Map.find name nameMap sprintf "%s_%d_of_%d" name idx total // Create declaration (for the left dropdown) @@ -305,13 +305,13 @@ module NavigationImpl = /// Get information for signature file let getNavigationFromSigFile (modules: SynModuleOrNamespaceSig list) = // Map for dealing with name conflicts - let nameMap = ref Map.empty + let mutable nameMap = Map.empty let addItemName name = - let count = defaultArg (!nameMap |> Map.tryFind name) 0 - nameMap := (Map.add name (count + 1) (!nameMap)) + let count = defaultArg (nameMap |> Map.tryFind name) 0 + nameMap <- (Map.add name (count + 1) (nameMap)) (count + 1) let uniqueName name idx = - let total = Map.find name (!nameMap) + let total = Map.find name nameMap sprintf "%s_%d_of_%d" name idx total // Create declaration (for the left dropdown) diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index a98cb2966b..fdaacbb376 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -1013,7 +1013,7 @@ type FSharpChecker(legacyReferenceResolver, CompileHelpers.setOutputStreams execute // References used to capture the results of compilation - let tcImportsRef = ref (None: TcImports option) + let tcImportsRef = ref None let assemblyBuilderRef = ref None let tcImportsCapture = Some (fun tcImports -> tcImportsRef := Some tcImports) diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 98ededce05..7dc9e0a11d 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -1830,21 +1830,21 @@ and [] // We do not need to lock this mutable state this it is only ever accessed from the compiler thread. let activePatternElemRefCache: NameMap option ref = ref None - let modulesByDemangledNameCache: NameMap option ref = ref None + let mutable modulesByDemangledNameCache: NameMap option = None - let exconsByDemangledNameCache: NameMap option ref = ref None + let mutable exconsByDemangledNameCache: NameMap option = None - let tyconsByDemangledNameAndArityCache: LayeredMap option ref = ref None + let mutable tyconsByDemangledNameAndArityCache: LayeredMap option = None - let tyconsByAccessNamesCache: LayeredMultiMap option ref = ref None + let mutable tyconsByAccessNamesCache: LayeredMultiMap option = None - let tyconsByMangledNameCache: NameMap option ref = ref None + let mutable tyconsByMangledNameCache: NameMap option = None - let allEntitiesByMangledNameCache: NameMap option ref = ref None + let mutable allEntitiesByMangledNameCache: NameMap option = None - let allValsAndMembersByPartialLinkageKeyCache: MultiMap option ref = ref None + let mutable allValsAndMembersByPartialLinkageKeyCache: MultiMap option = None - let allValsByLogicalNameCache: NameMap option ref = ref None + let mutable allValsByLogicalNameCache: NameMap option = None /// Namespace or module-compiled-as-type? member mtyp.ModuleOrNamespaceKind = kind @@ -1861,17 +1861,17 @@ and [] /// Mutation used during compilation of FSharp.Core.dll member mtyp.AddModuleOrNamespaceByMutation(modul: ModuleOrNamespace) = entities <- QueueList.appendOne entities modul - modulesByDemangledNameCache := None - allEntitiesByMangledNameCache := None + modulesByDemangledNameCache <- None + allEntitiesByMangledNameCache <- None #if !NO_EXTENSIONTYPING /// Mutation used in hosting scenarios to hold the hosted types in this module or namespace member mtyp.AddProvidedTypeEntity(entity: Entity) = entities <- QueueList.appendOne entities entity - tyconsByMangledNameCache := None - tyconsByDemangledNameAndArityCache := None - tyconsByAccessNamesCache := None - allEntitiesByMangledNameCache := None + tyconsByMangledNameCache <- None + tyconsByDemangledNameAndArityCache <- None + tyconsByAccessNamesCache <- None + allEntitiesByMangledNameCache <- None #endif /// Return a new module or namespace type with an entity added. @@ -1901,19 +1901,19 @@ and [] /// table is indexed by both name and generic arity. This means that for generic /// types "List`1", the entry (List, 1) will be present. member mtyp.TypesByDemangledNameAndArity m = - cacheOptRef tyconsByDemangledNameAndArityCache (fun () -> + cacheOptByref &tyconsByDemangledNameAndArityCache (fun () -> LayeredMap.Empty.AddAndMarkAsCollapsible( mtyp.TypeAndExceptionDefinitions |> List.map (fun (tc: Tycon) -> KeyTyconByDemangledNameAndArity tc.LogicalName (tc.Typars m) tc) |> List.toArray)) /// Get a table of types defined within this module, namespace or type. The /// table is indexed by both name and, for generic types, also by mangled name. member mtyp.TypesByAccessNames = - cacheOptRef tyconsByAccessNamesCache (fun () -> + cacheOptByref &tyconsByAccessNamesCache (fun () -> LayeredMultiMap.Empty.AddAndMarkAsCollapsible (mtyp.TypeAndExceptionDefinitions |> List.toArray |> Array.collect (fun (tc: Tycon) -> KeyTyconByAccessNames tc.LogicalName tc))) // REVIEW: we can remove this lookup and use AllEntitiesByMangledName instead? member mtyp.TypesByMangledName = let addTyconByMangledName (x: Tycon) tab = NameMap.add x.LogicalName x tab - cacheOptRef tyconsByMangledNameCache (fun () -> + cacheOptByref &tyconsByMangledNameCache (fun () -> List.foldBack addTyconByMangledName mtyp.TypeAndExceptionDefinitions Map.empty) /// Get a table of entities indexed by both logical and compiled names @@ -1925,7 +1925,7 @@ and [] if name1 = name2 then tab else NameMap.add name2 x tab - cacheOptRef allEntitiesByMangledNameCache (fun () -> + cacheOptByref &allEntitiesByMangledNameCache (fun () -> QueueList.foldBack addEntityByMangledName entities Map.empty) /// Get a table of entities indexed by both logical name @@ -1942,7 +1942,7 @@ and [] MultiMap.add key x tab else tab - cacheOptRef allValsAndMembersByPartialLinkageKeyCache (fun () -> + cacheOptByref &allValsAndMembersByPartialLinkageKeyCache (fun () -> QueueList.foldBack addValByMangledName vals MultiMap.empty) /// Try to find the member with the given linkage key in the given module. @@ -1963,7 +1963,7 @@ and [] NameMap.add x.LogicalName x tab else tab - cacheOptRef allValsByLogicalNameCache (fun () -> + cacheOptByref &allValsByLogicalNameCache (fun () -> QueueList.foldBack addValByName vals Map.empty) /// Compute a table of values and members indexed by logical name. @@ -1978,7 +1978,7 @@ and [] /// Get a table of F# exception definitions indexed by demangled name, so 'FailureException' is indexed by 'Failure' member mtyp.ExceptionDefinitionsByDemangledName = let add (tycon: Tycon) acc = NameMap.add tycon.LogicalName tycon acc - cacheOptRef exconsByDemangledNameCache (fun () -> + cacheOptByref &exconsByDemangledNameCache (fun () -> List.foldBack add mtyp.ExceptionDefinitions Map.empty) /// Get a table of nested module and namespace fragments indexed by demangled name (so 'ListModule' becomes 'List') @@ -1987,7 +1987,7 @@ and [] if entity.IsModuleOrNamespace then NameMap.add entity.DemangledModuleOrNamespaceName entity acc else acc - cacheOptRef modulesByDemangledNameCache (fun () -> + cacheOptByref &modulesByDemangledNameCache (fun () -> QueueList.foldBack add entities Map.empty) [] diff --git a/src/ilx/ilxsettings.fs b/src/ilx/ilxsettings.fs index 64ea572e02..2355a6b1b6 100644 --- a/src/ilx/ilxsettings.fs +++ b/src/ilx/ilxsettings.fs @@ -10,18 +10,18 @@ type IlxCallImplementation = | VirtEntriesVirtCode //++GLOBAL MUTABLE STATE (concurrency-safe because assigned only during F# library compilation) -let ilxCompilingFSharpCoreLib = ref false +let mutable ilxCompilingFSharpCoreLib = false //++GLOBAL MUTABLE STATE (concurrency-safe because assigned only during F# library compilation) -let ilxFsharpCoreLibAssemRef = ref (None : ILAssemblyRef option) +let mutable ilxFsharpCoreLibAssemRef = None : ILAssemblyRef option /// Scope references for FSharp.Core.dll let ilxFsharpCoreLibScopeRef () = - if !ilxCompilingFSharpCoreLib then + if ilxCompilingFSharpCoreLib then ILScopeRef.Local else let assemblyRef = - match !ilxFsharpCoreLibAssemRef with + match ilxFsharpCoreLibAssemRef with | Some o -> o | None -> // The exact public key token and version used here don't actually matter, or shouldn't. diff --git a/src/utils/TaggedCollections.fs b/src/utils/TaggedCollections.fs index 54f7e07fc5..479b8def82 100644 --- a/src/utils/TaggedCollections.fs +++ b/src/utils/TaggedCollections.fs @@ -478,15 +478,15 @@ namespace Internal.Utilities.Collections.Tagged not stack.IsEmpty let toSeq s = - let i = ref (SetIterator s) + let mutable i = SetIterator s { new IEnumerator<_> with - member __.Current = (!i).Current + member _.Current = i.Current interface System.Collections.IEnumerator with - member __.Current = box (!i).Current - member __.MoveNext() = (!i).MoveNext() - member __.Reset() = i := SetIterator s + member _.Current = box i.Current + member _.MoveNext() = i.MoveNext() + member _.Reset() = i <- SetIterator s interface System.IDisposable with - member __.Dispose() = () } + member _.Dispose() = () } //-------------------------------------------------------------------------- // Set comparison. This can be expensive. @@ -545,8 +545,8 @@ namespace Internal.Utilities.Collections.Tagged loop s [] let copyToArray s (arr: _[]) i = - let j = ref i - iter (fun x -> arr.[!j] <- x; j := !j + 1) s + let mutable j = i + iter (fun x -> arr.[j] <- x; j <- j + 1) s let toArray s = let n = (count s) @@ -1019,8 +1019,8 @@ namespace Internal.Utilities.Collections.Tagged mkFromEnumerator comparer empty ie let copyToArray s (arr: _[]) i = - let j = ref i - s |> iter (fun x y -> arr.[!j] <- KeyValuePair(x,y); j := !j + 1) + let mutable j = i + s |> iter (fun x y -> arr.[j] <- KeyValuePair(x,y); j <- j + 1) /// Imperative left-to-right iterators. @@ -1078,13 +1078,13 @@ namespace Internal.Utilities.Collections.Tagged not stack.IsEmpty let toSeq s = - let i = ref (MapIterator(s)) + let mutable i = MapIterator(s) { new IEnumerator<_> with - member self.Current = (!i).Current + member self.Current = i.Current interface System.Collections.IEnumerator with - member self.Current = box (!i).Current - member self.MoveNext() = (!i).MoveNext() - member self.Reset() = i := MapIterator(s) + member self.Current = box i.Current + member self.MoveNext() = i.MoveNext() + member self.Reset() = i <- MapIterator(s) interface System.IDisposable with member self.Dispose() = ()} diff --git a/src/utils/sformat.fs b/src/utils/sformat.fs index 21b84f5bef..013e55626e 100644 --- a/src/utils/sformat.fs +++ b/src/utils/sformat.fs @@ -822,9 +822,9 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl let path = Dictionary(10,HashIdentity.Reference) // Roughly count the "nodes" printed, e.g. leaf items and inner nodes, but not every bracket and comma. - let size = ref opts.PrintSize - let exceededPrintSize() = !size<=0 - let countNodes n = if !size > 0 then size := !size - n else () // no need to keep decrementing (and avoid wrap around) + let mutable size = opts.PrintSize + let exceededPrintSize() = size<=0 + let countNodes n = if size > 0 then size <- size - n else () // no need to keep decrementing (and avoid wrap around) let stopShort _ = exceededPrintSize() // for unfoldL // Recursive descent diff --git a/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs b/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs index 21667c727d..3f91e0f159 100644 --- a/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs +++ b/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs @@ -59,12 +59,11 @@ type HashIfExpression() = member x.ErrorCount = errors.Count } - let stack : LexerIfdefStack = ref [] let lightSyntax = LightSyntaxStatus(true, false) let resourceManager = LexResourceManager () let defines = [] let startPos = Position.Empty - let args = mkLexargs ("dummy", defines, lightSyntax, resourceManager, stack, errorLogger, PathMap.empty) + let args = mkLexargs ("dummy", defines, lightSyntax, resourceManager, [], errorLogger, PathMap.empty) CompileThreadStatic.ErrorLogger <- errorLogger diff --git a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs index e45e28a19d..10dd261e8f 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs @@ -458,7 +458,7 @@ module internal Tokenizer = let lineTokenizer = sourceTokenizer.CreateLineTokenizer(lineContents) let tokens = ResizeArray() let mutable tokenInfoOption = None - let previousLexState = ref lexState + let mutable previousLexState = lexState let processToken() = let classificationType = compilerTokenToRoslynToken(tokenInfoOption.Value.ColorClass) @@ -471,9 +471,9 @@ module internal Tokenizer = tokens.Add savedToken let scanAndColorNextToken() = - let info, nextLexState = lineTokenizer.ScanToken(!previousLexState) + let info, nextLexState = lineTokenizer.ScanToken(previousLexState) tokenInfoOption <- info - previousLexState := nextLexState + previousLexState <- nextLexState // Apply some hacks to clean up the token stream (we apply more later) match info with @@ -519,7 +519,7 @@ module internal Tokenizer = classifiedSpans.Add(new ClassifiedSpan(classificationType, textSpan)) startPosition <- endPosition - SourceLineData(textLine.Start, lexState, previousLexState.Value, lineContents.GetHashCode(), classifiedSpans.ToArray(), tokens.ToArray()) + SourceLineData(textLine.Start, lexState, previousLexState, lineContents.GetHashCode(), classifiedSpans.ToArray(), tokens.ToArray()) // We keep incremental data per-document. When text changes we correlate text line-by-line (by hash codes of lines) diff --git a/vsintegration/src/FSharp.VS.FSI/sessions.fs b/vsintegration/src/FSharp.VS.FSI/sessions.fs index 5e07e4672e..b1b5a85616 100644 --- a/vsintegration/src/FSharp.VS.FSI/sessions.fs +++ b/vsintegration/src/FSharp.VS.FSI/sessions.fs @@ -42,9 +42,9 @@ type internal EventWrapper() = /// Exceptions raised by f x are caught and reported in DEBUG mode. let timeoutApp descr timeoutMS (f : 'a -> 'b) (arg:'a) = use ev = new EventWrapper() - let r : 'b option ref = ref None + let mutable r = None System.Threading.ThreadPool.QueueUserWorkItem(fun _ -> - r := + r <- try f arg |> Some with @@ -63,7 +63,7 @@ let timeoutApp descr timeoutMS (f : 'a -> 'b) (arg:'a) = ev.Set() ) |> ignore ev.WaitOne(timeoutMS) |> ignore - !r + r module SessionsProperties = let mutable useAnyCpuVersion = true // 64-bit by default From 0a0889e3564d0ff745119cca2371e9ea78a82a99 Mon Sep 17 00:00:00 2001 From: Isaac Abraham Date: Wed, 8 Jan 2020 19:58:02 +0100 Subject: [PATCH 162/214] Better anonymous record reporting (#8094) * Initial attempt at better anonymous record reporting. * Update error texts and fix tests. * Fix test, but for real this time. * Fix another random BSL file. * Next random file fix! * Line formatting. --- src/fsharp/ConstraintSolver.fs | 31 +++++++++++++++++++--- src/fsharp/FSComp.txt | 5 +++- src/fsharp/xlf/FSComp.txt.cs.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.de.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.es.xlf | 21 ++++++++++++--- src/fsharp/xlf/FSComp.txt.fr.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.it.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.ja.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.ko.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.pl.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.ru.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.tr.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 19 +++++++++++-- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 19 +++++++++++-- tests/fsharp/typecheck/sigs/neg113.bsl | 4 +-- tests/fsharp/typecheck/sigs/neg113.vsbsl | 4 +-- tests/fsharp/typecheck/sigs/neg_anon_1.bsl | 4 +-- 18 files changed, 260 insertions(+), 37 deletions(-) diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index e22437de14..0360d253dd 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -835,10 +835,35 @@ and SolveAnonInfoEqualsAnonInfo (csenv: ConstraintSolverEnv) m2 (anonInfo1: Anon (match anonInfo1.Assembly, anonInfo2.Assembly with | ccu1, ccu2 -> if not (ccuEq ccu1 ccu2) then ErrorD (ConstraintSolverError(FSComp.SR.tcAnonRecdCcuMismatch(ccu1.AssemblyName, ccu2.AssemblyName), csenv.m,m2)) else ResultD () ) ++ (fun () -> + if not (anonInfo1.SortedNames = anonInfo2.SortedNames) then - let namesText1 = sprintf "%A" (Array.toList anonInfo1.SortedNames) - let namesText2 = sprintf "%A" (Array.toList anonInfo2.SortedNames) - ErrorD (ConstraintSolverError(FSComp.SR.tcAnonRecdFieldNameMismatch(namesText1, namesText2), csenv.m,m2)) + let (|Subset|Superset|Overlap|CompletelyDifferent|) (first, second) = + let first = Set first + let second = Set second + let secondOnly = Set.toList (second - first) + let firstOnly = Set.toList (first - second) + + if second.IsSubsetOf first then + Subset firstOnly + elif second.IsSupersetOf first then + Superset secondOnly + elif Set.intersect first second <> Set.empty then + Overlap(firstOnly, secondOnly) + else + CompletelyDifferent(Seq.toList first) + + let message = + match anonInfo1.SortedNames, anonInfo2.SortedNames with + | Subset missingFields -> + FSComp.SR.tcAnonRecdFieldNameSubset(string missingFields) + | Superset extraFields -> + FSComp.SR.tcAnonRecdFieldNameSuperset(string extraFields) + | Overlap (missingFields, extraFields) -> + FSComp.SR.tcAnonRecdFieldNameMismatch(string missingFields, string extraFields) + | CompletelyDifferent missingFields -> + FSComp.SR.tcAnonRecdFieldNameDifferent(string missingFields) + + ErrorD (ConstraintSolverError(message, csenv.m,m2)) else ResultD ()) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index c1ab22ab6a..0bda612a16 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1352,7 +1352,10 @@ tcGlobalsSystemTypeNotFound,"The system type '%s' was required but no referenced 3214,methodIsNotStatic,"Method or object constructor '%s' is not static" 3215,parsUnexpectedSymbolEqualsInsteadOfIn,"Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead?" tcAnonRecdCcuMismatch,"Two anonymous record types are from different assemblies '%s' and '%s'" -tcAnonRecdFieldNameMismatch,"Two anonymous record types have mismatched sets of field names '%s' and '%s'" +tcAnonRecdFieldNameMismatch,"This anonymous record does not exactly match the expected shape. Add the missing fields %s and remove the extra fields %s." +tcAnonRecdFieldNameSubset,"This anonymous record does not have enough fields. Add the missing fields %s." +tcAnonRecdFieldNameSuperset,"This anonymous record has too many fields. Remove the extra fields %s." +tcAnonRecdFieldNameDifferent,"This is the wrong anonymous record. It should have the fields %s." keywordDescriptionAbstract,"Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation." keyworkDescriptionAnd,"Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters." keywordDescriptionAs,"Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match." diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 990037e09d..93d6fdbcdd 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -47,6 +47,21 @@ Algoritmus {0} není podporovaný. + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Atributy nejde použít pro rozšíření typů. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Dva typy anonymních záznamů mají odlišné sady názvů polí: {0} a {1} + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Dva typy anonymních záznamů mají odlišné sady názvů polí: {0} a {1} diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index a0263a53bd..3f6d6ed9d8 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -47,6 +47,21 @@ Algorithmus "{0}" wird nicht unterstützt + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Attribute können nicht auf Typerweiterungen angewendet werden. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Zwei anonyme Datensatztypen weisen die nicht übereinstimmenden Feldnamen "{0}" und "{1}" auf. + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Zwei anonyme Datensatztypen weisen die nicht übereinstimmenden Feldnamen "{0}" und "{1}" auf. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index ba91cf6400..b9f3b2eca0 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -47,6 +47,21 @@ No se admite el algoritmo '{0}' + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Los atributos no se pueden aplicar a las extensiones de tipo. @@ -159,7 +174,7 @@ All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devolvió un valor de tipo "{0}", pero esta rama devolvió un valor de tipo "\{1 \}". + All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Dos tipos de registros anónimos tienen conjuntos de nombres de campo que no coinciden "{0}" y "{1}" + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Dos tipos de registros anónimos tienen conjuntos de nombres de campo que no coinciden "{0}" y "{1}" diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index d2751124db..110db5e63f 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -47,6 +47,21 @@ Algorithme '{0}' non pris en charge + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Impossible d'appliquer des attributs aux extensions de type. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Deux types d'enregistrement anonyme ont des ensembles de noms de champ incompatibles '{0}' et '{1}' + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Deux types d'enregistrement anonyme ont des ensembles de noms de champ incompatibles '{0}' et '{1}' diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 3dc48e6248..7e3e657641 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -47,6 +47,21 @@ L'algoritmo '{0}' non è supportato + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Gli attributi non possono essere applicati a estensioni di tipo. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Due tipi di record anonimo contengono set di nomi di campo '{0}' e '{1}' non corrispondenti + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Due tipi di record anonimo contengono set di nomi di campo '{0}' e '{1}' non corrispondenti diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 46fc22b388..91bf01e11a 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -47,6 +47,21 @@ アルゴリズム '{0}' はサポートされていません + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. 属性を型拡張に適用することはできません。 @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - 2 種類の匿名レコードのフィールド名 '{0}' と '{1}' が一致しません + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + 2 種類の匿名レコードのフィールド名 '{0}' と '{1}' が一致しません diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 0807084300..45b89be432 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -47,6 +47,21 @@ {0}' 알고리즘은 지원되지 않습니다. + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. 형식 확장에 특성을 적용할 수 없습니다. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - 두 무명 레코드 형식의 필드 이름 '{0}' 및 '{1}' 집합이 일치하지 않습니다. + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + 두 무명 레코드 형식의 필드 이름 '{0}' 및 '{1}' 집합이 일치하지 않습니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index e9d92110cb..e59f8848fa 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -47,6 +47,21 @@ Algorytm „{0}” nie jest obsługiwany + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Atrybutów nie można stosować do rozszerzeń typu. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Dwa typy rekordów anonimowych mają niezgodne zestawy nazw pól „{0}” i „{1}” + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Dwa typy rekordów anonimowych mają niezgodne zestawy nazw pól „{0}” i „{1}” diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 7d15750bf3..902b236308 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -47,6 +47,21 @@ Algoritmo '{0}' sem suporte + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Os atributos não podem ser aplicados às extensões de tipo. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Dois tipos de registro anônimos têm conjuntos incompatíveis de nomes de campos '{0}' e '{1}' + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Dois tipos de registro anônimos têm conjuntos incompatíveis de nomes de campos '{0}' e '{1}' diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 9d34292526..52dba96f84 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -47,6 +47,21 @@ Алгоритм "{0}" не поддерживается + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Атрибуты не могут быть применены к расширениям типа. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - Два анонимных типа записей содержат несоответствующие наборы имен полей '{0}' и '{1}' + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + Два анонимных типа записей содержат несоответствующие наборы имен полей '{0}' и '{1}' diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 18b7d759b2..b72a64d5a9 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -47,6 +47,21 @@ {0}' algoritması desteklenmiyor + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. Öznitelikler tür uzantılarına uygulanamaz. @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - İki anonim kayıt türünün eşleşmeyen '{0}' ve '{1}' alan adı kümeleri var + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + İki anonim kayıt türünün eşleşmeyen '{0}' ve '{1}' alan adı kümeleri var diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index d3e0ab4f8e..45a2abaed4 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -47,6 +47,21 @@ 不支持算法“{0}” + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. 属性不可应用于类型扩展。 @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - 两个匿名记录类型具有一组不匹配的字段名称“{0}”和“{1}” + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + 两个匿名记录类型具有一组不匹配的字段名称“{0}”和“{1}” diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 41be9e5f87..51b821b96f 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -47,6 +47,21 @@ 不支援演算法 '{0}' + + This is the wrong anonymous record. It should have the fields {0}. + This is the wrong anonymous record. It should have the fields {0}. + + + + This anonymous record does not have enough fields. Add the missing fields {0}. + This anonymous record does not have enough fields. Add the missing fields {0}. + + + + This anonymous record has too many fields. Remove the extra fields {0}. + This anonymous record has too many fields. Remove the extra fields {0}. + + Attributes cannot be applied to type extensions. 屬性無法套用到類型延伸模組。 @@ -7128,8 +7143,8 @@ - Two anonymous record types have mismatched sets of field names '{0}' and '{1}' - 兩個匿名的記錄類型有兩組不相符的欄位名稱 '{0}' 和 '{1}' + This anonymous record does not exactly match the expected shape. Add the missing fields {0} and remove the extra fields {1}. + 兩個匿名的記錄類型有兩組不相符的欄位名稱 '{0}' 和 '{1}' diff --git a/tests/fsharp/typecheck/sigs/neg113.bsl b/tests/fsharp/typecheck/sigs/neg113.bsl index b9f0190c63..b779344fda 100644 --- a/tests/fsharp/typecheck/sigs/neg113.bsl +++ b/tests/fsharp/typecheck/sigs/neg113.bsl @@ -1,7 +1,7 @@ -neg113.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' +neg113.fs(5,50,5,61): typecheck error FS0001: This anonymous record does not have enough fields. Add the missing fields [b]. -neg113.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' +neg113.fs(7,41,7,52): typecheck error FS0001: This is the wrong anonymous record. It should have the fields [b]. neg113.fs(10,27,10,55): typecheck error FS0059: The type '{| a: int |}' does not have any proper subtypes and need not be used as the target of a static coercion diff --git a/tests/fsharp/typecheck/sigs/neg113.vsbsl b/tests/fsharp/typecheck/sigs/neg113.vsbsl index b9f0190c63..b779344fda 100644 --- a/tests/fsharp/typecheck/sigs/neg113.vsbsl +++ b/tests/fsharp/typecheck/sigs/neg113.vsbsl @@ -1,7 +1,7 @@ -neg113.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' +neg113.fs(5,50,5,61): typecheck error FS0001: This anonymous record does not have enough fields. Add the missing fields [b]. -neg113.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' +neg113.fs(7,41,7,52): typecheck error FS0001: This is the wrong anonymous record. It should have the fields [b]. neg113.fs(10,27,10,55): typecheck error FS0059: The type '{| a: int |}' does not have any proper subtypes and need not be used as the target of a static coercion diff --git a/tests/fsharp/typecheck/sigs/neg_anon_1.bsl b/tests/fsharp/typecheck/sigs/neg_anon_1.bsl index 3e75d81144..018f51e3a3 100644 --- a/tests/fsharp/typecheck/sigs/neg_anon_1.bsl +++ b/tests/fsharp/typecheck/sigs/neg_anon_1.bsl @@ -1,7 +1,7 @@ -neg_anon_1.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' +neg_anon_1.fs(5,50,5,61): typecheck error FS0001: This anonymous record does not have enough fields. Add the missing fields [b]. -neg_anon_1.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' +neg_anon_1.fs(7,41,7,52): typecheck error FS0001: This is the wrong anonymous record. It should have the fields [b]. neg_anon_1.fs(10,27,10,55): typecheck error FS0059: The type '{| a: int |}' does not have any proper subtypes and need not be used as the target of a static coercion From cda5e31ebbb80303978d342e2d65f19b88a031ed Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 8 Jan 2020 11:01:57 -0800 Subject: [PATCH 163/214] fix registered packagedef (#8126) --- FSharpBuild.Directory.Build.targets | 3 ++- vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/FSharpBuild.Directory.Build.targets b/FSharpBuild.Directory.Build.targets index 3132ba1c97..da6302ef03 100644 --- a/FSharpBuild.Directory.Build.targets +++ b/FSharpBuild.Directory.Build.targets @@ -14,6 +14,7 @@ <__TargetFilePath>@(NoneSubstituteText->'$(IntermediateOutputPath)%(Filename)%(Extension)') <__TargetFileName>@(NoneSubstituteText->'%(Filename)%(Extension)') + <__TargetLink>@(NoneSubstituteText->'%(Link)') <_ReplacementText>$([System.IO.File]::ReadAllText('%(NoneSubstituteText.FullPath)')) <_ReplacementText Condition="'%(NoneSubstituteText.Pattern1)' != ''">$(_ReplacementText.Replace('%(NoneSubstituteText.Pattern1)', '%(NoneSubstituteText.Replacement1)')) @@ -33,7 +34,7 @@ - + diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index 4455493877..6f58ffef83 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -22,6 +22,7 @@ {{FSLanguageVersion}} $(FSLanguageVersion) true + RegisterFsharpPackage.pkgdef From 69a2525b471ee5473f31d9821db7dac173ccacea Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 8 Jan 2020 11:04:05 -0800 Subject: [PATCH 164/214] move console input/output redirect out of script helper (#8108) * move console input/output redirect out of script helper * address review feedback * string splitting is hard --- .../FSharp.Compiler.Private.Scripting.fsproj | 5 +- .../FSharpScript.fs | 39 +---------- .../TextHelpers.fs | 36 ----------- .../ConsoleHelpers.fs | 64 +++++++++++++++++++ ...ompiler.Private.Scripting.UnitTests.fsproj | 1 + .../FSharpScriptTests.fs | 12 ++-- 6 files changed, 76 insertions(+), 81 deletions(-) delete mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj index 710cf8a8e5..daa9c452ea 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj @@ -9,13 +9,12 @@ - - - + + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 7cb7327a27..19bd875398 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -7,36 +7,15 @@ open System.Threading open FSharp.Compiler open FSharp.Compiler.Interactive.Shell -type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: string[]) as this = - let outputProduced = Event() - let errorProduced = Event() +type FSharpScript(?additionalArgs: string[]) = - // handle stdin/stdout - let stdin = new CapturedTextReader() - let stdout = new EventedTextWriter() - let stderr = new EventedTextWriter() - do stdout.LineWritten.Add outputProduced.Trigger - do stderr.LineWritten.Add errorProduced.Trigger - let captureInput = defaultArg captureInput false - let captureOutput = defaultArg captureOutput false let additionalArgs = defaultArg additionalArgs [||] - let savedInput = Console.In - let savedOutput = Console.Out - let savedError = Console.Error - do (fun () -> - if captureInput then - Console.SetIn(stdin) - if captureOutput then - Console.SetOut(stdout) - Console.SetError(stderr) - ())() - let config = FsiEvaluationSession.GetDefaultConfiguration() let computedProfile = // If we are being executed on the desktop framework (we can tell because the assembly containing int is mscorlib) then profile must be mscorlib otherwise use netcore if typeof.Assembly.GetName().Name = "mscorlib" then "mscorlib" else "netcore" - let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:" + computedProfile; "--quiet" |] + let baseArgs = [| typeof.Assembly.Location; "--noninteractive"; "--targetprofile:" + computedProfile; "--quiet" |] let argv = Array.append baseArgs additionalArgs let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) @@ -44,12 +23,6 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st member __.ValueBound = fsi.ValueBound - member __.ProvideInput = stdin.ProvideInput - - member __.OutputProduced = outputProduced.Publish - - member __.ErrorProduced = errorProduced.Publish - member __.Fsi = fsi member __.Eval(code: string, ?cancellationToken: CancellationToken) = @@ -75,12 +48,4 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: st interface IDisposable with member __.Dispose() = - if captureInput then - Console.SetIn(savedInput) - if captureOutput then - Console.SetOut(savedOutput) - Console.SetError(savedError) - stdin.Dispose() - stdout.Dispose() - stderr.Dispose() (fsi :> IDisposable).Dispose() diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs deleted file mode 100644 index 87e846b400..0000000000 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Scripting - -open System.Collections.Generic -open System.IO -open System.Text - -type internal CapturedTextReader() = - inherit TextReader() - let queue = Queue() - member __.ProvideInput(text: string) = - for c in text.ToCharArray() do - queue.Enqueue(c) - override __.Peek() = - if queue.Count > 0 then queue.Peek() |> int - else -1 - override __.Read() = - if queue.Count > 0 then queue.Dequeue() |> int - else -1 - -type internal EventedTextWriter() = - inherit TextWriter() - let sb = StringBuilder() - let lineWritten = Event() - member __.LineWritten = lineWritten.Publish - override __.Encoding = Encoding.UTF8 - override __.Write(c: char) = - if c = '\n' then - let line = - let v = sb.ToString() - if v.EndsWith("\r") then v.Substring(0, v.Length - 1) - else v - sb.Clear() |> ignore - lineWritten.Trigger(line) - else sb.Append(c) |> ignore diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs new file mode 100644 index 0000000000..6df77c83b3 --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs @@ -0,0 +1,64 @@ +namespace FSharp.Compiler.Scripting.UnitTests + +open System +open System.Collections.Generic +open System.IO +open System.Text + +type internal CapturedTextReader() = + inherit TextReader() + let queue = Queue() + member _.ProvideInput(text: string) = + for c in text.ToCharArray() do + queue.Enqueue(c) + override _.Peek() = + if queue.Count > 0 then queue.Peek() |> int else -1 + override _.Read() = + if queue.Count > 0 then queue.Dequeue() |> int else -1 + +type internal RedirectConsoleInput() = + let oldStdIn = Console.In + let newStdIn = new CapturedTextReader() + do Console.SetIn(newStdIn) + member _.ProvideInput(text: string) = + newStdIn.ProvideInput(text) + interface IDisposable with + member __.Dispose() = + Console.SetIn(oldStdIn) + newStdIn.Dispose() + +type internal EventedTextWriter() = + inherit TextWriter() + let sb = StringBuilder() + let lineWritten = Event() + member _.LineWritten = lineWritten.Publish + override _.Encoding = Encoding.UTF8 + override _.Write(c: char) = + if c = '\n' then + let line = + let v = sb.ToString() + if v.EndsWith("\r") then v.Substring(0, v.Length - 1) + else v + sb.Clear() |> ignore + lineWritten.Trigger(line) + else sb.Append(c) |> ignore + +type internal RedirectConsoleOutput() = + let outputProduced = Event() + let errorProduced = Event() + let oldStdOut = Console.Out + let oldStdErr = Console.Error + let newStdOut = new EventedTextWriter() + let newStdErr = new EventedTextWriter() + do newStdOut.LineWritten.Add outputProduced.Trigger + do newStdErr.LineWritten.Add errorProduced.Trigger + do Console.SetOut(newStdOut) + do Console.SetError(newStdErr) + member _.OutputProduced = outputProduced.Publish + member _.ErrorProduced = errorProduced.Publish + interface IDisposable with + member __.Dispose() = + Console.SetOut(oldStdOut) + Console.SetError(oldStdErr) + newStdOut.Dispose() + newStdErr.Dispose() diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj index 7ecca98b7c..1e625c4b6c 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -11,6 +11,7 @@ + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 70b6b2662e..b2bab7656b 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -32,8 +32,9 @@ type InteractiveTests() = [] member __.``Capture console input``() = - use script = new FSharpScript(captureInput=true) - script.ProvideInput "stdin:1234\r\n" + use input = new RedirectConsoleInput() + use script = new FSharpScript() + input.ProvideInput "stdin:1234\r\n" let opt = script.Eval("System.Console.ReadLine()") |> getValue let value = opt.Value Assert.AreEqual(typeof, value.ReflectionType) @@ -41,11 +42,12 @@ type InteractiveTests() = [] member __.``Capture console output/error``() = - use script = new FSharpScript(captureOutput=true) + use output = new RedirectConsoleOutput() + use script = new FSharpScript() use sawOutputSentinel = new ManualResetEvent(false) use sawErrorSentinel = new ManualResetEvent(false) - script.OutputProduced.Add (fun line -> if line = "stdout:1234" then sawOutputSentinel.Set() |> ignore) - script.ErrorProduced.Add (fun line -> if line = "stderr:5678" then sawErrorSentinel.Set() |> ignore) + output.OutputProduced.Add (fun line -> if line = "stdout:1234" then sawOutputSentinel.Set() |> ignore) + output.ErrorProduced.Add (fun line -> if line = "stderr:5678" then sawErrorSentinel.Set() |> ignore) script.Eval("printfn \"stdout:1234\"; eprintfn \"stderr:5678\"") |> ignoreValue Assert.True(sawOutputSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see output sentinel value written") Assert.True(sawErrorSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see error sentinel value written") From 3ef19050c32a7374b742aad6b418caee06320a85 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Wed, 8 Jan 2020 15:46:09 -0800 Subject: [PATCH 165/214] Remove AggressiveInlining attribute (#8136) --- src/absil/bytes.fs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index bc7ceb96b4..9ec1757793 100644 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -218,35 +218,26 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = [] type ReadOnlyByteMemory(bytes: ByteMemory) = - member _.Item with [] get i = bytes.[i] + member _.Item with get i = bytes.[i] - member _.Length with [] get () = bytes.Length + member _.Length with get () = bytes.Length - [] member _.ReadBytes(pos, count) = bytes.ReadBytes(pos, count) - [] member _.ReadInt32 pos = bytes.ReadInt32 pos - [] member _.ReadUInt16 pos = bytes.ReadUInt16 pos - [] member _.ReadUtf8String(pos, count) = bytes.ReadUtf8String(pos, count) - [] member _.Slice(pos, count) = bytes.Slice(pos, count) |> ReadOnlyByteMemory - [] member _.CopyTo stream = bytes.CopyTo stream - [] member _.Copy(srcOffset, dest, destOffset, count) = bytes.Copy(srcOffset, dest, destOffset, count) - [] member _.ToArray() = bytes.ToArray() - [] member _.AsStream() = bytes.AsReadOnlyStream() type ByteMemory with From 73249d035f0185a092f7b251f382c49aebaac520 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 9 Jan 2020 09:01:02 -0800 Subject: [PATCH 166/214] Remove redundent reference from FCS TestProj (#8138) --- .../FSharp.Compiler.Service.Tests.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index 6ee0cfab37..d6c71b5545 100644 --- a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -101,6 +101,5 @@ - \ No newline at end of file From 23f63d969b837d5ab9cea109d9fb2907a95b9ebf Mon Sep 17 00:00:00 2001 From: Gauthier Segay Date: Thu, 9 Jan 2020 18:06:31 +0100 Subject: [PATCH 167/214] the ParamData type got out of sync with the comment describing which field is which in #4888 (#8139) removing the comment and naming the fields --- src/fsharp/infos.fs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 0231d5f2ab..83d7ab4c35 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -577,8 +577,7 @@ type ParamNameAndType = [] /// Full information about a parameter returned for use by the type checker and language service. type ParamData = - /// ParamData(isParamArray, isOut, optArgInfo, callerInfo, nameOpt, reflArgInfo, ttype) - ParamData of bool * bool * bool * OptionalArgInfo * CallerInfo * Ident option * ReflectedArgInfo * TType + ParamData of isParamArray: bool * isInArg: bool * isOut: bool * optArgInfo: OptionalArgInfo * callerInfo: CallerInfo * nameOpt: Ident option * reflArgInfo: ReflectedArgInfo * ttype: TType //------------------------------------------------------------------------- From 3ccf1d54ea4ccdaa527ad1f23d2dd42df532cbc3 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 10 Dec 2019 13:39:02 -0800 Subject: [PATCH 168/214] add internal package feed (#7949) --- NuGet.config | 1 + 1 file changed, 1 insertion(+) diff --git a/NuGet.config b/NuGet.config index ef069a5bdf..26edd0d796 100644 --- a/NuGet.config +++ b/NuGet.config @@ -7,6 +7,7 @@ + From 6af6e22b14b442daf2125235efa2003e28551493 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Sun, 15 Dec 2019 12:05:34 -0800 Subject: [PATCH 169/214] Improve package reference diags (#7909) --- .../FSharp.DependencyManager.Utilities.fs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 945ca021d0..493a6ba789 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -158,14 +158,26 @@ module Utilities = None #endif + let drainStreamToFile (stream: StreamReader) filename = + use file = File.OpenWrite(filename) + use writer = new StreamWriter(file) + let rec copyLines () = + match stream.ReadLine() with + | null -> () + | line -> + writer.WriteLine(line) + copyLines () + copyLines () + let executeBuild pathToExe arguments workingDir = match pathToExe with | Some path -> + let psi = ProcessStartInfo() psi.FileName <- path psi.WorkingDirectory <- workingDir - psi.RedirectStandardOutput <- false - psi.RedirectStandardError <- false + psi.RedirectStandardOutput <- true + psi.RedirectStandardError <- true psi.Arguments <- arguments psi.CreateNoWindow <- true psi.UseShellExecute <- false @@ -173,8 +185,13 @@ module Utilities = use p = new Process() p.StartInfo <- psi p.Start() |> ignore + + drainStreamToFile p.StandardOutput (Path.Combine(workingDir, "StandardOutput.txt")) + drainStreamToFile p.StandardError (Path.Combine(workingDir, "StandardError.txt")) + p.WaitForExit() p.ExitCode = 0 + | None -> false let buildProject projectPath binLogPath = From 2ef589415237d0b49e05dea78c1328886e4b5b53 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Jan 2020 22:24:36 +0000 Subject: [PATCH 170/214] Update dependencies from https://github.com/dotnet/arcade build 20200102.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20052.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b38d39faa6..d87b36dd3a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - cc596c55ac68c952d0e052e6ed50334ed170b53a + 98cc270f5e08096729fc7d54ffafa9e3c6576316 diff --git a/global.json b/global.json index 186855dd2a..2f1050a189 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19631.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20052.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From be3feed252b976f9f8af1595b9b934cc16cde341 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 4 Jan 2020 13:24:44 +0000 Subject: [PATCH 171/214] Update dependencies from https://github.com/dotnet/arcade build 20200103.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20053.2 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d87b36dd3a..b8e9e82820 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 98cc270f5e08096729fc7d54ffafa9e3c6576316 + b49ab5e13eb7c5678d6720ef041dc675cf8e9307 diff --git a/global.json b/global.json index 2f1050a189..ffdfe37838 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20052.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20053.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 63998a40cf5b4f22c0b0cf3385a59894c2fb3a06 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sun, 5 Jan 2020 13:27:06 +0000 Subject: [PATCH 172/214] Update dependencies from https://github.com/dotnet/arcade build 20200104.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20054.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b8e9e82820..56e60061a1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - b49ab5e13eb7c5678d6720ef041dc675cf8e9307 + 96ab522b32ff4d0f7bfc18074fd5ae3673c59d0a diff --git a/global.json b/global.json index ffdfe37838..01306251ae 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20053.2", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20054.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 5ff06cfbd521daea869c7801ab1ee5870a9a854a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2020 20:37:16 +0000 Subject: [PATCH 173/214] Update dependencies from https://github.com/dotnet/arcade build 20200105.1 (#8102) - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20055.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 56e60061a1..9fd9fffc66 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 96ab522b32ff4d0f7bfc18074fd5ae3673c59d0a + 111d78c79ac38f596688af152779d7a39e4bf973 diff --git a/global.json b/global.json index 01306251ae..875313b65d 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20054.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20055.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 4676aa605f181b7abcd6c530a24e0a0eb6f463d1 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 7 Jan 2020 13:27:25 +0000 Subject: [PATCH 174/214] Update dependencies from https://github.com/dotnet/arcade build 20200106.6 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20056.6 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9fd9fffc66..cfdceb169f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 111d78c79ac38f596688af152779d7a39e4bf973 + 5cbca575e9002cc2d9814c3471d38882df2fcc8e diff --git a/global.json b/global.json index 875313b65d..6fe6bcd1ce 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20055.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20056.6", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 59c7318bc8436292e3e93d3a19285afb137068b2 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 7 Jan 2020 23:16:01 -0800 Subject: [PATCH 175/214] Allow --langversion:preview to disable ExperimentalAttribut warning. (#8042) * Merge issues * More attributes * Experimental Attribute * literally the message * .fsi and [] don't mix with lkg compiler. --- src/fsharp/AttributeChecking.fs | 35 +++++---- src/fsharp/FSharp.Core/FSharp.Core.fsproj | 2 +- src/fsharp/FSharp.Core/prim-types.fs | 92 +++++++++++++++++------ src/fsharp/FSharp.Core/prim-types.fsi | 37 ++++++--- src/fsharp/LanguageFeatures.fs | 4 + src/fsharp/LanguageFeatures.fsi | 5 +- 6 files changed, 130 insertions(+), 45 deletions(-) diff --git a/src/fsharp/AttributeChecking.fs b/src/fsharp/AttributeChecking.fs index 07ac05faa8..fb19937c53 100644 --- a/src/fsharp/AttributeChecking.fs +++ b/src/fsharp/AttributeChecking.fs @@ -4,6 +4,7 @@ /// on items from name resolution module internal FSharp.Compiler.AttributeChecking +open System open System.Collections.Generic open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library @@ -246,7 +247,6 @@ let MethInfoHasAttribute g m attribSpec minfo = |> Option.isSome - /// Check IL attributes for 'ObsoleteAttribute', returning errors and warnings as data let private CheckILAttributes (g: TcGlobals) isByrefLikeTyconRef cattrs m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete @@ -267,9 +267,16 @@ let private CheckILAttributes (g: TcGlobals) isByrefLikeTyconRef cattrs m = /// Check F# attributes for 'ObsoleteAttribute', 'CompilerMessageAttribute' and 'ExperimentalAttribute', /// returning errors and warnings as data -let CheckFSharpAttributes g attribs m = - if isNil attribs then CompleteD - else +let langVersionPrefix = "--langversion:preview" +let CheckFSharpAttributes (g:TcGlobals) attribs m = + let isExperimentalAttributeDisabled (s:string) = + if g.compilingFslib then + true + else + g.langVersion.IsPreviewEnabled && (s.IndexOf(langVersionPrefix, StringComparison.OrdinalIgnoreCase) >= 0) + + if isNil attribs then CompleteD + else (match TryFindFSharpAttribute g g.attrib_SystemObsolete attribs with | Some(Attrib(_, _, [ AttribStringArg s ], _, _, _, _)) -> WarnD(ObsoleteWarning(s, m)) @@ -283,28 +290,30 @@ let CheckFSharpAttributes g attribs m = | None -> CompleteD ) ++ (fun () -> - + match TryFindFSharpAttribute g g.attrib_CompilerMessageAttribute attribs with - | Some(Attrib(_, _, [ AttribStringArg s ; AttribInt32Arg n ], namedArgs, _, _, _)) -> + | Some(Attrib(_, _, [ AttribStringArg s ; AttribInt32Arg n ], namedArgs, _, _, _)) -> let msg = UserCompilerMessage(s, n, m) let isError = match namedArgs with | ExtractAttribNamedArg "IsError" (AttribBoolArg v) -> v | _ -> false if isError && (not g.compilingFslib || n <> 1204) then ErrorD msg else WarnD msg - | _ -> CompleteD ) ++ (fun () -> - + match TryFindFSharpAttribute g g.attrib_ExperimentalAttribute attribs with - | Some(Attrib(_, _, [ AttribStringArg(s) ], _, _, _, _)) -> - WarnD(Experimental(s, m)) - | Some _ -> + | Some(Attrib(_, _, [ AttribStringArg(s) ], _, _, _, _)) -> + if isExperimentalAttributeDisabled s then + CompleteD + else + WarnD(Experimental(s, m)) + | Some _ -> WarnD(Experimental(FSComp.SR.experimentalConstruct (), m)) - | _ -> + | _ -> CompleteD - ) ++ (fun () -> + ) ++ (fun () -> match TryFindFSharpAttribute g g.attrib_UnverifiableAttribute attribs with | Some _ -> diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index ef68a28e6d..360dc74e37 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -10,7 +10,7 @@ true $(DefineConstants);FSHARP_CORE BUILDING_WITH_LKG;$(DefineConstants) - $(OtherFlags) --warnon:1182 --compiling-fslib --compiling-fslib-40 --maxerrors:20 --extraoptimizationloops:1 + $(OtherFlags) --warnon:1182 --compiling-fslib --compiling-fslib-40 --maxerrors:20 --extraoptimizationloops:1 --nowarn:57 true true diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 60d52b3a78..8f219ab78f 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -237,11 +237,17 @@ namespace Microsoft.FSharp.Core inherit System.Attribute() member x.Flags = flags + + module internal ExperimentalAttributeMessages = + [] + let RequiresPreview : string = "Experimental library feature, requires '--langversion:preview'" + [] [] type ExperimentalAttribute(message:string) = inherit System.Attribute() - member x.Message = message + + member x.Message = message [] [] @@ -379,7 +385,7 @@ namespace Microsoft.FSharp.Core let inline box (x:'T) = (# "box !0" type ('T) x : obj #) let inline not (b:bool) = (# "ceq" b false : bool #) let inline (=) (x:int) (y:int) = (# "ceq" x y : bool #) - let inline (<>) (x:int) (y:int) = not(# "ceq" x y : bool #) + let inline (<>) (x:int) (y:int) = not(# "ceq" x y : bool #) let inline (<=) (x:int) (y:int) = not(# "cgt" x y : bool #) let inline (>=) (x:int) (y:int) = not(# "clt" x y : bool #) let inline (>=.) (x:int64) (y:int64) = not(# "clt" x y : bool #) @@ -3189,6 +3195,7 @@ namespace Microsoft.FSharp.Collections let start = if i < 0 then 0 else i PrivateListHelpers.sliceTake (j - start) (PrivateListHelpers.sliceSkip start l) + [] member l.GetReverseIndex(_: int, offset: int) = l.Length - offset - 1 interface IEnumerable<'T> with @@ -3224,8 +3231,6 @@ namespace Microsoft.FSharp.Core open Microsoft.FSharp.Core.BasicInlinedOperations open Microsoft.FSharp.Collections - - [] module Operators = @@ -5007,10 +5012,13 @@ namespace Microsoft.FSharp.Core dst + [] let inline GetArraySlice3DFixedSingle1 (source: _[,,]) index1 start2 finish2 start3 finish3 = GetArraySlice3DFixedSingle source start2 finish2 start3 finish3 index1 1 2 + [] let inline GetArraySlice3DFixedSingle2 (source: _[,,]) start1 finish1 index2 start3 finish3 = GetArraySlice3DFixedSingle source start1 finish1 start3 finish3 index2 0 2 + [] let inline GetArraySlice3DFixedSingle3 (source: _[,,]) start1 finish1 start2 finish2 index3 = GetArraySlice3DFixedSingle source start1 finish1 start2 finish2 index3 0 1 let inline GetArraySlice3DFixedDouble (source: _[,,]) start finish index1 index2 nonFixedDim = @@ -5028,15 +5036,18 @@ namespace Microsoft.FSharp.Core SetArray dst j (getArrayElem j) dst + [] let inline GetArraySlice3DFixedDouble1 (source: _[,,]) index1 index2 start3 finish3 = GetArraySlice3DFixedDouble source start3 finish3 index1 index2 2 + [] let inline GetArraySlice3DFixedDouble2 (source: _[,,]) index1 start2 finish2 index3 = GetArraySlice3DFixedDouble source start2 finish2 index1 index3 1 + [] let inline GetArraySlice3DFixedDouble3 (source: _[,,]) start1 finish1 index2 index3 = GetArraySlice3DFixedDouble source start1 finish1 index2 index3 0 - + let inline SetArraySlice3D (target: _[,,]) start1 finish1 start2 finish2 start3 finish3 (source:_[,,]) = let bound1 = target.GetLowerBound(0) let bound2 = target.GetLowerBound(1) @@ -5067,12 +5078,15 @@ namespace Microsoft.FSharp.Core for j = 0 to len2 - 1 do setArrayElem i j + [] let inline SetArraySlice3DFixedSingle1 (target: _[,,]) index start2 finish2 start3 finish3 (source: _[,]) = SetArraySlice3DFixedSingle target source index start2 finish2 start3 finish3 1 2 + [] let inline SetArraySlice3DFixedSingle2 (target: _[,,]) start1 finish1 index start3 finish3 (source: _[,]) = SetArraySlice3DFixedSingle target source index start1 finish1 start3 finish3 0 2 + [] let inline SetArraySlice3DFixedSingle3 (target: _[,,]) start1 finish1 start2 finish2 index (source: _[,]) = SetArraySlice3DFixedSingle target source index start1 finish1 start2 finish2 0 1 @@ -5089,30 +5103,33 @@ namespace Microsoft.FSharp.Core for j = 0 to len - 1 do setArrayElem j + [] let inline SetArraySlice3DFixedDouble1 (target: _[,,]) index1 index2 start3 finish3 (source: _[]) = SetArraySlice3DFixedDouble target source index1 index2 start3 finish3 2 + [] let inline SetArraySlice3DFixedDouble2 (target: _[,,]) index1 start2 finish2 index3 (source: _[]) = SetArraySlice3DFixedDouble target source index1 index3 start2 finish2 1 + [] let inline SetArraySlice3DFixedDouble3 (target: _[,,]) start1 finish1 index2 index3 (source: _[]) = SetArraySlice3DFixedDouble target source index2 index3 start1 finish1 0 - let inline GetArraySlice4D (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 = + let inline GetArraySlice4D (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 = let bound1 = source.GetLowerBound(0) let bound2 = source.GetLowerBound(1) let bound3 = source.GetLowerBound(2) let bound4 = source.GetLowerBound(3) - let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength1 source) - let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength2 source) - let start3, finish3 = ComputeSlice bound3 start3 finish3 (GetArray4DLength3 source) - let start4, finish4 = ComputeSlice bound4 start4 finish4 (GetArray4DLength4 source) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray4DLength1 source) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength2 source) + let start3, finish3 = ComputeSlice bound3 start3 finish3 (GetArray4DLength3 source) + let start4, finish4 = ComputeSlice bound4 start4 finish4 (GetArray4DLength4 source) let len1 = (finish1 - start1 + 1) let len2 = (finish2 - start2 + 1) let len3 = (finish3 - start3 + 1) let len4 = (finish4 - start4 + 1) GetArray4DSub source start1 start2 start3 start4 len1 len2 len3 len4 - + let inline GetArraySlice4DFixedSingle (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 index nonFixedDim1 nonFixedDim2 nonFixedDim3 = let bound1 = source.GetLowerBound(nonFixedDim1) let bound2 = source.GetLowerBound(nonFixedDim2) @@ -5139,15 +5156,19 @@ namespace Microsoft.FSharp.Core dst + [] let inline GetArraySlice4DFixedSingle1 (source: _[,,,]) index1 start2 finish2 start3 finish3 start4 finish4 = GetArraySlice4DFixedSingle source start2 finish2 start3 finish3 start4 finish4 index1 1 2 3 + [] let inline GetArraySlice4DFixedSingle2 (source: _[,,,]) start1 finish1 index2 start3 finish3 start4 finish4 = GetArraySlice4DFixedSingle source start1 finish1 start3 finish3 start4 finish4 index2 0 2 3 + [] let inline GetArraySlice4DFixedSingle3 (source: _[,,,]) start1 finish1 start2 finish2 index3 start4 finish4 = GetArraySlice4DFixedSingle source start1 finish1 start2 finish2 start4 finish4 index3 0 1 3 + [] let inline GetArraySlice4DFixedSingle4 (source: _[,,,]) start1 finish1 start2 finish2 start3 finish3 index4 = GetArraySlice4DFixedSingle source start1 finish1 start2 finish2 start3 finish3 index4 0 1 2 @@ -5158,7 +5179,7 @@ namespace Microsoft.FSharp.Core let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray4DLength source nonFixedDim2) let len1 = (finish1 - start1 + 1) let len2 = (finish2 - start2 + 1) - + let dst = Array2DZeroCreate (max len1 0) (max len2 0) let getArrayElem = match nonFixedDim1, nonFixedDim2 with @@ -5175,21 +5196,27 @@ namespace Microsoft.FSharp.Core dst - let inline GetArraySlice4DFixedDouble1 (source: _[,,,]) index1 index2 start3 finish3 start4 finish4 = + [] + let inline GetArraySlice4DFixedDouble1 (source: _[,,,]) index1 index2 start3 finish3 start4 finish4 = GetArraySlice4DFixedDouble source start3 finish3 start4 finish4 index1 index2 2 3 - let inline GetArraySlice4DFixedDouble2 (source: _[,,,]) index1 start2 finish2 index3 start4 finish4 = + [] + let inline GetArraySlice4DFixedDouble2 (source: _[,,,]) index1 start2 finish2 index3 start4 finish4 = GetArraySlice4DFixedDouble source start2 finish2 start4 finish4 index1 index3 1 3 - let inline GetArraySlice4DFixedDouble3 (source: _[,,,]) index1 start2 finish2 start3 finish3 index4 = + [] + let inline GetArraySlice4DFixedDouble3 (source: _[,,,]) index1 start2 finish2 start3 finish3 index4 = GetArraySlice4DFixedDouble source start2 finish2 start3 finish3 index1 index4 1 2 - let inline GetArraySlice4DFixedDouble4 (source: _[,,,]) start1 finish1 index2 index3 start4 finish4 = + [] + let inline GetArraySlice4DFixedDouble4 (source: _[,,,]) start1 finish1 index2 index3 start4 finish4 = GetArraySlice4DFixedDouble source start1 finish1 start4 finish4 index2 index3 0 3 + [] let inline GetArraySlice4DFixedDouble5 (source: _[,,,]) start1 finish1 index2 start3 finish3 index4 = GetArraySlice4DFixedDouble source start1 finish1 start3 finish3 index2 index4 0 2 + [] let inline GetArraySlice4DFixedDouble6 (source: _[,,,]) start1 finish1 start2 finish2 index3 index4 = GetArraySlice4DFixedDouble source start1 finish1 start2 finish2 index3 index4 0 1 @@ -5210,15 +5237,19 @@ namespace Microsoft.FSharp.Core dst + [] let inline GetArraySlice4DFixedTriple1 (source: _[,,,]) start1 finish1 index2 index3 index4 = GetArraySlice4DFixedTriple source start1 finish1 index2 index3 index4 0 + [] let inline GetArraySlice4DFixedTriple2 (source: _[,,,]) index1 start2 finish2 index3 index4 = GetArraySlice4DFixedTriple source start2 finish2 index1 index3 index4 1 + [] let inline GetArraySlice4DFixedTriple3 (source: _[,,,]) index1 index2 start3 finish3 index4 = GetArraySlice4DFixedTriple source start3 finish3 index1 index2 index4 2 + [] let inline GetArraySlice4DFixedTriple4 (source: _[,,,]) index1 index2 index3 start4 finish4 = GetArraySlice4DFixedTriple source start4 finish4 index1 index2 index3 3 @@ -5236,7 +5267,7 @@ namespace Microsoft.FSharp.Core let finish3 = (match finish3 with None -> bound3 + GetArray4DLength3 target - 1 | Some n -> n) let finish4 = (match finish4 with None -> bound4 + GetArray4DLength4 target - 1 | Some n -> n) SetArray4DSub target start1 start2 start3 start4 (finish1 - start1 + 1) (finish2 - start2 + 1) (finish3 - start3 + 1) (finish4 - start4 + 1) source - + let inline SetArraySlice4DFixedSingle (target: _[,,,]) (source: _[,,]) index start1 finish1 start2 finish2 start3 finish3 nonFixedDim1 nonFixedDim2 nonFixedDim3 = let bound1 = target.GetLowerBound(nonFixedDim1) let bound2 = target.GetLowerBound(nonFixedDim2) @@ -5260,16 +5291,20 @@ namespace Microsoft.FSharp.Core for j = 0 to len2 - 1 do for k = 0 to len3 - 1 do setArrayElem i j k - + + [] let inline SetArraySlice4DFixedSingle1 (target: _[,,,]) index1 start2 finish2 start3 finish3 start4 finish4 (source: _[,,]) = SetArraySlice4DFixedSingle target source index1 start2 finish2 start3 finish3 start4 finish4 1 2 3 + [] let inline SetArraySlice4DFixedSingle2 (target: _[,,,]) start1 finish1 index2 start3 finish3 start4 finish4 (source: _[,,]) = SetArraySlice4DFixedSingle target source index2 start1 finish1 start3 finish3 start4 finish4 0 2 3 + [] let inline SetArraySlice4DFixedSingle3 (target: _[,,,]) start1 finish1 start2 finish2 index3 start4 finish4 (source: _[,,]) = SetArraySlice4DFixedSingle target source index3 start1 finish1 start2 finish2 start4 finish4 0 1 3 + [] let inline SetArraySlice4DFixedSingle4 (target: _[,,,]) start1 finish1 start2 finish2 start3 finish3 index4 (source: _[,,]) = SetArraySlice4DFixedSingle target source index4 start1 finish1 start2 finish2 start3 finish3 0 1 2 @@ -5295,21 +5330,27 @@ namespace Microsoft.FSharp.Core for j = 0 to len2 - 1 do setArrayElem i j + [] let inline SetArraySlice4DFixedDouble1 (target: _[,,,]) index1 index2 start3 finish3 start4 finish4 (source: _[,]) = SetArraySlice4DFixedDouble target source index1 index2 start3 finish3 start4 finish4 2 3 + [] let inline SetArraySlice4DFixedDouble2 (target: _[,,,]) index1 start2 finish2 index3 start4 finish4 (source: _[,]) = SetArraySlice4DFixedDouble target source index1 index3 start2 finish2 start4 finish4 1 3 + [] let inline SetArraySlice4DFixedDouble3 (target: _[,,,]) index1 start2 finish2 start3 finish3 index4 (source: _[,]) = SetArraySlice4DFixedDouble target source index1 index4 start2 finish2 start3 finish3 1 2 + [] let inline SetArraySlice4DFixedDouble4 (target: _[,,,]) start1 finish1 index2 index3 start4 finish4 (source: _[,]) = SetArraySlice4DFixedDouble target source index2 index3 start1 finish1 start4 finish4 0 3 + [] let inline SetArraySlice4DFixedDouble5 (target: _[,,,]) start1 finish1 index2 start3 finish3 index4 (source: _[,]) = SetArraySlice4DFixedDouble target source index2 index4 start1 finish1 start3 finish3 0 2 + [] let inline SetArraySlice4DFixedDouble6 (target: _[,,,]) start1 finish1 start2 finish2 index3 index4 (source: _[,]) = SetArraySlice4DFixedDouble target source index3 index4 start1 finish1 start2 finish2 0 1 @@ -5327,15 +5368,19 @@ namespace Microsoft.FSharp.Core for i = 0 to len1 - 1 do setArrayElem i + [] let inline SetArraySlice4DFixedTriple1 (target: _[,,,]) start1 finish1 index2 index3 index4 (source: _[]) = SetArraySlice4DFixedTriple target source index2 index3 index4 start1 finish1 0 + [] let inline SetArraySlice4DFixedTriple2 (target: _[,,,]) index1 start2 finish2 index3 index4 (source: _[]) = SetArraySlice4DFixedTriple target source index1 index3 index4 start2 finish2 1 + [] let inline SetArraySlice4DFixedTriple3 (target: _[,,,]) index1 index2 start3 finish3 index4 (source: _[]) = SetArraySlice4DFixedTriple target source index1 index2 index4 start3 finish3 2 + [] let inline SetArraySlice4DFixedTriple4 (target: _[,,,]) index1 index2 index3 start4 finish4 (source: _[]) = SetArraySlice4DFixedTriple target source index1 index2 index3 start4 finish4 3 @@ -5361,7 +5406,7 @@ namespace Microsoft.FSharp.Core when ^T : int16 = let x : int16 = retype x in System.Math.Abs(x) when ^T : sbyte = let x : sbyte = retype x in System.Math.Abs(x) when ^T : decimal = System.Math.Abs(retype x : decimal) - + [] let inline acosImpl(x: ^T) : ^T = (^T: (static member Acos : ^T -> ^T) (x)) @@ -5931,8 +5976,10 @@ namespace Microsoft.FSharp.Core if n >= 0 then PowDecimal x n else 1.0M / PowDecimal x n) [] + [] module ArrayExtensions = type ``[,,,]``<'T> with + [] member arr.GetReverseIndex(dim: int, offset: int) = let len = match dim with @@ -5945,6 +5992,7 @@ namespace Microsoft.FSharp.Core len - offset - 1 type ``[,,]``<'T> with + [] member arr.GetReverseIndex(dim: int, offset: int) = let len = match dim with @@ -5956,6 +6004,7 @@ namespace Microsoft.FSharp.Core len - offset - 1 type ``[,]``<'T> with + [] member arr.GetReverseIndex(dim: int, offset: int) = let len = match dim with @@ -5966,12 +6015,13 @@ namespace Microsoft.FSharp.Core len - offset - 1 type ``[]``<'T> with + [] member arr.GetReverseIndex (_: int, offset: int) = arr.Length - offset - 1 - + type System.String with + [] member str.GetReverseIndex (_: int, offset: int) = str.Length - offset - 1 - namespace Microsoft.FSharp.Control open System diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 0f1ba6901f..fd6c7557ef 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -618,7 +618,7 @@ namespace Microsoft.FSharp.Core /// This attribute is used to tag values that are part of an experimental library /// feature. - [] + [] [] type ExperimentalAttribute = inherit Attribute @@ -1935,8 +1935,9 @@ namespace Microsoft.FSharp.Collections /// The rank of the index. /// The offset from the end. /// The corresponding index from the start. + [] member GetReverseIndex: rank: int * offset: int -> int - + /// Returns a list with head as its first element and tail as its subsequent elements /// A new head value for the list. /// The existing list. @@ -2747,12 +2748,14 @@ namespace Microsoft.FSharp.Core val ( |KeyValue| ): keyValuePair:KeyValuePair<'Key,'Value> -> 'Key * 'Value [] + [] module ArrayExtensions = type ``[,,,]``<'T> with /// Get the index for the element offset elements away from the end of the collection. /// The rank of the index. This refers to the dimension in the 4d array. /// The offset from the end. /// The corresponding index from the start. + [] member GetReverseIndex: rank: int * offset: int -> int type ``[,,]``<'T> with @@ -2760,6 +2763,7 @@ namespace Microsoft.FSharp.Core /// The rank of the index. This refers to the dimension in the 3d array. /// The offset from the end. /// The corresponding index from the start. + [] member GetReverseIndex: rank: int * offset: int -> int type ``[,]``<'T> with @@ -2767,13 +2771,15 @@ namespace Microsoft.FSharp.Core /// The rank of the index. This refers to the dimension in the 2d array. /// The offset from the end. /// The corresponding index from the start. + [] member GetReverseIndex: rank: int * offset: int -> int type ``[]``<'T> with /// Get the index for the element offset elements away from the end of the collection. /// The rank of the index. /// The offset from the end. - /// The corresponding index from the start. + /// The corresponding index from the start. + [] member GetReverseIndex: rank: int * offset: int -> int type System.String with @@ -2781,6 +2787,7 @@ namespace Microsoft.FSharp.Core /// The rank of the index. /// The offset from the end. /// The corresponding index from the start. + [] member GetReverseIndex: rank: int * offset: int -> int @@ -2867,20 +2874,22 @@ namespace Microsoft.FSharp.Core /// The source array. /// The fixed index of the first dimension. /// The start index of the second dimension. - /// The end index of the second dimension. + /// The end index of the second dimension. /// The start index of the third dimension. /// The end index of the third dimension. /// The two dimensional sub array from the given indices. + [] val inline GetArraySlice3DFixedSingle1 : source:'T[,,] -> index1:int -> start2:int option -> finish2:int option -> start3:int option -> finish3:int option -> 'T[,] /// Gets a 2D slice of a 3D array. /// The source array. /// The start index of the first dimension. - /// The end index of the first dimension. + /// The end index of the first dimension. /// The fixed index of the second dimension. /// The start index of the third dimension. /// The end index of the third dimension. /// The two dimensional sub array from the given indices. + [] val inline GetArraySlice3DFixedSingle2 : source:'T[,,] -> start1:int option -> finish1:int option -> index2: int -> start3:int option -> finish3:int option -> 'T[,] /// Gets a 2D slice of a 3D array. @@ -2888,9 +2897,10 @@ namespace Microsoft.FSharp.Core /// The start index of the first dimension. /// The end index of the first dimension. /// The start index of the second dimension. - /// The end index of the second dimension. + /// The end index of the second dimension. /// The fixed index of the third dimension. /// The two dimensional sub array from the given indices. + [] val inline GetArraySlice3DFixedSingle3 : source:'T[,,] -> start1:int option -> finish1:int option -> start2:int option -> finish2:int option -> index3: int -> 'T[,] /// Gets a 1D slice of a 3D array. @@ -2899,16 +2909,18 @@ namespace Microsoft.FSharp.Core /// The fixed index of the second dimension. /// The start index of the third dimension. /// The end index of the third dimension. - /// The one dimensional sub array from the given indices. + /// The one dimensional sub array from the given indices. + [] val inline GetArraySlice3DFixedDouble1 : source:'T[,,] -> index1:int -> index2:int -> start3:int option -> finish3:int option -> 'T[] /// Gets a 1D slice of a 3D array. /// The source array. /// The fixed index of the first dimension. /// The start index of the second dimension. - /// The end index of the second dimension. + /// The end index of the second dimension. /// The fixed index of the third dimension. /// The one dimensional sub array from the given indices. + [] val inline GetArraySlice3DFixedDouble2 : source:'T[,,] -> index1:int -> start2:int option -> finish2:int option -> index3:int -> 'T[] /// Gets a 1D slice of a 3D array. @@ -2918,6 +2930,7 @@ namespace Microsoft.FSharp.Core /// The fixed index of the second dimension. /// The fixed index of the third dimension. /// The one dimensional sub array from the given indices. + [] val inline GetArraySlice3DFixedDouble3 : source:'T[,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> 'T[] /// Sets a slice of an array @@ -2940,6 +2953,7 @@ namespace Microsoft.FSharp.Core /// The end index of the third dimension. /// The source array. /// The two dimensional sub array from the given indices. + [] val inline SetArraySlice3DFixedSingle1 : target: 'T[,,] -> index1: int -> start2: int option -> finish2: int option -> start3: int option -> finish3: int option -> source: 'T[,] -> unit /// Sets a 2D slice of a 3D array @@ -2951,6 +2965,7 @@ namespace Microsoft.FSharp.Core /// The end index of the third dimension. /// The source array. /// The two dimensional sub array from the given indices. + [] val inline SetArraySlice3DFixedSingle2 : target: 'T[,,] -> start1: int option -> finish1: int option -> index2: int -> start3: int option -> finish3: int option -> source: 'T[,] -> unit /// Sets a 2D slice of a 3D array @@ -2962,6 +2977,7 @@ namespace Microsoft.FSharp.Core /// The fixed index of the third dimension. /// The source array. /// The two dimensional sub array from the given indices. + [] val inline SetArraySlice3DFixedSingle3 : target: 'T[,,] -> start1: int option -> finish1: int option -> start2: int option -> finish2: int option -> index3: int -> source: 'T[,] -> unit /// Sets a 1D slice of a 3D array. @@ -2972,16 +2988,18 @@ namespace Microsoft.FSharp.Core /// The fixed index of the third dimension. /// The source array. /// The one dimensional sub array from the given indices. + [] val inline SetArraySlice3DFixedDouble1 : target: 'T[,,] -> index1: int -> index2: int -> start3: int option -> finish3: int option -> source: 'T[] -> unit /// Sets a 1D slice of a 3D array. /// The source array. /// The fixed index of the first dimension. /// The start index of the second dimension. - /// The end index of the second dimension. + /// The end index of the second dimension. /// The fixed index of the third dimension. /// The source array. /// The one dimensional sub array from the given indices. + [] val inline SetArraySlice3DFixedDouble2 : target: 'T[,,] -> index1: int -> start2: int option -> finish2: int option -> index3: int -> source: 'T[] -> unit /// Sets a 1D slice of a 3D array. @@ -2992,6 +3010,7 @@ namespace Microsoft.FSharp.Core /// The fixed index of the third dimension. /// The source array. /// The one dimensional sub array from the given indices. + [] val inline SetArraySlice3DFixedDouble3 : target: 'T[,,] -> start1: int option -> finish1: int option -> index2: int -> index3: int -> source: 'T[] -> unit /// Gets a slice of an array diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 786928eeba..1db4ecc49c 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -81,6 +81,10 @@ type LanguageVersion (specifiedVersionAsString) = | true, v -> v <= specified | false, _ -> false + /// Has preview been explicitly specified + member __.IsPreviewEnabled = + specified = previewVersion + /// Does the languageVersion support this version string member __.ContainsVersion version = match version with diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index 62c4472dc3..6b44cd878a 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -26,7 +26,10 @@ type LanguageVersion = /// Get the list of valid versions member ContainsVersion: string -> bool - /// Does the specified LanguageVersion support the specified feature + /// Has preview been explicitly specified + member IsPreviewEnabled: bool + + /// Does the selected LanguageVersion support the specified feature member SupportsFeature: LanguageFeature -> bool /// Get the list of valid versions From 9ce549ea8cf7e80ff7229955d2c2fa0e20f3c15b Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 8 Jan 2020 14:21:37 -0800 Subject: [PATCH 176/214] Fix merge errors --- src/fsharp/CompileOps.fs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 013192cf14..88385a78c6 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -5115,11 +5115,8 @@ module ScriptPreprocessClosure = let tcConfigB = tcConfig.CloneOfOriginalBuilder TcConfig.Create(tcConfigB, validate=false), nowarns - let FindClosureFiles - (mainFile, closureSources, tcConfig: TcConfig, codeContext, - lexResourceManager: Lexhelp.LexResourceManager) = - - let mutable tcConfig = tcConfig + let FindClosureFiles(mainFile, _m, closureSources, origTcConfig:TcConfig, codeContext, lexResourceManager: Lexhelp.LexResourceManager) = + let mutable tcConfig = origTcConfig let observedSources = Observed() let loadScripts = HashSet<_>() @@ -5325,15 +5322,15 @@ module ScriptPreprocessClosure = tryGetMetadataSnapshot, reduceMemoryUsage) let closureSources = [ClosureSource(filename, range0, sourceText, true)] - let closureFiles, tcConfig = FindClosureFiles(filename, closureSources, tcConfig, codeContext, lexResourceManager) + let closureFiles, tcConfig = FindClosureFiles(filename, range0, closureSources, tcConfig, codeContext, lexResourceManager) GetLoadClosure(ctok, filename, closureFiles, tcConfig, codeContext) /// Given source filename, find the full load closure /// Used from fsi.fs and fsc.fs, for #load and command line let GetFullClosureOfScriptFiles(ctok, tcConfig:TcConfig, files:(string*range) list,codeContext,lexResourceManager: Lexhelp.LexResourceManager) = - let mainFile, _mainFileRange = List.last files + let mainFile, mainFileRange = List.last files let closureSources = files |> List.collect (fun (filename, m) -> ClosureSourceOfFilename(filename, m,tcConfig.inputCodePage,true)) - let closureFiles,tcConfig = FindClosureFiles(mainFile, closureSources, tcConfig, codeContext, lexResourceManager) + let closureFiles,tcConfig = FindClosureFiles(mainFile, mainFileRange, closureSources, tcConfig, codeContext, lexResourceManager) GetLoadClosure(ctok, mainFile, closureFiles, tcConfig, codeContext) type LoadClosure with From 58f15b26816bb9675e744f6f544d133ae00648e5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 8 Jan 2020 13:31:38 +0000 Subject: [PATCH 177/214] Update dependencies from https://github.com/dotnet/arcade build 20200107.5 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20057.5 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cfdceb169f..c98fbfbee4 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 5cbca575e9002cc2d9814c3471d38882df2fcc8e + d0833c8e5e58cfc507ce3c8da364e55931190263 diff --git a/global.json b/global.json index 6fe6bcd1ce..51d8c790fc 100644 --- a/global.json +++ b/global.json @@ -9,7 +9,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20056.6", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20057.5", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 4a6cb4766b8ba4e8111918d4d9038916271780cc Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 8 Jan 2020 17:15:04 -0800 Subject: [PATCH 178/214] Back to master --- eng/Versions.props | 6 +++--- global.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 196cab6f78..acb04ff55b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -12,9 +12,9 @@ beta - 5.0 + 4.7 $(FSLanguageVersion) - $(FSCoreMajorVersion).0 + $(FSCoreMajorVersion).1 $(FSCoreMajorVersion).0 $(FSCoreVersionPrefix).0 @@ -23,7 +23,7 @@ $(FSCorePackageVersion)-$(PreReleaseVersionLabel).* - 11.0 + 10.7 $(FSPackageMajorVersion).0 $(FSPackageVersion) $(FSPackageVersion).0 diff --git a/global.json b/global.json index 51d8c790fc..f12de76387 100644 --- a/global.json +++ b/global.json @@ -4,12 +4,13 @@ "vs": { "version": "16.3", "components": [ + "Microsoft.Net.Core.Component.SDK.2.1", "Microsoft.VisualStudio.Component.FSharp" ] } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20057.5", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19616.5", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 66eedf165c9d54f85c42b28c076f6f363607bcbf Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 8 Jan 2020 19:39:01 -0800 Subject: [PATCH 179/214] Command line help + tests --- src/fsharp/LanguageFeatures.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 1db4ecc49c..2170cee8f7 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -42,7 +42,7 @@ type LanguageVersion (specifiedVersionAsString) = static let latestMajorVersion = languageVersion47 // Language version when latestmajor specified static let validOptions = [| "preview"; "default"; "latest"; "latestmajor" |] - static let languageVersions = set [| languageVersion46; languageVersion47; (* languageVersion50 *) |] + static let languageVersions = set [| languageVersion46; languageVersion47 (*; languageVersion50 *) |] static let features = dict [ From 0fc0a274c1f594d82abd0648429f65557d8a464d Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Wed, 8 Jan 2020 22:35:07 -0800 Subject: [PATCH 180/214] Version it --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index acb04ff55b..f7611980e0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,7 +24,7 @@ 10.7 - $(FSPackageMajorVersion).0 + $(FSPackageMajorVersion).1 $(FSPackageVersion) $(FSPackageVersion).0 From 5942d19e5d5c51aab0b1e571f00d463e32b92b45 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 13 Jan 2020 05:44:08 +0000 Subject: [PATCH 181/214] Document baseline update and allow tests to run in debug mode without assert (#8149) * document baseline update and allow tests to run in debug mode without assert * Update DEVGUIDE.md * Update DEVGUIDE.md * Update readme.md --- src/fsharp/IlxGen.fs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 18be85e72a..9534358624 100755 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -5089,7 +5089,6 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau | _ -> error(InternalError("these matches should never be needed", switchm)) and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases (contf: Zmap<_,_> -> FakeUnit) = - assert(cgbuf.GetCurrentStack() = stackAtTargets) // cgbuf stack should be unchanged over tests. [bug://1750]. match defaultTargetOpt with | Some defaultTarget -> From 37e74f6421cbb1487b7aa3c952ef80e74838c2a0 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 13 Jan 2020 07:47:54 -0800 Subject: [PATCH 182/214] Use for..in..do instead of List.iter to prevent function allocations (#8175) --- src/fsharp/PostInferenceChecks.fs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 1730f88bd2..2420e636d2 100755 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -322,14 +322,14 @@ let rec CheckTypeDeep (cenv: cenv) ((visitTy, visitTyconRefOpt, visitAppTyOpt, v // In an ideal world we would, instead, record the solutions to these constraints as "witness variables" in expressions, // rather than solely in types. match ty with - | TType_var tp when tp.Solution.IsSome -> - tp.Constraints |> List.iter (fun cx -> + | TType_var tp when tp.Solution.IsSome -> + for cx in tp.Constraints do match cx with | TyparConstraint.MayResolveMember((TTrait(_, _, _, _, _, soln)), _) -> match visitTraitSolutionOpt, !soln with | Some visitTraitSolution, Some sln -> visitTraitSolution sln | _ -> () - | _ -> ()) + | _ -> () | _ -> () let ty = @@ -379,10 +379,12 @@ let rec CheckTypeDeep (cenv: cenv) ((visitTy, visitTyconRefOpt, visitAppTyOpt, v visitTyar (env, tp) and CheckTypesDeep cenv f g env tys = - tys |> List.iter (CheckTypeDeep cenv f g env true) + for ty in tys do + CheckTypeDeep cenv f g env true ty and CheckTypesDeepNoInner cenv f g env tys = - tys |> List.iter (CheckTypeDeep cenv f g env false) + for ty in tys do + CheckTypeDeep cenv f g env false ty and CheckTypeConstraintDeep cenv f g env x = match x with From cd67844b55e5c156e3a9c59b521e0e0712f846ef Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 13 Jan 2020 10:59:07 -0800 Subject: [PATCH 183/214] Scripting package (#8173) --- .../FSharp.Compiler.Private.Scripting.fsproj | 1 + .../FSharp.Compiler.Private.Scripting.nuspec | 5 +++- src/utils/CompilerLocationUtils.fs | 25 ++++++++----------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj index ac31809c48..8a49e311df 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj @@ -21,6 +21,7 @@ + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec index ef9ff88ca4..42a7c538eb 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -5,17 +5,20 @@ en-US - $CommonFileElements$ + + + + diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 204af8f412..923ab41843 100755 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -182,10 +182,6 @@ module internal FSharpEnvironment = // - default location of fsi.exe in FSharp.VS.FSI.dll (REVIEW: check this) // - default F# binaries directory in (project system) Project.fs let BinFolderOfDefaultFSharpCompiler(probePoint:string option) = -#if FX_NO_WIN_REGISTRY - ignore probePoint - Some AppDomain.CurrentDomain.BaseDirectory -#else // Check for an app.config setting to redirect the default compiler location // Like fsharp-compiler-location try @@ -200,18 +196,17 @@ module internal FSharpEnvironment = // Look in the probePoint if given, e.g. look for a compiler alongside of FSharp.Build.dll match probePoint with | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p - | _ -> - - // We let you set FSHARP_COMPILER_BIN. I've rarely seen this used and its not documented in the install instructions. - let result = Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN") - if not (String.IsNullOrEmpty(result)) then - Some result - else - // For the prototype compiler, we can just use the current domain - tryCurrentDomain() + | _ -> + // We let you set FSHARP_COMPILER_BIN. I've rarely seen this used and its not documented in the install instructions. + let result = Environment.GetEnvironmentVariable("FSHARP_COMPILER_BIN") + if not (String.IsNullOrEmpty(result)) then + Some result + else + // For the prototype compiler, we can just use the current domain + tryCurrentDomain() with e -> None - +#if !FX_NO_WIN_REGISTRY // Apply the given function to the registry entry corresponding to the subKey. // The reg key is disposed at the end of the scope. let useKey subKey f = @@ -236,7 +231,7 @@ module internal FSharpEnvironment = IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" || IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" || runningOnMono - + // Check if the running framework version is 4.5 or above. // Use the presence of v4.5.x in the registry to distinguish between 4.0 and 4.5 let IsRunningOnNetFx45OrAbove = From 4844548fb34f5bb6ac93afb1b0958869458240e8 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Tue, 14 Jan 2020 12:03:07 -0800 Subject: [PATCH 184/214] Path to dotnet tools that supports 4.8 --- eng/Build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Build.ps1 b/eng/Build.ps1 index d68a683f29..b1bac65054 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -221,7 +221,7 @@ function UpdatePath() { TestAndAddToPath $subdir # add windows SDK dir for ildasm.exe - foreach ($child in Get-ChildItem "${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.?.? Tools") { + foreach ($child in Get-ChildItem "${env:ProgramFiles(x86)}\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.* Tools") { $subdir = $child } TestAndAddToPath $subdir From 7688d8d8e42cc4ae02ba81074f8fa4973f0fbd03 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 14 Jan 2020 18:31:46 -0800 Subject: [PATCH 185/214] restore templates removed in #7379 (#8205) --- vsintegration/ProjectTemplates/.gitignore | 2 + .../ConsoleProject/ConsoleProject.csproj | 18 + .../ConsoleProject/Template/App.config | 6 + .../ConsoleProject/Template/AssemblyInfo.fs | 41 + .../Template/ConsoleApplication.fsproj | 65 + .../Template/ConsoleApplication.vstemplate | 33 + .../ConsoleProject/Template/Program.fs | 7 + .../Template/xlf/AssemblyInfo.fs.cs.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.de.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.es.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.fr.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.it.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.ja.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.ko.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.pl.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.ru.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.tr.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.zh-Hant.xlf | 77 + .../Template/xlf/Program.fs.cs.xlf | 22 + .../Template/xlf/Program.fs.de.xlf | 22 + .../Template/xlf/Program.fs.es.xlf | 22 + .../Template/xlf/Program.fs.fr.xlf | 22 + .../Template/xlf/Program.fs.it.xlf | 22 + .../Template/xlf/Program.fs.ja.xlf | 22 + .../Template/xlf/Program.fs.ko.xlf | 22 + .../Template/xlf/Program.fs.pl.xlf | 22 + .../Template/xlf/Program.fs.pt-BR.xlf | 22 + .../Template/xlf/Program.fs.ru.xlf | 22 + .../Template/xlf/Program.fs.tr.xlf | 22 + .../Template/xlf/Program.fs.zh-Hans.xlf | 22 + .../Template/xlf/Program.fs.zh-Hant.xlf | 22 + .../source.extension.vsixmanifest | 24 + .../ProjectTemplates/Directory.Build.props | 10 + .../ProjectTemplates/Directory.Build.targets | 3 + .../LibraryProject/LibraryProject.csproj | 18 + .../LibraryProject/Template/AssemblyInfo.fs | 41 + .../LibraryProject/Template/Library.fsproj | 61 + .../Template/Library.vstemplate | 33 + .../LibraryProject/Template/Library1.fs | 4 + .../LibraryProject/Template/Script.fsx | 8 + .../Template/xlf/AssemblyInfo.fs.cs.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.de.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.es.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.fr.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.it.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.ja.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.ko.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.pl.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.ru.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.tr.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 77 + .../Template/xlf/AssemblyInfo.fs.zh-Hant.xlf | 77 + .../Template/xlf/Script.fsx.cs.xlf | 22 + .../Template/xlf/Script.fsx.de.xlf | 22 + .../Template/xlf/Script.fsx.es.xlf | 22 + .../Template/xlf/Script.fsx.fr.xlf | 22 + .../Template/xlf/Script.fsx.it.xlf | 22 + .../Template/xlf/Script.fsx.ja.xlf | 22 + .../Template/xlf/Script.fsx.ko.xlf | 22 + .../Template/xlf/Script.fsx.pl.xlf | 22 + .../Template/xlf/Script.fsx.pt-BR.xlf | 22 + .../Template/xlf/Script.fsx.ru.xlf | 22 + .../Template/xlf/Script.fsx.tr.xlf | 22 + .../Template/xlf/Script.fsx.zh-Hans.xlf | 22 + .../Template/xlf/Script.fsx.zh-Hant.xlf | 22 + .../source.extension.vsixmanifest | 25 + .../TutorialProject/Template/Tutorial.fsproj | 66 + .../TutorialProject/Template/Tutorial.fsx | 997 ++++++++++ .../Template/Tutorial.vstemplate | 31 + .../Template/xlf/Tutorial.fsx.cs.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.de.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.es.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.fr.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.it.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.ja.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.ko.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.pl.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.pt-BR.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.ru.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.tr.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.zh-Hans.xlf | 1637 +++++++++++++++++ .../Template/xlf/Tutorial.fsx.zh-Hant.xlf | 1637 +++++++++++++++++ .../TutorialProject/TutorialProject.csproj | 17 + .../source.extension.vsixmanifest | 25 + .../Source.extension.vsixmanifest | 28 + .../VisualFSharpTemplates.csproj | 60 + 89 files changed, 25478 insertions(+) create mode 100644 vsintegration/ProjectTemplates/.gitignore create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/App.config create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf create mode 100644 vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest create mode 100644 vsintegration/ProjectTemplates/Directory.Build.props create mode 100644 vsintegration/ProjectTemplates/Directory.Build.targets create mode 100644 vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf create mode 100644 vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf create mode 100644 vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj create mode 100644 vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest create mode 100644 vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest create mode 100644 vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj diff --git a/vsintegration/ProjectTemplates/.gitignore b/vsintegration/ProjectTemplates/.gitignore new file mode 100644 index 0000000000..cd42ee34e8 --- /dev/null +++ b/vsintegration/ProjectTemplates/.gitignore @@ -0,0 +1,2 @@ +bin/ +obj/ diff --git a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj b/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj new file mode 100644 index 0000000000..82e55b95ec --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj @@ -0,0 +1,18 @@ + + + + + + ConsoleProject + + + + + + Template\AssemblyInfo.fs; + Template\Program.fs; + + + + + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config b/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config new file mode 100644 index 0000000000..7301b90379 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config @@ -0,0 +1,6 @@ + + + + $if$ ($targetframeworkversion$ >= 4.0)$endif$$if$ ($targetframeworkversion$ < 4.0)$endif$ + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs new file mode 100644 index 0000000000..ae735840e6 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs @@ -0,0 +1,41 @@ +namespace $safeprojectname$.AssemblyInfo + +open System.Reflection +open System.Runtime.CompilerServices +open System.Runtime.InteropServices + +// @@@GeneralInfo-Line1|General Information about an assembly is controlled through the following@@@ +// @@@GeneralInfo-Line2|set of attributes. Change these attribute values to modify the information@@@ +// @@@GeneralInfo-Line3|associated with an assembly.@@@ +[] +[] +[] +[] +[] +[] +[] +[] + +// @@@ComVisible-Line1|Setting ComVisible to false makes the types in this assembly not visible@@@ +// @@@ComVisible-Line2|to COM components. If you need to access a type in this assembly from@@@ +// @@@ComVisible-Line3|COM, set the ComVisible attribute to true on that type.@@@ +[] + +// @@@Guid-Line1|The following GUID is for the ID of the typelib if this project is exposed to COM@@@ +[] + +// @@@VersionInfo-Line1|Version information for an assembly consists of the following four values:@@@ +// +// @@@MajorVersion|Major Version@@@ +// @@@MinorVersion|Minor Version@@@ +// @@@BuildNumber|Build Number@@@ +// @@@Revision|Revision@@@ +// +// @@@VersionInfo-Line2|You can specify all the values or you can default the Build and Revision Numbers@@@ +// @@@VersionInfo-Line3|by using the '*' as shown below:@@@ +// [] +[] +[] + +do + () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj new file mode 100644 index 0000000000..19c297de5e --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj @@ -0,0 +1,65 @@ + + + + + Debug + AnyCPU + 2.0 + $guid1$ + Exe + $safeprojectname$ + $safeprojectname$ + v$targetframeworkversion$ + true + true + 3239;$(WarningsAsErrors) + + + true + full + false + false + bin\$(Configuration)\ + DEBUG;TRACE + 3 + AnyCPU + bin\$(Configuration)\$(AssemblyName).XML + true + + + pdbonly + true + true + bin\$(Configuration)\ + TRACE + 3 + AnyCPU + bin\$(Configuration)\$(AssemblyName).XML + true + + + + + + + + + + + + + + 11 + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets + + + + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate new file mode 100644 index 0000000000..fea0279b94 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate @@ -0,0 +1,33 @@ + + + + + + + Microsoft.FSharp.Application + FSharp + 4.5 + 1 + true + ConsoleApplication + true + true + + + + AssemblyInfo.fs + Program.fs + App.config + + + + NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + NuGet.VisualStudio.TemplateWizard + + + + + + + + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs b/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs new file mode 100644 index 0000000000..93b7275510 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs @@ -0,0 +1,7 @@ +// @@@LearnMore|Learn more about F# at https://fsharp.org@@@ +// @@@SeeTutorial|See the 'F# Tutorial' project for more help.@@@ + +[] +let main argv = + printfn "%A" argv + 0 // @@@Return|return an integer exit code@@@ diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf new file mode 100644 index 0000000000..a580d9e396 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Obecné informace o sestavení se řídí přes následující + + + + set of attributes. Change these attribute values to modify the information + sadu atributů. Změnou hodnot těchto atributů se upraví informace + + + + associated with an assembly. + přidružené k sestavení. + + + + Setting ComVisible to false makes the types in this assembly not visible + Nastavením atributu ComVisible na hodnotu False budou typy v tomto sestavení neviditelné + + + + to COM components. If you need to access a type in this assembly from + pro komponenty modelu COM. Pokud potřebujete přistoupit k typu v tomto sestavení z + + + + COM, set the ComVisible attribute to true on that type. + modelu COM, nastavte atribut ComVisible daného typu na hodnotu True. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Následující GUID se používá pro ID knihovny typů, pokud je tento projekt vystavený pro COM. + + + + Version information for an assembly consists of the following four values: + Informace o verzi sestavení se skládá z těchto čtyř hodnot: + + + + Major Version + Hlavní verze + + + + Minor Version + Podverze + + + + Build Number + Číslo sestavení + + + + Revision + Revize + + + + You can specify all the values or you can default the Build and Revision Numbers + Můžete zadat všechny hodnoty nebo nechat nastavená výchozí čísla sestavení a revize + + + + by using the '*' as shown below: + pomocí zástupného znaku * takto: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf new file mode 100644 index 0000000000..8df6ae7fc3 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Allgemeine Informationen über eine Assembly werden über die folgende + + + + set of attributes. Change these attribute values to modify the information + Attributgruppe gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, + + + + associated with an assembly. + die einer Assembly zugeordnet sind. + + + + Setting ComVisible to false makes the types in this assembly not visible + Durch Festlegen von ComVisible auf FALSE sind die Typen in dieser Assembly nicht + + + + to COM components. If you need to access a type in this assembly from + für COM-Komponenten sichtbar. Wenn Sie auf einen Typ in dieser Assembly von + + + + COM, set the ComVisible attribute to true on that type. + COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf TRUE festlegen. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird + + + + Version information for an assembly consists of the following four values: + Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: + + + + Major Version + Hauptversion + + + + Minor Version + Nebenversion + + + + Build Number + Buildnummer + + + + Revision + Revision + + + + You can specify all the values or you can default the Build and Revision Numbers + Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern + + + + by using the '*' as shown below: + übernehmen, indem Sie "*" eingeben: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf new file mode 100644 index 0000000000..9beb403796 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + La información general de un ensamblado se controla mediante el siguiente + + + + set of attributes. Change these attribute values to modify the information + conjunto de atributos. Cambie estos valores de atributo para modificar la información + + + + associated with an assembly. + asociada con un ensamblado. + + + + Setting ComVisible to false makes the types in this assembly not visible + Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles + + + + to COM components. If you need to access a type in this assembly from + para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde + + + + COM, set the ComVisible attribute to true on that type. + COM, establezca el atributo ComVisible en true en este tipo. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM. + + + + Version information for an assembly consists of the following four values: + La información de versión de un ensamblado consta de los cuatro valores siguientes: + + + + Major Version + Versión principal + + + + Minor Version + Versión secundaria + + + + Build Number + Número de compilación + + + + Revision + Revisión + + + + You can specify all the values or you can default the Build and Revision Numbers + Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión + + + + by using the '*' as shown below: + mediante el carácter '*', como se muestra a continuación: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf new file mode 100644 index 0000000000..a259bd3051 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Les informations générales relatives à un assembly dépendent de + + + + set of attributes. Change these attribute values to modify the information + l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations + + + + associated with an assembly. + associées à un assembly. + + + + Setting ComVisible to false makes the types in this assembly not visible + L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly + + + + to COM components. If you need to access a type in this assembly from + aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de + + + + COM, set the ComVisible attribute to true on that type. + COM, affectez la valeur true à l'attribut ComVisible sur ce type. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM + + + + Version information for an assembly consists of the following four values: + Les informations de version pour un assembly se composent des quatre valeurs suivantes : + + + + Major Version + Version principale + + + + Minor Version + Version secondaire + + + + Build Number + Numéro de build + + + + Revision + Révision + + + + You can specify all the values or you can default the Build and Revision Numbers + Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut + + + + by using the '*' as shown below: + en utilisant '*', comme indiqué ci-dessous : + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf new file mode 100644 index 0000000000..d5fc6c7558 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Le informazioni generali relative a un assembly sono controllate dal seguente + + + + set of attributes. Change these attribute values to modify the information + set di attributi. Modificare i valori di questi attributi per modificare le informazioni + + + + associated with an assembly. + associate a un assembly. + + + + Setting ComVisible to false makes the types in this assembly not visible + Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili + + + + to COM components. If you need to access a type in this assembly from + ai componenti COM. Se è necessario accedere a un tipo in questo assembly da + + + + COM, set the ComVisible attribute to true on that type. + COM, impostare su true l'attributo ComVisible per tale tipo. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi + + + + Version information for an assembly consists of the following four values: + Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti: + + + + Major Version + Versione principale + + + + Minor Version + Versione secondaria + + + + Build Number + Numero di build + + + + Revision + Revisione + + + + You can specify all the values or you can default the Build and Revision Numbers + È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build + + + + by using the '*' as shown below: + utilizzando l'asterisco (*) come illustrato di seguito: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf new file mode 100644 index 0000000000..1f413753d1 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + アセンブリに関する一般情報は、以下の属性セットによって + + + + set of attributes. Change these attribute values to modify the information + 制御されます。アセンブリに関連付けられている情報を変更するには、 + + + + associated with an assembly. + これらの属性値を変更します。 + + + + Setting ComVisible to false makes the types in this assembly not visible + ComVisible を false に設定すると、COM コンポーネントがこのアセンブリ内のその型を認識 + + + + to COM components. If you need to access a type in this assembly from + できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 + + + + COM, set the ComVisible attribute to true on that type. + その型の ComVisible 属性を true に設定します。 + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります + + + + Version information for an assembly consists of the following four values: + アセンブリのバージョン情報は、以下の 4 つの値で構成されます。: + + + + Major Version + メジャー バージョン + + + + Minor Version + マイナー バージョン + + + + Build Number + ビルド番号 + + + + Revision + リビジョン + + + + You can specify all the values or you can default the Build and Revision Numbers + すべての値を指定するか、下に示すように '*' を使用してビルドおよびリビジョン番号を + + + + by using the '*' as shown below: + 既定値にすることができます。: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf new file mode 100644 index 0000000000..258b4ebab2 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + 어셈블리의 일반 정보는 다음 특성 집합을 통해 + + + + set of attributes. Change these attribute values to modify the information + 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 + + + + associated with an assembly. + 이러한 특성 값을 변경하세요. + + + + Setting ComVisible to false makes the types in this assembly not visible + ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 + + + + to COM components. If you need to access a type in this assembly from + 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 + + + + COM, set the ComVisible attribute to true on that type. + 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. + + + + Version information for an assembly consists of the following four values: + 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.: + + + + Major Version + 주 버전 + + + + Minor Version + 부 버전 + + + + Build Number + 빌드 번호 + + + + Revision + 수정 버전 + + + + You can specify all the values or you can default the Build and Revision Numbers + 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 + + + + by using the '*' as shown below: + 지정되도록 할 수 있습니다.: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf new file mode 100644 index 0000000000..ee3471fb55 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Ogólne informacje o zestawie są kontrolowane poprzez następujący + + + + set of attributes. Change these attribute values to modify the information + zbiór atrybutów. Zmień wartości tych atrybutów by zmodyfikować informacje + + + + associated with an assembly. + powiązane z zestawem. + + + + Setting ComVisible to false makes the types in this assembly not visible + Ustawienie wartości ComVisible na false sprawia, że typy w tym zestawie nie będą widoczne + + + + to COM components. If you need to access a type in this assembly from + dla składników COM. Jeśli potrzebny jest dostęp do typu w tym zestawie z + + + + COM, set the ComVisible attribute to true on that type. + COM, ustaw atrybut ComVisible na true dla danego typu. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Następujący GUID jest dla ID typelib jeśli ten projekt jest dostępny dla COM + + + + Version information for an assembly consists of the following four values: + Informacje o wersji zestawu zawierają następujące cztery wartości: + + + + Major Version + Wersja główna + + + + Minor Version + Wersja pomocnicza + + + + Build Number + Numer kompilacji + + + + Revision + Poprawka + + + + You can specify all the values or you can default the Build and Revision Numbers + Można określać wszystkie wartości lub używać domyślnych numerów kompilacji i poprawki + + + + by using the '*' as shown below: + przy użyciu symbolu „*”, tak jak pokazano poniżej: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf new file mode 100644 index 0000000000..48d258faa2 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + As informações gerais sobre um assembly são controladas por meio do seguinte + + + + set of attributes. Change these attribute values to modify the information + conjunto de atributos. Altere estes valores de atributo para modificar as informações + + + + associated with an assembly. + associados a um assembly. + + + + Setting ComVisible to false makes the types in this assembly not visible + Definir ComVisible como false oculta os tipos neste assembly + + + + to COM components. If you need to access a type in this assembly from + para componentes COM. Caso precise acessar um tipo neste assembly a partir de + + + + COM, set the ComVisible attribute to true on that type. + COM, defina o atributo ComVisible como true nesse tipo. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + O GUID a seguir é para a ID de typelib quando este projeto é exposto a COM + + + + Version information for an assembly consists of the following four values: + As informações da versão de um assembly consistem nos quatro valores a seguir: + + + + Major Version + Versão Principal + + + + Minor Version + Versão Secundária + + + + Build Number + Número da Versão + + + + Revision + Revisão + + + + You can specify all the values or you can default the Build and Revision Numbers + É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão + + + + by using the '*' as shown below: + utilizando o '*' como mostrado abaixo: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf new file mode 100644 index 0000000000..c0f2735eae --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Общие сведения о сборке можно задать с помощью следующего + + + + set of attributes. Change these attribute values to modify the information + набора атрибутов. Отредактируйте эти значения атрибутов, чтобы изменить сведения, + + + + associated with an assembly. + связанные с этой сборкой. + + + + Setting ComVisible to false makes the types in this assembly not visible + При установке значения False в атрибуте ComVisible типы в этой сборке становятся невидимыми + + + + to COM components. If you need to access a type in this assembly from + для COM-компонентов. Если требуется обратиться к типу в этой сборке через + + + + COM, set the ComVisible attribute to true on that type. + COM, задайте для атрибута ComVisible значение True для этого типа. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Следующий GUID служит для идентификации библиотеки типов, если этот проект видим для COM + + + + Version information for an assembly consists of the following four values: + Сведения о версии сборки состоят из следующих четырех значений: + + + + Major Version + Основной номер версии + + + + Minor Version + Вспомогательная версия + + + + Build Number + Номер сборки + + + + Revision + Редакция + + + + You can specify all the values or you can default the Build and Revision Numbers + Можно задать все значения или принять номера сборки и редакции по умолчанию + + + + by using the '*' as shown below: + используя "*", как показано ниже: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf new file mode 100644 index 0000000000..906ec8f3ef --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki + + + + set of attributes. Change these attribute values to modify the information + öznitelikler kümesi. Bilgileri değiştirmek için bu öznitelik değerlerini değiştirin + + + + associated with an assembly. + Bir bütünleştirilmiş kod ile ilişkilendirildi. + + + + Setting ComVisible to false makes the types in this assembly not visible + ComVisible ayarının false olarak belirlenmesi bu derlemedeki türleri + + + + to COM components. If you need to access a type in this assembly from + COM bileşenlerine görünmez yapar. Bu derlemedeki bir türe COM'dan + + + + COM, set the ComVisible attribute to true on that type. + erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Eğer bu proje COM'a maruz kaldıysa aşağıdaki GUID typelib'in IDsi içindir + + + + Version information for an assembly consists of the following four values: + Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur: + + + + Major Version + Birincil Sürüm + + + + Minor Version + İkincil Sürüm + + + + Build Number + Yapı Numarası + + + + Revision + Düzeltme + + + + You can specify all the values or you can default the Build and Revision Numbers + Tüm değerleri belirtebilir veya varsayılan Oluşturma ve Düzeltme Numaralarını kullanabilirsiniz + + + + by using the '*' as shown below: + '*' karakterini aşağıda gösterildiği gibi kullanarak: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf new file mode 100644 index 0000000000..d76c9dbd18 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + 有关程序集的一般信息由以下 + + + + set of attributes. Change these attribute values to modify the information + 控制。更改这些特性值可修改 + + + + associated with an assembly. + 与程序集关联的信息。 + + + + Setting ComVisible to false makes the types in this assembly not visible + 将 ComVisible 设置为 false 将使此程序集中的类型 + + + + to COM components. If you need to access a type in this assembly from + 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, + + + + COM, set the ComVisible attribute to true on that type. + 请将此类型的 ComVisible 特性设置为 true。 + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID + + + + Version information for an assembly consists of the following four values: + 程序集的版本信息由下列四个值组成: + + + + Major Version + 主版本 + + + + Minor Version + 次版本 + + + + Build Number + 生成号 + + + + Revision + 修订 + + + + You can specify all the values or you can default the Build and Revision Numbers + 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, + + + + by using the '*' as shown below: + 方法是按如下所示使用“*”: : + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf new file mode 100644 index 0000000000..477f8719df --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + 組件的一般資訊是由下列的屬性集控制 + + + + set of attributes. Change these attribute values to modify the information + 變更這些屬性的值即可修改組件的相關 + + + + associated with an assembly. + 資訊。 + + + + Setting ComVisible to false makes the types in this assembly not visible + 將 ComVisible 設定為 false 會使得這個組件中的類型 + + + + to COM components. If you need to access a type in this assembly from + 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 + + + + COM, set the ComVisible attribute to true on that type. + 的類型,請在該類型上將 ComVisible 屬性設定為 true。 + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID + + + + Version information for an assembly consists of the following four values: + 組件的版本資訊由下列四個值所組成: : + + + + Major Version + 主要版本 + + + + Minor Version + 次要版本 + + + + Build Number + 組建編號 + + + + Revision + 修訂 + + + + You can specify all the values or you can default the Build and Revision Numbers + 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 + + + + by using the '*' as shown below: + 指定為預設值: : + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf new file mode 100644 index 0000000000..0a1913fea3 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Další informace o F# najdete na https://fsharp.org. + + + + See the 'F# Tutorial' project for more help. + Pokud potřebujete další nápovědu, viz projekt Výukový kurz F#. + + + + return an integer exit code + vrátit celočíselný ukončovací kód + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf new file mode 100644 index 0000000000..8c434e9d7d --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Weitere Informationen zu F# unter https://fsharp.org. + + + + See the 'F# Tutorial' project for more help. + Weitere Hilfe finden Sie im Projekt "F#-Tutorial". + + + + return an integer exit code + Integer-Exitcode zurückgeben + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf new file mode 100644 index 0000000000..1472966885 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Más información sobre F# en https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Vea el proyecto "Tutorial de F#" para obtener más ayuda. + + + + return an integer exit code + devolver un código de salida entero + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf new file mode 100644 index 0000000000..8052d98708 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + En savoir plus sur F# : https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Voir le projet 'Didacticiel F#' pour obtenir de l'aide. + + + + return an integer exit code + retourne du code de sortie entier + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf new file mode 100644 index 0000000000..c9027ad5b6 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Altre informazioni su F# disponibili all'indirizzo https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Per altre informazioni, vedere il progetto 'Esercitazione su F#'. + + + + return an integer exit code + restituisce un intero come codice di uscita + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf new file mode 100644 index 0000000000..c24608aec3 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + F# の詳細については、https://fsharp.org をご覧ください + + + + See the 'F# Tutorial' project for more help. + 詳細については、'F# チュートリアル' プロジェクトを参照してください。 + + + + return an integer exit code + 整数の終了コードを返します + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf new file mode 100644 index 0000000000..7d9f7dc54e --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + https://fsharp.org에서 F#에 대해 자세히 알아보기 + + + + See the 'F# Tutorial' project for more help. + 자세한 도움말은 'F# 자습서' 프로젝트를 참조하세요. + + + + return an integer exit code + 정수 종료 코드 반환 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf new file mode 100644 index 0000000000..763d2db3df --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Dowiedz się więcej o języku F# na stronie https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Aby uzyskać dodatkową pomoc, zobacz projekt „Samouczek języka F#”. + + + + return an integer exit code + zwracanie kodu zakończenia w postaci liczby całkowitej + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf new file mode 100644 index 0000000000..7af54cd8fd --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Saiba mais sobre o F# em https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Veja o projeto 'F# Tutorial' para obter mais ajuda. + + + + return an integer exit code + retornar um código de saída inteiro + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf new file mode 100644 index 0000000000..54eb018503 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Дополнительные сведения об F# см. на странице https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Дополнительную справку см. в проекте "Учебник по F#". + + + + return an integer exit code + возвращение целочисленного кода выхода + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf new file mode 100644 index 0000000000..c584140b66 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + F# hakkında daha fazla bilgi edinmek için bkz. https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Daha fazla yardım almak için 'F# Öğreticisi' projesine göz atın. + + + + return an integer exit code + bir tamsayı çıkış kodu döndürür + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf new file mode 100644 index 0000000000..27df727dbd --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + 了解更多关于 F# 的信息,请访问 https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + 请参阅“F# 教程”项目以获取更多帮助。 + + + + return an integer exit code + 返回整数退出代码 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf new file mode 100644 index 0000000000..5f67238de8 --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + 前往 https://fsharp.org 深入了解 F# + + + + See the 'F# Tutorial' project for more help. + 請參閱「F# 教學課程」專案,取得更多說明。 + + + + return an integer exit code + 傳回整數的結束代碼 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest new file mode 100644 index 0000000000..5f28d2c06e --- /dev/null +++ b/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest @@ -0,0 +1,24 @@ + + + + + F# .NETCore Project Templates + F# project templates for .NETCore. + + + + + + + + + + + + + + + + + + diff --git a/vsintegration/ProjectTemplates/Directory.Build.props b/vsintegration/ProjectTemplates/Directory.Build.props new file mode 100644 index 0000000000..49fb4e2d1f --- /dev/null +++ b/vsintegration/ProjectTemplates/Directory.Build.props @@ -0,0 +1,10 @@ + + + + ProjectTemplates + Microsoft.FSharp + + + + + diff --git a/vsintegration/ProjectTemplates/Directory.Build.targets b/vsintegration/ProjectTemplates/Directory.Build.targets new file mode 100644 index 0000000000..6dd437b28f --- /dev/null +++ b/vsintegration/ProjectTemplates/Directory.Build.targets @@ -0,0 +1,3 @@ + + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj b/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj new file mode 100644 index 0000000000..23239f0047 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj @@ -0,0 +1,18 @@ + + + + + + LibraryProject + + + + + + Template\AssemblyInfo.fs; + Template\Script.fsx; + + + + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs new file mode 100644 index 0000000000..ae735840e6 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs @@ -0,0 +1,41 @@ +namespace $safeprojectname$.AssemblyInfo + +open System.Reflection +open System.Runtime.CompilerServices +open System.Runtime.InteropServices + +// @@@GeneralInfo-Line1|General Information about an assembly is controlled through the following@@@ +// @@@GeneralInfo-Line2|set of attributes. Change these attribute values to modify the information@@@ +// @@@GeneralInfo-Line3|associated with an assembly.@@@ +[] +[] +[] +[] +[] +[] +[] +[] + +// @@@ComVisible-Line1|Setting ComVisible to false makes the types in this assembly not visible@@@ +// @@@ComVisible-Line2|to COM components. If you need to access a type in this assembly from@@@ +// @@@ComVisible-Line3|COM, set the ComVisible attribute to true on that type.@@@ +[] + +// @@@Guid-Line1|The following GUID is for the ID of the typelib if this project is exposed to COM@@@ +[] + +// @@@VersionInfo-Line1|Version information for an assembly consists of the following four values:@@@ +// +// @@@MajorVersion|Major Version@@@ +// @@@MinorVersion|Minor Version@@@ +// @@@BuildNumber|Build Number@@@ +// @@@Revision|Revision@@@ +// +// @@@VersionInfo-Line2|You can specify all the values or you can default the Build and Revision Numbers@@@ +// @@@VersionInfo-Line3|by using the '*' as shown below:@@@ +// [] +[] +[] + +do + () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj new file mode 100644 index 0000000000..5878583967 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj @@ -0,0 +1,61 @@ + + + + + Debug + AnyCPU + 2.0 + $guid1$ + Library + $safeprojectname$ + $safeprojectname$ + true + v$targetframeworkversion$ + true + 3239;$(WarningsAsErrors) + + + true + full + false + false + bin\$(Configuration)\ + DEBUG;TRACE + 3 + bin\$(Configuration)\$(AssemblyName).XML + + + pdbonly + true + true + bin\$(Configuration)\ + TRACE + 3 + bin\$(Configuration)\$(AssemblyName).XML + + + + + + + + + + + + + + 11 + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets + + + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate new file mode 100644 index 0000000000..d7f9a14d8d --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate @@ -0,0 +1,33 @@ + + + + + + + Microsoft.FSharp.Library + FSharp + 4.5 + 1 + true + Library + true + true + + + + AssemblyInfo.fs + Library1.fs + Script.fsx + + + + NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + NuGet.VisualStudio.TemplateWizard + + + + + + + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs b/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs new file mode 100644 index 0000000000..c8a8cd1b46 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs @@ -0,0 +1,4 @@ +namespace $safeprojectname$ + +type Class1() = + member this.X = "F#" diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx b/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx new file mode 100644 index 0000000000..0caeb86ca6 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx @@ -0,0 +1,8 @@ +// @@@LearnMore|Learn more about F# at https://fsharp.org@@@ +// @@@SeeTutorial|See the 'F# Tutorial' project for more help.@@@ + +#load "Library1.fs" +open $safeprojectname$ + +// @@@Define|Define your library scripting code here@@@ + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf new file mode 100644 index 0000000000..a580d9e396 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Obecné informace o sestavení se řídí přes následující + + + + set of attributes. Change these attribute values to modify the information + sadu atributů. Změnou hodnot těchto atributů se upraví informace + + + + associated with an assembly. + přidružené k sestavení. + + + + Setting ComVisible to false makes the types in this assembly not visible + Nastavením atributu ComVisible na hodnotu False budou typy v tomto sestavení neviditelné + + + + to COM components. If you need to access a type in this assembly from + pro komponenty modelu COM. Pokud potřebujete přistoupit k typu v tomto sestavení z + + + + COM, set the ComVisible attribute to true on that type. + modelu COM, nastavte atribut ComVisible daného typu na hodnotu True. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Následující GUID se používá pro ID knihovny typů, pokud je tento projekt vystavený pro COM. + + + + Version information for an assembly consists of the following four values: + Informace o verzi sestavení se skládá z těchto čtyř hodnot: + + + + Major Version + Hlavní verze + + + + Minor Version + Podverze + + + + Build Number + Číslo sestavení + + + + Revision + Revize + + + + You can specify all the values or you can default the Build and Revision Numbers + Můžete zadat všechny hodnoty nebo nechat nastavená výchozí čísla sestavení a revize + + + + by using the '*' as shown below: + pomocí zástupného znaku * takto: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf new file mode 100644 index 0000000000..8df6ae7fc3 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Allgemeine Informationen über eine Assembly werden über die folgende + + + + set of attributes. Change these attribute values to modify the information + Attributgruppe gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, + + + + associated with an assembly. + die einer Assembly zugeordnet sind. + + + + Setting ComVisible to false makes the types in this assembly not visible + Durch Festlegen von ComVisible auf FALSE sind die Typen in dieser Assembly nicht + + + + to COM components. If you need to access a type in this assembly from + für COM-Komponenten sichtbar. Wenn Sie auf einen Typ in dieser Assembly von + + + + COM, set the ComVisible attribute to true on that type. + COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf TRUE festlegen. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird + + + + Version information for an assembly consists of the following four values: + Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: + + + + Major Version + Hauptversion + + + + Minor Version + Nebenversion + + + + Build Number + Buildnummer + + + + Revision + Revision + + + + You can specify all the values or you can default the Build and Revision Numbers + Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern + + + + by using the '*' as shown below: + übernehmen, indem Sie "*" eingeben: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf new file mode 100644 index 0000000000..9beb403796 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + La información general de un ensamblado se controla mediante el siguiente + + + + set of attributes. Change these attribute values to modify the information + conjunto de atributos. Cambie estos valores de atributo para modificar la información + + + + associated with an assembly. + asociada con un ensamblado. + + + + Setting ComVisible to false makes the types in this assembly not visible + Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles + + + + to COM components. If you need to access a type in this assembly from + para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde + + + + COM, set the ComVisible attribute to true on that type. + COM, establezca el atributo ComVisible en true en este tipo. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM. + + + + Version information for an assembly consists of the following four values: + La información de versión de un ensamblado consta de los cuatro valores siguientes: + + + + Major Version + Versión principal + + + + Minor Version + Versión secundaria + + + + Build Number + Número de compilación + + + + Revision + Revisión + + + + You can specify all the values or you can default the Build and Revision Numbers + Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión + + + + by using the '*' as shown below: + mediante el carácter '*', como se muestra a continuación: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf new file mode 100644 index 0000000000..a259bd3051 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Les informations générales relatives à un assembly dépendent de + + + + set of attributes. Change these attribute values to modify the information + l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations + + + + associated with an assembly. + associées à un assembly. + + + + Setting ComVisible to false makes the types in this assembly not visible + L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly + + + + to COM components. If you need to access a type in this assembly from + aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de + + + + COM, set the ComVisible attribute to true on that type. + COM, affectez la valeur true à l'attribut ComVisible sur ce type. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM + + + + Version information for an assembly consists of the following four values: + Les informations de version pour un assembly se composent des quatre valeurs suivantes : + + + + Major Version + Version principale + + + + Minor Version + Version secondaire + + + + Build Number + Numéro de build + + + + Revision + Révision + + + + You can specify all the values or you can default the Build and Revision Numbers + Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut + + + + by using the '*' as shown below: + en utilisant '*', comme indiqué ci-dessous : + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf new file mode 100644 index 0000000000..d5fc6c7558 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Le informazioni generali relative a un assembly sono controllate dal seguente + + + + set of attributes. Change these attribute values to modify the information + set di attributi. Modificare i valori di questi attributi per modificare le informazioni + + + + associated with an assembly. + associate a un assembly. + + + + Setting ComVisible to false makes the types in this assembly not visible + Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili + + + + to COM components. If you need to access a type in this assembly from + ai componenti COM. Se è necessario accedere a un tipo in questo assembly da + + + + COM, set the ComVisible attribute to true on that type. + COM, impostare su true l'attributo ComVisible per tale tipo. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi + + + + Version information for an assembly consists of the following four values: + Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti: + + + + Major Version + Versione principale + + + + Minor Version + Versione secondaria + + + + Build Number + Numero di build + + + + Revision + Revisione + + + + You can specify all the values or you can default the Build and Revision Numbers + È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build + + + + by using the '*' as shown below: + utilizzando l'asterisco (*) come illustrato di seguito: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf new file mode 100644 index 0000000000..1f413753d1 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + アセンブリに関する一般情報は、以下の属性セットによって + + + + set of attributes. Change these attribute values to modify the information + 制御されます。アセンブリに関連付けられている情報を変更するには、 + + + + associated with an assembly. + これらの属性値を変更します。 + + + + Setting ComVisible to false makes the types in this assembly not visible + ComVisible を false に設定すると、COM コンポーネントがこのアセンブリ内のその型を認識 + + + + to COM components. If you need to access a type in this assembly from + できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 + + + + COM, set the ComVisible attribute to true on that type. + その型の ComVisible 属性を true に設定します。 + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります + + + + Version information for an assembly consists of the following four values: + アセンブリのバージョン情報は、以下の 4 つの値で構成されます。: + + + + Major Version + メジャー バージョン + + + + Minor Version + マイナー バージョン + + + + Build Number + ビルド番号 + + + + Revision + リビジョン + + + + You can specify all the values or you can default the Build and Revision Numbers + すべての値を指定するか、下に示すように '*' を使用してビルドおよびリビジョン番号を + + + + by using the '*' as shown below: + 既定値にすることができます。: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf new file mode 100644 index 0000000000..258b4ebab2 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + 어셈블리의 일반 정보는 다음 특성 집합을 통해 + + + + set of attributes. Change these attribute values to modify the information + 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 + + + + associated with an assembly. + 이러한 특성 값을 변경하세요. + + + + Setting ComVisible to false makes the types in this assembly not visible + ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 + + + + to COM components. If you need to access a type in this assembly from + 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 + + + + COM, set the ComVisible attribute to true on that type. + 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. + + + + Version information for an assembly consists of the following four values: + 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.: + + + + Major Version + 주 버전 + + + + Minor Version + 부 버전 + + + + Build Number + 빌드 번호 + + + + Revision + 수정 버전 + + + + You can specify all the values or you can default the Build and Revision Numbers + 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 + + + + by using the '*' as shown below: + 지정되도록 할 수 있습니다.: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf new file mode 100644 index 0000000000..ee3471fb55 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Ogólne informacje o zestawie są kontrolowane poprzez następujący + + + + set of attributes. Change these attribute values to modify the information + zbiór atrybutów. Zmień wartości tych atrybutów by zmodyfikować informacje + + + + associated with an assembly. + powiązane z zestawem. + + + + Setting ComVisible to false makes the types in this assembly not visible + Ustawienie wartości ComVisible na false sprawia, że typy w tym zestawie nie będą widoczne + + + + to COM components. If you need to access a type in this assembly from + dla składników COM. Jeśli potrzebny jest dostęp do typu w tym zestawie z + + + + COM, set the ComVisible attribute to true on that type. + COM, ustaw atrybut ComVisible na true dla danego typu. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Następujący GUID jest dla ID typelib jeśli ten projekt jest dostępny dla COM + + + + Version information for an assembly consists of the following four values: + Informacje o wersji zestawu zawierają następujące cztery wartości: + + + + Major Version + Wersja główna + + + + Minor Version + Wersja pomocnicza + + + + Build Number + Numer kompilacji + + + + Revision + Poprawka + + + + You can specify all the values or you can default the Build and Revision Numbers + Można określać wszystkie wartości lub używać domyślnych numerów kompilacji i poprawki + + + + by using the '*' as shown below: + przy użyciu symbolu „*”, tak jak pokazano poniżej: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf new file mode 100644 index 0000000000..48d258faa2 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + As informações gerais sobre um assembly são controladas por meio do seguinte + + + + set of attributes. Change these attribute values to modify the information + conjunto de atributos. Altere estes valores de atributo para modificar as informações + + + + associated with an assembly. + associados a um assembly. + + + + Setting ComVisible to false makes the types in this assembly not visible + Definir ComVisible como false oculta os tipos neste assembly + + + + to COM components. If you need to access a type in this assembly from + para componentes COM. Caso precise acessar um tipo neste assembly a partir de + + + + COM, set the ComVisible attribute to true on that type. + COM, defina o atributo ComVisible como true nesse tipo. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + O GUID a seguir é para a ID de typelib quando este projeto é exposto a COM + + + + Version information for an assembly consists of the following four values: + As informações da versão de um assembly consistem nos quatro valores a seguir: + + + + Major Version + Versão Principal + + + + Minor Version + Versão Secundária + + + + Build Number + Número da Versão + + + + Revision + Revisão + + + + You can specify all the values or you can default the Build and Revision Numbers + É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão + + + + by using the '*' as shown below: + utilizando o '*' como mostrado abaixo: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf new file mode 100644 index 0000000000..c0f2735eae --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Общие сведения о сборке можно задать с помощью следующего + + + + set of attributes. Change these attribute values to modify the information + набора атрибутов. Отредактируйте эти значения атрибутов, чтобы изменить сведения, + + + + associated with an assembly. + связанные с этой сборкой. + + + + Setting ComVisible to false makes the types in this assembly not visible + При установке значения False в атрибуте ComVisible типы в этой сборке становятся невидимыми + + + + to COM components. If you need to access a type in this assembly from + для COM-компонентов. Если требуется обратиться к типу в этой сборке через + + + + COM, set the ComVisible attribute to true on that type. + COM, задайте для атрибута ComVisible значение True для этого типа. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Следующий GUID служит для идентификации библиотеки типов, если этот проект видим для COM + + + + Version information for an assembly consists of the following four values: + Сведения о версии сборки состоят из следующих четырех значений: + + + + Major Version + Основной номер версии + + + + Minor Version + Вспомогательная версия + + + + Build Number + Номер сборки + + + + Revision + Редакция + + + + You can specify all the values or you can default the Build and Revision Numbers + Можно задать все значения или принять номера сборки и редакции по умолчанию + + + + by using the '*' as shown below: + используя "*", как показано ниже: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf new file mode 100644 index 0000000000..906ec8f3ef --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki + + + + set of attributes. Change these attribute values to modify the information + öznitelikler kümesi. Bilgileri değiştirmek için bu öznitelik değerlerini değiştirin + + + + associated with an assembly. + Bir bütünleştirilmiş kod ile ilişkilendirildi. + + + + Setting ComVisible to false makes the types in this assembly not visible + ComVisible ayarının false olarak belirlenmesi bu derlemedeki türleri + + + + to COM components. If you need to access a type in this assembly from + COM bileşenlerine görünmez yapar. Bu derlemedeki bir türe COM'dan + + + + COM, set the ComVisible attribute to true on that type. + erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın. + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + Eğer bu proje COM'a maruz kaldıysa aşağıdaki GUID typelib'in IDsi içindir + + + + Version information for an assembly consists of the following four values: + Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur: + + + + Major Version + Birincil Sürüm + + + + Minor Version + İkincil Sürüm + + + + Build Number + Yapı Numarası + + + + Revision + Düzeltme + + + + You can specify all the values or you can default the Build and Revision Numbers + Tüm değerleri belirtebilir veya varsayılan Oluşturma ve Düzeltme Numaralarını kullanabilirsiniz + + + + by using the '*' as shown below: + '*' karakterini aşağıda gösterildiği gibi kullanarak: + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf new file mode 100644 index 0000000000..d76c9dbd18 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + 有关程序集的一般信息由以下 + + + + set of attributes. Change these attribute values to modify the information + 控制。更改这些特性值可修改 + + + + associated with an assembly. + 与程序集关联的信息。 + + + + Setting ComVisible to false makes the types in this assembly not visible + 将 ComVisible 设置为 false 将使此程序集中的类型 + + + + to COM components. If you need to access a type in this assembly from + 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, + + + + COM, set the ComVisible attribute to true on that type. + 请将此类型的 ComVisible 特性设置为 true。 + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID + + + + Version information for an assembly consists of the following four values: + 程序集的版本信息由下列四个值组成: + + + + Major Version + 主版本 + + + + Minor Version + 次版本 + + + + Build Number + 生成号 + + + + Revision + 修订 + + + + You can specify all the values or you can default the Build and Revision Numbers + 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, + + + + by using the '*' as shown below: + 方法是按如下所示使用“*”: : + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf new file mode 100644 index 0000000000..477f8719df --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf @@ -0,0 +1,77 @@ + + + + + + General Information about an assembly is controlled through the following + 組件的一般資訊是由下列的屬性集控制 + + + + set of attributes. Change these attribute values to modify the information + 變更這些屬性的值即可修改組件的相關 + + + + associated with an assembly. + 資訊。 + + + + Setting ComVisible to false makes the types in this assembly not visible + 將 ComVisible 設定為 false 會使得這個組件中的類型 + + + + to COM components. If you need to access a type in this assembly from + 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 + + + + COM, set the ComVisible attribute to true on that type. + 的類型,請在該類型上將 ComVisible 屬性設定為 true。 + + + + The following GUID is for the ID of the typelib if this project is exposed to COM + 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID + + + + Version information for an assembly consists of the following four values: + 組件的版本資訊由下列四個值所組成: : + + + + Major Version + 主要版本 + + + + Minor Version + 次要版本 + + + + Build Number + 組建編號 + + + + Revision + 修訂 + + + + You can specify all the values or you can default the Build and Revision Numbers + 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 + + + + by using the '*' as shown below: + 指定為預設值: : + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf new file mode 100644 index 0000000000..e9771690a9 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Další informace o F# najdete na https://fsharp.org. + + + + See the 'F# Tutorial' project for more help. + Pokud potřebujete další nápovědu, viz projekt Výukový kurz F#. + + + + Define your library scripting code here + Tady definujte skriptovací kód knihovny. + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf new file mode 100644 index 0000000000..61df76a280 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Weitere Informationen zu F# unter https://fsharp.org. + + + + See the 'F# Tutorial' project for more help. + Weitere Hilfe finden Sie im Projekt "F#-Tutorial". + + + + Define your library scripting code here + Skriptcode für die Bibliothek hier definieren + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf new file mode 100644 index 0000000000..96fb3d3647 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Más información sobre F# en https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Vea el proyecto "Tutorial de F#" para obtener más ayuda. + + + + Define your library scripting code here + Definir aquí el código de scripting de bibliotecas + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf new file mode 100644 index 0000000000..cb48575303 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Pour en savoir plus sur le F# : https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Voir le projet 'Didacticiel F#' pour obtenir de l'aide. + + + + Define your library scripting code here + Définir votre code de script de bibliothèque ici + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf new file mode 100644 index 0000000000..42558ead9d --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Altre informazioni su F# disponibili all'indirizzo https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Per altre informazioni, vedere il progetto 'Esercitazione su F#'. + + + + Define your library scripting code here + Viene definito qui il codice di script della libreria + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf new file mode 100644 index 0000000000..45967e26bf --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + F# の詳細については、https://fsharp.org をご覧ください + + + + See the 'F# Tutorial' project for more help. + 詳細については、'F# チュートリアル' プロジェクトを参照してください。 + + + + Define your library scripting code here + ここでライブラリ スクリプト コードを定義します + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf new file mode 100644 index 0000000000..661f9e6344 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + https://fsharp.org에서 F#에 대해 자세히 알아보기 + + + + See the 'F# Tutorial' project for more help. + 자세한 도움말은 'F# 자습서' 프로젝트를 참조하세요. + + + + Define your library scripting code here + 라이브러리 스크립팅 코드를 정의합니다. + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf new file mode 100644 index 0000000000..e32717ff70 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Dowiedz się więcej o języku F# na stronie https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Aby uzyskać dodatkową pomoc, zobacz projekt „Samouczek języka F#”. + + + + Define your library scripting code here + Tutaj zdefiniuj kod skryptu biblioteki + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf new file mode 100644 index 0000000000..1bd32f9343 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Saiba mais sobre o F# em https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Veja o projeto 'F# Tutorial' para obter mais ajuda. + + + + Define your library scripting code here + Defina seu código de script de biblioteca aqui + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf new file mode 100644 index 0000000000..b8a6d8cced --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + Дополнительные сведения об F# см. на странице https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Дополнительную справку см. в проекте "Учебник по F#". + + + + Define your library scripting code here + Определите здесь код скрипта библиотеки + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf new file mode 100644 index 0000000000..1b3c2476e6 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + F# hakkında daha fazla bilgi edinmek için bkz. https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + Daha fazla yardım almak için 'F# Öğreticisi' projesine göz atın. + + + + Define your library scripting code here + Kitaplık betik oluşturma kodunuzu buradan tanımlayın + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf new file mode 100644 index 0000000000..4d849f68e3 --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + 了解更多关于 F# 的信息,请访问 https://fsharp.org + + + + See the 'F# Tutorial' project for more help. + 请参阅“F# 教程”项目以获取更多帮助。 + + + + Define your library scripting code here + 在此处定义库脚本代码 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf new file mode 100644 index 0000000000..14ed4156de --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf @@ -0,0 +1,22 @@ + + + + + + Learn more about F# at https://fsharp.org + 前往 https://fsharp.org 深入了解 F# + + + + See the 'F# Tutorial' project for more help. + 請參閱「F# 教學課程」專案,取得更多說明。 + + + + Define your library scripting code here + 在這裡定義程式庫指令碼程式碼 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest new file mode 100644 index 0000000000..f5157eaa6b --- /dev/null +++ b/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest @@ -0,0 +1,25 @@ + + + + + F# .NETCore Project Templates + F# project templates for .NETCore. + + + + + + + + + + + + + + + + + + + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj new file mode 100644 index 0000000000..dd2eed1525 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj @@ -0,0 +1,66 @@ + + + + + Debug + AnyCPU + 2.0 + $guid1$ + Exe + $safeprojectname$ + $safeprojectname$ + v$targetframeworkversion$ + true + true + true + 3239;$(WarningsAsErrors) + + + true + full + false + false + bin\$(Configuration)\ + DEBUG;TRACE + 3 + AnyCPU + bin\$(Configuration)\$(AssemblyName).XML + true + + + pdbonly + true + true + bin\$(Configuration)\ + TRACE + 3 + AnyCPU + bin\$(Configuration)\$(AssemblyName).XML + true + + + + + + + + + + + + + + 11 + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets + + + + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx new file mode 100644 index 0000000000..52b6649ca3 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx @@ -0,0 +1,997 @@ +// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ +// +// ******************************************************************************************************* +// @@@Instructions-Line1|To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click@@@ +// @@@Instructions-Line2|and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu.@@@ +// ******************************************************************************************************* +// +// @@@MoreAbout|For more about F#, see:@@@ +// https://fsharp.org +// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/ +// +// @@@SeeDocumentaton|To see this tutorial in documentation form, see:@@@ +// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tour +// +// @@@LearnMoreAbout|To learn more about applied F# programming, use@@@ +// https://fsharp.org/guides/enterprise/ +// https://fsharp.org/guides/cloud/ +// https://fsharp.org/guides/web/ +// https://fsharp.org/guides/data-science/ +// +// @@@ToInstall-Line1|To install the Visual F# Power Tools, use@@@ +// @@@ToInstall-Line2|'Tools' --> 'Extensions and Updates' --> `Online` and search@@@ +// +// @@@AdditionalTemplates-Line1|For additional templates to use with F#, see the 'Online Templates' in Visual Studio,@@@ +// @@@AdditionalTemplates-Line2|'New Project' --> 'Online Templates'@@@ + +// @@@SupportsComments|F# supports three kinds of comments:@@@ + +// @@@DoubleSlash|1. Double-slash comments. These are used in most situations.@@@ +(* @@@MLStyle|2. ML-style Block comments. These aren't used that often.@@@ *) +/// @@@TripleSlash-Line1|3. Triple-slash comments. These are used for documenting functions, types, and so on.@@@ +/// @@@TripleSlash-Line2|They will appear as text when you hover over something which is decorated with these comments.@@@ +/// +/// @@@XmlComments-Line1|They also support .NET-style XML comments, which allow you to generate reference documentation,@@@ +/// @@@XmlComments-Line2|and they also allow editors (such as Visual Studio) to extract information from them.@@@ +/// @@@XmlComments-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation@@@ + + +// @@@OpenNamespaces|Open namespaces using the 'open' keyword.@@@ +// +// @@@LearnMore|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword@@@ +open System + + +/// @@@Module-Line1|A module is a grouping of F# code, such as values, types, and function values.@@@ +/// @@@Module-Line2|Grouping code in modules helps keep related code together and helps avoid name conflicts in your program.@@@ +/// +/// @@@Module-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules@@@ +module IntegersAndNumbers = + + /// @@@SampleInt|This is a sample integer.@@@ + let sampleInteger = 176 + + /// @@@SampleFloat|This is a sample floating point number.@@@ + let sampleDouble = 4.1 + + /// @@@Computed-Line1|This computed a new number by some arithmetic. Numeric types are converted using@@@ + /// @@@Computed-Line2|functions 'int', 'double' and so on.@@@ + let sampleInteger2 = (sampleInteger/4 + 5 - 7) * 4 + int sampleDouble + + /// @@@ListNumbers|This is a list of the numbers from 0 to 99.@@@ + let sampleNumbers = [ 0 .. 99 ] + + /// @@@ListSquares|This is a list of all tuples containing all the numbers from 0 to 99 and their squares.@@@ + let sampleTableOfSquares = [ for i in 0 .. 99 -> (i, i*i) ] + + // @@@PrintList1|The next line prints a list that includes tuples, using '%A' for generic printing.@@@ + printfn "The table of squares from 0 to 99 is:\n%A" sampleTableOfSquares + + // @@@SampleIntType|This is a sample integer with a type annotation@@@ + let sampleInteger3: int = 1 + + +/// @@@ValuesImmutable-Line1|Values in F# are immutable by default. They cannot be changed@@@ +/// @@@ValuesImmutable-Line2|in the course of a program's execution unless explicitly marked as mutable.@@@ +/// +/// @@@ValuesImmutable-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable@@@ +module Immutability = + + /// @@@LetKeyword-Line1|Binding a value to a name via 'let' makes it immutable.@@@ + /// + /// @@@LetKeyword-Line2|The second line of code fails to compile because 'number' is immutable and bound.@@@ + /// @@@LetKeyword-Line3|Re-defining 'number' to be a different value is not allowed in F#.@@@ + let number = 2 + // let number = 3 + + /// @@@MutableKeyword|A mutable binding. This is required to be able to mutate the value of 'otherNumber'.@@@ + let mutable otherNumber = 2 + + printfn "'otherNumber' is %d" otherNumber + + // @@@MutableAssignment-Line1|When mutating a value, use '<-' to assign a new value.@@@ + // + // @@@MutableAssignment-Line2|You could not use '=' here for this purpose since it is used for equality@@@ + // @@@MutableAssignment-Line3|or other contexts such as 'let' or 'module'@@@ + otherNumber <- otherNumber + 1 + + printfn "'otherNumber' changed to be %d" otherNumber + + +/// @@@FunctionsModule-Line1|Much of F# programming consists of defining functions that transform input data to produce@@@ +/// @@@FunctionsModule-Line2|useful results.@@@ +/// +/// @@@FunctionsModule-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/@@@ +module BasicFunctions = + + /// @@@LetFunction-Line1|You use 'let' to define a function. This one accepts an integer argument and returns an integer.@@@ + /// @@@LetFunction-Line2|Parentheses are optional for function arguments, except for when you use an explicit type annotation.@@@ + let sampleFunction1 x = x*x + 3 + + /// @@@ApplyFunction-Line1|Apply the function, naming the function return result using 'let'.@@@ + /// @@@ApplyFunction-Line2|The variable type is inferred from the function return type.@@@ + let result1 = sampleFunction1 4573 + + // @@@printf-Line1|This line uses '%d' to print the result as an integer. This is type-safe.@@@ + // @@@printf-Line2|If 'result1' were not of type 'int', then the line would fail to compile.@@@ + printfn "The result of squaring the integer 4573 and adding 3 is %d" result1 + + /// @@@TypeAnnotation|When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required.@@@ + let sampleFunction2 (x:int) = 2*x*x - x/5 + 3 + + let result2 = sampleFunction2 (7 + 4) + printfn "The result of applying the 2nd sample function to (7 + 4) is %d" result2 + + /// @@@Conditionals-Line1|Conditionals use if/then/elid/elif/else.@@@ + /// + /// @@@Conditionals-Line2|Note that F# uses whitespace indentation-aware syntax, similar to languages like Python.@@@ + let sampleFunction3 x = + if x < 100.0 then + 2.0*x*x - x/5.0 + 3.0 + else + 2.0*x*x + x/5.0 - 37.0 + + let result3 = sampleFunction3 (6.5 + 4.5) + + // @@@printf-Line3|This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe.@@@ + printfn "The result of applying the 3rd sample function to (6.5 + 4.5) is %f" result3 + + +/// @@@Booleans-Line1|Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic.@@@ +/// +/// @@@Booleans-Line2|To learn more, see:@@@ +/// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/primitive-types +/// @@@Booleans-Line3|and@@@ +/// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/symbol-and-operator-reference/boolean-operators +module Booleans = + + /// @@@BooleanValues|Booleans values are 'true' and 'false'.@@@ + let boolean1 = true + let boolean2 = false + + /// @@@BooleanOperators|Operators on booleans are 'not', '&&' and '||'.@@@ + let boolean3 = not boolean1 && (boolean2 || false) + + // @@@BooleanPrintf|This line uses '%b'to print a boolean value. This is type-safe.@@@ + printfn "The expression 'not boolean1 && (boolean2 || false)' is %b" boolean3 + + +/// @@@Strings-Line1|Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation.@@@ +/// +/// @@@Strings-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings@@@ +module StringManipulation = + + /// @@@StringQuotes|Strings use double quotes.@@@ + let string1 = "Hello" + let string2 = "world" + + /// @@@StringLiterals-Line1|Strings can also use @ to create a verbatim string literal.@@@ + /// @@@StringLiterals-Line2|This will ignore escape characters such as '\', '\n', '\t', etc.@@@ + let string3 = @"C:\Program Files\" + + /// @@@StringTripleQuotes|String literals can also use triple-quotes.@@@ + let string4 = """The computer said "hello world" when I told it to!""" + + /// @@@StringConcatenation|String concatenation is normally done with the '+' operator.@@@ + let helloWorld = string1 + " " + string2 + + // @@@StringPrinting|This line uses '%s' to print a string value. This is type-safe.@@@ + printfn "%s" helloWorld + + /// @@@Substrings-Line1|Substrings use the indexer notation. This line extracts the first 7 characters as a substring.@@@ + /// @@@Substrings-Line2|Note that like many languages, Strings are zero-indexed in F#.@@@ + let substring = helloWorld.[0..6] + printfn "%s" substring + + +/// @@@Tuples-Line1|Tuples are simple combinations of data values into a combined value.@@@ +/// +/// @@@Tuples-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples@@@ +module Tuples = + + /// @@@TupleInteger|A simple tuple of integers.@@@ + let tuple1 = (1, 2, 3) + + /// @@@TupleFunction-Line1|A function that swaps the order of two values in a tuple.@@@ + /// + /// @@@TupleFunction-Line2|F# Type Inference will automatically generalize the function to have a generic type,@@@ + /// @@@TupleFunction-Line3|meaning that it will work with any type.@@@ + let swapElems (a, b) = (b, a) + + printfn "The result of swapping (1, 2) is %A" (swapElems (1,2)) + + /// @@@TupleMultiType-Line1|A tuple consisting of an integer, a string,@@@ + /// @@@TupleMultiType-Line2|and a double-precision floating point number.@@@ + let tuple2 = (1, "fred", 3.1415) + + printfn "tuple1: %A\ttuple2: %A" tuple1 tuple2 + + /// @@@TupleTypeAnnotation-Line1|A simple tuple of integers with a type annotation.@@@ + /// @@@TupleTypeAnnotation-Line2|Type annotations for tuples use the * symbol to separate elements@@@ + let tuple3: int * int = (5, 9) + + /// @@@StructTuple-Line1|Tuples are normally objects, but they can also be represented as structs.@@@ + /// + /// @@@StructTuple-Line2|These interoperate completely with structs in C# and Visual Basic.NET; however,@@@ + /// @@@StructTuple-Line3|struct tuples are not implicitly convertable with object tuples (often called reference tuples).@@@ + /// + /// @@@StructTuple-Line4|The second line below will fail to compile because of this. Uncomment it to see what happens.@@@ + let sampleStructTuple = struct (1, 2) + //let thisWillNotCompile: (int*int) = struct (1, 2) + + // @@@TupleConvert-Line1|Although you cannot implicitly convert between struct tuples and reference tuples,@@@ + // @@@TupleConvert-Line2|you can explicitly convert via pattern matching, as demonstrated below.@@@ + let convertFromStructTuple (struct(a, b)) = (a, b) + let convertToStructTuple (a, b) = struct(a, b) + + printfn "Struct Tuple: %A\nReference tuple made from the Struct Tuple: %A" sampleStructTuple (sampleStructTuple |> convertFromStructTuple) + + +/// @@@Pipes-Line1|The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<')@@@ +/// @@@Pipes-Line2|are used extensively when processing data. These operators are themselves functions@@@ +/// @@@Pipes-Line3|which make use of Partial Application.@@@ +/// +/// @@@Pipes-Line4|To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining@@@ +/// @@@Pipes-Line5|To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments@@@ +module PipelinesAndComposition = + + /// @@@Squares|Squares a value.@@@ + let square x = x * x + + /// @@@AddOne|Adds 1 to a value.@@@ + let addOne x = x + 1 + + /// @@@TestOdd|Tests if an integer value is odd via modulo.@@@ + let isOdd x = x % 2 <> 0 + + /// @@@NumberList1|A list of 5 numbers. More on lists later.@@@ + let numbers = [ 1; 2; 3; 4; 5 ] + + /// @@@FilterWithoutPipes-Line1|Given a list of integers, it filters out the even numbers,@@@ + /// @@@FilterWithoutPipes-Line2|squares the resulting odds, and adds 1 to the squared odds.@@@ + let squareOddValuesAndAddOne values = + let odds = List.filter isOdd values + let squares = List.map square odds + let result = List.map addOne squares + result + + printfn "processing %A through 'squareOddValuesAndAddOne' produces: %A" numbers (squareOddValuesAndAddOne numbers) + + /// @@@FilterShorter-Line1|A shorter way to write 'squareOddValuesAndAddOne' is to nest each@@@ + /// @@@FilterShorter-Line2|sub-result into the function calls themselves.@@@ + /// + /// @@@FilterShorter-Line3|This makes the function much shorter, but it's difficult to see the@@@ + /// @@@FilterShorter-Line4|order in which the data is processed.@@@ + let squareOddValuesAndAddOneNested values = + List.map addOne (List.map square (List.filter isOdd values)) + + printfn "processing %A through 'squareOddValuesAndAddOneNested' produces: %A" numbers (squareOddValuesAndAddOneNested numbers) + + /// @@@FilterWithPipes-Line1|A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators.@@@ + /// @@@FilterWithPipes-Line2|This allows you to avoid creating intermediate results, but is much more readable@@@ + /// @@@FilterWithPipes-Line3|than nesting function calls like 'squareOddValuesAndAddOneNested'@@@ + let squareOddValuesAndAddOnePipeline values = + values + |> List.filter isOdd + |> List.map square + |> List.map addOne + + printfn "processing %A through 'squareOddValuesAndAddOnePipeline' produces: %A" numbers (squareOddValuesAndAddOnePipeline numbers) + + /// @@@PipeInLambda-Line1|You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call@@@ + /// @@@PipeInLambda-Line2|into the first, using a Lambda Function.@@@ + /// + /// @@@PipeInLambda-Line3|Note that pipelines are also being used inside the lambda function. F# pipe operators@@@ + /// @@@PipeInLambda-Line4|can be used for single values as well. This makes them very powerful for processing data.@@@ + let squareOddValuesAndAddOneShorterPipeline values = + values + |> List.filter isOdd + |> List.map(fun x -> x |> square |> addOne) + + printfn "processing %A through 'squareOddValuesAndAddOneShorterPipeline' produces: %A" numbers (squareOddValuesAndAddOneShorterPipeline numbers) + + /// @@@PipesComposition-Line1|Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>'@@@ + /// @@@PipesComposition-Line2|to compose the two core operations: filtering out even numbers, then squaring and adding one.@@@ + /// @@@PipesComposition-Line3|Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply@@@ + /// @@@PipesComposition-Line4|being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used@@@ + /// @@@PipesComposition-Line5|there as well.@@@ + /// + /// @@@PipesComposition-Line6|The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a@@@ + /// @@@PipesComposition-Line7|list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list@@@ + /// @@@PipesComposition-Line8|of integers, you'll notice that it produces the same results as previous functions.@@@ + /// + /// @@@PipesComposition-Line9|This is using what is known as function composition. This is possible because functions in F#@@@ + /// @@@PipesComposition-Line10|use Partial Application and the input and output types of each data processing operation match@@@ + /// @@@PipesComposition-Line11|the signatures of the functions we're using.@@@ + let squareOddValuesAndAddOneComposition = + List.filter isOdd >> List.map (square >> addOne) + + printfn "processing %A through 'squareOddValuesAndAddOneComposition' produces: %A" numbers (squareOddValuesAndAddOneComposition numbers) + + +/// @@@Lists-Line1|Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation.@@@ +/// +/// @@@Lists-Line2|This module shows various ways to generate lists and process lists with some functions@@@ +/// @@@Lists-Line3|in the 'List' module in the F# Core Library.@@@ +/// +/// @@@Lists-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists@@@ +module Lists = + + /// @@@ListEmptyDefinition|Lists are defined using [ ... ]. This is an empty list.@@@ + let list1 = [ ] + + /// @@@ListElementDefinition|This is a list with 3 elements. ';' is used to separate elements on the same line.@@@ + let list2 = [ 1; 2; 3 ] + + /// @@@ListNewlineElements|You can also separate elements by placing them on their own lines.@@@ + let list3 = [ + 1 + 2 + 3 + ] + + /// @@@NumberList2|This is a list of integers from 1 to 1000@@@ + let numberList = [ 1 .. 1000 ] + + /// @@@ListComputation-Line1|Lists can also be generated by computations. This is a list containing@@@ + /// @@@ListComputation-Line2|all the days of the year.@@@ + let daysList = + [ for month in 1 .. 12 do + for day in 1 .. System.DateTime.DaysInMonth(2017, month) do + yield System.DateTime(2017, month, day) ] + + // @@@PrintList2|Print the first 5 elements of 'daysList' using 'List.take'.@@@ + printfn "The first 5 days of 2017 are: %A" (daysList |> List.take 5) + + /// @@@ListComputationConditional-Line1|Computations can include conditionals. This is a list containing the tuples@@@ + /// @@@ListComputationConditional-Line2|which are the coordinates of the black squares on a chess board.@@@ + let blackSquares = + [ for i in 0 .. 7 do + for j in 0 .. 7 do + if (i+j) % 2 = 1 then + yield (i, j) ] + + /// @@@ListMap-Line1|Lists can be transformed using 'List.map' and other functional programming combinators.@@@ + /// @@@ListMap-Line2|This definition produces a new list by squaring the numbers in numberList, using the pipeline@@@ + /// @@@ListMap-Line3|operator to pass an argument to List.map.@@@ + let squares = + numberList + |> List.map (fun x -> x*x) + + /// @@@ListFilter-Line1|There are many other list combinations. The following computes the sum of the squares of the@@@ + /// @@@ListFilter-Line2|numbers divisible by 3.@@@ + let sumOfSquares = + numberList + |> List.filter (fun x -> x % 3 = 0) + |> List.sumBy (fun x -> x * x) + + printfn "The sum of the squares of numbers up to 1000 that are divisible by 3 is: %d" sumOfSquares + + +/// @@@Arrays-Line1|Arrays are fixed-size, mutable collections of elements of the same type.@@@ +/// +/// @@@Arrays-Line2|Although they are similar to Lists (they support enumeration and have similar combinators for data processing),@@@ +/// @@@Arrays-Line3|they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable.@@@ +/// +/// @@@Arrays-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays@@@ +module Arrays = + + /// @@@EmptyArray|This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead.@@@ + let array1 = [| |] + + /// @@@ArrayConstructionList|Arrays are specified using the same range of constructs as lists.@@@ + let array2 = [| "hello"; "world"; "and"; "hello"; "world"; "again" |] + + /// @@@ArrayConstructionRange|This is an array of numbers from 1 to 1000.@@@ + let array3 = [| 1 .. 1000 |] + + /// @@@ArrayComputationConstruction|This is an array containing only the words "hello" and "world".@@@ + let array4 = + [| for word in array2 do + if word.Contains("l") then + yield word |] + + /// @@@ArrayInit|This is an array initialized by index and containing the even numbers from 0 to 2000.@@@ + let evenNumbers = Array.init 1001 (fun n -> n * 2) + + /// @@@ArraySlicing|Sub-arrays are extracted using slicing notation.@@@ + let evenNumbersSlice = evenNumbers.[0..500] + + /// @@@ArrayLooping|You can loop over arrays and lists using 'for' loops.@@@ + for word in array4 do + printfn "word: %s" word + + // @@@ArrayAssignment-Line1|You can modify the contents of an an array element by using the left arrow assignment operator.@@@ + // + // @@@ArrayAssignment-Line2|To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables@@@ + array2.[1] <- "WORLD!" + + /// @@@ArrayMap-Line1|You can transform arrays using 'Array.map' and other functional programming operations.@@@ + /// @@@ArrayMap-Line2|The following calculates the sum of the lengths of the words that start with 'h'.@@@ + let sumOfLengthsOfWords = + array2 + |> Array.filter (fun x -> x.StartsWith "h") + |> Array.sumBy (fun x -> x.Length) + + printfn "The sum of the lengths of the words in Array 2 is: %d" sumOfLengthsOfWords + + +/// @@@Sequences-Line1|Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays.@@@ +/// +/// @@@Sequences-Line2|Sequences are evaluated on-demand and are re-evaluated each time they are iterated.@@@ +/// @@@Sequences-Line3|An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>.@@@ +/// +/// @@@Sequences-Line4|Sequence processing functions can be applied to Lists and Arrays as well.@@@ +/// +/// @@@Sequences-Line5|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences@@@ +module Sequences = + + /// @@@EmptySequence|This is the empty sequence.@@@ + let seq1 = Seq.empty + + /// @@@SequenceOfValues|This a sequence of values.@@@ + let seq2 = seq { yield "hello"; yield "world"; yield "and"; yield "hello"; yield "world"; yield "again" } + + /// @@@OnDemandSequence|This is an on-demand sequence from 1 to 1000.@@@ + let numbersSeq = seq { 1 .. 1000 } + + /// @@@SequenceComposition|This is a sequence producing the words "hello" and "world"@@@ + let seq3 = + seq { for word in seq2 do + if word.Contains("l") then + yield word } + + /// @@@SequenceInit|This sequence producing the even numbers up to 2000.@@@ + let evenNumbers = Seq.init 1001 (fun n -> n * 2) + + let rnd = System.Random() + + /// @@@InfiniteSequence-Line1|This is an infinite sequence which is a random walk.@@@ + /// @@@InfiniteSequence-Line2|This example uses yield! to return each element of a subsequence.@@@ + let rec randomWalk x = + seq { yield x + yield! randomWalk (x + rnd.NextDouble() - 0.5) } + + /// @@@Sequence100Elements|This example shows the first 100 elements of the random walk.@@@ + let first100ValuesOfRandomWalk = + randomWalk 5.0 + |> Seq.truncate 100 + |> Seq.toList + + printfn "First 100 elements of a random walk: %A" first100ValuesOfRandomWalk + + +/// @@@RecursiveFunctions-Line1|Recursive functions can call themselves. In F#, functions are only recursive@@@ +/// @@@RecursiveFunctions-Line2|when declared using 'let rec'.@@@ +/// +/// @@@RecursiveFunctions-Line3|Recursion is the preferred way to process sequences or collections in F#.@@@ +/// +/// @@@RecursiveFunctions-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions@@@ +module RecursiveFunctions = + + /// @@@RecFunDef-Line1|This example shows a recursive function that computes the factorial of an@@@ + /// @@@RecRunDef-Line2|integer. It uses 'let rec' to define a recursive function.@@@ + let rec factorial n = + if n = 0 then 1 else n * factorial (n-1) + + printfn "Factorial of 6 is: %d" (factorial 6) + + /// @@@RecGcd-Line1|Computes the greatest common factor of two integers.@@@ + /// + /// @@@RecGcd-Line2|Since all of the recursive calls are tail calls,@@@ + /// @@@RecGcd-Line3|the compiler will turn the function into a loop,@@@ + /// @@@RecGcd-Line4|which improves performance and reduces memory consumption.@@@ + let rec greatestCommonFactor a b = + if a = 0 then b + elif a < b then greatestCommonFactor a (b - a) + else greatestCommonFactor (a - b) b + + printfn "The Greatest Common Factor of 300 and 620 is %d" (greatestCommonFactor 300 620) + + /// @@@RecSumList|This example computes the sum of a list of integers using recursion.@@@ + let rec sumList xs = + match xs with + | [] -> 0 + | y::ys -> y + sumList ys + + /// @@@RecSumListTail|This makes 'sumList' tail recursive, using a helper function with a result accumulator.@@@ + let rec private sumListTailRecHelper accumulator xs = + match xs with + | [] -> accumulator + | y::ys -> sumListTailRecHelper (accumulator+y) ys + + /// @@@RecSumListTailInvoke-Line1|This invokes the tail recursive helper function, providing '0' as a seed accumulator.@@@ + /// @@@RecSumListTailInvoke-Line2|An approach like this is common in F#.@@@ + let sumListTailRecursive xs = sumListTailRecHelper 0 xs + + let oneThroughTen = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] + + printfn "The sum 1-10 is %d" (sumListTailRecursive oneThroughTen) + + +/// @@@Records-Line1|Records are an aggregate of named values, with optional members (such as methods).@@@ +/// @@@Records-Line2|They are immutable and have structural equality semantics.@@@ +/// +/// @@@Records-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records@@@ +module RecordTypes = + + /// @@@RecordDefinition|This example shows how to define a new record type.@@@ + type ContactCard = + { Name : string + Phone : string + Verified : bool } + + /// @@@RecordInstantiation1|This example shows how to instantiate a record type.@@@ + let contact1 = + { Name = "Alf" + Phone = "(206) 555-0157" + Verified = false } + + /// @@@RecordInstantiation2|You can also do this on the same line with ';' separators.@@@ + let contactOnSameLine = { Name = "Alf"; Phone = "(206) 555-0157"; Verified = false } + + /// @@@UpdateRecord-Line1|This example shows how to use "copy-and-update" on record values. It creates@@@ + /// @@@UpdateRecord-Line2|a new record value that is a copy of contact1, but has different values for@@@ + /// @@@UpdateRecord-Line3|the 'Phone' and 'Verified' fields.@@@ + /// + /// @@@UpdateRecord-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions@@@ + let contact2 = + { contact1 with + Phone = "(206) 555-0112" + Verified = true } + + /// @@@ProcessRecord-Line1|This example shows how to write a function that processes a record value.@@@ + /// @@@ProcessRecord-Line2|It converts a 'ContactCard' object to a string.@@@ + let showContactCard (c: ContactCard) = + c.Name + " Phone: " + c.Phone + (if not c.Verified then " (unverified)" else "") + + printfn "Alf's Contact Card: %s" (showContactCard contact1) + + /// @@@RecordWithMember-Line1|This is an example of a Record with a member.@@@ + type ContactCardAlternate = + { Name : string + Phone : string + Address : string + Verified : bool } + + /// @@@RecordWithMember-Line2|Members can implement object-oriented members.@@@ + member this.PrintedContactCard = + this.Name + " Phone: " + this.Phone + (if not this.Verified then " (unverified)" else "") + this.Address + + let contactAlternate = + { Name = "Alf" + Phone = "(206) 555-0157" + Verified = false + Address = "111 Alf Street" } + + // @@@RecordAccess|Members are accessed via the '.' operator on an instantiated type.@@@ + printfn "Alf's alternate contact card is %s" contactAlternate.PrintedContactCard + + /// @@@RecordStruct-Line1|Records can also be represented as structs via the 'Struct' attribute.@@@ + /// @@@RecordStruct-Line2|This is helpful in situations where the performance of structs outweighs@@@ + /// @@@RecordStruct-Line3|the flexibility of reference types.@@@ + [] + type ContactCardStruct = + { Name : string + Phone : string + Verified : bool } + + +/// @@@DiscriminatedUnions-Line1|Discriminated Unions (DU for short) are values which could be a number of named forms or cases.@@@ +/// @@@DiscriminatedUnions-Line2|Data stored in DUs can be one of several distinct values.@@@ +/// +/// @@@DiscriminatedUnions-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions@@@ +module DiscriminatedUnions = + + /// @@@CardSuit|The following represents the suit of a playing card.@@@ + type Suit = + | Hearts + | Clubs + | Diamonds + | Spades + + /// @@@CardRank|A Disciminated Union can also be used to represent the rank of a playing card.@@@ + type Rank = + /// @@@CardRankValue|Represents the rank of cards 2 .. 10@@@ + | Value of int + | Ace + | King + | Queen + | Jack + + /// @@@CardMember|Discriminated Unions can also implement object-oriented members.@@@ + static member GetAllRanks() = + [ yield Ace + for i in 2 .. 10 do yield Value i + yield Jack + yield Queen + yield King ] + + /// @@@CardType-Line1|This is a record type that combines a Suit and a Rank.@@@ + /// @@@CardType-Line2|It's common to use both Records and Disciminated Unions when representing data.@@@ + type Card = { Suit: Suit; Rank: Rank } + + /// @@@ComputeFullDeck|This computes a list representing all the cards in the deck.@@@ + let fullDeck = + [ for suit in [ Hearts; Diamonds; Clubs; Spades] do + for rank in Rank.GetAllRanks() do + yield { Suit=suit; Rank=rank } ] + + /// @@@CardToString|This example converts a 'Card' object to a string.@@@ + let showPlayingCard (c: Card) = + let rankString = + match c.Rank with + | Ace -> "Ace" + | King -> "King" + | Queen -> "Queen" + | Jack -> "Jack" + | Value n -> string n + let suitString = + match c.Suit with + | Clubs -> "clubs" + | Diamonds -> "diamonds" + | Spades -> "spades" + | Hearts -> "hearts" + rankString + " of " + suitString + + /// @@@PrintAllCards|This example prints all the cards in a playing deck.@@@ + let printAllCards() = + for card in fullDeck do + printfn "%s" (showPlayingCard card) + + // @@@SingleCaseDu-Line1|Single-case DUs are often used for domain modeling. This can buy you extra type safety@@@ + // @@@SingleCaseDu-Line2|over primitive types such as strings and ints.@@@ + // + // @@@SingleCaseDu-Line3|Single-case DUs cannot be implicitly converted to or from the type they wrap.@@@ + // @@@SingleCaseDu-Line4|For example, a function which takes in an Address cannot accept a string as that input,@@@ + // @@@SingleCaseDu-Line5|or vive/versa.@@@ + type Address = Address of string + type Name = Name of string + type SSN = SSN of int + + // @@@InstantiateSingleCaseDu|You can easily instantiate a single-case DU as follows.@@@ + let address = Address "111 Alf Way" + let name = Name "Alf" + let ssn = SSN 1234567890 + + /// @@@UnwrapSingleCaseDu|When you need the value, you can unwrap the underlying value with a simple function.@@@ + let unwrapAddress (Address a) = a + let unwrapName (Name n) = n + let unwrapSSN (SSN s) = s + + // @@@PrintSingleCaseDu|Printing single-case DUs is simple with unwrapping functions.@@@ + printfn "Address: %s, Name: %s, and SSN: %d" (address |> unwrapAddress) (name |> unwrapName) (ssn |> unwrapSSN) + + /// @@@DuRecursiveDef-Line1|Disciminated Unions also support recursive definitions.@@@ + /// + /// @@@DuRecursiveDef-Line2|This represents a Binary Search Tree, with one case being the Empty tree,@@@ + /// @@@DuRecursiveDef-Line3|and the other being a Node with a value and two subtrees.@@@ + type BST<'T> = + | Empty + | Node of value:'T * left: BST<'T> * right: BST<'T> + + /// @@@SearchBinaryTree-Line1|Check if an item exists in the binary search tree.@@@ + /// @@@SearchBinaryTree-Line2|Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false.@@@ + let rec exists item bst = + match bst with + | Empty -> false + | Node (x, left, right) -> + if item = x then true + elif item < x then (exists item left) // @@@CheckLeftSubtree|Check the left subtree.@@@ + else (exists item right) // @@@CheckRightSubtree|Check the right subtree.@@@ + + /// @@@BinaryTreeInsert-Line1|Inserts an item in the Binary Search Tree.@@@ + /// @@@BinaryTreeInsert-Line2|Finds the place to insert recursively using Pattern Matching, then inserts a new node.@@@ + /// @@@BinaryTreeInsert-Line3|If the item is already present, it does not insert anything.@@@ + let rec insert item bst = + match bst with + | Empty -> Node(item, Empty, Empty) + | Node(x, left, right) as node -> + if item = x then node // @@@BinaryTreeInsert-Line4|No need to insert, it already exists; return the node.@@@ + elif item < x then Node(x, insert item left, right) // @@@BinaryTreeInsert-Line5|Call into left subtree.@@@ + else Node(x, left, insert item right) // @@@BinaryTreeInsert-Line6|Call into right subtree.@@@ + + /// @@@DuStruct-Line1|Discriminated Unions can also be represented as structs via the 'Struct' attribute.@@@ + /// @@@DuStruct-Line2|This is helpful in situations where the performance of structs outweighs@@@ + /// @@@DuStruct-Line3|the flexibility of reference types.@@@ + /// + /// @@@DuStruct-Line4|However, there are two important things to know when doing this:@@@ + /// @@@DuStruct-Line5|1. A struct DU cannot be recursively-defined.@@@ + /// @@@DuStruct-Line6|2. A struct DU must have unique names for each of its cases.@@@ + [] + type Shape = + | Circle of radius: float + | Square of side: float + | Triangle of height: float * width: float + + +/// @@@PatternMatching-Line1|Pattern Matching is a feature of F# that allows you to utilize Patterns,@@@ +/// @@@PatternMatching-Line2|which are a way to compare data with a logical structure or structures,@@@ +/// @@@PatternMatching-Line3|decompose data into constituent parts, or extract information from data in various ways.@@@ +/// @@@PatternMatching-Line4|You can then dispatch on the "shape" of a pattern via Pattern Matching.@@@ +/// +/// @@@PatternMatching-Line5|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching@@@ +module PatternMatching = + + /// @@@PersonRecord|A record for a person's first and last name@@@ + type Person = { + First : string + Last : string + } + + /// @@@EmployeeDu|A Discriminated Union of 3 different kinds of employees@@@ + type Employee = + | Engineer of engineer: Person + | Manager of manager: Person * reports: List + | Executive of executive: Person * reports: List * assistant: Employee + + /// @@@CountEmployees-Line1|Count everyone underneath the employee in the management hierarchy,@@@ + /// @@@CountEmployees-Line2|including the employee.@@@ + let rec countReports(emp : Employee) = + 1 + match emp with + | Engineer(id) -> + 0 + | Manager(id, reports) -> + reports |> List.sumBy countReports + | Executive(id, reports, assistant) -> + (reports |> List.sumBy countReports) + countReports assistant + + + /// @@@FindDave-Line1|Find all managers/executives named "Dave" who do not have any reports.@@@ + /// @@@FindDave-Line2|This uses the 'function' shorthand to as a lambda expression.@@@ + let rec findDaveWithOpenPosition(emps : List) = + emps + |> List.filter(function + | Manager({First = "Dave"}, []) -> true // @@@MatchEmptyList|[] matches an empty list.@@@ + | Executive({First = "Dave"}, [], _) -> true + | _ -> false) // @@@MatchWildcard-Line1|'_' is a wildcard pattern that matches anything.@@@ + // @@@MatchWildCard-Line2|This handles the "or else" case.@@@ + + /// @@@MatchShorthand-Line1|You can also use the shorthand function construct for pattern matching,@@@ + /// @@@MatchShorthand-Line2|which is useful when you're writing functions which make use of Partial Application.@@@ + let private parseHelper f = f >> function + | (true, item) -> Some item + | (false, _) -> None + + let parseDateTimeOffset = parseHelper DateTimeOffset.TryParse + + let result = parseDateTimeOffset "1970-01-01" + match result with + | Some dto -> printfn "It parsed!" + | None -> printfn "It didn't parse!" + + // @@@ParseHelpers|Define some more functions which parse with the helper function.@@@ + let parseInt = parseHelper Int32.TryParse + let parseDouble = parseHelper Double.TryParse + let parseTimeSpan = parseHelper TimeSpan.TryParse + + // @@@ActivePatterns-Line1|Active Patterns are another powerful construct to use with pattern matching.@@@ + // @@@ActivePatterns-Line2|They allow you to partition input data into custom forms, decomposing them at the pattern match call site.@@@ + // + // @@@ActivePatterns-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns@@@ + let (|Int|_|) = parseInt + let (|Double|_|) = parseDouble + let (|Date|_|) = parseDateTimeOffset + let (|TimeSpan|_|) = parseTimeSpan + + /// @@@MatchActivePattern|Pattern Matching via 'function' keyword and Active Patterns often looks like this.@@@ + let printParseResult = function + | Int x -> printfn "%d" x + | Double x -> printfn "%f" x + | Date d -> printfn "%s" (d.ToString()) + | TimeSpan t -> printfn "%s" (t.ToString()) + | _ -> printfn "Nothing was parse-able!" + + // @@@PrintParse|Call the printer with some different values to parse.@@@ + printParseResult "12" + printParseResult "12.045" + printParseResult "12/28/2016" + printParseResult "9:01PM" + printParseResult "banana!" + + +/// @@@Option-Line1|Option values are any kind of value tagged with either 'Some' or 'None'.@@@ +/// @@@Option-Line2|They are used extensively in F# code to represent the cases where many other@@@ +/// @@@Option-Line3|languages would use null references.@@@ +/// +/// @@@Option-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options@@@ +module OptionValues = + + /// @@@ZipCode|First, define a zipcode defined via Single-case Discriminated Union.@@@ + type ZipCode = ZipCode of string + + /// @@@Customer|Next, define a type where the ZipCode is optional.@@@ + type Customer = { ZipCode: ZipCode option } + + /// @@@ShippingCalculator-Line1|Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code,@@@ + /// @@@ShippingCalculator-Line2|given implementations for the 'getState' and 'getShippingZone' abstract methods.@@@ + type ShippingCalculator = + abstract GetState : ZipCode -> string option + abstract GetShippingZone : string -> int + + /// @@@CalcShippingZone-Line1|Next, calculate a shipping zone for a customer using a calculator instance.@@@ + /// @@@CalcShippingZone-Line2|This uses combinators in the Option module to allow a functional pipeline for@@@ + /// @@@CalcShippingZone-Line3|transforming data with Optionals.@@@ + let CustomerShippingZone (calculator: ShippingCalculator, customer: Customer) = + customer.ZipCode + |> Option.bind calculator.GetState + |> Option.map calculator.GetShippingZone + + +/// @@@UnitsOfMeasure-Line1|Units of measure are a way to annotate primitive numeric types in a type-safe way.@@@ +/// @@@UnitsOfMeasure-Line2|You can then perform type-safe arithmetic on these values.@@@ +/// +/// @@@UnitsOfMeasure-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure@@@ +module UnitsOfMeasure = + + /// @@@CommonUnits|First, open a collection of common unit names@@@ + open Microsoft.FSharp.Data.UnitSystems.SI.UnitNames + + /// @@@DefineUnitConstant|Define a unitized constant@@@ + let sampleValue1 = 1600.0 + + /// @@@MileUnit|Next, define a new unit type@@@ + [] + type mile = + /// @@@MileToMeter|Conversion factor mile to meter.@@@ + static member asMeter = 1609.34 + + /// @@@DefineMileConstant|Define a unitized constant@@@ + let sampleValue2 = 500.0 + + /// @@@ComputeMileToMeter|Compute metric-system constant@@@ + let sampleValue3 = sampleValue2 * mile.asMeter + + // @@@PrintUnitsOfMeasure|Values using Units of Measure can be used just like the primitive numeric type for things like printing.@@@ + printfn "After a %f race I would walk %f miles which would be %f meters" sampleValue1 sampleValue2 sampleValue3 + + +/// @@@Classes-Line1|Classes are a way of defining new object types in F#, and support standard Object-oriented constructs.@@@ +/// @@@Classes-Line2|They can have a variety of members (methods, properties, events, etc.)@@@ +/// +/// @@@Classes-Line3|To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes@@@ +/// +/// @@@Classes-Line4|To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members@@@ +module DefiningClasses = + + /// @@@Vector-Line1|A simple two-dimensional Vector class.@@@ + /// + /// @@@Vector-Line2|The class's constructor is on the first line,@@@ + /// @@@Vector-Line3|and takes two arguments: dx and dy, both of type 'double'.@@@ + type Vector2D(dx : double, dy : double) = + + /// @@@ClassInternalField-Line1|This internal field stores the length of the vector, computed when the@@@ + /// @@@ClassInternalField-Line2|object is constructed@@@ + let length = sqrt (dx*dx + dy*dy) + + // @@@ThisKeyword-Line1|'this' specifies a name for the object's self identifier.@@@ + // @@@ThisKeyword-Line2|In instance methods, it must appear before the member name.@@@ + member this.DX = dx + + member this.DY = dy + + member this.Length = length + + /// @@@MemberMethod|This member is a method. The previous members were properties.@@@ + member this.Scale(k) = Vector2D(k * this.DX, k * this.DY) + + /// @@@InstantiateClass|This is how you instantiate the Vector2D class.@@@ + let vector1 = Vector2D(3.0, 4.0) + + /// @@@ScaledVector|Get a new scaled vector object, without modifying the original object.@@@ + let vector2 = vector1.Scale(10.0) + + printfn "Length of vector1: %f\nLength of vector2: %f" vector1.Length vector2.Length + + +/// @@@GenericClasses-Line1|Generic classes allow types to be defined with respect to a set of type parameters.@@@ +/// @@@GenericClasses-Line2|In the following, 'T is the type parameter for the class.@@@ +/// +/// @@@GenericClasses-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/@@@ +module DefiningGenericClasses = + + type StateTracker<'T>(initialElement: 'T) = + + /// @@@InternalField|This internal field store the states in a list.@@@ + let mutable states = [ initialElement ] + + /// @@@AddElement|Add a new element to the list of states.@@@ + member this.UpdateState newState = + states <- newState :: states // @@@MutableAssignment|use the '<-' operator to mutate the value.@@@ + + /// @@@History|Get the entire list of historical states.@@@ + member this.History = states + + /// @@@Current|Get the latest state.@@@ + member this.Current = states.Head + + /// @@@InferredTypeParameter|An 'int' instance of the state tracker class. Note that the type parameter is inferred.@@@ + let tracker = StateTracker 10 + + // @@@AddState|Add a state@@@ + tracker.UpdateState 17 + + +/// @@@Interfaces-Line1|Interfaces are object types with only 'abstract' members.@@@ +/// @@@Interfaces-Line2|Object types and object expressions can implement interfaces.@@@ +/// +/// @@@Interfaces-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces@@@ +module ImplementingInterfaces = + + /// @@@IDisposable|This is a type that implements IDisposable.@@@ + type ReadFile() = + + let file = new System.IO.StreamReader("readme.txt") + + member this.ReadLine() = file.ReadLine() + + // @@@IDisposableImplementation|This is the implementation of IDisposable members.@@@ + interface System.IDisposable with + member this.Dispose() = file.Close() + + + /// @@@IDisposableObjectExpression-Line1|This is an object that implements IDisposable via an Object Expression@@@ + /// @@@IDisposableObjectExpression-Line2|Unlike other languages such as C# or Java, a new type definition is not needed@@@ + /// @@@IDisposableObjectExpression-Line3|to implement an interface.@@@ + let interfaceImplementation = + { new System.IDisposable with + member this.Dispose() = printfn "disposed" } + + +/// @@@Parallel-Line1|The FSharp.Core library defines a range of parallel processing functions. Here@@@ +/// @@@Parallel-Line2|you use some functions for parallel processing over arrays.@@@ +/// +/// @@@Parallel-Line3|To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D@@@ +module ParallelArrayProgramming = + + /// @@@InputArray|First, an array of inputs.@@@ + let oneBigArray = [| 0 .. 100000 |] + + // @@@ExpensiveFunction|Next, define a functions that does some CPU intensive computation.@@@ + let rec computeSomeFunction x = + if x <= 2 then 1 + else computeSomeFunction (x - 1) + computeSomeFunction (x - 2) + + // @@@ParallelMap|Next, do a parallel map over a large input array.@@@ + let computeResults() = + oneBigArray + |> Array.Parallel.map (fun x -> computeSomeFunction (x % 20)) + + // @@@PrintParallel|Next, print the results.@@@ + printfn "Parallel computation results: %A" (computeResults()) + + + +/// @@@Events-Line1|Events are a common idiom for .NET programming, especially with WinForms or WPF applications.@@@ +/// +/// @@@Events-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events@@@ +module Events = + + /// @@@SimpleEvent|First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger).@@@ + let simpleEvent = new Event() + + // @@@AddEventHandler1|Next, add handler to the event.@@@ + simpleEvent.Publish.Add( + fun x -> printfn "this handler was added with Publish.Add: %d" x) + + // @@@TriggerEvent|Next, trigger the event.@@@ + simpleEvent.Trigger(5) + + // @@@EventWithArgs|Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs).@@@ + let eventForDelegateType = new Event() + + // @@@AddEventHandler2|Next, add a handler for this new event.@@@ + eventForDelegateType.Publish.AddHandler( + EventHandler(fun _ _ -> printfn "this handler was added with Publish.AddHandler")) + + // @@@TriggerEventWithArgs|Next, trigger this event (note that sender argument should be set).@@@ + eventForDelegateType.Trigger(null, EventArgs.Empty) + + + +#if COMPILED +module BoilerPlateForForm = + [] + do () + do System.Windows.Forms.Application.Run() +#endif diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate new file mode 100644 index 0000000000..adb7d6e230 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate @@ -0,0 +1,31 @@ + + + + + + + Microsoft.FSharp.Tutorial + FSharp + 4.5 + 1 + true + Tutorial + true + true + + + + Tutorial.fsx + + + + NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + NuGet.VisualStudio.TemplateWizard + + + + + + + + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf new file mode 100644 index 0000000000..6de826791a --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Tato ukázka vás provede elementy jazyka F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Pokud chcete kód provést v nástroji F# Interactive, zvýrazněte oddíl kódu a stiskněte Alt-Enter nebo klikněte pravým tlačítkem myši + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + a vyberte Provést v Interactive. Okno F# Interactive můžete otevřít z nabídky Zobrazit. + + + + For more about F#, see: + Další informace o F# najdete na: + + + + To see this tutorial in documentation form, see: + Na tomto webu najdete tento kurz v podobě dokumentace: + + + + To learn more about applied F# programming, use + K získání dalších informací o použitém programovém kódu F# použijte + + + + To install the Visual F# Power Tools, use + K instalaci Visual F# Power Tools použijte + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + Nástroje --> Rozšíření a aktualizace --> Online a potom hledejte + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Další šablony, které můžete používat s F#, najdete tak, že v sadě Visual Studio vyberete Online šablony, + + + + 'New Project' --> 'Online Templates' + Nový projekt --> Online šablony. + + + + F# supports three kinds of comments: + F# podporuje tři typy komentářů: + + + + 1. Double-slash comments. These are used in most situations. + 1. Komentáře se dvěma lomítky. Ty se používají ve většině situací. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Blokové komentáře ve stylu ML. Ty se moc často nepoužívají. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Komentáře se třemi lomítky. Ty se používají k dokumentaci funkcí, typů a podobně. + + + + They will appear as text when you hover over something which is decorated with these comments. + Když na elementy s těmito komentáři nastavíte ukazatel myši, zobrazí se komentáře jako text. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Podporují se také komentáře XML ve stylu .NET, které umožňují generovat referenční dokumentaci. + + + + and they also allow editors (such as Visual Studio) to extract information from them. + Umožňují také, aby z nich editory (jako například Visual Studio) extrahovaly informace. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Otevírejte obory názvů pomocí klíčového slova open. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Modul je seskupení kódu F#, například hodnot, typů a hodnot funkcí. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Seskupování kódu do modulů pomáhá zachovat související kód pohromadě a vyhnout se v programu konfliktům názvů. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Toto je ukázkové celé číslo. + + + + This is a sample floating point number. + Toto je ukázkové číslo s plovoucí desetinnou čárkou. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Tady se pomocí aritmetiky vypočítalo nové číslo. Číselné typy se převádějí pomocí + + + + functions 'int', 'double' and so on. + funkcí int, double atd. + + + + This is a list of the numbers from 0 to 99. + Toto je seznam čísel od 0 do 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Toto je seznam všech řazených kolekcí členů obsahujících všechna čísla od 0 do 99 a jejich druhé mocniny. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + Další řádek vytiskne seznam, který zahrnuje řazené kolekce členů, s použitím %A pro obecný tisk. + + + + This is a sample integer with a type annotation + Toto je ukázkové celé číslo s anotací typu. + + + + Values in F# are immutable by default. They cannot be changed + Hodnoty v F# jsou ve výchozím nastavení neměnné. Nedají se změnit + + + + in the course of a program's execution unless explicitly marked as mutable. + během provádění programu, pokud nejsou explicitně označené jako měnitelné. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Po navázání hodnoty na název pomocí klíčového slova „let“ se hodnota stane neměnnou. + + + + The second line of code fails to compile because 'number' is immutable and bound. + Druhý řádek kódu nejde zkompilovat, protože proměnná number je neměnná a vázaná. + + + + Re-defining 'number' to be a different value is not allowed in F#. + Předefinování položky number na jinou hodnotu se v jazyce F# nepovoluje. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Změnitelná vazba. Je to nutné, aby bylo možné měnit hodnotu otherNumber. + + + + When mutating a value, use '<-' to assign a new value. + Při změnách hodnoty použijte <- pro přiřazení nové hodnoty. + + + + You could not use '=' here for this purpose since it is used for equality + Znak = tady pro tento účel nemůžete použít, protože se používá pro rovnost + + + + or other contexts such as 'let' or 'module' + nebo jiné kontexty jako let nebo module + + + + Much of F# programming consists of defining functions that transform input data to produce + Velká část programování v F# spočívá v definování funkcí, které transformují vstupní data na + + + + useful results. + užitečné výsledky. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Pomocí klíčového slova „let“ můžete definovat funkci. Tato přebírá celočíselný argument a vrací celé číslo. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Závorky jsou pro argumenty funkce nepovinné – s výjimkou použití anotace explicitního typu. + + + + Apply the function, naming the function return result using 'let'. + Použití funkce a pojmenování výsledku vrácení funkce pomocí klíčového slova let + + + + The variable type is inferred from the function return type. + Typ proměnné je odvozený z návratového typu funkce. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Tento řádek používá %d k vytištění výsledku jako celého čísla. Je to typově bezpečné. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Pokud by result1 nebyl typu int, pak by se kompilace řádku nezdařila. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + V případě potřeby anotujte typ názvu parametru pomocí (argument:typ). Závorky jsou povinné. + + + + Conditionals use if/then/elid/elif/else. + Podmíněné výrazy používají příkazy if, then, elid, elif, else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Všimněte si, že F# používá syntaxi rozpoznávající odsazení pomocí mezer – je to podobné jako u jazyků, jako je Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Tento řádek používá %f k vytištění výsledku jako hodnoty s plovoucí desetinnou čárkou. Stejně jako u výše uvedeného parametru %d je to typově bezpečné. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Logické hodnoty představují základní datové typy v jazyce F#. Tady je několik příkladů logických hodnot a podmíněné logiky. + + + + To learn more, see: + Další informace: + + + + and + a + + + + Booleans values are 'true' and 'false'. + Logické hodnoty jsou true a false. + + + + Operators on booleans are 'not', '&&' and '||'. + Operátory u logických hodnot jsou not, && a ||. + + + + This line uses '%b'to print a boolean value. This is type-safe. + Tento řádek používá %b k vytištění logické hodnoty. Je to typově bezpečné. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Řetězce představují základní datové typy v jazyce F#. Tady je několik příkladů řetězců a základní manipulace s nimi. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Pro řetězce se používají dvojité uvozovky. + + + + Strings can also use @ to create a verbatim string literal. + V řetězcích je také možné použít @ k vytvoření řetězcového literálu verbatim. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Tím se budou ignorovat řídicí znaky jako \, \n, \t apod. + + + + String literals can also use triple-quotes. + Řetězcové literály můžou používat také trojité uvozovky. + + + + String concatenation is normally done with the '+' operator. + Zřetězení se obvykle provádí operátorem +. + + + + This line uses '%s' to print a string value. This is type-safe. + Tento řádek používá %s k vytištění řetězcové hodnoty. Je to typově bezpečné. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Podřetězce používají notaci indexeru. Tento řádek extrahuje prvních 7 znaků jako podřetězec. + + + + Note that like many languages, Strings are zero-indexed in F#. + Všimněte si, že jako v mnoha jiných jazycích mají řetězce v jazyce F# nulový index. + + + + Tuples are simple combinations of data values into a combined value. + Řazená kolekce členů představuje jedinou hodnotu vytvořenou jednoduchým zkombinováním hodnot dat. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Jednoduchá řazená kolekce členů v podobě celých čísel. + + + + A function that swaps the order of two values in a tuple. + Funkce, která zamění pořadí dvou hodnot v řazené kolekci členů + + + + F# Type Inference will automatically generalize the function to have a generic type, + Odvození typu proměnné v jazyce F# automaticky generalizuje funkci tak, aby byla obecného typu, + + + + meaning that it will work with any type. + což znamená, že bude fungovat s jakýmkoli typem. + + + + A tuple consisting of an integer, a string, + Řazená kolekce členů skládající se z celého čísla, řetězce + + + + and a double-precision floating point number. + a čísla s plovoucí desetinnou čárkou a dvojitou přesností + + + + A simple tuple of integers with a type annotation. + Jednoduchá řazená kolekce členů celých čísel s anotací typu + + + + Type annotations for tuples use the * symbol to separate elements + Anotace typů pro řazené kolekce členů používají k oddělování elementů symbol *. + + + + Tuples are normally objects, but they can also be represented as structs. + Řazené kolekce členů jsou obvykle objekty, ale můžou být vyjádřeny i jako struktury. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Ty zcela spolupracují se strukturami v jazycích C# a Visual Basic .NET. Platí ale, že + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + řazené kolekce členů představující struktury nejsou implicitně převeditelné na řazené kolekce členů představující objekty (často označované jako řazené kolekce členů odkazů). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + Kompilace druhého řádku uvedeného níže se z tohoto důvodu nezdaří. Odkomentujte ho a podívejte se, co se stane. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Mezi řazenými kolekcemi členů představujícími struktury a řazenými kolekcemi členů odkazů nemůžete provést implicitní převod, + + + + you can explicitly convert via pattern matching, as demonstrated below. + ale můžete převod provést explicitně přes porovnávání vzorů, jak je znázorněno níže. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Operátory kanálu (|>, <| atd.) a operátory složení (>>, <<) v jazyce F# + + + + are used extensively when processing data. These operators are themselves functions + se při zpracovávání dat používají ve velkém měřítku. Tyto operátory představují samy o sobě funkce, + + + + which make use of Partial Application. + které využívají částečné použití argumentů. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Další informace o těchto operátorech: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Další informace o částečném použití argumentů: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Umocní hodnotu na druhou. + + + + Adds 1 to a value. + Přičte 1 k hodnotě. + + + + Tests if an integer value is odd via modulo. + Otestuje, jestli je celočíselná hodnota lichá na základě zbytku po dělení. + + + + A list of 5 numbers. More on lists later. + Seznam 5 čísel. Více o seznamech později. + + + + Given a list of integers, it filters out the even numbers, + V daném seznamu celých čísel odfiltruje sudá čísla, + + + + squares the resulting odds, and adds 1 to the squared odds. + umocní výsledná lichá čísla na druhou a přičte 1 k lichým číslům umocněným na druhou. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Kratší způsob, jak napsat squareOddValuesAndAddOne, je vnořit jednotlivé + + + + sub-result into the function calls themselves. + dílčí výsledky přímo do volání funkcí. + + + + This makes the function much shorter, but it's difficult to see the + Díky tomu může být funkce mnohem kratší, ale je obtížné sledovat + + + + order in which the data is processed. + pořadí, v jakém se data zpracovávají. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Preferovaným způsobem, jak napsat squareOddValuesAndAddOne, je použití operátorů kanálu v jazyce F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + To vám umožní vyhnout se vytváření mezivýsledků, ale je to mnohem čitelnější + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + než vnoření volání funkcí, jak je vidět v squareOddValuesAndAddOneNested. + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + Můžete zkrátit squareOddValuesAndAddOnePipeline přesunutím druhého volání List.map + + + + into the first, using a Lambda Function. + do prvního, pomocí funkce lambda. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Všimněte si, že kanály se používají i ve funkci lambda. Operátory kanálu v jazyce F# + + + + can be used for single values as well. This makes them very powerful for processing data. + se dají použít i pro jednotlivé hodnoty. Díky tomu jsou velmi efektivní při zpracovávání dat. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + A konečně, můžete eliminovat nutnost explicitně převzít values jako parametr pomocí >> + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + s cílem sestavit dvě základní operace: odfiltrování sudých čísel a následné umocnění na druhou a přičtení jedné. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Obdobně není nutná část výrazu lambda „fun x -> ...“, protože x se jednoduše + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + v tomto oboru definuje tak, aby ho bylo možné předat jako funkční kanál. Proto je tam >> možné použít + + + + there as well. + také. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + Výsledek squareOddValuesAndAddOneComposition je sám o sobě další funkcí, která přebírá + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + jako vstup seznam celých čísel. Pokud provedete squareOddValuesAndAddOneComposition se seznamem + + + + of integers, you'll notice that it produces the same results as previous functions. + celých čísel, všimnete si, že dává stejné výsledky jako předchozí funkce. + + + + This is using what is known as function composition. This is possible because functions in F# + Označuje se to jako složení funkcí. Je to možné, protože funkce v jazyce F# + + + + use Partial Application and the input and output types of each data processing operation match + používají částečné použití argumentů a vstupní a výstupní typy každé operace zpracování dat odpovídají + + + + the signatures of the functions we're using. + signaturám funkcí, které používáme. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Seznamy jsou uspořádané, neměnné a jednorázově propojené. Velmi dynamicky se vyhodnocují. + + + + This module shows various ways to generate lists and process lists with some functions + Tento modul zobrazuje různé způsoby, jak generovat seznamy a jak je zpracovat pomocí některých funkcí + + + + in the 'List' module in the F# Core Library. + v modulu List v knihovně F# Core. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Seznamy se definují pomocí syntaxe [ ... ]. Toto je prázdný seznam. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Toto je seznam se 3 elementy. K oddělení prvků na stejném řádku se používá středník (;). + + + + You can also separate elements by placing them on their own lines. + Elementy můžete oddělit i jejich umístěním na samostatné řádky. + + + + This is a list of integers from 1 to 1000 + Toto je seznam celých čísel od 1 do 1000 + + + + Lists can also be generated by computations. This is a list containing + Seznamy je možné generovat pomocí výpočtů. Toto je seznam obsahující + + + + all the days of the year. + všechny dny v roce. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Vytiskněte prvních 5 elementů daysList pomocí List.take. + + + + Computations can include conditionals. This is a list containing the tuples + Výpočty můžou obsahovat podmíněné výrazy. Toto je seznam obsahující řazené kolekce členů + + + + which are the coordinates of the black squares on a chess board. + což jsou souřadnice černých polí na šachovnici. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Seznamy se dají transformovat pomocí souboru List.map a dalších funkčních programových kombinátorů. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Tato definice vytvoří nový seznam vypočítáním druhých mocnin hodnot v seznamu numberList pomocí kanálu + + + + operator to pass an argument to List.map. + operátor pro předání argumentu do souboru List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Existuje mnoho dalších kombinací seznamů. Následující kód vypočítá součet druhých mocnin + + + + numbers divisible by 3. + čísel dělitelných 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Pole jsou měnitelné kolekce s pevně stanovenou velikostí, které obsahují elementy stejného typu. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + I když se podobají seznamům (podporují výčet a mají podobné kombinátory pro zpracování dat), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + jsou obecně rychlejší a podporují rychlý náhodný přístup. Nevýhodou je nižší zabezpečení, protože je možné je měnit. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Toto je prázdné pole. Všimněte si, že syntaxe je podobná seznamům, ale používá se [| ... |]. + + + + Arrays are specified using the same range of constructs as lists. + Pole jsou definovaná pomocí stejného rozsahu konstruktorů jako seznamy. + + + + This is an array of numbers from 1 to 1000. + Toto je pole čísel od 1 do 1000. + + + + This is an array containing only the words "hello" and "world". + Toto je pole obsahující pouze slova hello a world. + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Toto je pole inicializované indexem, které obsahuje sudá čísla od 0 do 2000. + + + + Sub-arrays are extracted using slicing notation. + Dílčí pole se extrahují pomocí slicingové notace. + + + + You can loop over arrays and lists using 'for' loops. + Přes pole a seznamy se můžete přesunovat pomocí smyček for. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Můžete upravit obsah elementu pole pomocí operátoru přiřazení s šipkou doleva. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Další informace o tomto operátoru: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Pole můžete transformovat pomocí Array.map a dalších funkčních programových operací. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + Následující kód vypočítá součet délek slov, která začínají na „h“. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Sekvence jsou logické řady elementů, které jsou všechny stejného typu. Jedná se o obecnější typ než seznamy a pole. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Sekvence se vyhodnocují na vyžádání a při každé iteraci se vyhodnocují znovu. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Sekvence F# je alias pro .NET System.Collections.Generic.IEnumerable<'T>. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Funkce na zpracování sekvencí je možné použít také na seznamy a pole. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Toto je prázdná sekvence. + + + + This a sequence of values. + Toto je sekvence hodnot. + + + + This is an on-demand sequence from 1 to 1000. + Toto je sekvence na vyžádání od 1 do 1000. + + + + This is a sequence producing the words "hello" and "world" + Toto je sekvence, která vrátí slova hello a world + + + + This sequence producing the even numbers up to 2000. + Tato sekvence vrátí sudá čísla až do 2000. + + + + This is an infinite sequence which is a random walk. + Toto je nekonečná sekvence, která je náhodnou funkcí walk. + + + + This example uses yield! to return each element of a subsequence. + Tento příklad vrací pomocí příkazu yield! jednotlivé elementy dílčí sekvence. + + + + This example shows the first 100 elements of the random walk. + Tento příklad ukazuje prvních 100 elementů náhodné funkce walk. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Rekurzivní funkce můžou volat samy sebe. V F# jsou všechny funkce rekurzivní + + + + when declared using 'let rec'. + při deklarování pomocí let rec. + + + + Recursion is the preferred way to process sequences or collections in F#. + Rekurze je preferovaný způsob zpracování sekvencí nebo kolekcí v jazyce F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Tento příklad ukazuje rekurzivní funkci, která vypočítá faktoriál + + + + integer. It uses 'let rec' to define a recursive function. + integer. Pomocí let rec se definuje rekurzivní funkce. + + + + Computes the greatest common factor of two integers. + Vypočítá největšího společného dělitele dvou celých čísel. + + + + Since all of the recursive calls are tail calls, + Vzhledem k tomu, že všechna rekurzivní volání jsou volání funkce Tail, + + + + the compiler will turn the function into a loop, + kompilátor změní funkci na smyčku, + + + + which improves performance and reduces memory consumption. + což zvyšuje výkon a snižuje spotřebu paměti. + + + + This example computes the sum of a list of integers using recursion. + Tento příklad zjistí součet seznamu celých čísel pomocí rekurze. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + Tím se funkce Tail sumList stane rekurzivní, a to s použitím pomocné funkce s akumulátorem výsledků. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Tím se vyvolá rekurzivní pomocná funkce Tail, poskytující 0 jako zdrojový akumulátor. + + + + An approach like this is common in F#. + Takový postup je v jazyce F# běžný. + + + + Records are an aggregate of named values, with optional members (such as methods). + Záznamy jsou agregátem pojmenovaných hodnot s volitelnými členy (jako jsou metody). + + + + They are immutable and have structural equality semantics. + Jsou neměnné a mají sémantiku se strukturální rovností. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Tento příklad ukazuje, jak definovat nový typ záznamu. + + + + This example shows how to instantiate a record type. + Tento příklad ukazuje, jak vytvořit instanci typu záznamu. + + + + You can also do this on the same line with ';' separators. + Můžete to udělat i na stejném řádku se středníky (;) jako oddělovači. + + + + This example shows how to use "copy-and-update" on record values. It creates + Tento příklad ukazuje, jak použít copy-and-update pro hodnoty záznamu. Vytvoří + + + + a new record value that is a copy of contact1, but has different values for + hodnotu nového záznamu, která je kopií záznamu contact1, ale má jiné hodnoty pro + + + + the 'Phone' and 'Verified' fields. + pole Telefon a Ověřeno. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Tento příklad ukazuje, jak napsat funkci, která zpracuje hodnotu záznamu. + + + + It converts a 'ContactCard' object to a string. + Převádí objekt ContactCard na řetězec. + + + + This is an example of a Record with a member. + Toto je příklad záznamu se členem. + + + + Members can implement object-oriented members. + Členové můžou implementovat objektově orientované členy. + + + + Members are accessed via the '.' operator on an instantiated type. + Ke členům se přistupuje prostřednictvím operátoru „.“ u typu tvořícího instanci. + + + + Records can also be represented as structs via the 'Struct' attribute. + Záznamy můžou být vyjádřeny i jako struktury prostřednictvím atributu Struct. + + + + This is helpful in situations where the performance of structs outweighs + To je užitečné v situacích, kdy má výkon struktur větší váhu než + + + + the flexibility of reference types. + flexibilita odkazových typů. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Rozlišovaná sjednocení (zkratka: DU) jsou hodnoty, které můžou představovat celou řadu pojmenovaných forem nebo případů. + + + + Data stored in DUs can be one of several distinct values. + Data uložená v DU můžou představovat jednu z několika různých hodnot. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + Následující příklad představuje barvu hrací karty. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Rozlišované sjednocení může také představovat hodnotu hrací karty. + + + + Represents the rank of cards 2 .. 10 + Představuje hodnotu karet 2 .. 10. + + + + Discriminated Unions can also implement object-oriented members. + Rozlišovaná sjednocení můžou také implementovat objektově orientované členy. + + + + This is a record type that combines a Suit and a Rank. + Toto je typ záznamu, který kombinuje barvu a hodnotu hrací karty. + + + + It's common to use both Records and Disciminated Unions when representing data. + Při vyjadřování dat se běžně používají záznamy i rozlišovaná sjednocení. + + + + This computes a list representing all the cards in the deck. + Tady se vypočítá seznam představující všechny karty z balíčku. + + + + This example converts a 'Card' object to a string. + Tento příklad převede objekt Card na řetězec. + + + + This example prints all the cards in a playing deck. + Tento příklad vytiskne všechny karty v hracím balíčku. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Rozlišovaná sjednocení s jedním případem se často používají pro modelování domén. Tím můžete získat dodatečnou bezpečnost typů + + + + over primitive types such as strings and ints. + oproti primitivním typům, jako jsou řetězce a celá čísla. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Rozlišovaná sjednocení s jedním případem nejde implicitně převést na typ nebo z typu, který obalují. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Například funkce, která přebírá adresu, nemůže jako vstup převzít řetězec + + + + or vive/versa. + a naopak. + + + + You can easily instantiate a single-case DU as follows. + Instanci rozlišovaného sjednocení s jedním případem můžete snadno vytvořit následujícím způsobem. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Pokud danou hodnotu potřebujete, můžete základní hodnotu rozbalit pomocí jednoduché funkce. + + + + Printing single-case DUs is simple with unwrapping functions. + Tisk rozlišovaných sjednocení s jedním případem je jednoduchý s použitím rozbalovacích funkcí. + + + + Disciminated Unions also support recursive definitions. + Rozlišovaná sjednocení podporují i rekurzivní definice. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Toto představuje binární vyhledávací strom, přičemž jeden případ je prázdný strom + + + + and the other being a Node with a value and two subtrees. + a druhý je uzel s hodnotou a dvěma podstromy. + + + + Check if an item exists in the binary search tree. + Zkontroluje, jestli položka existuje v binárním vyhledávacím stromu. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Rekurzivně vyhledává porovnáváním vzorů. Vrátí hodnotu true, pokud existuje; v opačném případě false. + + + + Check the left subtree. + Zkontroluje levý podstrom. + + + + Check the right subtree. + Zkontroluje pravý podstrom. + + + + Inserts an item in the Binary Search Tree. + Vloží položku do binárního vyhledávacího stromu. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Najde místo pro rekurzivní vložení pomocí porovnávání vzorů a pak vloží nový uzel. + + + + If the item is already present, it does not insert anything. + Pokud je už položka přítomna, nevloží nic. + + + + No need to insert, it already exists; return the node. + Nemusí se vkládat, už existuje; vrátí se uzel. + + + + Call into left subtree. + Provede volání do levého podstromu. + + + + Call into right subtree. + Provede volání do pravého podstromu. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Rozlišovaná sjednocení můžou být vyjádřena i jako struktury prostřednictvím atributu Struct. + + + + This is helpful in situations where the performance of structs outweighs + To je užitečné v situacích, kdy má výkon struktur větší váhu než + + + + the flexibility of reference types. + flexibilita odkazových typů. + + + + However, there are two important things to know when doing this: + Při tomto postupu je ale třeba vědět dvě důležité věci: + + + + 1. A struct DU cannot be recursively-defined. + 1. Rozlišované sjednocení typu struktura nemůže být definované rekurzivně. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Rozlišované sjednocení typu struktura musí mít jedinečné názvy pro každý ze svých případů. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Porovnávání vzorů je funkce jazyka F#, která umožňuje používat vzory, + + + + which are a way to compare data with a logical structure or structures, + což představuje způsob, jak porovnávat data s logickou strukturou nebo strukturami, + + + + decompose data into constituent parts, or extract information from data in various ways. + jak rozložit data na základní části nebo extrahovat informace z dat různými způsoby. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Odesílání pak můžete provádět na základě vzoru v rámci porovnávání vzorů. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Záznam pro jméno a příjmení daného člověka + + + + A Discriminated Union of 3 different kinds of employees + Rozlišované sjednocení se 3 různými typy zaměstnanců + + + + Count everyone underneath the employee in the management hierarchy, + Spočítají se všichni zaměstnanci pod daným zaměstnancem v hierarchii řízení, + + + + including the employee. + včetně tohoto zaměstnance. + + + + Find all managers/executives named "Dave" who do not have any reports. + Vyhledá všechny nadřízené/výkonné pracovníky se jménem Dave, kteří nemají žádné podřízené. + + + + This uses the 'function' shorthand to as a lambda expression. + Tady se používá zkrácený název function jako výraz lambda. + + + + [] matches an empty list. + [] odpovídá prázdnému seznamu. + + + + '_' is a wildcard pattern that matches anything. + „_“ je zástupný vzor, kterému odpovídá úplně všechno. + + + + This handles the "or else" case. + Toto řeší případ „or else“ + + + + You can also use the shorthand function construct for pattern matching, + Můžete také použít zkrácenou konstrukci function pro porovnávání vzorů, + + + + which is useful when you're writing functions which make use of Partial Application. + což je užitečné při psaní funkcí, které využívají částečné použití argumentů. + + + + Define some more functions which parse with the helper function. + Definujte pár dalších funkcí, které se analyzují s pomocnou funkcí. + + + + Active Patterns are another powerful construct to use with pattern matching. + Aktivní vzory představují další efektivní konstrukci pro použití s porovnáváním vzorů. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Umožňují rozdělit vstupní data do vlastních forem, přičemž se rozkládají v místě volání porovnávání vzorů. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + Porovnávání vzorů přes klíčové slovo function a aktivní vzory často vypadá takto. + + + + Call the printer with some different values to parse. + Volání tiskárny s nějakými jinými hodnotami k parsování + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Hodnotami parametru můžou být hodnoty jakéhokoliv typu s označením Some (Nějaké) nebo None (Žádné). + + + + They are used extensively in F# code to represent the cases where many other + Používají se často v kódu F#, kde reprezentují případy, ve kterých by se v řadě jiných + + + + languages would use null references. + jazyků používaly odkazy null. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + Nejprve definujte PSČ prostřednictvím rozlišovaného sjednocení s jedním případem. + + + + Next, define a type where the ZipCode is optional. + Dále definujte typ, kde je PSČ volitelné. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Potom definujte typ rozhraní, který bude představovat objekt pro výpočet expediční oblasti pro PSČ zákazníka + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + se zohledněním implementací pro abstraktní metody getState a getShippingZone. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Dále vypočítejte expediční oblast pro zákazníka pomocí instance kalkulačky. + + + + This uses combinators in the Option module to allow a functional pipeline for + Tady se používají kombinátory v modulu Option, pomocí kterých se povoluje funkční kanál pro + + + + transforming data with Optionals. + transformaci dat s volitelnými hodnotami. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Měrné jednotky jsou způsob, jak anotovat primitivní číselné typy typově bezpečnou metodou. + + + + You can then perform type-safe arithmetic on these values. + Pak u těchto hodnot můžete provádět typově bezpečnou aritmetiku. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Nejdříve otevřete kolekci běžných názvů jednotek. + + + + Define a unitized constant + Definovat unifikovanou konstantu + + + + Next, define a new unit type + Potom definujte nový typ jednotky + + + + Conversion factor mile to meter. + Přepočtový koeficient pro přepočet mílí na metry + + + + Define a unitized constant + Definovat unifikovanou konstantu + + + + Compute metric-system constant + Vypočítat konstantu v metrickém systému + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Hodnoty s měrnými jednotkami je možné používat stejně jako primitivní číselný typ pro operace, jako je tisk. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Třídy představují způsob definice nových objektových typů v jazyce F# a podporují standardní objektově orientované konstrukce. + + + + They can have a variety of members (methods, properties, events, etc.) + Můžou mít celou řadu členů (metody, vlastnosti, události atd.). + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Další informace o třídách: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Další informace o členech: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Jednoduchá dvojrozměrná vektorová třída. + + + + The class's constructor is on the first line, + Konstruktor třídy je na prvním řádku + + + + and takes two arguments: dx and dy, both of type 'double'. + a přebírá dva argumenty: dx a dy, oba typu double. + + + + This internal field stores the length of the vector, computed when the + Toto interní pole ukládá délku vektoru vypočítanou při + + + + object is constructed + zkonstruování objektu + + + + 'this' specifies a name for the object's self identifier. + this určuje název identifikátoru samotného objektu. + + + + In instance methods, it must appear before the member name. + V metodách instancí se musí objevovat před názvem člena. + + + + This member is a method. The previous members were properties. + Tento člen je metoda. Předchozí členové představují vlastnosti. + + + + This is how you instantiate the Vector2D class. + Toto je způsob, jak vytvořit instanci třídy Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Získá nový škálovaný vektorový objekt, aniž by se změnil původní objekt. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Obecné třídy umožňují definování typů s ohledem na sadu parametrů typu. + + + + In the following, 'T is the type parameter for the class. + V následujícím příkladu „T“ představuje parametr typu pro třídu. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Toto interní pole ukládá stavy v seznamu. + + + + Add a new element to the list of states. + Přidá nový element do seznamu stavů. + + + + use the '<-' operator to mutate the value. + Použije operátor <- ke změně (mutaci) hodnoty. + + + + Get the entire list of historical states. + Získá celý seznam historických stavů. + + + + Get the latest state. + Získá nejnovější stav. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Instance int třídy pro sledování stavů. Poznámka: Parametr typu je odvozený. + + + + Add a state + Přidat stav + + + + Interfaces are object types with only 'abstract' members. + Rozhraní jsou typy objektů pouze s členy abstract. + + + + Object types and object expressions can implement interfaces. + Objektové typy a výrazy můžou implementovat rozhraní. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Toto je typ, který implementuje rozhraní IDisposable. + + + + This is the implementation of IDisposable members. + Toto je implementace členů IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + Toto je objekt, který implementuje IDisposable pomocí výrazu objektu. + + + + Unlike other languages such as C# or Java, a new type definition is not needed + Na rozdíl od jiných jazyků, jako jsou C# nebo Java, není nutná nová definice typu + + + + to implement an interface. + pro implementaci rozhraní. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + Knihovna FSharp.Core definuje rozsah funkcí paralelního zpracování. Tady + + + + you use some functions for parallel processing over arrays. + použijete některé funkce pro paralelní zpracování polí. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Další informace: https://msdn.microsoft.com/cs-cz/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Nejdříve pole vstupů. + + + + Next, define a functions that does some CPU intensive computation. + Dále definujte funkci, která bude provádět výpočty náročné na procesor. + + + + Next, do a parallel map over a large input array. + Dále proveďte paralelní mapování přes velké vstupní pole. + + + + Next, print the results. + Potom vytiskněte výsledky. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Události jsou běžné základní struktury programového kódu .NET, zejména s aplikacemi WinForms nebo WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Nejdříve vytvořte instanci objektu Event, který se bude skládat z bodu odběru (event.Publish) a aktivační události (event.Trigger). + + + + Next, add handler to the event. + Potom přidejte obslužnou rutinu pro událost. + + + + Next, trigger the event. + Potom spusťte událost. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Potom vytvořte instanci objektu Event podle standardní konvence .NET: (sender, EventArgs). + + + + Next, add a handler for this new event. + Dále přidejte obslužnou rutinu pro tuto novou událost. + + + + Next, trigger this event (note that sender argument should be set). + Potom spusťte tuto událost (poznámka: musí být nastavený argument odesílatele). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf new file mode 100644 index 0000000000..0908855049 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Dieses Beispiel zeigt Ihnen verschiedene Elemente der F#-Programmiersprache. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Markieren Sie zum Ausführen des Codes in F# Interactive einen Codeabschnitt, und drücken Sie dann entweder ALT+EINGABETASTE oder klicken Sie mit der rechten Maustaste + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + und wählen Sie "In Interactive ausführen" aus. Sie können das F# Interactive-Fenster über das Menü "Ansicht" öffnen. + + + + For more about F#, see: + Weitere Informationen zu F# finden Sie unter: + + + + To see this tutorial in documentation form, see: + Dieses Tutorial ist auch als Dokumentation verfügbar. Siehe hierzu: + + + + To learn more about applied F# programming, use + Verwenden Sie Folgendes, um weitere Informationen zur praktischen F#-Programmierung zu erhalten: + + + + To install the Visual F# Power Tools, use + Verwenden Sie Folgendes, um die Visual F# Power Tools zu installieren: + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + "Extras" > "Erweiterungen und Updates" > "Online", und suchen Sie nach + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Weitere Vorlagen zum Verwenden mit F# finden Sie in Visual Studio unter "Onlinevorlagen", + + + + 'New Project' --> 'Online Templates' + "Neue Projekte" > "Onlinevorlagen". + + + + F# supports three kinds of comments: + F# unterstützt drei Arten von Kommentaren: + + + + 1. Double-slash comments. These are used in most situations. + 1. Kommentare mit doppeltem Schrägstrich. Diese werden in den meisten Situationen verwendet. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Blockkommentare im ML-Stil. Diese werden nicht sehr häufig verwendet. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Kommentare mit drei Schrägstrichen. Diese werden zum Dokumentieren von Funktionen, Typen usw. verwendet. + + + + They will appear as text when you hover over something which is decorated with these comments. + Sie erscheinen als Text, wenn Sie den Mauszeiger über einem Element positionieren, das mit diesen Kommentaren versehen ist. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Sie bieten außerdem Unterstützung für XML-Kommentare im .NET-Stil zum Generieren von Referenzdokumentation, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + und sie ermöglichen das Extrahieren von Informationen über Editoren (z.B. Visual Studio). + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/xml-documentation. + + + + Open namespaces using the 'open' keyword. + Öffnen Sie Namespaces mit dem Schlüsselwort "open". + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Weitere Informationen finden Sie hier: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword. + + + + A module is a grouping of F# code, such as values, types, and function values. + Ein Modul ist eine Gruppierung von F#-Code, z.B. Werte, Typen und Funktionswerte. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Die Codegruppierung in Modulen ermöglicht das Zusammenfassen von zueinander in Beziehung stehendem Code sowie das Vermeiden von Namenskonflikten in Ihrem Programm. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/modules. + + + + This is a sample integer. + Dies ist ein Beispiel für eine Ganzzahl. + + + + This is a sample floating point number. + Dies ist ein Beispiel für eine Gleitkommazahl. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Hier wird mithilfe einer arithmetischen Operation eine neue Zahl berechnet. Numerische Typen werden unter Verwendung der + + + + functions 'int', 'double' and so on. + Funktionen "int", "double" usw. konvertiert. + + + + This is a list of the numbers from 0 to 99. + Dies ist eine Liste der Zahlen von 0 bis 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Dies ist eine Liste aller Tupel, die alle Zahlen von 0 bis 99 sowie Ihre Quadratzahlen enthalten. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + Die nächste Zeile gibt eine Liste mit Tupeln aus, wobei "%A" für die generische Ausgabe verwendet wird. + + + + This is a sample integer with a type annotation + Dies ist ein Beispiel für eine ganze Zahl mit einer Typanmerkung. + + + + Values in F# are immutable by default. They cannot be changed + Werte in F# sind standardmäßig unveränderlich. Sie können im Verlauf + + + + in the course of a program's execution unless explicitly marked as mutable. + der Ausführung eines Programms nicht geändert werden – es sei denn, sie sind explizit als änderbar gekennzeichnet. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Wenn ein Wert mithilfe von "let" an einen Namen gebunden wird, ist er unveränderlich. + + + + The second line of code fails to compile because 'number' is immutable and bound. + Die zweite Codezeile kann nicht kompiliert werden, da "number" unveränderlich und gebunden ist. + + + + Re-defining 'number' to be a different value is not allowed in F#. + "number" darf in F# nicht als ein anderer Wert neu definiert werden. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Eine veränderliche Bindung. Dies ist erforderlich, damit der Wert von "otherNumber" verändert werden kann. + + + + When mutating a value, use '<-' to assign a new value. + Wenn Sie einen Wert verändern, weisen Sie mithilfe von "<-" einen neuen Wert zu. + + + + You could not use '=' here for this purpose since it is used for equality + Sie können "=" hier nicht verwenden, da es für Gleichheit verwendet wird. + + + + or other contexts such as 'let' or 'module' + oder andere Kontexte wie "let" oder "module" + + + + Much of F# programming consists of defining functions that transform input data to produce + Bei der F#-Programmierung werden größtenteils Funktionen definiert, die Eingabedaten in hilfreiche + + + + useful results. + Ergebnisse umwandelt. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Verwenden Sie "let", um eine Funktion zu definieren. Diese akzeptiert ein Integer-Argument und gibt einen Integer zurück. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Klammern sind für Funktionsargumente optional, außer wenn Sie eine explizite Typanmerkung verwenden. + + + + Apply the function, naming the function return result using 'let'. + Die Funktion anwenden, und das Rückgabeergebnis der Funktion mithilfe von "let" benennen. + + + + The variable type is inferred from the function return type. + Der Variablentyp wird vom Rückgabetyp der Funktion abgeleitet. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Diese Zeile verwendet "%d", um das Ergebnis als Integer zu drucken. Dies ist typsicher. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Wenn "result1" nicht vom Typ "int" wäre, käme es bei der Kompilierung der Zeile zu einem Fehler. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + Blenden Sie bei Bedarf den Typ eines Parameternamens mithilfe von "(argument:type)" ein. Klammern sind erforderlich. + + + + Conditionals use if/then/elid/elif/else. + Für Bedingungen wird Folgendes verwendet: if/then/elid/elif/else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Bei der Syntax von F# werden ebenso wie bei Sprachen wie Python leerzeichenbasierte Einzüge beachtet. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Diese Zeile verwendet "%f", um das Ergebnis als float-Eigenschaft zu drucken. Wie auch zuvor bei "%d" ist dies typsicher. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Boolesche Werte sind grundlegende Datentypen in F#. Hier finden Sie einige Beispiele für boolesche Werte und Bedingungen. + + + + To learn more, see: + Weitere Informationen finden Sie unter: + + + + and + Und + + + + Booleans values are 'true' and 'false'. + Boolesche Werte sind "true" und "false". + + + + Operators on booleans are 'not', '&&' and '||'. + Operatoren für boolesche Werte sind "not", "&&" und "||". + + + + This line uses '%b'to print a boolean value. This is type-safe. + Diese Zeile verwendet "%b" zum Drucken eines booleschen Werts. Dies ist typsicher. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Zeichenfolgen sind grundlegende Datentypen in F#. Hier finden Sie einige Beispiele für Zeichenfolgen und Zeichenfolgenmanipulationen. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Für Zeichenfolgen werden doppelte Anführungszeichen verwendet. + + + + Strings can also use @ to create a verbatim string literal. + Mit "@" lassen sich ausführliche Zeichenfolgenliterale erstellen. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Dadurch werden Escapezeichen wie "\", "\n", "\t" usw. ignoriert. + + + + String literals can also use triple-quotes. + Für Zeichenfolgen können auch dreifache Anführungszeichen verwendet werden. + + + + String concatenation is normally done with the '+' operator. + Die Verkettung von Zeichenfolgen erfolgt in der Regel mit dem Operator "+". + + + + This line uses '%s' to print a string value. This is type-safe. + Diese Zeile verwendet "%s" zum Drucken eines Zeichenfolgewerts. Dies ist typsicher. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Für Teilzeichenfolgen wird die Indexernotation verwendet. Diese Zeile extrahiert die ersten sieben Zeichen als Teilzeichenfolge. + + + + Note that like many languages, Strings are zero-indexed in F#. + Im Gegensatz zu den meisten anderen Sprachen sind Zeichenfolgen in F# nullindiziert. + + + + Tuples are simple combinations of data values into a combined value. + Tupel sind einfache Datenwertkombinationen. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Ein einfaches Tupel aus Integerwerten. + + + + A function that swaps the order of two values in a tuple. + Eine Funktion, die die Reihenfolge von zwei Werten in einem Tupel austauscht. + + + + F# Type Inference will automatically generalize the function to have a generic type, + Der F#-Typrückschluss generalisiert die Funktion automatisch und erstellt einen generischen Typ, + + + + meaning that it will work with any type. + d. h. er funktioniert mit jedem Typ. + + + + A tuple consisting of an integer, a string, + Ein Tupel aus einem Integer, einer Zeichenfolge + + + + and a double-precision floating point number. + und einer Gleitkommazahl mit doppelter Genauigkeit. + + + + A simple tuple of integers with a type annotation. + Ein einfaches Tupel aus Integerwerten mit einer Typanmerkung. + + + + Type annotations for tuples use the * symbol to separate elements + Typanmerkungen für Tupel trennen Elemente durch das *-Symbol. + + + + Tuples are normally objects, but they can also be represented as structs. + Tupel sind normalerweise Objekte, sie können aber auch als Strukturen dargestellt werden. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Sie arbeiten mit Strukturen in C# und Visual Basic.Net vollständig zusammen. + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + Strukturtupel sind jedoch nicht implizit mit Objekttupeln (häufig als Referenztupel bezeichnet) konvertierbar. + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + Die unten angezeigte zweite Zeile kann aus diesem Grund nicht kompiliert werden. Heben Sie die Auskommentierung auf, und sehen Sie, was passiert. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Sie können zwar nicht implizit zwischen Strukturtupeln und Verweistupeln konvertieren, + + + + you can explicitly convert via pattern matching, as demonstrated below. + Sie können aber wie unten gezeigt eine explizite Konvertierung über den Musterabgleich durchführen. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Die F#-PipeOperatoren ("|>", "<|" usw.) und die F#-Zusammensetzungsoperatoren (">>", "<<") + + + + are used extensively when processing data. These operators are themselves functions + werden bei der Datenverarbeitung umfassend eingesetzt. Diese Operatoren sind Funktionen, + + + + which make use of Partial Application. + die die partielle Anwendung nutzen. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Weitere Informationen zu diesen Operatoren finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Weitere Informationen zur partiellen Anwendung finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Quadriert einen Wert. + + + + Adds 1 to a value. + Addiert 1 zu einem Wert hinzu. + + + + Tests if an integer value is odd via modulo. + Testet mit Modulo, ob ein Integerwert gerade ist. + + + + A list of 5 numbers. More on lists later. + Eine Liste mit fünf Nummern. Weitere Informationen zu Listen finden Sie später. + + + + Given a list of integers, it filters out the even numbers, + Aus einer Liste mit Integern werden die geraden Zahlen herausgefiltert, + + + + squares the resulting odds, and adds 1 to the squared odds. + die sich ergebenden ungeraden Zahlen werden quadratiert, und zu dem Ergebnis wird 1 hinzuaddiert. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Eine kürzere Möglichkeit zum Schreiben von "squareOddValuesAndAddOne" besteht im Verschachteln von jedem + + + + sub-result into the function calls themselves. + Teilergebnis im Funktionsaufruf selbst. + + + + This makes the function much shorter, but it's difficult to see the + Dadurch wird die Funktion viel kürzer, + + + + order in which the data is processed. + die Reihenfolge der Datenverarbeitung ist jedoch schlechter sichtbar. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Eine bevorzugte Möglichkeit zum Schreiben von "squareOddValuesAndAddOne" besteht in der Verwendung von F#-Pipe-Operatoren. + + + + This allows you to avoid creating intermediate results, but is much more readable + Dadurch können Sie verhindern, dass Zwischenergebnisse erstellt werden, dies ist jedoch besser lesbar + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + als verschachtelte Funktionsaufrufe wie "squareOddValuesAndAddOneNested". + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + Sie können "squareOddValuesAndAddOnePipeline" kürzen, indem Sie den zweiten "List.map"-Aufruf + + + + into the first, using a Lambda Function. + mithilfe einer Lambda-Funktion in den ersten verschieben. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Pipelines werden auch innerhalb der Lambda-Funktion verwendet. F#-Pipe-Operatoren + + + + can be used for single values as well. This makes them very powerful for processing data. + können auch für einzelne Werte verwendet werden. So ist eine leistungsstarke Datenverarbeitung möglich. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + Es ist nicht mehr erforderlich, "values" als Parameter aufzunehmen, indem Sie mithilfe von ">>" + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + die beiden zentralen Vorgänge erstellen: Herausfiltern von geraden Zahlen, Quadratieren und Addieren von 1. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Der Teil "fun x -> ..." des Lambdaausdrucks ist dementsprechend ebenfalls nicht erforderlich, da "x" lediglich + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + in dem Bereich definiert wird, damit es an eine Funktionspipeline übergeben werden kann. Daher kann ">>" + + + + there as well. + dort ebenfalls verwendet werden. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + Das Ergebnis von "squareOddValuesAndAddOneComposition" selbst ist eine andere Funktion, die eine + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + Liste von Integern als Eingabe verwendet. Wenn Sie "squareOddValuesAndAddOneComposition" mit einer Liste + + + + of integers, you'll notice that it produces the same results as previous functions. + von Integern ausführen, erhalten Sie das gleiche Ergebnis wie bei vorherigen Funktionen. + + + + This is using what is known as function composition. This is possible because functions in F# + Dabei wird die so genannte Funktionskomposition verwendet. Das ist möglich, da Funktionen in F# + + + + use Partial Application and the input and output types of each data processing operation match + die partielle Anwendung nutzen, und die Ein- und Ausgabetypen jedes Datenverarbeitungsvorgangs + + + + the signatures of the functions we're using. + mit den Signaturen der verwendeten Funktionen übereinstimmen. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Listen sind geordnete, unveränderliche, einfach verknüpfte Listen. Ihre Auswertung ist streng. + + + + This module shows various ways to generate lists and process lists with some functions + Dieses Modul zeigt verschiedene Möglichkeiten zum Erstellen von Listen und Prozesslisten mit einigen Funktionen + + + + in the 'List' module in the F# Core Library. + im Modul "List" in der F#-Kernbibliothek. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Listen werden mithilfe von "[ ... ]" definiert. Dies ist eine leere Liste. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Dies ist eine Liste mit drei Elementen. ";" dient dazu, Elemente in der gleichen Zeile zu trennen. + + + + You can also separate elements by placing them on their own lines. + Sie können Elemente auch trennen, indem Sie sie in separaten Zeilen einfügen. + + + + This is a list of integers from 1 to 1000 + Dies ist eine Liste mit ganzen Zahlen von 1 bis 1000. + + + + Lists can also be generated by computations. This is a list containing + Listen können auch mithilfe von Berechnungen generiert werden. Dies ist eine Liste mit + + + + all the days of the year. + allen Tagen des Jahres. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Drucken Sie mithilfe von "List.take" die ersten fünf Elemente in "daysList". + + + + Computations can include conditionals. This is a list containing the tuples + Berechnungen können Bedingungen enthalten. Dies ist eine Liste mit den Tupeln, + + + + which are the coordinates of the black squares on a chess board. + bei denen es sich um die Koordinaten der schwarzen Felder auf einem Schachbrett handelt. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Listen können mithilfe von "List.map" und anderen funktionalen Programmierkombinatoren umgewandelt werden. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Diese Definition erzeugt eine neue Liste, indem die Zahlen in "numberList" quadriert werden. Dabei wird der Pipeline- + + + + operator to pass an argument to List.map. + Operator verwendet, um ein Argument an "List.map" zu übergeben. + + + + There are many other list combinations. The following computes the sum of the squares of the + Es stehen noch viele andere Listenkombinationen zur Verfügung. Mit dem Folgenden wird die Summe der Quadrate der + + + + numbers divisible by 3. + durch 3 teilbaren Zahlen berechnet. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Arrays sind veränderliche Sammlungen fester Größe, die Elemente des gleichen Typs enthalten. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Sie ähneln Listen (sie unterstützen Enumeration und haben ähnliche Combinators für die Datenverarbeitung), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + sind im Allgemeinen jedoch schneller und unterstützen einen schnellen wahlfreien Zugriff. Dafür sind sie jedoch weniger sicher, da sie veränderlich sind. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Dies ist das leere Array. Die Syntax ähnelt der von Listen, verwendet jedoch stattdessen "[| ... |]". + + + + Arrays are specified using the same range of constructs as lists. + Arrays werden mithilfe der gleichen Konstrukte angegeben wie Listen. + + + + This is an array of numbers from 1 to 1000. + Dies ist ein Array mit Zahlen von 1 bis 1000. + + + + This is an array containing only the words "hello" and "world". + Dieses Array enthält nur die Wörter "hello" und "world". + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Dieses Array wurde per Index initialisiert und enthält gerade Zahlen von 0 bis 2000. + + + + Sub-arrays are extracted using slicing notation. + Teilarrays werden mithilfe der Segmentnotation extrahiert. + + + + You can loop over arrays and lists using 'for' loops. + Mit For-Schleifen können Sie bei Arrays und Listen Schleifen ausführen. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Sie können die Inhalte eines Arrayelements mithilfe des Zuweisungsoperators "Pfeil nach links" ändern. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Weitere Informationen zu diesem Operator finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Sie können Arrays mithilfe von "Array.map" und anderen funktionalen Programmiervorgängen umwandeln. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + Mit Folgendem wird die Summe der Längen von Wörtern berechnet, die mit "h" beginnen. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Sequenzen sind logische Serien von Elementen, die alle vom gleichen Typ sind. Ihr Typ ist allgemeiner als Listen und Arrays. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Sequenzen werden bei Bedarf ausgewertet und bei jeder Iteration erneut ausgewertet. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Eine F#-Sequenz ist ein Alias für .NET System.Collections.Generic.IEnumerable<'T>. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Funktionen mit Sequenzverarbeitung können auch auf Listen und Arrays angewendet werden. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Dies ist die leere Sequenz. + + + + This a sequence of values. + Dies ist eine Sequenz mit Werten. + + + + This is an on-demand sequence from 1 to 1000. + Dies ist eine bedarfsbasierte Sequenz von 1 bis 1000. + + + + This is a sequence producing the words "hello" and "world" + Diese Sequenz generiert die Wörter "hello" und "world". + + + + This sequence producing the even numbers up to 2000. + Diese Sequenz erzeugt gerade Zahlen bis 2000. + + + + This is an infinite sequence which is a random walk. + Dies ist eine unendliche Sequenz und ermöglicht Zufallsdurchläufe. + + + + This example uses yield! to return each element of a subsequence. + In diesem Beispiel werden mithilfe von "yield!" die einzelnen Elemente einer Untersequenz zurückgegeben. + + + + This example shows the first 100 elements of the random walk. + Dieses Beispiel zeigt die ersten 100 Elemente des Zufallsdurchlaufs. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Rekursive Funktionen können sich selbst aufrufen. In F# sind Funktionen nur rekursiv, + + + + when declared using 'let rec'. + für die Deklaration mithilfe von "let rec". + + + + Recursion is the preferred way to process sequences or collections in F#. + Rekursion ist die bevorzugte Möglichkeit zum Verarbeiten von Sequenzen oder Sammlungen in F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Dieses Beispiel zeigt eine rekursive Funktion, die die Fakultät einer ganzen + + + + integer. It uses 'let rec' to define a recursive function. + Zahl berechnet. Zum Definieren einer rekursiven Funktion wird "let rec" verwendet. + + + + Computes the greatest common factor of two integers. + Berechnet den höchsten gemeinsamen Faktor von zwei Integern. + + + + Since all of the recursive calls are tail calls, + Da alle rekursiven Aufrufe Endeaufrufe sind, + + + + the compiler will turn the function into a loop, + wandelt der Compiler die Funktion in eine Schleife um, + + + + which improves performance and reduces memory consumption. + was die Leistung verbessert und die Arbeitsspeicherbedarf reduziert. + + + + This example computes the sum of a list of integers using recursion. + Dieses Beispiel berechnet mithilfe von Rekursion die Summe einer Liste von Integern. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + Mithilfe einer Hilfsfunktion mit einem Ergebnisakkumulator wird "sumList" endrekursiv. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Dies ruft die endrekursive Hilfsfunktion auf und verwendet "0" als Startwertakkumulator. + + + + An approach like this is common in F#. + Dies ist eine häufige Vorgehensweise in F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + Datensätze sind ein Aggregat aus benannten Werten mit optionalen Membern (wie etwa Methoden). + + + + They are immutable and have structural equality semantics. + Sie sind nicht veränderlich und verfügen über eine strukturelle Gleichheitssemantik. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Dieses Beispiel zeigt, wie ein neuer Datensatztyp definiert wird. + + + + This example shows how to instantiate a record type. + In diesem Beispiel erfahren Sie, wie Sie einen Datensatztyp instanziieren. + + + + You can also do this on the same line with ';' separators. + Das ist in der gleichen Zeile auch mit dem Trennzeichen ";" möglich. + + + + This example shows how to use "copy-and-update" on record values. It creates + Dieses Beispiel zeigt die Verwendung von "Kopieren und aktualisieren" für Datensatzwerte. Es wird + + + + a new record value that is a copy of contact1, but has different values for + ein neuer Datensatz als Kopie von "contact1" erstellt, der jedoch über andere Werte + + + + the 'Phone' and 'Verified' fields. + für die Felder "Phone" und "Verified" verfügt. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Dieses Beispiel veranschaulicht das Schreiben einer Funktion zum Verarbeiten eines Datensatzwerts. + + + + It converts a 'ContactCard' object to a string. + Es konvertiert ein Objekt vom Typ "ContactCard" in eine Zeichenfolge. + + + + This is an example of a Record with a member. + Dies ist ein Beispiel für einen Datensatz mit einem Member. + + + + Members can implement object-oriented members. + Member können objektorientierte Member implementieren. + + + + Members are accessed via the '.' operator on an instantiated type. + Auf Member wird über den Operator "." in einem instanziierten Typ zugegriffen. + + + + Records can also be represented as structs via the 'Struct' attribute. + Datensätze können mithilfe des Attributs "Struct" auch als Strukturen dargestellt werden. + + + + This is helpful in situations where the performance of structs outweighs + Dies ist in Situationen hilfreich, in denen die Leistung der Strukturen wichtiger ist als + + + + the flexibility of reference types. + die Flexibilität der Verweistypen. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Diskriminierte Unions (DUs) sind Werte, die eine Anzahl benannter Formen oder Fälle sein können. + + + + Data stored in DUs can be one of several distinct values. + In DUs gespeicherte Daten können einer von verschiedenen eindeutigen Werten sein. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + Folgendes stellt die Farbe einer Spielkarte dar. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Eine diskriminierte Union kann auch verwendet werden, um den Rang einer Spielkarte darzustellen. + + + + Represents the rank of cards 2 .. 10 + Stellt den Rang der Karten 2 bis 10 dar 10 + + + + Discriminated Unions can also implement object-oriented members. + Diskriminierte Unions können objektorientierte Member implementieren. + + + + This is a record type that combines a Suit and a Rank. + Dieser Datensatztyp kombiniert eine Farbe und einen Rang. + + + + It's common to use both Records and Disciminated Unions when representing data. + Beim Darstellen von Daten werden häufig sowohl Datensätze als auch diskriminierte Unions verwendet. + + + + This computes a list representing all the cards in the deck. + Dies berechnet eine Liste mit allen Karten im Stapel. + + + + This example converts a 'Card' object to a string. + Dieses Beispiel konvertiert ein Objekt vom Typ "Card" in eine Zeichenfolge. + + + + This example prints all the cards in a playing deck. + Dieses Beispiel gibt alle Karten in einem Kartenstapel aus. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Einzelfall-DUs werden häufig für die Domänenmodellierung verwendet. Dadurch erhalten Sie zusätzliche Typsicherheit + + + + over primitive types such as strings and ints. + für primitive Typen wie Zeichenfolgen und Integer. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Eine implizite Konvertierung von Einzelfall-DUs in den umschlossenen Typ oder aus diesem Typ ist nicht möglich. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Beispielsweise eine Funktion, die eine Adresse akzeptiert, kann keine Zeichenfolge als Eingabe akzeptieren + + + + or vive/versa. + (oder umgekehrt). + + + + You can easily instantiate a single-case DU as follows. + Sie können Einzelfall-DUs folgendermaßen instanziieren. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Wenn Sie den Wert benötigen, können Sie den zugrunde liegenden Wert mit einer einfachen Funktion entpacken. + + + + Printing single-case DUs is simple with unwrapping functions. + Mit entpackten Funktionen lassen sich Einzelfall-DUs einfach drucken. + + + + Disciminated Unions also support recursive definitions. + Diskriminierte Unions unterstützen auch rekursive Definitionen. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Dies stellt eine Struktur für die Binärsuche dar, wobei ein Fall eine leere Struktur ist + + + + and the other being a Node with a value and two subtrees. + und der andere Fall einen Knoten mit einem Wert und zwei Unterstrukturen darstellt. + + + + Check if an item exists in the binary search tree. + Prüfen Sie, ob die Struktur für die Binärsuche ein Element enthält. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Sucht rekursiv mithilfe des Musterabgleichs. Gibt bei vorhandenem Element "true" aus, andernfalls "false". + + + + Check the left subtree. + Prüfen Sie die linke Unterstruktur. + + + + Check the right subtree. + Prüfen Sie die rechte Unterstruktur. + + + + Inserts an item in the Binary Search Tree. + Fügt in die Struktur für die Binärsuche ein Element ein. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Findet die Position für das rekursive Einfügen mithilfe des Musterabgleichs und fügt anschließend einen neuen Knoten ein. + + + + If the item is already present, it does not insert anything. + Wenn das Element bereits vorhanden ist, wird nichts eingefügt. + + + + No need to insert, it already exists; return the node. + Einfügen nicht erforderlich, da bereits vorhanden; Knoten zurückgeben. + + + + Call into left subtree. + Aufruf in linker Unterstruktur. + + + + Call into right subtree. + Aufruf in rechter Unterstruktur. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Diskriminierte Unions können mithilfe des Attributs "Struct" auch als Struktur dargestellt werden. + + + + This is helpful in situations where the performance of structs outweighs + Dies ist in Situationen hilfreich, in denen die Leistung der Strukturen wichtiger ist als + + + + the flexibility of reference types. + die Flexibilität der Verweistypen. + + + + However, there are two important things to know when doing this: + Dabei sind jedoch zwei Punkte zu beachten: + + + + 1. A struct DU cannot be recursively-defined. + 1. Eine Struktur-DU kann nicht rekursiv definiert werden. + + + + 2. A struct DU must have unique names for each of its cases. + 2. In einer Struktur-DU muss jeder Fall einen eindeutigen Namen haben. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Der Musterabgleich ist eine Funktion von F#, die Ihnen die Verwendung von Mustern ermöglicht, + + + + which are a way to compare data with a logical structure or structures, + die eine Möglichkeit sind, um Daten mit logischen Strukturen oder Strukturen zu vergleichen, + + + + decompose data into constituent parts, or extract information from data in various ways. + Daten in ihre Einzelteile zu zerlegen oder auf verschiedene Weise Informationen aus Daten zu extrahieren. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Das Verteilen ist anschließend mithilfe des Musterabgleichs anhand der Form eines Musters möglich. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Ein Datensatz für den Vor- und Nachnamen einer Person + + + + A Discriminated Union of 3 different kinds of employees + Eine diskriminierte Union mit drei verschiedenen Arten von Mitarbeitern + + + + Count everyone underneath the employee in the management hierarchy, + Zählen Sie alle Personen unterhalb des Angestellten in der Verwaltungshierarchie, + + + + including the employee. + einschließlich des Angestellten. + + + + Find all managers/executives named "Dave" who do not have any reports. + Suchen Sie alle Manager/Führungskräfte mit dem Namen "Dave", die über keine Berichte verfügen. + + + + This uses the 'function' shorthand to as a lambda expression. + Dies verwendet die Kurzform "function" als Lambdaausdruck. + + + + [] matches an empty list. + [] entspricht einer leeren Liste. + + + + '_' is a wildcard pattern that matches anything. + "_" ist ein Platzhaltermuster, das mit allem übereinstimmt + + + + This handles the "or else" case. + Dies behandelt den "or else"-Fall. + + + + You can also use the shorthand function construct for pattern matching, + Sie können das Kurzform-Funktionskonstrukt auch für den Musterabgleich verwenden, + + + + which is useful when you're writing functions which make use of Partial Application. + was beim Schreiben von Funktionen, die die partielle Anwendung nutzen, hilfreich ist. + + + + Define some more functions which parse with the helper function. + Definieren Sie weitere Funktionen, die eine Analyse mithilfe der Hilfsfunktion durchführen. + + + + Active Patterns are another powerful construct to use with pattern matching. + Aktive Muster sind ein weiteres leistungsstarkes Konstrukt, das beim Musterabgleich verwendet werden kann. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Sie ermöglichen eine Partitionierung der Eingabedaten in benutzerdefinierte Formen, wobei sie an der Musterabgleichs-Aufrufsite zerlegt werden. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + Der Musterabgleich mithilfe des Schlüsselworts "function" und das aktive Muster sehen häufig wie folgt aus. + + + + Call the printer with some different values to parse. + Rufen Sie den Drucker mit unterschiedlichen zu analysierenden Werten auf. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Bei Optionswerten handelt es sich um eine beliebige Art von Werten, die entweder mit "Some" oder mit "None" markiert sind. + + + + They are used extensively in F# code to represent the cases where many other + Sie werden in F#-Code umfassend verwendet, um die Fälle darzustellen, in denen viele + + + + languages would use null references. + Sprachen NULL-Verweise verwenden würden. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + Definieren Sie als Erstes eine Postleitzahl, die über eine diskriminierte Einzelfall-Union definiert ist. + + + + Next, define a type where the ZipCode is optional. + Definieren Sie als Nächstes einen Typ, bei dem "ZipCode" optional ist. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Definieren Sie dann einen Schnittstellentyp, der ein Objekt zum Berechnen der Versandkosten für die Postleitzahl des Kunden repräsentiert, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + sofern Implementierungen für die abstrakten Methoden "getState" und "getShippingZone" vorhanden sind. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Berechnen Sie nun mithilfe einer Rechnerinstanz die Versandkosten für einen Kunden. + + + + This uses combinators in the Option module to allow a functional pipeline for + Dies verwendet Kombinatoren im Option-Modul für eine funktionale Pipeline zum + + + + transforming data with Optionals. + Transformieren von Daten mit Optionen. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Maßeinheiten sind eine Möglichkeit, um für primitive numerische Typen typsicher den Änderungsverlauf einzublenden. + + + + You can then perform type-safe arithmetic on these values. + Anschließend können Sie für diese Werte die typsichere Arithmetik ausführen. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Öffnen Sie zunächst eine Auflistung mit allgemeinen Einheitennamen. + + + + Define a unitized constant + Definieren Sie eine einheitliche Konstante. + + + + Next, define a new unit type + Definieren Sie als Nächstes einen neuen Einheitentyp. + + + + Conversion factor mile to meter. + Faktor für die Umrechnung von Meilen in Meter. + + + + Define a unitized constant + Definieren Sie eine einheitliche Konstante. + + + + Compute metric-system constant + Berechnen Sie die Konstante für das metrische System. + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Werte, die Maßeinheiten verwenden, können wie der primitive numerische Typ z.B. zum Drucken genutzt werden. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Klassen sind eine Möglichkeit zum Definieren neuer Objekttypen in F#. Sie unterstützen standardmäßige objektorientierte Konstrukte. + + + + They can have a variety of members (methods, properties, events, etc.) + Sie können über verschiedene Member verfügen (Methoden, Eigenschaften, Ereignisse usw.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Weitere Informationen zu Klassen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Weitere Informationen zu Membern finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Eine einfache, zweidimensionale Vektorklasse. + + + + The class's constructor is on the first line, + Der Konstruktor der Klasse befindet sich in der ersten Zeile + + + + and takes two arguments: dx and dy, both of type 'double'. + und akzeptiert zwei Argumente: dx und dy, beide vom Typ "double". + + + + This internal field stores the length of the vector, computed when the + Dieses interne Feld speichert die Länge des Vektors, die berechnet wird, wenn + + + + object is constructed + das Objekt konstruiert wird. + + + + 'this' specifies a name for the object's self identifier. + "this" gibt einen Namen für den Selbstbezeichner des Objekts an. + + + + In instance methods, it must appear before the member name. + In Instanzmethoden muss dies vor dem Membernamen angegeben werden. + + + + This member is a method. The previous members were properties. + Dieser Member ist eine Methode. Die vorherigen Member waren Eigenschaften. + + + + This is how you instantiate the Vector2D class. + So instanziieren Sie die Vector2D-Klasse. + + + + Get a new scaled vector object, without modifying the original object. + Rufen Sie ein neues skaliertes Vektorobjekt ab, ohne das ursprüngliche Objekt zu verändern. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Generische Klassen ermöglichen das Definieren von Typen in Bezug auf eine Gruppe von Typparametern. + + + + In the following, 'T is the type parameter for the class. + Im Folgenden ist 'T der Typparameter für die Klasse. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Dieses interne Feld speichert die Zustände in einer Liste. + + + + Add a new element to the list of states. + Der Liste der Zustände ein neues Element hinzufügen + + + + use the '<-' operator to mutate the value. + Den "<-"-Operator verwenden, um den Wert zu mutieren + + + + Get the entire list of historical states. + Die gesamte Liste der Verlaufszustände abrufen + + + + Get the latest state. + Den aktuellen Zustand abrufen + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Eine int-Instanz der state tracker-Klasse. Beachten Sie, dass der Typ-Parameter abgeleitet wird. + + + + Add a state + Einen Zustand hinzufügen + + + + Interfaces are object types with only 'abstract' members. + Schnittstellen sind Objekttypen, die nur über abstrakte Member verfügen. + + + + Object types and object expressions can implement interfaces. + Objekttypen und Objektausdrücke können Schnittstellen implementieren. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Dieser Typ implementiert "IDisposable". + + + + This is the implementation of IDisposable members. + Dies ist die Implementierung von IDisposable-Membern. + + + + This is an object that implements IDisposable via an Object Expression + Dies ist ein Objekt, das IDisposable über einen Objektausdruck implementiert. + + + + Unlike other languages such as C# or Java, a new type definition is not needed + Im Gegensatz zu anderen Sprachen wie C# oder Java ist keine neue Typendefinition erforderlich, + + + + to implement an interface. + um eine Schnittstelle zu implementieren. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + Die Bibliothek "FSharp.Core" definiert eine Reihe paralleler Verarbeitungsfunktionen. Hier + + + + you use some functions for parallel processing over arrays. + verwenden Sie einige Funktionen zur parallelen Verarbeitung über Arrays. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Weitere Informationen finden Sie unter: https://msdn.microsoft.com/de-de/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Definieren Sie zunächst ein Array mit Eingaben. + + + + Next, define a functions that does some CPU intensive computation. + Definieren Sie dann eine Funktion mit CPU-intensiven Berechnungen. + + + + Next, do a parallel map over a large input array. + Führen Sie als Nächstes eine parallele Zuordnung für ein umfangreiches Eingabearray durch. + + + + Next, print the results. + Geben Sie die Ergebnisse aus. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Ereignisse sind ein gängiger Begriff bei der .NET-Programmierung, v. a. bei WinForms oder WPF-Anwendungen. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Erstellen Sie zunächst eine Instanz des Event-Objekts mit Abonnementpunkt (event.Publish) und Ereignisauslöser (event.Trigger). + + + + Next, add handler to the event. + Fügen Sie dem Ereignis einen Handler hinzu. + + + + Next, trigger the event. + Lösen Sie das Ereignis aus. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Erstellen Sie als Nächstes eine Event-Instanz gemäß der .NET-Standardkonvention: (sender, EventArgs) + + + + Next, add a handler for this new event. + Fügen Sie einen Handler für das neue Ereignis hinzu. + + + + Next, trigger this event (note that sender argument should be set). + Lösen Sie das Ereignis aus. (Hinweis: das sender-Argument muss festgelegt sein.) + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf new file mode 100644 index 0000000000..692964c713 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Este ejemplo le guiará por los elementos del lenguaje F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Para ejecutar el código en F# interactivo, resalte una sección de código y presione Alt+Entrar, o bien haga clic con el botón secundario + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + y seleccione "Ejecutar en modo interactivo". Puede abrir la ventana de F# interactivo desde el menú "Ver". + + + + For more about F#, see: + Para obtener más información acerca de F#, vea: + + + + To see this tutorial in documentation form, see: + Para ver este tutorial en forma de documentación, vea: + + + + To learn more about applied F# programming, use + Para obtener más información sobre la programación de F# aplicada, use + + + + To install the Visual F# Power Tools, use + Para instalar Visual F# Power Tools, use + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + "Herramientas" --> "Extensiones y actualizaciones" --> "En línea" y busque + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Para obtener plantillas adicionales para su uso con F#, consulte 'Plantillas en línea' en Visual Studio, + + + + 'New Project' --> 'Online Templates' + "Nuevo proyecto" --> "Plantillas en línea" + + + + F# supports three kinds of comments: + F# admite tres tipos de comentarios: + + + + 1. Double-slash comments. These are used in most situations. + 1. Comentarios con doble barra diagonal. Se usan en la mayoría de las situaciones. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Comentarios de bloque de estilo ML. No se usan con tanta frecuencia. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Comentarios de triple barra diagonal. Se utilizan para funciones de documentación, tipos, etc. + + + + They will appear as text when you hover over something which is decorated with these comments. + Aparecerán como texto al mantener el puntero por encima de algo decorado con estos comentarios. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + También admiten comentarios XML de estilo .NET, que le permite generar documentación de referencia, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + y también permite a los editores (como Visual Studio) extraer información de ellos. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Abra los espacios de nombres con la palabra clave "open". + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Un módulo es una agrupación de código de F#, como valores, tipos y valores de función. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + El código de agrupación de los módulos ayuda a mantener el código relacionado en conjunto y ayuda a evitar los conflictos de nombres en su programa. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Este es un entero de ejemplo. + + + + This is a sample floating point number. + Este es un número de punto flotante de ejemplo. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Se calcula un número nuevo aplicando cierta aritmética. Los tipos numéricos se convierten mediante + + + + functions 'int', 'double' and so on. + funciones "int", "double", etc. + + + + This is a list of the numbers from 0 to 99. + Esta es una lista de números del 0 al 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Esta es una lista de todas las tuplas que contienen todos los números de 0 a 99 y sus cuadrados. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + La línea siguiente imprime una lista que incluye tuplas, utilizando "%A" para la impresión genérica. + + + + This is a sample integer with a type annotation + Este es un entero de ejemplo con una anotación de tipo + + + + Values in F# are immutable by default. They cannot be changed + Los valores de F# son inmutables de manera predeterminada. No se pueden cambiar + + + + in the course of a program's execution unless explicitly marked as mutable. + en el transcurso de la ejecución de un programa a menos que se marquen explícitamente como mutable. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Al enlazar un valor a un nombre con "let", se convierte en inmutable. + + + + The second line of code fails to compile because 'number' is immutable and bound. + La segunda línea de código no se compila porque "number" es inmutable y está enlazado. + + + + Re-defining 'number' to be a different value is not allowed in F#. + En F#, no se puede redefinir "number" para darle otro valor. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Enlace mutable. Es necesario para poder mutar el valor de "otherNumber". + + + + When mutating a value, use '<-' to assign a new value. + Para la mutación de un valor, use "<-" para asignar un valor nuevo. + + + + You could not use '=' here for this purpose since it is used for equality + No pudo usar "=" con este propósito, porque se usa para la igualdad + + + + or other contexts such as 'let' or 'module' + u otros contextos, como "let" o "module" + + + + Much of F# programming consists of defining functions that transform input data to produce + Gran parte de la programación de F# consiste en definir funciones que transforman los datos de entrada para generar + + + + useful results. + resultados útiles. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + "let" se utiliza para definir una función. En este caso, acepta un argumento de entero y devuelve un entero. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Los paréntesis son opcionales para argumentos de función, excepto cuando se utiliza una anotación de tipo explícito. + + + + Apply the function, naming the function return result using 'let'. + Aplicar la función, asignando un nombre al resultado devuelto por la función mediante 'let'. + + + + The variable type is inferred from the function return type. + El tipo de variable se infiere del tipo de valor devuelto por la función. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Esta línea utiliza "%d" para imprimir el resultado de un entero. Cuenta con seguridad de tipos. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Si "result1" no fuese de tipo "int", la línea no se compilaría. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + Si es necesario, anote el tipo de un nombre de parámetro usando "(argument:type)". Los paréntesis son obligatorios. + + + + Conditionals use if/then/elid/elif/else. + Los condicionales usan if/then/elid/elif/else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Tenga en cuenta que F# utiliza una sintaxis que tiene en cuenta la sangría de espacios en blanco, de forma parecida a lenguajes como Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Esta línea utiliza "%f" para imprimir el resultado como un valor float. Al igual que "%d", cuenta con seguridad de tipos. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Los valores booleanos son tipos de datos fundamentales en F#. Estos son algunos ejemplos de valores booleanos y lógica condicional. + + + + To learn more, see: + Para obtener más información, vea: + + + + and + Y + + + + Booleans values are 'true' and 'false'. + Los valores booleanos son "true" y "false". + + + + Operators on booleans are 'not', '&&' and '||'. + Los operadores de valores booleanos son "not", "&&" y "||". + + + + This line uses '%b'to print a boolean value. This is type-safe. + Esta línea utiliza "%b" para imprimir un valor booleano. Cuenta con seguridad de tipos. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Las cadenas son tipos de datos fundamentales en F#. Estos son algunos ejemplos de cadenas y de manipulación básica de cadenas. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Las cadenas usan comillas dobles. + + + + Strings can also use @ to create a verbatim string literal. + Las cadenas también pueden usar @ para crear un literal de cadena textual. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + No tiene en cuenta los caracteres de escape, como "\", "\n", "\t", etc. + + + + String literals can also use triple-quotes. + Los literales de cadena también pueden usar comillas triples. + + + + String concatenation is normally done with the '+' operator. + La concatenación de cadenas suele hacerse con el operador "+". + + + + This line uses '%s' to print a string value. This is type-safe. + Esta línea utiliza "%s" para imprimir un valor de cadena. Cuenta con seguridad de tipos. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Las subcadenas utilizan la notación del indexador. Esta línea extrae los 7 primeros caracteres como una subcadena. + + + + Note that like many languages, Strings are zero-indexed in F#. + Tenga en cuenta que, al igual que en otros muchos lenguajes, las cadenas tienen índice 0 en F#. + + + + Tuples are simple combinations of data values into a combined value. + Las tuplas son combinaciones simples de valores de datos en un valor combinado. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Tupla de enteros sencilla. + + + + A function that swaps the order of two values in a tuple. + Una función que intercambia el orden de dos valores en una tupla. + + + + F# Type Inference will automatically generalize the function to have a generic type, + La inferencia de tipos de F# generalizará la función de forma automática para que tenga un tipo genérico, + + + + meaning that it will work with any type. + lo que significa que funcionará con cualquier tipo. + + + + A tuple consisting of an integer, a string, + Una tupla que consta de un entero, una cadena, + + + + and a double-precision floating point number. + y un número de punto flotante de doble precisión. + + + + A simple tuple of integers with a type annotation. + Una tupla de enteros sencilla con una anotación de tipo. + + + + Type annotations for tuples use the * symbol to separate elements + Las anotaciones de tipo para las tuplas usan el símbolo * para separar los elementos + + + + Tuples are normally objects, but they can also be represented as structs. + Las tuplas suelen ser objetos, pero también se pueden representar como estructuras. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Interoperan completamente con estructuras de C# y Visual Basic.NET; sin embargo, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + las tuplas de estructuras no son implícitamente convertibles con tuplas de objeto (a menudo denominadas tuplas de referencia). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + La segunda línea no se compilará por esto. Quite las marcas de comentario para ver qué ocurre. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Aunque no puede convertir tuplas de struct en tuplas de referencia y viceversa de forma implícita, + + + + you can explicitly convert via pattern matching, as demonstrated below. + puede hacer la conversión de forma explícita mediante coincidencia de patrones, como se muestra a continuación. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Los operadores de canalización ("|>", "<|", etc.) y de composición (">>", "<<") de F# + + + + are used extensively when processing data. These operators are themselves functions + se utilizan mucho en el procesamiento de datos. Estos operadores son en sí mismos funciones. + + + + which make use of Partial Application. + que usan aplicación parcial. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Para obtener más información sobre estos operadores, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Para obtener más información sobre la aplicación parcial, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Eleva un valor la cuadrado. + + + + Adds 1 to a value. + Suma 1 a un valor. + + + + Tests if an integer value is odd via modulo. + Comprueba si un valor entero es impar mediante un módulo. + + + + A list of 5 numbers. More on lists later. + Lista de 5 números. Más adelante, se proporciona más información sobre listas. + + + + Given a list of integers, it filters out the even numbers, + Dada una lista de enteros, aplica un filtro para excluir los números pares, + + + + squares the resulting odds, and adds 1 to the squared odds. + eleva al cuadrado los impares resultantes y les suma 1. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Una forma más corta de escribir "squareOddValuesAndAddOne" es anidar cada + + + + sub-result into the function calls themselves. + subresultado en las propias llamadas a la función. + + + + This makes the function much shorter, but it's difficult to see the + Esto hace la función mucho más corta, pero es difícil ver el + + + + order in which the data is processed. + orden en el que se procesan los datos. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Una forma recomendable de escribir "squareOddValuesAndAddOne" es usar operadores de canalización de F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + Esto permite evitar que se creen resultados intermedios, pero es mucho más fácil de leer + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + que anidar las llamadas a la función como "squareOddValuesAndAddOneNested" + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + No puede acortar "squareOddValuesAndAddOnePipeline" moviendo la segunda llamada de "List.map" + + + + into the first, using a Lambda Function. + a la primera, usando una función lambda. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Tenga en cuenta que las canalizaciones se usan también en la función lambda. Los operadores de canalización de F# + + + + can be used for single values as well. This makes them very powerful for processing data. + se puede usar también para valores individuales. Esto les confiere una gran capacidad para el procesamiento de datos. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + Por último, puede eliminar la necesidad de tomar "valores" de forma explícita como parámetro usando ">>" + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + para componer las dos operaciones principales: aplicar un filtro para excluir los números pares, elevar al cuadrado y sumar uno. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + De igual modo, no se necesita tampoco la parte "fun x -> ..." de la expresión lambda, porque "x" + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + se define en ese ámbito para poderlo pasar a una canalización funcional. Por tanto, ">>" se pude usar + + + + there as well. + aquí también. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + El resultado de "squareOddValuesAndAddOneComposition" es en sí mismo otra función que toma una + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + lista de enteros como entrada. Si ejecuta "squareOddValuesAndAddOneComposition" con una lista + + + + of integers, you'll notice that it produces the same results as previous functions. + de enteros, notará que produce los mismos resultados que las funciones anteriores. + + + + This is using what is known as function composition. This is possible because functions in F# + Aquí se utiliza lo que se conoce como composición de funciones. Es posible porque las funciones en F# + + + + use Partial Application and the input and output types of each data processing operation match + utilizan aplicación parcial y los tipos de entrada y salida de cada operación de procesamiento de datos buscan + + + + the signatures of the functions we're using. + las signaturas de las funciones que estamos usando. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Las listas están ordenadas, son inmutables y están vinculadas individualmente. Son diligentes en su evaluación. + + + + This module shows various ways to generate lists and process lists with some functions + Este módulo muestra varias formas de generar listas y procesarlas con algunas funciones + + + + in the 'List' module in the F# Core Library. + en el módulo "List" de la biblioteca principal de F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Las listas se definen mediante [ ... ]. Esta es una lista vacía. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Esta es una lista de 3 elementos. Se utiliza ";" para separar los elementos que están en la misma línea. + + + + You can also separate elements by placing them on their own lines. + También puede separar los elementos poniendo cada uno en su propia línea. + + + + This is a list of integers from 1 to 1000 + Esta es una lista de enteros del 1 al 1000 + + + + Lists can also be generated by computations. This is a list containing + Las listas también pueden generarse mediante cálculos. Esta es una lista que contiene + + + + all the days of the year. + todos los días del año. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Imprime los 5 primeros elementos de "daysList" usando "List.take". + + + + Computations can include conditionals. This is a list containing the tuples + Los cálculos pueden incluir condicionales. Esta es una lista que contiene las tuplas + + + + which are the coordinates of the black squares on a chess board. + que son las coordenadas de los cuadrados negros de un tablero de ajedrez. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Las listas se pueden transformas mediante "List.map" y otros combinadores de programación funcionales. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Esta definición genera una nueva lista al elevar al cuadrado los números incluidos en numberList y usa el operador + + + + operator to pass an argument to List.map. + de canalización para pasar un argumento a List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Hay otras muchas combinaciones de listas. La siguiente, calcula la suma de los cuadrados de los + + + + numbers divisible by 3. + números divisibles por 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Las matrices son colecciones mutables de tamaño fijo de elementos del mismo tipo. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Aunque son parecidas a las listas (admiten enumeración y tienen combinadores parecidos para el procesamiento de datos), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + suelen ser más rápidas y admitir acceso aleatorio rápido. A cambio, tiene el inconveniente de que es menos seguro porque es mutable. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Esta es una matriz vacía. Observe que la sintaxis es parecida a la de las listas, pero utiliza "[| ... |]" en su lugar. + + + + Arrays are specified using the same range of constructs as lists. + Las matrices se especifican con el mismo intervalo de construcciones que las listas. + + + + This is an array of numbers from 1 to 1000. + Esta es una matriz de números del 1 al 1000. + + + + This is an array containing only the words "hello" and "world". + Esta es una matriz que solo contiene las palabras "hola" y "todos". + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Esta es una matriz inicializada con un índice que contiene los números pares del 0 al 2000. + + + + Sub-arrays are extracted using slicing notation. + Las submatrices se extraen mediante la notación divisoria. + + + + You can loop over arrays and lists using 'for' loops. + Puede ejecutar un bucle en matrices y listas usando bucles "for". + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Puede modificar el contenido de un elemento de matriz mediante el operador de asignación de flecha izquierda. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Para obtener más información sobre este operador, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Para transformar matrices, use "Array.map" y otras operaciones de programación funcionales. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + La operación siguiente calcula la suma de las longitudes de las palabras que empiezan por "h". + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Las secuencias son una serie lógica de elementos del mismo tipo. Son de un tipo más general que las listas o las matrices. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Las secuencias se evalúan previa petición y se vuelven a evaluar cada vez que se recorren en iteración. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Una secuencia de F# es un alias para un elemento System.Collections.Generic.IEnumerable<'T> de .NET. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Las funciones de procesamiento de secuencias también pueden aplicarse a las listas y a las matrices. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Esta es una secuencia vacía. + + + + This a sequence of values. + Esta es una secuencia de valores. + + + + This is an on-demand sequence from 1 to 1000. + Esta es una secuencia a petición del 1 al 1000. + + + + This is a sequence producing the words "hello" and "world" + Esta es una secuencia que genera las palabras "hola" y "todos" + + + + This sequence producing the even numbers up to 2000. + Esta secuencia genera los números pares hasta el 2000. + + + + This is an infinite sequence which is a random walk. + Esta es una secuencia infinita que constituye un recorrido aleatorio. + + + + This example uses yield! to return each element of a subsequence. + Este ejemplo usa yield! para devolver cada uno de los elementos de una subsecuencia. + + + + This example shows the first 100 elements of the random walk. + Este ejemplo muestra los 100 primeros elementos del recorrido aleatorio. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Las funciones recursivas pueden llamarse a sí mismas. En F#, las funciones solo son recursivas + + + + when declared using 'let rec'. + cuando se declara con "let rec". + + + + Recursion is the preferred way to process sequences or collections in F#. + La recursión es la forma recomendada de procesar secuencias o colecciones en F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Este ejemplo muestra una función recursiva que calcula el factorial de un + + + + integer. It uses 'let rec' to define a recursive function. + entero. Usa "let rec" para definir una función recursiva. + + + + Computes the greatest common factor of two integers. + Calcula el mayor factor común de dos enteros. + + + + Since all of the recursive calls are tail calls, + Puesto que todas las llamadas recursivas son llamadas de cola, + + + + the compiler will turn the function into a loop, + el compilador devolverá la función en un bucle, + + + + which improves performance and reduces memory consumption. + lo que mejora el rendimiento y reduce el consumo de memoria. + + + + This example computes the sum of a list of integers using recursion. + Este ejemplo calcula la suma de una lista de enteros con recursión. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + Esto convierte la función "sumList" en recursiva de cola, usando una función auxiliar con un acumulador de resultados. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Este código invoca la función auxiliar recursiva de cola, proporcionando "0" como acumulador de valores de inicialización. + + + + An approach like this is common in F#. + Este método es habitual en F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + Los registros son un agregado de valores con nombre, con miembros opcionales (como los métodos). + + + + They are immutable and have structural equality semantics. + Son inmutables y tienen semántica de igualdad estructural. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Este ejemplo muestra cómo definir un nuevo tipo de registro. + + + + This example shows how to instantiate a record type. + Este ejemplo muestra cómo crear una instancia de un tipo de registro. + + + + You can also do this on the same line with ';' separators. + También puede hacer esto en la misma línea usando ";" como separador. + + + + This example shows how to use "copy-and-update" on record values. It creates + Este ejemplo muestra cómo usar "copy-and-update" en los valores de registro. Crea + + + + a new record value that is a copy of contact1, but has different values for + un nuevo valor de registro que es una copia de contact1, pero con valores distintos para + + + + the 'Phone' and 'Verified' fields. + los campos "Phone" y "Verified". + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Este ejemplo muestra cómo escribir una función que procesa un valor del registro. + + + + It converts a 'ContactCard' object to a string. + Convierte un objeto "ContactCard" en una cadena. + + + + This is an example of a Record with a member. + Este es un ejemplo de un registro con un miembro. + + + + Members can implement object-oriented members. + Los miembros pueden implementar miembros orientados a objetos. + + + + Members are accessed via the '.' operator on an instantiated type. + A los miembros se accede con el operador "." en un tipo del que se ha creado una instancia. + + + + Records can also be represented as structs via the 'Struct' attribute. + Los registros se pueden representar también como estructuras con el atributo "Struct". + + + + This is helpful in situations where the performance of structs outweighs + Esto es útil en situaciones donde el rendimiento de las estructuras es superior a + + + + the flexibility of reference types. + la flexibilidad de los tipos de referencia. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Las uniones discriminadas (DU) son valores que podrían ser un gran número de formas o casos con nombre. + + + + Data stored in DUs can be one of several distinct values. + Los datos almacenados en uniones discriminadas pueden ser uno de varios valores diferentes. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + El siguiente código representa el palo de una carta. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + También se puede usar una unión discriminada para representar el rango de una carta. + + + + Represents the rank of cards 2 .. 10 + Representa el rango de cartas 2 .. 10 + + + + Discriminated Unions can also implement object-oriented members. + Las uniones discriminadas pueden implementar también miembros orientados a objetos. + + + + This is a record type that combines a Suit and a Rank. + Este es un tipo de registro que combina un palo y un rango. + + + + It's common to use both Records and Disciminated Unions when representing data. + Es habitual utilizar tanto registros como uniones discriminadas cuando se representan datos. + + + + This computes a list representing all the cards in the deck. + Este código calcula una lista que representa todas las cartas de la baraja. + + + + This example converts a 'Card' object to a string. + Este ejemplo convierte un objeto "Card" en una cadena. + + + + This example prints all the cards in a playing deck. + Este ejemplo imprime todas las cartas de una baraja. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Las uniones discriminadas de un solo caso se usan con frecuencia en el modelado de dominios. Esto puede aportar mayor seguridad de tipos + + + + over primitive types such as strings and ints. + en tipos primitivos, como cadenas y enteros. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Las uniones discriminadas de un solo caso no se pueden convertir de forma implícita en el tipo que encapsulan, ni viceversa. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Por ejemplo, una función que toma una dirección no puede aceptar una cadena como esa entrada, + + + + or vive/versa. + o viceversa. + + + + You can easily instantiate a single-case DU as follows. + Puede crear fácilmente una instancia de una unión discriminada de un solo caso del siguiente modo. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Cuando necesite el valor, puede desencapsular el valor subyacente con una función sencilla. + + + + Printing single-case DUs is simple with unwrapping functions. + Imprimir uniones discriminadas de un solo caso es muy sencillo con funciones de desencapsulamiento. + + + + Disciminated Unions also support recursive definitions. + Las uniones discriminadas admiten también definiciones recursivas. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Esto representa un árbol de búsqueda binaria, donde un caso es el árbol vacío + + + + and the other being a Node with a value and two subtrees. + y el otro es un nodo con un valor y dos subárboles. + + + + Check if an item exists in the binary search tree. + Comprueba si existe un elemento en el árbol de búsqueda binaria. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Hace búsquedas de forma recursiva usando coincidencia de patrones. Devuelve true si existe; de lo contrario, false. + + + + Check the left subtree. + Comprueba el subárbol de la izquierda. + + + + Check the right subtree. + Comprueba el subárbol de la derecha. + + + + Inserts an item in the Binary Search Tree. + Inserta un elemento en el árbol de búsqueda binaria. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Busca dónde insertar de forma recursiva un nuevo nodo usando coincidencia de patrones y lo inserta. + + + + If the item is already present, it does not insert anything. + Si el elemento ya está presente, no inserta nada. + + + + No need to insert, it already exists; return the node. + No es necesario insertarlo, ya existe; devuelve el nodo. + + + + Call into left subtree. + Llama al subárbol de la izquierda. + + + + Call into right subtree. + Llama al subárbol de la derecha. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Las uniones discriminadas se pueden representar también como estructuras con el atributo "Struct". + + + + This is helpful in situations where the performance of structs outweighs + Esto es útil en situaciones donde el rendimiento de las estructuras es superior a + + + + the flexibility of reference types. + la flexibilidad de los tipos de referencia. + + + + However, there are two important things to know when doing this: + No obstante, hay dos cosas importantes que deben tenerse en cuenta cuando se hace esto: + + + + 1. A struct DU cannot be recursively-defined. + 1. Una unión discriminada de estructura no se puede definir de forma recursiva. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Una unión discriminada de estructura debe tener un nombre único para cada uno de sus casos. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + La coincidencia de patrones es una característica de F# que permite utilizar patrones, + + + + which are a way to compare data with a logical structure or structures, + que son una forma de comparar datos con estructuras lógicas, + + + + decompose data into constituent parts, or extract information from data in various ways. + descomponer datos en partes constituyentes o extraer información de datos de varias formas. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Después, puede hacer envíos en función de la "forma" de un patrón mediante coincidencia de patrones. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Un registro para el nombre y los apellidos de una persona + + + + A Discriminated Union of 3 different kinds of employees + Una unión discriminada de 3 tipos de empleados diferentes + + + + Count everyone underneath the employee in the management hierarchy, + Cuenta a todos por debajo del empleado en la jerarquía de administración, + + + + including the employee. + incluido el empleado. + + + + Find all managers/executives named "Dave" who do not have any reports. + Buscar a todos los directores o ejecutivos que se llamen "Dave" que no tengan jefes. + + + + This uses the 'function' shorthand to as a lambda expression. + Aquí se utiliza la forma abreviada "function" como una expresión lambda. + + + + [] matches an empty list. + [] coincide con una lista vacía. + + + + '_' is a wildcard pattern that matches anything. + "_" es un patrón comodín que busca cualquier cosa. + + + + This handles the "or else" case. + Este código controla el caso "or else". + + + + You can also use the shorthand function construct for pattern matching, + También puede usar la construcción abreviada de funciones para la coincidencia de patrones, + + + + which is useful when you're writing functions which make use of Partial Application. + que es muy útil cuando se escriben funciones que utilizan aplicación parcial. + + + + Define some more functions which parse with the helper function. + Define algunas funciones más que se analizan con la función auxiliar. + + + + Active Patterns are another powerful construct to use with pattern matching. + Los patrones activos son también una construcción muy eficaz para usarla con coincidencia de patrones. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Permiten particionar los datos de entrada en formas personalizadas, descomponiéndolos en el sitio de llamada de coincidencia de patrones. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + La coincidencia de patrones con la palabra clave "function" y patrones activos suele ser similar a este código. + + + + Call the printer with some different values to parse. + Llamar a la impresora con algunos valores diferentes para analizar. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Los valores de opción son cualquier tipo de valor etiquetado como 'Some' o 'None'. + + + + They are used extensively in F# code to represent the cases where many other + Se usan de forma exhaustiva en el código de F# para representar los casos en los que muchos otros + + + + languages would use null references. + lenguajes usarían referencias NULL. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + En primer lugar, defina un código postal con una unión discriminada de un solo caso. + + + + Next, define a type where the ZipCode is optional. + Después, defina un tipo donde ZipCode sea opcional. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Después, defina un tipo de interfaz que represente un objeto para calcular la zona de envío del código postal del cliente, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + especificando implementaciones para los métodos abstractos 'getState' y 'getShippingZone'. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Después, calcule una zona de envío para un cliente con una instancia de la calculadora. + + + + This uses combinators in the Option module to allow a functional pipeline for + Aquí se utilizan combinadores en el módulo Option para permitir que una canalización funcional + + + + transforming data with Optionals. + transforme datos con valores opcionales. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Las unidades de medida son una forma de anotar tipos numéricos primitivos con seguridad de tipos. + + + + You can then perform type-safe arithmetic on these values. + Después, puede realizar operaciones aritméticas con seguridad de tipos en estos valores. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Primero, abra una colección de nombres de unidad comunes + + + + Define a unitized constant + Defina una constante dividida en unidades + + + + Next, define a new unit type + Después, defina un nuevo tipo de unidad + + + + Conversion factor mile to meter. + Factor de conversión de millas a metros. + + + + Define a unitized constant + Defina una constante dividida en unidades + + + + Compute metric-system constant + Calcular constante del sistema métrico + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Los valores que usan unidades de medida se pueden usar simplemente como tipo numérico primitivo para cosas como la impresión. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Las clases son una forma de definir tipos de objeto nuevos en F# y admiten construcciones orientadas a objetos estándar. + + + + They can have a variety of members (methods, properties, events, etc.) + Pueden tener una gran variedad de miembros (métodos, propiedades, eventos, etc.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Para obtener más información sobre las clases, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Para obtener más información sobre miembros, vea https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Clase Vector bidimensional sencilla. + + + + The class's constructor is on the first line, + El constructor de la clase está en la primera línea + + + + and takes two arguments: dx and dy, both of type 'double'. + y toma dos argumentos: dx y dy, ambos de tipo "double". + + + + This internal field stores the length of the vector, computed when the + Este campo interno almacena la longitud del vector, que se calcula cuando + + + + object is constructed + se construye el objeto + + + + 'this' specifies a name for the object's self identifier. + 'this' especifica un nombre para el propio identificador del objeto. + + + + In instance methods, it must appear before the member name. + En los métodos de instancia, debe aparecer delante del nombre del miembro. + + + + This member is a method. The previous members were properties. + Este miembro es un método. Los miembros anteriores eran propiedades. + + + + This is how you instantiate the Vector2D class. + Así es cómo se crea una instancia de la clase Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Obtener un nuevo objeto de vector a escala sin modificar el objeto original. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Las clases genéricas permiten definir tipos con respecto a un conjunto de parámetros de tipo. + + + + In the following, 'T is the type parameter for the class. + En el siguiente código, 'T es el parámetro de tipo para la clase. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Este campo interno almacena los estados en una lista. + + + + Add a new element to the list of states. + Agregar un nuevo elemento a la lista de estados. + + + + use the '<-' operator to mutate the value. + Use el operador "<-" para mutar el valor. + + + + Get the entire list of historical states. + Obtener la lista completa de estados históricos. + + + + Get the latest state. + Obtener el último estado. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Una instancia 'int' de la clase del rastreador de estados. Observe que se ha inferido el parámetro de tipo. + + + + Add a state + Agregar un estado + + + + Interfaces are object types with only 'abstract' members. + Las interfaces son tipos de objeto que solo tienen miembros "abstract". + + + + Object types and object expressions can implement interfaces. + Los tipos de objeto y las expresiones de objeto pueden implementar interfaces. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Este es un tipo que implementa IDisposable. + + + + This is the implementation of IDisposable members. + Esta es la implementación de los miembros de IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + Este es un objeto que implementa IDisposable mediante una expresión de objeto + + + + Unlike other languages such as C# or Java, a new type definition is not needed + A diferencia de otros lenguajes, como C# o Java, no es necesaria una nueva definición de tipo + + + + to implement an interface. + para implementar una interfaz. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + La biblioteca FSharp.Core define un intervalo de funciones de procesamiento paralelo. Aquí + + + + you use some functions for parallel processing over arrays. + se usan algunas funciones de procesamiento paralelo en matrices. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Para obtener más información, vea: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Primero, una matriz de entradas. + + + + Next, define a functions that does some CPU intensive computation. + Después, defina una función que realice algunos cálculos con gran consumo de CPU. + + + + Next, do a parallel map over a large input array. + Después, realice una asignación en paralelo en una matriz de entrada grande. + + + + Next, print the results. + Después, imprima los resultados. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Los eventos son algo habitual en la programación para .NET, especialmente con aplicaciones de WinForms o WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Primero, cree una instancia del objeto Event que conste de un punto de suscripción (event.Publish) y un desencadenador de eventos (event.Trigger). + + + + Next, add handler to the event. + Después, agregue un controlador al evento. + + + + Next, trigger the event. + Después, desencadene el evento. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Después, cree una instancia de Event que siga la convención estándar de .NET: (sender, EventArgs). + + + + Next, add a handler for this new event. + Después, agregue un controlador para este nuevo evento. + + + + Next, trigger this event (note that sender argument should be set). + Después, desencadene este evento (tenga en cuenta que el argumento sender debe estar establecido). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf new file mode 100644 index 0000000000..ecef37c188 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Cet exemple est destiné à vous montrer les différents éléments du langage F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Pour exécuter le code dans F# Interactive, mettez en surbrillance une portion du code, puis appuyez sur Alt+Entrée ou cliquez avec le bouton droit, + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + puis sélectionnez Exécuter en mode interactif. Pour ouvrir la fenêtre F# Interactive, accédez au menu Affichage. + + + + For more about F#, see: + Pour en savoir plus sur F#, consultez : + + + + To see this tutorial in documentation form, see: + Pour afficher ce didacticiel au format documentation, consultez : + + + + To learn more about applied F# programming, use + Pour en savoir plus sur la programmation F# appliquée, utilisez + + + + To install the Visual F# Power Tools, use + Pour installer Visual F# Power Tools, utilisez + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + 'Outils' --> 'Extensions et mises à jour' --> `En ligne` et rechercher + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Pour consulter d'autres modèles d'utilisation du langage F#, cliquez sur Modèles en ligne dans Visual Studio, + + + + 'New Project' --> 'Online Templates' + 'Nouveau projet' --> 'Modèles en ligne' + + + + F# supports three kinds of comments: + F# prend en charge trois genres de commentaires : + + + + 1. Double-slash comments. These are used in most situations. + 1. Commentaires avec double barre oblique (utilisés dans la plupart des cas). + + + + 2. ML-style Block comments. These aren't used that often. + 2. Commentaires de bloc de style ML (rarement utilisés). + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Commentaires avec triple barre oblique (utilisés pour documenter les fonctions, les types, etc.). + + + + They will appear as text when you hover over something which is decorated with these comments. + Ils apparaissent sous forme de texte quand vous pointez sur un élément décoré avec ces commentaires. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Ils prennent également en charge les commentaires XML de style .NET, ce qui vous permet de générer une documentation de référence. + + + + and they also allow editors (such as Visual Studio) to extract information from them. + Les éditeurs tels que Visual Studio peuvent également extraire des informations à partir de ces commentaires. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Ouvrir des espaces de noms à l'aide du mot clé 'open'. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Un module est un regroupement d’éléments de code F#, comme des valeurs, des types et des valeurs de fonction. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Le regroupement du code dans les modules permet de conserver le code associé ensemble et d'éviter les conflits de noms dans votre programme. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Exemple d'entier. + + + + This is a sample floating point number. + Exemple de nombre à virgule flottante. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Nouveau nombre calculé par une opération arithmétique. Les types numériques sont convertis à l'aide des + + + + functions 'int', 'double' and so on. + fonctions 'int', 'double', etc. + + + + This is a list of the numbers from 0 to 99. + Liste des nombres de 0 à 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Liste de tous les tuples contenant tous les nombres de 0 à 99 et leur carré. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + La ligne suivante imprime une liste comprenant des tuples, en utilisant '%A' pour l'impression générique. + + + + This is a sample integer with a type annotation + Exemple d'entier avec une annotation de type. + + + + Values in F# are immutable by default. They cannot be changed + Les valeurs en F# sont immuables par défaut. Elles ne peuvent pas être changées + + + + in the course of a program's execution unless explicitly marked as mutable. + durant l'exécution d'un programme, sauf si elles sont explicitement marquées comme mutables. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Le fait de lier une valeur à un nom au moyen de 'let' la rend non modifiable. + + + + The second line of code fails to compile because 'number' is immutable and bound. + La compilation de la deuxième ligne de code échoue, car 'number' est non modifiable et lié. + + + + Re-defining 'number' to be a different value is not allowed in F#. + La redéfinition de 'number' en une valeur différente n'est pas autorisée dans F#. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Liaison mutable. Obligatoire pour muter la valeur de 'otherNumber'. + + + + When mutating a value, use '<-' to assign a new value. + En cas de mutation d'une valeur, utilisez '<-' pour assigner une nouvelle valeur. + + + + You could not use '=' here for this purpose since it is used for equality + Vous ne pouvez pas utiliser '=' ici à cet effet, car il est utilisé pour l'égalité + + + + or other contexts such as 'let' or 'module' + ou autres contextes tels que 'let' ou 'module' + + + + Much of F# programming consists of defining functions that transform input data to produce + La programmation F# consiste en grande partie à définir des fonctions qui transforment des données d'entrée pour produire des + + + + useful results. + résultats utiles. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Utilisez 'let' pour définir une fonction. Celle-ci accepte un argument entier et retourne un entier. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Les parenthèses sont facultatives pour les arguments de fonction, sauf quand vous utilisez une annotation de type explicite. + + + + Apply the function, naming the function return result using 'let'. + Appliquez la fonction, en nommant le résultat de retour de la fonction à l'aide de 'let'. + + + + The variable type is inferred from the function return type. + Le type de variable est déduit du type de retour de la fonction. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Cette ligne utilise '%d' pour imprimer le résultat comme entier. Cette opération est de type sécurisé. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Si 'result1' n'est pas de type 'int', la compilation de la ligne échoue. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + Si nécessaire, annotez le type d'un nom de paramètre en utilisant '(argument:type)'. Les parenthèses sont obligatoires. + + + + Conditionals use if/then/elid/elif/else. + Les conditions utilisent if/then/elid/elif/else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Notez que F# utilise une syntaxe prenant en charge la mise en retrait à l'aide d'espaces, comme Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Cette ligne utilise '%f' pour imprimer le résultat comme float. Comme '%d' ci-dessus, cette opération est de type sécurisé. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Les booléens sont des types de données fondamentaux en F#. Voici quelques exemples illustrant des booléens et la logique conditionnelle. + + + + To learn more, see: + Pour en savoir plus, consultez : + + + + and + Et + + + + Booleans values are 'true' and 'false'. + Les valeurs booléennes sont 'true' et 'false'. + + + + Operators on booleans are 'not', '&&' and '||'. + Les opérateurs sur les booléens sont 'not', '&&' et '||'. + + + + This line uses '%b'to print a boolean value. This is type-safe. + Cette ligne utilise '%b' pour imprimer une valeur booléenne. Cette opération est de type sécurisé. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Les chaînes sont des types de données fondamentaux en F#. Voici quelques exemples illustrant des chaînes et la manipulation de chaînes de base. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Les chaînes utilisent des guillemets doubles. + + + + Strings can also use @ to create a verbatim string literal. + Les chaînes peuvent également utiliser @ pour créer un littéral de chaîne textuelle. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Les caractères d'échappement tels que '\', '\n', '\t', etc. sont ainsi ignorés. + + + + String literals can also use triple-quotes. + Les littéraux de chaîne peuvent également utiliser des guillemets triples. + + + + String concatenation is normally done with the '+' operator. + L'opérateur '+' est généralement utilisé pour la concaténation de chaînes. + + + + This line uses '%s' to print a string value. This is type-safe. + Cette ligne utilise '%s' pour imprimer une valeur de chaîne. Cette opération est de type sécurisé. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Les sous-chaînes utilisent la notation de l'indexeur. Cette ligne extrait les 7 premiers caractères comme sous-chaîne. + + + + Note that like many languages, Strings are zero-indexed in F#. + Comme dans bien d'autres langages, les chaînes ont un index de base zéro en F#. + + + + Tuples are simple combinations of data values into a combined value. + Les tuples sont des combinaisons simples de valeurs de données formant une valeur combinée. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Tuple simple d'entiers. + + + + A function that swaps the order of two values in a tuple. + Fonction qui inverse l'ordre de deux valeurs d'un tuple. + + + + F# Type Inference will automatically generalize the function to have a generic type, + L'inférence de type F# généralise automatiquement la fonction pour qu'elle soit de type générique, + + + + meaning that it will work with any type. + ce qui signifie qu'elle peut fonctionner avec n'importe quel type. + + + + A tuple consisting of an integer, a string, + Tuple constitué d'un entier, d'une chaîne + + + + and a double-precision floating point number. + et d'un nombre à virgule flottante à double précision. + + + + A simple tuple of integers with a type annotation. + Tuple simple d'entiers avec une annotation de type. + + + + Type annotations for tuples use the * symbol to separate elements + Annotations de type pour les tuples qui utilisent le symbole * afin de séparer les éléments + + + + Tuples are normally objects, but they can also be represented as structs. + Les tuples sont généralement des objets, mais peuvent aussi être représentés sous forme de structs. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Ils interagissent entièrement avec les structs en C# et Visual Basic .NET ; cependant, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + les tuples de type struct ne sont pas implicitement convertibles avec des tuples d'objet (souvent appelés tuples de référence). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + La compilation de la deuxième ligne ci-dessous échoue à cause de cela. Supprimez les marques de commentaire pour voir ce qui se passe. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Bien que vous ne puissiez pas effectuer de conversion implicite entre les tuples de type struct et les tuples de type référence, + + + + you can explicitly convert via pattern matching, as demonstrated below. + vous pouvez effectuer une conversion explicite à l'aide de critères spéciaux, comme indiqué ci-dessous. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Les opérateurs de canal F# ('|>', '<|', etc.) et les opérateurs de composition F# ('>>', '<<') + + + + are used extensively when processing data. These operators are themselves functions + sont très utilisés de façon pour le traitement des données. Ces opérateurs sont eux-mêmes des fonctions + + + + which make use of Partial Application. + qui utilisent l'application partielle. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Pour en savoir plus sur ces opérateurs, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Pour en savoir plus sur l'application partielle, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Met une valeur au carré. + + + + Adds 1 to a value. + Ajoute 1 à une valeur. + + + + Tests if an integer value is odd via modulo. + Teste si une valeur entière est impaire à l'aide d'une opération modulo. + + + + A list of 5 numbers. More on lists later. + Liste de 5 nombres. Nous reviendrons sur les listes plus tard. + + + + Given a list of integers, it filters out the even numbers, + Pour une liste d'entiers donnée, élimine les nombres pairs par filtrage, + + + + squares the resulting odds, and adds 1 to the squared odds. + met au carré les nombres impairs résultants, puis ajoute 1 au carré des nombres impairs. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Pour écrire plus rapidement 'squareOddValuesAndAddOne', imbriquez chaque + + + + sub-result into the function calls themselves. + sous-résultat dans les appels de fonction. + + + + This makes the function much shorter, but it's difficult to see the + La fonction est ainsi considérablement raccourcie, mais il est difficile de voir + + + + order in which the data is processed. + l'ordre dans lequel les données sont traitées. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Pour écrire 'squareOddValuesAndAddOne', utilisez de préférence des opérateurs de canal F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + Aucun résultat intermédiaire n'est créé, mais la syntaxe est beaucoup plus lisible + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + que d'imbriquer des appels de fonction comme 'squareOddValuesAndAddOneNested' + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + Vous pouvez raccourcir 'squareOddValuesAndAddOnePipeline' en déplaçant le second appel 'List.map' + + + + into the first, using a Lambda Function. + dans le premier en utilisant une fonction lambda. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Notez que les pipelines sont également utilisés dans la fonction lambda. Les opérateurs de canal F# + + + + can be used for single values as well. This makes them very powerful for processing data. + peuvent également être utilisés pour des valeurs uniques. Ils sont donc très efficaces dans le traitement des données. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + Enfin, vous pouvez éliminer la nécessité d'accepter explicitement 'values' comme paramètre en utilisant '>>' + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + pour composer les deux opérations principales : élimination des nombres pairs par filtrage, puis mise au carré et ajout d'une unité. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + De même, la partie 'fun x -> ...' de l'expression lambda n'est pas nécessaire, car 'x' est simplement + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + défini dans cette portée pour pouvoir être passé à un pipeline fonctionnel. Vous pouvez donc utiliser '>>' + + + + there as well. + ici aussi. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + Le résultat de 'squareOddValuesAndAddOneComposition' est une autre fonction qui accepte une + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + liste d'entiers comme entrée. Si vous exécutez 'squareOddValuesAndAddOneComposition' avec une liste + + + + of integers, you'll notice that it produces the same results as previous functions. + d'entiers, les résultats sont identiques à ceux des fonctions précédentes. + + + + This is using what is known as function composition. This is possible because functions in F# + C'est ce qui s'appelle la composition de fonctions. Cela vient du fait que les fonctions dans F# + + + + use Partial Application and the input and output types of each data processing operation match + utilisent l'application partielle et que les types d'entrée et de sortie de chaque opération de traitement de données correspondent + + + + the signatures of the functions we're using. + aux signatures des fonctions que nous utilisons. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Les listes sont ordonnées, non modifiables et liées individuellement. Elles font l'objet d'une évaluation stricte. + + + + This module shows various ways to generate lists and process lists with some functions + Ce module montre différentes façons de générer et de traiter des listes à l'aide de fonctions + + + + in the 'List' module in the F# Core Library. + du module 'List' de la bibliothèque principale F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Les listes sont définies à l'aide de [ ... ]. Il s'agit d'une liste vide. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Il s'agit d'une liste avec 3 éléments. ';' permet de séparer des éléments sur la même ligne. + + + + You can also separate elements by placing them on their own lines. + Vous pouvez également séparer des éléments en les plaçant chacun sur une ligne. + + + + This is a list of integers from 1 to 1000 + Il s'agit de la liste des entiers de 1 à 1 000 + + + + Lists can also be generated by computations. This is a list containing + Les listes peuvent également être générées par calculs. Il s'agit d'une liste contenant + + + + all the days of the year. + tous les jours de l'année. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Imprimez les 5 premiers éléments de 'daysList' en utilisant 'List.take'. + + + + Computations can include conditionals. This is a list containing the tuples + Les calculs peuvent inclure des conditions. Il s'agit d'une liste contenant les tuples + + + + which are the coordinates of the black squares on a chess board. + qui sont les coordonnées des cases noires d'un échiquier. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Les listes peuvent être transformées à l'aide de 'List.map' et d'autres combinateurs de programmation fonctionnelle. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Cette définition produit une nouvelle liste en mettant au carré les nombres de numberList à l'aide de + + + + operator to pass an argument to List.map. + l'opérateur du pipeline pour passer un argument à List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Il existe de nombreuses autres combinaisons de listes. La combinaison suivante calcule la somme des carrés des + + + + numbers divisible by 3. + nombres divisibles par 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Les tableaux sont des collections de taille fixe et mutables d'éléments du même type. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Bien qu'ils soient semblables aux listes (prise en charge de l'énumération et combinateurs similaires pour le traitement des données), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + ils offrent généralement une vitesse accrue et prennent en charge l'accès aléatoire rapide. Ils sont toutefois moins sécurisés du fait de leur mutabilité. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Tableau vide. Notez que la syntaxe est semblable à celle des listes, mais '[| ... |]' est utilisé à la place. + + + + Arrays are specified using the same range of constructs as lists. + Les tableaux sont spécifiés à l'aide de la même plage de constructions que les listes. + + + + This is an array of numbers from 1 to 1000. + Il s'agit d'un tableau de nombres de 1 à 1 000. + + + + This is an array containing only the words "hello" and "world". + Il s'agit d'un tableau contenant uniquement les mots "hello" et "world". + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Il s'agit d'un tableau lancé par index, qui contient les nombres pairs de 0 à 2 000. + + + + Sub-arrays are extracted using slicing notation. + Les sous-tableaux sont extraits à l'aide de la notation de découpage. + + + + You can loop over arrays and lists using 'for' loops. + Vous pouvez effectuer une boucle sur des tableaux et des listes à l'aide de boucles 'for'. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Vous pouvez modifier le contenu d'un élément de tableau à l'aide de l'opérateur d'assignation flèche gauche. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Pour en savoir plus sur cet opérateur, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Vous pouvez transformer des tableaux à l'aide de 'Array.map' et d'autres opérations de programmation fonctionnelle. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + L'opération suivante calcule la somme des longueurs des mots qui commencent par 'h'. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Les séquences sont des séries logiques d'éléments du même type. Elles sont plus générales que les listes et les tableaux. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Les séquences sont évaluées sur demande et sont réévaluées à chacune de leur itération. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Une séquence F# est un alias pour un System.Collections.Generic.IEnumerable .NET<'T>. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Les fonctions de traitement de séquence peuvent être appliquées aux listes et aux tableaux également. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Il s'agit de la séquence vide. + + + + This a sequence of values. + Il s'agit d'une séquence de valeurs. + + + + This is an on-demand sequence from 1 to 1000. + Séquence à la demande de 1 à 1000. + + + + This is a sequence producing the words "hello" and "world" + Il s'agit d'une séquence produisant les mots "hello" et "world" + + + + This sequence producing the even numbers up to 2000. + Cette séquence produit les nombres pairs jusqu'à 2 000. + + + + This is an infinite sequence which is a random walk. + Il s'agit d'une séquence infinie correspondant à une marche aléatoire. + + + + This example uses yield! to return each element of a subsequence. + Cet exemple utilise yield! pour retourner chaque élément d'une sous-séquence. + + + + This example shows the first 100 elements of the random walk. + Cet exemple montre les 100 premiers éléments de la marche aléatoire. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Les fonctions récursives peuvent s'appeler elles-mêmes. En F#, les fonctions sont uniquement récursives + + + + when declared using 'let rec'. + en cas de déclaration avec 'let rec'. + + + + Recursion is the preferred way to process sequences or collections in F#. + Il est recommandé d'utiliser la récursivité pour traiter des séquences ou des collections en F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Cet exemple montre une fonction récursive qui calcule la factorielle d'un + + + + integer. It uses 'let rec' to define a recursive function. + entier. Il utilise 'let rec' pour définir une fonction récursive. + + + + Computes the greatest common factor of two integers. + Calcule le plus grand commun diviseur de deux entiers. + + + + Since all of the recursive calls are tail calls, + Comme tous les appels récursifs sont des appels terminaux, + + + + the compiler will turn the function into a loop, + le compilateur transforme la fonction en boucle, + + + + which improves performance and reduces memory consumption. + ce qui améliore le niveau de performance et réduit la consommation de mémoire. + + + + This example computes the sum of a list of integers using recursion. + Cet exemple calcule la somme d'une liste d'entiers à l'aide de la récursivité. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + 'sumList' est converti en fonction à récursivité terminale, en utilisant une fonction d'assistance avec accumulateur de résultats. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + La fonction d'assistance de récursivité terminale est appelée et fournit '0' comme accumulateur de valeurs initiales. + + + + An approach like this is common in F#. + Une telle approche est courante en F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + Les enregistrements sont des agrégats de valeurs nommées, avec des membres facultatifs (comme des méthodes). + + + + They are immutable and have structural equality semantics. + Ils ne sont pas modifiables et ont une sémantique d'égalité structurelle. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Cet exemple montre comment définir un nouveau type d'enregistrement. + + + + This example shows how to instantiate a record type. + Cet exemple montre comment instancier un type d'enregistrement. + + + + You can also do this on the same line with ';' separators. + Vous pouvez également effectuer cette opération sur la même ligne avec des séparateurs ';'. + + + + This example shows how to use "copy-and-update" on record values. It creates + Cet exemple montre comment utiliser "copy-and-update" sur des valeurs d'enregistrement. Il crée + + + + a new record value that is a copy of contact1, but has different values for + une nouvelle valeur d'enregistrement qui est une copie de contact1, mais qui a différentes valeurs pour + + + + the 'Phone' and 'Verified' fields. + les champs 'Phone' et 'Verified'. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Cet exemple montre comment écrire une fonction qui traite une valeur d'enregistrement. + + + + It converts a 'ContactCard' object to a string. + Il convertit un objet 'ContactCard' en chaîne. + + + + This is an example of a Record with a member. + Il s'agit d'un exemple d'enregistrement avec un membre. + + + + Members can implement object-oriented members. + Les membres peuvent implémenter des membres orientés objet. + + + + Members are accessed via the '.' operator on an instantiated type. + Les membres sont accessibles au moyen de l'opérateur '.' sur un type instancié. + + + + Records can also be represented as structs via the 'Struct' attribute. + Les enregistrements peuvent également être représentés sous forme de structs par le biais de l'attribut 'Struct'. + + + + This is helpful in situations where the performance of structs outweighs + Cela peut s'avérer utile dans les situations où le niveau de performance des structs l'emporte + + + + the flexibility of reference types. + sur la flexibilité des types de référence. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Les unions discriminées sont des valeurs qui peuvent correspondre à un certain nombre de formulaires ou de cas nommés. + + + + Data stored in DUs can be one of several distinct values. + Les données stockées dans les unions discriminées peuvent prendre une valeur parmi plusieurs valeurs distinctes. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + Ce qui suit représente la couleur d'une carte à jouer. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Une union discriminée peut également servir à représenter le rang d'une carte à jouer. + + + + Represents the rank of cards 2 .. 10 + Représente le rang des cartes 2 .. 10 + + + + Discriminated Unions can also implement object-oriented members. + Les unions discriminées peuvent également implémenter des membres orientés objet. + + + + This is a record type that combines a Suit and a Rank. + Il s'agit d'un type d'enregistrement qui combine une couleur et un rang. + + + + It's common to use both Records and Disciminated Unions when representing data. + Il est fréquent d'utiliser à la fois des enregistrements et des unions discriminées pour représenter des données. + + + + This computes a list representing all the cards in the deck. + Ceci calcule une liste représentant toutes les cartes du paquet. + + + + This example converts a 'Card' object to a string. + Cet exemple convertit un objet 'Card' en chaîne. + + + + This example prints all the cards in a playing deck. + Cet exemple imprime toutes les cartes d'un jeu de cartes. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Les unions discriminées à cas unique sont souvent utilisées pour la modélisation de domaines. Il peut en résulter une meilleure cohérence des types + + + + over primitive types such as strings and ints. + sur des types primitifs tels que les chaînes et les entiers. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Les unions discriminées à cas unique ne peuvent pas être converties implicitement vers ou à partir du type qu'elles incluent dans un wrapper. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Par exemple, une fonction qui accepte une adresse ne peut pas accepter une chaîne comme entrée + + + + or vive/versa. + ou vice versa. + + + + You can easily instantiate a single-case DU as follows. + Vous pouvez facilement instancier une union discriminée à cas unique comme suit. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Quand vous avez besoin de la valeur, vous pouvez exclure la valeur sous-jacente du wrapper à l'aide d'une fonction simple. + + + + Printing single-case DUs is simple with unwrapping functions. + Les fonctions d'exclusion d'un wrapper facilitent l'impression d'unions discriminées à cas unique. + + + + Disciminated Unions also support recursive definitions. + Les unions discriminées prennent également en charge les définitions récursives. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Ceci représente un arbre de recherche binaire, l'un des cas étant l'arbre vide + + + + and the other being a Node with a value and two subtrees. + et l'autre étant un nœud avec une valeur et deux sous-arbres. + + + + Check if an item exists in the binary search tree. + Vérifiez si un élément existe dans l'arbre de recherche binaire. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Effectue une recherche récursive à l'aide de critères spéciaux. Retourne true si l'élément existe ; sinon, false. + + + + Check the left subtree. + Vérifiez le sous-arbre gauche. + + + + Check the right subtree. + Vérifiez le sous-arbre droit. + + + + Inserts an item in the Binary Search Tree. + Insère un élément dans l'arbre de recherche binaire. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Recherche l'emplacement de l'insertion récursive à l'aide de critères spéciaux, puis insère un nouveau nœud. + + + + If the item is already present, it does not insert anything. + Si l'élément est déjà présent, rien n'est inséré. + + + + No need to insert, it already exists; return the node. + Insertion inutile, car l'élément existe déjà ; retournez le nœud. + + + + Call into left subtree. + Appelez le sous-arbre gauche. + + + + Call into right subtree. + Appelez le sous-arbre droit. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Les unions discriminées peuvent également être représentées sous forme de structs au moyen de l'attribut 'Struct'. + + + + This is helpful in situations where the performance of structs outweighs + Cela peut s'avérer utile dans les situations où le niveau de performance des structs l'emporte + + + + the flexibility of reference types. + sur la flexibilité des types de référence. + + + + However, there are two important things to know when doing this: + Cependant, retenez les deux points suivants si vous procédez de la sorte : + + + + 1. A struct DU cannot be recursively-defined. + 1. Une union discriminée struct ne peut pas être définie de manière récursive. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Une union discriminée struct doit avoir des noms uniques pour chacun de ses cas. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Les critères spéciaux sont une fonctionnalité de F# qui vous permet d'utiliser des modèles + + + + which are a way to compare data with a logical structure or structures, + pour comparer des données avec une ou plusieurs structures logiques, + + + + decompose data into constituent parts, or extract information from data in various ways. + décomposer des données en parties constitutives ou extraire des informations à partir de données de plusieurs façons. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Vous pouvez ensuite effectuer une répartition selon la "forme" d'un modèle à l'aide de critères spéciaux. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Enregistrement contenant le nom et le prénom d'une personne + + + + A Discriminated Union of 3 different kinds of employees + Union discriminée de 3 genres d'employés différents + + + + Count everyone underneath the employee in the management hierarchy, + Comptez tout le monde sous l'employé dans la hiérarchie de gestion + + + + including the employee. + (employé inclus). + + + + Find all managers/executives named "Dave" who do not have any reports. + Recherchez tous les responsables ou cadres dont le prénom est "Dave" et qui ne disposent d'aucun rapport. + + + + This uses the 'function' shorthand to as a lambda expression. + Le raccourci 'function' est utilisé comme expression lambda. + + + + [] matches an empty list. + [] correspond à une liste vide. + + + + '_' is a wildcard pattern that matches anything. + '_' est un modèle générique qui correspond à n'importe quel élément. + + + + This handles the "or else" case. + Ceci permet de gérer le cas "or else". + + + + You can also use the shorthand function construct for pattern matching, + Vous pouvez également utiliser la construction de fonction raccourcie pour les critères spéciaux, + + + + which is useful when you're writing functions which make use of Partial Application. + ce qui peut s'avérer utile quand vous écrivez des fonctions qui utilisent l'application partielle. + + + + Define some more functions which parse with the helper function. + Définissez d'autres fonctions d'analyse avec la fonction d'assistance. + + + + Active Patterns are another powerful construct to use with pattern matching. + Les modèles actifs sont une autre construction efficace à utiliser avec les critères spéciaux. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Ils permettent de partitionner des données d'entrée dans des formulaires personnalisés, en les décomposant au niveau du site d'appel de correspondance au modèle. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + Les critères spéciaux avec le mot clé 'function' et les modèles actifs ressemblent souvent à ceci. + + + + Call the printer with some different values to parse. + Appelez l'imprimante avec des valeurs différentes à analyser. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Les valeurs d'option sont tout type de valeur marquée avec 'Some' ou 'None'. + + + + They are used extensively in F# code to represent the cases where many other + Elles sont très utilisées dans le code F# pour représenter les cas où de nombreux autres + + + + languages would use null references. + langages utilisent des références null. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + Commencez par définir un code postal au moyen d'une union discriminée à cas unique. + + + + Next, define a type where the ZipCode is optional. + Définissez ensuite un type où ZipCode est facultatif. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Ensuite, définissez un type d'interface qui représente un objet pour calculer la zone d'expédition correspondant au code postal du client, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + en fonction des implémentations des méthodes abstraites 'getState' et 'getShippingZone'. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Ensuite, calculez une zone d'expédition pour un client à l'aide d'une instance de calculatrice. + + + + This uses combinators in the Option module to allow a functional pipeline for + Des combinateurs du module Option sont utilisés pour permettre à un pipeline fonctionnel de + + + + transforming data with Optionals. + transformer les données avec Optionals. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Les unités de mesure sont un moyen d'annoter les types numériques primitifs de manière sécurisée pour les types. + + + + You can then perform type-safe arithmetic on these values. + Vous pouvez ensuite effectuer des opérations arithmétiques de type sécurisé sur ces valeurs. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Pour commencer, ouvrez une collection de noms d'unité courants + + + + Define a unitized constant + Définissez une constante unifiée + + + + Next, define a new unit type + Ensuite, définissez un nouveau type d'unité + + + + Conversion factor mile to meter. + Facteur de conversion mile en mètre. + + + + Define a unitized constant + Définissez une constante unifiée + + + + Compute metric-system constant + Calculez la constante de système métrique + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Les valeurs avec des unités de mesure s'utilisent de la même façon que le type numérique primitif dans des opérations comme l'impression. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Les classes sont un moyen de définir de nouveaux types d'objet en F#. Elles prennent en charge les constructions orientées objet standard. + + + + They can have a variety of members (methods, properties, events, etc.) + Elles peuvent avoir différents membres (méthodes, propriétés, événements, etc.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Pour en savoir plus sur les classes, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Pour en savoir plus sur les membres, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Classe Vector à deux dimensions simple. + + + + The class's constructor is on the first line, + Le constructeur de la classe est sur la première ligne + + + + and takes two arguments: dx and dy, both of type 'double'. + et accepte deux arguments : dx et dy (tous deux de type 'double'). + + + + This internal field stores the length of the vector, computed when the + Ce champ interne stocke la longueur du vecteur, calculée quand + + + + object is constructed + l'objet est construit + + + + 'this' specifies a name for the object's self identifier. + 'this' spécifie un nom pour l'auto-identificateur de l'objet. + + + + In instance methods, it must appear before the member name. + Dans les méthodes d'instance, il doit apparaître avant le nom du membre. + + + + This member is a method. The previous members were properties. + Ce membre est une méthode. Les membres précédents étaient des propriétés. + + + + This is how you instantiate the Vector2D class. + Voici comment instancier la classe Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Obtenez un nouvel objet vector mis à l'échelle, sans modifier l'objet d'origine. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Les classes génériques autorisent la définition des types par rapport à un jeu de paramètres de type. + + + + In the following, 'T is the type parameter for the class. + Dans ce qui suit, 'T est le paramètre de type pour la classe. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Ce champ interne stocke les états dans une liste. + + + + Add a new element to the list of states. + Ajoutez un nouvel élément à la liste d'états. + + + + use the '<-' operator to mutate the value. + utilisez l'opérateur '<-' pour muter la valeur. + + + + Get the entire list of historical states. + Obtenez la liste complète des états historiques. + + + + Get the latest state. + Obtenez le dernier état. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Instance 'int' de la classe de suivi des états. Notez que le paramètre de type est déduit. + + + + Add a state + Ajouter un état + + + + Interfaces are object types with only 'abstract' members. + Les interfaces sont des types d'objet avec des membres 'abstract' uniquement. + + + + Object types and object expressions can implement interfaces. + Les types et expressions d'objet peuvent implémenter des interfaces. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Type qui implémente IDisposable. + + + + This is the implementation of IDisposable members. + Implémentation de membres IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + Objet qui implémente IDisposable à l'aide d'une expression d'objet + + + + Unlike other languages such as C# or Java, a new type definition is not needed + Contrairement à d'autres langages tels que C# ou Java, une nouvelle définition de type n'est pas nécessaire + + + + to implement an interface. + pour implémenter une interface. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + La bibliothèque FSharp.Core définit une plage de fonctions de traitement parallèle. Ici + + + + you use some functions for parallel processing over arrays. + vous utilisez des fonctions pour le traitement parallèle des tableaux. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Pour en savoir plus, consultez : https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Tout d'abord, un tableau d'entrées. + + + + Next, define a functions that does some CPU intensive computation. + Ensuite, définissez une fonction qui effectue un calcul nécessitant une utilisation intensive du processeur. + + + + Next, do a parallel map over a large input array. + Ensuite, effectuez un mappage parallèle sur un grand tableau d'entrée. + + + + Next, print the results. + Ensuite, imprimez les résultats. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Les événements sont un idiome courant de la programmation .NET, en particulier avec les applications WinForms ou WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Pour commencer, créez une instance d'objet Event qui se compose d'un point d'abonnement (event.Publish) et d'un déclencheur d'événements (event.Trigger). + + + + Next, add handler to the event. + Ensuite, ajoutez un gestionnaire à l'événement. + + + + Next, trigger the event. + Ensuite, déclenchez l'événement. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Ensuite, créez une instance d'événement qui respecte la convention .NET standard : (sender, EventArgs). + + + + Next, add a handler for this new event. + Ensuite, ajoutez un gestionnaire à ce nouvel événement. + + + + Next, trigger this event (note that sender argument should be set). + Ensuite, déclenchez cet événement (notez que l'argument sender doit être défini). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf new file mode 100644 index 0000000000..ecd508e58b --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Questo esempio consente all'utente di familiarizzare con gli elementi del linguaggio F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Per eseguire il codice in F# Interactive, evidenziare una sezione di codice e premere ALT-INVIO oppure fare clic con il pulsante destro del mouse + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + e selezionare "Esegui in Interactive". È possibile aprire la finestra di F# Interactive dal menu "Visualizza". + + + + For more about F#, see: + Per altre informazioni su F#, vedere: + + + + To see this tutorial in documentation form, see: + Per visualizzare questa esercitazione sotto forma di documentazione, vedere: + + + + To learn more about applied F# programming, use + Per altre informazioni sulla programmazione F# applicata, usare + + + + To install the Visual F# Power Tools, use + Per installare Visual F# Power Tools, usare + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + 'Strumenti' --> 'Estensioni e aggiornamenti' --> `Online` e cercare + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Per altri modelli da usare con F#, vedere 'Modelli online' in Visual Studio, + + + + 'New Project' --> 'Online Templates' + 'Nuovo progetto' --> 'Modelli online' + + + + F# supports three kinds of comments: + In F# sono supportati tre tipi di commenti: + + + + 1. Double-slash comments. These are used in most situations. + 1. Commenti introdotti da una doppia barra. Vengono usati nella maggior parte delle situazioni. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Commenti per il blocco in stile ML. Non vengono usati molto spesso. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Commenti introdotti da una tripla barra. Vengono usati per la documentazione di funzioni, tipi e così via. + + + + They will appear as text when you hover over something which is decorated with these comments. + Verranno visualizzati come testo quando si passa con il puntatore su un elemento decorato con questi commenti. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Supportano anche commenti XML in stile .NET, che consentono di generare documentazione di riferimento. + + + + and they also allow editors (such as Visual Studio) to extract information from them. + Consentono anche agli editor, come Visual Studio, di estrarre informazioni. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Aprire gli spazi dei nomi con la parola chiave 'open'. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Un modulo è un raggruppamento di codice F#, ad esempio valori, tipi e valori di funzione. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Il raggruppamento del codice nei moduli consente di riunire il codice correlato e contribuisce a evitare conflitti di nome nel programma. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Questo è un valore integer di esempio. + + + + This is a sample floating point number. + Questo è un numero a virgola mobile di esempio. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Questo ha calcolato un nuovo numero in base a una certa aritmetica. I tipi numerici vengono convertiti con + + + + functions 'int', 'double' and so on. + funzioni 'int', 'double' e così via. + + + + This is a list of the numbers from 0 to 99. + Questo è un elenco di numeri compresi tra 0 e 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Questo è un elenco di tutte le tuple che contengono tutti i numeri compresi tra 0 e 99 e i relativi quadrati. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + La riga successiva stampa un elenco che include le tuple, usando '%A' per la stampa generica. + + + + This is a sample integer with a type annotation + Questo è un intero di esempio con un'annotazione di tipo + + + + Values in F# are immutable by default. They cannot be changed + Per impostazione predefinita, i valori in F# non sono modificabili e non è possibile cambiarli + + + + in the course of a program's execution unless explicitly marked as mutable. + durante l'esecuzione di un programma a meno che non siano contrassegnati esplicitamente come modificabili. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Il binding di un valore in un nome tramite 'let' lo rende non modificabile. + + + + The second line of code fails to compile because 'number' is immutable and bound. + La seconda riga di codice non viene compilata perché 'number' non è modificabile e ne è stato eseguito il binding. + + + + Re-defining 'number' to be a different value is not allowed in F#. + La ridefinizione di 'number' in un valore diverso non è consentita in F#. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Binding modificabile. È necessario per poter modificare il valore di 'otherNumber'. + + + + When mutating a value, use '<-' to assign a new value. + Durante la modifica di un valore, usare '<-' per assegnare un nuovo valore. + + + + You could not use '=' here for this purpose since it is used for equality + Non è possibile usare '=' in questo punto per questa finalità perché viene usato per l'uguaglianza + + + + or other contexts such as 'let' or 'module' + o altri contesti come 'let' o 'module' + + + + Much of F# programming consists of defining functions that transform input data to produce + Buona parte della programmazione F# consiste nella definizione di funzioni che trasformano i dati di input per produrre + + + + useful results. + risultati utili. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Usare 'let' per definire una funzione. Questa accetta un argomento Integer e restituisce un intero. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Le parentesi sono facoltative per gli argomenti di funzione, ad eccezione dei casi in cui si usa un'annotazione di tipo esplicita. + + + + Apply the function, naming the function return result using 'let'. + Applicare la funzione, denominando il risultato restituito della funzione tramite 'let'. + + + + The variable type is inferred from the function return type. + Il tipo variabile viene dedotto dal tipo restituito della funzione. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Questa riga usa '%d' per stampare il risultato in formato Integer. È indipendente dai tipi. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Se il tipo di 'result1' non fosse 'int', la riga non verrebbe compilata. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + Quando necessario, annotare il tipo di un nome di parametro usando '(argument:type)'. Le parentesi sono obbligatorie. + + + + Conditionals use if/then/elid/elif/else. + Nelle istruzioni condizionali si usano if/then/elid/elif/else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Si noti che F# usa la sintassi con riconoscimento degli spazi vuoti di rientro, in modo analogo a linguaggi come Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Questa riga usa '%f' per stampare il risultato in formato float. Come con '%d' in precedenza, è indipendente dai tipi. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + I valori booleani sono tipi di dati fondamentali in F#. Ecco alcuni esempi di valori booleani e logica condizionale. + + + + To learn more, see: + Per altre informazioni, vedere: + + + + and + e + + + + Booleans values are 'true' and 'false'. + I valori booleani sono 'true' e 'false'. + + + + Operators on booleans are 'not', '&&' and '||'. + Gli operatori su valori booleani sono 'not', '&&' e '||'. + + + + This line uses '%b'to print a boolean value. This is type-safe. + Questa riga usa '%b' per stampare un valore booleano. È indipendente dai tipi. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Le stringhe sono tipi di dati fondamentali in F#. Ecco alcuni esempi di stringhe e di manipolazione di base delle stringhe. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Per le stringhe si usano le virgolette doppie. + + + + Strings can also use @ to create a verbatim string literal. + Nelle stringhe si può anche usare @ per creare un valore letterale di stringa verbatim. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + In questo modo i caratteri di escape, come '\', '\n', '\t' e così via, verranno ignorati. + + + + String literals can also use triple-quotes. + Nei valori letterali si possono usare anche virgolette triple. + + + + String concatenation is normally done with the '+' operator. + Per la concatenazione di stringhe viene in genere usato l'operatore '+'. + + + + This line uses '%s' to print a string value. This is type-safe. + Questa riga usa '%s' per stampare un valore stringa. È indipendente dai tipi. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Nelle sottostringhe si usa la notazione dell'indicizzatore. Questa riga estrae i primi sette caratteri come sottostringa. + + + + Note that like many languages, Strings are zero-indexed in F#. + Si noti che, analogamente a molti linguaggi, le stringhe presentano indice zero in F#. + + + + Tuples are simple combinations of data values into a combined value. + Le tuple sono semplici combinazioni di valori dati in un valore combinato. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Tupla di interi semplice. + + + + A function that swaps the order of two values in a tuple. + Funzione che scambia l'ordine di due valori in una tupla. + + + + F# Type Inference will automatically generalize the function to have a generic type, + L'inferenza del tipo di F# consentirà di generalizzare automaticamente la funzione in modo che il relativo tipo sia generico, + + + + meaning that it will work with any type. + per indicare che funzionerà con qualsiasi tipo. + + + + A tuple consisting of an integer, a string, + Tupla costituita da un intero, una stringa + + + + and a double-precision floating point number. + e un numero a virgola mobile a precisione doppia. + + + + A simple tuple of integers with a type annotation. + Tupla di interi semplice con annotazione di tipo. + + + + Type annotations for tuples use the * symbol to separate elements + Nelle annotazioni di tipo per le tuple si usa il simbolo * per separare gli elementi + + + + Tuples are normally objects, but they can also be represented as structs. + Le tuple sono in genere oggetti, ma possono essere rappresentate anche come struct. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Questi interagiscono completamente con gli struct in C# e Visual Basic.NET; tuttavia, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + le tuple di struct non sono convertibili in modo implicito con tuple di oggetto (spesso chiamate tuple di riferimento). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + A causa di questo problema la seconda riga sotto non verrà compilata. Rimuovere il commento per vedere cosa succede. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Anche se non è possibile eseguire la conversione in modo implicito tra tuple della struttura e tuple di riferimento, + + + + you can explicitly convert via pattern matching, as demonstrated below. + è possibile eseguire la conversione in modo esplicito tramite i criteri di ricerca, come illustrato di seguito. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Gli operatori pipe di F# ('|>', '<|' e così via) e gli operatori di composizione di F# ('>>', '<<') + + + + are used extensively when processing data. These operators are themselves functions + sono particolarmente usati durante l'elaborazione dati. Questi operatori sono di per sé funzioni + + + + which make use of Partial Application. + che usano l'applicazione parziale. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Per altre informazioni su questi operatori, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Per altre informazioni sull'applicazione parziale, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Calcola il quadrato di un valore. + + + + Adds 1 to a value. + Aggiunge 1 a un valore. + + + + Tests if an integer value is odd via modulo. + Testa se un valore intero è dispari tramite modulo. + + + + A list of 5 numbers. More on lists later. + Elenco di cinque numeri. Per altre informazioni sugli elenchi, vedere più avanti. + + + + Given a list of integers, it filters out the even numbers, + Dato un elenco di interi, filtra i numeri pari, + + + + squares the resulting odds, and adds 1 to the squared odds. + calcola i quadrati dei numeri dispari risultati e aggiunge 1 ai numeri dispari quadrati. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Uno dei modi più brevi per scrivere 'squareOddValuesAndAddOne' consiste nell'annidare ogni + + + + sub-result into the function calls themselves. + risultato secondario nelle chiamate di funzione stesse. + + + + This makes the function much shorter, but it's difficult to see the + In questo modo la funzione è molto più breve, ma risulta più difficile visualizzare + + + + order in which the data is processed. + l'ordine in cui vengono elaborati i dati. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Uno dei modi preferiti per scrivere 'squareOddValuesAndAddOne' consiste nell'usare gli operatori pipe di F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + In tal modo sarà possibile evitare risultati intermedi, ma si migliora la leggibilità + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + rispetto all'annidamento di chiamate di funzione come 'squareOddValuesAndAddOneNested' + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + È possibile abbreviare 'squareOddValuesAndAddOnePipeline' spostando la seconda chiamata a `List.map` + + + + into the first, using a Lambda Function. + nella prima usando una funzione lambda. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Si noti che le pipeline vengono usate anche all'interno della funzione lambda. Gli operatori pipe di F# + + + + can be used for single values as well. This makes them very powerful for processing data. + possono essere usati anche per singoli valori, di conseguenza sono particolarmente efficaci per l'elaborazione dei dati. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + È infine possibile evitare di accettare in modo esplicito 'values' come parametro usando '>>' + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + per comporre le due operazioni di base, ovvero filtrare i numeri pari, calcolare il quadrato e aggiungere 1. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Analogamente, anche la parte 'fun x -> ...' dell'espressione lambda non è necessaria perché 'x' viene semplicemente + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + definito in tale ambito in modo che sia possibile passarlo a una pipeline funzionale. In questo punto è quindi possibile + + + + there as well. + usare anche '>>'. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + Il risultato di 'squareOddValuesAndAddOneComposition' è di per sé un'altra funzione che accetta come input un + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + elenco di interi. Se si esegue 'squareOddValuesAndAddOneComposition' con un elenco + + + + of integers, you'll notice that it produces the same results as previous functions. + di interi, si noterà che consente di ottenere gli stessi risultati delle funzioni precedenti. + + + + This is using what is known as function composition. This is possible because functions in F# + Usa la cosiddetta composizione di funzione. Tale operazione è possibile perché in F# le funzioni + + + + use Partial Application and the input and output types of each data processing operation match + usano l'applicazione parziale e i tipi di input e output di ogni operazione di elaborazione dati corrispondono + + + + the signatures of the functions we're using. + alle firme delle funzioni usate. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Gli elenchi sono elenchi a un solo collegamento ordinati e non modificabili la cui valutazione è di tipo eager. + + + + This module shows various ways to generate lists and process lists with some functions + Questo modulo mostra diversi modi per generare elenchi ed elenchi i processi con alcune funzioni + + + + in the 'List' module in the F# Core Library. + nel modulo 'List' della libreria di base di F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Per definire gli elenchi si usa [ ... ]. Questo è un elenco vuoto. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Questo è un elenco con tre elementi. Per delimitare gli elementi sulla stessa riga, viene usato il punto e virgola (';'). + + + + You can also separate elements by placing them on their own lines. + È anche possibile delimitare gli elementi posizionandoli su righe distinte. + + + + This is a list of integers from 1 to 1000 + Questo è un elenco di numeri interi tra 1 e 1000 + + + + Lists can also be generated by computations. This is a list containing + Gli elenchi possono anche essere generati da calcoli. Questo è un elenco contenente + + + + all the days of the year. + tutti i giorni dell'anno. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Stampa i primi cinque elementi di 'daysList' usando 'List.take'. + + + + Computations can include conditionals. This is a list containing the tuples + I calcoli possono contenere istruzioni condizionali. Questo è un elenco contenente le tuple + + + + which are the coordinates of the black squares on a chess board. + che rappresentano le coordinate dei quadrati neri su una scacchiera. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Per trasformare gli elenchi, è possibile usare 'List.map' e altri combinatori di programmazione funzionale. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Questa definizione consente di produrre un nuovo elenco mediante la quadratura dei numeri in numberList, usando l'operatore pipeline + + + + operator to pass an argument to List.map. + per passare un argomento a List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Esistono molte altre combinazioni di elenco. L'istruzione seguente calcola la somma dei quadrati dei + + + + numbers divisible by 3. + numeri divisibili per 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Le matrici sono raccolte modificabili di dimensioni fisse di elementi dello stesso tipo. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Anche se sono simili agli elenchi (supportano l'enumerazione e contengono combinatori simili per l'elaborazione dati), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + sono in genere più veloci e supportano l'accesso casuale rapido. La maggiore velocità implica però una minore sicurezza perché questi elementi sono modificabili. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Questa è la matrice vuota. Si noti che la sintassi è simile a quella degli elenchi, ma viene usato `[| ... |]`. + + + + Arrays are specified using the same range of constructs as lists. + Per specificare le matrici viene usato lo stesso intervallo di costrutti degli elenchi. + + + + This is an array of numbers from 1 to 1000. + Questo è una matrice di numeri compresi tra 1 e 1000. + + + + This is an array containing only the words "hello" and "world". + Questa è una matrice contenente solo le parole "hello" e "world". + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Questa è una matrice inizializzata dall'indice e contenente i numeri pari compresi tra 0 e 2000. + + + + Sub-arrays are extracted using slicing notation. + Le sottomatrici vengono estratte mediante una notazione di sezionamento. + + + + You can loop over arrays and lists using 'for' loops. + Per eseguire il ciclo su matrici ed elenchi, si possono usare i cicli 'for'. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + È possibile modificare il contenuto di un elemento di matrice usando l'operatore di assegnazione freccia sinistra. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Per altre informazioni su questo operatore, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Per trasformare le matrici, è possibile usare 'Array.map' e altre operazioni di programmazione funzionale. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + Il codice seguente consente di calcolare la somma delle lunghezze delle parole che iniziano con 'h'. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Le sequenze sono costituite da una serie logica di elementi, tutti dello stesso tipo. Sono di un tipo più generale rispetto ad elenchi e matrici. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Le sequenze vengono valutate su richiesta e rivalutate ogni volta che vengono iterate. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Una sequenza F# è un alias dell'elemento System.Collections.Generic.IEnumerable<'T> di .NET. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Le funzioni di elaborazione della sequenza possono essere applicate anche a elenchi e matrici. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Questa è la sequenza vuota. + + + + This a sequence of values. + Questa è una sequenza di valori. + + + + This is an on-demand sequence from 1 to 1000. + Questa è una sequenza su richiesta compresa tra 1 e 1000. + + + + This is a sequence producing the words "hello" and "world" + Questa è una sequenza che produce le parole "hello" e "world" + + + + This sequence producing the even numbers up to 2000. + Questa è la sequenza che produce i numeri pari fino a 2000. + + + + This is an infinite sequence which is a random walk. + Questa è una sequenza infinita, ovvero un percorso casuale. + + + + This example uses yield! to return each element of a subsequence. + In questo esempio si usa yield! per restituire ogni elemento di una sottosequenza. + + + + This example shows the first 100 elements of the random walk. + Questo esempio mostra i primi 100 elementi del percorso casuale. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Le funzioni ricorsive possono chiamarsi da sole. In F# le funzioni sono ricorsive solo + + + + when declared using 'let rec'. + quando per la dichiarazione si usa 'let rec'. + + + + Recursion is the preferred way to process sequences or collections in F#. + La ricorsione è il modo preferito per elaborare sequenze o raccolte in F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Questo esempio mostra una funzione ricorsiva che calcola il fattoriale di un + + + + integer. It uses 'let rec' to define a recursive function. + numero intero. Usa 'let rec' per definire una funzione ricorsiva. + + + + Computes the greatest common factor of two integers. + Calcola il fattore comune maggiore di due interi. + + + + Since all of the recursive calls are tail calls, + Dal momento che tutte le chiamate ricorsive sono chiamate tail, + + + + the compiler will turn the function into a loop, + il compilatore convertirà la funzione in un ciclo, + + + + which improves performance and reduces memory consumption. + in modo da migliorare le prestazioni e ridurre il consumo di memoria. + + + + This example computes the sum of a list of integers using recursion. + Questo esempio consente di calcolare la somma di un elenco di interi usando la ricorsione. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + In questo modo la funzione tail 'sumList' viene resa ricorsiva, usando una funzione helper con un accumulatore di risultati. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Viene chiamata la funzione helper tail ricorsiva, fornendo '0' come accumulatore di seeding. + + + + An approach like this is common in F#. + Un approccio di questo tipo è comune in F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + I record sono un aggregato di valori denominati, con membri facoltativi, ad esempio metodi. + + + + They are immutable and have structural equality semantics. + Non sono modificabili e includono la semantica di uguaglianza strutturale. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Questo esempio mostra come definire un nuovo tipo di record. + + + + This example shows how to instantiate a record type. + Questo esempio mostra come creare un'istanza di un tipo di record. + + + + You can also do this on the same line with ';' separators. + È possibile eseguire questa operazione sulla stessa riga usando i separatori ';'. + + + + This example shows how to use "copy-and-update" on record values. It creates + Questo esempio mostra come usare il metodo di copia e aggiornamento su valori di record. Crea + + + + a new record value that is a copy of contact1, but has different values for + un nuovo valore di record che è una copia di contact1, ma contiene valori diversi per + + + + the 'Phone' and 'Verified' fields. + i campi 'Phone' e 'Verified'. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Questo esempio mostra come scrivere una funzione che elabora un valore di record. + + + + It converts a 'ContactCard' object to a string. + Converte un oggetto 'ContactCard' in una stringa. + + + + This is an example of a Record with a member. + Questo è un esempio di record con un membro. + + + + Members can implement object-oriented members. + I membri possono implementare membri orientati a oggetti. + + + + Members are accessed via the '.' operator on an instantiated type. + In un tipo di cui è stata creata un'istanza l'accesso ai membri avviene tramite l'operatore '.'. + + + + Records can also be represented as structs via the 'Struct' attribute. + I record possono essere rappresentati anche come struct tramite l'attributo 'Struct'. + + + + This is helpful in situations where the performance of structs outweighs + Questo comportamento è utile in situazioni in cui la prestazioni degli struct sono prioritarie rispetto alla + + + + the flexibility of reference types. + flessibilità dei tipi di riferimento. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Le unioni discriminate sono valori che potrebbero corrispondere a un certo numero di case o form denominati. + + + + Data stored in DUs can be one of several distinct values. + I dati archiviati nelle unioni discriminate possono essere uno di diversi valori distinti. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + L'istruzione seguente rappresenta il seme di una carta da gioco. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + È possibile usare un'unione discriminata anche per rappresentare il valore di una carta da gioco. + + + + Represents the rank of cards 2 .. 10 + Rappresenta il valore delle carte da 2 a 10 + + + + Discriminated Unions can also implement object-oriented members. + Le unioni discriminate possono inoltre implementare membri orientati a oggetti. + + + + This is a record type that combines a Suit and a Rank. + Questo è un tipo di record che combina un seme e un valore. + + + + It's common to use both Records and Disciminated Unions when representing data. + Per la rappresentazione dei dati si usano in genere record e unioni discriminate. + + + + This computes a list representing all the cards in the deck. + Calcola un elenco che rappresenta tutte le carte del mazzo. + + + + This example converts a 'Card' object to a string. + Questo esempio consente di convertire un oggetto 'Card' in una stringa. + + + + This example prints all the cards in a playing deck. + Questo esempio consente di stampare tutte le carte di un mazzo. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Le unioni discriminate a case singolo vengono spesso usate per la modellazione dei domini. In questo modo è possibile garantire una maggiore sicurezza dei tipi + + + + over primitive types such as strings and ints. + rispetto a tipi primitivi come stringhe e valori int. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Le unioni discriminate a case singolo non possono essere convertite in modo implicito nel o dal tipo di cui eseguono il wrapping. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Ad esempio, una funzione che accetta un indirizzo non può accettare come input una stringa, + + + + or vive/versa. + o viceversa. + + + + You can easily instantiate a single-case DU as follows. + È possibile creare facilmente un'istanza di una unione discriminata a case singolo come descritto di seguito. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Quando è necessario il valore, è possibile annullare il wrapping del valore sottostante con una funzione semplice. + + + + Printing single-case DUs is simple with unwrapping functions. + Le funzioni di unwrapping semplificano la stampa di unioni discriminate a case singolo. + + + + Disciminated Unions also support recursive definitions. + Le unioni discriminate supportano anche definizioni ricorsive. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Rappresenta un albero di ricerca binaria, in cui un caso è l'albero vuoto, + + + + and the other being a Node with a value and two subtrees. + e l'altro è un nodo con un valore e due sottoalberi. + + + + Check if an item exists in the binary search tree. + Verifica l'esistenza di un elemento nell'albero della ricerca binaria. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Esegue la ricerca in modo ricorsivo usando i criteri di ricerca. Restituisce true se esiste; in caso contrario, false. + + + + Check the left subtree. + Verifica il sottoalbero di sinistra. + + + + Check the right subtree. + Verifica il sottoalbero di destra. + + + + Inserts an item in the Binary Search Tree. + Inserisce un elemento nell'albero della ricerca binaria. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Trova la posizione da inserire in modo ricorsivo con i criteri di ricerca, quindi inserisce un nuovo nodo. + + + + If the item is already present, it does not insert anything. + Se l'elemento è già presente, non inserisce nulla. + + + + No need to insert, it already exists; return the node. + Non è necessario inserirla perché esiste già; restituisce il nodo. + + + + Call into left subtree. + Chiamata nel sottoalbero di sinistra. + + + + Call into right subtree. + Chiamata nel sottoalbero di destra. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Le unioni discriminate possono essere rappresentate anche come struct tramite l'attributo 'Struct'. + + + + This is helpful in situations where the performance of structs outweighs + Questo comportamento è utile in situazioni in cui la prestazioni degli struct sono prioritarie rispetto alla + + + + the flexibility of reference types. + flessibilità dei tipi di riferimento. + + + + However, there are two important things to know when doing this: + Quando si esegue questa operazione, è però importante conoscere due aspetti: + + + + 1. A struct DU cannot be recursively-defined. + 1. Un'unione discriminata di struct non può essere definita in modo ricorsivo. + + + + 2. A struct DU must have unique names for each of its cases. + 2. A ogni case di un'unione discriminata di struct deve essere assegnato un nome univoco. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + I criteri di ricerca sono una funzionalità di F# che consente di utilizzare i criteri, + + + + which are a way to compare data with a logical structure or structures, + che consentono di confrontare i dati con una o più strutture logiche, + + + + decompose data into constituent parts, or extract information from data in various ways. + scomporre i dati nelle parti costituenti o estrarre le informazioni dai dati in diversi modi. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + È quindi possibile intervenire sulla "forma" di un criterio tramite i criteri di ricerca. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Record per il nome e il cognome di una persona + + + + A Discriminated Union of 3 different kinds of employees + Unione discriminata di tre diversi tipi di dipendenti + + + + Count everyone underneath the employee in the management hierarchy, + Conta chiunque sotto il dipendente nella gerarchia di gestione, + + + + including the employee. + includendo il dipendente. + + + + Find all managers/executives named "Dave" who do not have any reports. + Trova tutti i manager/dirigenti il cui nome è "Dave" e per i quali non sono disponibili report. + + + + This uses the 'function' shorthand to as a lambda expression. + Usa la sintassi abbreviata di 'function' come espressione lambda. + + + + [] matches an empty list. + [] corrisponde a un elenco vuoto. + + + + '_' is a wildcard pattern that matches anything. + '_' è un carattere jolly che corrisponde a qualsiasi stringa. + + + + This handles the "or else" case. + Gestisce il caso "or else". + + + + You can also use the shorthand function construct for pattern matching, + Per i criteri di ricerca è anche possibile usare il costrutto di funzione a sintassi abbreviata, + + + + which is useful when you're writing functions which make use of Partial Application. + che risulta utile quando si scrivono funzioni che usano l'applicazione parziale. + + + + Define some more functions which parse with the helper function. + Consente di definire alcune altre funzioni che vengono analizzate con la funzione helper. + + + + Active Patterns are another powerful construct to use with pattern matching. + I criteri attivi sono un altro costrutto efficace da usare con i criteri di ricerca. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Consentono di partizionare i dati di input in form personalizzati, scomponendoli a livello del sito di chiamata dei criteri di ricerca. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + I criteri di ricerca con parola chiave 'function' e criteri attivi sono spesso simili a questi. + + + + Call the printer with some different values to parse. + Chiama la stampante con alcuni valori diversi da analizzare. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Il valore dell'opzione è qualsiasi valore con tag 'Some' o 'None'. + + + + They are used extensively in F# code to represent the cases where many other + Questi valori sono ampiamente utilizzati nel codice F# per rappresentare i casi in cui molti altri + + + + languages would use null references. + linguaggi utilizzerebbero riferimenti null. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + Consente innanzitutto di definire un codice postale definito tramite l'unione discriminata a case singolo. + + + + Next, define a type where the ZipCode is optional. + Definire quindi un tipo in cui l'elemento ZipCode è facoltativo. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Definire quindi un tipo di interfaccia che rappresenta un oggetto per calcolare la zona di spedizione per il codice postale del cliente, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + date le implementazioni per i metodi astratti 'getState' e 'getShippingZone'. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Calcolare quindi una zona di spedizione per un cliente usando un'istanza della calcolatrice. + + + + This uses combinators in the Option module to allow a functional pipeline for + Usa i combinatori del modulo Option per consentire una pipeline funzionale per + + + + transforming data with Optionals. + la trasformazione di dati con Optionals. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Le unità di misura consentono di annotare tipi numerici primitivi in modo indipendente dai tipi. + + + + You can then perform type-safe arithmetic on these values. + È quindi possibile eseguire operazioni aritmetiche indipendenti dai tipi su questi valori. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Aprire innanzitutto una raccolta di nomi di unità comuni + + + + Define a unitized constant + Definire una costante unificata + + + + Next, define a new unit type + Definire quindi un nuovo tipo di unità + + + + Conversion factor mile to meter. + Fattore di conversione da miglia a metri. + + + + Define a unitized constant + Definire una costante unificata + + + + Compute metric-system constant + Calcola la costante del sistema metrico + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + I valori che usano unità di misura possono essere usati come il tipo numerico primitivo per elementi come la stampa. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Le classi sono un modo per definire nuovi tipi di oggetto in F# e supportano costrutti standard orientati a oggetti. + + + + They can have a variety of members (methods, properties, events, etc.) + Possono includere numerosi membri (metodi, proprietà, eventi e così via) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Per altre informazioni sulle classi, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Per altre informazioni sui membri, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Semplice classe di vettore bidimensionale. + + + + The class's constructor is on the first line, + Il costruttore della classe si trova sulla prima riga + + + + and takes two arguments: dx and dy, both of type 'double'. + e accetta due argomenti, dx e dy, entrambi di tipo 'double'. + + + + This internal field stores the length of the vector, computed when the + In questo campo interno è archiviata la lunghezza del vettore, calcolata durante + + + + object is constructed + la costruzione dell'oggetto + + + + 'this' specifies a name for the object's self identifier. + 'this' specifica un nome per l'autoidentificatore dell'oggetto. + + + + In instance methods, it must appear before the member name. + Nei metodi di istanza, deve trovarsi prima del nome del membro. + + + + This member is a method. The previous members were properties. + Questo membro è un metodo. I membri precedenti erano proprietà. + + + + This is how you instantiate the Vector2D class. + In questo modo viene creata un'istanza della classe Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Consente di ottenere un nuovo oggetto vettore scalato senza modificare l'oggetto originale. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Le classi generiche consentono di definire tipi rispetto a un set di parametri di tipo. + + + + In the following, 'T is the type parameter for the class. + Nel codice seguente 'T è il parametro di tipo per la classe. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Questo campo interno archivia gli stati in un elenco. + + + + Add a new element to the list of states. + Aggiunge un nuovo elemento all'elenco degli stati. + + + + use the '<-' operator to mutate the value. + usare l'operatore '<-' per modificare il valore. + + + + Get the entire list of historical states. + Consente di ottenere l'intero elenco degli stati cronologici. + + + + Get the latest state. + Consente di ottenere l'ultimo stato. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Istanza 'int' della classe di rilevamento stato. Si noti che il parametro di tipo è dedotto. + + + + Add a state + Viene aggiunto uno stato + + + + Interfaces are object types with only 'abstract' members. + Le interfacce sono tipi di oggetto contenenti solo membri 'abstract'. + + + + Object types and object expressions can implement interfaces. + I tipi di oggetto e le espressioni di oggetto possono implementare interfacce. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Questo è un tipo che implementa IDisposable. + + + + This is the implementation of IDisposable members. + Questa è l'implementazione dei membri di IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + Questo è un oggetto che implementa IDisposable tramite un'espressione di oggetto + + + + Unlike other languages such as C# or Java, a new type definition is not needed + Diversamente da altri linguaggi, come C# o Java, non è necessaria una nuova definizione di tipo + + + + to implement an interface. + per implementare un'interfaccia. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + La libreria FSharp.Core definisce un intervallo di funzioni di elaborazione parallela. In questo caso + + + + you use some functions for parallel processing over arrays. + si usano alcune funzioni per l'elaborazione parallela sulle matrici. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Per altre informazioni, vedere: https://msdn.microsoft.com/it-it/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Definire innanzitutto una matrice di input. + + + + Next, define a functions that does some CPU intensive computation. + Definire quindi una funzione che esegue alcuni calcoli intensivi della CPU. + + + + Next, do a parallel map over a large input array. + Eseguire quindi un mapping parallelo su una matrice di input di grandi dimensioni. + + + + Next, print the results. + Stampare quindi i risultati. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Gli eventi sono un termine comune per la programmazione .NET, in particolare con le applicazioni Windows Form o WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Creare innanzitutto un'istanza dell'oggetto Event costituito dal punto di sottoscrizione (event.Publish) e dal trigger di evento (event.Trigger). + + + + Next, add handler to the event. + Aggiungere quindi il gestore all'evento. + + + + Next, trigger the event. + Attivare quindi l'evento. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Creare quindi un'istanza dell'oggetto Event che segue la convenzione .NET standard: (sender, EventArgs). + + + + Next, add a handler for this new event. + Aggiungere quindi un gestore per questo nuovo evento. + + + + Next, trigger this event (note that sender argument should be set). + Attivare quindi questo evento (si noti che è necessario impostare l'argomento sender). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf new file mode 100644 index 0000000000..0eda61edb1 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + このサンプルは、F# 言語の要素を紹介します。 + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + F# インタラクティブでコードを実行するには、コードの一部を強調表示して、Alt キーを押しながら Enter キーを押すか、右マウス ボタンをクリックし + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + [対話形式で実行]5D; を選択します。[表示]5D; メニューから F# インタラクティブ ウィンドウを開くことができます。 + + + + For more about F#, see: + F# の詳細については、次のページを参照してください: + + + + To see this tutorial in documentation form, see: + このチュートリアルをドキュメント形式で表示するには、次を参照してください: + + + + To learn more about applied F# programming, use + 適用された F# プログラミングの詳細については、次を使用します + + + + To install the Visual F# Power Tools, use + Visual F# Power Tools をインストールするには、次を使用します + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + [ツール]5D; --> [拡張機能と更新プログラム]5D; --> [オンライン]5D; と検索 + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + F# で使用するその他のテンプレートについては、Visual Studio の 'オンライン テンプレート' を参照してください。 + + + + 'New Project' --> 'Online Templates' + ([新しいプロジェクト]5D; --> [オンライン テンプレート]5D;) を参照してください。 + + + + F# supports three kinds of comments: + F# は、3 種類のコメントをサポートしています: + + + + 1. Double-slash comments. These are used in most situations. + 1. ダブルスラッシュ コメント。これはほとんどの場合に使用されます。 + + + + 2. ML-style Block comments. These aren't used that often. + 2. ML スタイル ブロック コメント。これはそれほど頻繁には使用されません。 + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. トリプル スラッシュ コメント。これは、関数や型などの文書化に使用されます。 + + + + They will appear as text when you hover over something which is decorated with these comments. + このコメントで修飾されているものをポイントすると、これがテキストとして表示されます。 + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + これは .NET スタイルの XML コメントもサポートしています。このコメントを使用すると、リファレンス ドキュメントを生成できます。 + + + + and they also allow editors (such as Visual Studio) to extract information from them. + また、(Visual Studio などの) エディターでそこから情報を抽出することもできます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + 'open' キーワードを使用して名前空間を開きます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + モジュールは、値、型、関数値などの、F# コードのグループ化です。 + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + コードをモジュールにグループ化することで、関連コードを 1 つにまとめて、プログラムでの名前の競合を回避することができます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + これは、サンプルの整数値です。 + + + + This is a sample floating point number. + これは、サンプルの浮動小数点数です。 + + + + This computed a new number by some arithmetic. Numeric types are converted using + 算術によって新しい数値が算出されました。数値型は以下を使用するよう変換されています + + + + functions 'int', 'double' and so on. + 関数の 'int'、'double' などです。 + + + + This is a list of the numbers from 0 to 99. + これは 0 ~ 99 の数値のリストです。 + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + これは、0 ~ 99 のすべての数値とその二乗を含むすべてのタプルのリストです。 + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + 次の行は、タプルを含むリストを出力します。一般的な出力に '%A' を使用しています。 + + + + This is a sample integer with a type annotation + これは、型の注釈付きのサンプルの整数です + + + + Values in F# are immutable by default. They cannot be changed + 既定では、F# の値は不変です。明示的に変更可能として指定しない限り、 + + + + in the course of a program's execution unless explicitly marked as mutable. + プログラムの実行の過程で変更することはできません。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + 'let' を介して値を名前にバインドすると、変更できなくなります。 + + + + The second line of code fails to compile because 'number' is immutable and bound. + コードの 2 番目の行は、'number' が変更できず、バインドされているため、コンパイルに失敗します。 + + + + Re-defining 'number' to be a different value is not allowed in F#. + F# では、'number' を別の値に再定義することはできません。 + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + 変更可能なバインド。これは 'otherNumber' の値を変更できるようにするために必要です。 + + + + When mutating a value, use '<-' to assign a new value. + 値を変換する場合は、'<-' を使用して新しい値を割り当てます。 + + + + You could not use '=' here for this purpose since it is used for equality + この場合、'=' は等価を示すために使用するため、ここで使用することはできません + + + + or other contexts such as 'let' or 'module' + または、'let' や 'module' などの他のコンテキスト + + + + Much of F# programming consists of defining functions that transform input data to produce + F# プログラミングの多くは、生成する入力データを変換する定義する関数で構成されています + + + + useful results. + 有用な結果。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + 関数を定義するには、'let' を使用します。これは整数の引数を受け取り、整数を返します。 + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + 明示的な型の注釈を使用する場合を除いて、かっこは関数引数では省略可能です。 + + + + Apply the function, naming the function return result using 'let'. + 関数を適用します。'let' を使用し、関数の戻り値の結果に名前を付けます。 + + + + The variable type is inferred from the function return type. + 変数の型は、関数の戻り値の型から推論されます。 + + + + This line uses '%d' to print the result as an integer. This is type-safe. + この行は '%d' を使用して結果を整数として出力します。これはタイプ セーフです。 + + + + If 'result1' were not of type 'int', then the line would fail to compile. + 'result1' が 'int' 型でなかった場合、行はコンパイルに失敗します。 + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + 必要であれば、'(引数:型)' を使用してパラメーター名の型に注釈を付けます。かっこは必須です。 + + + + Conditionals use if/then/elid/elif/else. + 条件は、if/then/elid/elif/else を使用します。 + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + F# は Python などの言語のように、空白のインデント対応構文を使用することに注意してください。 + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + この行は '%f' を使用して結果を浮動小数として出力します。上記の '%d' と同様に、これはタイプ セーフです。 + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + ブール値は F# の基本のデータ型です。ブール値と条件ロジックの例をいくつか示します。 + + + + To learn more, see: + 詳細については、次を参照してください: + + + + and + AND + + + + Booleans values are 'true' and 'false'. + ブール型の値は 'true' と 'false' です。 + + + + Operators on booleans are 'not', '&&' and '||'. + ブール値の演算子は 'not'、'&&'、および '||' です。 + + + + This line uses '%b'to print a boolean value. This is type-safe. + この行は '%b' を使用してブール値を出力します。これはタイプ セーフです。 + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + 文字列は F# の基本のデータ型です。文字列と基本的な文字列操作の例をいくつか示します。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + 文字列は二重引用符を使用します。 + + + + Strings can also use @ to create a verbatim string literal. + 文字列は @ を使用して、verbatim 文字列リテラルを作成することもできます。 + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + これは、'\'、'\n'、'\t' などのエスケープ文字を無視します。 + + + + String literals can also use triple-quotes. + 文字列リテラルは三重引用符を使用することもできます。 + + + + String concatenation is normally done with the '+' operator. + 通常、文字列の連結は '+' 演算子を使用して実行されます。 + + + + This line uses '%s' to print a string value. This is type-safe. + この行は、'%s' を使用して文字列値を出力します。これはタイプ セーフです。 + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + サブ文字列はインデクサー表記を使用します。この行はサブ文字列として最初の 7 文字を抽出します。 + + + + Note that like many languages, Strings are zero-indexed in F#. + 多くの言語と同様に、F# では、文字列のインデックスは 0 から始まることに注意してください。 + + + + Tuples are simple combinations of data values into a combined value. + タプルは、データ値と合計値の単純な組み合わせです。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + 整数のシンプルなタプルです。 + + + + A function that swaps the order of two values in a tuple. + タプルの 2 つの値の順序を入れ替える関数。 + + + + F# Type Inference will automatically generalize the function to have a generic type, + F# 型の推定は、ジェネリック型を持つように関数を自動的に一般化し、 + + + + meaning that it will work with any type. + 任意の型で動作することを意味します。 + + + + A tuple consisting of an integer, a string, + タプルを構成するのは、整数、文字列、 + + + + and a double-precision floating point number. + および倍精度浮動小数点数です。 + + + + A simple tuple of integers with a type annotation. + 型の注釈が指定された整数のシンプルなタプル。 + + + + Type annotations for tuples use the * symbol to separate elements + タプルの型の注釈では、要素を区切るために * の記号を使用します + + + + Tuples are normally objects, but they can also be represented as structs. + タプルは通常はオブジェクトですが、構造体として表すこともできます。 + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + C# と Visual Basic.NET では、これらは構造体と完全に相互運用されます。ただし、 + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + 構造体のタプルは、オブジェクト タプル (参照タプルと呼ばれることが多い) と暗黙的に変換できません。 + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + このため、以下の 2 番目の行はコンパイルに失敗します。発生する事象を確認するには、コメントを解除します。 + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + 構造体タプルと参照タプル間で暗黙的に変換することはできませんが、 + + + + you can explicitly convert via pattern matching, as demonstrated below. + 以下に示すように、パターン マッチングを使用して明示的に変換できます。 + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + F# パイプ演算子 ('|>'、'<|' など) と F# 合成演算子 ('>>'、'<<') + + + + are used extensively when processing data. These operators are themselves functions + は、データの処理時に幅広く使用されます。これらの演算子はそれ自体が関数であり、 + + + + which make use of Partial Application. + 部分適用を利用します。 + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + これらの演算子の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + 部分適用の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + 値を 2 乗します。 + + + + Adds 1 to a value. + 値に 1 を追加します。 + + + + Tests if an integer value is odd via modulo. + 剰余を使って整数値が奇数であるかどうかをテストします。 + + + + A list of 5 numbers. More on lists later. + 5 個の数値のリストです。リストの詳細については後述。 + + + + Given a list of integers, it filters out the even numbers, + 整数のリストを指定すると、偶数を除外し、 + + + + squares the resulting odds, and adds 1 to the squared odds. + 結果の奇数を 2 乗し、2 乗した奇数に 1 を加算します。 + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + 'squareOddValuesAndAddOne' を記述するためのより簡単な方法は、 + + + + sub-result into the function calls themselves. + それぞれのサブ結果を関数呼び出し自体に入れ子にすることです。 + + + + This makes the function much shorter, but it's difficult to see the + これにより、関数は大幅に短くなりますが、データが処理される順序を + + + + order in which the data is processed. + 判別するのは難しくなります。 + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + 'squareOddValuesAndAddOne' を記述するための推奨される方法は、F# パイプ演算子を使用する方法です。 + + + + This allows you to avoid creating intermediate results, but is much more readable + これにより、中間結果を作成しなくてもよくなります。また、 + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + 'squareOddValuesAndAddOneNested' のような関数呼び出しを入れ子にするよりもはるかに読みやすくすることができます + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + ラムダ関数を使用して、2 番目の `List.map` 呼び出しを先頭に移動することにより、 + + + + into the first, using a Lambda Function. + 'squareOddValuesAndAddOnePipeline' を短くすることができます。 + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + パイプラインはラムダ関数の内部でも使用されることに注意してください。F# パイプ演算子は、 + + + + can be used for single values as well. This makes them very powerful for processing data. + 単一の値にも使用できます。これにより、データ処理能力が向上します。 + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + 最後に、'>>' を使用して次の 2 つのコア操作を作成すると、'values' をパラメーターとして + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + 明示的に受け取る必要がなくなります: 偶数を除外してから、2 乗して 1 を加算する。 + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + 同様に、ラムダ式の 'fun x -> ...' ビットも必要ありません。 'x' は単に、 + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + 関数型パイプラインに渡すことができるようにそのスコープ内で定義されているだけだからです。そのため、 + + + + there as well. + そこでも同様に '>>' を使用できます。 + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + 'squareOddValuesAndAddOneComposition' の結果は、それ自体が別の関数です。その関数は、 + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + 整数のリストを入力として受け取ります。整数のリストを指定して 'squareOddValuesAndAddOneComposition' を + + + + of integers, you'll notice that it produces the same results as previous functions. + 実行すると、前の関数と同じ結果が生成されることがわかります。 + + + + This is using what is known as function composition. This is possible because functions in F# + これは、関数合成と呼ばれるものを使用しています。これが可能なのは、F# の関数が + + + + use Partial Application and the input and output types of each data processing operation match + 部分適用を使用しており、各データ処理操作の入力と出力の型が、使用している + + + + the signatures of the functions we're using. + 関数のシグネチャと一致するためです。 + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + リストは、順序指定された、変更できない単方向リストです。 リストは集中評価されます。 + + + + This module shows various ways to generate lists and process lists with some functions + このモジュールは、リストを生成し、F# コア ライブラリ内の 'List' モジュールに含まれる + + + + in the 'List' module in the F# Core Library. + いくつかの関数を使用してリストを処理するためのさまざまな方法を示しています。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + リストは [ ... ] を使用して定義されます。これは空のリストです。 + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + これは 3 つの要素を含むリストです。';' は同じ行にある要素を区切るために使用されます。 + + + + You can also separate elements by placing them on their own lines. + 要素は、それぞれの行に配置することで分割することもできます。 + + + + This is a list of integers from 1 to 1000 + これは 1 ~ 1000 の整数のリストです + + + + Lists can also be generated by computations. This is a list containing + リストは計算によっても生成できます。これは、次を含むリストです: + + + + all the days of the year. + 1 年のすべての日。 + + + + Print the first 5 elements of 'daysList' using 'List.take'. + 'List.take' を使用して 'daysList' の最初の 5 つの要素を出力します。 + + + + Computations can include conditionals. This is a list containing the tuples + 計算には条件を含めることができます。これはタプルを含むリストです + + + + which are the coordinates of the black squares on a chess board. + チェス盤の黒いマス目の座標のタプルを含むリストです。 + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + リストは 'List.map' と他の関数型プログラミング連結子を使用して変換することができます。 + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + この定義は、パイプラインを使用して numberList 内の数値を 2 乗することによって新しいリストを生成します + + + + operator to pass an argument to List.map. + 引数を List.map に渡す演算子です。 + + + + There are many other list combinations. The following computes the sum of the squares of the + 他に多くのリストの組み合わせがあります。次の二乗和をコンピューティングします: + + + + numbers divisible by 3. + 3 で割り切れる数。 + + + + Arrays are fixed-size, mutable collections of elements of the same type. + 配列は、型が同じ要素の固定サイズの変更可能なコレクションです。 + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + これらはリストと似ています (列挙型をサポートし、データ処理のための同様の連結子を備えています) が、 + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + 一般的により高速であり、高速ランダム アクセスをサポートしています。その代わり、変更可能であるため安全性が低下します。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + これは空の配列です。構文はリストの構文と似ていますが、代わりに `[| ... |]` を使用することにご注意ください。 + + + + Arrays are specified using the same range of constructs as lists. + 配列は、リストと同じコンストラクトの範囲を使用して指定されます。 + + + + This is an array of numbers from 1 to 1000. + これは 1 ~ 1000 の数値の配列です。 + + + + This is an array containing only the words "hello" and "world". + これは "hello" と "world" のみを含む配列です。 + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + これはインデックスによって初期化され、0 ~ 2000 の間の偶数を含む配列です。 + + + + Sub-arrays are extracted using slicing notation. + サブ配列はスライス表記法を使用して抽出されます。 + + + + You can loop over arrays and lists using 'for' loops. + 'for' ループを使用して、配列とリストに渡ってループできます。 + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + 左矢印代入演算子を使用して、配列要素の内容を変更できます。 + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + この演算子の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + 'Array.map' と他の関数型プログラミング操作を使用して、配列を変換できます。 + + + + The following calculates the sum of the lengths of the words that start with 'h'. + 以下は、'h' で始まる単語の長さの合計を計算します。 + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + シーケンスは論理的な一連の要素であり、すべてが同じ型です。これらはリストや配列よりも一般的な型です。 + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + シーケンスはオンデマンドで評価され、繰り返されるたびに再評価されます。 + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + F# シーケンスは .NET System.Collections.Generic.IEnumerable<'T> のエイリアスです。 + + + + Sequence processing functions can be applied to Lists and Arrays as well. + シーケンス処理関数はリストと配列にも適用できます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + これは空のシーケンスです。 + + + + This a sequence of values. + これは一連の値です。 + + + + This is an on-demand sequence from 1 to 1000. + これは 1 ~ 1000 のオンデマンドのシーケンスです。 + + + + This is a sequence producing the words "hello" and "world" + これは 単語 "hello" と "world" を生成するシーケンスです + + + + This sequence producing the even numbers up to 2000. + このシーケンスは、2000 までの偶数を生成します。 + + + + This is an infinite sequence which is a random walk. + これはランダム ウォークである無限シーケンスです。 + + + + This example uses yield! to return each element of a subsequence. + この例では、yield! を使用して、サブシーケンスの各要素を返します。 + + + + This example shows the first 100 elements of the random walk. + この例では、ランダム ウォークの最初の 100 要素を示します。 + + + + Recursive functions can call themselves. In F#, functions are only recursive + 再帰関数は自身を呼び出すことができます。F# では、関数は単に再帰的です + + + + when declared using 'let rec'. + 'let rec' を使用して宣言される場合。 + + + + Recursion is the preferred way to process sequences or collections in F#. + 再帰は、F# でシーケンスまたはコレクションを処理するための推奨される方法です。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + この例では、次の階乗をコンピューティングする再帰関数を示します + + + + integer. It uses 'let rec' to define a recursive function. + 整数。'let rec' を使用して、再帰関数を定義します。 + + + + Computes the greatest common factor of two integers. + 2 つの整数の最大公約数をコンピューティングします。 + + + + Since all of the recursive calls are tail calls, + すべての再帰呼び出しは末尾呼び出しであるため、 + + + + the compiler will turn the function into a loop, + コンパイラは関数をループにします + + + + which improves performance and reduces memory consumption. + これによりパフォーマンスが向上し、メモリの消費を抑えることができます。 + + + + This example computes the sum of a list of integers using recursion. + この例では、再帰を使用して整数のリストの合計をコンピューティングします。 + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + これは、ヘルパー関数を結果アキュムレータと共に使用して 'sumList' を末尾再帰にします。 + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + これは、シード アキュムレータとして '0' を指定して、末尾再帰的なヘルパー関数を呼び出します。 + + + + An approach like this is common in F#. + F# では、このようなアプローチは一般的です。 + + + + Records are an aggregate of named values, with optional members (such as methods). + レコードは、オプションのメンバー (メソッドなど) を含む名前付きの値の集約です。 + + + + They are immutable and have structural equality semantics. + これらは変更できず、構造上の等価セマンティクスを持ちます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + この例では、新しいレコード型を定義する方法を示します。 + + + + This example shows how to instantiate a record type. + この例では、レコードの種類をインスタンス化する方法を示します。 + + + + You can also do this on the same line with ';' separators. + ';' 区切りを使用して、同じ行でこれを行うこともできます。 + + + + This example shows how to use "copy-and-update" on record values. It creates + この例では、レコード値で "copy-and-update" を使用する方法を示します。次を作成します: + + + + a new record value that is a copy of contact1, but has different values for + contact1 のコピーであるレコード値。ただし、次の値は異なります: + + + + the 'Phone' and 'Verified' fields. + [電話番号]5D; および [検証済み]5D; フィールド。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + この例では、レコード値を処理する関数を書き込む方法を示します。 + + + + It converts a 'ContactCard' object to a string. + 'ContactCard' オブジェクトを文字列に変換します。 + + + + This is an example of a Record with a member. + これは、メンバーを含むレコードの例です。 + + + + Members can implement object-oriented members. + メンバーはオブジェクト指向のメンバーを実装できます。 + + + + Members are accessed via the '.' operator on an instantiated type. + メンバーには、インスタンス化された型に対する '.' 演算子を介してアクセスできます。 + + + + Records can also be represented as structs via the 'Struct' attribute. + レコードは 'Struct' 属性を介して構造体として表すこともできます。 + + + + This is helpful in situations where the performance of structs outweighs + これは、構造体のパフォーマンスが参照型の柔軟性よりも + + + + the flexibility of reference types. + 重要である場合に役立ちます。 + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + 判別共用体 (略して DU) は、多数の名前付きのフォームまたはケースである可能性のある値です。 + + + + Data stored in DUs can be one of several distinct values. + DU の格納データは、複数の個別の値のいずれかになります。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + たとえば、次は一揃いのトランプを表します。 + + + + A Disciminated Union can also be used to represent the rank of a playing card. + 判別共用体はトランプのランクを表すためにも使用できます。 + + + + Represents the rank of cards 2 .. 10 + 2 ~ 10 の札のランクを表します + + + + Discriminated Unions can also implement object-oriented members. + 判別共用体はオブジェクト指向のメンバーを実装することもできます。 + + + + This is a record type that combines a Suit and a Rank. + これは Suit と Rank を組み合わせたレコード型です。 + + + + It's common to use both Records and Disciminated Unions when representing data. + データを表すときには、レコードと判別共用体の両方を使用するのが一般的です。 + + + + This computes a list representing all the cards in the deck. + これは、一組のトランプのすべてのカードを表すリストをコンピューティングします。 + + + + This example converts a 'Card' object to a string. + この例では 'Card' オブジェクトを文字列に変換します。 + + + + This example prints all the cards in a playing deck. + この例では、一組のトランプのカードすべてを印刷します。 + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + 単一ケースの DU は、ドメイン モデリングで多く使用されます。これにより、文字列や整数などの + + + + over primitive types such as strings and ints. + プリミティブ型に加えて、さらにタイプ セーフが追加されます。 + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + 単一ケースの DU は、ラップする型との間で暗黙的に変換することはできません。 + + + + For example, a function which takes in an Address cannot accept a string as that input, + たとえば、アドレスを受け取る関数は文字列をその入力として受け入れることはできません + + + + or vive/versa. + (その逆もできません)。 + + + + You can easily instantiate a single-case DU as follows. + 次のように、単一ケースの DU のインスタンスを簡単に作成できます。 + + + + When you need the value, you can unwrap the underlying value with a simple function. + 値が必要な場合は、簡単な関数を使用して基になる値のラップを解除できます。 + + + + Printing single-case DUs is simple with unwrapping functions. + 単一ケースの DU は、関数のラップを解除するだけで出力できます。 + + + + Disciminated Unions also support recursive definitions. + 判別共用体は再帰的な定義もサポートしています。 + + + + This represents a Binary Search Tree, with one case being the Empty tree, + これはバイナリ検索ツリーを表します。片方のケースは空のツリーであり、 + + + + and the other being a Node with a value and two subtrees. + もう片方は値と 2 つのサブツリーを含む Node です。 + + + + Check if an item exists in the binary search tree. + バイナリ検索ツリーにアイテムが存在するかどうかを確認します。 + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + パターン マッチングを使用して再帰的に検索します。存在する場合は true を返し、そうでない場合は false を返します。 + + + + Check the left subtree. + 左側のサブツリーを確認します。 + + + + Check the right subtree. + 右側のサブツリーを確認します。 + + + + Inserts an item in the Binary Search Tree. + バイナリ検索ツリーにアイテムを挿入します。 + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + パターン マッチングを使用して再帰的に挿入する場所を検索し、新しいノードを挿入します。 + + + + If the item is already present, it does not insert anything. + アイテムが既に存在する場合は、何も挿入しません。 + + + + No need to insert, it already exists; return the node. + 既に存在しているため、挿入する必要はありません。ノードを返します。 + + + + Call into left subtree. + 左側のサブツリーに呼び出します。 + + + + Call into right subtree. + 右側のサブツリーに呼び出します。 + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + 判別共用体は、'Struct' 属性を介して構造体として表すこともできます。 + + + + This is helpful in situations where the performance of structs outweighs + これは、構造体のパフォーマンスが参照型の柔軟性よりも + + + + the flexibility of reference types. + 重要である場合に役立ちます。 + + + + However, there are two important things to know when doing this: + ただし、これを行うときに理解しておく必要のある重要な点が 2 つあります: + + + + 1. A struct DU cannot be recursively-defined. + 1. 構造体 DU は再帰的に定義できません。 + + + + 2. A struct DU must have unique names for each of its cases. + 2. 構造体 DU の名前は各ケースに対して一意である必要があります。 + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + パターン マッチングはパターンを使用できるようにする F# の機能です。 + + + + which are a way to compare data with a logical structure or structures, + これは、データと 1 つまたは複数の論理構造を比較したり、 + + + + decompose data into constituent parts, or extract information from data in various ways. + データを構成要素部分に分解したり、さまざまな方法でデータから情報を抽出したりするための方法です。 + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + その後、パターン マッチングを介してパターンの "形" でディスパッチできます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + 個人の姓および名のレコード + + + + A Discriminated Union of 3 different kinds of employees + 3 種類の社員の判別共用体 + + + + Count everyone underneath the employee in the management hierarchy, + 管理階層構造の中で、ある社員の下にいる全員の数を数えます + + + + including the employee. + (その社員自身を含む)。 + + + + Find all managers/executives named "Dave" who do not have any reports. + 名前が "Dave" で、レポートのないすべてのマネージャー/役員を検索します。 + + + + This uses the 'function' shorthand to as a lambda expression. + これは、ラムダ式として 'function' の短縮形を使用します。 + + + + [] matches an empty list. + [] は空白のリストに一致します。 + + + + '_' is a wildcard pattern that matches anything. + '_' は、任意のものに一致するワイルドカード パターンです。 + + + + This handles the "or else" case. + これは "or else" ケースを処理します。 + + + + You can also use the shorthand function construct for pattern matching, + パターン マッチングのために、短縮形の関数コンストラクトを使用することもできます。 + + + + which is useful when you're writing functions which make use of Partial Application. + これは、部分適用を利用する関数を記述している場合に役立ちます。 + + + + Define some more functions which parse with the helper function. + ヘルパー関数で解析する別の関数をいくつか定義します。 + + + + Active Patterns are another powerful construct to use with pattern matching. + アクティブなパターンは、パターン マッチングで使用するもう 1 つの強力なコンストラクトです。 + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + パターン マッチの呼び出しサイトで分解して、入力データをカスタム フォームにパーティション分割できるようにします。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + 'function' キーワードとアクティブ パターンによるパターン マッチングは、多くの場合、次のようになります。 + + + + Call the printer with some different values to parse. + 解析するいくつかの異なる値でプリンターを呼び出します。 + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + オプション値とは、'Some' または 'None' がタグされたあらゆる種類の値です。 + + + + They are used extensively in F# code to represent the cases where many other + F# コードで広く使用され、他の多くの言語で null 参照が使用される + + + + languages would use null references. + ケースを表します。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + まず、単一ケースの判別共用体を介して定義した郵便番号を定義します。 + + + + Next, define a type where the ZipCode is optional. + 次に、郵便番号が省略可能である型を定義します。 + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + 次に、オブジェクトを表すインターフェイスの型を定義して、顧客の郵便番号の出荷ゾーンをコンピューティングし、 + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + 'getState' および 'getShippingZone' 抽象メソッドの実装が指定されています。 + + + + Next, calculate a shipping zone for a customer using a calculator instance. + 次に、電卓のインスタンスを使用して顧客の出荷ゾーンを計算します。 + + + + This uses combinators in the Option module to allow a functional pipeline for + これは、オプション モジュール内の連結子を使用することにより、オプションを使用したデータ変換のために + + + + transforming data with Optionals. + 関数型パイプラインを使用できるようにします。 + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + 測定単位は、タイプ セーフな方法でプリミティブな数値型に注釈を付ける方法です。 + + + + You can then perform type-safe arithmetic on these values. + 次に、これらの値に対してタイプ セーフの算術を実行できます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + まず、共通の単位名のコレクションを開きます + + + + Define a unitized constant + 単位化された定数を定義します + + + + Next, define a new unit type + 次に、新しい単位の種類を定義します + + + + Conversion factor mile to meter. + マイルからメートルへの変換係数。 + + + + Define a unitized constant + 単位化された定数を定義します + + + + Compute metric-system constant + メートル法の定数をコンピューティングします + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + 測定単位を使用する値は、印刷などに対するプリミティブな数値型と同じように使用できます。 + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + クラスは、F# で新しいオブジェクト型を定義する方法であり、標準のオブジェクト指向のコンストラクトをサポートします。 + + + + They can have a variety of members (methods, properties, events, etc.) + さまざまなメンバー (メンバー、プロパティ、イベントなど) を含めることができます + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + クラスの詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + メンバーの詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + 単純な 2 次元のベクター クラス。 + + + + The class's constructor is on the first line, + クラスのコンストラクターは最初の行にあり、 + + + + and takes two arguments: dx and dy, both of type 'double'. + また、dx と dy の 2 つの引数を取ります。どちらも 'double' 型です。 + + + + This internal field stores the length of the vector, computed when the + この内部フィールドはベクトルの長さを格納します。これは、次の時点でにコンピューティングされます: + + + + object is constructed + オブジェクトが構築されます + + + + 'this' specifies a name for the object's self identifier. + 'this' は、オブジェクトの自己識別子の名前を指定します。 + + + + In instance methods, it must appear before the member name. + インスタンス メソッドでは、メンバー名の前に表示される必要があります。 + + + + This member is a method. The previous members were properties. + このメンバーはメソッドです。前のメンバーはプロパティでした。 + + + + This is how you instantiate the Vector2D class. + これは、Vector2D クラスのインスタンスを作成する方法です。 + + + + Get a new scaled vector object, without modifying the original object. + 元のオブジェクトを変更せずに、新しく調節されたベクター オブジェクトを取得します。 + + + + Generic classes allow types to be defined with respect to a set of type parameters. + ジェネリック クラスでは、型パラメーターのセットに対して型を定義することができます。 + + + + In the following, 'T is the type parameter for the class. + 以下では、'T はクラスの型パラメーターです。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + この内部フィールドは状態をリストに保存します。 + + + + Add a new element to the list of states. + 状態のリストに新しい要素を追加します。 + + + + use the '<-' operator to mutate the value. + '<-' 演算子を使用して、値を変換します。 + + + + Get the entire list of historical states. + 状態の履歴のリスト全体を取得します。 + + + + Get the latest state. + 最新の状態を取得します。 + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + 状態トラッカー クラスの 'int' インスタンス。型パラメーターは推論されていることに注意してください。 + + + + Add a state + 状態を追加します + + + + Interfaces are object types with only 'abstract' members. + インターフェイスは 'abstract' メンバーのみを持つオブジェクト型です。 + + + + Object types and object expressions can implement interfaces. + オブジェクト型とオブジェクト式はインターフェイスを実装できます。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + これは IDisposable を実装する型です。 + + + + This is the implementation of IDisposable members. + これは IDisposable メンバーの実装です。 + + + + This is an object that implements IDisposable via an Object Expression + これは、オブジェクト式を使用して IDisposable を実装するオブジェクトです + + + + Unlike other languages such as C# or Java, a new type definition is not needed + C# や Java などの他の言語とは異なり、インターフェイスを実装するために + + + + to implement an interface. + 新しい型定義は必要ありません。 + + + + The FSharp.Core library defines a range of parallel processing functions. Here + FSharp.Core ライブラリは並列処理関数の範囲を定義します。ここでは + + + + you use some functions for parallel processing over arrays. + アレイ全体で並列処理に対していくつかの関数を使用できます。 + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + 詳細については、次を参照してください: https://msdn.microsoft.com/ja-jp/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + まず、入力の配列です。 + + + + Next, define a functions that does some CPU intensive computation. + 次に、CPU 集約型の計算を実行する関数を定義します。 + + + + Next, do a parallel map over a large input array. + 次に、大きい入力配列に対して並列マップを実行します。 + + + + Next, print the results. + 次に、結果を印刷します。 + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + イベントは、特に WinForms または WPF アプリケーションでの .NET プログラミングの一般的な用法です。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + まず、サブスクリプション ポイント (event.Publish) およびイベント トリガー (event.Trigger) で構成されるイベント オブジェクトのインスタンスを作成します。 + + + + Next, add handler to the event. + 次に、ハンドラーをイベントに追加します。 + + + + Next, trigger the event. + 次に、イベントをトリガーします。 + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + 次に、標準的な .NET 表記規則に従うイベントのインスタンスを作成します: (sender, EventArgs)。 + + + + Next, add a handler for this new event. + 次に、この新しいイベントのハンドラーを追加します。 + + + + Next, trigger this event (note that sender argument should be set). + 次に、このイベントをトリガーします (sender 引数を設定する必要があります)。 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf new file mode 100644 index 0000000000..7e8e4a4de4 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + 이 샘플에서는 F# 언어의 요소에 대해 안내합니다. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + F# 대화형에서 코드를 실행하려면 코드 섹션을 강조 표시하고 <Alt+Enter>를 누르거나 마우스 오른쪽 단추를 클릭한 다음 + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + "대화형으로 실행"을 선택하세요. "보기" 메뉴에서 F# 대화형 창을 열 수 있습니다. + + + + For more about F#, see: + F#에 대한 자세한 내용은 다음을 참조하세요. + + + + To see this tutorial in documentation form, see: + 이 자습서를 설명서 형식으로 보려면 다음을 참조하세요. + + + + To learn more about applied F# programming, use + 적용된 F# 프로그래밍에 대해 자세히 알아보려면 다음을 사용하세요. + + + + To install the Visual F# Power Tools, use + Visual F# Power 도구를 설치하려면 다음을 사용하세요. + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + '도구' --> '확장 및 업데이트' --> `온라인`으로 이동하고 검색합니다. + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + F#과 함께 사용할 수 있는 추가 템플릿은 Visual Studio의 다음 위치에서 '온라인 템플릿'을 참조하세요. + + + + 'New Project' --> 'Online Templates' + '새 프로젝트' --> '온라인 템플릿' + + + + F# supports three kinds of comments: + F#에서는 세 가지 종류의 주석을 지원합니다. + + + + 1. Double-slash comments. These are used in most situations. + 1. 이중 슬래시 주석은 대부분의 경우에 사용됩니다. + + + + 2. ML-style Block comments. These aren't used that often. + 2. ML 스타일 블록 주석은 자주 사용되지 않습니다. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. 삼중 슬래시 주석은 함수, 형식 등을 설명하는 경우에 사용됩니다. + + + + They will appear as text when you hover over something which is decorated with these comments. + 이러한 주석으로 데코레이트된 항목 위에 마우스를 올리면 텍스트로 표시됩니다. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + 참조 문서를 생성할 수 있는 .NET 스타일 XML 주석도 지원하며, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + 또한 편집기(예: Visual Studio)에서 정보를 추출할 수 있도록 합니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + 'open' 키워드를 사용하여 네임스페이스를 엽니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + 모듈은 값, 형식, 함수 값 같은 F# 코드의 그룹화입니다. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + 모듈로 코드를 그룹화하면 관련 코드를 함께 유지하고 프로그램에서 이름 충돌을 방지하는 데 도움이 됩니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + 샘플 정수입니다. + + + + This is a sample floating point number. + 샘플 부동 소수점 숫자입니다. + + + + This computed a new number by some arithmetic. Numeric types are converted using + 산술을 사용하여 새 수를 계산했습니다. 숫자 형식은 + + + + functions 'int', 'double' and so on. + 'int', 'double' 등의 함수를 사용하여 변환됩니다. + + + + This is a list of the numbers from 0 to 99. + 0에서 99까지의 숫자 목록입니다. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + 0에서 99까지의 모든 숫자와 제곱을 포함하는 모든 튜플 목록입니다. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + 다음 줄은 제네릭 출력에 대해 '%A'을(를) 사용하여 튜플을 포함하는 목록을 출력합니다. + + + + This is a sample integer with a type annotation + 형식 주석이 있는 샘플 정수입니다. + + + + Values in F# are immutable by default. They cannot be changed + F#의 값은 기본적으로 변경할 수 없습니다. 변경 가능으로 + + + + in the course of a program's execution unless explicitly marked as mutable. + 명시적으로 표시되지 않는 한 프로그램 실행 중 변경할 수 없습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + 'let'을 통해 값을 이름에 바인딩하면 값을 변경할 수 없게 됩니다. + + + + The second line of code fails to compile because 'number' is immutable and bound. + 'number'는 변경이 불가능하고 바인딩되어 있으므로 코드의 두 번째 줄이 컴파일되지 않습니다. + + + + Re-defining 'number' to be a different value is not allowed in F#. + F#에서는 'number'를 다른 값으로 다시 정의할 수 없습니다. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + 변경할 수 있는 바인딩은 'otherNumber' 값을 변경하기 위해 필요합니다. + + + + When mutating a value, use '<-' to assign a new value. + 값을 변경할 때는 '<-'를 사용하여 새 값을 할당하세요. + + + + You could not use '=' here for this purpose since it is used for equality + '='이 같음에 대해 사용되지 않으므로 여기에서 이 용도로 '='을 사용할 수 없습니다. + + + + or other contexts such as 'let' or 'module' + 또는 'let'이나 'module' 같은 기타 컨텍스트 + + + + Much of F# programming consists of defining functions that transform input data to produce + 대부분의 F# 프로그래밍은 유용한 결과를 생성하기 위해 입력 데이터를 변환하는 함수 정의로 + + + + useful results. + 구성됩니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + 'let'을 사용하여 정수 인수를 받고 정수를 반환하는 함수를 정의합니다. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + 괄호는 명시적 형식 주석을 사용하는 경우 외에는 함수 인수에 선택적으로 사용할 수 있습니다. + + + + Apply the function, naming the function return result using 'let'. + 함수를 적용하고, 'let'을 사용하여 함수 반환 결과에 이름을 지정합니다. + + + + The variable type is inferred from the function return type. + 변수 형식은 함수 반환 형식에서 유추됩니다. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + 이 줄은 '%d'을(를) 사용하여 결과를 integer로 인쇄합니다. 이 코드는 형식이 안전합니다. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + 'result1'이 'int' 형식이 아닌 경우 줄이 컴파일되지 않습니다. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + 필요한 경우 '(argument:type)'을 사용하여 매개 변수 이름 형식에 대한 주석을 답니다. 괄호가 필요합니다. + + + + Conditionals use if/then/elid/elif/else. + 조건은 if/then/elid/elif/else를 사용합니다. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + F#은 Python과 같은 언어처럼 공백 들여쓰기 인식 구문을 사용합니다. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + 이 줄은 '%f'을(를) 사용하여 결과를 float으로 인쇄합니다. 위의 '%d'처럼 이 코드는 형식이 안전합니다. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + 부울은 F#에서 기본적인 데이터 형식입니다. 다음은 부울 및 조건부 논리의 몇 가지 예입니다. + + + + To learn more, see: + 자세히 알아보려면 다음을 참조하세요. + + + + and + 그리고 + + + + Booleans values are 'true' and 'false'. + 부울 값은 'true' 및 'false'입니다. + + + + Operators on booleans are 'not', '&&' and '||'. + 부울의 연산자는 'not', '&&' 및 '||'입니다. + + + + This line uses '%b'to print a boolean value. This is type-safe. + 이 줄은 '%b'을(를) 사용하여 부울 값을 인쇄합니다. 이 코드는 형식이 안전합니다. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + 문자열은 F#에서 기본적인 데이터 형식입니다. 다음은 문자열 및 기본 문자열 조작의 몇 가지 예입니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + 문자열은 큰따옴표를 사용합니다. + + + + Strings can also use @ to create a verbatim string literal. + 또한 문자열은 @을 사용하여 축자 문자열 리터럴을 만듭니다. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + 이 경우 '\', '\n', '\t' 등과 같은 이스케이프 문자열을 무시합니다. + + + + String literals can also use triple-quotes. + 또한 문자열 리터럴은 세 따옴표를 사용합니다. + + + + String concatenation is normally done with the '+' operator. + 문자열 연결은 일반적으로 '+' 연산자로 합니다. + + + + This line uses '%s' to print a string value. This is type-safe. + 이 줄은 '%s'을(를) 사용하여 문자열 값을 인쇄합니다. 이 코드는 형식이 안전합니다. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + 부분 문자열은 인덱서 표기법을 사용합니다. 이 줄은 처음 7개 문자를 부분 문자열로 추출합니다. + + + + Note that like many languages, Strings are zero-indexed in F#. + 다른 여러 언어처럼 F#에서는 문자열이 0으로 인덱싱됩니다. + + + + Tuples are simple combinations of data values into a combined value. + 튜플은 데이터 값을 조합된 값으로 만드는 간단한 조합입니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + 단순한 정수 튜플입니다. + + + + A function that swaps the order of two values in a tuple. + 튜플에 있는 두 값의 순서를 바꾸는 함수입니다. + + + + F# Type Inference will automatically generalize the function to have a generic type, + F# 형식 유추에서는 자동으로 함수를 제너릭 형식으로 일반화하므로, + + + + meaning that it will work with any type. + 모든 형식에 사용할 수 있습니다. + + + + A tuple consisting of an integer, a string, + 정수, 문자열 및 배정밀도 부동 소수점 + + + + and a double-precision floating point number. + 숫자로 구성된 튜플입니다. + + + + A simple tuple of integers with a type annotation. + 형식 주석이 포함된 단순한 정수 튜플입니다. + + + + Type annotations for tuples use the * symbol to separate elements + 튜플에 대한 형식 주석은 * 기호를 사용하여 요소를 구분합니다. + + + + Tuples are normally objects, but they can also be represented as structs. + 튜플은 일반적으로 개체이지만 구조체로 나타낼 수도 있습니다. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + 이러한 구조체는 C# 및 Visual Basic.NET의 구조체와 완벽히 상호 운용되지만, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + 구조체 튜플은 개체 튜플(참조 튜플이라고도 함)로 암시적인 변환을 할 수 없습니다. + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + 이로써 아래 두 번째 줄은 컴파일되지 않으며 결과를 확인하려면 이 줄의 주석 처리를 제거하세요. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + 구조체 튜플과 참조 튜플 간을 암시적으로 변환할 수 없지만, + + + + you can explicitly convert via pattern matching, as demonstrated below. + 아래 설명된 것처럼 패턴 일치를 통해 명시적으로 변환할 수 있습니다. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + F# 파이프 연산자('|>', '<|' 등) 및 F# 합성 연산자('>>', '<<')는 + + + + are used extensively when processing data. These operators are themselves functions + 데이터를 처리할 때 광범위하게 사용됩니다. 이러한 연산자는 자체가 함수이며 + + + + which make use of Partial Application. + 부분 애플리케이션을 사용합니다. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + 이러한 연산자에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + 부분 애플리케이션에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + 값을 제곱합니다. + + + + Adds 1 to a value. + 값에 1을 더합니다. + + + + Tests if an integer value is odd via modulo. + 모듈로를 통해 정수 값이 홀수인지 테스트합니다. + + + + A list of 5 numbers. More on lists later. + 5개 숫자 목록입니다. 추가 숫자는 나중에 표시됩니다. + + + + Given a list of integers, it filters out the even numbers, + 정수 목록인 경우 짝수를 필터링하고, + + + + squares the resulting odds, and adds 1 to the squared odds. + 결과 홀수를 제곱하고 제곱한 홀수에 1을 더합니다. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + 'squareOddValuesAndAddOne'을 더 짧게 작성하려면 + + + + sub-result into the function calls themselves. + 각 하위 결과를 함수 호출 자체에 중첩합니다. + + + + This makes the function much shorter, but it's difficult to see the + 그러면 함수가 더 짧아지지만 데이터가 처리되는 순서를 + + + + order in which the data is processed. + 알아보기 어렵습니다. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + 'squareOddValuesAndAddOne'을 작성하려면 기본적으로 F# 파이프 연산자를 사용합니다. + + + + This allows you to avoid creating intermediate results, but is much more readable + 그러면 중간 결과를 생성하지 않아도 되며 + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + 'squareOddValuesAndAddOneNested'와 같이 함수 호출을 중첩할 때보다 읽기도 쉽습니다. + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + 'squareOddValuesAndAddOnePipeline'을 줄이려면 두 번째 `List.map` 호출을 + + + + into the first, using a Lambda Function. + 람다 함수를 사용하여 첫 번째로 이동합니다. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + 파이프라인은 람다 함수 내에도 사용됩니다. F# 파이프 연산자는 + + + + can be used for single values as well. This makes them very powerful for processing data. + 단일 값에도 사용할 수 있습니다. 따라서 데이터 처리에 매우 유용합니다. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + 마지막으로 명시적으로 'values'를 매개 변수로 사용할 필요가 없습니다. '>>'를 사용하여 + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + 짝수를 필터링한 다음 제곱하고 1을 더하는 두 가지 핵심 작업을 작성하면 됩니다. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + 마찬가지로 'fun x -> ...' 람다 식도 필요하지 않습니다. 'x'를 해당 범위에서 간단히 + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + 정의하여 함수 파이프라인에 전달할 수 있기 때문입니다. 따라서 여기에서도 '>>'를 + + + + there as well. + 사용할 수 있습니다. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + 'squareOddValuesAndAddOneComposition'의 결과 자체도 정수 목록을 입력으로 사용하는 + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + 다른 함수입니다. 'squareOddValuesAndAddOneComposition'을 정수 목록을 사용하여 + + + + of integers, you'll notice that it produces the same results as previous functions. + 실행하는 경우 이전 함수와 동일한 결과를 생성합니다. + + + + This is using what is known as function composition. This is possible because functions in F# + 여기서는 이른바 함수 컴퍼지션을 사용합니다. 이것이 가능한 이유는 F#의 함수가 + + + + use Partial Application and the input and output types of each data processing operation match + 부분 애플리케이션을 사용하고 각 데이터 처리 작업의 입력 및 출력 형식이 사용 중인 함수의 + + + + the signatures of the functions we're using. + 시그니처와 일치하기 때문입니다. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + 순서가 지정되고 변경 불가능한 단일 연결 목록으로 즉시 평가됩니다. + + + + This module shows various ways to generate lists and process lists with some functions + 이 모듈에서는 F# 주요 라이브러리의 'List' 모듈에 있는 일부 함수를 사용하여 목록을 생성하고 + + + + in the 'List' module in the F# Core Library. + 목록을 처리하는 다양한 방법을 보여 줍니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + 목록은 [ ... ]을 사용하여 정의됩니다. 이것은 빈 목록입니다. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + 3개 요소가 포함된 목록입니다. 동일한 줄에서 ';'을 사용하여 요소를 구분합니다. + + + + You can also separate elements by placing them on their own lines. + 요소를 다른 줄에 배치하여 요소를 구분할 수도 있습니다. + + + + This is a list of integers from 1 to 1000 + 이것은 1에서 1000까지의 정수 리스트입니다. + + + + Lists can also be generated by computations. This is a list containing + 리스트는 계산에 의해서도 생성될 수 있습니다. 다음은 + + + + all the days of the year. + 연중 모든 날짜를 포함하는 리스트입니다. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + 'daysList'의 처음 5개 요소를 'List.take'를 사용하여 인쇄합니다. + + + + Computations can include conditionals. This is a list containing the tuples + 계산은 조건을 포함할 수 있습니다. 다음은 + + + + which are the coordinates of the black squares on a chess board. + 체스 보드에서 검은색 칸의 좌표를 가리키는 튜플이 포함된 리스트입니다. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + 리스트는 'List.map' 및 기타 함수 프로그래밍 조합기를 사용하여 변환될 수 있습니다. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + 이 정의는 인수를 List.map으로 전달하기 위해 파이프라인 연산자를 사용하여 numberList의 숫자를 + + + + operator to pass an argument to List.map. + 제곱하여 새 리스트를 생성합니다. + + + + There are many other list combinations. The following computes the sum of the squares of the + 다른 리스트 조합이 많이 있습니다. 다음은 + + + + numbers divisible by 3. + 3으로 나눠지는 수의 제곱의 합을 계산합니다. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + 배열은 고정 크기이며 같은 형식의 요소로 구성된 변경 가능한 컬렉션입니다. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + 배열은 목록과 마찬가지로 열거형을 지원하고 데이터 처리를 위한 유사한 조합기를 사용하지만, + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + 배열은 일반적으로 더 빠르고 빠른 임의 액세스를 지원합니다. 변경이 가능하므로 덜 안전하다는 단점은 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + 빈 배열입니다. 목록의 구문과 유사하지만 `[| ... |]`을 대신 사용합니다. + + + + Arrays are specified using the same range of constructs as lists. + 배열은 리스트와 같은 범위의 구문을 사용하여 지정됩니다. + + + + This is an array of numbers from 1 to 1000. + 1에서 1000까지의 숫자 배열입니다. + + + + This is an array containing only the words "hello" and "world". + "hello"와 "world"라는 단어만 포함된 배열입니다. + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + 0에서 2000까지의 짝수가 포함되고 인덱스로 초기화된 배열입니다. + + + + Sub-arrays are extracted using slicing notation. + 하위 배열은 조각화 표기법을 사용하여 추출됩니다. + + + + You can loop over arrays and lists using 'for' loops. + 'for' 루프를 사용하여 배열 및 목록을 반복할 수 있습니다. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + 왼쪽 화살표 대입 연산자를 사용하여 배열 요소의 내용을 수정할 수 있습니다. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + 이 연산자에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + 'Array'map' 및 기타 함수 프로그래밍 연산을 사용하여 배열을 변환할 수 있습니다. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + 다음은 'h'로 시작하는 단어 길이의 합을 계산합니다. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + 시퀀스는 모두 형식이 같은 요소가 논리적으로 연속되는 것입니다. 목록 및 배열보다 일반적인 형식입니다. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + 시퀀스는 요청 시 계산되며 반복될 때마다 다시 계산됩니다. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + F# 시퀀스는 .NET System.Collections.Generic.IEnumerable<'T>의 별칭입니다. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + 시퀀스 처리 함수는 리스트와 배열 모두에 적용할 수 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + 빈 시퀀스입니다. + + + + This a sequence of values. + 시퀀스 값입니다. + + + + This is an on-demand sequence from 1 to 1000. + 1에서 1000까지의 요청 시 시퀀스입니다. + + + + This is a sequence producing the words "hello" and "world" + "hello"와 "world"라는 단어를 생성하는 시퀀스입니다. + + + + This sequence producing the even numbers up to 2000. + 2000까지의 짝수를 생성하는 시퀀스입니다. + + + + This is an infinite sequence which is a random walk. + 임의 행로인 무한 시퀀스입니다. + + + + This example uses yield! to return each element of a subsequence. + 이 예에서는 yield!를 사용하여 하위 시퀀스의 각 요소를 반환합니다. + + + + This example shows the first 100 elements of the random walk. + 이 예에서는 임의 행로의 처음 100개 요소를 보여 줍니다. + + + + Recursive functions can call themselves. In F#, functions are only recursive + 재귀 함수는 자신을 호출할 수 있습니다. F#에서 함수는 + + + + when declared using 'let rec'. + 'let rec'을 사용하여 선언할 때에만 반복됩니다. + + + + Recursion is the preferred way to process sequences or collections in F#. + 재귀는 F#에서 시퀀스 또는 컬렉션을 처리하는 기본 방법입니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + 자세히 알아보려면 https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions를 참조하세요. + + + + This example shows a recursive function that computes the factorial of an + 이 예에서는 정수의 계승을 계산하는 재귀 함수를 보여 줍니다. + + + + integer. It uses 'let rec' to define a recursive function. + 'let rec'를 사용하여 재귀 함수를 정의합니다. + + + + Computes the greatest common factor of two integers. + 두 정수의 최대 공약수를 계산합니다. + + + + Since all of the recursive calls are tail calls, + 모든 재귀 호출은 마무리 호출이므로, + + + + the compiler will turn the function into a loop, + 컴파일러에서는 함수를 루프로 전환합니다. + + + + which improves performance and reduces memory consumption. + 루프는 성능을 향상시키고 메모리 소비량을 줄여 줍니다. + + + + This example computes the sum of a list of integers using recursion. + 이 예제에서는 재귀를 사용하여 정수 목록의 합을 계산합니다. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + 도우미 함수와 결과 누적기를 사용하여 'sumList'를 마무리 재귀 함수로 만듭니다. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + '0'을 시드 누적기로 제공하여 마무리 재귀 도우미 함수를 호출합니다. + + + + An approach like this is common in F#. + F#에서 이와 같은 접근 방식이 일반적입니다. + + + + Records are an aggregate of named values, with optional members (such as methods). + 레코드는 명명된 값의 집계이며, 필요에 따라 메서드와 같은 선택적 멤버도 포함합니다. + + + + They are immutable and have structural equality semantics. + 레코드는 변경 불가능하며 구조적으로 같음 의미 체계가 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + 이 예에서는 새 레코드 형식을 정의하는 방법을 보여 줍니다. + + + + This example shows how to instantiate a record type. + 이 예제에서는 레코드 형식을 인스턴스화하는 방법을 보여 줍니다. + + + + You can also do this on the same line with ';' separators. + 동일한 줄에서 ';' 구분 기호를 사용하여 이 작업을 수행할 수도 있습니다. + + + + This example shows how to use "copy-and-update" on record values. It creates + 이 예에서는 레코드 값에 "copy-and-update"를 사용하는 방법을 보여 줍니다. + + + + a new record value that is a copy of contact1, but has different values for + contact1의 복사본인 새 레코드 값을 만들지만 + + + + the 'Phone' and 'Verified' fields. + 'Phone'과 'Verified' 필드의 값이 다릅니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + 이 예에서는 레코드 값을 처리하는 함수를 작성하는 방법을 보여 줍니다. + + + + It converts a 'ContactCard' object to a string. + 'ContactCard' 개체를 문자열로 변환합니다. + + + + This is an example of a Record with a member. + 멤버가 하나인 레코드의 예제입니다. + + + + Members can implement object-oriented members. + 멤버는 개체 지향 멤버를 구현할 수 있습니다. + + + + Members are accessed via the '.' operator on an instantiated type. + 인스턴스화된 형식에서 '.' 연산자를 통해 멤버에 액세스합니다. + + + + Records can also be represented as structs via the 'Struct' attribute. + 'Struct' 특성을 통해 레코드를 구조체로 나타낼 수도 있습니다. + + + + This is helpful in situations where the performance of structs outweighs + 구조체 성능이 참조 형식의 유연성보다 중요한 경우에 + + + + the flexibility of reference types. + 유용합니다. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + 구분된 공용 구조체(줄여서 DU)는 여러 명명된 폼 또는 케이스일 수 있는 값입니다. + + + + Data stored in DUs can be one of several distinct values. + DU에 저장된 데이터는 여러 고유한 값 중 하나일 수 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + 다음은 플레인 카드의 짝패를 나타냅니다. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + 구분된 공용 구조체를 사용하여 플레잉 카드의 순위를 나타낼 수도 있습니다. + + + + Represents the rank of cards 2 .. 10 + 카드 2부터 10까지의 순위를 나타냅니다. + + + + Discriminated Unions can also implement object-oriented members. + 구분된 공용 구조체는 개체 지향 멤버도 구현할 수 있습니다. + + + + This is a record type that combines a Suit and a Rank. + 짝패와 순위를 조합하는 레코드 형식입니다. + + + + It's common to use both Records and Disciminated Unions when representing data. + 일반적으로 레코드와 구분된 공용 구조체를 모두 사용하여 데이터를 나타냅니다. + + + + This computes a list representing all the cards in the deck. + 데크에 있는 모든 카드를 나타내는 목록을 계산합니다. + + + + This example converts a 'Card' object to a string. + 이 예에서는 'Card' 개체를 문자열로 변환합니다. + + + + This example prints all the cards in a playing deck. + 이 예에서는 플레잉 데크의 모든 카드를 인쇄합니다. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + 단일 케이스 DU를 도메인 모델링에 사용하는 경우가 많습니다. 그러면 문자열 및 정수와 같은 + + + + over primitive types such as strings and ints. + 기본 형식보다 형식 안전성을 추가로 얻을 수 있습니다. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + 단일 케이스 DU를 래핑하는 형식으로 암시적으로 변환하거나 반대로 변환할 수 없습니다. + + + + For example, a function which takes in an Address cannot accept a string as that input, + 예를 들어 주소에서 사용하는 함수는 문자열을 입력으로 사용할 수 없으며, + + + + or vive/versa. + 그 반대도 마찬가지입니다. + + + + You can easily instantiate a single-case DU as follows. + 다음과 같이 단일 케이스 DU를 쉽게 인스턴스화할 수 있습니다. + + + + When you need the value, you can unwrap the underlying value with a simple function. + 값이 필요하면 간단한 함수로 내부 값을 래핑 해제할 수 있습니다. + + + + Printing single-case DUs is simple with unwrapping functions. + 래핑 해제 함수로 단일 케이스 DU를 간단히 인쇄할 수 있습니다. + + + + Disciminated Unions also support recursive definitions. + 구분된 공용 구조체는 재귀 정의도 지원합니다. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + 이진 검색 트리를 나타냅니다. 여기서 한 케이스는 빈 트리이고 + + + + and the other being a Node with a value and two subtrees. + 다른 케이스는 값과 두 개의 하위 트리를 포함하는 노드입니다. + + + + Check if an item exists in the binary search tree. + 이진 검색 트리에 항목이 있는지 확인합니다. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + 패턴 일치를 사용하여 재귀적으로 검색합니다. 있으면 true를 반환하고 그렇지 않은 경우 false를 반환합니다. + + + + Check the left subtree. + 왼쪽 하위 트리를 확인합니다. + + + + Check the right subtree. + 오른쪽 하위 트리를 확인합니다. + + + + Inserts an item in the Binary Search Tree. + 이진 검색 트리에 항목을 삽입합니다. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + 패턴 일치를 사용하여 재귀적으로 삽입할 위치를 찾은 다음 새 노드를 삽입합니다. + + + + If the item is already present, it does not insert anything. + 항목이 이미 있으면 아무 항목도 삽입하지 않습니다. + + + + No need to insert, it already exists; return the node. + 이미 항목이 있으므로 삽입할 필요가 없습니다. 노드를 반환합니다. + + + + Call into left subtree. + 왼쪽 하위 트리를 호출합니다. + + + + Call into right subtree. + 오른쪽 하위 트리를 호출합니다. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + 'Struct' 특성을 통해 구분된 공용 구조체를 구조체로 나타낼 수도 있습니다. + + + + This is helpful in situations where the performance of structs outweighs + 구조체 성능이 참조 형식의 유연성보다 중요한 경우에 + + + + the flexibility of reference types. + 유용합니다. + + + + However, there are two important things to know when doing this: + 하지만 이 작업을 수행할 때는 다음 두 가지 중요한 사항을 알고 있어야 합니다. + + + + 1. A struct DU cannot be recursively-defined. + 1. 구조체 DU는 재귀적으로 정의할 수 없습니다. + + + + 2. A struct DU must have unique names for each of its cases. + 2. 각 케이스마다 구조체 DU의 이름이 고유해야 합니다. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + 패턴 일치는 패턴을 활용할 수 있는 F#의 기능이며, + + + + which are a way to compare data with a logical structure or structures, + 패턴을 사용하면 데이터를 논리 구조와 비교하거나, + + + + decompose data into constituent parts, or extract information from data in various ways. + 데이터를 구성 부분으로 분해하거나, 다양한 방법으로 데이터에서 정보를 추출할 수 있습니다. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + 그런 다음 패턴 일치를 사용하여 패턴의 "모양"을 디스패치할 수 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + 사람의 성과 이름에 대한 레코드입니다. + + + + A Discriminated Union of 3 different kinds of employees + 세 가지 다른 직원 유형이 있는 구분된 공용 구조체 + + + + Count everyone underneath the employee in the management hierarchy, + 관리 계층 구조에서 이 직원을 포함하여 이 아래에 있는 모든 직원의 수를 + + + + including the employee. + 셉니다. + + + + Find all managers/executives named "Dave" who do not have any reports. + 이름이 "Dave"이고 부하직원이 없는 모든 관리자/간부를 찾습니다. + + + + This uses the 'function' shorthand to as a lambda expression. + 여기서는 'function' 약어를 람다 식으로 사용합니다. + + + + [] matches an empty list. + []는 빈 목록과 일치합니다. + + + + '_' is a wildcard pattern that matches anything. + '_'는 모든 항목과 일치하는 와일드카드 패턴입니다. + + + + This handles the "or else" case. + 이 와일드카드 패턴은 "or else" 케이스를 처리합니다. + + + + You can also use the shorthand function construct for pattern matching, + 패턴 일치에 약어 형식 함수 구문을 사용할 수도 있습니다. + + + + which is useful when you're writing functions which make use of Partial Application. + 이 구문은 부분 애플리케이션을 사용하는 함수를 작성할 때 유용합니다. + + + + Define some more functions which parse with the helper function. + 도우미 함수를 사용하여 구문 분석하는 함수를 더 정의합니다. + + + + Active Patterns are another powerful construct to use with pattern matching. + 활성 패턴은 패턴 일치와 함께 사용하면 유용한 다른 구문입니다. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + 활성 패턴을 사용하면 입력 데이터를 사용자 지정 폼으로 분할하고, 패턴 일치 호출 사이트에서 이 폼을 분해할 수 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + 'function' 키워드 및 활성 패턴을 통한 패턴 일치는 이처럼 보이는 경우가 많습니다. + + + + Call the printer with some different values to parse. + 구문 분석할 다른 값을 사용하여 프린터를 호출합니다. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + 옵션 값에는 'Some' 또는 'None'으로 태그 처리된 모든 종류의 값을 사용할 수 있습니다. + + + + They are used extensively in F# code to represent the cases where many other + F# 코드에서 광범위하게 사용되어 다른 언어에서는 null 참조를 사용하는 케이스를 + + + + languages would use null references. + 나타냅니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + 먼저 단일 케이스 구분된 공용 구조체를 통해 정의된 우편 번호를 정의합니다. + + + + Next, define a type where the ZipCode is optional. + 다음으로 ZipCode가 선택 사항인 형식을 정의합니다. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + 그리고 고객의 우편 번호에 대한 배송 영역을 계산하기 위해 개체를 나타내는 인터페이스 형식을 정의합니다. + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + 고객의 우편 번호에 대한 쇼핑 지역을 계산하는 추상 클래스입니다. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + 다음으로 계산기 인스턴스를 사용하여 고객의 배송 영역을 계산합니다. + + + + This uses combinators in the Option module to allow a functional pipeline for + 여기서는 Option 모듈 내의 조합기를 사용하여 함수 파이프라인에서 + + + + transforming data with Optionals. + Optionals를 통해 데이터를 변환할 수 있게 합니다. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + 측정 단위를 사용하면 형식이 안전한 방식으로 기본 숫자 형식에 주석을 달 수 있습니다. + + + + You can then perform type-safe arithmetic on these values. + 그런 다음 이러한 값에 대해 형식이 안전한 산술 연산을 수행할 수 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + 먼저 일반적인 단위 이름의 컬렉션을 엽니다. + + + + Define a unitized constant + 결합된 상수 정의 + + + + Next, define a new unit type + 다음으로 새 단위 형식을 정의합니다. + + + + Conversion factor mile to meter. + 마일 대 미터 변환 비율입니다. + + + + Define a unitized constant + 결합된 상수 정의 + + + + Compute metric-system constant + 미터 단위 상수를 계산합니다. + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + 측정 단위를 사용하는 값은 인쇄와 같은 작업에 기본 숫자 형식처럼 사용할 수 있습니다. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + 클래스는 F#에서 새 개체 형식을 정의하는 방법이며 표준 개체 지향 구문을 지원합니다. + + + + They can have a variety of members (methods, properties, events, etc.) + 클래스는 다양한 멤버(메서드, 속성, 이벤트 등)를 포함할 수 있습니다. + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + 클래스에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + 멤버에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + 단순한 2차원 벡터 클래스입니다. + + + + The class's constructor is on the first line, + 클래스의 생성자는 첫 줄에 있고, + + + + and takes two arguments: dx and dy, both of type 'double'. + 'double' 형식의 두 인수 dx 및 dy를 사용합니다. + + + + This internal field stores the length of the vector, computed when the + 이 내부 필드는 개체가 생성될 때 계산된 벡터 길이를 + + + + object is constructed + 저장합니다. + + + + 'this' specifies a name for the object's self identifier. + 'this'는 개체 자체의 식별자에 대한 이름을 지정합니다. + + + + In instance methods, it must appear before the member name. + 인스턴스 메서드에서는 멤버 이름 앞에 와야 합니다. + + + + This member is a method. The previous members were properties. + 이 멤버는 메서드입니다. 이전 멤버는 속성이었습니다. + + + + This is how you instantiate the Vector2D class. + Vector2D 클래스를 인스턴스화하는 방법은 다음과 같습니다. + + + + Get a new scaled vector object, without modifying the original object. + 원래 개체를 수정하지 않고 비율이 조정된 새 벡터 개체를 가져옵니다. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + 제네릭 클래스를 통해 형식 매개변수 집합에 대해 형식을 정의할 수 있습니다. + + + + In the following, 'T is the type parameter for the class. + 다음에서 'T는 클래스의 형식 매개 변수입니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + 이 내부 필드는 목록에 상태를 저장합니다. + + + + Add a new element to the list of states. + 상태 리스트에 새 요소를 추가합니다. + + + + use the '<-' operator to mutate the value. + '<-' 연산자를 사용하여 값을 변경합니다. + + + + Get the entire list of historical states. + 기록 상태의 전체 목록을 가져옵니다. + + + + Get the latest state. + 최신 상태를 가져옵니다. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + 상태 추적기 클래스의 'int' 인스턴스입니다. 형식 매개 변수는 유추됩니다. + + + + Add a state + 상태를 추가합니다. + + + + Interfaces are object types with only 'abstract' members. + 인터페이스는 '추상' 멤버만 있는 개체 형식입니다. + + + + Object types and object expressions can implement interfaces. + 개체 형식 및 개체 식은 인터페이스를 구현할 수 있습니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + IDisposable를 구현하는 형식입니다. + + + + This is the implementation of IDisposable members. + IDisposable 멤버의 구현입니다. + + + + This is an object that implements IDisposable via an Object Expression + 개체 식을 통해 IDisposable을 구현하는 개체입니다. + + + + Unlike other languages such as C# or Java, a new type definition is not needed + C# 또는 Java와 같은 다른 언어와 달리 인터페이스를 구현하기 위해 새 형식 정의가 + + + + to implement an interface. + 필요하지 않습니다. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + FSharp.Core 라이브러리는 병렬 처리 함수 범위를 정의합니다. + + + + you use some functions for parallel processing over arrays. + 여기에서 배열에 대해 병렬 처리 함수를 사용합니다. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + 자세히 알아보려면 다음을 참조하세요. https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + 먼저 입력 배열입니다. + + + + Next, define a functions that does some CPU intensive computation. + 다음으로 CPU를 많이 사용하는 계산을 수행하는 함수를 정의합니다. + + + + Next, do a parallel map over a large input array. + 다음으로 큰 입력 배열에 대해 병렬 맵을 수행합니다. + + + + Next, print the results. + 다음으로 결과를 인쇄합니다. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + 이벤트는 특히 WinForms 또는 WPF 애플리케이션을 사용하는 .NET 프로그래밍에서 일반적으로 사용되는 말입니다. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + 먼저 구독 지점(event.Publish)과 이벤트 트리거(event.Trigger)로 구성된 Event 개체의 인스턴스를 만듭니다. + + + + Next, add handler to the event. + 다음으로 이벤트에 처리기를 추가합니다. + + + + Next, trigger the event. + 다음으로 이벤트를 트리거합니다. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + 다음으로 표준 .NET 규칙(sender, EventArgs)을 따르는 Event의 인스턴스를 만듭니다. + + + + Next, add a handler for this new event. + 다음으로 이 새 이벤트에 대한 처리기를 추가합니다. + + + + Next, trigger this event (note that sender argument should be set). + 다음으로 이 이벤트를 트리거합니다(sender 인수를 설정해야 함). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf new file mode 100644 index 0000000000..9ee0ae09ae --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Ten przykład zawiera opis elementów języka F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Aby wykonać kod w programie F# Interactive, zaznacz sekcję kodu i naciśnij kombinację klawiszy Alt-Enter lub kliknij prawym przyciskiem myszy, + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + a następnie wybierz opcję „Wykonaj w trybie interaktywnym”. Okno narzędzia F# Interactive można otworzyć z menu „Widok”. + + + + For more about F#, see: + Aby uzyskać więcej informacji o języku F#, zobacz: + + + + To see this tutorial in documentation form, see: + Aby wyświetlić ten samouczek w formie dokumentacji, zobacz: + + + + To learn more about applied F# programming, use + Aby dowiedzieć się więcej o programowaniu w języku F# w praktyce, użyj + + + + To install the Visual F# Power Tools, use + Aby zainstalować narzędzia Visual F# Power Tools, użyj + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + „Narzędzia” --> „Rozszerzenia i aktualizacje” --> „Online” i wyszukaj + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Aby uzyskać informacje o dodatkowych szablonach do użycia w języku F#, zobacz sekcję dotyczącą szablonów w trybie online w programie Visual Studio, + + + + 'New Project' --> 'Online Templates' + „Nowy projekt” --> „Szablony w trybie online” + + + + F# supports three kinds of comments: + Język F# obsługuje trzy rodzaje komentarzy: + + + + 1. Double-slash comments. These are used in most situations. + 1. Komentarze z podwójnym ukośnikiem. Są używane w większości sytuacji. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Komentarze blokowe w stylu ML. Nie są używane zbyt często. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Komentarze z potrójnymi ukośnikami. Są używane do dokumentowania funkcji, typów itd. + + + + They will appear as text when you hover over something which is decorated with these comments. + Będą wyświetlane jako tekst po zatrzymaniu wskaźnika myszy nad tym, do czego zostały dodane. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Obsługują także komentarze XML w stylu programu .NET, które pozwalają na generowanie dokumentacji referencyjnej, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + a także umożliwiają edytorom (takim jak program Visual Studio) na wydobywanie z nich informacji. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Otwieraj przestrzenie nazw, używając słowa kluczowego „open”. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Moduł to zbiór kodu w języku F#, takiego jak wartości, typy i wartości funkcji. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Grupowanie kodu w modułach pomaga trzymać razem powiązany kod i unikać konfliktów nazw w programie. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + To jest przykładowa liczba całkowita. + + + + This is a sample floating point number. + To jest przykładowa liczba zmiennoprzecinkowa. + + + + This computed a new number by some arithmetic. Numeric types are converted using + To obliczyło nową liczbę, wykonując pewne operacje arytmetyczne. Typy liczbowe są konwertowane za pomocą + + + + functions 'int', 'double' and so on. + funkcji „int”, „double” itd. + + + + This is a list of the numbers from 0 to 99. + To jest lista liczb od 0 do 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + To jest lista wszystkich krotek zawierających wszystkie liczby od 0 do 99 i ich kwadraty. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + Następny wiersz wyświetla listę z krotkami, używając symbolu „%A” do wyświetlania ogólnego. + + + + This is a sample integer with a type annotation + To jest przykładowa liczba całkowita z adnotacją typu + + + + Values in F# are immutable by default. They cannot be changed + Wartości w języku F# są domyślnie niezmienialne. Nie można ich modyfikować + + + + in the course of a program's execution unless explicitly marked as mutable. + w trakcie wykonywania programu, chyba że zostaną jawnie oznaczone jako zmienialne. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Powiązanie wartości z nazwą za pomocą polecenia „let” sprawia, że będzie ona niezmienna. + + + + The second line of code fails to compile because 'number' is immutable and bound. + Nie można skompilować drugiego wiersza kodu, ponieważ element „number” jest niezmienny i powiązany. + + + + Re-defining 'number' to be a different value is not allowed in F#. + Ponowne definiowanie elementu „number” na inną wartość nie jest dozwolone w języku F#. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Modyfikowalne powiązanie. Jest to wymagane w celu modyfikowania wartości elementu „otherNumber”. + + + + When mutating a value, use '<-' to assign a new value. + Podczas modyfikowania wartości użyj strzałki „<-”, aby przydzielić nową wartość. + + + + You could not use '=' here for this purpose since it is used for equality + Nie możesz w tym celu użyć tutaj znaku „=”, ponieważ jest on używany do oznaczania równości + + + + or other contexts such as 'let' or 'module' + lub innych kontekstów, np. „let” lub „module” + + + + Much of F# programming consists of defining functions that transform input data to produce + Duża część programowania w języku F# to definiowanie funkcji, które przekształcają dane wejściowe w celu utworzenia + + + + useful results. + przydatne wyniki. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Polecenia „let” używa się do definiowania funkcji. To polecenie akceptuje argument w postaci liczby całkowitej i zwraca liczbę całkowitą. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Nawiasy są opcjonalne w przypadku argumentów funkcji, z wyjątkiem użycia jawnego typu adnotacji. + + + + Apply the function, naming the function return result using 'let'. + Zastosuj funkcję i nadaj jej wynikowi zwrotnemu nazwę, używając instrukcji „let”. + + + + The variable type is inferred from the function return type. + Typ zmiennej jest wywnioskowany na podstawie zwracanego typu funkcji. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Ten wiersz używa elementu „%d”, aby wydrukować wynik jako liczbę całkowitą. Jest to bezpieczne. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Jeśli element „result1” nie miałby typu „int”, kompilacja wiersza zakończyłaby się niepowodzeniem. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + W razie potrzeby adnotuj typ nazwy parametru przy użyciu polecenia „(argument:typ)”. Nawiasy są wymagane. + + + + Conditionals use if/then/elid/elif/else. + Wyrażenia warunkowe używają słów kluczowych if/then/elid/elif/else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Należy zauważyć, że język F# używa składni uwzględniającej wcięcia w postaci odstępów, tak jak w przypadku języków podobnych do języka Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Ten wiersz używa elementu „%f”, aby wydrukować wynik jako liczbę zmiennoprzecinkową. Podobnie jak w przypadku elementu „%d” powyżej jest to bezpieczne. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Wartości logiczne są fundamentalnymi typami danych w języku F#. Oto kilka przykładów wartości logicznych i logiki warunkowej. + + + + To learn more, see: + Aby dowiedzieć się więcej, zobacz: + + + + and + oraz + + + + Booleans values are 'true' and 'false'. + Wartości logiczne przyjmują wartość „true” i „false”. + + + + Operators on booleans are 'not', '&&' and '||'. + Operatory wartości logicznych to „not”, „&&” i „||”. + + + + This line uses '%b'to print a boolean value. This is type-safe. + Ten wiersz używa elementu „%b”, aby wydrukować wartość logiczną. Jest to bezpieczne. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Ciągi są fundamentalnymi typami danych w języku F#. Oto kilka przykładów ciągów i podstawowych manipulacji ciągami. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Ciągi używają cudzysłowów. + + + + Strings can also use @ to create a verbatim string literal. + W ciągach można także używać znaku @ do tworzenia dosłownych literałów ciągu. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Spowoduje to ignorowanie znaków ucieczki, np. „\”, „\n”, „\t” itp. + + + + String literals can also use triple-quotes. + Literały ciągu mogą także używać potrójnych cudzysłowów. + + + + String concatenation is normally done with the '+' operator. + Łączenie ciągów wykonuje się zazwyczaj przy użyciu operatora „+”. + + + + This line uses '%s' to print a string value. This is type-safe. + Ten wiersz używa elementu „%s”, aby wydrukować wartość ciągu. Jest to bezpieczne. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Podciągi używają notacji indeksatora. Ten wiersz wyodrębnia pierwsze 7 znaków w formie podciągu. + + + + Note that like many languages, Strings are zero-indexed in F#. + Należy zauważyć, że w języku F# ciągi znaków są indeksowane od zera, podobnie jak w wielu innych językach. + + + + Tuples are simple combinations of data values into a combined value. + Krotki to proste kombinacje wartości danych tworzące połączoną wartość. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Prosta krotka liczb całkowitych. + + + + A function that swaps the order of two values in a tuple. + Funkcja zamieniająca kolejność dwóch wartości w krotce. + + + + F# Type Inference will automatically generalize the function to have a generic type, + Wnioskowanie o typie języka F# będzie automatycznie uogólniać funkcję do typu ogólnego, + + + + meaning that it will work with any type. + co oznacza, że będzie działać z dowolnym typem. + + + + A tuple consisting of an integer, a string, + Krotka składająca się z liczby całkowitej, ciągu + + + + and a double-precision floating point number. + i liczby zmiennoprzecinkowej podwójnej precyzji. + + + + A simple tuple of integers with a type annotation. + Prosta krotka składająca się z liczb całkowitych z adnotacją typu. + + + + Type annotations for tuples use the * symbol to separate elements + Adnotacje typu w krotkach korzystają z symbolu * do oddzielania elementów + + + + Tuples are normally objects, but they can also be represented as structs. + Krotki są zazwyczaj obiektami, niemniej mogą być również reprezentowane w formie struktur. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Całkowicie współpracują ze strukturami w języku C# i Visual Basic.NET; niemniej + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + krotki w formie struktur nie mogą być niejawnie konwertowane na krotki w formie obiektów (często zwane krotkami odwołań). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + Z tego powodu nie będzie można skompilować drugiego wiersza poniżej. Usuń komentarz z tego wiersza, aby zobaczyć, co się stanie. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Mimo że nie możesz przeprowadzać niejawnej konwersji między krotkami struktury i krotkami odwołania, + + + + you can explicitly convert via pattern matching, as demonstrated below. + możesz konwertować jawnie za pośrednictwem dopasowywania do wzorców, jak pokazano poniżej. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Operatory potoków języka F# („|>”, „<|” itp.) oraz operatory kompozycji języka F# („>>”, „<<”) + + + + are used extensively when processing data. These operators are themselves functions + są często używane podczas przetwarzania danych. Operatory te są funkcjami + + + + which make use of Partial Application. + wykorzystującymi częściową aplikację. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Aby dowiedzieć się więcej o tych operatorach, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Aby dowiedzieć się więcej o częściowej aplikacji, zobacz: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Podnosi wartość do potęgi drugiej. + + + + Adds 1 to a value. + Dodaje 1 do wartości. + + + + Tests if an integer value is odd via modulo. + Sprawdza, czy wartość liczby całkowitej jest nieparzysta za pomocą operacji modulo. + + + + A list of 5 numbers. More on lists later. + Lista 5 liczb. Więcej informacji na temat list znajduje się dalej. + + + + Given a list of integers, it filters out the even numbers, + W oparciu o podaną listę liczb całkowitych funkcja filtruje liczby parzyste, + + + + squares the resulting odds, and adds 1 to the squared odds. + podnosi nieparzyste wyniki do potęgi drugiej, a następnie dodaje 1 do podniesionych do potęgi drugiej liczb nieparzystych. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Krótszym sposobem zapisu „squareOddValuesAndAddOne” jest zagnieżdżenie każdego + + + + sub-result into the function calls themselves. + wyniku podrzędnego w samych wywołaniach funkcji. + + + + This makes the function much shorter, but it's difficult to see the + Dzięki temu funkcja będzie znacznie krótsza, ale trudno będzie zobaczyć + + + + order in which the data is processed. + kolejność przetwarzania danych. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Preferowanym sposobem zapisu funkcji „squareOddValuesAndAddOne” jest użycie operatorów potoków języka F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + Dzięki temu unika się tworzenia wyników pośrednich, a całość jest znacznie bardziej czytelna + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + niż w przypadku zagnieżdżania wywołań funkcji, np. „squareOddValuesAndAddOneNested” + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + Możesz skrócić wywołanie „squareOddValuesAndAddOnePipeline” przez przeniesienie drugiego wywołania „List.map” + + + + into the first, using a Lambda Function. + do pierwszego, korzystając z funkcji lambda. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Należy zauważyć, że potoki są również używane w funkcji lambda. Operatorów potoków języka F# + + + + can be used for single values as well. This makes them very powerful for processing data. + można również użyć w przypadku pojedynczych wartości. Dzięki temu jest to bardzo zaawansowane narzędzie do przetwarzania danych. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + W końcu możesz wyeliminować potrzebę jawnego przyjmowania elementu „values” jako parametru, używając wyrażenia „>>”, + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + aby zredagować dwie kluczowe operacje: odfiltrowywanie liczb parzystych, a następnie podnoszenie do potęgi drugiej i dodawanie jedynki. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Podobnie fragment „fun x -> ...” wyrażenia lambda nie jest wymagany, ponieważ wartość „x” jest po prostu + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + definiowana w tym zakresie w celu przekazania do potoku funkcyjnego. Dlatego można również użyć wyrażenia „>>” + + + + there as well. + w tym miejscu. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + Wynikiem funkcji „squareOddValuesAndAddOneComposition” jest inna funkcja, która przyjmuje + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + listę liczb całkowitych w formie danych wejściowych. Jeśli wykonasz funkcję „squareOddValuesAndAddOneComposition” z listą + + + + of integers, you'll notice that it produces the same results as previous functions. + liczb całkowitych, funkcja będzie podawać takie same wyniki jak poprzednie funkcje. + + + + This is using what is known as function composition. This is possible because functions in F# + Używa się tu kompozycji funkcji. Jest to możliwe, ponieważ funkcje w języku F# + + + + use Partial Application and the input and output types of each data processing operation match + używają częściowej aplikacji, a typy danych wejściowych i wyjściowych dla każdej operacji przetwarzania danych są dopasowane do + + + + the signatures of the functions we're using. + podpisów funkcji, których używamy. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Listy są uporządkowane, niezmienne i jednokierunkowe. Są wartościowane przed przetworzeniem. + + + + This module shows various ways to generate lists and process lists with some functions + Ten moduł pokazuje różne sposoby generowania list i ich przetwarzania przy użyciu niektórych funkcji + + + + in the 'List' module in the F# Core Library. + w module „Lista” w bibliotece podstawowej języka F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Listy definiuje się za pomocą zapisu [ ... ]. To jest pusta lista. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Jest to lista z 3 elementami. Znak „;” oddziela elementy w tym samym wierszu. + + + + You can also separate elements by placing them on their own lines. + Możesz również oddzielić elementy przez umieszczenie ich w osobnych wierszach. + + + + This is a list of integers from 1 to 1000 + To jest lista liczb całkowitych z zakresu od 1 do 1000 + + + + Lists can also be generated by computations. This is a list containing + Listy można także generować za pomocą obliczeń. To jest lista zawierająca + + + + all the days of the year. + wszystkie dni roku. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Wydrukuj 5 pierwszych elementów listy „daysList” przy użyciu wyrażenia „List.take”. + + + + Computations can include conditionals. This is a list containing the tuples + Obliczenia mogą obejmować wyrażenia warunkowe. To jest lista zawierająca krotki + + + + which are the coordinates of the black squares on a chess board. + które są współrzędnymi czarnych kwadratów na szachownicy. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Listy można przekształcać za pomocą elementu „List.map” i innych kombinatorów programowania funkcjonalnego. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Ta definicja umożliwia utworzenie nowej listy przez podniesienie do kwadratu elementów na liście numberList za pomocą potoku + + + + operator to pass an argument to List.map. + operatora, aby przekazać argument do elementu List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Istnieje wiele innych kombinacji listy. Następujący kod oblicza sumę kwadratów + + + + numbers divisible by 3. + liczby podzielne przez 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Tablice to zmienialne kolekcje o stałym rozmiarze, w których zawierają się elementy tego samego typu. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Chociaż są podobne do list (obsługują wyliczenia i mają podobne kombinatory przetwarzania danych), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + ogólnie są szybsze i obsługują szybki dostęp losowy. Niemniej oznacza to mniejsze bezpieczeństwo związane z możliwością ich modyfikacji. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + To jest pusta tablica. Należy zauważyć, że składnia jest podobna do składni list, ale tutaj używa się zapisu „[| ... |]”. + + + + Arrays are specified using the same range of constructs as lists. + Tablice określa się za pomocą tego samego zestawu konstrukcji co listy. + + + + This is an array of numbers from 1 to 1000. + To jest tablica liczb z zakresu od 1 do 1000. + + + + This is an array containing only the words "hello" and "world". + To jest tablica zawierająca tylko słowa „hello” i „world”. + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + To jest tablica zainicjowana za pomocą indeksu i zawierająca liczby parzyste z zakresu od 0 do 2000. + + + + Sub-arrays are extracted using slicing notation. + Tablice podrzędne wyodrębnia się za pomocą notacji wycinania. + + + + You can loop over arrays and lists using 'for' loops. + Możesz zapętlić tablice i listy przy użyciu pętli „for”. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Możesz zmodyfikować zawartość elementu tablicy za pomocą operatora przypisania „strzałka w lewo”. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Aby dowiedzieć się więcej o tym operatorze, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Możesz przekształcić tablice za pomocą operacji „Array.map” i innych operacji programowania funkcjonalnego. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + Następujący kod oblicza sumę długości słów zaczynających się od litery „h”. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Sekwencje są logicznymi seriami elementów tego samego typu. Jest to typ bardziej ogólny niż listy i tablice. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Sekwencje są sprawdzane na żądanie, a ich ponowne sprawdzenie następuje za każdym razem, gdy są one iterowane. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Sekwencja języka F# jest aliasem dla elementu .NET System.Collections.Generic.IEnumerable<'T>. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Funkcje przetwarzania sekwencji można także zastosować dla list i tablic. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + To jest pusta sekwencja. + + + + This a sequence of values. + To jest sekwencja wartości. + + + + This is an on-demand sequence from 1 to 1000. + To jest sekwencja na żądanie zawierająca liczby od 1 do 1000. + + + + This is a sequence producing the words "hello" and "world" + To jest sekwencja generująca słowa „hello” i „world” + + + + This sequence producing the even numbers up to 2000. + Ta sekwencja generuje numery parzyste nie większe niż 2000. + + + + This is an infinite sequence which is a random walk. + To jest nieskończona sekwencja stanowiąca losowe przechodzenie. + + + + This example uses yield! to return each element of a subsequence. + W tym przykładzie użyto instrukcji yield! do zwrócenia każdego elementu sekwencji podrzędnej. + + + + This example shows the first 100 elements of the random walk. + Ten przykład przedstawia pierwszych 100 elementów losowego przechodzenia. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Funkcje rekursywne mogą wywoływać same siebie. W języku F# funkcje to jedyne rekursywne + + + + when declared using 'let rec'. + w przypadku deklarowania przy użyciu wyrażenia „let rec”. + + + + Recursion is the preferred way to process sequences or collections in F#. + Rekursja jest preferowanym sposobem przetwarzania sekwencji lub kolekcji w języku F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Ten przykład przedstawia funkcję rekursywną, która oblicza silnię + + + + integer. It uses 'let rec' to define a recursive function. + liczba całkowita. Używa deklaratora „let rec” do zdefiniowania funkcji rekursywnej. + + + + Computes the greatest common factor of two integers. + Oblicza największy wspólny dzielnik dwóch liczb całkowitych. + + + + Since all of the recursive calls are tail calls, + Jako że wszystkie wywołania rekurencyjne są wywołaniami ogonowymi, + + + + the compiler will turn the function into a loop, + kompilator zamieni funkcję w pętlę, + + + + which improves performance and reduces memory consumption. + która umożliwi zwiększenie wydajności i zmniejszenie zużycia pamięci. + + + + This example computes the sum of a list of integers using recursion. + Ten przykład oblicza sumę listy liczb całkowitych przy użyciu rekursji. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + Operacja zamieni listę „sumList” w listę z rekursją ogonową przy użyciu funkcji pomocniczej z akumulatorem wyników. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Spowoduje to wywołanie funkcji pomocniczej z rekursją ogonową, z wartością „0” jako akumulatorem początkowym. + + + + An approach like this is common in F#. + Takie podejście jest typowe dla języka F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + Rekordy są agregacjami nazwanych wartości z opcjonalnymi elementami członkowskimi (np. metodami). + + + + They are immutable and have structural equality semantics. + Są niezmienne i mają semantykę równości strukturalnej. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Ten przykład przedstawia sposób definiowania nowego typu rekordu. + + + + This example shows how to instantiate a record type. + W tym przykładzie pokazano sposób tworzenia wystąpienia typu rekordu. + + + + You can also do this on the same line with ';' separators. + Możesz to również zrobić w tym samym wierszu, korzystając z separatorów „;”. + + + + This example shows how to use "copy-and-update" on record values. It creates + Ten przykład przedstawia sposób użycia operacji „kopiuj i aktualizuj” na wartościach rekordu. Tworzy + + + + a new record value that is a copy of contact1, but has different values for + nową wartość rekordu, która jest kopią elementu contact1, lecz ma inne wartości dla + + + + the 'Phone' and 'Verified' fields. + pola „Phone” i „Verified”. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Ten przykład przedstawia, jak napisać funkcję przetwarzającą wartość rekordu. + + + + It converts a 'ContactCard' object to a string. + Konwertuje obiekt „ContactCard” na ciąg. + + + + This is an example of a Record with a member. + Jest to przykład rekordu z elementem członkowskim. + + + + Members can implement object-oriented members. + Elementy członkowskie mogą implementować elementy członkowskie zorientowane obiektowo. + + + + Members are accessed via the '.' operator on an instantiated type. + Do elementów członkowskich uzyskuje się dostęp za pośrednictwem operatora „.” w typie skonkretyzowanym. + + + + Records can also be represented as structs via the 'Struct' attribute. + Rekordy można również reprezentować jako struktury za pośrednictwem atrybutu „Struct”. + + + + This is helpful in situations where the performance of structs outweighs + Jest to przydatne w sytuacjach, w których wydajność struktur przewyższa + + + + the flexibility of reference types. + elastyczność typów odwołań. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Unie rozłączne (DU, Discriminated Union) są wartościami, które mogą być liczbą nazwanych formularzy lub przypadków. + + + + Data stored in DUs can be one of several distinct values. + Dane przechowywane w uniach rozłącznych mogą mieć jedną z kilku różnych wartości. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + Następująca wartość reprezentuje kolor karty do gry. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Unii rozłącznej można również użyć do reprezentowania wartości karty do gry. + + + + Represents the rank of cards 2 .. 10 + Reprezentuje wartości kart 2 .. 10 + + + + Discriminated Unions can also implement object-oriented members. + Unie rozłączne mogą również implementować elementy członkowskie zorientowane obiektowo. + + + + This is a record type that combines a Suit and a Rank. + To jest typ rekordu łączący kolor i wysokość. + + + + It's common to use both Records and Disciminated Unions when representing data. + Często używa się rekordów i unii rozłącznych w przypadku reprezentowania danych. + + + + This computes a list representing all the cards in the deck. + Operacja oblicza listę reprezentującą wszystkie karty w talii. + + + + This example converts a 'Card' object to a string. + Ten przykład umożliwia przekonwertowanie elementu „Card” na ciąg. + + + + This example prints all the cards in a playing deck. + Ten przykład umożliwia wyświetlenie wszystkich kart w talii. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Unie rozłączne o pojedynczych przypadkach są często używane podczas modelowania domeny. Może to zapewnić większe bezpieczeństwo typów + + + + over primitive types such as strings and ints. + niż typy pierwotne, np. ciągi i liczby całkowite. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Unie rozłączne o pojedynczych przypadkach nie mogą być niejawnie konwertowane do lub z typu przez nich opakowywanego. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Przykładowo funkcja przyjmująca adres nie może zaakceptować ciągu jako danych wejściowych + + + + or vive/versa. + i na odwrót. + + + + You can easily instantiate a single-case DU as follows. + Możesz z łatwością utworzyć wystąpienie dla unii rozłącznej o pojedynczym przypadku w następujący sposób. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Jeśli potrzebujesz wartości, możesz cofnąć opakowywanie wartości bazowej za pomocą prostej funkcji. + + + + Printing single-case DUs is simple with unwrapping functions. + Drukowanie unii rozłącznych o pojedynczych przypadkach jest proste z funkcjami cofającymi opakowywanie. + + + + Disciminated Unions also support recursive definitions. + Unie rozłączne obsługują również definicje rekursywne. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Reprezentuje to binarne drzewo wyszukiwania, gdzie jeden przypadek jest pustym drzewem, + + + + and the other being a Node with a value and two subtrees. + a drugi węzłem z wartością i dwoma poddrzewami. + + + + Check if an item exists in the binary search tree. + Sprawdź, czy element istnieje w binarnym drzewie wyszukiwania. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Wyszukuje rekursywnie przy użyciu dopasowywania wzorca. Zwraca wartość true, jeśli element istnieje; w przeciwnym wypadku zwraca wartość false. + + + + Check the left subtree. + Sprawdź lewe poddrzewo. + + + + Check the right subtree. + Sprawdź prawe poddrzewo. + + + + Inserts an item in the Binary Search Tree. + Wstawia element do binarnego drzewa wyszukiwania. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Znajduje miejsce do wstawienia rekursywnego przy użyciu dopasowania wzorca, a następnie wstawia nowy węzeł. + + + + If the item is already present, it does not insert anything. + Jeśli element jest już obecny, nie wstawia niczego. + + + + No need to insert, it already exists; return the node. + Wstawianie nie jest konieczne, element już istnieje; zwróć węzeł. + + + + Call into left subtree. + Wywołanie do lewego poddrzewa. + + + + Call into right subtree. + Wywołanie do prawego poddrzewa. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Unie rozłączne mogą być również reprezentowane w formie struktur za pośrednictwem atrybutu „Struct”. + + + + This is helpful in situations where the performance of structs outweighs + Jest to przydatne w sytuacjach, w których wydajność struktur przewyższa + + + + the flexibility of reference types. + elastyczność typów odwołań. + + + + However, there are two important things to know when doing this: + Niemniej w przypadku tej operacji należy pamiętać o dwóch ważnych rzeczach: + + + + 1. A struct DU cannot be recursively-defined. + 1. Unii rozłącznej w formie struktury nie można zdefiniować rekursywnie. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Unia rozłączna w formie struktury musi mieć unikatowe nazwy dla każdego ze swoich przypadków. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Dopasowywanie wzorca jest funkcją języka F# umożliwiającą wykorzystywanie wzorców, + + + + which are a way to compare data with a logical structure or structures, + które są sposobem na porównywanie danych ze strukturami logicznymi lub strukturami, + + + + decompose data into constituent parts, or extract information from data in various ways. + rozkładanie danych na części składowe lub wyodrębnianie informacji z danych na różne sposoby. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Następnie możesz wysłać „kształt” wzorca za pośrednictwem funkcji dopasowywania wzorca. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Rekord zawierający imię i nazwisko osoby + + + + A Discriminated Union of 3 different kinds of employees + Unia rozłączna 3 różnych rodzajów pracowników + + + + Count everyone underneath the employee in the management hierarchy, + Licz wszystkich podlegających pracownikowi w hierarchii zarządzania, + + + + including the employee. + z uwzględnieniem pracownika. + + + + Find all managers/executives named "Dave" who do not have any reports. + Znajdź wszystkich kierowników/dyrektorów o imieniu „Dave”, którzy nie mają żadnych podwładnych. + + + + This uses the 'function' shorthand to as a lambda expression. + Operacja używa skrótu słowa „function” jako wyrażenia lambda. + + + + [] matches an empty list. + [] dopasuje pustą listę. + + + + '_' is a wildcard pattern that matches anything. + „_” to wzorzec wieloznaczny, który pasuje do wszystkiego. + + + + This handles the "or else" case. + Obsługuje przypadek „w przeciwnym razie”. + + + + You can also use the shorthand function construct for pattern matching, + Możesz również użyć konstrukcji funkcji skrótu w przypadku dopasowywania wzorców, + + + + which is useful when you're writing functions which make use of Partial Application. + co jest przydatne podczas pisania funkcji wykorzystujących częściową aplikację. + + + + Define some more functions which parse with the helper function. + Zdefiniuj więcej funkcji, które będą analizować przy użyciu funkcji pomocniczej. + + + + Active Patterns are another powerful construct to use with pattern matching. + Wzorce aktywne to kolejna zaawansowana konstrukcja do zastosowania podczas dopasowywania wzorców. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Umożliwiają one partycjonowanie danych wejściowych do formularzy niestandardowych przez ich rozkładanie w lokacji wywołania dopasowania wzorca. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + Dopasowywanie wzorców za pośrednictwem słowa kluczowego „function” i wzorców aktywnych często wygląda w następujący sposób. + + + + Call the printer with some different values to parse. + Wywołaj drukarkę za pomocą innych wartości do przeanalizowania. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Wartości opcji to dowolne wartości otagowane jako „Some” lub „None”. + + + + They are used extensively in F# code to represent the cases where many other + Są one bardzo często używane w kodzie języka F# do reprezentowania przypadków, w których w wielu innych + + + + languages would use null references. + językach użyte zostałyby odwołania o wartości null. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + Najpierw zdefiniuj kod pocztowy zdefiniowany za pośrednictwem unii rozłącznej o pojedynczym przypadku. + + + + Next, define a type where the ZipCode is optional. + Następnie zdefiniuj typ, w którym element ZipCode jest opcjonalny. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Następnie zdefiniuj typ interfejsu reprezentujący obiekt, aby obliczyć strefę wysyłki dla kodu pocztowego klienta + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + przy użyciu danych implementacji metod abstrakcyjnych „getState” i „getShippingZone”. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Następnie oblicz strefę wysyłki dla klienta za pomocą wystąpienia kalkulatora. + + + + This uses combinators in the Option module to allow a functional pipeline for + Operacja używa kombinatorów w module opcji, aby umożliwiać potokowi funkcjonalnemu + + + + transforming data with Optionals. + przekształcanie danych z wykorzystaniem elementów opcjonalnych. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Jednostki miary są bezpiecznym sposobem dodawania adnotacji do pierwotnych typów numerycznych. + + + + You can then perform type-safe arithmetic on these values. + Następnie możesz przeprowadzić bezpieczne operacje arytmetyczne dla tych wartości. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Najpierw otwórz kolekcję typowych nazw jednostek + + + + Define a unitized constant + Definiuj stałą w jednostkach + + + + Next, define a new unit type + Następnie zdefiniuj nowy typ jednostki + + + + Conversion factor mile to meter. + Współczynnik konwersji mil na metry. + + + + Define a unitized constant + Definiuj stałą w jednostkach + + + + Compute metric-system constant + Oblicz stałą systemu metryk + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Wartości używające jednostek miary można dostosować tak jak pierwotny typ numeryczny, np. w przypadku drukowania. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Klasy są sposobem definiowania nowych typów obiektów w języku F# i obsługują standardowe konstrukcje zorientowane obiektowo. + + + + They can have a variety of members (methods, properties, events, etc.) + Mogą mieć różne elementy członkowskie (metody, właściwości, zdarzenia itp.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Aby dowiedzieć się więcej o klasach, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Aby dowiedzieć się więcej o elementach członkowskich, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Prosta, dwuwymiarowa klasa Vector. + + + + The class's constructor is on the first line, + Konstruktor klasy znajduje się w pierwszym wierszu + + + + and takes two arguments: dx and dy, both of type 'double'. + i przyjmuje dwa argumenty: dx i dy, oba typu „double”. + + + + This internal field stores the length of the vector, computed when the + To pole wewnętrzne przechowuje długość wektora obliczoną podczas + + + + object is constructed + obiekt jest skonstruowany + + + + 'this' specifies a name for the object's self identifier. + Wyraz „this” określa nazwę własnego identyfikatora obiektu. + + + + In instance methods, it must appear before the member name. + W metodach wystąpień musi on znajdować się przed nazwą elementu członkowskiego. + + + + This member is a method. The previous members were properties. + Ten element członkowski jest metodą. Poprzednie elementy członkowskie były właściwościami. + + + + This is how you instantiate the Vector2D class. + Jest to sposób tworzenia wystąpienia dla klasy Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Pobierz nowy skalowany obiekt wektora bez modyfikowania obiektu oryginalnego. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Klasy ogólne umożliwiają definiowanie typów z uwzględnieniem zestawu parametrów typu. + + + + In the following, 'T is the type parameter for the class. + W następującym przykładzie 'T jest parametrem typu dla klasy. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + To wewnętrzne pole przechowuje stany na liście. + + + + Add a new element to the list of states. + Dodaj nowy element do listy stanów. + + + + use the '<-' operator to mutate the value. + użyj operatora „<-”, aby zmodyfikować wartość. + + + + Get the entire list of historical states. + Pobierz całą listę stanów historycznych. + + + + Get the latest state. + Pobierz najnowszy stan. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Wystąpienie typu „int” klasy procedury śledzenia stanu. Należy zwrócić uwagę, że parametr typu jest wywnioskowany. + + + + Add a state + Dodaj stan + + + + Interfaces are object types with only 'abstract' members. + Interfejsy to typy obiektu, których wszystkie elementy członkowskie są abstrakcyjne. + + + + Object types and object expressions can implement interfaces. + Typy obiektu i wyrażenia obiektu mogą implementować interfejsy. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + To jest typ implementujący interfejs IDisposable. + + + + This is the implementation of IDisposable members. + To jest implementacja elementów członkowskich interfejsu IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + To jest obiekt implementujący interfejs IDisposable za pośrednictwem wyrażenia obiektu + + + + Unlike other languages such as C# or Java, a new type definition is not needed + W przeciwieństwie do innych języków, np. C# lub Java, nowy typ definicji nie jest wymagany + + + + to implement an interface. + do zaimplementowania interfejsu. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + Biblioteka FSharp.Core definiuje zestaw funkcji przetwarzania równoległego. Tutaj + + + + you use some functions for parallel processing over arrays. + niektóre funkcje są używane do równoległego przetwarzania tablic. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Aby dowiedzieć się więcej, zobacz https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Najpierw tablica wartości wejściowych. + + + + Next, define a functions that does some CPU intensive computation. + Następnie zdefiniuj funkcje, które wykonują obliczenia intensywnie korzystające z procesora. + + + + Next, do a parallel map over a large input array. + Następnie wykonaj równoległe mapowanie dla dużej tablicy wejściowej. + + + + Next, print the results. + Następnie wyświetl wyniki. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Zdarzenia są wspólnym idiomem dla programowania na platformie .NET, zwłaszcza przy użyciu aplikacji WinForms lub WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Najpierw utwórz wystąpienie obiektu Event, które składa się z punktu subskrypcji (event.Publish) i wyzwalacza zdarzenia (event.Trigger). + + + + Next, add handler to the event. + Następnie dodaj procedurę obsługi do zdarzenia. + + + + Next, trigger the event. + Następnie wyzwól zdarzenie. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Następnie utwórz wystąpienie zdarzenia zgodne ze standardową konwencją platformy .NET: (sender, EventArgs). + + + + Next, add a handler for this new event. + Następnie dodaj procedurę obsługi dla tego nowego zdarzenia. + + + + Next, trigger this event (note that sender argument should be set). + Następnie wyzwól to zdarzenie (zwróć uwagę, że argument elementu wysyłającego powinien być ustawiony). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf new file mode 100644 index 0000000000..64df6c8506 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Esta amostra guiará você pelos elementos da linguagem F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Para executar o código no F# Interativo, realce uma seção de código e pressione Alt-Enter ou clique com botão direito do mouse + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + e selecione "Executar em Interativo". Você pode abrir a janela F# Interativo no menu "Exibir". + + + + For more about F#, see: + Para obter mais informações sobre F#, consulte: + + + + To see this tutorial in documentation form, see: + Para ver este tutorial em forma de documentação, consulte: + + + + To learn more about applied F# programming, use + Para saber mais sobre a programação F# aplicada, use + + + + To install the Visual F# Power Tools, use + Para instalar o Visual F# Power Tools, use + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + 'Ferramentas' --> 'Extensões e Atualizações' --> `Online` e pesquise + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Para obter modelos adicionais a serem usados com F#, consulte 'Modelos online' no Visual Studio, + + + + 'New Project' --> 'Online Templates' + 'Novo projeto --> 'Modelos online' + + + + F# supports three kinds of comments: + F# dá suporte a três tipos de comentários: + + + + 1. Double-slash comments. These are used in most situations. + 1. Comentários de barra dupla. São usados na maioria das situações. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Comentários de bloco em estilo de ML. Eles não são usados com muita frequência. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Comentários de barra tripla. São usados para funções de documentação, tipos, etc. + + + + They will appear as text when you hover over something which is decorated with these comments. + Eles aparecerão como texto quando você passar o mouse sobre algo decorado com esses comentários. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Eles também dão suporte a comentários XML em estilo .NET, que permitem que você gere documentação de referência, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + além de permitirem que editores (como o Visual Studio) extraiam informações deles. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Abra os namespaces usando a palavra-chave 'open'. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Um módulo é um agrupamento de código F#, assim como valores, valores de função e tipos. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Agrupar código em módulos ajuda a manter o código relacionado junto e ajuda a evitar conflitos de nome em seu programa. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Este é um inteiro de exemplo. + + + + This is a sample floating point number. + Esta é uma amostra de número de ponto flutuante. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Isso computou um novo número por meio de alguma aritmética. Tipos numéricos são convertidos usando + + + + functions 'int', 'double' and so on. + funções 'int', 'double' e assim por diante. + + + + This is a list of the numbers from 0 to 99. + Esta é uma lista de números de 0 a 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Isso é uma lista de todas as tuplas contendo todos os números de 0 a 99 e seus quadrados. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + A próxima linha imprime uma lista que inclui tuplas, usando '%A' para impressão genérica. + + + + This is a sample integer with a type annotation + Este é um inteiro de exemplo com uma anotação de tipo + + + + Values in F# are immutable by default. They cannot be changed + Os valores em F# são imutáveis por padrão. Eles não podem ser alterados + + + + in the course of a program's execution unless explicitly marked as mutable. + no decorrer da execução de um programa a menos que explicitamente marcados como mutáveis. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Associar um valor a um nome via 'let' o torna imutável. + + + + The second line of code fails to compile because 'number' is immutable and bound. + A compilação da segunda linha de código falha porque 'number' é imutável e limitado. + + + + Re-defining 'number' to be a different value is not allowed in F#. + Não é permitido redefinir 'number' para um valor diferente em F#. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Uma associação mutável. Isso é necessário para que se possa modificar o valor de 'otherNumber'. + + + + When mutating a value, use '<-' to assign a new value. + Ao converter um valor, use '<-' para atribuir um novo valor. + + + + You could not use '=' here for this purpose since it is used for equality + Você não pode usar '=' aqui para essa finalidade, já que ele é usado para igualdade + + + + or other contexts such as 'let' or 'module' + ou outros contextos como 'let' ou 'module' + + + + Much of F# programming consists of defining functions that transform input data to produce + Grande parte da programação F# consiste em definir funções que transformam os dados de entrada para produzir + + + + useful results. + resultados úteis. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Use 'let' para definir uma função. Ele aceita um argumento inteiro e retorna um inteiro. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Parênteses são opcionais para os argumentos da função, exceto quando você usa uma anotação de tipo explícito. + + + + Apply the function, naming the function return result using 'let'. + Aplique a função, nomeando o resultado de retorno de função usando 'let'. + + + + The variable type is inferred from the function return type. + O tipo de variável é deduzido do tipo de retorno de função. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Esta linha usa '%d' para imprimir o resultado como um inteiro. Isso é fortemente tipado. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Se 'result1' não fosse do tipo 'int', a linha falharia na compilação. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + Quando necessário, anote o tipo de um nome de parâmetro usando '(argument:type)'. É necessário usar parênteses. + + + + Conditionals use if/then/elid/elif/else. + Condicionais usam if/then/elid/elif/else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Observe que F# usa sintaxe com reconhecimento de recuo de espaço em branco, semelhante a linguagens como Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Esta linha usa '%f' para imprimir o resultado como um float. Como em '%d' acima, isso é fortemente tipado. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Boolianos são tipos de dados fundamentais em F#. Aqui estão alguns exemplos de Boolianos e lógica condicional. + + + + To learn more, see: + Para saber mais, acesse: + + + + and + E + + + + Booleans values are 'true' and 'false'. + Valores booliano são 'true' e 'false'. + + + + Operators on booleans are 'not', '&&' and '||'. + Operadores em boolianos são 'not', '&&' e '||'. + + + + This line uses '%b'to print a boolean value. This is type-safe. + Esta linha usa '%b' para imprimir um valor booliano. Isso é fortemente tipado. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Cadeias de caracteres são tipos de dados fundamentais em F#. Aqui estão alguns exemplos de Cadeias de caracteres e a manipulação básicas de Cadeia de caracteres. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Cadeias de caracteres usam aspas duplas. + + + + Strings can also use @ to create a verbatim string literal. + Cadeias de caracteres também podem usar @ para criar um literal de cadeia de caracteres textual. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Isso vai ignorar caracteres de escapada como '\', '\n', '\t', etc. + + + + String literals can also use triple-quotes. + Literais de cadeia de caracteres também podem usar aspas triplas. + + + + String concatenation is normally done with the '+' operator. + A concatenação de cadeia de caracteres normalmente é feita com o operador '+'. + + + + This line uses '%s' to print a string value. This is type-safe. + Esta linha usa '%s' para imprimir um valor de cadeia de caracteres. Isso é fortemente tipado. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Subcadeias de caracteres usam a notação de indexador. Essa linha extrai os sete primeiros caracteres como uma subcadeia de caracteres. + + + + Note that like many languages, Strings are zero-indexed in F#. + Observe que, como muitas linguagens, Cadeias de Caracteres são indexadas com zero em F#. + + + + Tuples are simple combinations of data values into a combined value. + Tuplas são combinações simples de valores de dados em um valor combinado. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Uma tupla simples de inteiros. + + + + A function that swaps the order of two values in a tuple. + Uma função que troca a ordem de dois valores em uma tupla. + + + + F# Type Inference will automatically generalize the function to have a generic type, + Inferência de Tipos F# generalizará automaticamente a função para ter um tipo genérico, + + + + meaning that it will work with any type. + significando que ele funcionará com qualquer tipo. + + + + A tuple consisting of an integer, a string, + Uma tupla consistindo em um inteiro, uma cadeia de caracteres, + + + + and a double-precision floating point number. + e um número de ponto flutuante de precisão dupla. + + + + A simple tuple of integers with a type annotation. + Uma tupla simples de números inteiros com uma anotação de tipo. + + + + Type annotations for tuples use the * symbol to separate elements + As anotações de tipo para tuplas usam o símbolo * para separar elementos + + + + Tuples are normally objects, but they can also be represented as structs. + Tuplas normalmente são objetos, mas também podem ser representados como structs. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Esses interoperam completamente com structs em C# e Visual Basic.NET; entretanto, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + tuplas de struct não são implicitamente conversíveis com tuplas de objeto (geralmente chamadas de tuplas de referência). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + A compilação da segunda linha abaixo falhará por causa disso. Remova a marca de comentário para ver o que acontece. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Embora não seja possível converter implicitamente entre tuplas de struct e tuplas de referência, + + + + you can explicitly convert via pattern matching, as demonstrated below. + você pode converter explicitamente via correspondência de padrões, conforme demonstrado abaixo. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Os operadores de pipe F# ('|>', '<|', etc.) e os operadores de composição F# ('>>', '<<') + + + + are used extensively when processing data. These operators are themselves functions + são usadas extensivamente durante o processamento de dados. Esses operadores são funções + + + + which make use of Partial Application. + que fazem uso do Aplicativo Parcial. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Para saber mais sobre esses operadores, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Para saber mais sobre Aplicativo Parcial, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Eleva um valor ao quadrado. + + + + Adds 1 to a value. + Adiciona 1 a um valor. + + + + Tests if an integer value is odd via modulo. + Testa se um valor inteiro for ímpar por meio do módulo. + + + + A list of 5 numbers. More on lists later. + Uma lista de cinco números. Mais sobre listas posteriormente. + + + + Given a list of integers, it filters out the even numbers, + Dada uma lista de inteiros, ele filtra os números pares, + + + + squares the resulting odds, and adds 1 to the squared odds. + eleva os ímpares resultantes ao quadrado e adiciona 1 aos ímpares elevados ao quadrado. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Uma maneira mais curta para gravar 'squareOddValuesAndAddOne' é aninhar cada + + + + sub-result into the function calls themselves. + sub-resultado em função invoca a si mesmo. + + + + This makes the function much shorter, but it's difficult to see the + Isso faz com que a função fique muito menor, mas é difícil ver a + + + + order in which the data is processed. + ordem em que os dados são processados. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Uma maneira preferencial para gravar 'squareOddValuesAndAddOne' é usar operadores de pipe F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + Isso permite que você evite criar resultados intermediários, mas é muito mais legível + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + que a função de aninhamento invoca como 'squareOddValuesAndAddOneNested' + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + Você pode reduzir 'squareOddValuesAndAddOnePipeline' movendo a segunda chamada `List.map` + + + + into the first, using a Lambda Function. + no primeiro, usando uma Função Lambda. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Observe que pipelines também estão sendo usados dentro da função lambda. Operadores de pipe F# + + + + can be used for single values as well. This makes them very powerful for processing data. + podem ser usados para valores únicos também. Isso os torna muito eficientes para o processamento de dados. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + Por fim, você pode eliminar a necessidade de incluir explicitamente 'valores' como um parâmetro usando '>>' + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + para compor as duas principais operações: filtrar números pares e, em seguida, elevar ao quadrado e adicionar um. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Da mesma forma, o bit 'fun x -> ...' da expressão lambda também não é necessário porque 'x' é simplesmente + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + sendo definido nesse escopo para que possa ser passada a um pipeline funcional. Portanto, '>>' pode ser usado + + + + there as well. + lá também. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + O resultado de 'squareOddValuesAndAddOneComposition' é em si outra função que leva um + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + lista de inteiros como sua entrada. Se você executar 'squareOddValuesAndAddOneComposition' com uma lista + + + + of integers, you'll notice that it produces the same results as previous functions. + de inteiros, você observará que ela produz os mesmos resultados que as funções anteriores. + + + + This is using what is known as function composition. This is possible because functions in F# + Isso está usando o que é conhecido como composição de função. Isso é possível porque funções em F# + + + + use Partial Application and the input and output types of each data processing operation match + use Aplicativo Parcial e os tipos de entrada e saída de cada correspondência de operação de processamento de dados + + + + the signatures of the functions we're using. + as assinaturas das funções que estamos usando. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + As listas são listas ordenadas, imutáveis, vinculadas de modo único. Elas são adiantadas em sua avaliação. + + + + This module shows various ways to generate lists and process lists with some functions + Este módulo mostra várias formas de gerar listas e listas de processo com algumas funções + + + + in the 'List' module in the F# Core Library. + no módulo 'Lista' na Biblioteca Principal de F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + As listas são definidas usando [ ... ]. Esta é uma lista vazia. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Esta é uma lista com 3 elementos. ';' é usado para separar elementos na mesma linha. + + + + You can also separate elements by placing them on their own lines. + Você também pode separar elementos colocando-os em suas próprias linhas. + + + + This is a list of integers from 1 to 1000 + Esta é uma lista de inteiros de 1 a 1.000 + + + + Lists can also be generated by computations. This is a list containing + Listas também podem ser geradas pelos cálculos. Esta é uma lista contendo + + + + all the days of the year. + todos os dias do ano. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Imprima os primeiros cinco elementos de 'daysList' usando 'List.take'. + + + + Computations can include conditionals. This is a list containing the tuples + Cálculos podem incluir condicionais. Esta é uma lista contendo as tuplas + + + + which are the coordinates of the black squares on a chess board. + que são as coordenadas dos quadrados pretos em um tabuleiro de xadrez. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Listas podem ser transformadas usando 'List. map' e outros combinadores de programação funcional. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Essa definição produz uma nova lista ao elevar ao quadrado os números em numberList, usando o pipeline + + + + operator to pass an argument to List.map. + operador para passar um argumento para List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Há muitas outras combinações de lista. O exemplo a seguir computa a soma dos quadrados dos + + + + numbers divisible by 3. + números divisíveis por 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Matrizes são coleções de tamanho fixo, mutáveis de elementos do mesmo tipo. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Embora elas sejam semelhantes às Listas (eles dão suporte à enumeração e têm combinadores semelhantes para processamento de dados), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + elas geralmente são mais rápidas e dão suporte ao acesso aleatório rápido. Isso vem com o custo de ser menos seguro por ser mutável. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Esta é a matriz vazia. Observe que a sintaxe é semelhante à de Listas, mas usa '[| ... |]' em vez disso. + + + + Arrays are specified using the same range of constructs as lists. + Matrizes são especificadas usando o mesmo intervalo de construções usado em listas. + + + + This is an array of numbers from 1 to 1000. + Esta é uma matriz de números de 1 a 1.000. + + + + This is an array containing only the words "hello" and "world". + Esta é uma matriz que contém apenas as palavras "olá" e "mundo". + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Esta é uma matriz inicializada pelo índice e que contém os números pares de 0 a 2.000. + + + + Sub-arrays are extracted using slicing notation. + Submatrizes são extraídas usando a notação de divisão. + + + + You can loop over arrays and lists using 'for' loops. + Você pode executar um loop através de matrizes e listas usando loops 'for'. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Você pode modificar o conteúdo de um elemento de matriz usando o operador de atribuição de seta para a esquerda. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Para saber mais sobre esse operador, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Você pode transformar as matrizes usando 'Array.map' e outras operações de programação funcional. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + O exemplo a seguir calcula a soma dos tamanhos de palavras que começam com 'h'. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Sequências são uma série lógica de elementos, todos do mesmo tipo. Eles são um tipo mais geral que Listas e Matrizes. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + As sequências são avaliada sob demanda e reavaliadas sempre que são repetidas. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Uma sequência de F# é um alias para um System.Collections.Generic.IEnumerable .NET<' t>. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Funções de processamento de sequência também podem ser aplicadas a matrizes e listas. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Esta é a sequência vazia. + + + + This a sequence of values. + Esta é uma sequência de valores. + + + + This is an on-demand sequence from 1 to 1000. + Esta é uma sequência sob demanda de 1 a 1000. + + + + This is a sequence producing the words "hello" and "world" + Esta é uma sequência produzindo as palavras "olá" e "mundo" + + + + This sequence producing the even numbers up to 2000. + Esta sequência produzindo os números pares até 2.000. + + + + This is an infinite sequence which is a random walk. + Esta é uma sequência infinita, que é um exame aleatório. + + + + This example uses yield! to return each element of a subsequence. + Este exemplo usa yield! para retornar cada elemento de uma subsequência. + + + + This example shows the first 100 elements of the random walk. + Este exemplo mostra os primeiros 100 elementos do exame aleatório. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Funções recursivas podem chamar a si mesmas. Em F#, funções são recursivas somente + + + + when declared using 'let rec'. + quando declarada usando 'let rec'. + + + + Recursion is the preferred way to process sequences or collections in F#. + Recursão é a maneira preferencial de processar sequências ou coleções em F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Este exemplo mostra uma função recursiva que computa o fatorial de um + + + + integer. It uses 'let rec' to define a recursive function. + inteiro. Ele usa 'let gra' para definir uma função recursiva. + + + + Computes the greatest common factor of two integers. + Calcula o máximo divisor comum de dois inteiros. + + + + Since all of the recursive calls are tail calls, + Como todas as chamadas recursivas são chamadas tail, + + + + the compiler will turn the function into a loop, + o compilador transformará a função em um loop, + + + + which improves performance and reduces memory consumption. + que melhora o desempenho e reduz o consumo de memória. + + + + This example computes the sum of a list of integers using recursion. + Este exemplo calcula a soma de uma lista de inteiros usando recursão. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + Isso torna a cauda de 'sumList' recursiva usando uma função auxiliar com um acumulador de resultado. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Isso invoca a cauda da função auxiliar recursiva, fornecendo '0' como um acumulador de semente. + + + + An approach like this is common in F#. + Uma abordagem como essa é comum em F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + Registros são uma agregação de valores nomeados com membros opcionais (como métodos). + + + + They are immutable and have structural equality semantics. + Eles são imutáveis e têm semântica de igualdade estrutural. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Este exemplo mostra como definir um novo tipo de registro. + + + + This example shows how to instantiate a record type. + Este exemplo mostra como criar uma instância de um tipo de registro. + + + + You can also do this on the same line with ';' separators. + Você também pode fazer isso na mesma linha com separadores ';'. + + + + This example shows how to use "copy-and-update" on record values. It creates + Este exemplo mostra como usar o "copiar e atualizar" em valores do Registro. Ele cria + + + + a new record value that is a copy of contact1, but has different values for + um novo valor de registro é uma cópia de contact1, mas tem valores diferentes para + + + + the 'Phone' and 'Verified' fields. + os campos 'Telefone' e 'Verificado'. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Este exemplo mostra como escrever uma função que processa um valor de Registro. + + + + It converts a 'ContactCard' object to a string. + Converte um objeto 'ContactCard' em uma cadeia de caracteres. + + + + This is an example of a Record with a member. + Este é um exemplo de um Registro com um membro. + + + + Members can implement object-oriented members. + Os membros podem implementar membros orientados a objeto. + + + + Members are accessed via the '.' operator on an instantiated type. + Os membros são acessados por meio do operador '.' em um tipo instanciado. + + + + Records can also be represented as structs via the 'Struct' attribute. + Registros também podem ser representados como structs por meio do atributo 'Struct'. + + + + This is helpful in situations where the performance of structs outweighs + Isso é útil em situações em que o desempenho de structs é superior + + + + the flexibility of reference types. + a flexibilidade de tipos de referência. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Uniões Discriminadas (UD) são valores que podem ser vários formulários nomeados ou casos. + + + + Data stored in DUs can be one of several distinct values. + Dados armazenados em DUs podem ser um dos vários valores distintos. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + O exemplo a seguir representa o naipe de uma carta de baralho. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Uma União Discriminada também pode ser usada para representar a classificação de uma carta de baralho. + + + + Represents the rank of cards 2 .. 10 + Representa posição das cartas 2 .. 10 + + + + Discriminated Unions can also implement object-oriented members. + Uniões Discriminadas também podem implementar membros orientados a objeto. + + + + This is a record type that combines a Suit and a Rank. + Este é um tipo de registro que combina um Naipe e uma Classificação. + + + + It's common to use both Records and Disciminated Unions when representing data. + É comum usar Registros e Uniões Discriminadas ao representar dados. + + + + This computes a list representing all the cards in the deck. + Isto calcula uma lista que representa todas as cartas do baralho. + + + + This example converts a 'Card' object to a string. + Este exemplo converte um objeto 'Carta' em uma cadeia de caracteres. + + + + This example prints all the cards in a playing deck. + Este exemplo imprime todas as cartas de um baralho de jogo. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + UDs de caso único são frequentemente usadas para modelagem de domínio. Isso pode significar um tipo extra de segurança para você + + + + over primitive types such as strings and ints. + sobre tipos primitivos como cadeias de caracteres e inteiros. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + UDs de caso único não podem ser convertidas implicitamente de ou para o tipo que elas encapsulam. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Por exemplo, uma função que compreende um Endereço não pode aceitar uma sequência de caracteres como essa entrada, + + + + or vive/versa. + ou vice-versa. + + + + You can easily instantiate a single-case DU as follows. + Você pode facilmente criar uma instância em uma UD de único caso conforme mostrado a seguir. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Quando precisar do valor, você pode decodificar o valor subjacente com uma função simples. + + + + Printing single-case DUs is simple with unwrapping functions. + Imprimir UDs de caso único é simples com funções não encapsuladas. + + + + Disciminated Unions also support recursive definitions. + Uniões Discriminadas também dão suporte a definições recursivas. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Isso representa uma Árvore de Pesquisa Binária, com um caso sendo a árvore Vazia, + + + + and the other being a Node with a value and two subtrees. + e o outro sendo um Nó com um valor e duas subárvores. + + + + Check if an item exists in the binary search tree. + Verifique se um item existe na árvore de pesquisa binária. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Pesquisa recursivamente usando Correspondência de Padrões. Retorna verdadeiro se existir; caso contrário, falso. + + + + Check the left subtree. + Verifique a subárvore à esquerda. + + + + Check the right subtree. + Verifique a subárvore à direita. + + + + Inserts an item in the Binary Search Tree. + Insere um item na Árvore de Pesquisa Binária. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Encontra o local para inserir recursivamente usando Correspondência de Padrões e, em seguida, insere um novo nó. + + + + If the item is already present, it does not insert anything. + Se o item já estiver presente, ele não insere nada. + + + + No need to insert, it already exists; return the node. + Não é preciso inseri-lo, ele já existe; retorne o nó. + + + + Call into left subtree. + Chamar subárvore à esquerda. + + + + Call into right subtree. + Chamar subárvore à direita. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Uniões Discriminadas também podem ser representadas como structs por meio do atributo 'Struct'. + + + + This is helpful in situations where the performance of structs outweighs + Isso é útil em situações em que o desempenho de structs é superior + + + + the flexibility of reference types. + a flexibilidade de tipos de referência. + + + + However, there are two important things to know when doing this: + No entanto, existem duas coisas importantes a saber ao fazer isso: + + + + 1. A struct DU cannot be recursively-defined. + 1. Uma UD struct não pode ser definida recursivamente. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Uma UD struct deve ter nomes exclusivos para cada um dos seus casos. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Correspondência de padrões é um recurso do F# que permite que você utilize Padrões, + + + + which are a way to compare data with a logical structure or structures, + que são uma forma de comparar dados com uma estrutura lógica ou com estruturas, + + + + decompose data into constituent parts, or extract information from data in various ways. + decompor os dados em partes constituintes ou extrair informações de dados de diversas maneiras. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Em seguida, você pode expedir na "forma" de um padrão por meio da Correspondência de Padrões. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Um registro de nome e sobrenome de uma pessoa + + + + A Discriminated Union of 3 different kinds of employees + Uma União Discriminada de 3 tipos diferentes de funcionários + + + + Count everyone underneath the employee in the management hierarchy, + Conta todos abaixo do funcionário na hierarquia de gerenciamento, + + + + including the employee. + incluindo o funcionário. + + + + Find all managers/executives named "Dave" who do not have any reports. + Localize todos os gerentes/executivos chamados "Dave" que não têm nenhum relatório. + + + + This uses the 'function' shorthand to as a lambda expression. + Isso usa a forma abreviada de 'function' como uma expressão lambda. + + + + [] matches an empty list. + [] corresponde a uma lista vazia. + + + + '_' is a wildcard pattern that matches anything. + '_' é um padrão de caractere curinga que coincide com qualquer coisa. + + + + This handles the "or else" case. + Isso identifica o caso "ou também". + + + + You can also use the shorthand function construct for pattern matching, + Você também pode usar o constructo da função abreviada para correspondência de padrões, + + + + which is useful when you're writing functions which make use of Partial Application. + que é útil quando você está gravando funções que fazem uso do Aplicativo Parcial. + + + + Define some more functions which parse with the helper function. + Defina mais algumas funções que são analisadas com a função auxiliar. + + + + Active Patterns are another powerful construct to use with pattern matching. + Padrões Ativos são outro constructo avançado para usar com correspondência de padrões. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Eles permitem particionar os dados de entrada em formulários personalizados, decompondo-os no local da chamada de correspondência de padrão. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + Correspondência de Padrões por meio de palavra-chave 'function' e Padrões Ativos geralmente têm essa aparência. + + + + Call the printer with some different values to parse. + Chamar a impressora com alguns valores diferentes para analisar. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Os valores de opção são qualquer tipo de valor marcado com 'Algum' ou 'Nenhum'. + + + + They are used extensively in F# code to represent the cases where many other + Eles são usados extensivamente no código F# para representar os casos em que muitos outros + + + + languages would use null references. + idiomas usariam referências nulas. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + Primeiro, determine um CEP definido por meio de União Discriminada de Único Caso. + + + + Next, define a type where the ZipCode is optional. + Em seguida, defina um tipo em que o CEP é opcional. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Em seguida, defina um tipo de interface que representa um objeto para computar a zona de remessa para o CEP do cliente, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + determinadas implementações para os métodos abstratos 'getState' e 'getShippingZone'. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Em seguida, calcule uma zona de remessa para um cliente usando uma instância da calculadora. + + + + This uses combinators in the Option module to allow a functional pipeline for + Isso usa combinadores no módulo Option para permitir um pipeline funcional para + + + + transforming data with Optionals. + transformando dados com Opcionais. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Unidades de medida são uma forma de anotar tipos numéricos primitivos de um modo fortemente tipado. + + + + You can then perform type-safe arithmetic on these values. + Então, você pode executar a aritmética fortemente tipada nesses valores. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + Primeiro, abra uma coleção de nomes comuns de unidade + + + + Define a unitized constant + Definir uma constante unitizada + + + + Next, define a new unit type + Em seguida, defina um novo tipo de unidade + + + + Conversion factor mile to meter. + Fator de conversão de milha para metro. + + + + Define a unitized constant + Definir uma constante unitizada + + + + Compute metric-system constant + Computar a constante de sistema métrico + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Valores que usam Unidades de Medida podem ser usados exatamente como o tipo numérico primitivo para coisas como impressão. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Classes são uma maneira de definir novos tipos de objetos em F# e dão suporte a constructos padrão Orientados a objeto. + + + + They can have a variety of members (methods, properties, events, etc.) + Elas podem ter uma variedade de membros (métodos, propriedades, eventos, etc.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Para saber mais sobre Classes, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Para saber mais sobre Membros, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Uma classe de vetor bidimensional simples. + + + + The class's constructor is on the first line, + O construtor da classe está na primeira linha, + + + + and takes two arguments: dx and dy, both of type 'double'. + e leva dois argumentos: dx e dy, ambos do tipo 'duplo'. + + + + This internal field stores the length of the vector, computed when the + Este campo interno armazena o comprimento do vetor, computado quando o + + + + object is constructed + objeto é construído + + + + 'this' specifies a name for the object's self identifier. + 'this' especifica um nome para o identificador automático do objeto. + + + + In instance methods, it must appear before the member name. + Em métodos de instância, ele deve aparecer antes do nome do membro. + + + + This member is a method. The previous members were properties. + Esse membro é um método. Os membros anteriores eram propriedades. + + + + This is how you instantiate the Vector2D class. + É assim que você cria uma instância de classe Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Obter um novo objeto de vetor em escala, sem modificar o objeto original. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Classes genéricas permitem que os tipos sejam definidos em relação a um conjunto de parâmetros de tipo. + + + + In the following, 'T is the type parameter for the class. + No exemplo a seguir, 'T é o parâmetro de tipo para a classe. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Este campo interno armazena os estados em uma lista. + + + + Add a new element to the list of states. + Adicione um novo elemento à lista de estados. + + + + use the '<-' operator to mutate the value. + use o operador '<-' para modificar o valor. + + + + Get the entire list of historical states. + Obter a lista completa de estados históricos. + + + + Get the latest state. + Obter o estado mais recente. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Uma instância ' int' da classe de controlador do estado. Observe que o parâmetro de tipo é deduzido. + + + + Add a state + Adicionar um estado + + + + Interfaces are object types with only 'abstract' members. + As interfaces são tipos de objeto com apenas membros 'abstract'. + + + + Object types and object expressions can implement interfaces. + Tipos de objeto e expressões de objeto podem implementar interfaces. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Este é um tipo que implementa IDisposable. + + + + This is the implementation of IDisposable members. + Essa é a implementação de membros IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + Este é um objeto que implementa IDisposable por meio de uma Expressão de Objeto + + + + Unlike other languages such as C# or Java, a new type definition is not needed + Diferentemente de outras linguagens, como C# ou Java, uma nova definição de tipo não é necessária + + + + to implement an interface. + para implementar uma interface. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + A biblioteca FSharp.Core define várias funções de processamento paralelo. Aqui + + + + you use some functions for parallel processing over arrays. + você usa algumas funções para processamento paralelo por matrizes. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Para saber mais, acesse: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + Primeiro, uma matriz de entradas. + + + + Next, define a functions that does some CPU intensive computation. + Em seguida, defina uma função que realiza computação com uso intensivo de CPU. + + + + Next, do a parallel map over a large input array. + Em seguida, faça um mapa paralelo por uma grande matriz de entrada. + + + + Next, print the results. + Em seguida, imprima os resultados. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Eventos são uma linguagem comum para programação em .NET, especialmente com aplicativos WinForms ou WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Primeiro, crie a instância do objeto Evento que consiste em ponto de assinatura (event.Publish) e gatilho de eventos (event.Trigger). + + + + Next, add handler to the event. + Em seguida, adicione o manipulador ao evento. + + + + Next, trigger the event. + Em seguida, dispare o evento. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Em seguida, crie uma instância do evento que segue a convenção padrão do .NET: (sender, EventArgs). + + + + Next, add a handler for this new event. + Em seguida, adicione um manipulador para este novo evento. + + + + Next, trigger this event (note that sender argument should be set). + Em seguida, dispare esse evento (observe que o argumento do remetente deve ser definido). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf new file mode 100644 index 0000000000..6bded45999 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Этот пример поможет узнать о различных элементах языка F#. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Чтобы выполнить код в F# Interactive, выделите фрагмент кода и нажмите ALT+ВВОД или щелкните правой кнопкой мыши + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + и выберите команду "Выполнение в интерактивном режиме". Интерактивное окно F# можно также открыть из меню "Вид". + + + + For more about F#, see: + Дополнительные сведения о F# см. по адресу: + + + + To see this tutorial in documentation form, see: + Чтобы просмотреть это руководство в виде документа, см.: + + + + To learn more about applied F# programming, use + Чтобы получить дополнительные сведения о прикладном программировании на языке F#, воспользуйтесь + + + + To install the Visual F# Power Tools, use + Чтобы установить Visual F# Power Tools, используйте + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + "Сервис" --> "Расширения и обновления" --> "В сети" и выполните поиск + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + Дополнительные шаблоны, которые можно использовать с F#, см. в разделе "Шаблоны в Интернете" в Visual Studio. + + + + 'New Project' --> 'Online Templates' + "Создать проект --> Шаблоны в Интернете" + + + + F# supports three kinds of comments: + F# поддерживает три типа комментариев: + + + + 1. Double-slash comments. These are used in most situations. + 1. Комментарии с двойной косой чертой. Они используются в большинстве ситуаций. + + + + 2. ML-style Block comments. These aren't used that often. + 2. Комментарии блоков в стиле ML. Они используются довольно редко. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Комментарии с тройной косой чертой. Они используются для документирования функций, типов и т. д. + + + + They will appear as text when you hover over something which is decorated with these comments. + При наведении указателя мыши на код, задекорированный этими комментариями, они отображаются в виде текста. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Кроме того, они поддерживают XML-комментарии в стиле .NET, делая возможным формирование справочной документации, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + а также позволяют редакторам (таким как Visual Studio) извлекать из них информацию. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + Открывайте пространства имен с помощью ключевого слова "open". + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Модуль представляет собой группирование кода F#, например значений, типов и значений функций. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Группирование кода в модулях помогает держать связанный код в одном месте и предотвратить конфликты имен в программе. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Это пример целого числа. + + + + This is a sample floating point number. + Это пример числа с плавающей запятой. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Это новое число, вычисленное с помощью некоторых арифметических операций. Числовые типы преобразуются с помощью + + + + functions 'int', 'double' and so on. + функций "int", "double" и т. п. + + + + This is a list of the numbers from 0 to 99. + Это список чисел от 0 до 99. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Это список всех кортежей, содержащих все числа от 0 до 99 и их квадраты. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + Следующая строка выводит список, включающий в себя кортежи, используя "%A" для универсальной печати. + + + + This is a sample integer with a type annotation + Это пример целого числа с аннотацией типа + + + + Values in F# are immutable by default. They cannot be changed + В F# значения по умолчанию неизменяемы. Их невозможно изменить + + + + in the course of a program's execution unless explicitly marked as mutable. + во время выполнения программы, если только они явно не помечены как изменяемые. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Привязка значения к имени через let делает его неизменяемым. + + + + The second line of code fails to compile because 'number' is immutable and bound. + Сбой компиляции второй строки кода происходит, так как number неизменяем и привязан. + + + + Re-defining 'number' to be a different value is not allowed in F#. + Переопределение number в другое значение запрещено в F#. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Изменяемая привязка. Она необходима, чтобы иметь возможность изменять значение otherNumber. + + + + When mutating a value, use '<-' to assign a new value. + При изменении значения используйте "<-", чтобы присвоить новое значение. + + + + You could not use '=' here for this purpose since it is used for equality + Не удалось использовать "=" здесь и для этой цели, так как знак используется как оператор равенства. + + + + or other contexts such as 'let' or 'module' + или другие контексты, такие как "let" или "module" + + + + Much of F# programming consists of defining functions that transform input data to produce + Программирование на языке F# в основном заключается в определении функций, которые преобразуют входные данные и выдают + + + + useful results. + полезные результаты. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + let используется для определения функции. Эта функция принимает целочисленный аргумент и возвращает целое число. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + Круглые скобки необязательны для аргументов функции, если только не используется явная аннотация типа. + + + + Apply the function, naming the function return result using 'let'. + Применяйте функции, именуя возвращаемый функцией результат с помощью let. + + + + The variable type is inferred from the function return type. + Тип переменной определяется типом возвращаемого значения функции. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + В этой строке используется "%d" для вывода результата как целого числа. Это типобезопасно. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + Если бы result1 не принадлежал к типу int, при компиляции строки произошел бы сбой. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + При необходимости аннотируйте тип имени параметра при помощи "(argument:type)". Скобки обязательны. + + + + Conditionals use if/then/elid/elif/else. + В условных выражениях используются операторы if, then, elid, elif и else. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + Обратите внимание, что в F# используется синтаксис с отступами в виде пробелов, аналогично таким языкам, как Python. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Эта строка использует "%f" для вывода результата в виде числа с плавающей запятой. Как и в случае с "%d" выше, это типобезопасно. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Логические значения являются основными типами данных в F#. Ниже приведен ряд примеров логических типов данных и условной логики. + + + + To learn more, see: + Подробности: + + + + and + И + + + + Booleans values are 'true' and 'false'. + Логические значения — это true и false. + + + + Operators on booleans are 'not', '&&' and '||'. + Операторы для логических значений — not, && и ||. + + + + This line uses '%b'to print a boolean value. This is type-safe. + В этой строке "%b" используется для вывода логического значения. Это типобезопасно. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Строки являются основными типами данных в F#. Ниже приведено несколько примеров строк и основных действий с ними. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + В строках используются двойные кавычки. + + + + Strings can also use @ to create a verbatim string literal. + В строках также может использоваться @ для создания буквальных (verbatim) строковых литералов. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Будут пропускаться escape-символы, такие как "\", "\n", "\t" и т. д. + + + + String literals can also use triple-quotes. + В строковых литералах также используются тройные кавычки. + + + + String concatenation is normally done with the '+' operator. + Сцепление строк обычно выполняется при помощи оператора "+". + + + + This line uses '%s' to print a string value. This is type-safe. + В этой строке "%s" используется для вывода строкового значения. Это типобезопасно. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Подстроки используют нотацию индексатора. Эта строка кода извлекает первые семь символов в виде подстроки. + + + + Note that like many languages, Strings are zero-indexed in F#. + Учтите, что, как и во многих других языках, в F# строки индексируются от нуля. + + + + Tuples are simple combinations of data values into a combined value. + Кортеж — это простое сочетание значений данных в виде объединенного значения. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Простой кортеж целых чисел. + + + + A function that swaps the order of two values in a tuple. + Функция, меняющая местами два значения в кортеже. + + + + F# Type Inference will automatically generalize the function to have a generic type, + Определение типа F# будет автоматически назначать функции универсальный тип, + + + + meaning that it will work with any type. + что означает, что он будет работать с любым типом. + + + + A tuple consisting of an integer, a string, + Кортеж, состоящий из целого числа, строки + + + + and a double-precision floating point number. + и числа двойной точности с плавающей запятой. + + + + A simple tuple of integers with a type annotation. + Простой кортеж целых чисел с аннотацией типа. + + + + Type annotations for tuples use the * symbol to separate elements + Аннотации типов для кортежей используют символ * для разделения элементов. + + + + Tuples are normally objects, but they can also be represented as structs. + Кортежи обычно являются объектами, но они также могут быть представлены как структуры. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Они полноценно взаимодействуют со структурами в C# и Visual Basic.NET; тем не менее + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + кортежи структур нельзя явно преобразовать в кортежи объектов (часто называемые эталонными кортежами). + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + Из-за этого произойдет сбой компиляции второй строки ниже. Раскомментируйте ее, чтобы увидеть, что произойдет. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Хотя кортежи-структуры и ссылочные кортежи невозможно преобразовывать неявно, + + + + you can explicitly convert via pattern matching, as demonstrated below. + вы можете явно преобразовывать их с помощью сопоставления шаблонов, как показано ниже. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + Операторы конвейера F# ("|>", "<|" и т. д.) и операторы объединения F# (">>", "<<") + + + + are used extensively when processing data. These operators are themselves functions + широко используются при обработке данных. Эти операторы сами по себе являются функциями, + + + + which make use of Partial Application. + использующими частичное применение. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Подробности об этих операторах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining. + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Подробности о частичном применении: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments. + + + + Squares a value. + Возводит значение в квадрат. + + + + Adds 1 to a value. + Добавляет 1 к значению. + + + + Tests if an integer value is odd via modulo. + Проверяет, является ли целое число нечетным по модулю. + + + + A list of 5 numbers. More on lists later. + Список из 5 чисел. Дополнительно о списках позднее. + + + + Given a list of integers, it filters out the even numbers, + При наличии списка целых чисел выполняет фильтрацию по номерам событий, + + + + squares the resulting odds, and adds 1 to the squared odds. + возводит полученные нечетные в квадрат, а затем добавляет 1 к нечетным, возведенным в квадрат. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + Более короткий способ записи squareOddValuesAndAddOne — вложить каждый + + + + sub-result into the function calls themselves. + вложенный результат в сами вызовы функции. + + + + This makes the function much shorter, but it's difficult to see the + Это позволяет значительно сократить функцию, но будет сложно увидеть + + + + order in which the data is processed. + порядок, в котором обрабатываются данные. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + Предпочтительный способ записи squareOddValuesAndAddOne — использовать операторы конвейера F#. + + + + This allows you to avoid creating intermediate results, but is much more readable + Это позволяет избежать создания промежуточных результатов, и при этом более удобно для чтения, + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + чем вложение вызовов функций, таких как squareOddValuesAndAddOneNested. + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + squareOddValuesAndAddOnePipeline можно сократить, переместив второй вызов List.map + + + + into the first, using a Lambda Function. + в первый, используя лямбда-функцию. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Учтите, что конвейеры также используются внутри лямбда-функции. Операторы конвейера F# + + + + can be used for single values as well. This makes them very powerful for processing data. + можно также использовать для отдельных значений. Это делает их очень эффективными при обработке данных. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + И наконец, можно исключить необходимость явного принятия значений в качестве параметра при помощи ">>" + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + для объединения двух основных операций: фильтрации четных чисел, а затем возведения в квадрат и добавления единицы. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Аналогично, часть "fun x -> ..." лямбда-выражения также не требуется, так как x просто + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + определяется в этой области действия, чтобы его можно было передать в функциональный конвейер. Таким образом, здесь также можно + + + + there as well. + использовать ">>". + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + Результат squareOddValuesAndAddOneComposition сам по себе является другой функцией, которая принимает + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + список целых чисел в качестве входных данных. Если squareOddValuesAndAddOneComposition выполняется со списком + + + + of integers, you'll notice that it produces the same results as previous functions. + целых чисел, вы заметите, что результаты соответствуют результатам предыдущих функций. + + + + This is using what is known as function composition. This is possible because functions in F# + Используется так называемая композиция функций. Это возможно, так как функции в F# + + + + use Partial Application and the input and output types of each data processing operation match + используют частичное применение, а входные и выходные типы каждой операции обработки данных соответствуют + + + + the signatures of the functions we're using. + сигнатурам функций, которые мы используем. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Списки — это упорядоченные, неизменяемые однонаправленные списки. При вычислении они являются безотложными. + + + + This module shows various ways to generate lists and process lists with some functions + Этот модуль демонстрирует различные способы создания и обработки списков при помощи некоторых функций + + + + in the 'List' module in the F# Core Library. + в модуле List основной библиотеки F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/lists. + + + + Lists are defined using [ ... ]. This is an empty list. + Списки определяются с помощью [ ... ]. Это пустой список. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Это — список с тремя элементами. Символ ";" используется для разделения элементов в одной строке. + + + + You can also separate elements by placing them on their own lines. + Элементы можно также разделить, поместив их в отдельные строки. + + + + This is a list of integers from 1 to 1000 + Это список целых чисел от 1 до 1000. + + + + Lists can also be generated by computations. This is a list containing + Списки также могут создаваться в результате вычислений. Это список, содержащий + + + + all the days of the year. + все дни года. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + Вывод первых пяти элементов daysList при помощи List.take. + + + + Computations can include conditionals. This is a list containing the tuples + Вычисления могут включать условные выражения. Это список, содержащий кортежи + + + + which are the coordinates of the black squares on a chess board. + являющиеся координатами черных квадратов на шахматной доске. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Списки можно преобразовывать с помощью List.map и других методов объединения, применяемых в функциональном программировании. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Это определение создает новый список путем возведения в квадрат чисел из numberList с помощью конвейера. + + + + operator to pass an argument to List.map. + оператор для передачи аргумента в List.map. + + + + There are many other list combinations. The following computes the sum of the squares of the + Существует множество других сочетаний списков. Приведенный ниже код вычисляет сумму квадратов. + + + + numbers divisible by 3. + числа, кратные 3. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Массивы — это изменяемые коллекции фиксированного размера, содержащие элементы одного типа. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Хотя они и похожи на списки (поддерживают перечисление и включают схожие методы объединения для обработки данных), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + они, как правило, быстрее и поддерживают быстрый случайный доступ. С другой стороны, они менее безопасны, так как изменяемы. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/arrays. + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Это — пустой массив. Обратите внимание, что синтаксис похож на синтаксис списков, но используются квадратные скобки "[| ... |]". + + + + Arrays are specified using the same range of constructs as lists. + Массивы задаются с помощью того же диапазона конструкций в виде списков. + + + + This is an array of numbers from 1 to 1000. + Это массив чисел от 1 до 1000. + + + + This is an array containing only the words "hello" and "world". + Это — массив, содержащий только слова "hello" и "world". + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Это — массив, инициализируемый по индексу и содержащий четные числа от 0 до 2000. + + + + Sub-arrays are extracted using slicing notation. + Подмассивы извлекаются с помощью нотации выделения фрагмента. + + + + You can loop over arrays and lists using 'for' loops. + Можно выполнять перебор массивов и списков при помощи циклов for. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Изменить содержимое элемента массива можно с помощью оператора присваивания в виде стрелки влево. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Подробности об этом операторе: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/values/index#mutable-variables. + + + + You can transform arrays using 'Array.map' and other functional programming operations. + Вы можете преобразовывать массивы при помощи Array.map и других операций функционального программирования. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + Следующий фрагмент вычисляет сумму длин слов, которые начинаются с буквы "h". + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Последовательности — это логические серии элементов одного типа. Это — более общий тип, чем списки и массивы. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Последовательности вычисляются по требованию и заново вычисляются при каждом их переборе. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + Последовательность F# является псевдонимом для .NET System.Collections.Generic.IEnumerable<'T>. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Функции обработки последовательностей можно также применять к спискам и массивам. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Это пустая последовательность. + + + + This a sequence of values. + Это последовательность значений. + + + + This is an on-demand sequence from 1 to 1000. + Это последовательность по требованию от 1 до 1000. + + + + This is a sequence producing the words "hello" and "world" + Это последовательность, создающая слова hello и world. + + + + This sequence producing the even numbers up to 2000. + Эта последовательность выдает целые числа до 2000. + + + + This is an infinite sequence which is a random walk. + Это бесконечная последовательность, представляющая случайное блуждание. + + + + This example uses yield! to return each element of a subsequence. + В этом примере используется оператор yield! для получения каждого элемента подпоследовательности. + + + + This example shows the first 100 elements of the random walk. + В этом примере показаны первые 100 элементов случайного блуждания. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Рекурсивные функции могут вызывать сами себя. В F# функции являются рекурсивными только + + + + when declared using 'let rec'. + при объявлении с помощью let rec. + + + + Recursion is the preferred way to process sequences or collections in F#. + Рекурсия — это предпочтительный способ обработки последовательностей или коллекций в F#. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions. + + + + This example shows a recursive function that computes the factorial of an + В этом примере показана рекурсивная функция, вычисляющая факториал + + + + integer. It uses 'let rec' to define a recursive function. + целое число. В нем используется "let rec" для определения рекурсивной функции. + + + + Computes the greatest common factor of two integers. + Вычисляет наибольший общий делитель двух целых чисел. + + + + Since all of the recursive calls are tail calls, + Так как все рекурсивные вызовы являются хвостовыми вызовами, + + + + the compiler will turn the function into a loop, + компилятор сделает из функции цикл, + + + + which improves performance and reduces memory consumption. + что повысит производительность и снизит потребление памяти. + + + + This example computes the sum of a list of integers using recursion. + Этот пример вычисляет сумму списка целых чисел при помощи рекурсии. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + При этом sumList становится функцией с хвостовой рекурсией, использующей вспомогательную функцию с аккумулятором результатов. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Вызывается вспомогательная функция хвостовой рекурсии, предоставляющая "0" в качестве аккумулятора начальных значений. + + + + An approach like this is common in F#. + Подобный подход широко распространен в F#. + + + + Records are an aggregate of named values, with optional members (such as methods). + Записи являются агрегатами именованных значений с необязательными элементами (такими как методы). + + + + They are immutable and have structural equality semantics. + Они являются неизменяемыми и обладают семантикой структурного равенства. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/records. + + + + This example shows how to define a new record type. + В этом примере показано, как определить новый тип записи. + + + + This example shows how to instantiate a record type. + В этом примере показано создание экземпляра типа записи. + + + + You can also do this on the same line with ';' separators. + Это также можно сделать в одной строке при помощи разделителя ";", + + + + This example shows how to use "copy-and-update" on record values. It creates + В этом примере показано, как использовать функцию "копировать и обновить" применительно к значениям записей. В нем создается + + + + a new record value that is a copy of contact1, but has different values for + новое значение записи, которое является копией contact1, но имеет другие значения для + + + + the 'Phone' and 'Verified' fields. + поля Phone и Verified. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions. + + + + This example shows how to write a function that processes a record value. + В этом примере показано, как создать функцию, обрабатывающую значение записи. + + + + It converts a 'ContactCard' object to a string. + Он преобразует объект ContactCard в строку. + + + + This is an example of a Record with a member. + Это — пример записи с элементом. + + + + Members can implement object-oriented members. + Элементы могут реализовать объектно-ориентированные элементы. + + + + Members are accessed via the '.' operator on an instantiated type. + Доступ к элементам осуществляется через оператор "." для экземпляра типа. + + + + Records can also be represented as structs via the 'Struct' attribute. + Записи также могут быть представлены как структуры при помощи атрибута Struct. + + + + This is helpful in situations where the performance of structs outweighs + Это удобно в ситуациях, когда производительность структур важнее + + + + the flexibility of reference types. + гибкости ссылочных типов. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Размеченные объединения (DU) — это значения, которые могут состоять из нескольких именованных форм или ветвей. + + + + Data stored in DUs can be one of several distinct values. + Данные, хранимые в размеченных объединениях, могут являться одними из нескольких различных значений. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/discriminated-unions. + + + + The following represents the suit of a playing card. + Следующий код представляет масть игральной карты. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Размеченное объединение также может использоваться для представления ранга игральной карты. + + + + Represents the rank of cards 2 .. 10 + Представляет достоинство карт 2 .. 10 + + + + Discriminated Unions can also implement object-oriented members. + Кроме того, размеченные объединения могут реализовать объектно-ориентированные элементы. + + + + This is a record type that combines a Suit and a Rank. + Это тип записи, объединяющий масть и достоинство. + + + + It's common to use both Records and Disciminated Unions when representing data. + Как правило, при представлении данных используются как записи, так и размеченные объединения. + + + + This computes a list representing all the cards in the deck. + Вычисляется список, представляющий все карты в колоде. + + + + This example converts a 'Card' object to a string. + В этом примере объект Card преобразуется в строку. + + + + This example prints all the cards in a playing deck. + В этом примере печатаются все карты колоды. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Размеченные объединения с одной ветвью часто используются для моделирования доменов. Это более типобезопасно, чем использование + + + + over primitive types such as strings and ints. + примитивных типов, таких как строки и целые числа. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Размеченные объединения с одной ветвью нельзя неявно преобразовать в тип или из типа, оболочкой которого они служат. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Например, функция, которая принимает адрес, не может принять в качестве входных данных строку + + + + or vive/versa. + или наоборот. + + + + You can easily instantiate a single-case DU as follows. + Можно легко создать экземпляр размеченного объединения с одной ветвью следующим образом. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Если вам требуется значение, вы можете распаковать базовое значение при помощи простой функции. + + + + Printing single-case DUs is simple with unwrapping functions. + Вывод размеченных объединений с одной ветвью не представляет сложности при использовании функций распаковки. + + + + Disciminated Unions also support recursive definitions. + Размеченные объединения также поддерживают рекурсивные определения. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Это представляет двоичное дерево поиска, в котором одна ветвь является пустым деревом, + + + + and the other being a Node with a value and two subtrees. + а другая — узлом со значением и двумя поддеревьями. + + + + Check if an item exists in the binary search tree. + Проверка наличия элемента в двоичном дереве поиска. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Рекурсивный поиск при помощи сопоставления шаблонов. Возвращает значение True, если существует; в противном случае — значение False. + + + + Check the left subtree. + Проверка левого поддерева. + + + + Check the right subtree. + Проверка правого поддерева. + + + + Inserts an item in the Binary Search Tree. + Вставляет элемент в двоичное дерево поиска. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Находит место для рекурсивной вставки при помощи сопоставления шаблонов, а затем вставляет новый узел. + + + + If the item is already present, it does not insert anything. + Если элемент уже существует, ничего не вставляется. + + + + No need to insert, it already exists; return the node. + Нет необходимости вставки, так как она уже существует; возврат узла. + + + + Call into left subtree. + Вызов левого поддерева. + + + + Call into right subtree. + Вызов правого поддерева. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Размеченные объединения также могут быть представлены как структуры при помощи атрибута Struct. + + + + This is helpful in situations where the performance of structs outweighs + Это удобно в ситуациях, когда производительность структур важнее + + + + the flexibility of reference types. + гибкости ссылочных типов. + + + + However, there are two important things to know when doing this: + Но при этом следует помнить о следующих двух важных вещах: + + + + 1. A struct DU cannot be recursively-defined. + 1. Размеченное объединение структуры не может определяться рекурсивно. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Каждой из ветвей размеченного объединения структуры должны быть присвоены уникальные названия. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Сопоставление шаблонов — это возможность F#, которая позволяет использовать шаблоны, + + + + which are a way to compare data with a logical structure or structures, + что представляет способ сравнения данных с логической структурой или структурами, + + + + decompose data into constituent parts, or extract information from data in various ways. + разложение данных на составные части или извлечение информации из данных различными способами. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Затем можно передать "форму" шаблона при помощи сопоставления шаблонов. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/pattern-matching. + + + + A record for a person's first and last name + Запись с именем и фамилией человека + + + + A Discriminated Union of 3 different kinds of employees + Размеченное соединение трех разных типов сотрудников + + + + Count everyone underneath the employee in the management hierarchy, + Подсчет всех сотрудников на уровнях иерархии управления, следующих за этим сотрудником, + + + + including the employee. + включая этого сотрудника. + + + + Find all managers/executives named "Dave" who do not have any reports. + Поиск всех менеджеров и руководителей с именем Dave, не имеющих отчетов. + + + + This uses the 'function' shorthand to as a lambda expression. + При этом используется сокращение функции до лямбда-выражения. + + + + [] matches an empty list. + [] соответствует пустому списку. + + + + '_' is a wildcard pattern that matches anything. + "_" — подстановочный знак, обозначающий любой набор символов. + + + + This handles the "or else" case. + Обрабатывается ветвь "or else". + + + + You can also use the shorthand function construct for pattern matching, + Для сопоставления шаблонов можно также использовать краткую форму конструкции функции, + + + + which is useful when you're writing functions which make use of Partial Application. + что удобно при написании функций, использующих частичное применение. + + + + Define some more functions which parse with the helper function. + Определение некоторых других функций, которые выполняют анализ при помощи вспомогательной функции. + + + + Active Patterns are another powerful construct to use with pattern matching. + Активные шаблоны — это еще одна эффективная конструкция, используемая при сопоставлении шаблонов. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Они позволяют сегментировать входные данные в настраиваемые формы с декомпозицией в месте вызова сопоставления шаблонов. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/active-patterns. + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + Сопоставление шаблонов по ключевому слову function и активным шаблонам часто выглядит следующим образом. + + + + Call the printer with some different values to parse. + Вызов принтера с несколькими разными значениями для анализа. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Опциональные значения - это любой тип значений, отмеченных ключевым словом Some или None. + + + + They are used extensively in F# code to represent the cases where many other + Они широко используются в коде F# для представления случаев, когда во многих + + + + languages would use null references. + других языках используются пустые ссылки. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/options. + + + + First, define a zipcode defined via Single-case Discriminated Union. + Во-первых, определите индекс при помощи размеченного объединения с одной ветвью. + + + + Next, define a type where the ZipCode is optional. + Далее определите тип, в котором ZipCode является необязательным. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Далее определите тип интерфейса, представляющий объект для вычисления зоны доставки по почтовому индексу заказчика, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + при заданных реализациях абстрактных методов getState и getShippingZone. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Затем определите зону доставки для заказчика при помощи экземпляра калькулятора. + + + + This uses combinators in the Option module to allow a functional pipeline for + При этом используются методы объединения в модуле Option, чтобы обеспечить работу функционального конвейера для + + + + transforming data with Optionals. + преобразования данных с помощью Optionals. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Единицы измерения — это способ аннотации примитивных числовых типов типобезопасным способом. + + + + You can then perform type-safe arithmetic on these values. + Затем с этими значениями можно выполнять типобезопасные арифметические действия. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/units-of-measure. + + + + First, open a collection of common unit names + Сначала откройте коллекцию стандартных названий единиц измерения. + + + + Define a unitized constant + Определите константу с единицей измерения. + + + + Next, define a new unit type + Далее определите новый тип единицы. + + + + Conversion factor mile to meter. + Коэффициент пересчета миль в метры. + + + + Define a unitized constant + Определите константу с единицей измерения. + + + + Compute metric-system constant + Вычислите константу в метрической системе. + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Значения, использующие единицы измерения, можно применять как примитивные числовые типы для таких действий, как печать. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Классы — это способ определения новых типов объектов в F#. Они поддерживают стандартные объектно-ориентированные конструкции. + + + + They can have a variety of members (methods, properties, events, etc.) + Они могут содержать различные элементы (методы, свойства, события и т. д.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Подробности о классах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/classes. + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Подробности об элементах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/members. + + + + A simple two-dimensional Vector class. + Простой двухмерный класс Vector. + + + + The class's constructor is on the first line, + Конструктор класса находится в первой строке + + + + and takes two arguments: dx and dy, both of type 'double'. + и принимает два аргумента: dx и dy, оба имеют тип double. + + + + This internal field stores the length of the vector, computed when the + В этом внутреннем поле хранится длина вектора, вычисляемая, когда + + + + object is constructed + объект создается + + + + 'this' specifies a name for the object's self identifier. + Ключевое слово this задает имя идентификатора самого объекта. + + + + In instance methods, it must appear before the member name. + В методах экземпляров оно должно находиться перед именем элемента. + + + + This member is a method. The previous members were properties. + Этот элемент является методом. Предыдущие элементы были свойствами. + + + + This is how you instantiate the Vector2D class. + Вот как выполняется создание экземпляра класса Vector2D. + + + + Get a new scaled vector object, without modifying the original object. + Получение нового объекта масштабируемого вектора без изменения исходного объекта. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Универсальные классы позволяют определять типы с набором параметров типа. + + + + In the following, 'T is the type parameter for the class. + В следующем примере 'T — это параметр типа для класса. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/generics/. + + + + This internal field store the states in a list. + В этом внутреннем поле хранятся состояния в списке. + + + + Add a new element to the list of states. + Добавление нового элемента в список состояний. + + + + use the '<-' operator to mutate the value. + Оператор "<-" служит для изменения значения. + + + + Get the entire list of historical states. + Получение полного списка исторических состояний. + + + + Get the latest state. + Получение последнего состояния. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Экземпляр int класса отслеживания состояний. Обратите внимание, что параметр типа подразумевается. + + + + Add a state + Добавление состояния + + + + Interfaces are object types with only 'abstract' members. + Интерфейсы — это типы объектов, которые имеют только абстрактные члены. + + + + Object types and object expressions can implement interfaces. + Типы объектов и выражения объектов могут реализовывать интерфейсы. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/interfaces. + + + + This is a type that implements IDisposable. + Это — тип, который реализует интерфейс IDisposable. + + + + This is the implementation of IDisposable members. + Это — реализация элементов интерфейса IDisposable. + + + + This is an object that implements IDisposable via an Object Expression + Это — объект, реализующий интерфейс IDisposable через выражение объекта. + + + + Unlike other languages such as C# or Java, a new type definition is not needed + В отличие от других языков, таких как C# или Java, новое определение типа не требуется + + + + to implement an interface. + для реализации интерфейса. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + В библиотеке FSharp.Core определен ряд функций параллельной обработки. Здесь + + + + you use some functions for parallel processing over arrays. + вы используете определенные функции для параллельной обработки массивов. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Подробности: https://msdn.microsoft.com/ru-ru/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D. + + + + First, an array of inputs. + Сначала — массив входных данных. + + + + Next, define a functions that does some CPU intensive computation. + Далее определите функции, выполняющие ряд вычислений с интенсивным использованием ЦП. + + + + Next, do a parallel map over a large input array. + Затем выполните параллельное сопоставление по большому входному массиву. + + + + Next, print the results. + Далее напечатайте результаты. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + События представляют собой стандартные идиомы программирования .NET, особенно для приложений WinForms или WPF. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/members/events. + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + Сначала создайте экземпляр объекта Event, состоящий из точки подписки (event.Publish) и триггера события (event.Trigger). + + + + Next, add handler to the event. + Затем добавьте обработчик для события. + + + + Next, trigger the event. + Затем активируйте событие. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Затем создайте экземпляр события в соответствии со стандартным соглашением .NET: (sender, EventArgs). + + + + Next, add a handler for this new event. + Затем добавьте обработчик для этого нового события. + + + + Next, trigger this event (note that sender argument should be set). + Затем вызовите событие (обратите внимание на то, что аргумент sender должен быть задан). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf new file mode 100644 index 0000000000..2fcd8d0f2c --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + Bu örnek, size F# dilinin öğelerini gösterir. + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + Kodu F# Etkileşimli’de yürütmek için kodun bir bölümünü vurgulayın ve Alt-Enter'a basın veya sağ tıklatın + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + ve "Etkileşimlide Yürüt" seçeneğini belirleyin. F# Etkileşimli Penceresini "Görünüm" menüsünden açabilirsiniz. + + + + For more about F#, see: + F# hakkında daha fazla bilgi için bkz: + + + + To see this tutorial in documentation form, see: + Bu öğreticiyi belge biçiminde görmek için, bkz: + + + + To learn more about applied F# programming, use + Uygulamalı F# programlama hakkında daha fazla bilgi edinmek için şunu kullanın: + + + + To install the Visual F# Power Tools, use + Visual F# Power Tools'u yüklemek için + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + 'Araçlar' --> 'Uzantılar ve Güncelleştirmeler' --> `Çevrimiçi` seçeneğini kullanın ve arama yapın + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + F# ile kullanabileceğiniz ek şablonlar için Visual Studio'daki 'Çevrimiçi Şablonlar'a bakın, + + + + 'New Project' --> 'Online Templates' + 'Yeni Proje' --> 'Çevrimiçi Şablonlar' + + + + F# supports three kinds of comments: + F# üç açıklama türünü destekler: + + + + 1. Double-slash comments. These are used in most situations. + 1. Çift eğik çizgili açıklamalar. Çoğu durumda bunlar kullanılır. + + + + 2. ML-style Block comments. These aren't used that often. + 2. ML stili Blok açıklamaları. Bunlar sık kullanılmaz. + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. Üç eğik çizgili açıklamalar. Bunlar işlevleri, türleri vb. belgelemek için kullanılır. + + + + They will appear as text when you hover over something which is decorated with these comments. + Bu açıklamalarla belirlenmiş bir öğenin üzerine geldiğinizde, açıklamalar metin olarak görüntülenir. + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + Ayrıca başvuru belgeleri oluşturmanıza olanak sağlayan .NET stili XML açıklamalarını destekler, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + bilgi ayıklamak için düzenleyicilerin (örneğin Visual Studio) kullanılmasına da olanak sağlar. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + 'Open' anahtar sözcüğünü kullanarak ad alanlarını açın. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + Modül; değer, tür ve işlev değeri gibi bir F# kodu gruplandırmasıdır. + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + Kodu modüller içinde gruplandırmak ilgili kodların bir arada bulunmasını sağlar ve programınızda ad çakışmalarını önlemeye yardımcı olur. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + Bu, örnek bir tamsayıdır. + + + + This is a sample floating point number. + Bu, örnek bir kayan noktalı sayıdır. + + + + This computed a new number by some arithmetic. Numeric types are converted using + Bu, aritmetik kullanarak yeni bir sayı hesaplar. Sayısal türler + + + + functions 'int', 'double' and so on. + 'int', 'double' vb. işlevler kullanılarak dönüştürülür. + + + + This is a list of the numbers from 0 to 99. + Bu, 0'dan 99'a kadar olan sayıların listesidir. + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + Bu, 0'dan 99'a kadar olan sayıları ve bunların karelerini içeren bir listedir. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + Sonraki satır genel yazdırma için '%A' kullanarak demetleri içeren bir liste yazdırır. + + + + This is a sample integer with a type annotation + Bu tür açıklaması olan örnek bir tamsayıdır + + + + Values in F# are immutable by default. They cannot be changed + F# değerleri varsayılan olarak sabittir. Bu değerler + + + + in the course of a program's execution unless explicitly marked as mutable. + değiştirilebilir olarak açıkça işaretlenmediği sürece bir programın yürütülmesi sırasında değiştirilemez. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + Bir değeri 'let' ile bir ada bağlamak, değeri sabit yapar. + + + + The second line of code fails to compile because 'number' is immutable and bound. + 'Number' değişmez ve bağlı olduğu için ikinci kod satırı derlenemiyor. + + + + Re-defining 'number' to be a different value is not allowed in F#. + F# içinde 'number' değerini farklı bir değer olarak yeniden tanımlamaya izin verilmez. + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + Değiştirilebilir bir bağlama. Bu, 'otherNumber' değerini değiştirmek için gereklidir. + + + + When mutating a value, use '<-' to assign a new value. + Bir değeri değiştirirken, yeni bir değer atamak için '<-' kullanın. + + + + You could not use '=' here for this purpose since it is used for equality + Eşitlik amacıyla kullanıldığından, burada '=' kullanamazsınız + + + + or other contexts such as 'let' or 'module' + veya 'let' ya da 'module' gibi diğer bağlamlar + + + + Much of F# programming consists of defining functions that transform input data to produce + F# programlama çoğunlukla, giriş verilerini kullanışlı sonuçlara dönüştüren işlevleri + + + + useful results. + tanımlamaktan oluşur. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + Bir işlevi tanımlamak için 'let' kullanın. Bu, bir tamsayı bağımsız değişkenini kabul ederek bir tamsayı döndürür. + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + İşlev bağımsız değişkenlerinde ayraçlar, açık tür ek açıklaması kullanılan durumlar dışında isteğe bağlıdır. + + + + Apply the function, naming the function return result using 'let'. + İşlev döndürme sonucunu 'let' ile adlandırarak işlevi uygulayın. + + + + The variable type is inferred from the function return type. + Değişken türü, işlev dönüş türü olarak algılanır. + + + + This line uses '%d' to print the result as an integer. This is type-safe. + Bu satır, sonucu bir tamsayı olarak yazdırmak için '%d' kullanır. Tür kullanımıyla uyumludur. + + + + If 'result1' were not of type 'int', then the line would fail to compile. + 'Result1' 'int' türünde değilse, satır derleme işlemi başarısız olur. + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + Gerekli olduğunda, '(argument:type)' kullanarak parametre adı türü için ek açıklama girin. Ayraçlar gereklidir. + + + + Conditionals use if/then/elid/elif/else. + Koşullu deyimlerde if/then/elid/elif/else kullanılır. + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + F#'ın, Python gibi diller ile benzer şekilde, boşluk girintisini tanıyan söz dizimi kullandığını unutmayın. + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + Bu satır, sonucu kayan noktalı sayı olarak yazdırmak için '%f' kullanır. Yukarıdaki '%d' gibi bu da tür kullanımıyla uyumludur. + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + Boole değerleri, F# içindeki temel veri türleridir. Aşağıda bazı Boole ve koşullu mantık örnekleri verilmiştir. + + + + To learn more, see: + Daha fazla bilgi için bkz. + + + + and + ve + + + + Booleans values are 'true' and 'false'. + Boole değerleri şunlardır: 'true' ve 'false'. + + + + Operators on booleans are 'not', '&&' and '||'. + Boole değerleri üzerindeki işleçler: 'not', '&&' ve '||'. + + + + This line uses '%b'to print a boolean value. This is type-safe. + Bu satır, bir boole değeri yazdırmak için '%b' kullanır. Tür kullanımıyla uyumludur. + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + Dizeler, F# içindeki temel veri türleridir. Aşağıda bazı Dizeler ve temel dize işleme örnekleri verilmiştir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + Dizeler çift tırnak kullanır. + + + + Strings can also use @ to create a verbatim string literal. + Dizeler ayrıca, tam harf dizisi oluşturmak için @ kullanabilir. + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + Bu; '\', '\n', '\t' vb. kaçış karakterlerini yoksayar. + + + + String literals can also use triple-quotes. + Harf dizileri ayrıca üçlü tırnak da kullanabilir. + + + + String concatenation is normally done with the '+' operator. + Dizi bitiştirme normalde '+' işleci ile yapılır. + + + + This line uses '%s' to print a string value. This is type-safe. + Bu satır, bir dize değeri yazdırmak için '%s' kullanır. Tür kullanımıyla uyumludur. + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + Alt dizeler dizin oluşturucu gösterimini kullanır. Bu satır, ilk 7 karakteri alt dize olarak ayıklar. + + + + Note that like many languages, Strings are zero-indexed in F#. + Birçok dilde olduğu gibi F#'ta da Dizeler sıfır dizinlidir. + + + + Tuples are simple combinations of data values into a combined value. + Demetler, veri değerlerinin birleşik bir değer halindeki basit bileşimleridir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + Basit bir tamsayı demeti. + + + + A function that swaps the order of two values in a tuple. + Bir demetteki iki değerin sırasını değiştiren bir işlev. + + + + F# Type Inference will automatically generalize the function to have a generic type, + F# Tür Çıkarımı, işlevi genel türe sahip olacak şekilde otomatik olarak genelleştirir, + + + + meaning that it will work with any type. + yani, herhangi bir tür ile çalışabilir. + + + + A tuple consisting of an integer, a string, + Bir tamsayı, bir dize ve bir çift duyarlıklı kayan nokta sayısından + + + + and a double-precision floating point number. + oluşan bir demet. + + + + A simple tuple of integers with a type annotation. + Tür ek açıklaması içeren basit bir tamsayı tanımlama grubu. + + + + Type annotations for tuples use the * symbol to separate elements + Tanımlama grupları için tür ek açıklamaları öğeleri ayırmak için * sembolünü kullanır + + + + Tuples are normally objects, but they can also be represented as structs. + Demetler, normalde nesnedir ancak yapı olarak da gösterilebilir. + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + Bunlar C# ve Visual Basic.NET ile tamamen uyumlu olarak birlikte çalışır ancak + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + yapı demetleri, nesne demetleri ile (genellikle başvuru demetleri olarak adlandırılır) örtük olarak dönüştürülebilir değildir. + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + Bu nedenle aşağıdaki ikinci satırı derleme işlemi başarısız olacak. Ne olacağını görmek için açıklamayı kaldırın. + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + Yapı demetleri ile başvuru demetleri arasında örtük dönüştürme gerçekleştiremezsiniz, ancak + + + + you can explicitly convert via pattern matching, as demonstrated below. + aşağıda gösterildiği gibi, desen eşleştirme aracılığıyla açık dönüştürme gerçekleştirebilirsiniz. + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + F# kanal işleçleri ('|>', '<|', vb.) ve F# birleştirme işleçleri ('>>', '<<') + + + + are used extensively when processing data. These operators are themselves functions + veriler işlenirken yaygın olarak kullanılır. Bu işleçler, başı başına birer işlevdir ve + + + + which make use of Partial Application. + Kısmi Uygulamadan yararlanır. + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + Bu işleçler hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + Kısmi Uygulama hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + Bir değerin karesini alır. + + + + Adds 1 to a value. + Bir değere 1 ekler. + + + + Tests if an integer value is odd via modulo. + Mod aracılığıyla bir tamsayı değerinin tek sayı olup olmadığını test eder. + + + + A list of 5 numbers. More on lists later. + 5 numaradan oluşan bir liste. Listeler hakkında daha fazla bilgiyi ilerleyen bölümlerde bulabilirsiniz. + + + + Given a list of integers, it filters out the even numbers, + Bir tamsayı listesinde, çift sayıları filtreler, + + + + squares the resulting odds, and adds 1 to the squared odds. + kalan tek sayıların karesini alır ve karesi alınan tek sayılara 1 ekler. + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + 'squareOddValuesAndAddOne' yazmanın daha kısa bir yolu, her bir + + + + sub-result into the function calls themselves. + alt sonucu işlev hücrelerinin kendisinde iç içe yerleştirmektir. + + + + This makes the function much shorter, but it's difficult to see the + Bu, işlevi çok daha kısa hale getirir ancak + + + + order in which the data is processed. + verilerin işlenme sırasını görmek zordur. + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + 'squareOddValuesAndAddOne' yazmanın tercih edilen bir yolu, F# kanal işleçlerini kullanmaktır. + + + + This allows you to avoid creating intermediate results, but is much more readable + Bu, ara sonuçlar oluşturmaktan kaçınmanızı sağlar ancak + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + 'squareOddValuesAndAddOneNested' gibi iç içe geçmiş işlev çağrılarından daha okunaklıdır + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + 'squareOddValuesAndAddOnePipeline' öğesini kısaltmak için ikinci `List.map` çağrısını + + + + into the first, using a Lambda Function. + bir Lambda İşlevi kullanarak birinciye taşıyabilirsiniz. + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + Komut zincirleri, lambda işlevi içinde de kullanılıyor. F# kanal işleçleri + + + + can be used for single values as well. This makes them very powerful for processing data. + tek değerler için de kullanılabilir. Bu, işleçlerin veri işleme işlevlerini geliştirir. + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + Son olarak, şu iki temel işlemi oluşturmak için '>>' kullanarak 'values' öğesini parametre olarak + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + açıkça alma ihtiyacını ortadan kaldırabilirsiniz: çift sayıları filtreleme ve ardından karelerini alıp bir ekleme. + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + Benzer şekilde, 'x' bir işlevsel komut zincirine geçirilmek için bu kapsamda tanımlandığından + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + lambda ifadesindeki 'fun x -> ...' bölümü de gerekli değildir. Bu nedenle, '>>' + + + + there as well. + burada da kullanılabilir. + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + 'squareOddValuesAndAddOneComposition' sonucunun kendisi, giriş olarak bir tamsayı listesi alan + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + diğer bir işlevdir. 'squareOddValuesAndAddOneComposition' öğesini bir tamsayı listesi ile + + + + of integers, you'll notice that it produces the same results as previous functions. + yürütürseniz, önceki işlevler ile aynı sonuçları ürettiğini fark görürsünüz. + + + + This is using what is known as function composition. This is possible because functions in F# + Bu, işlev kompozisyonu olarak bilinen işlemi kullanır. Bu, F# içindeki işlevler Kısmi Uygulama kullandığı + + + + use Partial Application and the input and output types of each data processing operation match + ve her bir bilgi işlem işleminin giriş ve çıkış türleri kullandığımız işlevlerin imzaları ile eşleştiği için + + + + the signatures of the functions we're using. + mümkün olmaktadır. + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + Listeler sıralı, sabit ve tek bağlantılıdır. Bu listelerde erken değerlendirme yapılır. + + + + This module shows various ways to generate lists and process lists with some functions + Bu modül, liste oluşturmanın çeşitli yollarını gösterir ve listeleri F# Core Kitaplığı'ndaki + + + + in the 'List' module in the F# Core Library. + 'List' modülünde yer alan işlevlerle işler. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + Listeler [ ... ] kullanılarak tanımlanır. Bu boş bir listedir. + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + Bu, 3 öğeden oluşan bir listedir. ';' aynı satırdaki öğeleri ayırmak için kullanılır. + + + + You can also separate elements by placing them on their own lines. + Öğeleri, ayrı satırlara yerleştirerek de ayırabilirsiniz. + + + + This is a list of integers from 1 to 1000 + Bu, 1'den 1000'e kadar olan tamsayıların listesidir + + + + Lists can also be generated by computations. This is a list containing + Listeler ayrıca hesaplamalar aracılığıyla da üretilebilir. Bu, yılın tüm + + + + all the days of the year. + günlerini içeren bir listedir. + + + + Print the first 5 elements of 'daysList' using 'List.take'. + 'List.take' kullanarak 'daysList'in ilk 5 öğesini yazdırın. + + + + Computations can include conditionals. This is a list containing the tuples + Hesaplamalar, koşullu deyimler içerebilir. Bu, bir satranç tahtasındaki siyah karelerin + + + + which are the coordinates of the black squares on a chess board. + koordinatları olan demetleri içeren bir listedir. + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + Listeler, 'List.map' ve diğer işlevsel programlama birleştiricileri kullanılarak dönüştürülebilir. + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + Bu tanım, numberList içindeki sayıların karelerini alıp, List.map'e bir bağımsız değişken geçirmek üzere + + + + operator to pass an argument to List.map. + komut zinciri işlecini kullanarak yeni bir liste oluşturur. + + + + There are many other list combinations. The following computes the sum of the squares of the + Başka birçok liste bileşimi daha vardır. Aşağıda, 3'e bölünebilen sayıların karelerinin + + + + numbers divisible by 3. + toplamı hesaplanır. + + + + Arrays are fixed-size, mutable collections of elements of the same type. + Diziler, aynı türdeki sabit boyutlu, değiştirilebilir öğe koleksiyonlarıdır. + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + Lists'e benzer olsalar da (numaralandırmayı desteklerler ve bilgi işlem için benzer birleştiricilere sahiptirler) + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + genellikle daha hızlıdırlar ve hızlı rastgele erişimi desteklerler. Buna karşılık, değişken oldukları için daha az güvenlidirler. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + Bu, boş dizidir. Söz diziminin Lists'e benzediğine ancak `[| ... |]` kullandığına dikkat edin. + + + + Arrays are specified using the same range of constructs as lists. + Diziler, listeler ile aynı yapı aralıkları kullanılarak belirtilir. + + + + This is an array of numbers from 1 to 1000. + Bu, 1'den 1000'e kadar olan sayıların dizisidir. + + + + This is an array containing only the words "hello" and "world". + Bu, yalnızca "hello" ve "world" sözcüklerini içeren bir dizidir. + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + Bu, dizin tarafından başlatılan ve 0'dan 2000'e kadar olan çift sayıları içeren bir dizidir. + + + + Sub-arrays are extracted using slicing notation. + Alt diziler dilimleme gösterimi aracılığıyla ayıklanır. + + + + You can loop over arrays and lists using 'for' loops. + Diziler ve listeler üzerinden döngü oluşturmak için 'for' döngülerini kullanabilirsiniz. + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + Bir dizi öğesinin içeriğini sol ok atama işlecini kullanarak değiştirebilirsiniz. + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + Bu işleç hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + 'Array.map' ve diğer işlevsel programlama işlemlerini kullanarak dizileri dönüştürebilirsiniz. + + + + The following calculates the sum of the lengths of the words that start with 'h'. + Aşağıdaki, 'h' ile başlayan sözcüklerin uzunluklarının toplamını hesaplar. + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + Sıralar, aynı türdeki öğelerden oluşan mantıksal öğe serileridir. Bunlar, Lists ve Arrays'e kıyasla daha genel türlerdir. + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + Sıralar isteğe bağlı olarak değerlendirilir ve her yinelendiklerinde yeniden değerlendirilir. + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + F# sırası, .NET System.Collections.Generic.IEnumerable<'T> için diğer addır. + + + + Sequence processing functions can be applied to Lists and Arrays as well. + Seri işleme işlevleri, Listeler ve Dizilere de uygulanabilir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + Bu, boş bir seridir. + + + + This a sequence of values. + Bu bir değerler serisidir. + + + + This is an on-demand sequence from 1 to 1000. + Bu, 1'den 1000'e kadar olan isteğe bağlı bir seridir. + + + + This is a sequence producing the words "hello" and "world" + Bu, "hello" ve "world" sözcüklerini üreten bir seridir + + + + This sequence producing the even numbers up to 2000. + Bu, 2000'e kadar olan çift sayıları üreten bir seridir. + + + + This is an infinite sequence which is a random walk. + Bu, rastgele olan sonsuz bir seridir. + + + + This example uses yield! to return each element of a subsequence. + Bu örnek, alt serinin her öğesini döndürmek için yield! kullanır. + + + + This example shows the first 100 elements of the random walk. + Bu örnek rastgele serinin ilk 100 öğesini gösterir. + + + + Recursive functions can call themselves. In F#, functions are only recursive + Özyinelemeli işlevler kendilerini çağırabilir. F# içinde, işlevler yalnızca + + + + when declared using 'let rec'. + 'let rec' kullanılarak bildirildiğinde özyinelemeli olur. + + + + Recursion is the preferred way to process sequences or collections in F#. + Özyineleme, F# içinde sıraları veya koleksiyonları işlemek için tercih edilen yöntemdir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + Bu örnek, bir tamsayının faktöriyelini hesaplayan özyinelemeli bir işlevi + + + + integer. It uses 'let rec' to define a recursive function. + gösterir. Özyinelemeli işlevi tanımlamak için 'let rec' kullanır. + + + + Computes the greatest common factor of two integers. + İki tamsayının en büyük ortak çarpanını hesaplar. + + + + Since all of the recursive calls are tail calls, + Özyinelemeli tüm çağrılar tail çağrısı olduğundan, + + + + the compiler will turn the function into a loop, + derleyici, işlevi bir döngüye dönüştürür, + + + + which improves performance and reduces memory consumption. + bu da performansı artırır ve bellek tüketimini azaltır. + + + + This example computes the sum of a list of integers using recursion. + Bu örnek, özyineleme kullanarak bir tamsayılar listesinin toplamını hesaplar. + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + Bu, bir sonuç biriktirici ile bir yardımcı işlev kullanarak 'sumList' tail öğesini özyinelemeli yapar. + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + Bu, çekirdek biriktirici olarak '0' sağlayarak özyinelemeli tail yardımcı işlevini çağırır. + + + + An approach like this is common in F#. + Benzer yaklaşımlar F# içinde yaygındır. + + + + Records are an aggregate of named values, with optional members (such as methods). + Kayıtlar, isteğe bağlı üyeleri (örneğin, metotlar) içeren adlandırılmış değerlerin kümesidir. + + + + They are immutable and have structural equality semantics. + Bunlar sabittir ve yapısal eşitlik semantiğine sahiptir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + Bu örnek yeni bir kayıt türü tanımlamayı gösterir. + + + + This example shows how to instantiate a record type. + Bu örnekte, bir kayıt türünün örneğinin nasıl oluşturulacağı gösterilmektedir. + + + + You can also do this on the same line with ';' separators. + Bunu ';' ayırıcıları ile aynı satırda da yapabilirsiniz. + + + + This example shows how to use "copy-and-update" on record values. It creates + Bu örnek kayıt değerlerinde "kopyalama ve güncelleştirme" kullanımını gösterir. contact1'in + + + + a new record value that is a copy of contact1, but has different values for + kopyası olan, ama 'Telefon' ve 'Doğrulanmış' alanları için farklı değerleri olan + + + + the 'Phone' and 'Verified' fields. + yeni bir kayıt değeri oluşturur. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + Bu örnek kayıt değerini işleyen bir işlev yazmayı gösterir. + + + + It converts a 'ContactCard' object to a string. + 'ContactCard' nesnesini dizeye dönüştürür. + + + + This is an example of a Record with a member. + Bu, üye içeren bir Kayıt örneğidir. + + + + Members can implement object-oriented members. + Üyeler, nesne yönelimli üyeleri uygulayabilir. + + + + Members are accessed via the '.' operator on an instantiated type. + Örnekli bir tür üzerinde, üyelere '.' işleci ile erişilir. + + + + Records can also be represented as structs via the 'Struct' attribute. + Kayıtlar 'Struct' özniteliği ile yapı olarak da gösterilebilir. + + + + This is helpful in situations where the performance of structs outweighs + Bu, yapıların performansının, başvuru türlerinin esnekliğinden daha önemli + + + + the flexibility of reference types. + olduğu durumlarda kullanışlıdır. + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + Ayırt Edici Birleşimler (kısaca DU), bir dizi adlandırılmış form veya durum olabilen değerleri ifade eder. + + + + Data stored in DUs can be one of several distinct values. + DU'larda depolanan veriler birkaç farklı değerden biri olabilir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + Aşağıdaki, bir iskambil kartının cinsini gösterir. + + + + A Disciminated Union can also be used to represent the rank of a playing card. + Bir iskambil kartının sırasını göstermek için bir Ayırt Edici Birleşim de kullanılabilir. + + + + Represents the rank of cards 2 .. 10 + 2 .. 10 arasındaki kartları temsil eder + + + + Discriminated Unions can also implement object-oriented members. + Ayırt Edici Birleşimler ayrıca nesne yönelimli üyeleri uygulayabilir. + + + + This is a record type that combines a Suit and a Rank. + Bu, Cins ve Sırayı birleştiren bir kayıt türüdür. + + + + It's common to use both Records and Disciminated Unions when representing data. + Verileri temsil ederken Kayıtları ve Ayırt Edici Birleşimleri birlikte kullanmak yaygındır. + + + + This computes a list representing all the cards in the deck. + Bu, destedeki tüm kartları gösteren bir liste hesaplar. + + + + This example converts a 'Card' object to a string. + Bu örnek, bir 'Card' nesnesini dizeye dönüştürür. + + + + This example prints all the cards in a playing deck. + Bu örnek bir iskambil destesindeki tüm kartları yazdırır. + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + Tek Olaylı DU'lar genellikle etki alanı modelleme için kullanılır. Bu, dizeler ve tamsayılar gibi temel türlere göre + + + + over primitive types such as strings and ints. + ek tür güvenliği sağlamanıza yardımcı olabilir. + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + Tek durumlu DU'lar, sarmaladıkları türe veya bu türden örtük olarak dönüştürülemez. + + + + For example, a function which takes in an Address cannot accept a string as that input, + Örneğin, Adres alan bir işlev bu giriş için dize kabul edemez + + + + or vive/versa. + veya bu durumun tersi olamaz. + + + + You can easily instantiate a single-case DU as follows. + Tek Olaylı DU'ları aşağıdaki gibi kolayca örnekleyebilirsiniz. + + + + When you need the value, you can unwrap the underlying value with a simple function. + Değere ihtiyacınız olduğunda, basit bir işlev ile temel değerin sarmalamasını açabilirsiniz. + + + + Printing single-case DUs is simple with unwrapping functions. + Sarmalama açma işlevleri ile tek olayı DU'ları yazdırmak kolaydır. + + + + Disciminated Unions also support recursive definitions. + Ayırt Edici Birleşimler ayrıca özyinelemeli tanımları da destekler. + + + + This represents a Binary Search Tree, with one case being the Empty tree, + Bu, bir olayı Boş ağacı ve diğeri bir değer ile iki alt ağaç içeren bir Düğüme sahip + + + + and the other being a Node with a value and two subtrees. + İkili Arama Ağacı'nı gösterir. + + + + Check if an item exists in the binary search tree. + İkili arama ağacında bir öğe olup olmadığını denetleyin. + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + Desen Eşleştirme kullanarak özyinelemeli olarak arar. Varsa true, aksi takdirde false döndürür. + + + + Check the left subtree. + Sol alt ağacı denetleyin. + + + + Check the right subtree. + Sağ alt ağacı denetleyin. + + + + Inserts an item in the Binary Search Tree. + İkili Arama Ağacı'na bir öğe ekler. + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + Desen Eşleştirme kullanarak özyinelemeli olarak eklenecek yeri bulur ve ardından yeni bir düğüm ekler. + + + + If the item is already present, it does not insert anything. + Öğe zaten varsa yeni bir öğe eklenmez. + + + + No need to insert, it already exists; return the node. + Eklemeye gerek yok, öğe zaten var; düğümü döndürün. + + + + Call into left subtree. + Sol alt ağaca çağırın. + + + + Call into right subtree. + Sağ alt ağaca çağırın. + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + Ayırt Edici Birleşimler, 'Struct' özniteliği aracılığıyla yapı olarak da gösterilebilir. + + + + This is helpful in situations where the performance of structs outweighs + Bu, yapıların performansının, başvuru türlerinin esnekliğinden daha önemli + + + + the flexibility of reference types. + olduğu durumlarda kullanışlıdır. + + + + However, there are two important things to know when doing this: + Ancak, bunu yaparken bilmeniz gereken iki önemli nokta vardır: + + + + 1. A struct DU cannot be recursively-defined. + 1. Bir yapı DU'su, özyinelemeli olarak tanımlanamaz. + + + + 2. A struct DU must have unique names for each of its cases. + 2. Bir yapı DU'su, her bir durumu için benzersiz adlara sahip olmalıdır. + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + Desen Eşleştirme, Desenleri kullanmanızı sağlayan bir F# özelliğidir. + + + + which are a way to compare data with a logical structure or structures, + Desenler, verileri mantıksal yapı veya yapılar ile karşılaştırmak, + + + + decompose data into constituent parts, or extract information from data in various ways. + verileri bileşenlerine ayırmak veya verilerden bilgileri çeşitli şekillerde ayıklamak için harika bir yol sunar. + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + Daha sonra Desen Eşleştirme ile bir desenin "şeklini" gönderebilirsiniz. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + Bir kişinin ad ve soyadı kaydı + + + + A Discriminated Union of 3 different kinds of employees + 3 farklı çalışan türünden oluşan bir Ayırt Edici Birleşim + + + + Count everyone underneath the employee in the management hierarchy, + Çalışan da dahil olmak üzere, yönetim hiyerarşisinde çalışanın altındaki + + + + including the employee. + herkesi sayın. + + + + Find all managers/executives named "Dave" who do not have any reports. + Herhangi bir raporu olmayan, "Dave" adlı tüm yöneticileri bulun. + + + + This uses the 'function' shorthand to as a lambda expression. + Bu, 'function' kısaltmasını bir lambda ifadesi olarak kullanır. + + + + [] matches an empty list. + [] boş bir liste ile eşleşir. + + + + '_' is a wildcard pattern that matches anything. + '_' herhangi bir öğeyle eşleşen bir joker karakter desenidir. + + + + This handles the "or else" case. + Bu, "or else" durumunu ele alır. + + + + You can also use the shorthand function construct for pattern matching, + Kısaltma özellik yapısını desen eşleştirme için de kullanabilirsiniz, + + + + which is useful when you're writing functions which make use of Partial Application. + bu Kısmi Uygulamayı kullanan işlevler yazarken kullanışlıdır. + + + + Define some more functions which parse with the helper function. + Yardımcı işlev ile ayrıştırılan birkaç işlev daha tanımlayın. + + + + Active Patterns are another powerful construct to use with pattern matching. + Etkin Desenler, desen eşleştirme ile kullanabileceğiniz diğer bir güçlü yapıdır. + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + Giriş verilerini desen eşleştirme çağrı sitesinde bölerek özel formlara ayırmanıza olanak sağlar. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + 'Function' anahtar sözcüğü ve Etkin Desenler aracılığıyla Desen Eşleştirme, genellikle böyle görünür. + + + + Call the printer with some different values to parse. + Ayrıştırılacak farklı değerlerle yazıcıyı çağırın. + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + Seçenek değerleri 'Some' veya 'None' ile etiketlenmiş herhangi bir değer türü olabilir. + + + + They are used extensively in F# code to represent the cases where many other + Bunlar yaygın olarak diğer birçok dilin null başvurular kullandığı durumları temsil + + + + languages would use null references. + etmek üzere F# kodunda kullanılır. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + İlk olarak, Tek Durumlu Ayırt Edici Birleşim ile tanımlanan bir posta kodu tanımlayın. + + + + Next, define a type where the ZipCode is optional. + Sonra, ZipCode’un isteğe bağlı olduğu bir tür tanımlayın. + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + Sonra, müşterinin posta kodu için sevkiyat alanını hesaplayan bir nesneyi temsil eden arabirim türünü tanımlayın, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + 'getState' ve 'getShippingZone' soyut metotları uygulamalarından faydalanır. + + + + Next, calculate a shipping zone for a customer using a calculator instance. + Sonra, hesaplayıcı örneğini kullanarak müşteri için sevkiyat bölgesi hesaplayın. + + + + This uses combinators in the Option module to allow a functional pipeline for + Bu, Optionals ile veri dönüştürülmesini sağlamak için + + + + transforming data with Optionals. + Option modülünde birleştiricilerin kullanılmasını sağlar. + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + Ölçü birimleri, basit sayısal türler için tür açısından güvenli bir şekilde ek açıklama girmenin bir yoludur. + + + + You can then perform type-safe arithmetic on these values. + Böylece bu değerler üzerinde tür açısından güvenli aritmetik gerçekleştirebilirsiniz. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + İlk olarak, ortak birim adlarından oluşan bir koleksiyon açın + + + + Define a unitized constant + Birimlere ayrılmış bir sabit tanımlayın + + + + Next, define a new unit type + Sonra, yeni bir birim türü tanımlayın + + + + Conversion factor mile to meter. + Milden metreye dönüştürme faktörü. + + + + Define a unitized constant + Birimlere ayrılmış bir sabit tanımlayın + + + + Compute metric-system constant + Metrik sistem sabitini hesaplayın + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + Ölçü Birimleri kullanan değerler, yazdırma gibi işler için temel sayısal tür ile aynı şekilde kullanılabilir. + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + Sınıflar, F# içinde yeni nesneleri tanımlamanın bir yoludur ve standart Nesne yönelimli yapıları destekler. + + + + They can have a variety of members (methods, properties, events, etc.) + Çeşitli üyelere sahip olabilirler (metotlar, özellikler, olaylar vb.) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + Sınıflar hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + Üyeler hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + Basit bir iki boyutlu Vektör sınıfı. + + + + The class's constructor is on the first line, + Sınıfın oluşturucusu ilk satırdadır + + + + and takes two arguments: dx and dy, both of type 'double'. + ve ikisi de 'double' türünde olan iki bağımsız değişken alır: dx ve dy. + + + + This internal field stores the length of the vector, computed when the + Bu dahili alan, nesne oluşturulduğunda hesaplanan vektör + + + + object is constructed + uzunluğunu depolar + + + + 'this' specifies a name for the object's self identifier. + 'this', nesnenin kendi tanımlayıcısı için bir ad belirtir. + + + + In instance methods, it must appear before the member name. + Örnek metotlarında üye adından önce gelmelidir. + + + + This member is a method. The previous members were properties. + Bu üye, bir metot. Önceki üyeler özellikti. + + + + This is how you instantiate the Vector2D class. + Vector2D sınıfının örneğini bu şekilde oluşturabilirsiniz. + + + + Get a new scaled vector object, without modifying the original object. + Özgün nesneyi değiştirmeden, yeni bir ölçekli vektör nesnesi alın. + + + + Generic classes allow types to be defined with respect to a set of type parameters. + Genel sınıflar, türlerin bir tür parametreleri kümesine göre tanımlanmasına izin verir. + + + + In the following, 'T is the type parameter for the class. + Aşağıda, 'T', sınıf için tür parametresidir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + Bu dahili alan, bir listedeki durumları depolar. + + + + Add a new element to the list of states. + Durumlar listesine yeni bir öğe ekleyin. + + + + use the '<-' operator to mutate the value. + değeri değiştirmek için '<-' işlecini kullanın. + + + + Get the entire list of historical states. + Geçmiş durumların tam listesini alın. + + + + Get the latest state. + Son durumu alın. + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + Durum izleyicisi sınıfının bir 'int' örneği. Tür parametresinin algılandığını unutmayın. + + + + Add a state + Durum ekle + + + + Interfaces are object types with only 'abstract' members. + Arabirimler, yalnızca 'abstract' üyelere sahip olan nesne türleridir. + + + + Object types and object expressions can implement interfaces. + Nesne türleri ve nesne ifadeleri arabirim uygulayabilir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + Bu, IDisposable uygulayan bir türdür. + + + + This is the implementation of IDisposable members. + Bu, IDisposable üyelerinin uygulamasıdır. + + + + This is an object that implements IDisposable via an Object Expression + Bu, bir Object İfadesi ile IDisposable uygulayan bir nesnedir + + + + Unlike other languages such as C# or Java, a new type definition is not needed + C# veya Java gibi diğer dillerin aksine, bir arabirim uygulamak için yeni bir tür tanımı + + + + to implement an interface. + gerekli değildir. + + + + The FSharp.Core library defines a range of parallel processing functions. Here + FSharp.Core kitaplığı bir paralel işleme işlevleri aralığı tanımlar. Burada + + + + you use some functions for parallel processing over arrays. + diziler üzerinde çeşitli paralel işleme işlevleri kullanırsınız. + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + Daha fazla bilgi için bkz. https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + İlk olarak, bir giriş dizisi. + + + + Next, define a functions that does some CPU intensive computation. + Sonra, yoğun CPU kullanarak hesaplama yapan bir işlev tanımlayın. + + + + Next, do a parallel map over a large input array. + Sonra, büyük bir giriş dizisi üzerinde paralel bir eşleme oluşturun. + + + + Next, print the results. + Sonra, sonuçları yazdırın. + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + Events, .NET programlamasında özellikle WinForms veya WPF uygulamaları ile yaygın olarak kullanılan bir deyimdir. + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + İlk olarak, abonelik noktası (event.Publish) ve olay tetikleyicisinden (event.Trigger) oluşan Olay nesnesi örneğini oluşturun. + + + + Next, add handler to the event. + Sonra, olaya işleyici ekleyin. + + + + Next, trigger the event. + Sonra, olayı tetikleyin. + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + Sonra, olayın standart .NET kuralını takip eden bir örneğini oluşturun: (sender, EventArgs). + + + + Next, add a handler for this new event. + Sonra, bu yeni olay için bir işleyici ekleyin. + + + + Next, trigger this event (note that sender argument should be set). + Sonra, bu olayı tetikleyin (sender bağımsız değişkeninin ayarlanmış olması gerektiğine dikkat edin). + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf new file mode 100644 index 0000000000..cb0a1983af --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + 此示例将引导你了解 F# 语言的各个元素。 + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + 若要在 F# 交互窗口中执行代码,请突出显示一个代码节并按 Alt-Enter 或右击 + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + 并选择“在 Interactive 中执行”。 可从“视图”菜单中打开 F# 交互窗口。 + + + + For more about F#, see: + 有关 F# 的详细信息,请参见: + + + + To see this tutorial in documentation form, see: + 若要以文档的形式查看此教程,请参阅: + + + + To learn more about applied F# programming, use + 若要了解有关已应用的 F# 编程的详细信息,请使用 + + + + To install the Visual F# Power Tools, use + 若要安装 Visual F# Power Tools,请使用 + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + “工具”-->“扩展和更新”-->“联机”和搜索 + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + 有关要用于 F# 的其他模板,请参见 Visual Studio 中的“联机模板”, + + + + 'New Project' --> 'Online Templates' + “新建项目”-->“联机模板” + + + + F# supports three kinds of comments: + F# 支持三种注释: + + + + 1. Double-slash comments. These are used in most situations. + 1. 双斜线注释。 此类注释用于大多数情况。 + + + + 2. ML-style Block comments. These aren't used that often. + 2. ML 样式块注释。此类注释不经常使用。 + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. 三斜线注释。此类注释用于记录功能和类型等。 + + + + They will appear as text when you hover over something which is decorated with these comments. + 光标悬停在附带有注释的位置时,这些注释会以文本形式显示。 + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + 它们还支持 .NET 样式的 XML 注释,这些注释可生成参考文档, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + 还可允许编辑器(例如 Visual Studio)从其中提取信息。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + 使用 "open" 关键字打开命名空间。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + 模块是值、类型和函数值等 F# 代码的分组。 + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + 用模块分组代码有助于汇集相关代码和避免程序中出现名称冲突。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + 此为示例整数。 + + + + This is a sample floating point number. + 此为示例浮点数。 + + + + This computed a new number by some arithmetic. Numeric types are converted using + 这按照某种运算方法计算新的数字。数字类型通过 + + + + functions 'int', 'double' and so on. + "int"、"double" 等函数进行转换。 + + + + This is a list of the numbers from 0 to 99. + 这是从 0 到 99 的数字列表 + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + 这是包含从 0 到 99 的所有数字及其平方的所有元组的列表. + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + 下一行打印包含元组的列表,使用 "%A" 来进行一般打印。 + + + + This is a sample integer with a type annotation + 这是一个具有类型注释的示例整数 + + + + Values in F# are immutable by default. They cannot be changed + F# 中的值默认为不可变。程序执行过程中 + + + + in the course of a program's execution unless explicitly marked as mutable. + 这些值无法更改,除非被显式标记为可变。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + 通过 "let" 将值绑定到名称可使其不可变。 + + + + The second line of code fails to compile because 'number' is immutable and bound. + 未能编译第二行代码,因为 "number" 不可变且已绑定。 + + + + Re-defining 'number' to be a different value is not allowed in F#. + F# 中不允许将 "number" 重定义为其他值。 + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + 一个可变绑定。必须提供这种绑定才能改变 "otherNumber" 的值。 + + + + When mutating a value, use '<-' to assign a new value. + 若要改变值,请使用 "<-" 分配新值。 + + + + You could not use '=' here for this purpose since it is used for equality + 在这里不能将 "=" 用作此目的,因为该符号用于表示等式 + + + + or other contexts such as 'let' or 'module' + 或者 "let" 或 "module" 等其他上下文 + + + + Much of F# programming consists of defining functions that transform input data to produce + 大部分 F# 编程包括定义函数,该函数转换输入数据以生成 + + + + useful results. + 有用的结果。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + 可使用 "let" 定义函数。它将接受整数参数,然后返回整数。 + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + 括号对函数参数是可选的,但使用显示类型注释时除外。 + + + + Apply the function, naming the function return result using 'let'. + 应用函数,并使用“let”命名函数返回结果。 + + + + The variable type is inferred from the function return type. + 变量类型是从函数返回类型推导出来的。 + + + + This line uses '%d' to print the result as an integer. This is type-safe. + 该行用 "%d" 将结果作为整数进行打印。这属于类型安全。 + + + + If 'result1' were not of type 'int', then the line would fail to compile. + 如果 "result1" 不是类型 "int",则将无法编译该行。 + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + 如有需要,可使用 "(argument:type)" 批注参数名称类型。括号是必需的。 + + + + Conditionals use if/then/elid/elif/else. + 条件语句使用 if/then/elid/elif/else。 + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + 注意,F# 使用可识别空格缩进的语法,与 Python 等语言类似。 + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + 此行使用 "%f" 将结果作为浮点打印。与上述 "%d" 情况一样,属于类型安全。 + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + 布尔是 F# 中的基本数据类型。下面是一些布尔值和条件逻辑示例。 + + + + To learn more, see: + 有关详细信息,请参阅: + + + + and + + + + + Booleans values are 'true' and 'false'. + 布尔值为 "true" 和 "false"。 + + + + Operators on booleans are 'not', '&&' and '||'. + 布尔运算符为 "not"、"&&" 和 "||"。 + + + + This line uses '%b'to print a boolean value. This is type-safe. + 本行用 "%b" 打印布尔值。这属于类型安全。 + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + 字符串是 F# 中的基本数据类型。下面是一些字符串和基本的字符串操作示例。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + 字符串使用双引号。 + + + + Strings can also use @ to create a verbatim string literal. + 字符串也可使用 @ 创建逐字的字符串。 + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + 这将忽略转义字符,如 "\", "\n", "\t" 等。 + + + + String literals can also use triple-quotes. + 字符串文本也可使用三重引号。 + + + + String concatenation is normally done with the '+' operator. + 字符串串联通常是用 "+" 运算符完成的。 + + + + This line uses '%s' to print a string value. This is type-safe. + 本行用 "%s" 打印字符串值。这属于类型安全。 + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + 子字符串使用索引表示法。此行提取前 7 个字符作为子字符串。 + + + + Note that like many languages, Strings are zero-indexed in F#. + 注意,与许多语言相同,字符串在 F# 中从零开始编制索引。 + + + + Tuples are simple combinations of data values into a combined value. + 元组是组合成组合值的简单数据值组合。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + 一个包含整数的简单元组。 + + + + A function that swaps the order of two values in a tuple. + 一个用于交换两个值在元组中的顺序的函数。 + + + + F# Type Inference will automatically generalize the function to have a generic type, + F# 类型推理可自动泛化函数,使其具有泛型类型, + + + + meaning that it will work with any type. + 意味着它可与任何类型兼容。 + + + + A tuple consisting of an integer, a string, + 一个整数,一个字符串以及 + + + + and a double-precision floating point number. + 一个双精度浮点数字组成的元组。 + + + + A simple tuple of integers with a type annotation. + 一个具有类型批注的简单的整数元组。 + + + + Type annotations for tuples use the * symbol to separate elements + 元组的类型批注使用 * 号来分隔元素 + + + + Tuples are normally objects, but they can also be represented as structs. + 元组通常为对象,但也可表示为结构。 + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + 这些可在 C# 和 Visual Basic.NET 中与结构完全进行交互操作;然而, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + 结构元组不隐式转换为对象元组(通常称为引用元组)。 + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + 下面的第二行将因此无法编译。取消注释观察将发生什么。 + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + 尽管不能在结构元组和引用元组之间进行隐式转换, + + + + you can explicitly convert via pattern matching, as demonstrated below. + 可通过模式匹配进行显式转换,如下所示。 + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + F# 管道运算符("|>"、"<|" 等 )和 F# 组合运算符(">>"、"<<") + + + + are used extensively when processing data. These operators are themselves functions + 广泛用于数据处理。这些运算符本身就是函数, + + + + which make use of Partial Application. + 它使用偏函数应用。 + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + 若要深入了解这些运算符,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + 若要深入了解偏函数应用,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + 计算值的平方。 + + + + Adds 1 to a value. + 将值加 1。 + + + + Tests if an integer value is odd via modulo. + 通过取模测试整数是否为奇数。 + + + + A list of 5 numbers. More on lists later. + 包含 5 个数字的列表。稍后列表上会有更多数字。 + + + + Given a list of integers, it filters out the even numbers, + 如果是整数列表,它会筛选出偶数, + + + + squares the resulting odds, and adds 1 to the squared odds. + 将产生的奇数平方,然后将奇数平方值加 1。 + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + 编写 "squareOddValuesAndAddOne" 的简便方法是将每个 + + + + sub-result into the function calls themselves. + 子结果嵌入函数调用本身。 + + + + This makes the function much shorter, but it's difficult to see the + 这将使函数短得多,但难以查看 + + + + order in which the data is processed. + 处理数据的顺序。 + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + 编写 "squareOddValuesAndAddOne" 的首选方法是使用 F# 管道运算符。 + + + + This allows you to avoid creating intermediate results, but is much more readable + 这可使你避免产生中间结果,而且可读性更好 + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + 嵌入式函数调用(如 "squareOddValuesAndAddOneNested")更具可读性 + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + 使用 Lambda 函数,通过将第二个 "List.map" 调用移动到第一个, + + + + into the first, using a Lambda Function. + 可以缩短 "squareOddValuesAndAddOnePipeline"。 + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + 注意,管道也在 lambda 函数内使用。F# 管道运算符 + + + + can be used for single values as well. This makes them very powerful for processing data. + 还可用于单个值。这使它们处理数据的功能很强大。 + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + 最后,无需再将 "value" 显式作为参数,你可使用 ">>" + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + 以合成两个核心运算: 筛选出偶数,然后平方并加 1。 + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + 同样,lambda 表达式的 "fun x -> ..." 也不需要了,因为 "x" 只是 + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + 在该范围内定义,以便可传递到功能管道。因此,也可将 ">>" + + + + there as well. + 用在该处。 + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + "squareOddValuesAndAddOneComposition" 的结果本身就是另一个函数,它 + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + 将整数列表作为其输入值。如果使用整数列表执行 "squareOddValuesAndAddOneComposition", + + + + of integers, you'll notice that it produces the same results as previous functions. + 你将发现它与上述函数产生的结果相同。 + + + + This is using what is known as function composition. This is possible because functions in F# + 这使用的就是所谓的函数组合。这是可能的,因为 F# 中的函数 + + + + use Partial Application and the input and output types of each data processing operation match + 使用偏函数应用,并且每个数据处理操作的输入和输出类型与 + + + + the signatures of the functions we're using. + 我们使用的函数签名。 + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + 列表属于有序、不可变、单向链接的列表。它们都采用主动求值方式。 + + + + This module shows various ways to generate lists and process lists with some functions + 本模块介绍使用某些函数生成列表和处理列表的各种方法 + + + + in the 'List' module in the F# Core Library. + 在 F# 核心库的 "List" 模块中。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + 使用 [ ... ] 定义列表。这是空列表。 + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + 这是一个包含 3 个元素的列表。";" 用于分隔同一行的元素。 + + + + You can also separate elements by placing them on their own lines. + 也可通过将各元素放在其自身行来分隔。 + + + + This is a list of integers from 1 to 1000 + 这是从 1 到 1000 的整数列表 + + + + Lists can also be generated by computations. This is a list containing + 也可通过计算来生成列表。此列表包含 + + + + all the days of the year. + 一年的所有天。 + + + + Print the first 5 elements of 'daysList' using 'List.take'. + 使用 "List.take" 打印 "daysList" 的前 5 个元素。 + + + + Computations can include conditionals. This is a list containing the tuples + 计算可以包括条件。这是包含元组的列表 + + + + which are the coordinates of the black squares on a chess board. + 这是棋盘上黑色方格的坐标。 + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + 列表可使用 "List.map" 和其他函数编程连结符进行转换。 + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + 此定义通过使用管道将 numberList 中的数字进行平方运算来生成新列表 + + + + operator to pass an argument to List.map. + 将参数传递给 List.map 的运算符。 + + + + There are many other list combinations. The following computes the sum of the squares of the + 还有许多其他列表组合。下面计算以下内容的平方和: + + + + numbers divisible by 3. + 数字可被 3 整除。 + + + + Arrays are fixed-size, mutable collections of elements of the same type. + 数组是固定大小,同类型元素的可变集合。 + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + 尽管它们与列表相同(支持枚举,且具有用于数据处理的类似连接符), + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + 它们通常速度更快,且支持快速随机访问。代价是因为可变而不太安全。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + 这是空数组。注意,语法与列表类似,但改用 `[| ... |]`。 + + + + Arrays are specified using the same range of constructs as lists. + 使用与列表相同的构造范围来指定数组。 + + + + This is an array of numbers from 1 to 1000. + 这是从 1 到 1000 的数字数组。 + + + + This is an array containing only the words "hello" and "world". + 这是只包含单词 "hello" 和 "world" 的数组。 + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + 这是由索引初始化的数组,包含从 0 到 2000 之间的偶数。 + + + + Sub-arrays are extracted using slicing notation. + 使用切片表示法提取子数组。 + + + + You can loop over arrays and lists using 'for' loops. + 可使用 "for" 循环循环数组和列表。 + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + 可使用左箭头赋值运算符来修改数组元素的内容。 + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + 若要深入了解此运算符,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + 可使用 "Array.map" 和其他功能性编程运算来转换数组。 + + + + The following calculates the sum of the lengths of the words that start with 'h'. + 下面的函数计算以 "h" 开头的单词的总长度。 + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + 序列是类型相同的所有元素的逻辑系列。序列是比列表和数组更常规的类型。 + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + 将根据需要计算序列,并在每次循环访问它们时重新进行计算。 + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + F# 序列是 .NET System.Collections.Generic.IEnumerable<'T> 的别名。 + + + + Sequence processing functions can be applied to Lists and Arrays as well. + 序列处理函数也可以应用于列表和数组。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + 这是空序列。 + + + + This a sequence of values. + 这是一个值的序列。 + + + + This is an on-demand sequence from 1 to 1000. + 这是从 1 到 1000 的按需序列。 + + + + This is a sequence producing the words "hello" and "world" + 这是生成单词 "hello" 和 "world" 的序列 + + + + This sequence producing the even numbers up to 2000. + 此序列生成最大为 2000 的偶数。 + + + + This is an infinite sequence which is a random walk. + 这是可随机访问的无限序列。 + + + + This example uses yield! to return each element of a subsequence. + 此示例使用 yield! 返回子序列的每个元素。 + + + + This example shows the first 100 elements of the random walk. + 此示例演示随机访问的前 100 个元素。 + + + + Recursive functions can call themselves. In F#, functions are only recursive + 递归函数可调用其自身。在 F# 中,函数只递归 + + + + when declared using 'let rec'. + 使用 "let rec" 声明时。 + + + + Recursion is the preferred way to process sequences or collections in F#. + 递归是 F# 中处理序列或集合的首选方式。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + 此示例演示递归函数,计算以下内容的阶乘: + + + + integer. It uses 'let rec' to define a recursive function. + 整数。它使用 "let rec" 来定义递归函数。 + + + + Computes the greatest common factor of two integers. + 计算两个整数的最大公因数。 + + + + Since all of the recursive calls are tail calls, + 由于所有递归调用都是尾调用, + + + + the compiler will turn the function into a loop, + 因此编译器会将该函数转变成一个循环, + + + + which improves performance and reduces memory consumption. + 这可提高性能并减少内存消耗。 + + + + This example computes the sum of a list of integers using recursion. + 本示例使用递归计算整数列表的总和。 + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + 通过将 Helper 函数与结果累加器一起使用,使 "sumList" 成为尾递归函数。 + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + 假如 "0" 作为种子累加器,这将调用尾递归 helper 函数。 + + + + An approach like this is common in F#. + 此类方法在 F# 中很常见。 + + + + Records are an aggregate of named values, with optional members (such as methods). + 记录是已命名值的聚合,同时具有可选成员(例如,方法)。 + + + + They are immutable and have structural equality semantics. + 它们不可变且具有结构相等性语义。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + 此示例演示如何定义新记录类型。 + + + + This example shows how to instantiate a record type. + 本示例演示如何实例化记录类型。 + + + + You can also do this on the same line with ';' separators. + 也可使用 ";" 分隔符在同一行上执行此操作。 + + + + This example shows how to use "copy-and-update" on record values. It creates + 此示例演示如何对记录值使用 "copy-and-update"。它创建了 + + + + a new record value that is a copy of contact1, but has different values for + 新的记录值,该值是 contact1 的副本,但对以下内容具有不同的值: + + + + the 'Phone' and 'Verified' fields. + “电话”和“已验证”字段。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + 此示例演示如何编写处理记录值的函数。 + + + + It converts a 'ContactCard' object to a string. + 它将 "ContactCard" 对象转换为字符串。 + + + + This is an example of a Record with a member. + 这是一个具有成员的记录示例。 + + + + Members can implement object-oriented members. + 成员可实现面向对象的成员。 + + + + Members are accessed via the '.' operator on an instantiated type. + 可通过实例化类型上的 "." 运算符访问成员。 + + + + Records can also be represented as structs via the 'Struct' attribute. + 记录也可通过 "Struct" 属性表示为结构。 + + + + This is helpful in situations where the performance of structs outweighs + 这在结构性能更重要的情况下很有用 + + + + the flexibility of reference types. + 引用类型的灵活性。 + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + 可区分联合(简称 DU)的值可以是一系列已命名窗体或用例。 + + + + Data stored in DUs can be one of several distinct values. + DU 中存储的数据可以为多个不同值之一。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + 下面代表一套扑克牌。 + + + + A Disciminated Union can also be used to represent the rank of a playing card. + 可区分联合还可用来表示纸牌的设置级别。 + + + + Represents the rank of cards 2 .. 10 + 表示扑克牌点数 2 .. 10 + + + + Discriminated Unions can also implement object-oriented members. + 可区分联合还可实现面向对象的成员。 + + + + This is a record type that combines a Suit and a Rank. + 这是结合花色和牌面大小的记录类型。 + + + + It's common to use both Records and Disciminated Unions when representing data. + 表示数据时同时使用记录和可区分联合是很常见的。 + + + + This computes a list representing all the cards in the deck. + 它将计算代表牌组中所有扑克牌的列表。 + + + + This example converts a 'Card' object to a string. + 此示例将“纸牌”对象转换为字符串。 + + + + This example prints all the cards in a playing deck. + 此示例打印扑克牌中的所有牌。 + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + 单用例 DU 常用于域建模。这可确保额外类型的安全 + + + + over primitive types such as strings and ints. + 字符串和整数等基元类型。 + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + 单用例 DU 无法隐式转换为其包装的类型或从其包装的类型进行转换。 + + + + For example, a function which takes in an Address cannot accept a string as that input, + 例如,地址中采用的函数无法接受字符串作为输入, + + + + or vive/versa. + 反之亦然。 + + + + You can easily instantiate a single-case DU as follows. + 可轻松实例化单用例 DU,如下所示。 + + + + When you need the value, you can unwrap the underlying value with a simple function. + 需要值时,可使用单个函数解包基础值。 + + + + Printing single-case DUs is simple with unwrapping functions. + 打印单用例 DU 与解包函数一样简单。 + + + + Disciminated Unions also support recursive definitions. + 可区分联合还支持递归定义。 + + + + This represents a Binary Search Tree, with one case being the Empty tree, + 这代表一个二进制文件搜索树,且有一个用例为空树, + + + + and the other being a Node with a value and two subtrees. + 而另一个用例为具有一个值和两个子树的节点。 + + + + Check if an item exists in the binary search tree. + 检查项是否存在于二进制文件搜索树中。 + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + 使用模式匹配进行递归搜索。如果存在,则返回 true,否则返回 false。 + + + + Check the left subtree. + 检查左子树。 + + + + Check the right subtree. + 检查右子树。 + + + + Inserts an item in the Binary Search Tree. + 在二进制文件搜索树中插入项。 + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + 查找使用模式匹配递归插入的位置,然后插入新节点。 + + + + If the item is already present, it does not insert anything. + 如果项已存在,则不会插入任何内容。 + + + + No need to insert, it already exists; return the node. + 无需插入,该项已存在;返回节点。 + + + + Call into left subtree. + 调入左子树。 + + + + Call into right subtree. + 调入右子树。 + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + 可区分联合也可通过 "Struct" 属性表示为结构。 + + + + This is helpful in situations where the performance of structs outweighs + 这在结构性能更重要的情况下很有用 + + + + the flexibility of reference types. + 引用类型的灵活性。 + + + + However, there are two important things to know when doing this: + 然而,执行此操作时需了解两个重要事项: + + + + 1. A struct DU cannot be recursively-defined. + 1. 无法以递归方式定义结构 DU。 + + + + 2. A struct DU must have unique names for each of its cases. + 2. 结构 DU 必须对其每个用例均有唯一名称。 + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + 模式匹配是 F# 的一个功能,使你能够利用模式, + + + + which are a way to compare data with a logical structure or structures, + 它们是将数据与逻辑结构或结构进行比较的方法, + + + + decompose data into constituent parts, or extract information from data in various ways. + 将数据分解为各个构成部分,或通过各种方式从数据中提取信息。 + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + 然后,你便可以在模式的“形状”上通过模式匹配进行派遣。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + 人员的姓氏和名字的记录 + + + + A Discriminated Union of 3 different kinds of employees + 具有 3 种不同员工的可区分联合 + + + + Count everyone underneath the employee in the management hierarchy, + 在管理层次结构下对员工进行计数, + + + + including the employee. + 其中包括员工。 + + + + Find all managers/executives named "Dave" who do not have any reports. + 查找所有名为 "Dave" 且没有任何下属的经理/主管。 + + + + This uses the 'function' shorthand to as a lambda expression. + 这使用 "function" 简写为 lambda 表达式。 + + + + [] matches an empty list. + [] 匹配空列表。 + + + + '_' is a wildcard pattern that matches anything. + "_" 是与任何对象均匹配的通配符模式。 + + + + This handles the "or else" case. + 它处理 "or else" 情况。 + + + + You can also use the shorthand function construct for pattern matching, + 你也可将简写函数构造用于模式匹配, + + + + which is useful when you're writing functions which make use of Partial Application. + 这在编写使用偏函数应用的函数时很有用。 + + + + Define some more functions which parse with the helper function. + 定义更多使用 helper 函数分析的函数。 + + + + Active Patterns are another powerful construct to use with pattern matching. + 活动模式是另一个与模式匹配配合使用的强大构造。 + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + 它们使你能够将输入数据分区到自定义窗体,然后在模式匹配调用站点分解它们。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + 通过 "function" 关键字的匹配模式和活动模式通常如下所示。 + + + + Call the printer with some different values to parse. + 使用一些其他值调用打印机进行分析。 + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + 选项值是用“Some”或“None”标记的任何类型的值。 + + + + They are used extensively in F# code to represent the cases where many other + 它们在 F# 代码中广泛用于表示许多其他 + + + + languages would use null references. + 语言使用 null 引用的用例。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + 首先,定义通过单用例可区分联合定义的邮政编码。 + + + + Next, define a type where the ZipCode is optional. + 接下来,定义一个类型,其中 ZipCode 是可选项。 + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + 接下来,定义表示对象的接口类型,用于计算客户邮政编码的送货区域, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + 假定提供了“getState”和“getShippingZone”抽象方法的实现。 + + + + Next, calculate a shipping zone for a customer using a calculator instance. + 接下来,使用计算器实例计算客户的发货区域。 + + + + This uses combinators in the Option module to allow a functional pipeline for + 它在选项模块中使用连接符以允许功能管道 + + + + transforming data with Optionals. + 用于使用可选项转换数据。 + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + 度量单位是一种以类型安全方式批注基元数值类型的方式。 + + + + You can then perform type-safe arithmetic on these values. + 然后,你便可以对这些值执行类型安全算术。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + 首先,打开常用单位名称集合 + + + + Define a unitized constant + 定义单元化常量 + + + + Next, define a new unit type + 接下来,定义新的单位类型 + + + + Conversion factor mile to meter. + 英里到米的换算系数。 + + + + Define a unitized constant + 定义单元化常量 + + + + Compute metric-system constant + 计算公制常量 + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + 使用度量单位的值可像基元数值类型用于打印等操作一样直接使用。 + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + 类是 F# 中定义新对象类型的一种方式,且支持标准的面向对象的构造。 + + + + They can have a variety of members (methods, properties, events, etc.) + 它们可以有各种成员(如,方法、属性、事件等) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + 若要了解关于类的详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + 若要深入了解成员,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + 简单的二维矢量类。 + + + + The class's constructor is on the first line, + 该类的构造函数位于第一行, + + + + and takes two arguments: dx and dy, both of type 'double'. + 并且采用两个参数: dx 和 dy,二者均属于类型 "double"。 + + + + This internal field stores the length of the vector, computed when the + 此内部字段存储矢量的长度,当发生以下情况时进行计算: + + + + object is constructed + 对象已构造 + + + + 'this' specifies a name for the object's self identifier. + “this”用于指定对象的自我标识符的名称。 + + + + In instance methods, it must appear before the member name. + 在实例方法中,它必须出现在成员名称之前。 + + + + This member is a method. The previous members were properties. + 该成员属于方法。以前的成员属于属性。 + + + + This is how you instantiate the Vector2D class. + 这就是你实例化 Vector2D 类的方式。 + + + + Get a new scaled vector object, without modifying the original object. + 获取新的缩放矢量对象而不修改原始对象。 + + + + Generic classes allow types to be defined with respect to a set of type parameters. + 通用类允许考虑使用一组类型参数来定义类型。 + + + + In the following, 'T is the type parameter for the class. + 以下示例中,"T" 表示类的类型参数。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + 此内部字段将状态存储在列表中。 + + + + Add a new element to the list of states. + 将新元素添加到状态列表中。 + + + + use the '<-' operator to mutate the value. + 使用 "<-" 运算符改变值。 + + + + Get the entire list of historical states. + 获取历史状态的完整列表。 + + + + Get the latest state. + 获取最新状态。 + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + 状态跟踪程序类的一个“int”实例。请注意,已推断类型参数。 + + + + Add a state + 添加状态 + + + + Interfaces are object types with only 'abstract' members. + 接口是只有“抽象”成员的对象类型。 + + + + Object types and object expressions can implement interfaces. + 对象类型和对象表达式可以实现接口。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + 它是实现 IDisposable 的类型。 + + + + This is the implementation of IDisposable members. + 它是 IDisposable 成员的实现。 + + + + This is an object that implements IDisposable via an Object Expression + 该对象可通过对象表达式实现 IDisposable + + + + Unlike other languages such as C# or Java, a new type definition is not needed + 与 C# 或 Java 等其他语言不同,无需新的类型定义 + + + + to implement an interface. + 以实现接口。 + + + + The FSharp.Core library defines a range of parallel processing functions. Here + FSharp.Core 库定义了一系列并行处理函数。此处 + + + + you use some functions for parallel processing over arrays. + 可使用某些函数对数组进行并行处理。 + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + 有关详细信息,请参阅: https://msdn.microsoft.com/zh-cn/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + 首先,输入一个数组。 + + + + Next, define a functions that does some CPU intensive computation. + 接下来,定义执行某些 CPU 密集型计算的函数。 + + + + Next, do a parallel map over a large input array. + 接下来,对大型输入数组执行并行映射。 + + + + Next, print the results. + 接下来,打印结果。 + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + 事件是 .NET 编程的常见习惯用语,尤其是使用 WinForms 或 WPF 应用程序编程时。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + 首先,创建包含订阅点(event.Publish)和事件触发器(event.Trigger)的事件对象实例。 + + + + Next, add handler to the event. + 接下来,将处理程序添加到事件。 + + + + Next, trigger the event. + 接下来,触发该事件。 + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + 接下来,创建遵循标准 .NET 约定的事件的实例: (sender, EventArgs)。 + + + + Next, add a handler for this new event. + 接下来,为此新事件添加处理程序。 + + + + Next, trigger this event (note that sender argument should be set). + 接下来,触发此事件(请注意,应设置 sender 参数)。 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf new file mode 100644 index 0000000000..fd33d17fa3 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf @@ -0,0 +1,1637 @@ + + + + + + This sample will guide you through elements of the F# language. + 此範例將引導您了解 F# 語言的項目。 + + + + To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click + 若要執行 F# 互動中的程式碼,請反白顯示某個程式碼區段並按下 Alt-Enter,或者以滑鼠右鍵按一下 + + + + and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. + 並選取 [以互動方式執行]。您可以從 [檢視] 功能表開啟 F# 互動式視窗。 + + + + For more about F#, see: + 如需有關 F# 的詳細資訊,請參閱: + + + + To see this tutorial in documentation form, see: + 若要參閱文件表單中的此教學課程,請參閱: + + + + To learn more about applied F# programming, use + 如需深入了解套用的 F# 程式設計,請使用 + + + + To install the Visual F# Power Tools, use + 若要安裝 Visual F# Power Tools,請使用 + + + + 'Tools' --> 'Extensions and Updates' --> `Online` and search + [工具]5D; --> [延伸模組和更新]5D; --> [連線]5D; 並搜尋 + + + + For additional templates to use with F#, see the 'Online Templates' in Visual Studio, + 如需有關搭配 F# 一起使用的其他範本,請參閱 Visual Studio 中的 [線上範本]5D;, + + + + 'New Project' --> 'Online Templates' + [新增專案]5D; --> [線上範本]5D; + + + + F# supports three kinds of comments: + F# 支援三種註解: + + + + 1. Double-slash comments. These are used in most situations. + 1. 將註解加上雙斜線。適用於大部分的情況。 + + + + 2. ML-style Block comments. These aren't used that often. + 2. 將註解加上 ML 樣式區塊。較不常使用。 + + + + 3. Triple-slash comments. These are used for documenting functions, types, and so on. + 3. 將註解加上三斜線。適用於記錄函式、類型等。 + + + + They will appear as text when you hover over something which is decorated with these comments. + 當您暫留在以這些註解為裝飾的項目上時,這些註解會顯示為文字。 + + + + They also support .NET-style XML comments, which allow you to generate reference documentation, + 這些註解也支援 .NET 樣式的 XML 註解,讓您可以產生參考文件, + + + + and they also allow editors (such as Visual Studio) to extract information from them. + 也讓編輯者 (像是 Visual Studio) 可以從註解中擷取資訊。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation + 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/xml-documentation + + + + Open namespaces using the 'open' keyword. + 使用 'open' 關鍵字開啟命名空間。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword + + + + A module is a grouping of F# code, such as values, types, and function values. + 模組是 F# 程式碼的分組,例如值、類型及函式值。 + + + + Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. + 將程式碼分組為模組有助於將相關的程式碼整合在一塊,且能避免程式發生名稱衝突。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules + 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/modules + + + + This is a sample integer. + 此為範例整數。 + + + + This is a sample floating point number. + 此為範例浮點數。 + + + + This computed a new number by some arithmetic. Numeric types are converted using + 這使用了一些算數來計算新數字。使用函式 'int'、'double' 等 + + + + functions 'int', 'double' and so on. + 來轉換數字類型。 + + + + This is a list of the numbers from 0 to 99. + 此為從 0 到 99 的數字清單。 + + + + This is a list of all tuples containing all the numbers from 0 to 99 and their squares. + 此為所有 Tuple 的清單,內含從 0 到 99 的所有數字及其平方。 + + + + The next line prints a list that includes tuples, using '%A' for generic printing. + 下一行會使用 '%A' 執行一般列印,來列印包含 Tuple 的清單。 + + + + This is a sample integer with a type annotation + 此為具有型別註解的範例整數 + + + + Values in F# are immutable by default. They cannot be changed + 根據預設,F# 中的值是不可變的。於程式執行過程中,除非明確標示為可變的 + + + + in the course of a program's execution unless explicitly marked as mutable. + 否則無法對其進行變更。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable + + + + Binding a value to a name via 'let' makes it immutable. + 透過 'let' 將值繫結到名稱,即可將它設為不可變動。 + + + + The second line of code fails to compile because 'number' is immutable and bound. + 因為 'number' 無法變動並已繫結,所以無法編譯第二行程式碼。 + + + + Re-defining 'number' to be a different value is not allowed in F#. + 在 F# 中,不得將 'number' 重新定義為不同的值。 + + + + A mutable binding. This is required to be able to mutate the value of 'otherNumber'. + 可變動的繫結。需要此項目才可變更 'otherNumber' 的值。 + + + + When mutating a value, use '<-' to assign a new value. + 變動值時,請使用 '<-' 指派新的值。 + + + + You could not use '=' here for this purpose since it is used for equality + '=' 在此表示等於,所以無法用於此用途 + + + + or other contexts such as 'let' or 'module' + 或其他內容,例如 'let' 或 'module' + + + + Much of F# programming consists of defining functions that transform input data to produce + F# 程式設計時常需要定義函式來轉換輸入資料,從而產生 + + + + useful results. + 實用的結果。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ + + + + You use 'let' to define a function. This one accepts an integer argument and returns an integer. + 您可以使用 'let' 來定義函式。此接受整數引數,並會傳回整數。 + + + + Parentheses are optional for function arguments, except for when you use an explicit type annotation. + 對函式引數來說不一定要使用括號,但使用明確的型別註解時例外。 + + + + Apply the function, naming the function return result using 'let'. + 套用函式,使用 'let' 命名函數會傳回結果。 + + + + The variable type is inferred from the function return type. + 變數型別是從函式傳回型別推斷出來。 + + + + This line uses '%d' to print the result as an integer. This is type-safe. + 此行使用 '%d' 以整數形式列印結果。這是型別安全。 + + + + If 'result1' were not of type 'int', then the line would fail to compile. + 如果 'result1' 的類型不是 'int',則無法編譯該行。 + + + + When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. + 需要時,請使用 '(argument:type)' 為參數名稱的類型加上標註。需要使用括號。 + + + + Conditionals use if/then/elid/elif/else. + 條件使用 if/then/elid/elif/else。 + + + + Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. + 請注意,F# 使用空白縮排感知語法,其與 Python 這類語言類似。 + + + + This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. + 此行使用 '%f' 以浮點形式列印結果。與上述 '%d' 相同,這是型別安全。 + + + + Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. + 布林值是 F# 中的基本資料類型。以下是一些布林值與條件式邏輯的範例。 + + + + To learn more, see: + 若要深入了解,請參閱: + + + + and + + + + + Booleans values are 'true' and 'false'. + 布林值為 'true' 和 'false'。 + + + + Operators on booleans are 'not', '&&' and '||'. + 布林值上的運算子為 'not'、'&&' 和 '||'。 + + + + This line uses '%b'to print a boolean value. This is type-safe. + 此行使用 '%b' 列印布林值。這是型別安全。 + + + + Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. + 字串在 F# 中是基本的資料類型。以下是一些字串與基本字串操作的範例。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings + + + + Strings use double quotes. + 字串使用雙引號。 + + + + Strings can also use @ to create a verbatim string literal. + 字串也可使用 @ 來建立逐字字串常值。 + + + + This will ignore escape characters such as '\', '\n', '\t', etc. + 這將會忽略逸出字元,例如 '\'、'\n'、'\t' 等等。 + + + + String literals can also use triple-quotes. + 字串常值也可使用三引號。 + + + + String concatenation is normally done with the '+' operator. + 串連字串通常使用 '+' 運算子進行。 + + + + This line uses '%s' to print a string value. This is type-safe. + 此行使用 '%s' 列印字串值。這是型別安全。 + + + + Substrings use the indexer notation. This line extracts the first 7 characters as a substring. + 子字串使用索引子標記法。此行會擷取前 7 個字元作為子字串。 + + + + Note that like many languages, Strings are zero-indexed in F#. + 請注意,就像許多語言一樣,字串在 F# 中會以零為基底編製索引。 + + + + Tuples are simple combinations of data values into a combined value. + 元組是簡單的資料值合併為合併值。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples + + + + A simple tuple of integers. + 簡式整數元組。 + + + + A function that swaps the order of two values in a tuple. + 將元組中兩個值的順序互換的函式。 + + + + F# Type Inference will automatically generalize the function to have a generic type, + F# 型別推斷會自動將函式一般化成泛型類型, + + + + meaning that it will work with any type. + 表示其可與任何類型搭配運作。 + + + + A tuple consisting of an integer, a string, + 元組,包含整數、字串、 + + + + and a double-precision floating point number. + 和雙精確度浮點數。 + + + + A simple tuple of integers with a type annotation. + 具有類型註釋之整數的簡單元組。 + + + + Type annotations for tuples use the * symbol to separate elements + 元組的類型註釋會使用 * 符號分隔項目 + + + + Tuples are normally objects, but they can also be represented as structs. + 元組一般是物件,但也可以用結構形式呈現。 + + + + These interoperate completely with structs in C# and Visual Basic.NET; however, + 這些會與 C# 和 Visual Basic .NET 中的結構完全相互操作; 不過, + + + + struct tuples are not implicitly convertable with object tuples (often called reference tuples). + 結構元組無法利用物件元組 (通常稱為參考元組) 進行隱含轉換。 + + + + The second line below will fail to compile because of this. Uncomment it to see what happens. + 因此,將無法編譯以下的第二行。請取消它的註解,看看會如何。 + + + + Although you cannot implicitly convert between struct tuples and reference tuples, + 雖然您不能隱含地在結構元組及參考元組間進行轉換, + + + + you can explicitly convert via pattern matching, as demonstrated below. + 但您可透過模式比對明確地轉換,如下所示。 + + + + The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') + F# 管道運算子 ('|>'、'<|' 等) 與 F# 組合運算子 ('>>'、'<<') + + + + are used extensively when processing data. These operators are themselves functions + 廣泛用於處理資料時。這些運算子本身就是函式 + + + + which make use of Partial Application. + 其會利用局部應用程式。 + + + + To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + 若要深入了解這些運算子,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining + + + + To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + 若要深入了解局部應用程式,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments + + + + Squares a value. + 產生值的平方。 + + + + Adds 1 to a value. + 將值加 1。 + + + + Tests if an integer value is odd via modulo. + 測試整數值是否為經過模數的奇數。 + + + + A list of 5 numbers. More on lists later. + 5 個數字的清單。清單上稍後會有更多項目。 + + + + Given a list of integers, it filters out the even numbers, + 提供整數清單,它會篩選出偶數, + + + + squares the resulting odds, and adds 1 to the squared odds. + 取結果奇數的平方值,並對平方後的奇數加 1。 + + + + A shorter way to write 'squareOddValuesAndAddOne' is to nest each + 撰寫 'squareOddValuesAndAddOne' 較簡短的方式是巢狀每個項目 + + + + sub-result into the function calls themselves. + 子結果進入函式呼叫本身。 + + + + This makes the function much shorter, but it's difficult to see the + 這會將函式設成更短,但較難查看 + + + + order in which the data is processed. + 資料的處理順序。 + + + + A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. + 撰寫 'squareOddValuesAndAddOne' 的慣用方式是使用 F# 管道運算子。 + + + + This allows you to avoid creating intermediate results, but is much more readable + 這可讓您避免建立中繼結果,但比較容易閱讀 + + + + than nesting function calls like 'squareOddValuesAndAddOneNested' + ,相較於 'squareOddValuesAndAddOneNested' 這類的巢狀函式呼叫 + + + + You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call + 您可以移動第二個 'List.map' 呼叫來縮短 'squareOddValuesAndAddOnePipeline' + + + + into the first, using a Lambda Function. + 到第一個項目,使用 Lambda 函式。 + + + + Note that pipelines are also being used inside the lambda function. F# pipe operators + 請注意,管線也會用於 lambda 函式內。F# 管道運算子 + + + + can be used for single values as well. This makes them very powerful for processing data. + 也可以用於單一值。如此可讓它們在處理資料時功能極為強大。 + + + + Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' + 最後,您不需要使用 '>>' 來明確接受 'values' 作為參數 + + + + to compose the two core operations: filtering out even numbers, then squaring and adding one. + 以撰寫兩個核心作業: 篩選出偶數,然後取其平方值再加一。 + + + + Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply + 同樣地,也不需要 lambda 運算式的 'fun x -> ...' 位元,因為 'x' 只是 + + + + being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used + 定義於該範圍內,以將它傳遞至功能管線。因此,可以使用 '>>' + + + + there as well. + 也會在該處。 + + + + The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a + 'squareOddValuesAndAddOneComposition' 的結果本身是另一個函式,且該函式接受 + + + + list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list + 作為輸入的整數清單。如果您執行 'squareOddValuesAndAddOneComposition' 時搭配清單 + + + + of integers, you'll notice that it produces the same results as previous functions. + (整數),您將注意到它會產生與先前函式相同的結果。 + + + + This is using what is known as function composition. This is possible because functions in F# + 這將使用所謂的函式組合。原因可能是 F# 中的函式 + + + + use Partial Application and the input and output types of each data processing operation match + 使用局部應用程式,以及每個資料處理作業相符的輸入與輸出類型 + + + + the signatures of the functions we're using. + 所使用之函式的簽章。 + + + + Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. + 清單是已排序且不可變動的單向連結清單。它們於評估時會即刻進行運算。 + + + + This module shows various ways to generate lists and process lists with some functions + 此模組示範產生清單及利用某些函式處理清單的各種方法 + + + + in the 'List' module in the F# Core Library. + 在 F# 核心程式庫的 'List' 模組中。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists + + + + Lists are defined using [ ... ]. This is an empty list. + 清單使用 [ ... ] 定義。這是空白清單。 + + + + This is a list with 3 elements. ';' is used to separate elements on the same line. + 這是內含 3 個項目的清單。使用 ';' 分隔同一行的項目。 + + + + You can also separate elements by placing them on their own lines. + 您也可以將項目放在各自的行上加以分隔。 + + + + This is a list of integers from 1 to 1000 + 此為從 1 到 1000 的整數清單 + + + + Lists can also be generated by computations. This is a list containing + 計算也可產生清單。此清單內含 + + + + all the days of the year. + 當年每一天。 + + + + Print the first 5 elements of 'daysList' using 'List.take'. + 使用 'List.take' 列印 'daysList' 的前 5 個項目。 + + + + Computations can include conditionals. This is a list containing the tuples + 計算可包含條件。此為內含元組的清單 + + + + which are the coordinates of the black squares on a chess board. + 其為棋盤上黑方格的座標。 + + + + Lists can be transformed using 'List.map' and other functional programming combinators. + 可以使用 'List.map' 及其他函式程式設計結合器轉換清單。 + + + + This definition produces a new list by squaring the numbers in numberList, using the pipeline + 此定義會產生新的清單,方法是使用管線使 numberList 中的數字成平方 + + + + operator to pass an argument to List.map. + 運算子以將引數傳遞到 List.map。 + + + + There are many other list combinations. The following computes the sum of the squares of the + 還有許多其他清單組合。以下會計算下項的平方總和: + + + + numbers divisible by 3. + 可由 3 整除的數字。 + + + + Arrays are fixed-size, mutable collections of elements of the same type. + 陣列是固定大小且類型相同的可變動項目集合。 + + + + Although they are similar to Lists (they support enumeration and have similar combinators for data processing), + 陣列雖與清單 (支援列舉,並具有類似的結合器可用於資料處理) 相似,但 + + + + they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. + 陣列通常比較快,而且支援快速隨機存取。但可變動的代價是安全性變低。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays + + + + This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. + 此為空白的陣列。請注意與清單前置詞相似的前置詞,請改用 `[| ... |]`。 + + + + Arrays are specified using the same range of constructs as lists. + 使用與所列相同的建構範圍指定陣列。 + + + + This is an array of numbers from 1 to 1000. + 這是從 1 到 1000 的數字陣列。 + + + + This is an array containing only the words "hello" and "world". + 這是僅包含 "hello" 與 "world" 字詞的陣列。 + + + + This is an array initialized by index and containing the even numbers from 0 to 2000. + 這是由索引初始化的陣列,內含從 0 到 2000 之間的偶數。 + + + + Sub-arrays are extracted using slicing notation. + 使用了切割標記法來擷取子陣列。 + + + + You can loop over arrays and lists using 'for' loops. + 您可以使用 'for' 迴圈逐一反覆執行陣列與清單。 + + + + You can modify the contents of an an array element by using the left arrow assignment operator. + 您可以使用向左鍵指派運算子來修改陣列元素的內容。 + + + + To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + 若要深入了解此運算子,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables + + + + You can transform arrays using 'Array.map' and other functional programming operations. + 您可以使用 'Array.map' 及其他功能程式設計作業來轉換陣列。 + + + + The following calculates the sum of the lengths of the words that start with 'h'. + 以下會計算 'h' 開頭的字組之長度總和。 + + + + Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. + 序列是一系列的邏輯項目,全部皆為相同的類型。它是比清單及陣列更常見的類型。 + + + + Sequences are evaluated on-demand and are re-evaluated each time they are iterated. + 序列是視需要評估,並在每次反覆執行時重新評估。 + + + + An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. + F# 序列是 .NET System.Collections.Generic.IEnumerable<'T> 的別名。 + + + + Sequence processing functions can be applied to Lists and Arrays as well. + 序列處理函式也可以套用到清單和陣列。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences + + + + This is the empty sequence. + 此為空白序列。 + + + + This a sequence of values. + 這是值的序列。 + + + + This is an on-demand sequence from 1 to 1000. + 此為從 1 到 1000 的隨選序列。 + + + + This is a sequence producing the words "hello" and "world" + 此為產生 "hello" 及 "world" 的序列 + + + + This sequence producing the even numbers up to 2000. + 此序列產生 2000 以下的偶數。 + + + + This is an infinite sequence which is a random walk. + 這是屬於隨機漫步的無限序列。 + + + + This example uses yield! to return each element of a subsequence. + 此範例使用 yield! 傳回序列的每個元素。 + + + + This example shows the first 100 elements of the random walk. + 此範例顯示了隨機漫步的前 100 個項目。 + + + + Recursive functions can call themselves. In F#, functions are only recursive + 遞迴函式可以呼叫其本身。在 F# 中,函式均為遞迴 + + + + when declared using 'let rec'. + (於使用 'let rec' 宣告時)。 + + + + Recursion is the preferred way to process sequences or collections in F#. + 遞迴是處理 F# 中序列或集合的慣用方法。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions + + + + This example shows a recursive function that computes the factorial of an + 此範例顯示遞迴函式,其可計算下項的階乘: + + + + integer. It uses 'let rec' to define a recursive function. + 整數。其使用 'let rec' 來定義遞迴函式。 + + + + Computes the greatest common factor of two integers. + 計算兩個整數的最大公因數。 + + + + Since all of the recursive calls are tail calls, + 因為所有遞迴呼叫都是先計算細項的呼叫 (tail call),所以 + + + + the compiler will turn the function into a loop, + 編譯器會將函式轉換為迴圈, + + + + which improves performance and reduces memory consumption. + 以改善效能並降低記憶體耗用。 + + + + This example computes the sum of a list of integers using recursion. + 此範例會計算使用遞迴之整數清單的總和。 + + + + This makes 'sumList' tail recursive, using a helper function with a result accumulator. + 這會將 'sumList' 設成尾遞迴,使用內含結果累加器的 Helper 函式。 + + + + This invokes the tail recursive helper function, providing '0' as a seed accumulator. + 這會叫用尾遞迴 helper 函式,提供 '0' 作為種子累加器。 + + + + An approach like this is common in F#. + 在 F# 中,這類方式十分常見。 + + + + Records are an aggregate of named values, with optional members (such as methods). + 記錄是具有選擇性成員 (例如方法) 之具名值的彙總。 + + + + They are immutable and have structural equality semantics. + 它們不可變動,且具有結構相等的語意。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records + + + + This example shows how to define a new record type. + 此範例示範如何定義新記錄類型。 + + + + This example shows how to instantiate a record type. + 此範例示範如何具現化記錄類型。 + + + + You can also do this on the same line with ';' separators. + 您也可以使用 ';' 分隔符號,在同一行執行此作業。 + + + + This example shows how to use "copy-and-update" on record values. It creates + 此範例顯示如何在記錄值上使用 "copy-and-update"。其會建立 + + + + a new record value that is a copy of contact1, but has different values for + 新記錄值,其為 contact1 的複本,但對於下項有不同的值: + + + + the 'Phone' and 'Verified' fields. + [Phone]5D; 與 [Verified]5D; 欄位。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions + + + + This example shows how to write a function that processes a record value. + 此範例示範如何寫入會處理記錄值的函式。 + + + + It converts a 'ContactCard' object to a string. + 其會將 'ContactCard' 物件轉換為字串。 + + + + This is an example of a Record with a member. + 這是內含成員之記錄的範例。 + + + + Members can implement object-oriented members. + 成員可以實作物件導向成員。 + + + + Members are accessed via the '.' operator on an instantiated type. + 成員透過在具現化類型上的 '.' 運算子加以存取。 + + + + Records can also be represented as structs via the 'Struct' attribute. + 記錄也可透過 'Struct' 屬性以結構形式呈現。 + + + + This is helpful in situations where the performance of structs outweighs + 它在結構效能較優的情況下很有用 + + + + the flexibility of reference types. + 參考類型的彈性。 + + + + Discriminated Unions (DU for short) are values which could be a number of named forms or cases. + 差異聯集 (簡寫為 DU) 是可能為數個具名表單或案例的值。 + + + + Data stored in DUs can be one of several distinct values. + DU 中所儲存的資料可以是數個相異值中的一個。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions + + + + The following represents the suit of a playing card. + 以下代表一副撲克牌。 + + + + A Disciminated Union can also be used to represent the rank of a playing card. + 差異聯集也可用以代表一張撲克牌的順位。 + + + + Represents the rank of cards 2 .. 10 + 代表 2 .. 10 這幾張牌的順位 + + + + Discriminated Unions can also implement object-oriented members. + 差異聯集也可以實作物件導向成員。 + + + + This is a record type that combines a Suit and a Rank. + 這是合併了 Suit 和 Rank 的記錄類型。 + + + + It's common to use both Records and Disciminated Unions when representing data. + 代表資料時,通常會使用記錄與差異聯集。 + + + + This computes a list representing all the cards in the deck. + 這會計算代表一疊牌中所有牌的清單。 + + + + This example converts a 'Card' object to a string. + 此範例將 'Card' 物件轉換為字串。 + + + + This example prints all the cards in a playing deck. + 此範例會列印牌局的所有紙牌。 + + + + Single-case DUs are often used for domain modeling. This can buy you extra type safety + 單一案例 DU 通常用於網域模型。這讓使用類型變得更加安全 + + + + over primitive types such as strings and ints. + 針對基本類型,例如 strings 和 ints。 + + + + Single-case DUs cannot be implicitly converted to or from the type they wrap. + 單一案例 DU 無法隱含地轉換成它們所包裝的類型,反之亦然。 + + + + For example, a function which takes in an Address cannot accept a string as that input, + 例如,接受位址的函式無法接受字串作為輸入, + + + + or vive/versa. + 反之亦然。 + + + + You can easily instantiate a single-case DU as follows. + 您可以輕鬆地具現化單一案例 DU,如下所示。 + + + + When you need the value, you can unwrap the underlying value with a simple function. + 當您需要值時,可以使用簡單的函式來展開基礎值。 + + + + Printing single-case DUs is simple with unwrapping functions. + 使用展開 (unwrap) 函式來列印單一案例的 DU 十分簡單。 + + + + Disciminated Unions also support recursive definitions. + 差異聯集也支援遞迴定義。 + + + + This represents a Binary Search Tree, with one case being the Empty tree, + 這代表二進位搜尋樹狀結構,其中有一個案例是空的樹狀結構, + + + + and the other being a Node with a value and two subtrees. + 而另一個是具有一個值和兩個子樹狀結構的節點。 + + + + Check if an item exists in the binary search tree. + 請確認二進位搜尋樹狀結構中是否已有項目存在。 + + + + Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. + 使用模式比對進行遞迴搜尋。若存在即傳回 true; 否則傳回 false。 + + + + Check the left subtree. + 請檢查左樹狀子結構。 + + + + Check the right subtree. + 請檢查右樹狀子結構。 + + + + Inserts an item in the Binary Search Tree. + 在二進位搜尋樹狀結構中插入項目。 + + + + Finds the place to insert recursively using Pattern Matching, then inserts a new node. + 尋找要使用模式比對遞迴插入的位置,然後插入新節點。 + + + + If the item is already present, it does not insert anything. + 如果該項目已經存在,就不會插入任何內容。 + + + + No need to insert, it already exists; return the node. + 其已存在,所以無須插入; 傳回該節點。 + + + + Call into left subtree. + 呼叫左樹狀子結構。 + + + + Call into right subtree. + 呼叫右樹狀子結構。 + + + + Discriminated Unions can also be represented as structs via the 'Struct' attribute. + 差異聯集也可透過 'Struct' 屬性以結構形式呈現。 + + + + This is helpful in situations where the performance of structs outweighs + 它在結構效能較優的情況下很有用 + + + + the flexibility of reference types. + 參考類型的彈性。 + + + + However, there are two important things to know when doing this: + 但執行這項作業時,需要知道兩件重要的事情: + + + + 1. A struct DU cannot be recursively-defined. + 1. 不可遞迴定義結構 DU。 + + + + 2. A struct DU must have unique names for each of its cases. + 2. 結構 DU 的每個案例都必須要有唯一的名稱。 + + + + Pattern Matching is a feature of F# that allows you to utilize Patterns, + 模式比對是讓您能利用模式的一項 F# 功能, + + + + which are a way to compare data with a logical structure or structures, + 這是使用一或多個邏輯結構來比對資料的方式, + + + + decompose data into constituent parts, or extract information from data in various ways. + 將資料分解為構成組件,或透過各種方式來擷取資料中的資訊。 + + + + You can then dispatch on the "shape" of a pattern via Pattern Matching. + 接著可根據透過比對模式之模式的「形狀」加以分派。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching + + + + A record for a person's first and last name + 人員姓名的記錄 + + + + A Discriminated Union of 3 different kinds of employees + 3 種不同種類員工的差異聯集 + + + + Count everyone underneath the employee in the management hierarchy, + 計算管理階層中該員工下的每位人員, + + + + including the employee. + 包括員工。 + + + + Find all managers/executives named "Dave" who do not have any reports. + 尋找沒有任何報表且名為 "Dave" 的所有經理/主管。 + + + + This uses the 'function' shorthand to as a lambda expression. + 這會使用 'function' 速記作為 lambda 運算式。 + + + + [] matches an empty list. + [] 代表空的清單。 + + + + '_' is a wildcard pattern that matches anything. + '_' 是符合所有項目的萬用字元模式。 + + + + This handles the "or else" case. + 這會處理 "or else" 案例。 + + + + You can also use the shorthand function construct for pattern matching, + 您也可以使用速記函式建構來進行模式比對, + + + + which is useful when you're writing functions which make use of Partial Application. + 適用於撰寫可利用局部應用程式的函式時。 + + + + Define some more functions which parse with the helper function. + 再額外定義一些使用 Helper 函式進行剖析的函式。 + + + + Active Patterns are another powerful construct to use with pattern matching. + 現用模式是另一項功能強大之建構,可與模式比對搭配使用。 + + + + They allow you to partition input data into custom forms, decomposing them at the pattern match call site. + 它們可讓您將輸入資料分割到多個自訂表單,於模式比對呼叫網站進行分解。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns + + + + Pattern Matching via 'function' keyword and Active Patterns often looks like this. + 透過 'function' 關鍵字與現用模式進行模式比對,通常看來如下。 + + + + Call the printer with some different values to parse. + 透過解析一些不同的值來呼叫印表機。 + + + + Option values are any kind of value tagged with either 'Some' or 'None'. + 選項值是以 'Some' 或 'None' 標記的任何一種值。 + + + + They are used extensively in F# code to represent the cases where many other + 它們廣泛用於 F# 程式碼中,來代表許多其他語言會 + + + + languages would use null references. + 使用 null 參考的狀況。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options + + + + First, define a zipcode defined via Single-case Discriminated Union. + 首先,定義透過單一案例差異聯集所定義的郵遞區號。 + + + + Next, define a type where the ZipCode is optional. + 接著,定義不一定需要 ZipCode 的類型。 + + + + Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, + 然後,定義代表物件的介面類型,以計算客戶郵遞區號的郵寄區域, + + + + given implementations for the 'getState' and 'getShippingZone' abstract methods. + 'getState' 和 'getShippingZone' 抽象方法的指定實作。 + + + + Next, calculate a shipping zone for a customer using a calculator instance. + 接下來,為使用計算機執行個體的客戶計算出貨區。 + + + + This uses combinators in the Option module to allow a functional pipeline for + 這會在 Option 模組中使用結合器,以允許在執行下列功能時使用功能管線: + + + + transforming data with Optionals. + 使用選用項目來轉換資料。 + + + + Units of measure are a way to annotate primitive numeric types in a type-safe way. + 測量單位是以型別安全方式為基本數值類型加上註釋的方法。 + + + + You can then perform type-safe arithmetic on these values. + 接著可以在這些值上執行型別安全算術。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure + + + + First, open a collection of common unit names + 首先,開啟常用單位名稱的集合 + + + + Define a unitized constant + 定義 unitized 常數 + + + + Next, define a new unit type + 接著,定義新單位類型 + + + + Conversion factor mile to meter. + 英哩到公尺的轉換因數。 + + + + Define a unitized constant + 定義 unitized 常數 + + + + Compute metric-system constant + 計算計量系統常數 + + + + Values using Units of Measure can be used just like the primitive numeric type for things like printing. + 使用測量單位之值的用法,就像是列印這類作業的基本數字類型一樣。 + + + + Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. + 類別是在 F# 中定義新物件類型的一種方式,且支援標準物件導向建構。 + + + + They can have a variety of members (methods, properties, events, etc.) + 它們可以有各式不同的成員 (方法、屬性、事件等等) + + + + To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + 若要深入了解類別,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes + + + + To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + 若要深入了解成員,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members + + + + A simple two-dimensional Vector class. + 簡式二維向量類別。 + + + + The class's constructor is on the first line, + 類別的建構函式位於第一行, + + + + and takes two arguments: dx and dy, both of type 'double'. + 並接受兩種引數: dx 與 dy,兩者的類型都是 'double'。 + + + + This internal field stores the length of the vector, computed when the + 這個內部欄位會儲存向量長度,計算時機為 + + + + object is constructed + 物件已建構 + + + + 'this' specifies a name for the object's self identifier. + 'this' 會為物件的自我識別碼指定名稱。 + + + + In instance methods, it must appear before the member name. + 在執行個體方法中,它必須出現在成員名稱前面。 + + + + This member is a method. The previous members were properties. + 此成員是方法。先前的成員是屬性。 + + + + This is how you instantiate the Vector2D class. + 這是 Vector2D 類別的具現化方式。 + + + + Get a new scaled vector object, without modifying the original object. + 取得全新且可調整大小的向量物件,但不修改原始物件。 + + + + Generic classes allow types to be defined with respect to a set of type parameters. + 泛型類別可定義關乎一組類型參數的類型。 + + + + In the following, 'T is the type parameter for the class. + 在下列範例中,'T 是類別的型別參數。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ + + + + This internal field store the states in a list. + 此內部欄位會以清單形式儲存狀態。 + + + + Add a new element to the list of states. + 新增項目至狀態清單。 + + + + use the '<-' operator to mutate the value. + 使用 '<-' 運算子可變動值。 + + + + Get the entire list of historical states. + 取得完整的歷程狀態清單。 + + + + Get the latest state. + 取得最新狀態。 + + + + An 'int' instance of the state tracker class. Note that the type parameter is inferred. + 狀態追蹤器類別的 'int' 執行個體。請注意,型別參數是推斷出來的。 + + + + Add a state + 加入狀態 + + + + Interfaces are object types with only 'abstract' members. + 介面為只有 'abstract' 成員的物件類型。 + + + + Object types and object expressions can implement interfaces. + 物件類型與物件運算式可以實作介面。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces + + + + This is a type that implements IDisposable. + 這是實作 IDisposable 的類型。 + + + + This is the implementation of IDisposable members. + 這是 IDisposable 成員的實作。 + + + + This is an object that implements IDisposable via an Object Expression + 這是透過物件運算式實作 IDisposable 的物件 + + + + Unlike other languages such as C# or Java, a new type definition is not needed + 與 C# 或 Java 等其他這類語言不同,不需要新的類型定義 + + + + to implement an interface. + 以實作介面。 + + + + The FSharp.Core library defines a range of parallel processing functions. Here + FSharp.Core 程式庫定義一個範圍內的平行處理函式。這裡 + + + + you use some functions for parallel processing over arrays. + 您可以使用一些函式對陣列進行平行處理。 + + + + To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + 若要深入了解,請參閱: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D + + + + First, an array of inputs. + 首先,輸入的陣列。 + + + + Next, define a functions that does some CPU intensive computation. + 接下來,定義執行某些 CPU 密集型計算的函式。 + + + + Next, do a parallel map over a large input array. + 接下來,對大型輸入陣列執行平行對應。 + + + + Next, print the results. + 接下來,列印結果。 + + + + Events are a common idiom for .NET programming, especially with WinForms or WPF applications. + 事件是 .NET 程式設計的常見慣用語,特別是使用 WinForms 或 WPF 應用程式時。 + + + + To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events + + + + First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). + 首先,建立由訂閱點 (event.Publish) 與事件觸發程序 (event.Trigger) 所組成之事件物件的執行個體。 + + + + Next, add handler to the event. + 接下來,將處理常式新增到事件。 + + + + Next, trigger the event. + 接下來,觸發該事件。 + + + + Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). + 接下來,為遵循標準 .NET 慣例的事件建立執行個體: (sender, EventArgs)。 + + + + Next, add a handler for this new event. + 接下來,為此新事件新增處理常式。 + + + + Next, trigger this event (note that sender argument should be set). + 接下來,觸發此事件 (請注意,應該設定 sender 引數)。 + + + + + \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj b/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj new file mode 100644 index 0000000000..72afa7b760 --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj @@ -0,0 +1,17 @@ + + + + + + TutorialProject + + + + + + Template\Tutorial.fsx + + + + + diff --git a/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest new file mode 100644 index 0000000000..39bac985bc --- /dev/null +++ b/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest @@ -0,0 +1,25 @@ + + + + + F# .NETCore Project Templates + F# project templates for .NETCore. + + + + + + + + + + + + + + + + + + + diff --git a/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest new file mode 100644 index 0000000000..4b0a45a6e9 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest @@ -0,0 +1,28 @@ + + + + + + + Visual F# Templates + Deploy Visual F# Tools Desktop Project Templates to Visual Studio + Microsoft.FSharp.VSIX.Templates + https://docs.microsoft.com/en-us/dotnet/articles/fsharp/ + + + + + + + + + + + + + + + + + + diff --git a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj new file mode 100644 index 0000000000..cfab3f5dfa --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj @@ -0,0 +1,60 @@ + + + + + + Library + Microsoft\FSharpTemplates + net472 + true + + + + + PreserveNewest + packages\System.ValueTuple.4.4.0.nupkg + true + + + PreserveNewest + packages\FSharp.Core.$(FSharpCoreShippedPackageVersion).nupkg + true + + + Designer + + + + + + + + + + + {604f0daa-2d33-48dd-b162-edf0b672803d} + ConsoleProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {01678cda-a11f-4dee-9344-2edf91cf1ae7} + LibraryProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + {2facee44-48bd-40b5-a2ee-b54a0c9bb7c4} + TutorialProject + ProjectTemplates + TemplateProjectOutputGroup%3b + false + True + + + + From d2b59ed6f6211d8b9d10b44537a87c81626ce113 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Tue, 14 Jan 2020 20:19:47 -0800 Subject: [PATCH 186/214] Remove ILGlobals dependency on ILMetadataReader (#8041) * First step to get rid of ilglobals * Added ILScopeRef.PrimaryAssembly * almost * Fixed * Fixing build * Revert ilwrite changes from last commit * some cleanup * Trying to fix build * Trying to fix build * Adjusting a few cases that use QualifiedName * Refactor a bit on normalize * Some cleanup * Put ctok in local function * Minor touch up for ILScopeRef matching * Do not need this function anymore * Remove ILGlobals dep on getNameOfScopeRef * Added possiblePrimaryAssemblyRefs * Fixed build * Hopefully this fixes the build * Added EqualsIgnoringVersion to ILAssemblyRef * Added RemapAssemblyRef * Use EqualsIgnoringVersion on primaryAssemblyRef check in remap * Cleanup * nit style feedback changes * Removed RemapAssemblyRef. Added stamp that ignores version. * Fixed build * Minor format change * minor name refactoring * minimizing diff --- src/absil/il.fs | 170 ++++++++++++++++-------------- src/absil/il.fsi | 61 +++++++---- src/absil/ilprint.fs | 8 +- src/absil/ilread.fs | 73 +++++++------ src/absil/ilread.fsi | 2 - src/absil/ilreflect.fs | 31 +++--- src/absil/ilwrite.fs | 41 +++---- src/fsharp/CompileOps.fs | 62 ++++++++--- src/fsharp/CompileOptions.fs | 13 ++- src/fsharp/CompileOptions.fsi | 3 +- src/fsharp/QuotationTranslator.fs | 1 + src/fsharp/TastPickle.fs | 8 +- src/fsharp/fsc.fs | 9 +- src/fsharp/fsi/fsi.fs | 2 +- src/fsharp/import.fs | 30 +++--- src/fsharp/symbols/Symbols.fs | 18 ++-- src/fsharp/tast.fs | 1 + 17 files changed, 304 insertions(+), 229 deletions(-) diff --git a/src/absil/il.fs b/src/absil/il.fs index 37597e1436..ca9bfb808c 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -66,10 +66,6 @@ type PrimaryAssembly = | Mscorlib -> "mscorlib" | System_Runtime -> "System.Runtime" | NetStandard -> "netstandard" - static member IsSomePrimaryAssembly n = - n = PrimaryAssembly.Mscorlib.Name - || n = PrimaryAssembly.System_Runtime.Name - || n = PrimaryAssembly.NetStandard.Name // -------------------------------------------------------------------- // Utilities: type names @@ -373,6 +369,7 @@ let isMscorlib data = [] type ILAssemblyRef(data) = let uniqueStamp = AssemblyRefUniqueStampGenerator.Encode data + let uniqueIgnoringVersionStamp = AssemblyRefUniqueStampGenerator.Encode { data with assemRefVersion = None } member x.Name=data.assemRefName @@ -388,6 +385,11 @@ type ILAssemblyRef(data) = member x.UniqueStamp=uniqueStamp + member x.UniqueIgnoringVersionStamp=uniqueIgnoringVersionStamp + + member x.EqualsIgnoringVersion (aref: ILAssemblyRef) = + aref.UniqueIgnoringVersionStamp = uniqueIgnoringVersionStamp + override x.GetHashCode() = uniqueStamp override x.Equals yobj = ((yobj :?> ILAssemblyRef).UniqueStamp = uniqueStamp) @@ -490,6 +492,7 @@ type ILScopeRef = | Local | Module of ILModuleRef | Assembly of ILAssemblyRef + | PrimaryAssembly member x.IsLocalRef = match x with ILScopeRef.Local -> true | _ -> false @@ -498,6 +501,7 @@ type ILScopeRef = | ILScopeRef.Local -> "" | ILScopeRef.Module mref -> "module "+mref.Name | ILScopeRef.Assembly aref -> aref.QualifiedName + | ILScopeRef.PrimaryAssembly -> "" type ILArrayBound = int32 option @@ -2193,6 +2197,11 @@ and ILExportedTypesAndForwarders = member x.AsList = let (ILExportedTypesAndForwarders ltab) = x in Map.foldBack (fun _x y r -> y :: r) (ltab.Force()) [] + member x.TryFindByName nm = + match x with + | ILExportedTypesAndForwarders ltab -> + ltab.Value.TryFind nm + [] type ILResourceAccess = | Public @@ -2593,54 +2602,47 @@ let tname_IntPtr = "System.IntPtr" [] let tname_UIntPtr = "System.UIntPtr" +[] +let tname_TypedReference = "System.TypedReference" + [] -// This data structure needs an entirely delayed implementation -type ILGlobals(primaryScopeRef) = - - let m_mkSysILTypeRef nm = mkILTyRef (primaryScopeRef, nm) - - let m_typ_Object = mkILBoxedType (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Object)) - let m_typ_String = mkILBoxedType (mkILNonGenericTySpec (m_mkSysILTypeRef tname_String)) - let m_typ_Array = mkILBoxedType (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Array)) - let m_typ_Type = mkILBoxedType (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Type)) - let m_typ_SByte = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_SByte)) - let m_typ_Int16 = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Int16)) - let m_typ_Int32 = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Int32)) - let m_typ_Int64 = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Int64)) - let m_typ_Byte = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Byte)) - let m_typ_UInt16 = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_UInt16)) - let m_typ_UInt32 = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_UInt32)) - let m_typ_UInt64 = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_UInt64)) - let m_typ_Single = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Single)) - let m_typ_Double = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Double)) - let m_typ_Bool = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Bool)) - let m_typ_Char = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_Char)) - let m_typ_IntPtr = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_IntPtr)) - let m_typ_UIntPtr = ILType.Value (mkILNonGenericTySpec (m_mkSysILTypeRef tname_UIntPtr)) - - member x.primaryAssemblyScopeRef = m_typ_Object.TypeRef.Scope - member x.primaryAssemblyName = - match m_typ_Object.TypeRef.Scope with - | ILScopeRef.Assembly aref -> aref.Name +type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list) = + + let assembliesThatForwardToPrimaryAssembly = Array.ofList assembliesThatForwardToPrimaryAssembly + + let mkSysILTypeRef nm = mkILTyRef (primaryScopeRef, nm) + + member _.primaryAssemblyScopeRef = primaryScopeRef + member x.primaryAssemblyRef = + match primaryScopeRef with + | ILScopeRef.Assembly aref -> aref | _ -> failwith "Invalid primary assembly" - member x.typ_Object = m_typ_Object - member x.typ_String = m_typ_String - member x.typ_Array = m_typ_Array - member x.typ_Type = m_typ_Type - member x.typ_IntPtr = m_typ_IntPtr - member x.typ_UIntPtr = m_typ_UIntPtr - member x.typ_Byte = m_typ_Byte - member x.typ_Int16 = m_typ_Int16 - member x.typ_Int32 = m_typ_Int32 - member x.typ_Int64 = m_typ_Int64 - member x.typ_SByte = m_typ_SByte - member x.typ_UInt16 = m_typ_UInt16 - member x.typ_UInt32 = m_typ_UInt32 - member x.typ_UInt64 = m_typ_UInt64 - member x.typ_Single = m_typ_Single - member x.typ_Double = m_typ_Double - member x.typ_Bool = m_typ_Bool - member x.typ_Char = m_typ_Char + member x.primaryAssemblyName = x.primaryAssemblyRef.Name + + member val typ_Object = mkILBoxedType (mkILNonGenericTySpec (mkSysILTypeRef tname_Object)) + member val typ_String = mkILBoxedType (mkILNonGenericTySpec (mkSysILTypeRef tname_String)) + member val typ_Array = mkILBoxedType (mkILNonGenericTySpec (mkSysILTypeRef tname_Array)) + member val typ_Type = mkILBoxedType (mkILNonGenericTySpec (mkSysILTypeRef tname_Type)) + member val typ_SByte = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_SByte)) + member val typ_Int16 = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Int16)) + member val typ_Int32 = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Int32)) + member val typ_Int64 = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Int64)) + member val typ_Byte = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Byte)) + member val typ_UInt16 = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_UInt16)) + member val typ_UInt32 = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_UInt32)) + member val typ_UInt64 = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_UInt64)) + member val typ_Single = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Single)) + member val typ_Double = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Double)) + member val typ_Bool = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Bool)) + member val typ_Char = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_Char)) + member val typ_IntPtr = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_IntPtr)) + member val typ_UIntPtr = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_UIntPtr)) + member val typ_TypedReference = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_TypedReference)) + + member x.IsPossiblePrimaryAssemblyRef(aref: ILAssemblyRef) = + aref.EqualsIgnoringVersion x.primaryAssemblyRef || + assembliesThatForwardToPrimaryAssembly + |> Array.exists aref.EqualsIgnoringVersion /// For debugging [] @@ -2648,7 +2650,7 @@ type ILGlobals(primaryScopeRef) = override x.ToString() = "" -let mkILGlobals primaryScopeRef = ILGlobals primaryScopeRef +let mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) = ILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) let mkNormalCall mspec = I_call (Normalcall, mspec, None) @@ -2693,54 +2695,55 @@ let isILBoxedTy = function ILType.Boxed _ -> true | _ -> false let isILValueTy = function ILType.Value _ -> true | _ -> false -let isPrimaryAssemblyTySpec (tspec: ILTypeSpec) n = +let isBuiltInTySpec (ilg: ILGlobals) (tspec: ILTypeSpec) n = let tref = tspec.TypeRef let scoref = tref.Scope - (tref.Name = n) && - match scoref with - | ILScopeRef.Assembly n -> PrimaryAssembly.IsSomePrimaryAssembly n.Name - | ILScopeRef.Module _ -> false - | ILScopeRef.Local -> true + tref.Name = n && + (match scoref with + | ILScopeRef.Local + | ILScopeRef.Module _ -> false + | ILScopeRef.Assembly aref -> ilg.IsPossiblePrimaryAssemblyRef aref + | ILScopeRef.PrimaryAssembly -> true) -let isILBoxedPrimaryAssemblyTy (ty: ILType) n = - isILBoxedTy ty && isPrimaryAssemblyTySpec ty.TypeSpec n +let isILBoxedBuiltInTy ilg (ty: ILType) n = + isILBoxedTy ty && isBuiltInTySpec ilg ty.TypeSpec n -let isILValuePrimaryAssemblyTy (ty: ILType) n = - isILValueTy ty && isPrimaryAssemblyTySpec ty.TypeSpec n +let isILValueBuiltInTy ilg (ty: ILType) n = + isILValueTy ty && isBuiltInTySpec ilg ty.TypeSpec n -let isILObjectTy ty = isILBoxedPrimaryAssemblyTy ty tname_Object +let isILObjectTy ilg ty = isILBoxedBuiltInTy ilg ty tname_Object -let isILStringTy ty = isILBoxedPrimaryAssemblyTy ty tname_String +let isILStringTy ilg ty = isILBoxedBuiltInTy ilg ty tname_String -let isILTypedReferenceTy ty = isILValuePrimaryAssemblyTy ty "System.TypedReference" +let isILTypedReferenceTy ilg ty = isILValueBuiltInTy ilg ty tname_TypedReference -let isILSByteTy ty = isILValuePrimaryAssemblyTy ty tname_SByte +let isILSByteTy ilg ty = isILValueBuiltInTy ilg ty tname_SByte -let isILByteTy ty = isILValuePrimaryAssemblyTy ty tname_Byte +let isILByteTy ilg ty = isILValueBuiltInTy ilg ty tname_Byte -let isILInt16Ty ty = isILValuePrimaryAssemblyTy ty tname_Int16 +let isILInt16Ty ilg ty = isILValueBuiltInTy ilg ty tname_Int16 -let isILUInt16Ty ty = isILValuePrimaryAssemblyTy ty tname_UInt16 +let isILUInt16Ty ilg ty = isILValueBuiltInTy ilg ty tname_UInt16 -let isILInt32Ty ty = isILValuePrimaryAssemblyTy ty tname_Int32 +let isILInt32Ty ilg ty = isILValueBuiltInTy ilg ty tname_Int32 -let isILUInt32Ty ty = isILValuePrimaryAssemblyTy ty tname_UInt32 +let isILUInt32Ty ilg ty = isILValueBuiltInTy ilg ty tname_UInt32 -let isILInt64Ty ty = isILValuePrimaryAssemblyTy ty tname_Int64 +let isILInt64Ty ilg ty = isILValueBuiltInTy ilg ty tname_Int64 -let isILUInt64Ty ty = isILValuePrimaryAssemblyTy ty tname_UInt64 +let isILUInt64Ty ilg ty = isILValueBuiltInTy ilg ty tname_UInt64 -let isILIntPtrTy ty = isILValuePrimaryAssemblyTy ty tname_IntPtr +let isILIntPtrTy ilg ty = isILValueBuiltInTy ilg ty tname_IntPtr -let isILUIntPtrTy ty = isILValuePrimaryAssemblyTy ty tname_UIntPtr +let isILUIntPtrTy ilg ty = isILValueBuiltInTy ilg ty tname_UIntPtr -let isILBoolTy ty = isILValuePrimaryAssemblyTy ty tname_Bool +let isILBoolTy ilg ty = isILValueBuiltInTy ilg ty tname_Bool -let isILCharTy ty = isILValuePrimaryAssemblyTy ty tname_Char +let isILCharTy ilg ty = isILValueBuiltInTy ilg ty tname_Char -let isILSingleTy ty = isILValuePrimaryAssemblyTy ty tname_Single +let isILSingleTy ilg ty = isILValueBuiltInTy ilg ty tname_Single -let isILDoubleTy ty = isILValuePrimaryAssemblyTy ty tname_Double +let isILDoubleTy ilg ty = isILValueBuiltInTy ilg ty tname_Double // -------------------------------------------------------------------- // Rescoping @@ -3710,7 +3713,7 @@ let getCustomAttrData (ilg: ILGlobals) cattr = let MscorlibScopeRef = ILScopeRef.Assembly (ILAssemblyRef.Create ("mscorlib", None, Some ecmaPublicKey, true, None, None)) -let EcmaMscorlibILGlobals = mkILGlobals MscorlibScopeRef +let EcmaMscorlibILGlobals = mkILGlobals (MscorlibScopeRef, []) // ILSecurityDecl is a 'blob' having the following format: // - A byte containing a period (.). @@ -4006,7 +4009,8 @@ type ILReferences = ModuleReferences: ILModuleRef list } type ILReferencesAccumulator = - { refsA: HashSet + { ilg: ILGlobals + refsA: HashSet refsM: HashSet } let emptyILRefs = @@ -4023,6 +4027,7 @@ let refs_of_scoref s x = | ILScopeRef.Local -> () | ILScopeRef.Assembly assemblyRef -> refs_of_assemblyRef s assemblyRef | ILScopeRef.Module modref -> refs_of_modref s modref + | ILScopeRef.PrimaryAssembly -> refs_of_assemblyRef s s.ilg.primaryAssemblyRef let refs_of_tref s (x: ILTypeRef) = refs_of_scoref s x.Scope @@ -4219,9 +4224,10 @@ and refs_of_manifest s (m: ILAssemblyManifest) = refs_of_custom_attrs s m.CustomAttrs refs_of_exported_types s m.ExportedTypes -let computeILRefs modul = +let computeILRefs ilg modul = let s = - { refsA = HashSet<_>(HashIdentity.Structural) + { ilg = ilg + refsA = HashSet<_>(HashIdentity.Structural) refsM = HashSet<_>(HashIdentity.Structural) } refs_of_modul s modul diff --git a/src/absil/il.fsi b/src/absil/il.fsi index a0b818259d..506878e1d6 100755 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -79,6 +79,9 @@ type ILAssemblyRef = member Retargetable: bool member Version: ILVersionInfo option member Locale: string option + + member EqualsIgnoringVersion: ILAssemblyRef -> bool + interface System.IComparable [] @@ -97,7 +100,9 @@ type ILScopeRef = /// A reference to a type in a module in the same assembly | Module of ILModuleRef /// A reference to a type in another assembly - | Assembly of ILAssemblyRef + | Assembly of ILAssemblyRef + /// A reference to a type in the primary assembly + | PrimaryAssembly member IsLocalRef: bool member QualifiedName: string @@ -1393,7 +1398,8 @@ type ILExportedTypeOrForwarder = [] [] type ILExportedTypesAndForwarders = - member AsList: ILExportedTypeOrForwarder list + member AsList: ILExportedTypeOrForwarder list + member TryFindByName: string -> ILExportedTypeOrForwarder option [] type ILResourceAccess = @@ -1571,6 +1577,7 @@ val isTypeNameForGlobalFunctions: string -> bool [] type ILGlobals = member primaryAssemblyScopeRef: ILScopeRef + member primaryAssemblyRef: ILAssemblyRef member primaryAssemblyName: string member typ_Object: ILType member typ_String: ILType @@ -1590,10 +1597,20 @@ type ILGlobals = member typ_Double: ILType member typ_Bool: ILType member typ_Char: ILType - + member typ_TypedReference: ILType + + /// Is the given assembly possibly a primary assembly? + /// In practice, a primary assembly is an assembly that contains the System.Object type definition + /// and has no referenced assemblies. + /// However, we must consider assemblies that forward the System.Object type definition + /// to be possible primary assemblies. + /// Therefore, this will return true if the given assembly is the real primary assembly or an assembly that forwards + /// the System.Object type definition. + /// Assembly equivalency ignores the version here. + member IsPossiblePrimaryAssemblyRef: ILAssemblyRef -> bool /// Build the table of commonly used references given functions to find types in system assemblies -val mkILGlobals: ILScopeRef -> ILGlobals +val mkILGlobals: primaryScopeRef: ILScopeRef * assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list -> ILGlobals val EcmaMscorlibILGlobals: ILGlobals @@ -1944,23 +1961,23 @@ val instILType: ILGenericArgs -> ILType -> ILType val ecmaPublicKey: PublicKey /// Discriminating different important built-in types. -val isILObjectTy: ILType -> bool -val isILStringTy: ILType -> bool -val isILSByteTy: ILType -> bool -val isILByteTy: ILType -> bool -val isILInt16Ty: ILType -> bool -val isILUInt16Ty: ILType -> bool -val isILInt32Ty: ILType -> bool -val isILUInt32Ty: ILType -> bool -val isILInt64Ty: ILType -> bool -val isILUInt64Ty: ILType -> bool -val isILIntPtrTy: ILType -> bool -val isILUIntPtrTy: ILType -> bool -val isILBoolTy: ILType -> bool -val isILCharTy: ILType -> bool -val isILTypedReferenceTy: ILType -> bool -val isILDoubleTy: ILType -> bool -val isILSingleTy: ILType -> bool +val isILObjectTy: ILGlobals -> ILType -> bool +val isILStringTy: ILGlobals -> ILType -> bool +val isILSByteTy: ILGlobals -> ILType -> bool +val isILByteTy: ILGlobals -> ILType -> bool +val isILInt16Ty: ILGlobals -> ILType -> bool +val isILUInt16Ty: ILGlobals -> ILType -> bool +val isILInt32Ty: ILGlobals -> ILType -> bool +val isILUInt32Ty: ILGlobals -> ILType -> bool +val isILInt64Ty: ILGlobals -> ILType -> bool +val isILUInt64Ty: ILGlobals -> ILType -> bool +val isILIntPtrTy: ILGlobals -> ILType -> bool +val isILUIntPtrTy: ILGlobals -> ILType -> bool +val isILBoolTy: ILGlobals -> ILType -> bool +val isILCharTy: ILGlobals -> ILType -> bool +val isILTypedReferenceTy: ILGlobals -> ILType -> bool +val isILDoubleTy: ILGlobals -> ILType -> bool +val isILSingleTy: ILGlobals -> ILType -> bool val sha1HashInt64 : byte[] -> int64 /// Get a public key token from a public key. @@ -2002,6 +2019,6 @@ type ILReferences = ModuleReferences: ILModuleRef list } /// Find the full set of assemblies referenced by a module. -val computeILRefs: ILModuleDef -> ILReferences +val computeILRefs: ILGlobals -> ILModuleDef -> ILReferences val emptyILRefs: ILReferences diff --git a/src/absil/ilprint.fs b/src/absil/ilprint.fs index 3df22e6c98..07d2c8568d 100755 --- a/src/absil/ilprint.fs +++ b/src/absil/ilprint.fs @@ -157,12 +157,14 @@ let output_ieee32 os (x:float32) = output_string os "float32 ("; output_string o let output_ieee64 os (x:float) = output_string os "float64 ("; output_string os (string (bits_of_float x)); output_string os ")" -let rec goutput_scoref _env os = function +let rec goutput_scoref env os = function | ILScopeRef.Local -> () | ILScopeRef.Assembly aref -> output_string os "["; output_sqstring os aref.Name; output_string os "]" | ILScopeRef.Module mref -> output_string os "[.module "; output_sqstring os mref.Name; output_string os "]" + | ILScopeRef.PrimaryAssembly -> + output_string os "["; output_sqstring os env.ilGlobals.primaryAssemblyName; output_string os "]" and goutput_type_name_ref env os (scoref, enc, n) = goutput_scoref env os scoref @@ -1064,7 +1066,7 @@ let output_module_fragment_aux _refs os (ilg: ILGlobals) modul = reraise() let output_module_fragment os (ilg: ILGlobals) modul = - let refs = computeILRefs modul + let refs = computeILRefs ilg modul output_module_fragment_aux refs os ilg modul refs @@ -1085,7 +1087,7 @@ let goutput_module_manifest env os modul = let output_module os (ilg: ILGlobals) modul = try - let refs = computeILRefs modul + let refs = computeILRefs ilg modul let env = mk_ppenv ilg let env = ppenv_enter_modul env output_module_refs os refs diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index fed858c4d5..aa4438cedf 100755 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -32,6 +32,8 @@ open System.Reflection #nowarn "9" +let primaryAssemblyILGlobals = mkILGlobals (ILScopeRef.PrimaryAssembly, []) + let checking = false let logging = false let _ = if checking then dprintn "warning: ILBinaryReader.checking is on" @@ -859,8 +861,7 @@ type PEReader = [] type ILMetadataReader = - { ilg: ILGlobals - sorted: int64 + { sorted: int64 mdfile: BinaryFile pectxtCaptured: PEReader option // only set when reading full PE including code etc. for static linking entryPointToken: TableName * int @@ -1713,7 +1714,7 @@ and seekReadTypeDefOrRefAsTypeRef (ctxt: ILMetadataReader) (TaggedIndex(tag, idx | tag when tag = tdor_TypeRef -> seekReadTypeRef ctxt idx | tag when tag = tdor_TypeSpec -> dprintn ("type spec used where a type ref or def is required") - ctxt.ilg.typ_Object.TypeRef + primaryAssemblyILGlobals.typ_Object.TypeRef | _ -> failwith "seekReadTypeDefOrRefAsTypeRef_readTypeDefOrRefOrSpec" and seekReadMethodRefParent (ctxt: ILMetadataReader) mdv numtypars (TaggedIndex(tag, idx)) = @@ -1831,22 +1832,22 @@ and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr = and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr - if b0 = et_OBJECT then ctxt.ilg.typ_Object, sigptr - elif b0 = et_STRING then ctxt.ilg.typ_String, sigptr - elif b0 = et_I1 then ctxt.ilg.typ_SByte, sigptr - elif b0 = et_I2 then ctxt.ilg.typ_Int16, sigptr - elif b0 = et_I4 then ctxt.ilg.typ_Int32, sigptr - elif b0 = et_I8 then ctxt.ilg.typ_Int64, sigptr - elif b0 = et_I then ctxt.ilg.typ_IntPtr, sigptr - elif b0 = et_U1 then ctxt.ilg.typ_Byte, sigptr - elif b0 = et_U2 then ctxt.ilg.typ_UInt16, sigptr - elif b0 = et_U4 then ctxt.ilg.typ_UInt32, sigptr - elif b0 = et_U8 then ctxt.ilg.typ_UInt64, sigptr - elif b0 = et_U then ctxt.ilg.typ_UIntPtr, sigptr - elif b0 = et_R4 then ctxt.ilg.typ_Single, sigptr - elif b0 = et_R8 then ctxt.ilg.typ_Double, sigptr - elif b0 = et_CHAR then ctxt.ilg.typ_Char, sigptr - elif b0 = et_BOOLEAN then ctxt.ilg.typ_Bool, sigptr + if b0 = et_OBJECT then primaryAssemblyILGlobals.typ_Object, sigptr + elif b0 = et_STRING then primaryAssemblyILGlobals.typ_String, sigptr + elif b0 = et_I1 then primaryAssemblyILGlobals.typ_SByte, sigptr + elif b0 = et_I2 then primaryAssemblyILGlobals.typ_Int16, sigptr + elif b0 = et_I4 then primaryAssemblyILGlobals.typ_Int32, sigptr + elif b0 = et_I8 then primaryAssemblyILGlobals.typ_Int64, sigptr + elif b0 = et_I then primaryAssemblyILGlobals.typ_IntPtr, sigptr + elif b0 = et_U1 then primaryAssemblyILGlobals.typ_Byte, sigptr + elif b0 = et_U2 then primaryAssemblyILGlobals.typ_UInt16, sigptr + elif b0 = et_U4 then primaryAssemblyILGlobals.typ_UInt32, sigptr + elif b0 = et_U8 then primaryAssemblyILGlobals.typ_UInt64, sigptr + elif b0 = et_U then primaryAssemblyILGlobals.typ_UIntPtr, sigptr + elif b0 = et_R4 then primaryAssemblyILGlobals.typ_Single, sigptr + elif b0 = et_R8 then primaryAssemblyILGlobals.typ_Double, sigptr + elif b0 = et_CHAR then primaryAssemblyILGlobals.typ_Char, sigptr + elif b0 = et_BOOLEAN then primaryAssemblyILGlobals.typ_Bool, sigptr elif b0 = et_WITH then let b0, sigptr = sigptrGetByte bytes sigptr let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr @@ -1892,8 +1893,7 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = elif b0 = et_VOID then ILType.Void, sigptr elif b0 = et_TYPEDBYREF then - let t = mkILNonGenericValueTy(mkILTyRef(ctxt.ilg.primaryAssemblyScopeRef, "System.TypedReference")) - t, sigptr + primaryAssemblyILGlobals.typ_TypedReference, sigptr elif b0 = et_CMOD_REQD || b0 = et_CMOD_OPT then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr @@ -3037,6 +3037,7 @@ and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: Bin | ILScopeRef.Module mref -> ILResourceLocation.File (mref, offset) | ILScopeRef.Assembly aref -> ILResourceLocation.Assembly aref + | _ -> failwith "seekReadManifestResources: Invalid ILScopeRef" let r = { Name= readStringHeap ctxt nameIdx @@ -3120,7 +3121,7 @@ let getPdbReader pdbDirPath fileName = #endif // Note, pectxtEager and pevEager must not be captured by the results of this function -let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage, ilGlobals) = +let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage) = let mdv = mdfile.GetView() let magic = seekReadUInt16AsInt32 mdv metadataPhysLoc if magic <> 0x5342 then failwith (fileName + ": bad metadata magic number: " + string magic) @@ -3426,8 +3427,7 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p // Use an initialization hole let ctxtH = ref None let ctxt: ILMetadataReader = - { ilg=ilGlobals - sorted=sorted + { sorted=sorted getNumRows=getNumRows mdfile=mdfile dataEndPoints = match pectxtCaptured with None -> notlazy [] | Some pectxt -> getDataEndPointsDelayed pectxt ctxtH @@ -3705,13 +3705,13 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let peinfo = (subsys, (subsysMajor, subsysMinor), useHighEnthropyVA, ilOnly, only32, is32bitpreferred, only64, platform, isDll, alignVirt, alignPhys, imageBaseReal) (metadataPhysLoc, metadataSize, peinfo, pectxt, pev, pdb) -let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, ilGlobals, noFileOnDisk) = +let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, noFileOnDisk) = let (metadataPhysLoc, _metadataSize, peinfo, pectxt, pev, pdb) = openPEFileReader (fileName, pefile, pdbDirPath, noFileOnDisk) - let ilModule, ilAssemblyRefs = openMetadataReader (fileName, pefile, metadataPhysLoc, peinfo, pectxt, pev, Some pectxt, reduceMemoryUsage, ilGlobals) + let ilModule, ilAssemblyRefs = openMetadataReader (fileName, pefile, metadataPhysLoc, peinfo, pectxt, pev, Some pectxt, reduceMemoryUsage) ilModule, ilAssemblyRefs, pdb -let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage, ilGlobals) = - openMetadataReader (fileName, mdfile, 0, peinfo, pectxtEager, pevEager, None, reduceMemoryUsage, ilGlobals) +let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage) = + openMetadataReader (fileName, mdfile, 0, peinfo, pectxtEager, pevEager, None, reduceMemoryUsage) let ClosePdbReader pdb = #if FX_NO_PDB_READER @@ -3734,7 +3734,6 @@ type ReduceMemoryFlag = Yes | No type ILReaderOptions = { pdbDirPath: string option - ilGlobals: ILGlobals reduceMemoryUsage: ReduceMemoryFlag metadataOnly: MetadataOnlyFlag tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot } @@ -3756,7 +3755,7 @@ type ILModuleReaderImpl(ilModule: ILModuleDef, ilAssemblyRefs: Lazy BinaryFile - let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, opts.pdbDirPath, (opts.reduceMemoryUsage = ReduceMemoryFlag.Yes), opts.ilGlobals, true) + let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, opts.pdbDirPath, (opts.reduceMemoryUsage = ReduceMemoryFlag.Yes), true) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) :> ILModuleReader let ClearAllILModuleReaderCache() = @@ -3815,15 +3814,15 @@ let ClearAllILModuleReaderCache() = let OpenILModuleReader fileName opts = // Pseudo-normalize the paths. - let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_,_) as key), keyOk = + let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_) as key), keyOk = try let fullPath = FileSystem.GetFullPathShim fileName let writeTime = FileSystem.GetLastWriteTimeShim fileName - let key = ILModuleReaderCacheKey (fullPath, writeTime, opts.ilGlobals.primaryAssemblyScopeRef, opts.pdbDirPath.IsSome, opts.reduceMemoryUsage, opts.metadataOnly) + let key = ILModuleReaderCacheKey (fullPath, writeTime, opts.pdbDirPath.IsSome, opts.reduceMemoryUsage, opts.metadataOnly) key, true with exn -> System.Diagnostics.Debug.Assert(false, sprintf "Failed to compute key in OpenILModuleReader cache for '%s'. Falling back to uncached. Error = %s" fileName (exn.ToString())) - let fakeKey = ILModuleReaderCacheKey(fileName, System.DateTime.UtcNow, ILScopeRef.Local, false, ReduceMemoryFlag.Yes, MetadataOnlyFlag.Yes) + let fakeKey = ILModuleReaderCacheKey(fileName, System.DateTime.UtcNow, false, ReduceMemoryFlag.Yes, MetadataOnlyFlag.Yes) fakeKey, false let cacheResult1 = @@ -3878,13 +3877,13 @@ let OpenILModuleReader fileName opts = // If tryGetMetadata doesn't give anything, then just read the metadata chunk out of the binary createByteFileChunk opts fullPath (Some (metadataPhysLoc, metadataSize)) - let ilModule, ilAssemblyRefs = openPEMetadataOnly (fullPath, peinfo, pectxtEager, pevEager, mdfile, reduceMemoryUsage, opts.ilGlobals) + let ilModule, ilAssemblyRefs = openPEMetadataOnly (fullPath, peinfo, pectxtEager, pevEager, mdfile, reduceMemoryUsage) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore) else // If we are not doing metadata-only, then just go ahead and read all the bytes and hold them either strongly or weakly // depending on the heuristic let pefile = createByteFileChunk opts fullPath None - let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, opts.ilGlobals, false) + let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, false) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore) let ilModuleReader = ilModuleReader :> ILModuleReader @@ -3912,7 +3911,7 @@ let OpenILModuleReader fileName opts = else createByteFileChunk opts fullPath None - let ilModule, ilAssemblyRefs, pdb = openPE (fullPath, pefile, opts.pdbDirPath, reduceMemoryUsage, opts.ilGlobals, false) + let ilModule, ilAssemblyRefs, pdb = openPE (fullPath, pefile, opts.pdbDirPath, reduceMemoryUsage, false) let ilModuleReader = new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) let ilModuleReader = ilModuleReader :> ILModuleReader diff --git a/src/absil/ilread.fsi b/src/absil/ilread.fsi index 000b9cc34f..aaa2b0b6e8 100755 --- a/src/absil/ilread.fsi +++ b/src/absil/ilread.fsi @@ -46,8 +46,6 @@ type ReduceMemoryFlag = Yes | No type ILReaderOptions = { pdbDirPath: string option - ilGlobals: ILGlobals - // fsc.exe does not use reduceMemoryUsage (hence keeps MORE caches in AbstractIL and MORE memory mapping and MORE memory hogging but FASTER and SIMPLER file access) // fsi.exe does uses reduceMemoryUsage (hence keeps FEWER caches in AbstractIL and LESS memory mapping and LESS memory hogging but slightly SLOWER file access), because its long running // FCS uses reduceMemoryUsage (hence keeps FEWER caches in AbstractIL and LESS memory mapping and LESS memory hogging), because it is typically long running diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index 78abe7aa73..edab65fb7a 100755 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -322,6 +322,21 @@ type cenv = override x.ToString() = "" +let convResolveAssemblyRef (cenv: cenv) (asmref: ILAssemblyRef) qualifiedName = + let assembly = + match cenv.resolveAssemblyRef asmref with + | Some (Choice1Of2 path) -> + FileSystem.AssemblyLoadFrom path + | Some (Choice2Of2 assembly) -> + assembly + | None -> + let asmName = convAssemblyRef asmref + FileSystem.AssemblyLoad asmName + let typT = assembly.GetType qualifiedName + match typT with + | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, asmref.QualifiedName), range0)) + | res -> res + /// Convert an Abstract IL type reference to Reflection.Emit System.Type value. // This ought to be an adequate substitute for this whole function, but it needs // to be thoroughly tested. @@ -333,25 +348,15 @@ let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = let qualifiedName = (String.concat "+" (tref.Enclosing @ [ tref.Name ])).Replace(",", @"\,") match tref.Scope with | ILScopeRef.Assembly asmref -> - let assembly = - match cenv.resolveAssemblyRef asmref with - | Some (Choice1Of2 path) -> - FileSystem.AssemblyLoadFrom path - | Some (Choice2Of2 assembly) -> - assembly - | None -> - let asmName = convAssemblyRef asmref - FileSystem.AssemblyLoad asmName - let typT = assembly.GetType qualifiedName - match typT with - | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, asmref.QualifiedName), range0)) - | res -> res + convResolveAssemblyRef cenv asmref qualifiedName | ILScopeRef.Module _ | ILScopeRef.Local _ -> let typT = Type.GetType qualifiedName match typT with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, ""), range0)) | res -> res + | ILScopeRef.PrimaryAssembly -> + convResolveAssemblyRef cenv cenv.ilg.primaryAssemblyRef qualifiedName diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index cef2b42720..ed762cf9ac 100755 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -754,6 +754,7 @@ let GetScopeRefAsImplementationElem cenv scoref = | ILScopeRef.Local -> (i_AssemblyRef, 0) | ILScopeRef.Assembly aref -> (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) | ILScopeRef.Module mref -> (i_File, GetModuleRefAsFileIdx cenv mref) + | ILScopeRef.PrimaryAssembly -> (i_AssemblyRef, GetAssemblyRefAsIdx cenv cenv.ilg.primaryAssemblyRef) // -------------------------------------------------------------------- // Type references, types etc. @@ -781,6 +782,7 @@ and GetResolutionScopeAsElem cenv (scoref, enc) = | ILScopeRef.Local -> (rs_Module, 1) | ILScopeRef.Assembly aref -> (rs_AssemblyRef, GetAssemblyRefAsIdx cenv aref) | ILScopeRef.Module mref -> (rs_ModuleRef, GetModuleRefAsIdx cenv mref) + | ILScopeRef.PrimaryAssembly -> (rs_AssemblyRef, GetAssemblyRefAsIdx cenv cenv.ilg.primaryAssemblyRef) else let enc2, n2 = List.frontAndBack enc (rs_TypeRef, GetTypeDescAsTypeRefIdx cenv (scoref, enc2, n2)) @@ -866,27 +868,25 @@ and GetTypeAsTypeSpecIdx cenv env ty = FindOrAddSharedRow cenv TableNames.TypeSpec (GetTypeAsTypeSpecRow cenv env ty) and EmitType cenv env bb ty = + let ilg = cenv.ilg match ty with - // REVIEW: what are these doing here? - | ILType.Value tspec when tspec.Name = "System.String" -> bb.EmitByte et_STRING - | ILType.Value tspec when tspec.Name = "System.Object" -> bb.EmitByte et_OBJECT - | ty when isILSByteTy ty -> bb.EmitByte et_I1 - | ty when isILInt16Ty ty -> bb.EmitByte et_I2 - | ty when isILInt32Ty ty -> bb.EmitByte et_I4 - | ty when isILInt64Ty ty -> bb.EmitByte et_I8 - | ty when isILByteTy ty -> bb.EmitByte et_U1 - | ty when isILUInt16Ty ty -> bb.EmitByte et_U2 - | ty when isILUInt32Ty ty -> bb.EmitByte et_U4 - | ty when isILUInt64Ty ty -> bb.EmitByte et_U8 - | ty when isILDoubleTy ty -> bb.EmitByte et_R8 - | ty when isILSingleTy ty -> bb.EmitByte et_R4 - | ty when isILBoolTy ty -> bb.EmitByte et_BOOLEAN - | ty when isILCharTy ty -> bb.EmitByte et_CHAR - | ty when isILStringTy ty -> bb.EmitByte et_STRING - | ty when isILObjectTy ty -> bb.EmitByte et_OBJECT - | ty when isILIntPtrTy ty -> bb.EmitByte et_I - | ty when isILUIntPtrTy ty -> bb.EmitByte et_U - | ty when isILTypedReferenceTy ty -> bb.EmitByte et_TYPEDBYREF + | ty when isILSByteTy ilg ty -> bb.EmitByte et_I1 + | ty when isILInt16Ty ilg ty -> bb.EmitByte et_I2 + | ty when isILInt32Ty ilg ty -> bb.EmitByte et_I4 + | ty when isILInt64Ty ilg ty -> bb.EmitByte et_I8 + | ty when isILByteTy ilg ty -> bb.EmitByte et_U1 + | ty when isILUInt16Ty ilg ty -> bb.EmitByte et_U2 + | ty when isILUInt32Ty ilg ty -> bb.EmitByte et_U4 + | ty when isILUInt64Ty ilg ty -> bb.EmitByte et_U8 + | ty when isILDoubleTy ilg ty -> bb.EmitByte et_R8 + | ty when isILSingleTy ilg ty -> bb.EmitByte et_R4 + | ty when isILBoolTy ilg ty -> bb.EmitByte et_BOOLEAN + | ty when isILCharTy ilg ty -> bb.EmitByte et_CHAR + | ty when isILStringTy ilg ty -> bb.EmitByte et_STRING + | ty when isILObjectTy ilg ty -> bb.EmitByte et_OBJECT + | ty when isILIntPtrTy ilg ty -> bb.EmitByte et_I + | ty when isILUIntPtrTy ilg ty -> bb.EmitByte et_U + | ty when isILTypedReferenceTy ilg ty -> bb.EmitByte et_TYPEDBYREF | ILType.Boxed tspec -> EmitTypeSpec cenv env bb (et_CLASS, tspec) | ILType.Value tspec -> EmitTypeSpec cenv env bb (et_VALUETYPE, tspec) @@ -3621,6 +3621,7 @@ let writeBinaryAndReportMappings (outfile, match ilg.primaryAssemblyScopeRef with | ILScopeRef.Local -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Local" | ILScopeRef.Module(_) -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Module" + | ILScopeRef.PrimaryAssembly -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.PrimaryAssembly" | ILScopeRef.Assembly aref -> match aref.Version with | Some version when version.Major = 2us -> parseILVersion "2.0.50727.0" diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 88385a78c6..da9f025fea 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2474,10 +2474,9 @@ type TcConfigBuilder = ri, fileNameOfPath ri, ILResourceAccess.Public -let OpenILBinary(filename, reduceMemoryUsage, ilGlobals, pdbDirPath, shadowCopyReferences, tryGetMetadataSnapshot) = +let OpenILBinary(filename, reduceMemoryUsage, pdbDirPath, shadowCopyReferences, tryGetMetadataSnapshot) = let opts: ILReaderOptions = - { ilGlobals = ilGlobals - metadataOnly = MetadataOnlyFlag.Yes + { metadataOnly = MetadataOnlyFlag.Yes reduceMemoryUsage = reduceMemoryUsage pdbDirPath = pdbDirPath tryGetMetadataSnapshot = tryGetMetadataSnapshot } @@ -2542,7 +2541,6 @@ type AssemblyResolution = | None -> let readerSettings: ILReaderOptions = { pdbDirPath=None - ilGlobals = EcmaMscorlibILGlobals reduceMemoryUsage = reduceMemoryUsage metadataOnly = MetadataOnlyFlag.Yes tryGetMetadataSnapshot = tryGetMetadataSnapshot } @@ -3981,8 +3979,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let tcConfig = tcConfigP.Get ctok let ilModule, ilAssemblyRefs = let opts: ILReaderOptions = - { ilGlobals = g.ilg - reduceMemoryUsage = tcConfig.reduceMemoryUsage + { reduceMemoryUsage = tcConfig.reduceMemoryUsage pdbDirPath = None metadataOnly = MetadataOnlyFlag.Yes tryGetMetadataSnapshot = tcConfig.tryGetMetadataSnapshot } @@ -4075,15 +4072,8 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse else None - let ilGlobals = - // ILScopeRef.Local can be used only for primary assembly (mscorlib or System.Runtime) itself - // Remaining assemblies should be opened using existing ilGlobals (so they can properly locate fundamental types) - match ilGlobalsOpt with - | None -> mkILGlobals ILScopeRef.Local - | Some g -> g - let ilILBinaryReader = - OpenILBinary (filename, tcConfig.reduceMemoryUsage, ilGlobals, pdbDirPath, tcConfig.shadowCopyReferences, tcConfig.tryGetMetadataSnapshot) + OpenILBinary (filename, tcConfig.reduceMemoryUsage, pdbDirPath, tcConfig.shadowCopyReferences, tcConfig.tryGetMetadataSnapshot) tcImports.AttachDisposeAction(fun _ -> (ilILBinaryReader :> IDisposable).Dispose()) ilILBinaryReader.ILModuleDef, ilILBinaryReader.ILAssemblyRefs @@ -4678,11 +4668,48 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | (_, [ResolvedImportedAssembly ccu]) -> ccu.FSharpViewOfMetadata.ILScopeRef | _ -> failwith "unexpected" - let ilGlobals = mkILGlobals primaryScopeRef + let primaryAssemblyResolvedPath = + match primaryAssemblyResolution with + | [primaryAssemblyResolution] -> primaryAssemblyResolution.resolvedPath + | _ -> failwith "unexpected" + + let resolvedAssemblies = tcResolutions.GetAssemblyResolutions() + + let readerSettings: ILReaderOptions = + { pdbDirPath=None + reduceMemoryUsage = tcConfig.reduceMemoryUsage + metadataOnly = MetadataOnlyFlag.Yes + tryGetMetadataSnapshot = tcConfig.tryGetMetadataSnapshot } + + let tryFindAssemblyByExportedType manifest (exportedType: ILExportedTypeOrForwarder) = + match exportedType.ScopeRef, primaryScopeRef with + | ILScopeRef.Assembly aref1, ILScopeRef.Assembly aref2 when aref1.EqualsIgnoringVersion aref2 -> + mkRefToILAssembly manifest + |> Some + | _ -> + None + + let tryFindAssemblyThatForwardsToPrimaryAssembly manifest = + manifest.ExportedTypes.TryFindByName "System.Object" + |> Option.bind (tryFindAssemblyByExportedType manifest) + + // Determine what other assemblies could have been the primary assembly + // by checking to see if "System.Object" is an exported type. + let assembliesThatForwardToPrimaryAssembly = + resolvedAssemblies + |> List.choose (fun resolvedAssembly -> + if primaryAssemblyResolvedPath <> resolvedAssembly.resolvedPath then + let reader = OpenILModuleReader resolvedAssembly.resolvedPath readerSettings + reader.ILModuleDef.Manifest + |> Option.bind tryFindAssemblyThatForwardsToPrimaryAssembly + else + None) + + let ilGlobals = mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) frameworkTcImports.SetILGlobals ilGlobals // Load the rest of the framework DLLs all at once (they may be mutually recursive) - let! _assemblies = frameworkTcImports.RegisterAndImportReferencedAssemblies (ctok, tcResolutions.GetAssemblyResolutions()) + let! _assemblies = frameworkTcImports.RegisterAndImportReferencedAssemblies (ctok, resolvedAssemblies) // These are the DLLs we can search for well-known types let sysCcus = @@ -4725,7 +4752,8 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse (let scoref = fslibCcuInfo.ILScopeRef match scoref with | ILScopeRef.Assembly aref -> Some aref - | ILScopeRef.Local | ILScopeRef.Module _ -> error(InternalError("not ILScopeRef.Assembly", rangeStartup))) + | ILScopeRef.Local | ILScopeRef.Module _ | ILScopeRef.PrimaryAssembly -> + error(InternalError("not ILScopeRef.Assembly", rangeStartup))) fslibCcuInfo.FSharpViewOfMetadata // OK, now we have both mscorlib.dll and FSharp.Core.dll we can create TcGlobals diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index e5febe9d65..6510790668 100755 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -1833,14 +1833,17 @@ let GenerateIlxCode // by the same references. Only used for static linking. //---------------------------------------------------------------------------- -let NormalizeAssemblyRefs (ctok, tcImports:TcImports) scoref = +let NormalizeAssemblyRefs (ctok, ilGlobals: ILGlobals, tcImports:TcImports) scoref = + let normalizeAssemblyRefByName nm = + match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, nm, lookupOnly=false) with + | Some dllInfo -> dllInfo.ILScopeRef + | None -> scoref + match scoref with | ILScopeRef.Local | ILScopeRef.Module _ -> scoref - | ILScopeRef.Assembly aref -> - match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, aref.Name, lookupOnly=false) with - | Some dllInfo -> dllInfo.ILScopeRef - | None -> scoref + | ILScopeRef.PrimaryAssembly -> normalizeAssemblyRefByName ilGlobals.primaryAssemblyName + | ILScopeRef.Assembly aref -> normalizeAssemblyRefByName aref.Name let GetGeneratedILModuleName (t:CompilerTarget) (s:string) = // return the name of the file as a module name diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi index c9fe8de35d..da86aa4200 100644 --- a/src/fsharp/CompileOptions.fsi +++ b/src/fsharp/CompileOptions.fsi @@ -4,6 +4,7 @@ module internal FSharp.Compiler.CompileOptions open System open FSharp.Compiler +open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompileOps open FSharp.Compiler.Tast @@ -85,7 +86,7 @@ val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSo val GenerateIlxCode : IlxGen.IlxGenBackend * isInteractiveItExpr:bool * isInteractiveOnMono:bool * TcConfig * TypeChecker.TopAttribs * TypedAssemblyAfterOptimization * fragName:string * IlxGen.IlxAssemblyGenerator -> IlxGen.IlxGenResults // Used during static linking -val NormalizeAssemblyRefs : CompilationThreadToken * TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef) +val NormalizeAssemblyRefs : CompilationThreadToken * ILGlobals * TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef) // Miscellany val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit diff --git a/src/fsharp/QuotationTranslator.fs b/src/fsharp/QuotationTranslator.fs index cf4e4e1745..879130ab74 100755 --- a/src/fsharp/QuotationTranslator.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -988,6 +988,7 @@ and ConvILTypeRef cenv (tr: ILTypeRef) = let assemblyRef = match tr.Scope with | ILScopeRef.Local -> "." + | ILScopeRef.PrimaryAssembly -> cenv.g.ilg.primaryAssemblyScopeRef.QualifiedName | _ -> tr.Scope.QualifiedName QP.Named(tr.BasicQualifiedName, assemblyRef) diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index 4be3f01ee7..c1b2cf19b2 100644 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -919,9 +919,11 @@ let p_ILAssemblyRef (x: ILAssemblyRef) st = let p_ILScopeRef x st = match x with - | ILScopeRef.Local -> p_byte 0 st - | ILScopeRef.Module mref -> p_byte 1 st; p_ILModuleRef mref st - | ILScopeRef.Assembly aref -> p_byte 2 st; p_ILAssemblyRef aref st + | ILScopeRef.Local -> p_byte 0 st + | ILScopeRef.Module mref -> p_byte 1 st; p_ILModuleRef mref st + | ILScopeRef.Assembly aref -> p_byte 2 st; p_ILAssemblyRef aref st + // Encode primary assembly as a normal assembly ref + | ILScopeRef.PrimaryAssembly -> p_byte 2 st; p_ILAssemblyRef st.oglobals.ilg.primaryAssemblyRef st let u_ILPublicKey st = let tag = u_byte st diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index b820c3b54c..166b34a4f5 100755 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1283,7 +1283,7 @@ module StaticLinker = mutable visited: bool } // Find all IL modules that are to be statically linked given the static linking roots. - let FindDependentILModulesForStaticLinking (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals, ilxMainModule) = + let FindDependentILModulesForStaticLinking (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals, ilxMainModule) = if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty then [] else @@ -1299,7 +1299,7 @@ module StaticLinker = let assumedIndependentSet = set [ "mscorlib"; "System"; "System.Core"; "System.Xml"; "Microsoft.Build.Framework"; "Microsoft.Build.Utilities" ] begin - let mutable remaining = (computeILRefs ilxMainModule).AssemblyReferences + let mutable remaining = (computeILRefs ilGlobals ilxMainModule).AssemblyReferences while not (isNil remaining) do let ilAssemRef = List.head remaining remaining <- List.tail remaining @@ -1331,8 +1331,7 @@ module StaticLinker = None let opts : ILReaderOptions = - { ilGlobals = ilGlobals - metadataOnly = MetadataOnlyFlag.No // turn this off here as we need the actual IL code + { metadataOnly = MetadataOnlyFlag.No // turn this off here as we need the actual IL code reduceMemoryUsage = tcConfig.reduceMemoryUsage pdbDirPath = pdbDirPathOption tryGetMetadataSnapshot = (fun _ -> None) } @@ -1592,7 +1591,7 @@ module StaticLinker = if (not isMscorlib && name = PrimaryAssembly.Mscorlib.Name) then error (Error(FSComp.SR.fscStaticLinkingNoProfileMismatches(), rangeCmdArgs)) scopeRef - let rewriteAssemblyRefsToMatchLibraries = NormalizeAssemblyRefs (ctok, tcImports) + let rewriteAssemblyRefsToMatchLibraries = NormalizeAssemblyRefs (ctok, ilGlobals, tcImports) Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule ilxMainModule) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 1c7f4b6759..cd43753ab5 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1037,7 +1037,7 @@ type internal FsiDynamicCompiler errorLogger.AbortOnError(fsiConsoleOutput); ReportTime tcConfig "Assembly refs Normalised"; - let mainmod3 = Morphs.morphILScopeRefsInILModuleMemoized ilGlobals (NormalizeAssemblyRefs (ctok, tcImports)) ilxMainModule + let mainmod3 = Morphs.morphILScopeRefsInILModuleMemoized ilGlobals (NormalizeAssemblyRefs (ctok, ilGlobals, tcImports)) ilxMainModule errorLogger.AbortOnError(fsiConsoleOutput); #if DEBUG diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 29943461bd..849d7fff70 100755 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -56,32 +56,38 @@ type ImportMap(g: TcGlobals, assemblyLoader: AssemblyLoader) = member this.ILTypeRefToTyconRefCache = typeRefToTyconRefCache let CanImportILScopeRef (env: ImportMap) m scoref = - match scoref with - | ILScopeRef.Local -> true - | ILScopeRef.Module _ -> true - | ILScopeRef.Assembly assemblyRef -> + let isResolved assemblyRef = // Explanation: This represents an unchecked invariant in the hosted compiler: that any operations // which import types (and resolve assemblies from the tcImports tables) happen on the compilation thread. let ctok = AssumeCompilationThreadWithoutEvidence() - + match env.assemblyLoader.FindCcuFromAssemblyRef (ctok, m, assemblyRef) with - | UnresolvedCcu _ -> false + | UnresolvedCcu _ -> false | ResolvedCcu _ -> true + match scoref with + | ILScopeRef.Local + | ILScopeRef.Module _ -> true + | ILScopeRef.Assembly assemblyRef -> isResolved assemblyRef + | ILScopeRef.PrimaryAssembly -> isResolved env.g.ilg.primaryAssemblyRef /// Import a reference to a type definition, given the AbstractIL data for the type reference let ImportTypeRefData (env: ImportMap) m (scoref, path, typeName) = - - // Explanation: This represents an unchecked invariant in the hosted compiler: that any operations - // which import types (and resolve assemblies from the tcImports tables) happen on the compilation thread. - let ctok = AssumeCompilationThreadWithoutEvidence() - let ccu = + let findCcu assemblyRef = + // Explanation: This represents an unchecked invariant in the hosted compiler: that any operations + // which import types (and resolve assemblies from the tcImports tables) happen on the compilation thread. + let ctok = AssumeCompilationThreadWithoutEvidence() + + env.assemblyLoader.FindCcuFromAssemblyRef (ctok, m, assemblyRef) + + let ccu = match scoref with | ILScopeRef.Local -> error(InternalError("ImportILTypeRef: unexpected local scope", m)) | ILScopeRef.Module _ -> error(InternalError("ImportILTypeRef: reference found to a type in an auxiliary module", m)) - | ILScopeRef.Assembly assemblyRef -> env.assemblyLoader.FindCcuFromAssemblyRef (ctok, m, assemblyRef) // NOTE: only assemblyLoader callsite + | ILScopeRef.Assembly assemblyRef -> findCcu assemblyRef + | ILScopeRef.PrimaryAssembly -> findCcu env.g.ilg.primaryAssemblyRef // Do a dereference of a fake tcref for the type just to check it exists in the target assembly and to find // the corresponding Tycon. diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index d46313cb37..295e42b02c 100755 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -99,7 +99,7 @@ module Impl = invalidOp (sprintf "The entity '%s' does not exist or is in an unresolved assembly." poorQualifiedName) /// Checking accessibility that arise from different compilations needs more care - this is a duplicate of the F# compiler code for this case - let checkForCrossProjectAccessibility (thisCcu2:CcuThunk, ad2) (thisCcu1, taccess1) = + let checkForCrossProjectAccessibility (ilg: ILGlobals) (thisCcu2:CcuThunk, ad2) (thisCcu1, taccess1) = match ad2 with | AccessibleFrom(cpaths2, _) -> let nameOfScoRef (thisCcu:CcuThunk) scoref = @@ -107,6 +107,7 @@ module Impl = | ILScopeRef.Local -> thisCcu.AssemblyName | ILScopeRef.Assembly aref -> aref.Name | ILScopeRef.Module mref -> mref.Name + | ILScopeRef.PrimaryAssembly -> ilg.primaryAssemblyName let canAccessCompPathFromCrossProject (CompPath(scoref1, cpath1)) (CompPath(scoref2, cpath2)) = let rec loop p1 p2 = match p1, p2 with @@ -328,7 +329,7 @@ and FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = if entity.IsModuleOrNamespace then Item.ModuleOrNamespaces [entity] else Item.UnqualifiedType [entity]), (fun _this thisCcu2 ad -> - checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, getApproxFSharpAccessibilityOfEntity entity)) + checkForCrossProjectAccessibility cenv.g.ilg (thisCcu2, ad) (cenv.thisCcu, getApproxFSharpAccessibilityOfEntity entity)) // && AccessibilityLogic.IsEntityAccessible cenv.amap range0 ad entity) ) @@ -757,7 +758,7 @@ and FSharpUnionCase(cenv, v: UnionCaseRef) = checkEntityIsResolved v.TyconRef Item.UnionCase(UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange, v), false)), (fun _this thisCcu2 ad -> - checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, v.UnionCase.Accessibility)) + checkForCrossProjectAccessibility cenv.g.ilg (thisCcu2, ad) (cenv.thisCcu, v.UnionCase.Accessibility)) //&& AccessibilityLogic.IsUnionCaseAccessible cenv.amap range0 ad v) ) @@ -874,7 +875,7 @@ and FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = | ILField f -> Item.ILField f), (fun this thisCcu2 ad -> - checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, (this :?> FSharpField).Accessibility.Contents)) + checkForCrossProjectAccessibility cenv.g.ilg (thisCcu2, ad) (cenv.thisCcu, (this :?> FSharpField).Accessibility.Contents)) //&& //match d with //| Recd v -> AccessibilityLogic.IsRecdFieldAccessible cenv.amap range0 ad v @@ -1366,7 +1367,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = (fun () -> item), (fun this thisCcu2 ad -> let this = this :?> FSharpMemberOrFunctionOrValue - checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, this.Accessibility.Contents)) + checkForCrossProjectAccessibility cenv.g.ilg (thisCcu2, ad) (cenv.thisCcu, this.Accessibility.Contents)) //&& //match d with //| E e -> @@ -2462,7 +2463,12 @@ and FSharpAssembly internal (cenv, ccu: CcuThunk) = member __.Contents : FSharpAssemblySignature = FSharpAssemblySignature(cenv, ccu) - override x.ToString() = ccu.ILScopeRef.QualifiedName + override x.ToString() = + match ccu.ILScopeRef with + | ILScopeRef.PrimaryAssembly -> + cenv.g.ilg.primaryAssemblyRef.QualifiedName + | scoref -> + scoref.QualifiedName /// Represents open declaration in F# code. [] diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 7dc9e0a11d..a6d5ae499a 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -515,6 +515,7 @@ let getNameOfScopeRef sref = | ILScopeRef.Local -> "" | ILScopeRef.Module mref -> mref.Name | ILScopeRef.Assembly aref -> aref.Name + | ILScopeRef.PrimaryAssembly -> "" #if !NO_EXTENSIONTYPING let ComputeDefinitionLocationOfProvidedItem (p: Tainted<#IProvidedCustomAttributeProvider>) = From cba2ff73c136df008cf798d758c945bf6156d353 Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Wed, 15 Jan 2020 23:06:58 +0200 Subject: [PATCH 187/214] Add Expr.NewStructTuple constructor and active pattern (#8193) * add Expr.NewStructTuple constructor and active pattern * update surface areas --- src/fsharp/FSharp.Core/quotations.fs | 10 ++++++++++ src/fsharp/FSharp.Core/quotations.fsi | 12 ++++++++++++ src/fsharp/FSharp.Core/reflect.fsi | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/fsharp/FSharp.Core/quotations.fs b/src/fsharp/FSharp.Core/quotations.fs index 974e32c767..f1d2dea11e 100644 --- a/src/fsharp/FSharp.Core/quotations.fs +++ b/src/fsharp/FSharp.Core/quotations.fs @@ -391,6 +391,9 @@ module Patterns = [] let (|NewTuple|_|) input = match input with E(CombTerm(NewTupleOp(_), es)) -> Some es | _ -> None + [] + let (|NewStructTuple|_|) input = match input with E(CombTerm(NewTupleOp(ty), es)) when ty.IsValueType -> Some es | _ -> None + [] let (|DefaultValue|_|) input = match input with E(CombTerm(DefaultValueOp ty, [])) -> Some ty | _ -> None @@ -747,6 +750,10 @@ module Patterns = let ty = FSharpType.MakeTupleType(Array.map typeOf (Array.ofList args)) mkFEN (NewTupleOp ty) args + let mkNewStructTuple (asm, args) = + let ty = FSharpType.MakeStructTupleType(asm, Array.map typeOf (Array.ofList args)) + mkFEN (NewTupleOp ty) args + let mkTupleGet (ty, n, x) = checkTypesSR ty (typeOf x) "tupleGet" (SR.GetString(SR.QtmmExprNotMatchTuple)) let mems = FSharpType.GetTupleElements ty @@ -1820,6 +1827,9 @@ type Expr with static member NewTuple elements = mkNewTuple elements + static member NewStructTuple (asm:Assembly, elements) = + mkNewStructTuple (asm, elements) + static member NewRecord (recordType:Type, elements) = checkNonNull "recordType" recordType mkNewRecord (recordType, elements) diff --git a/src/fsharp/FSharp.Core/quotations.fsi b/src/fsharp/FSharp.Core/quotations.fsi index f9ab5d7089..a782140fe4 100644 --- a/src/fsharp/FSharp.Core/quotations.fsi +++ b/src/fsharp/FSharp.Core/quotations.fsi @@ -181,6 +181,12 @@ type Expr = /// The resulting expression. static member NewTuple: elements:Expr list -> Expr + /// Builds an expression that represents the creation of an F# tuple value + /// Runtime assembly containing System.ValueTuple definitions. + /// The list of elements of the tuple. + /// The resulting expression. + static member NewStructTuple: asm:Assembly * elements:Expr list -> Expr + /// Builds record-construction expressions /// The type of record. /// The list of elements of the record. @@ -545,6 +551,12 @@ module Patterns = [] val (|NewTuple|_|) : input:Expr -> (Expr list) option + /// An active pattern to recognize expressions that represent construction of struct tuple values + /// The input expression to match against. + /// (Expr list) option + [] + val (|NewStructTuple|_|) : input:Expr -> (Expr list) option + /// An active pattern to recognize expressions that represent the read of a static or instance property, or a non-function value declared in a module /// The input expression to match against. /// (Expr option * PropertyInfo * Expr list) option diff --git a/src/fsharp/FSharp.Core/reflect.fsi b/src/fsharp/FSharp.Core/reflect.fsi index 359f36af77..465529677a 100644 --- a/src/fsharp/FSharp.Core/reflect.fsi +++ b/src/fsharp/FSharp.Core/reflect.fsi @@ -314,11 +314,13 @@ type FSharpType = static member MakeTupleType: types:Type[] -> Type /// Returns a System.Type representing an F# tuple type with the given element types + /// Runtime assembly containing System.Tuple definitions. /// An array of types for the tuple elements. /// The type representing the tuple containing the input elements. static member MakeTupleType: asm:Assembly * types:Type[] -> Type /// Returns a System.Type representing an F# struct tuple type with the given element types + /// Runtime assembly containing System.ValueTuple definitions. /// An array of types for the tuple elements. /// The type representing the struct tuple containing the input elements. static member MakeStructTupleType: asm:Assembly * types:Type[] -> Type From 63b073c62b9ce1161f0576a4668def7556b310c2 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Wed, 15 Jan 2020 14:41:23 -0800 Subject: [PATCH 188/214] Inline List.iter/List.iteri for performance (#8176) --- src/fsharp/FSharp.Core/list.fs | 6 ++++-- src/fsharp/FSharp.Core/list.fsi | 4 ++-- src/fsharp/FSharp.Core/local.fs | 11 ----------- src/fsharp/FSharp.Core/local.fsi | 2 -- 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index 87035fb3c6..bf37ab08a1 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -100,7 +100,7 @@ namespace Microsoft.FSharp.Collections loop ([], state) (rev list) [] - let iter action list = Microsoft.FSharp.Primitives.Basics.List.iter action list + let inline iter action (list:'T list) = for x in list do action x [] let distinct (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.distinctWithComparer HashIdentity.Structural<'T> list @@ -164,7 +164,9 @@ namespace Microsoft.FSharp.Collections let takeWhile predicate (list: 'T list) = Microsoft.FSharp.Primitives.Basics.List.takeWhile predicate list [] - let iteri action list = Microsoft.FSharp.Primitives.Basics.List.iteri action list + let inline iteri action (list: 'T list) = + let mutable n = 0 + for x in list do action n x; n <- n + 1 [] let init length initializer = Microsoft.FSharp.Primitives.Basics.List.init length initializer diff --git a/src/fsharp/FSharp.Core/list.fsi b/src/fsharp/FSharp.Core/list.fsi index aba9b3505b..26c5dad94e 100644 --- a/src/fsharp/FSharp.Core/list.fsi +++ b/src/fsharp/FSharp.Core/list.fsi @@ -380,7 +380,7 @@ namespace Microsoft.FSharp.Collections /// The function to apply to elements from the input list. /// The input list. [] - val iter: action:('T -> unit) -> list:'T list -> unit + val inline iter: action:('T -> unit) -> list:'T list -> unit /// Applies the given function to two collections simultaneously. The /// collections must have identical size. @@ -395,7 +395,7 @@ namespace Microsoft.FSharp.Collections /// The function to apply to the elements of the list along with their index. /// The input list. [] - val iteri: action:(int -> 'T -> unit) -> list:'T list -> unit + val inline iteri: action:(int -> 'T -> unit) -> list:'T list -> unit /// Applies the given function to two collections simultaneously. The /// collections must have identical size. The integer passed to the diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 89db09ecda..8e1b17ea91 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -88,8 +88,6 @@ module internal List = [] let nonempty x = match x with [] -> false | _ -> true - let rec iter f x = match x with [] -> () | h :: t -> f h; iter f t - // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. let inline setFreshConsTail cons t = cons.( :: ).1 <- t @@ -499,15 +497,6 @@ module internal List = else filter predicate t - let iteri action x = - let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(action) - let rec loop n x = - match x with - | [] -> () - | h :: t -> f.Invoke(n, h); loop (n+1) t - - loop 0 x - // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. let rec concatToFreshConsTail cons h1 l = diff --git a/src/fsharp/FSharp.Core/local.fsi b/src/fsharp/FSharp.Core/local.fsi index b5bcec9e95..2c9996d4f1 100644 --- a/src/fsharp/FSharp.Core/local.fsi +++ b/src/fsharp/FSharp.Core/local.fsi @@ -32,7 +32,6 @@ module internal List = val distinctWithComparer : System.Collections.Generic.IEqualityComparer<'T> -> 'T list -> 'T list val distinctByWithComparer : System.Collections.Generic.IEqualityComparer<'Key> -> ('T -> 'Key) -> list:'T list -> 'T list when 'Key : equality val init : int -> (int -> 'T) -> 'T list - val iter : ('T -> unit) -> 'T list -> unit val filter : predicate:('T -> bool) -> 'T list -> 'T list val collect : ('T -> 'U list) -> 'T list -> 'U list val partition : predicate:('T -> bool) -> 'T list -> 'T list * 'T list @@ -48,7 +47,6 @@ module internal List = val exists : predicate:('T -> bool) -> 'T list -> bool val rev: 'T list -> 'T list val concat : seq<'T list> -> 'T list - val iteri : action:(int -> 'T -> unit) -> 'T list -> unit val unfold : ('State -> ('T * 'State) option) -> 'State -> 'T list val unzip : ('T1 * 'T2) list -> 'T1 list * 'T2 list val unzip3 : ('T1 * 'T2 * 'T3) list -> 'T1 list * 'T2 list * 'T3 list From 843af3475655f41e906d1900fa9c81d5f4b29e8a Mon Sep 17 00:00:00 2001 From: Gauthier Segay Date: Thu, 16 Jan 2020 20:36:55 +0100 Subject: [PATCH 189/214] Fix the .bsl spurious whitespace (#8219) * Rename `buff` to `writeViaBuffer` and remove `writeViaBufferWithEnvironmentNewLines` `writeViaBufferWithEnvironmentNewLines` is causing borked output when error message ends with "\n". This is probably dating from far back in the history of the codebase, and it doesn't show in windows console, probably because the console itself has some silly work around line termination... * a bunch of .bsl updated with accurate output * fix one bsl * non change for CI * non change for CI --- src/fsharp/fsc.fs | 4 ++-- src/fsharp/fsi/fsi.fs | 8 ++++---- src/fsharp/lib.fs | 11 ++--------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 166b34a4f5..285ecb10fb 100755 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -102,7 +102,7 @@ let ConsoleErrorLoggerUpToMaxErrors (tcConfigB: TcConfigBuilder, exiter : Exiter member __.HandleIssue(tcConfigB, err, isError) = DoWithErrorColor isError (fun () -> let diag = OutputDiagnostic (tcConfigB.implicitIncludeDir, tcConfigB.showFullPaths, tcConfigB.flatErrors, tcConfigB.errorStyle, isError) - writeViaBufferWithEnvironmentNewLines stderr diag err + writeViaBuffer stderr diag err stderr.WriteLine()) } :> ErrorLogger @@ -316,7 +316,7 @@ module InterfaceFileWriter = for (TImplFile (_, _, mexpr, _, _, _)) in declaredImpls do let denv = BuildInitialDisplayEnvForSigFileGeneration tcGlobals - writeViaBufferWithEnvironmentNewLines os (fun os s -> Printf.bprintf os "%s\n\n" s) + writeViaBuffer os (fun os s -> Printf.bprintf os "%s\n\n" s) (NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr |> Layout.squashTo 80 |> Layout.showL) if tcConfig.printSignatureFile <> "" then os.Dispose() diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index cd43753ab5..9f6df3f16a 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -502,8 +502,8 @@ type internal FsiStdinSyphon(errorWriter: TextWriter) = let isError = true DoWithErrorColor isError (fun () -> errorWriter.WriteLine(); - writeViaBufferWithEnvironmentNewLines errorWriter (OutputDiagnosticContext " " syphon.GetLine) err; - writeViaBufferWithEnvironmentNewLines errorWriter (OutputDiagnostic (tcConfig.implicitIncludeDir,tcConfig.showFullPaths,tcConfig.flatErrors,tcConfig.errorStyle,isError)) err; + writeViaBuffer errorWriter (OutputDiagnosticContext " " syphon.GetLine) err; + writeViaBuffer errorWriter (OutputDiagnostic (tcConfig.implicitIncludeDir,tcConfig.showFullPaths,tcConfig.flatErrors,tcConfig.errorStyle,isError)) err; errorWriter.WriteLine() errorWriter.WriteLine() errorWriter.Flush())) @@ -548,8 +548,8 @@ type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStd DoWithErrorColor isError (fun () -> if ReportWarning tcConfigB.errorSeverityOptions err then fsiConsoleOutput.Error.WriteLine() - writeViaBufferWithEnvironmentNewLines fsiConsoleOutput.Error (OutputDiagnosticContext " " fsiStdinSyphon.GetLine) err - writeViaBufferWithEnvironmentNewLines fsiConsoleOutput.Error (OutputDiagnostic (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isError)) err + writeViaBuffer fsiConsoleOutput.Error (OutputDiagnosticContext " " fsiStdinSyphon.GetLine) err + writeViaBuffer fsiConsoleOutput.Error (OutputDiagnostic (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isError)) err fsiConsoleOutput.Error.WriteLine() fsiConsoleOutput.Error.WriteLine() fsiConsoleOutput.Error.Flush()) diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index b9653f35c7..2b9d584bdc 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -313,19 +313,12 @@ let bufs f = f buf buf.ToString() -let buff (os: TextWriter) f x = +// writing to output stream via a string buffer. +let writeViaBuffer (os: TextWriter) f x = let buf = System.Text.StringBuilder 100 f buf x os.Write(buf.ToString()) -// Converts "\n" into System.Environment.NewLine before writing to os. See lib.fs:buff -let writeViaBufferWithEnvironmentNewLines (os: TextWriter) f x = - let buf = System.Text.StringBuilder 100 - f buf x - let text = buf.ToString() - let text = text.Replace("\n", System.Environment.NewLine) - os.Write text - //--------------------------------------------------------------------------- // Imperative Graphs //--------------------------------------------------------------------------- From 387d20a8e8cd899dfacc172ae35549afd8a61c5f Mon Sep 17 00:00:00 2001 From: Will Smith Date: Thu, 16 Jan 2020 18:19:33 -0800 Subject: [PATCH 190/214] Fixed exception that prevented creating a memory mapped file that shadow copies a file on-disk (#8238) * Fixed exception that prevented creating a memory mapped file that is shadow copied * Update bytes.fs --- src/absil/bytes.fs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index 9ec1757793..754b9d49dd 100755 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -306,10 +306,11 @@ type ByteMemory with leaveOpen=false) mmf, mmf.CreateViewAccessor(0L, length, memoryMappedFileAccess), length + // Validate MMF with the access that was intended. match access with - | FileAccess.Read when not accessor.CanRead -> failwith "Cannot read file" - | FileAccess.Write when not accessor.CanWrite -> failwith "Cannot write file" - | _ when not accessor.CanRead || not accessor.CanWrite -> failwith "Cannot read or write file" + | FileAccess.Read when not accessor.CanRead -> invalidOp "Cannot read file" + | FileAccess.Write when not accessor.CanWrite -> invalidOp "Cannot write file" + | FileAccess.ReadWrite when not accessor.CanRead || not accessor.CanWrite -> invalidOp "Cannot read or write file" | _ -> () let safeHolder = From 13efffcb1bc3b94e9807b594f5f1aaad3c679bdd Mon Sep 17 00:00:00 2001 From: Will Smith Date: Thu, 16 Jan 2020 19:59:54 -0800 Subject: [PATCH 191/214] Using ArrayPool for AssocTable (#8234) * Using ArrayPool * Remove open * Changed some style nits * Clear arrays --- eng/Versions.props | 1 + .../FSharp.Compiler.Service.fsproj | 1 + src/utils/prim-parsing.fs | 24 +++++++++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index f7611980e0..64a7ddd713 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -95,6 +95,7 @@ 4.3.0 4.3.0 4.5.0 + 4.5.0 $(RoslynVersion) $(RoslynVersion) diff --git a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index 589f45cb4e..96f19e7b2c 100644 --- a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -683,6 +683,7 @@ + diff --git a/src/utils/prim-parsing.fs b/src/utils/prim-parsing.fs index b58e592278..996cdc67d5 100755 --- a/src/utils/prim-parsing.fs +++ b/src/utils/prim-parsing.fs @@ -7,6 +7,7 @@ namespace Internal.Utilities.Text.Parsing open Internal.Utilities.Text.Lexing open System +open System.Buffers exception RecoverableParseError exception Accept of obj @@ -131,11 +132,7 @@ module internal Implementation = //------------------------------------------------------------------------- // Read the tables written by FSYACC. - type AssocTable(elemTab:uint16[], offsetTab:uint16[]) = - let cacheSize = 7919 // the 1000'th prime - // Use a simpler hash table with faster lookup, but only one - // hash bucket per key. - let cache = Array.zeroCreate (cacheSize * 2) + type AssocTable(elemTab: uint16[], offsetTab: uint16[], cache: int[], cacheSize: int) = member t.ReadAssoc (minElemNum,maxElemNum,defaultValueOfAssoc,keyToFind) = // do a binary chop on the table @@ -234,8 +231,21 @@ module internal Implementation = let ruleValues = (Array.zeroCreate 100 : obj[]) let lhsPos = (Array.zeroCreate 2 : Position[]) let reductions = tables.reductions - let actionTable = new AssocTable(tables.actionTableElements, tables.actionTableRowOffsets) - let gotoTable = new AssocTable(tables.gotos, tables.sparseGotoTableRowOffsets) + let cacheSize = 7919 // the 1000'th prime + // Use a simpler hash table with faster lookup, but only one + // hash bucket per key. + let actionTableCache = ArrayPool.Shared.Rent(cacheSize * 2) + let gotoTableCache = ArrayPool.Shared.Rent(cacheSize * 2) + // Clear the arrays since ArrayPool does not + Array.Clear(actionTableCache, 0, actionTableCache.Length) + Array.Clear(gotoTableCache, 0, gotoTableCache.Length) + use _cacheDisposal = + { new IDisposable with + member _.Dispose() = + ArrayPool.Shared.Return actionTableCache + ArrayPool.Shared.Return gotoTableCache } + let actionTable = AssocTable(tables.actionTableElements, tables.actionTableRowOffsets, actionTableCache, cacheSize) + let gotoTable = AssocTable(tables.gotos, tables.sparseGotoTableRowOffsets, gotoTableCache, cacheSize) let stateToProdIdxsTable = new IdxToIdxListTable(tables.stateToProdIdxsTableElements, tables.stateToProdIdxsTableRowOffsets) let parseState = From 8c649d88196794dacd90e0c4a024879d0ec4a5cd Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 17 Jan 2020 03:44:36 -0800 Subject: [PATCH 192/214] improve build telemetry (#8239) * add windows build telemetry * fix linux build telemetry --- eng/Build.ps1 | 10 ++++++++++ eng/build.sh | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/eng/Build.ps1 b/eng/Build.ps1 index b1bac65054..cf7ce0413c 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -61,6 +61,8 @@ param ( Set-StrictMode -version 2.0 $ErrorActionPreference = "Stop" +$BuildCategory = "" +$BuildMessage = "" function Print-Usage() { Write-Host "Common settings:" @@ -303,6 +305,9 @@ function EnablePreviewSdks() { } try { + $script:BuildCategory = "Build" + $script:BuildMessage = "Failure preparing build" + Process-Arguments . (Join-Path $PSScriptRoot "build-utils.ps1") @@ -317,9 +322,11 @@ try { } if ($bootstrap) { + $script:BuildMessage = "Failure building bootstrap compiler" $bootstrapDir = Make-BootstrapBuild } + $script:BuildMessage = "Failure building product" if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish) { if ($noVisualStudio) { BuildCompiler @@ -332,6 +339,8 @@ try { VerifyAssemblyVersionsAndSymbols } + $script:BuildCategory = "Test" + $script:BuildMessage = "Failure running tests" $desktopTargetFramework = "net472" $coreclrTargetFramework = "netcoreapp3.0" @@ -421,6 +430,7 @@ catch { Write-Host $_ Write-Host $_.Exception Write-Host $_.ScriptStackTrace + Write-PipelineTelemetryError -Category $script:BuildCategory -Message $script:BuildMessage ExitWithExitCode 1 } finally { diff --git a/eng/build.sh b/eng/build.sh index a53fce7914..6340d55746 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -66,6 +66,9 @@ properties="" docker=false args="" +BuildCategory="" +BuildMessage="" + if [[ $# = 0 ]] then usage @@ -150,6 +153,8 @@ done . "$scriptroot/common/tools.sh" function TestUsingNUnit() { + BuildCategory="Test" + BuildMessage="Error running tests" testproject="" targetframework="" while [[ $# > 0 ]]; do @@ -180,14 +185,12 @@ function TestUsingNUnit() { projectname="${projectname%.*}" testlogpath="$artifacts_dir/TestResults/$configuration/${projectname}_$targetframework.xml" args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"nunit;LogFilePath=$testlogpath\"" - "$DOTNET_INSTALL_DIR/dotnet" $args || { - local exit_code=$? - Write-PipelineTelemetryError -category 'Test' "dotnet test failed for $testproject:$targetframework (exit code $exit_code)." - ExitWithExitCode $exit_code - } + "$DOTNET_INSTALL_DIR/dotnet" $args || exit $? } function BuildSolution { + BuildCategory="Build" + BuildMessage="Error preparing build" local solution="FSharp.sln" echo "$solution:" @@ -229,33 +232,28 @@ function BuildSolution { rm -fr $bootstrap_dir fi if [ ! -f "$bootstrap_dir/fslex.dll" ]; then + BuildMessage="Error building tools" MSBuild "$repo_root/src/buildtools/buildtools.proj" \ /restore \ /p:Configuration=$bootstrap_config \ - /t:Publish || { - local exit_code=$? - Write-PipelineTelemetryError -category 'Build' "Error building buildtools (exit code '$exit_code')." - ExitWithExitCode $exit_code - } + /t:Publish mkdir -p "$bootstrap_dir" cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp3.0/publish $bootstrap_dir/fslex cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp3.0/publish $bootstrap_dir/fsyacc fi if [ ! -f "$bootstrap_dir/fsc.exe" ]; then + BuildMessage="Error building bootstrap" MSBuild "$repo_root/proto.proj" \ /restore \ /p:Configuration=$bootstrap_config \ - /t:Publish || { - local exit_code=$? - Write-PipelineTelemetryError -category 'Build' "Error building bootstrap compiler (exit code '$exit_code')." - ExitWithExitCode $exit_code - } + /t:Publish cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp3.0/publish $bootstrap_dir/fsc fi # do real build + BuildMessage="Error building solution" MSBuild $toolset_build_proj \ $bl \ /v:$verbosity \ @@ -271,13 +269,20 @@ function BuildSolution { /p:ContinuousIntegrationBuild=$ci \ /p:QuietRestore=$quiet_restore \ /p:QuietRestoreBinaryLog="$binary_log" \ - $properties || { - local exit_code=$? - Write-PipelineTelemetryError -category 'Build' "Error building solution (exit code '$exit_code')." - ExitWithExitCode $exit_code - } + $properties +} + +function TrapAndReportError { + local exit_code=$? + if [[ ! $exit_code == 0 ]]; then + Write-PipelineTelemetryError -category $BuildCategory "$BuildMessage (exit code '$exit_code')." + ExitWithExitCode $exit_code + fi } +# allow early termination to report the appropriate build failure reason +trap TrapAndReportError EXIT + InitializeDotNetCli $restore BuildSolution @@ -293,4 +298,3 @@ if [[ "$test_core_clr" == true ]]; then fi ExitWithExitCode 0 - From 20250ba47748532e90c08d9e3ca303482814959c Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 17 Jan 2020 18:59:52 +0000 Subject: [PATCH 193/214] cleanup and whitespace --- src/fsharp/ConstraintSolver.fsi | 73 +- src/fsharp/IlxGen.fs | 10 +- src/fsharp/InfoReader.fs | 2 +- src/fsharp/MethodCalls.fs | 7 + src/fsharp/NameResolution.fs | 37 +- src/fsharp/NameResolution.fsi | 76 +- src/fsharp/PostInferenceChecks.fs | 6 +- src/fsharp/TastOps.fs | 44 +- src/fsharp/TastOps.fsi | 8 +- src/fsharp/TypeChecker.fs | 146 +- src/fsharp/TypeRelations.fs | 2 +- src/fsharp/fsc.fs | 4 +- src/fsharp/infos.fs | 7 +- src/fsharp/tast.fs | 7 +- vsintegration/ProjectTemplates/.gitignore | 2 - .../ConsoleProject/ConsoleProject.csproj | 18 - .../ConsoleProject/Template/App.config | 6 - .../ConsoleProject/Template/AssemblyInfo.fs | 41 - .../Template/ConsoleApplication.fsproj | 65 - .../Template/ConsoleApplication.vstemplate | 33 - .../ConsoleProject/Template/Program.fs | 7 - .../Template/xlf/AssemblyInfo.fs.cs.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.de.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.es.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.fr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.it.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ja.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ko.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pl.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ru.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.tr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hant.xlf | 77 - .../Template/xlf/Program.fs.cs.xlf | 22 - .../Template/xlf/Program.fs.de.xlf | 22 - .../Template/xlf/Program.fs.es.xlf | 22 - .../Template/xlf/Program.fs.fr.xlf | 22 - .../Template/xlf/Program.fs.it.xlf | 22 - .../Template/xlf/Program.fs.ja.xlf | 22 - .../Template/xlf/Program.fs.ko.xlf | 22 - .../Template/xlf/Program.fs.pl.xlf | 22 - .../Template/xlf/Program.fs.pt-BR.xlf | 22 - .../Template/xlf/Program.fs.ru.xlf | 22 - .../Template/xlf/Program.fs.tr.xlf | 22 - .../Template/xlf/Program.fs.zh-Hans.xlf | 22 - .../Template/xlf/Program.fs.zh-Hant.xlf | 22 - .../source.extension.vsixmanifest | 24 - .../ProjectTemplates/Directory.Build.props | 10 - .../ProjectTemplates/Directory.Build.targets | 3 - .../LibraryProject/LibraryProject.csproj | 18 - .../LibraryProject/Template/AssemblyInfo.fs | 41 - .../LibraryProject/Template/Library.fsproj | 61 - .../Template/Library.vstemplate | 33 - .../LibraryProject/Template/Library1.fs | 4 - .../LibraryProject/Template/Script.fsx | 8 - .../Template/xlf/AssemblyInfo.fs.cs.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.de.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.es.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.fr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.it.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ja.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ko.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pl.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.ru.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.tr.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 77 - .../Template/xlf/AssemblyInfo.fs.zh-Hant.xlf | 77 - .../Template/xlf/Script.fsx.cs.xlf | 22 - .../Template/xlf/Script.fsx.de.xlf | 22 - .../Template/xlf/Script.fsx.es.xlf | 22 - .../Template/xlf/Script.fsx.fr.xlf | 22 - .../Template/xlf/Script.fsx.it.xlf | 22 - .../Template/xlf/Script.fsx.ja.xlf | 22 - .../Template/xlf/Script.fsx.ko.xlf | 22 - .../Template/xlf/Script.fsx.pl.xlf | 22 - .../Template/xlf/Script.fsx.pt-BR.xlf | 22 - .../Template/xlf/Script.fsx.ru.xlf | 22 - .../Template/xlf/Script.fsx.tr.xlf | 22 - .../Template/xlf/Script.fsx.zh-Hans.xlf | 22 - .../Template/xlf/Script.fsx.zh-Hant.xlf | 22 - .../source.extension.vsixmanifest | 25 - .../TutorialProject/Template/Tutorial.fsproj | 66 - .../TutorialProject/Template/Tutorial.fsx | 997 ---------- .../Template/Tutorial.vstemplate | 31 - .../Template/xlf/Tutorial.fsx.cs.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.de.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.es.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.fr.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.it.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.ja.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.ko.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.pl.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.pt-BR.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.ru.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.tr.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.zh-Hans.xlf | 1637 ----------------- .../Template/xlf/Tutorial.fsx.zh-Hant.xlf | 1637 ----------------- .../TutorialProject/TutorialProject.csproj | 17 - .../source.extension.vsixmanifest | 25 - .../Source.extension.vsixmanifest | 28 - .../VisualFSharpTemplates.csproj | 60 - 103 files changed, 252 insertions(+), 25655 deletions(-) delete mode 100644 vsintegration/ProjectTemplates/.gitignore delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/App.config delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest delete mode 100644 vsintegration/ProjectTemplates/Directory.Build.props delete mode 100644 vsintegration/ProjectTemplates/Directory.Build.targets delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj delete mode 100644 vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest delete mode 100644 vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest delete mode 100644 vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj diff --git a/src/fsharp/ConstraintSolver.fsi b/src/fsharp/ConstraintSolver.fsi index 1fce009f61..6aa40c6ea9 100755 --- a/src/fsharp/ConstraintSolver.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -47,34 +47,48 @@ val FreshenMethInfo : range -> MethInfo -> TType list [] /// Information about the context of a type equation. type ContextInfo = -/// No context was given. -| NoContext -/// The type equation comes from an IF expression. -| IfExpression of range -/// The type equation comes from an omitted else branch. -| OmittedElseBranch of range -/// The type equation comes from a type check of the result of an else branch. -| ElseBranchResult of range -/// The type equation comes from the verification of record fields. -| RecordFields -/// The type equation comes from the verification of a tuple in record fields. -| TupleInRecordFields -/// The type equation comes from a list or array constructor -| CollectionElement of bool * range -/// The type equation comes from a return in a computation expression. -| ReturnInComputationExpression -/// The type equation comes from a yield in a computation expression. -| YieldInComputationExpression -/// The type equation comes from a runtime type test. -| RuntimeTypeTest of bool -/// The type equation comes from an downcast where a upcast could be used. -| DowncastUsedInsteadOfUpcast of bool -/// The type equation comes from a return type of a pattern match clause (not the first clause). -| FollowingPatternMatchClause of range -/// The type equation comes from a pattern match guard. -| PatternMatchGuard of range -/// The type equation comes from a sequence expression. -| SequenceExpression of TType + + /// No context was given. + | NoContext + + /// The type equation comes from an IF expression. + | IfExpression of range + + /// The type equation comes from an omitted else branch. + | OmittedElseBranch of range + + /// The type equation comes from a type check of the result of an else branch. + | ElseBranchResult of range + + /// The type equation comes from the verification of record fields. + | RecordFields + + /// The type equation comes from the verification of a tuple in record fields. + | TupleInRecordFields + + /// The type equation comes from a list or array constructor + | CollectionElement of bool * range + + /// The type equation comes from a return in a computation expression. + | ReturnInComputationExpression + + /// The type equation comes from a yield in a computation expression. + | YieldInComputationExpression + + /// The type equation comes from a runtime type test. + | RuntimeTypeTest of bool + + /// The type equation comes from an downcast where a upcast could be used. + | DowncastUsedInsteadOfUpcast of bool + + /// The type equation comes from a return type of a pattern match clause (not the first clause). + | FollowingPatternMatchClause of range + + /// The type equation comes from a pattern match guard. + | PatternMatchGuard of range + + /// The type equation comes from a sequence expression. + | SequenceExpression of TType exception ConstraintSolverTupleDiffLengths of displayEnv: DisplayEnv * TType list * TType list * range * range exception ConstraintSolverInfiniteTypes of displayEnv: DisplayEnv * contextInfo: ContextInfo * TType * TType * range * range @@ -116,7 +130,10 @@ type OptionalTrace = val SimplifyMeasuresInTypeScheme : TcGlobals -> bool -> Typars -> TType -> TyparConstraint list -> Typars val SolveTyparEqualsType : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult val SolveTypeEqualsTypeKeepAbbrevs : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult + +/// Canonicalize constraints prior to generalization val CanonicalizeRelevantMemberConstraints : ConstraintSolverEnv -> int -> OptionalTrace -> Typars -> OperationResult + val ResolveOverloading : ConstraintSolverEnv -> OptionalTrace -> string -> ndeep: int -> TraitConstraintInfo option -> int * int -> AccessorDomain -> CalledMeth list -> bool -> TType option -> CalledMeth option * OperationResult val UnifyUniqueOverloading : ConstraintSolverEnv -> int * int -> string -> AccessorDomain -> CalledMeth list -> TType -> OperationResult val EliminateConstraintsForGeneralizedTypars : ConstraintSolverEnv -> OptionalTrace -> Typars -> unit diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 9534358624..c39fad857f 100755 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -5273,7 +5273,7 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) s // Workaround for .NET and Visual Studio restriction w.r.t debugger type proxys // Mark internal constructors in internal classes as public. let access = - if access = ILMemberAccess.Assembly && vspec.IsConstructor && IsHiddenTycon g eenv.sigToImplRemapInfo vspec.MemberApparentEntity.Deref then + if access = ILMemberAccess.Assembly && vspec.IsConstructor && IsHiddenTycon eenv.sigToImplRemapInfo vspec.MemberApparentEntity.Deref then ILMemberAccess.Public else access @@ -6488,7 +6488,7 @@ and GenModuleBinding cenv (cgbuf: CodeGenBuffer) (qname: QualifiedNameOfFile) la GenLetRecBindings cenv cgbuf eenv ([bind], m) | ModuleOrNamespaceBinding.Module (mspec, mdef) -> - let hidden = IsHiddenTycon cenv.g eenv.sigToImplRemapInfo mspec + let hidden = IsHiddenTycon eenv.sigToImplRemapInfo mspec let eenvinner = if mspec.IsNamespace then eenv else @@ -6827,8 +6827,8 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = let ilIntfTys = tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv.amap m eenvinner.tyenv) let ilTypeName = tref.Name - let hidden = IsHiddenTycon g eenv.sigToImplRemapInfo tycon - let hiddenRepr = hidden || IsHiddenTyconRepr g eenv.sigToImplRemapInfo tycon + let hidden = IsHiddenTycon eenv.sigToImplRemapInfo tycon + let hiddenRepr = hidden || IsHiddenTyconRepr eenv.sigToImplRemapInfo tycon let access = ComputeTypeAccess tref hidden // The implicit augmentation doesn't actually create CompareTo(object) or Object.Equals @@ -7411,7 +7411,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = | TExnFresh _ -> let ilThisTy = GenExnType cenv.amap m eenv.tyenv exncref let tref = ilThisTy.TypeRef - let isHidden = IsHiddenTycon g eenv.sigToImplRemapInfo exnc + let isHidden = IsHiddenTycon eenv.sigToImplRemapInfo exnc let access = ComputeTypeAccess tref isHidden let reprAccess = ComputeMemberAccess isHidden let fspecs = exnc.TrueInstanceFieldsAsList diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index 5e655ed0e7..1fac7a0f6e 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -19,7 +19,7 @@ open FSharp.Compiler.Tastops open FSharp.Compiler.TcGlobals /// Use the given function to select some of the member values from the members of an F# type -let private SelectImmediateMemberVals g optFilter f (tcref: TyconRef) = +let SelectImmediateMemberVals g optFilter f (tcref: TyconRef) = let chooser (vref: ValRef) = match vref.MemberInfo with // The 'when' condition is a workaround for the fact that values providing diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index 37f031e782..9b657f6f8b 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -498,6 +498,8 @@ type CalledMeth<'T> member x.TotalNumAssignedNamedArgs = x.ArgSets |> List.sumBy (fun x -> x.NumAssignedNamedArgs) + override x.ToString() = "call to " + minfo.ToString() + let NamesOfCalledArgs (calledArgs: CalledArg list) = calledArgs |> List.choose (fun x -> x.NameOpt) @@ -1050,15 +1052,20 @@ let BuildFSharpMethodCall g m (ty, vref: ValRef) valUseFlags minst args = /// calls to the type-directed solutions to member constraints. let MakeMethInfoCall amap m minfo minst args = let valUseFlags = NormalValUse // correct unless if we allow wild trait constraints like "T has a ctor and can be used as a parent class" + match minfo with + | ILMeth(g, ilminfo, _) -> let direct = not minfo.IsVirtual let isProp = false // not necessarily correct, but this is only used post-creflect where this flag is irrelevant BuildILMethInfoCall g amap m isProp ilminfo valUseFlags minst direct args |> fst + | FSMeth(g, ty, vref, _) -> BuildFSharpMethodCall g m (ty, vref) valUseFlags minst args |> fst + | DefaultStructCtor(_, ty) -> mkDefault (m, ty) + #if !NO_EXTENSIONTYPING | ProvidedMeth(amap, mi, _, m) -> let isProp = false // not necessarily correct, but this is only used post-creflect where this flag is irrelevant diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 30f456fd86..acf1a318df 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -550,15 +550,30 @@ let AllPropInfosOfTypeInScope collectionSettings infoReader nenv optFilter ad fi @ ExtensionPropInfosOfTypeInScope collectionSettings infoReader nenv optFilter ad m ty /// Get the available methods of a type (both declared and inherited) -let IntrinsicMethInfosOfType (infoReader:InfoReader) optFilter ad allowMultiIntfInst findFlag m ty = +let IntrinsicMethInfosOfType (infoReader: InfoReader) optFilter ad allowMultiIntfInst findFlag m ty = let g = infoReader.g let amap = infoReader.amap let minfos = GetIntrinsicMethInfoSetsOfType infoReader optFilter ad allowMultiIntfInst findFlag m ty let minfos = minfos |> ExcludeHiddenOfMethInfos g amap m minfos +let TrySelectExtensionMethInfoOfILExtMem m amap apparentTy (actualParent, minfo, pri) = + match minfo with + | ILMeth(_,ilminfo,_) -> + MethInfo.CreateILExtensionMeth (amap, m, apparentTy, actualParent, Some pri, ilminfo.RawMetadata) |> Some + // F#-defined IL-style extension methods are not seen as extension methods in F# code + | FSMeth(g,_,vref,_) -> + FSMeth(g, apparentTy, vref, Some pri) |> Some +#if !NO_EXTENSIONTYPING + // // Provided extension methods are not yet supported + | ProvidedMeth(amap,providedMeth,_,m) -> + ProvidedMeth(amap, providedMeth, Some pri,m) |> Some +#endif + | DefaultStructCtor _ -> + None + /// Select from a list of extension methods -let SelectMethInfosFromExtMembers (infoReader:InfoReader) optFilter apparentTy m extMemInfos = +let SelectMethInfosFromExtMembers (infoReader: InfoReader) optFilter apparentTy m extMemInfos = let g = infoReader.g // NOTE: multiple "open"'s push multiple duplicate values into eIndexedExtensionMembers let seen = HashSet(ExtensionMember.Comparer g) @@ -575,24 +590,14 @@ let SelectMethInfosFromExtMembers (infoReader:InfoReader) optFilter apparentTy m | _ -> () | ILExtMem (actualParent, minfo, pri) when (match optFilter with None -> true | Some nm -> nm = minfo.LogicalName) -> // Make a reference to the type containing the extension members - match minfo with - | ILMeth(_, ilminfo, _) -> - yield (MethInfo.CreateILExtensionMeth (infoReader.amap, m, apparentTy, actualParent, Some pri, ilminfo.RawMetadata)) - // F#-defined IL-style extension methods are not seen as extension methods in F# code - | FSMeth(g, _, vref, _) -> - yield (FSMeth(g, apparentTy, vref, Some pri)) -#if !NO_EXTENSIONTYPING - // // Provided extension methods are not yet supported - | ProvidedMeth(amap, providedMeth, _, m) -> - yield (ProvidedMeth(amap, providedMeth, Some pri, m)) -#endif - | DefaultStructCtor _ -> - () + match TrySelectExtensionMethInfoOfILExtMem m infoReader.amap apparentTy (actualParent, minfo, pri) with + | Some minfo -> yield minfo + | None -> () | _ -> () ] /// Query the available extension properties of a methods (including extension methods for inherited types) -let ExtensionMethInfosOfTypeInScope (collectionSettings:ResultCollectionSettings) (infoReader:InfoReader) (nenv: NameResolutionEnv) optFilter m ty = +let ExtensionMethInfosOfTypeInScope (collectionSettings: ResultCollectionSettings) (infoReader: InfoReader) (nenv: NameResolutionEnv) optFilter m ty = let extMemsDangling = SelectMethInfosFromExtMembers infoReader optFilter ty m nenv.eUnindexedExtensionMembers if collectionSettings = ResultCollectionSettings.AtMostOneResult && not (isNil extMemsDangling) then extMemsDangling diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index ea3bbd8aea..e5d8ca00ae 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -141,25 +141,68 @@ val ItemWithNoInst : Item -> ItemWithInst type FieldResolution = FieldResolution of RecdFieldRef * bool /// Information about an extension member held in the name resolution environment -[] -type ExtensionMember +type ExtensionMember = + /// F#-style Extrinsic extension member, defined in F# code + | FSExtMem of ValRef * ExtensionMethodPriority + + /// ILExtMem(declaringTyconRef, ilMetadata, pri) + /// + /// IL-style extension member, backed by some kind of method with an [] attribute + | ILExtMem of TyconRef * MethInfo * ExtensionMethodPriority + + /// Describes the sequence order of the introduction of an extension method. Extension methods that are introduced + /// later through 'open' get priority in overload resolution. + member Priority : ExtensionMethodPriority /// The environment of information used to resolve names [] type NameResolutionEnv = - {eDisplayEnv: DisplayEnv - eUnqualifiedItems: LayeredMap - ePatItems: NameMap - eModulesAndNamespaces: NameMultiMap - eFullyQualifiedModulesAndNamespaces: NameMultiMap - eFieldLabels: NameMultiMap - eTyconsByAccessNames: LayeredMultiMap - eFullyQualifiedTyconsByAccessNames: LayeredMultiMap - eTyconsByDemangledNameAndArity: LayeredMap - eFullyQualifiedTyconsByDemangledNameAndArity: LayeredMap - eIndexedExtensionMembers: TyconRefMultiMap - eUnindexedExtensionMembers: ExtensionMember list - eTypars: NameMap } + { /// Display environment information for output + eDisplayEnv: DisplayEnv + + /// Values and Data Tags available by unqualified name + eUnqualifiedItems: LayeredMap + + /// Data Tags and Active Pattern Tags available by unqualified name + ePatItems: NameMap + + /// Modules accessible via "." notation. Note this is a multi-map. + /// Adding a module abbreviation adds it a local entry to this List.map. + /// Likewise adding a ccu or opening a path adds entries to this List.map. + eModulesAndNamespaces: NameMultiMap + + /// Fully qualified modules and namespaces. 'open' does not change this. + eFullyQualifiedModulesAndNamespaces: NameMultiMap + + /// RecdField labels in scope. RecdField labels are those where type are inferred + /// by label rather than by known type annotation. + /// Bools indicate if from a record, where no warning is given on indeterminate lookup + eFieldLabels: NameMultiMap + + /// Tycons indexed by the various names that may be used to access them, e.g. + /// "List" --> multiple TyconRef's for the various tycons accessible by this name. + /// "List`1" --> TyconRef + eTyconsByAccessNames: LayeredMultiMap + + eFullyQualifiedTyconsByAccessNames: LayeredMultiMap + + /// Tycons available by unqualified, demangled names (i.e. (List,1) --> TyconRef) + eTyconsByDemangledNameAndArity: LayeredMap + + /// Tycons available by unqualified, demangled names (i.e. (List,1) --> TyconRef) + eFullyQualifiedTyconsByDemangledNameAndArity: LayeredMap + + /// Extension members by type and name + eIndexedExtensionMembers: TyconRefMultiMap + + /// Other extension members unindexed by type + eUnindexedExtensionMembers: ExtensionMember list + + /// Typars (always available by unqualified names). Further typars can be + /// in the tpenv, a structure folded through each top-level definition. + eTypars: NameMap + + } static member Empty : g:TcGlobals -> NameResolutionEnv member DisplayEnv : DisplayEnv member FindUnqualifiedItem : string -> Item @@ -542,3 +585,6 @@ val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> Resolv val GetVisibleNamespacesAndModulesAtPoint : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> ModuleOrNamespaceRef list val IsItemResolvable : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> Item -> bool + +val TrySelectExtensionMethInfoOfILExtMem : range -> ImportMap -> TType -> TyconRef * MethInfo * ExtensionMethodPriority -> MethInfo option + \ No newline at end of file diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 2420e636d2..aedf7252d9 100755 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -1926,8 +1926,8 @@ let CheckRecdField isUnion cenv env (tycon: Tycon) (rfield: RecdField) = let m = rfield.Range let fieldTy = stripTyEqns cenv.g rfield.FormalType let isHidden = - IsHiddenTycon cenv.g env.sigToImplRemapInfo tycon || - IsHiddenTyconRepr cenv.g env.sigToImplRemapInfo tycon || + IsHiddenTycon env.sigToImplRemapInfo tycon || + IsHiddenTyconRepr env.sigToImplRemapInfo tycon || (not isUnion && IsHiddenRecdField env.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef rfield)) let access = AdjustAccess isHidden (fun () -> tycon.CompilationPath) rfield.Accessibility CheckTypeForAccess cenv env (fun () -> rfield.Name) access m fieldTy @@ -2189,7 +2189,7 @@ let CheckEntityDefn cenv env (tycon: Entity) = uc.RecdFieldsArray |> Array.iter (CheckRecdField true cenv env tycon)) // Access checks - let access = AdjustAccess (IsHiddenTycon g env.sigToImplRemapInfo tycon) (fun () -> tycon.CompilationPath) tycon.Accessibility + let access = AdjustAccess (IsHiddenTycon env.sigToImplRemapInfo tycon) (fun () -> tycon.CompilationPath) tycon.Accessibility let visitType ty = CheckTypeForAccess cenv env (fun () -> tycon.DisplayNameWithStaticParametersAndUnderscoreTypars) access tycon.Range ty abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> visitType) diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index fe30b314d1..3d474dadbc 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -95,8 +95,14 @@ let emptyTyparInst = ([]: TyparInst) [] type Remap = { tpinst: TyparInst + + /// Values to remap valRemap: ValRemap + + /// TyconRefs to remap tyconRefRemap: TyconRefRemap + + /// Remove existing trait solutions? removeTraitSolutions: bool } let emptyRemap = @@ -889,7 +895,9 @@ type TypeEquivEnv with static member FromEquivTypars tps1 tps2 = TypeEquivEnv.Empty.BindEquivTypars tps1 tps2 -let rec traitsAEquivAux erasureFlag g aenv (TTrait(tys1, nm, mf1, argtys, rty, _)) (TTrait(tys2, nm2, mf2, argtys2, rty2, _)) = +let rec traitsAEquivAux erasureFlag g aenv traitInfo1 traitInfo2 = + let (TTrait(tys1, nm, mf1, argtys, rty, _)) = traitInfo1 + let (TTrait(tys2, nm2, mf2, argtys2, rty2, _)) = traitInfo2 mf1 = mf2 && nm = nm2 && ListSet.equals (typeAEquivAux erasureFlag g aenv) tys1 tys2 && @@ -909,7 +917,7 @@ and typarConstraintsAEquivAux erasureFlag g aenv tpc1 tpc2 = TyparConstraint.CoercesTo(fcty, _) -> typeAEquivAux erasureFlag g aenv acty fcty - | TyparConstraint.MayResolveMember(trait1, _), + | TyparConstraint.MayResolveMember(trait1, _), TyparConstraint.MayResolveMember(trait2, _) -> traitsAEquivAux erasureFlag g aenv trait1 trait2 @@ -2479,8 +2487,6 @@ module PrettyTypes = computeKeep keep (tp :: change) rest let keep, change = computeKeep [] [] ftps - // change |> List.iter (fun tp -> dprintf "change typar: %s %s %d\n" tp.Name (tp.DisplayName) (stamp_of_typar tp)) - // keep |> List.iter (fun tp -> dprintf "keep typar: %s %s %d\n" tp.Name (tp.DisplayName) (stamp_of_typar tp)) let alreadyInUse = keep |> List.map (fun x -> x.Name) let names = PrettyTyparNames (fun x -> List.memq x change) alreadyInUse ftps @@ -2494,7 +2500,6 @@ module PrettyTypes = let tauThings = mapTys getTauStayTau things let prettyThings = mapTys (instType renaming) tauThings - // niceTypars |> List.iter (fun tp -> dprintf "nice typar: %d\n" (stamp_of_typar tp)); * let tpconstraints = niceTypars |> List.collect (fun tpnice -> List.map (fun tpc -> tpnice, tpc) tpnice.Constraints) prettyThings, tpconstraints @@ -4081,7 +4086,6 @@ let accValRemap g aenv (msigty: ModuleOrNamespaceType) (implVal: Val) (mrpi, mhi let vref = mkLocalValRef implVal match sigValOpt with | None -> - if verbose then dprintf "accValRemap, hide = %s#%d\n" implVal.LogicalName implVal.Stamp let mhi = { mhi with HiddenVals = Zset.add implVal mhi.HiddenVals } (mrpi, mhi) | Some (sigVal: Val) -> @@ -4105,7 +4109,6 @@ let rec accValRemapFromModuleOrNamespaceType g aenv (mty: ModuleOrNamespaceType) acc let ComputeRemappingFromInferredSignatureToExplicitSignature g mty msigty = - // dprintf "ComputeRemappingFromInferredSignatureToExplicitSignature, \nmty = %s\nmmsigty=%s\n" (showL(entityTypeL mty)) (showL(entityTypeL msigty)) let ((mrpi, _) as entityRemap) = accEntityRemapFromModuleOrNamespaceType mty msigty (SignatureRepackageInfo.Empty, SignatureHidingInfo.Empty) let aenv = mrpi.ImplToSigMapping let valAndEntityRemap = accValRemapFromModuleOrNamespaceType g aenv mty msigty entityRemap @@ -4166,7 +4169,6 @@ and accValRemapFromModuleOrNamespaceBind g aenv msigty x acc = and accValRemapFromModuleOrNamespaceDefs g aenv msigty mdefs acc = List.foldBack (accValRemapFromModuleOrNamespace g aenv msigty) mdefs acc let ComputeRemappingFromImplementationToSignature g mdef msigty = - //if verbose then dprintf "ComputeRemappingFromImplementationToSignature, \nmdefs = %s\nmsigty=%s\n" (showL(DebugPrint.mdefL mdef)) (showL(DebugPrint.entityTypeL msigty)) let ((mrpi, _) as entityRemap) = accEntityRemapFromModuleOrNamespace msigty mdef (SignatureRepackageInfo.Empty, SignatureHidingInfo.Empty) let aenv = mrpi.ImplToSigMapping @@ -4222,16 +4224,14 @@ let rec accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty acc = acc let ComputeHidingInfoAtAssemblyBoundary mty acc = -// dprintf "ComputeRemappingFromInferredSignatureToExplicitSignature, \nmty = %s\nmmsigty=%s\n" (showL(entityTypeL mty)) (showL(entityTypeL msigty)) accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty acc //-------------------------------------------------------------------------- // Compute instances of the above for mexpr -> mty //-------------------------------------------------------------------------- -let IsHidden setF accessF remapF debugF = +let IsHidden setF accessF remapF = let rec check mrmi x = - if verbose then dprintf "IsHidden %s ??\n" (showL (debugF x)) // Internal/private? not (canAccessFromEverywhere (accessF x)) || (match mrmi with @@ -4242,18 +4242,15 @@ let IsHidden setF accessF remapF debugF = // Recurse... check rest (remapF rpi x)) fun mrmi x -> - let res = check mrmi x - if verbose then dprintf "IsHidden, #mrmi = %d, %s = %b\n" mrmi.Length (showL (debugF x)) res - res + check mrmi x + +let IsHiddenTycon mrmi x = IsHidden (fun mhi -> mhi.HiddenTycons) (fun tc -> tc.Accessibility) (fun rpi x -> (remapTyconRef rpi.tyconRefRemap (mkLocalTyconRef x)).Deref) mrmi x + +let IsHiddenTyconRepr mrmi x = IsHidden (fun mhi -> mhi.HiddenTyconReprs) (fun v -> v.TypeReprAccessibility) (fun rpi x -> (remapTyconRef rpi.tyconRefRemap (mkLocalTyconRef x)).Deref) mrmi x + +let IsHiddenVal mrmi x = IsHidden (fun mhi -> mhi.HiddenVals) (fun v -> v.Accessibility) (fun rpi x -> (remapValRef rpi (mkLocalValRef x)).Deref) mrmi x -let IsHiddenTycon g mrmi x = - let debugPrint x = DebugPrint.tyconL g x - IsHidden (fun mhi -> mhi.HiddenTycons) (fun tc -> tc.Accessibility) (fun rpi x -> (remapTyconRef rpi.tyconRefRemap (mkLocalTyconRef x)).Deref) debugPrint mrmi x -let IsHiddenTyconRepr g mrmi x = - let debugPrint x = DebugPrint.tyconL g x - IsHidden (fun mhi -> mhi.HiddenTyconReprs) (fun v -> v.TypeReprAccessibility) (fun rpi x -> (remapTyconRef rpi.tyconRefRemap (mkLocalTyconRef x)).Deref) debugPrint mrmi x -let IsHiddenVal mrmi x = IsHidden (fun mhi -> mhi.HiddenVals) (fun v -> v.Accessibility) (fun rpi x -> (remapValRef rpi (mkLocalValRef x)).Deref) DebugPrint.valL mrmi x -let IsHiddenRecdField mrmi x = IsHidden (fun mhi -> mhi.HiddenRecdFields) (fun rfref -> rfref.RecdField.Accessibility) (fun rpi x -> remapRecdFieldRef rpi.tyconRefRemap x) DebugPrint.recdFieldRefL mrmi x +let IsHiddenRecdField mrmi x = IsHidden (fun mhi -> mhi.HiddenRecdFields) (fun rfref -> rfref.RecdField.Accessibility) (fun rpi x -> remapRecdFieldRef rpi.tyconRefRemap x) mrmi x //-------------------------------------------------------------------------- // Generic operations on module types @@ -5725,7 +5722,7 @@ let rec tyOfExpr g e = | TOp.LValueOp (LByrefGet, v) -> destByrefTy g v.Type | TOp.LValueOp (LAddrOf readonly, v) -> mkByrefTyWithFlag g readonly v.Type | TOp.RefAddrGet readonly -> (match tinst with [ty] -> mkByrefTyWithFlag g readonly ty | _ -> failwith "bad TOp.RefAddrGet node") - | TOp.TraitCall (TTrait(_, _, _, _, ty, _)) -> GetFSharpViewOfReturnType g ty + | TOp.TraitCall traitInfo -> GetFSharpViewOfReturnType g traitInfo.ReturnType | TOp.Reraise -> (match tinst with [rtn_ty] -> rtn_ty | _ -> failwith "bad TOp.Reraise node") | TOp.Goto _ | TOp.Label _ | TOp.Return -> //assert false @@ -7782,7 +7779,6 @@ let typarEnc _g (gtpsType, gtpsMethod) typar = "``0" let rec typeEnc g (gtpsType, gtpsMethod) ty = - if verbose then dprintf "--> typeEnc" let stripped = stripTyEqnsAndMeasureEqns g ty match stripped with | TType_forall _ -> diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index 5179b85239..176f64df72 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -1208,16 +1208,16 @@ val MakeExportRemapping : CcuThunk -> ModuleOrNamespace -> Remap val ApplyExportRemappingToEntity : TcGlobals -> Remap -> ModuleOrNamespace -> ModuleOrNamespace /// Determine if a type definition is hidden by a signature -val IsHiddenTycon : TcGlobals -> (Remap * SignatureHidingInfo) list -> Tycon -> bool +val IsHiddenTycon: (Remap * SignatureHidingInfo) list -> Tycon -> bool /// Determine if the representation of a type definition is hidden by a signature -val IsHiddenTyconRepr : TcGlobals -> (Remap * SignatureHidingInfo) list -> Tycon -> bool +val IsHiddenTyconRepr: (Remap * SignatureHidingInfo) list -> Tycon -> bool /// Determine if a member, function or value is hidden by a signature -val IsHiddenVal : (Remap * SignatureHidingInfo) list -> Val -> bool +val IsHiddenVal: (Remap * SignatureHidingInfo) list -> Val -> bool /// Determine if a record field is hidden by a signature -val IsHiddenRecdField : (Remap * SignatureHidingInfo) list -> RecdFieldRef -> bool +val IsHiddenRecdField: (Remap * SignatureHidingInfo) list -> RecdFieldRef -> bool /// Adjust marks in expressions, replacing all marks by the given mark. /// Used when inlining. diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 5d7a170c2c..539f67d844 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -223,7 +223,7 @@ type TcEnv = /// Compute the value of this computed, cached field let computeAccessRights eAccessPath eInternalsVisibleCompPaths eFamilyType = - AccessibleFrom (eAccessPath :: eInternalsVisibleCompPaths, eFamilyType) // env.eAccessRights + AccessibleFrom (eAccessPath :: eInternalsVisibleCompPaths, eFamilyType) // env.AccessRights let emptyTcEnv g = let cpath = compPathInternal // allow internal access initially @@ -324,7 +324,7 @@ let AddLocalValMap tcSink scopem (vals: Val NameMap) env = { env with eNameResEnv = AddValMapToNameEnv vals env.eNameResEnv eUngeneralizableItems = NameMap.foldBackRange (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems } - CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights) + CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a list of local values to TcEnv and report them to the sink @@ -336,7 +336,7 @@ let AddLocalVals tcSink scopem (vals: Val list) env = { env with eNameResEnv = AddValListToNameEnv vals env.eNameResEnv eUngeneralizableItems = List.foldBack (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems } - CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights) + CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a local value to TcEnv and report it to the sink @@ -351,8 +351,8 @@ let AddLocalVal tcSink scopem v env = let AddLocalExnDefnAndReport tcSink scopem env (exnc: Tycon) = let env = { env with eNameResEnv = AddExceptionDeclsToNameEnv BulkAdd.No env.eNameResEnv (mkLocalEntityRef exnc) } // Also make VisualStudio think there is an identifier in scope at the range of the identifier text of its binding location - CallEnvSink tcSink (exnc.Range, env.NameEnv, env.eAccessRights) - CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights) + CallEnvSink tcSink (exnc.Range, env.NameEnv, env.AccessRights) + CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a list of type definitions to TcEnv @@ -431,7 +431,7 @@ let AddModuleAbbreviationAndReport tcSink scopem id modrefs env = CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights) let item = Item.ModuleOrNamespaces modrefs - CallNameResolutionSink tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.AccessRights) env /// Add a "module X = ..." definition to the TcEnv @@ -558,7 +558,7 @@ let MakeInnerEnvWithAcc env nm mtypeAcc modKind = eCompPath = cpath eAccessPath = cpath eAccessRights = computeAccessRights cpath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field - eNameResEnv = { env.eNameResEnv with eDisplayEnv = env.DisplayEnv.AddOpenPath (pathOfLid path) } + eNameResEnv = { env.NameEnv with eDisplayEnv = env.DisplayEnv.AddOpenPath (pathOfLid path) } eModuleOrNamespaceTypeAccumulator = mtypeAcc } /// Make an environment suitable for a module or namespace, creating a new accumulator. @@ -863,7 +863,7 @@ module AttributeTargets = let ForNewConstructors tcSink (env: TcEnv) mObjTy methodName meths = let origItem = Item.CtorGroup(methodName, meths) - let callSink (item, minst) = CallNameResolutionSink tcSink (mObjTy, env.NameEnv, item, origItem, minst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + let callSink (item, minst) = CallNameResolutionSink tcSink (mObjTy, env.NameEnv, item, origItem, minst, ItemOccurence.Use, env.DisplayEnv, env.AccessRights) let sendToSink minst refinedMeths = callSink (Item.CtorGroup(methodName, refinedMeths), minst) match meths with | [] -> @@ -1301,7 +1301,7 @@ let PublishModuleDefn cenv env mspec = if intoFslibCcu then mty else mty.AddEntity mspec) let item = Item.ModuleOrNamespaces([mkLocalModRef mspec]) - CallNameResolutionSink cenv.tcSink (mspec.Range, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (mspec.Range, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.AccessRights) let PublishTypeDefn cenv env tycon = UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> @@ -1531,7 +1531,7 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, baseOrThisInfo = ValBaseOrThisInfo.MemberThisVal && vspec.LogicalName = "__" -> false | _ -> true - match cenv.tcSink.CurrentSink with + match cenv.tcSink.CurrentSink with | Some _ when not vspec.IsCompilerGenerated && shouldNotifySink vspec -> let nenv = AddFakeNamedValRefToNameEnv vspec.DisplayName env.NameEnv (mkLocalValRef vspec) CallEnvSink cenv.tcSink (vspec.Range, nenv, env.eAccessRights) @@ -1931,7 +1931,7 @@ let FreshenPossibleForallTy g m rigid ty = let tps, renaming, tinst = CopyAndFixupTypars m rigid tpsorig tpsorig, tps, tinst, instType renaming tau -let infoOfTyconRef m (tcref: TyconRef) = +let FreshenTyconRef2 m (tcref: TyconRef) = let tps, renaming, tinst = FreshenTypeInst m (tcref.Typars m) tps, renaming, tinst, TType_app (tcref, tinst) @@ -2119,24 +2119,24 @@ module GeneralizationHelpers = let ComputeUnabstractableTycons env = - let acc_in_free_item acc (item: UngeneralizableItem) = + let accInFreeItem acc (item: UngeneralizableItem) = let ftycs = if item.WillNeverHaveFreeTypars then item.CachedFreeLocalTycons else let ftyvs = item.GetFreeTyvars() ftyvs.FreeTycons if ftycs.IsEmpty then acc else unionFreeTycons ftycs acc - List.fold acc_in_free_item emptyFreeTycons env.eUngeneralizableItems + List.fold accInFreeItem emptyFreeTycons env.eUngeneralizableItems let ComputeUnabstractableTraitSolutions env = - let acc_in_free_item acc (item: UngeneralizableItem) = + let accInFreeItem acc (item: UngeneralizableItem) = let ftycs = if item.WillNeverHaveFreeTypars then item.CachedFreeTraitSolutions else let ftyvs = item.GetFreeTyvars() ftyvs.FreeTraitSolutions if ftycs.IsEmpty then acc else unionFreeLocals ftycs acc - List.fold acc_in_free_item emptyFreeLocals env.eUngeneralizableItems + List.fold accInFreeItem emptyFreeLocals env.eUngeneralizableItems let rec IsGeneralizableValue g t = match t with @@ -2291,17 +2291,17 @@ module GeneralizationHelpers = (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult - let ComputeAndGeneralizeGenericTypars (cenv, - denv: DisplayEnv, - m, - freeInEnv: FreeTypars, - canInferTypars, - genConstrainedTyparFlag, - inlineFlag, - exprOpt, - allDeclaredTypars: Typars, - maxInferredTypars: Typars, - tauTy, + let ComputeAndGeneralizeGenericTypars (cenv, + denv: DisplayEnv, + m, + freeInEnv: FreeTypars, + canInferTypars, + genConstrainedTyparFlag, + inlineFlag, + exprOpt, + allDeclaredTypars: Typars, + maxInferredTypars: Typars, + tauTy, resultFirst) = let allDeclaredTypars = NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g allDeclaredTypars @@ -2534,7 +2534,7 @@ module BindingNormalization = | _ -> MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData let private NormalizeBindingPattern cenv nameResolver isObjExprBinding (env: TcEnv) valSynData pat rhsExpr = - let ad = env.eAccessRights + let ad = env.AccessRights let (SynValData(memberFlagsOpt, _, _)) = valSynData let rec normPattern pat = // One major problem with versions of F# prior to 1.9.x was that data constructors easily 'pollute' the namespace @@ -2545,7 +2545,7 @@ module BindingNormalization = let typars = match tyargs with None -> inferredTyparDecls | Some typars -> typars match memberFlagsOpt with | None -> - match ResolvePatternLongIdent cenv.tcSink nameResolver AllIdsOK true m ad env.eNameResEnv TypeNameResolutionInfo.Default longId with + match ResolvePatternLongIdent cenv.tcSink nameResolver AllIdsOK true m ad env.NameEnv TypeNameResolutionInfo.Default longId with | Item.NewDef id -> if id.idText = opNameCons then NormalizedBindingPat(pat, rhsExpr, valSynData, typars) @@ -3278,7 +3278,7 @@ let CompilePatternForMatchClauses cenv env mExpr matchm warnOnUnused actionOnFai // localAlloc is relevant if the enumerator is a mutable struct and indicates // if the enumerator can be allocated as a mutable local variable let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr = - let ad = env.eAccessRights + let ad = env.AccessRights let err k ty = let txt = NicePrint.minimalStringOfType env.DisplayEnv ty @@ -4419,7 +4419,7 @@ and TcPseudoMemberSpec cenv newOk env synTypes tpenv memSpfn m = let logicalCompiledName = ComputeLogicalName id memberFlags let item = Item.ArgName (id, memberConstraintTy, None) - CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.AccessRights) TTrait(tys, logicalCompiledName, memberFlags, argTys, returnTy, ref None), tpenv | _ -> error(Error(FSComp.SR.tcInvalidConstraint(), m)) @@ -4580,7 +4580,7 @@ and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (Typar(id, _, _) a | Some TyparKind.Type, TyparKind.Measure -> error (Error(FSComp.SR.tcExpectedTypeParameter(), id.idRange)); res, tpenv | _, _ -> let item = Item.TypeVar(id.idText, res) - CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.UseInType, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.UseInType, env.DisplayEnv, env.AccessRights) // record the ' as well for tokenization // CallNameResolutionSink cenv.tcSink (tp.Range.StartRange, env.NameEnv, item, item, ItemOccurence.UseInType, env.DisplayEnv, env.eAccessRights) res, tpenv @@ -4608,7 +4608,7 @@ and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (Typar(id, _, _) a // The kind defaults to Type let tp' = NewTypar ((match optKind with None -> TyparKind.Type | Some kind -> kind), TyparRigidity.WarnIfNotRigid, tp, false, TyparDynamicReq.Yes, [], false, false) let item = Item.TypeVar(id.idText, tp') - CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.UseInType, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.UseInType, env.DisplayEnv, env.AccessRights) tp', AddUnscopedTypar key tp' tpenv and TcTypar cenv env newOk tpenv tp = @@ -4648,7 +4648,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: SyntacticUnscope | SynType.LongIdent(LongIdentWithDots(tc, _) as lidwd) -> let m = lidwd.Range let ad = env.eAccessRights - let tcref = ForceRaise(ResolveTypeLongIdent cenv.tcSink cenv.nameResolver occ OpenQualified env.eNameResEnv ad tc TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No) + let tcref = ForceRaise(ResolveTypeLongIdent cenv.tcSink cenv.nameResolver occ OpenQualified env.NameEnv ad tc TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No) match optKind, tcref.TypeOrMeasureKind with | Some TyparKind.Type, TyparKind.Measure -> error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) @@ -4880,7 +4880,7 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (v: SynType) idOpt co match idOpt with | Some id -> let item = Item.ArgName (id, ttype, Some container) - CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.AccessRights) | _ -> () match v with @@ -5060,7 +5060,7 @@ and TcProvidedTypeApp cenv env tpenv tcref args m = /// the prefix of type arguments. and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (synArgTys: SynType list) = let g = cenv.g - CheckTyconAccessible cenv.amap m env.eAccessRights tcref |> ignore + CheckTyconAccessible cenv.amap m env.AccessRights tcref |> ignore CheckEntityAttributes g tcref m |> CommitOperationResult #if !NO_EXTENSIONTYPING @@ -5069,7 +5069,7 @@ and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (synArgTys: if tcref.Deref.IsProvided then TcProvidedTypeApp cenv env tpenv tcref synArgTys m else #endif - let tps, _, tinst, _ = infoOfTyconRef m tcref + let tps, _, tinst, _ = FreshenTyconRef2 m tcref // If we're not checking constraints, i.e. when we first assert the super/interfaces of a type definition, then just // clear the constraint lists of the freshly generated type variables. A little ugly but fairly localized. @@ -5250,7 +5250,7 @@ and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, de // For non-left-most paths, we register the name resolutions here if not isLeftMost && not vspec.IsCompilerGenerated && not (vspec.LogicalName.StartsWithOrdinal("_")) then let item = Item.Value(mkLocalValRef vspec) - CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.AccessRights) PBind(vspec, typeScheme)), names, takenNames @@ -5275,7 +5275,7 @@ and TcPatAndRecover warnOnUpper cenv (env: TcEnv) topValInfo vFlags (tpenv, name /// the second-phase function in terms of a List.map from names to actual /// value specifications. and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat = - let ad = env.eAccessRights + let ad = env.AccessRights match pat with | SynPat.Const (c, m) -> match c with @@ -5354,7 +5354,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynConstructorArgs.NamePatPairs (pairs, _) -> pairs.Length if numArgs <> 0 then error(Error(FSComp.SR.tcLiteralDoesNotTakeArguments(), m)) - match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver warnOnUpperForId false m ad env.eNameResEnv TypeNameResolutionInfo.Default longId with + match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver warnOnUpperForId false m ad env.NameEnv TypeNameResolutionInfo.Default longId with | Item.NewDef id -> match args with | SynConstructorArgs.Pats [] @@ -5425,7 +5425,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let activePatIdentity = if isNil activePatArgsAsSynExprs then Some (vref, tinst) else None (fun values -> // Report information about the 'active recognizer' occurrence to IDE - CallNameResolutionSink cenv.tcSink (rangeOfLid longId, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Pattern, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (rangeOfLid longId, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Pattern, env.DisplayEnv, env.AccessRights) TPat_query((activePatExpr, activePatResTys, activePatIdentity, idx, apinfo), arg' values, m)), (tpenv, names, takenNames) @@ -5492,12 +5492,12 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) argTys args (fun values -> // Report information about the case occurrence to IDE - CallNameResolutionSink cenv.tcSink (rangeOfLid longId, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Pattern, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (rangeOfLid longId, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Pattern, env.DisplayEnv, env.AccessRights) mkf m (List.map (fun f -> f values) args')), acc | Item.ILField finfo -> // LITERAL .NET FIELDS - CheckILFieldInfoAccessible cenv.g cenv.amap m env.eAccessRights finfo + CheckILFieldInfoAccessible cenv.g cenv.amap m env.AccessRights finfo if not finfo.IsStatic then errorR (Error (FSComp.SR.tcFieldIsNotStatic(finfo.FieldName), m)) CheckILFieldAttributes cenv.g finfo m match finfo.LiteralValue with @@ -5512,7 +5512,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | Item.RecdField rfinfo -> // LITERAL F# FIELDS - CheckRecdFieldInfoAccessible cenv.amap m env.eAccessRights rfinfo + CheckRecdFieldInfoAccessible cenv.amap m env.AccessRights rfinfo if not rfinfo.IsStatic then errorR (Error (FSComp.SR.tcFieldIsNotStatic(rfinfo.Name), m)) CheckRecdFieldInfoAttributes cenv.g rfinfo m |> CommitOperationResult match rfinfo.LiteralValue with @@ -5531,7 +5531,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | None -> error (Error(FSComp.SR.tcNonLiteralCannotBeUsedInPattern(), m)) | Some lit -> let _, _, _, vexpty, _, _ = TcVal true cenv env tpenv vref None None m - CheckValAccessible m env.eAccessRights vref + CheckValAccessible m env.AccessRights vref CheckFSharpAttributes cenv.g vref.Attribs m |> CommitOperationResult checkNoArgsForLiteral() UnifyTypes cenv env m ty vexpty @@ -5563,7 +5563,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.Record (flds, m) -> let tcref, fldsmap, _fldsList = BuildFieldMap cenv env true ty flds m // REVIEW: use _fldsList to type check pattern in code order not field defn order - let _, inst, tinst, gtyp = infoOfTyconRef m tcref + let _, inst, tinst, gtyp = FreshenTyconRef2 m tcref UnifyTypes cenv env m ty gtyp let fields = tcref.TrueInstanceFieldsAsList let ftys = fields |> List.map (fun fsp -> actualTyOfRecdField inst fsp, fsp) @@ -5587,6 +5587,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.InstanceMember (_, _, _, _, m) -> errorR(Error(FSComp.SR.tcIllegalPattern(), pat.Range)) (fun _ -> TPat_wild m), (tpenv, names, takenNames) + | SynPat.FromParseError (pat, _) -> suppressErrorReporting (fun () -> TcPatAndRecover warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) (NewErrorType()) pat) @@ -5813,7 +5814,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Paren (expr2, _, _, mWholeExprIncludingParentheses) -> // We invoke CallExprHasTypeSink for every construct which is atomic in the syntax, i.e. where a '.' immediately following the // construct is a dot-lookup for the result of the construct. - CallExprHasTypeSink cenv.tcSink (mWholeExprIncludingParentheses, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) + CallExprHasTypeSink cenv.tcSink (mWholeExprIncludingParentheses, env.NameEnv, overallTy, env.DisplayEnv, env.AccessRights) let env = ShrinkContext env mWholeExprIncludingParentheses expr2.Range TcExpr cenv overallTy env tpenv expr2 @@ -5821,11 +5822,11 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.TypeApp _ | SynExpr.Ident _ | SynExpr.LongIdent _ | SynExpr.App _ | SynExpr.DotGet _ -> error(Error(FSComp.SR.tcExprUndelayed(), synExpr.Range)) | SynExpr.Const (SynConst.String (s, m), _) -> - CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) + CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.AccessRights) TcConstStringExpr cenv overallTy env m tpenv s | SynExpr.Const (synConst, m) -> - CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) + CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.AccessRights) TcConstExpr cenv overallTy env m tpenv synConst | SynExpr.Lambda _ -> @@ -5941,7 +5942,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) | SynExpr.ArrayOrList (isArray, args, m) -> - CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) + CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.AccessRights) let argty = NewInferenceType () UnifyTypes cenv env m overallTy (if isArray then mkArrayType cenv.g argty else Tastops.mkListTy cenv.g argty) @@ -5973,7 +5974,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = TcObjectExpr cenv overallTy env tpenv (objTy, argopt, binds, extraImpls, mNewExpr, m) | SynExpr.Record (inherits, optOrigExpr, flds, mWholeExpr) -> - CallExprHasTypeSink cenv.tcSink (mWholeExpr, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) + CallExprHasTypeSink cenv.tcSink (mWholeExpr, env.NameEnv, overallTy, env.DisplayEnv, env.AccessRights) TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr) | SynExpr.While (spWhile, synGuardExpr, synBodyExpr, m) -> @@ -5991,7 +5992,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // notify name resolution sink about loop variable let item = Item.Value(mkLocalValRef idv) - CallNameResolutionSink cenv.tcSink (idv.Range, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (idv.Range, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.AccessRights) let bodyExpr, tpenv = TcStmt cenv envinner tpenv body mkFastForLoop cenv.g (spBind, m, idv, startExpr, dir, finishExpr, bodyExpr), tpenv @@ -6192,11 +6193,12 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.TraitCall (tps, memSpfn, arg, m) -> let synTypes = tps |> List.map (fun tp -> SynType.Var(tp, m)) - let (TTrait(_, logicalCompiledName, _, argTys, returnTy, _) as traitInfo), tpenv = TcPseudoMemberSpec cenv NewTyparsOK env synTypes tpenv memSpfn m - if BakedInTraitConstraintNames.Contains logicalCompiledName then - warning(BakedInMemberConstraintName(logicalCompiledName, m)) + let traitInfo, tpenv = TcPseudoMemberSpec cenv NewTyparsOK env synTypes tpenv memSpfn m + if BakedInTraitConstraintNames.Contains traitInfo.MemberName then + warning(BakedInMemberConstraintName(traitInfo.MemberName, m)) - let returnTy = GetFSharpViewOfReturnType cenv.g returnTy + let argTys = traitInfo.ArgumentTypes + let returnTy = GetFSharpViewOfReturnType cenv.g traitInfo.ReturnType let args, namedCallerArgs = GetMethodArgs arg if not (isNil namedCallerArgs) then errorR(Error(FSComp.SR.tcNamedArgumentsCannotBeUsedInMemberTraits(), m)) // Subsumption at trait calls if arguments have nominal type prior to unification of any arguments or return type @@ -6243,7 +6245,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = mkAsmExpr (Array.toList s, tyargs', args', rtys', m), tpenv | SynExpr.Quote (oper, raw, ast, isFromQueryExpression, m) -> - CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) + CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.AccessRights) TcQuotationExpr cenv overallTy env tpenv (oper, raw, ast, isFromQueryExpression, m) | SynExpr.YieldOrReturn ((isTrueYield, _), _, m) @@ -6293,7 +6295,7 @@ and TcIteratedLambdas cenv isFirst (env: TcEnv) overallTy takenNames tpenv e = // .NET metadata. This means we manually typecheck 'e1' and look to see if it has a nominal type. We then // do the right thing in each case. and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArgs delayed = - let ad = env.eAccessRights + let ad = env.AccessRights let e1', e1ty, tpenv = TcExprOfUnknownType cenv env tpenv e1 // Find the first type in the effective hierarchy that either has a DefaultMember attribute OR @@ -6495,7 +6497,7 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg /// For 'inherit Type(args)', mWholeExprOrObjTy is the whole expression /// For an implicit inherit from System.Object or a default constructor, mWholeExprOrObjTy is the type name of the type being defined and TcNewExpr cenv env tpenv objTy mObjTyOpt superInit arg mWholeExprOrObjTy = - let ad = env.eAccessRights + let ad = env.AccessRights // Handle the case 'new 'a()' if (isTyparTy cenv.g objTy) then if superInit then error(Error(FSComp.SR.tcCannotInheritFromVariableType(), mWholeExprOrObjTy)) @@ -6514,7 +6516,7 @@ and TcNewExpr cenv env tpenv objTy mObjTyOpt superInit arg mWholeExprOrObjTy = /// Check an 'inheritedTys declaration in an implicit or explicit class and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit args mWholeCall delayed afterTcOverloadResolutionOpt = - let ad = env.eAccessRights + let ad = env.AccessRights let isSuperInit = (if superInit then CtorValUsedAsSuperInit else NormalValUse) let mItem = match mObjTyOpt with Some m -> m | None -> mWholeCall @@ -6543,7 +6545,7 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a | Item.DelegateCtor ty, [arg] -> // Re-record the name resolution since we now know it's a constructor call match mObjTyOpt with - | Some mObjTy -> CallNameResolutionSink cenv.tcSink (mObjTy, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + | Some mObjTy -> CallNameResolutionSink cenv.tcSink (mObjTy, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.AccessRights) | None -> () TcNewDelegateThen cenv objTy env tpenv mItem mWholeCall ty arg ExprAtomicFlag.NonAtomic delayed @@ -6884,7 +6886,7 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, // Object expression members can access protected members of the implemented type let env = EnterFamilyRegion tcref env - let ad = env.eAccessRights + let ad = env.AccessRights if // record construction ? isRecordTy || @@ -6926,7 +6928,7 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, | Item.CtorGroup(methodName, minfos), Some (arg, baseIdOpt) -> let meths = minfos |> List.map (fun minfo -> minfo, None) let afterResolution = ForNewConstructors cenv.tcSink env synObjTy.Range methodName minfos - let ad = env.eAccessRights + let ad = env.AccessRights let expr, tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic [] // The 'base' value is always bound @@ -7132,7 +7134,7 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr | [] -> [] | _ -> let tcref, _, fldsList = BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr - let _, _, _, gtyp = infoOfTyconRef mWholeExpr tcref + let _, _, _, gtyp = FreshenTyconRef2 mWholeExpr tcref UnifyTypes cenv env mWholeExpr overallTy gtyp [ for n, v in fldsList do @@ -7723,7 +7725,7 @@ and TcComputationExpression cenv env overallTy mWhole (interpExpr: Expr) builder match e with | SynExpr.App (_, _, SynExpr.App (_, _, e1, SingleIdent opName, _), e2, _) when opName.idText = customOperationJoinConditionWord nm -> let item = Item.CustomOperation (opName.idText, (fun () -> None), None) - CallNameResolutionSink cenv.tcSink (opName.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (opName.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.AccessRights) Some (e1, e2) | _ -> None @@ -9046,8 +9048,8 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del mkConstrApp, [ucaseAppTy], [ for (s, m) in apinfo.ActiveTagsWithRanges -> mkSynId m s ] | _ -> let ucref = mkChoiceCaseRef g mItem aparity n - let _, _, tinst, _ = infoOfTyconRef mItem ucref.TyconRef - let ucinfo = UnionCaseInfo(tinst, ucref) + let _, _, tinst, _ = FreshenTyconRef2 mItem ucref.TyconRef + let ucinfo = UnionCaseInfo (tinst, ucref) ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy (Item.UnionCase(ucinfo, false)) | _ -> ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy item @@ -9301,6 +9303,7 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del | Item.FakeInterfaceCtor _ -> error(Error(FSComp.SR.tcInvalidUseOfInterfaceType(), mItem)) + | Item.ImplicitOp(id, sln) -> let isPrefix = PrettyNaming.IsPrefixOperator id.idText @@ -9441,8 +9444,8 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) UnifyTypes cenv env mStmt overallTy g.unit_ty - vref.Deref.SetHasBeenReferenced() - CheckValAccessible mItem env.eAccessRights vref + vref.Deref.SetHasBeenReferenced() + CheckValAccessible mItem env.AccessRights vref CheckValAttributes g vref mItem |> CommitOperationResult let vty = vref.Type let vty2 = @@ -9637,7 +9640,7 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela if isTyparTy cenv.g objExprTy then GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, env.DisplayEnv, mExprAndLongId) (freeInTypeLeftToRight cenv.g false objExprTy) - let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver mExprAndLongId ad env.eNameResEnv objExprTy longId findFlag false + let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver mExprAndLongId ad env.NameEnv objExprTy longId findFlag false let mExprAndItem = unionRanges mObjExpr mItem let delayed = delayRest rest mExprAndItem delayed @@ -10085,7 +10088,7 @@ and TcMethodApplication if meth.UsesParamArrayConversion then yield makeOneCalledMeth (minfo, pinfoOpt, false) ] - let uniquelyResolved = + let uniquelyResolved = let csenv = MakeConstraintSolverEnv ContextInfo.NoContext cenv.css mMethExpr denv UnifyUniqueOverloading csenv callerArgCounts methodName ad preArgumentTypeCheckingCalledMethGroup returnTy @@ -10842,7 +10845,7 @@ and TcNormalizedBinding declKind (cenv: cenv) env tpenv overallTy safeThisValOpt apinfo.ActiveTagsWithRanges |> List.iteri (fun i (_tag, tagRange) -> let item = Item.ActivePatternResult(apinfo, cenv.g.unit_ty, i, tagRange) - CallNameResolutionSink cenv.tcSink (tagRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.eAccessRights)) + CallNameResolutionSink cenv.tcSink (tagRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.AccessRights)) { envinner with eNameResEnv = AddActivePatternResultTagsToNameEnv apinfo envinner.eNameResEnv ty m } | None -> @@ -11750,7 +11753,6 @@ and AnalyzeAndMakeAndPublishRecursiveValue overridesOK isGeneratedEventVal cenv let item = Item.Value (mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (tid.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.RelatedText, env.DisplayEnv, env.eAccessRights) | _ -> () - let mangledId = ident(vspec.LogicalName, vspec.Range) // Reconstitute the binding with the unique name diff --git a/src/fsharp/TypeRelations.fs b/src/fsharp/TypeRelations.fs index dd32a6ee00..9878880972 100755 --- a/src/fsharp/TypeRelations.fs +++ b/src/fsharp/TypeRelations.fs @@ -133,7 +133,7 @@ let ChooseTyparSolutionAndRange (g: TcGlobals) amap (tp:Typar) = match tpc with | TyparConstraint.CoercesTo(x, m) -> join m x, m - | TyparConstraint.MayResolveMember(TTrait(_, _, _, _, _, _), m) -> + | TyparConstraint.MayResolveMember(_traitInfo, m) -> maxSoFar, m | TyparConstraint.SimpleChoice(_, m) -> errorR(Error(FSComp.SR.typrelCannotResolveAmbiguityInPrintf(), m)) diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 285ecb10fb..a12fd76dd3 100755 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1979,7 +1979,7 @@ let main1OfAst (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) let tcEnv0 = GetInitialTcEnv (assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) - let tcState,topAttrs,typedAssembly,_tcEnvAtEnd = + let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = TypeCheck(ctok, tcConfig, tcImports, tcGlobals, errorLogger, assemblyName, NiceNameGenerator(), tcEnv0, inputs,exiter) let generatedCcu = tcState.Ccu @@ -2025,7 +2025,7 @@ let main2a(Args (ctok, tcConfig, tcImports, frameworkTcImports: TcImports, tcGlo use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Optimize let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) - + let importMap = tcImports.GetImportMap() let metadataVersion = match tcConfig.metadataVersion with diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 73f7412a80..b2a41536c5 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -870,9 +870,7 @@ type ILMethInfo = // MethInfo -#if DEBUG [] -#endif /// Describes an F# use of a method [] type MethInfo = @@ -955,7 +953,6 @@ type MethInfo = /// over extension members. member x.ExtensionMemberPriority = defaultArg x.ExtensionMemberPriorityOption System.UInt64.MaxValue -#if DEBUG /// Get the method name in DebuggerDisplayForm member x.DebuggerDisplayName = match x with @@ -965,7 +962,6 @@ type MethInfo = | ProvidedMeth(_, mi, _, m) -> "ProvidedMeth: " + mi.PUntaint((fun mi -> mi.Name), m) #endif | DefaultStructCtor _ -> ".ctor" -#endif /// Get the method name in LogicalName form, i.e. the name as it would be stored in .NET metadata member x.LogicalName = @@ -2247,6 +2243,8 @@ type PropInfo = | ProvidedProp(_, pi, _) -> ProvidedPropertyInfo.TaintedGetHashCode pi #endif + override x.ToString() = "property " + x.PropertyName + //------------------------------------------------------------------------- // ILEventInfo @@ -2494,6 +2492,7 @@ type EventInfo = #if !NO_EXTENSIONTYPING | ProvidedEvent (_, ei, _) -> ProvidedEventInfo.TaintedGetHashCode ei #endif + override x.ToString() = "event " + x.EventName //------------------------------------------------------------------------- // Helpers associated with getting and comparing method signatures diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index a6d5ae499a..27caa7b600 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -2357,7 +2357,7 @@ and | SupportsNull of range /// Indicates a constraint that a type has a member with the given signature - | MayResolveMember of TraitConstraintInfo * range + | MayResolveMember of TraitConstraintInfo * range /// Indicates a constraint that a type is a non-Nullable value type /// These are part of .NET's model of generic constraints, and in order to @@ -2408,6 +2408,9 @@ and /// Get the member name associated with the member constraint. member x.MemberName = (let (TTrait(_, nm, _, _, _, _)) = x in nm) + /// Get the argument types required of a member in order to solve the constraint + member x.ArgumentTypes = (let (TTrait(_, _, _, argtys, _, _)) = x in argtys) + /// Get the return type recorded in the member constraint. member x.ReturnType = (let (TTrait(_, _, _, _, ty, _)) = x in ty) @@ -4880,7 +4883,7 @@ and | Label of ILCodeLabel /// Pseudo method calls. This is used for overloaded operations like op_Addition. - | TraitCall of TraitConstraintInfo + | TraitCall of TraitConstraintInfo /// Operation nodes representing C-style operations on byrefs and mutable vals (l-values) | LValueOp of LValueOperation * ValRef diff --git a/vsintegration/ProjectTemplates/.gitignore b/vsintegration/ProjectTemplates/.gitignore deleted file mode 100644 index cd42ee34e8..0000000000 --- a/vsintegration/ProjectTemplates/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -bin/ -obj/ diff --git a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj b/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj deleted file mode 100644 index 82e55b95ec..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/ConsoleProject.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ConsoleProject - - - - - - Template\AssemblyInfo.fs; - Template\Program.fs; - - - - - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config b/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config deleted file mode 100644 index 7301b90379..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - $if$ ($targetframeworkversion$ >= 4.0)$endif$$if$ ($targetframeworkversion$ < 4.0)$endif$ - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs deleted file mode 100644 index ae735840e6..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/AssemblyInfo.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace $safeprojectname$.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// @@@GeneralInfo-Line1|General Information about an assembly is controlled through the following@@@ -// @@@GeneralInfo-Line2|set of attributes. Change these attribute values to modify the information@@@ -// @@@GeneralInfo-Line3|associated with an assembly.@@@ -[] -[] -[] -[] -[] -[] -[] -[] - -// @@@ComVisible-Line1|Setting ComVisible to false makes the types in this assembly not visible@@@ -// @@@ComVisible-Line2|to COM components. If you need to access a type in this assembly from@@@ -// @@@ComVisible-Line3|COM, set the ComVisible attribute to true on that type.@@@ -[] - -// @@@Guid-Line1|The following GUID is for the ID of the typelib if this project is exposed to COM@@@ -[] - -// @@@VersionInfo-Line1|Version information for an assembly consists of the following four values:@@@ -// -// @@@MajorVersion|Major Version@@@ -// @@@MinorVersion|Minor Version@@@ -// @@@BuildNumber|Build Number@@@ -// @@@Revision|Revision@@@ -// -// @@@VersionInfo-Line2|You can specify all the values or you can default the Build and Revision Numbers@@@ -// @@@VersionInfo-Line3|by using the '*' as shown below:@@@ -// [] -[] -[] - -do - () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj deleted file mode 100644 index 19c297de5e..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Exe - $safeprojectname$ - $safeprojectname$ - v$targetframeworkversion$ - true - true - 3239;$(WarningsAsErrors) - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - - - - - - - - - - - - 11 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate deleted file mode 100644 index fea0279b94..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Microsoft.FSharp.Application - FSharp - 4.5 - 1 - true - ConsoleApplication - true - true - - - - AssemblyInfo.fs - Program.fs - App.config - - - - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard - - - - - - - - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs b/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs deleted file mode 100644 index 93b7275510..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/Program.fs +++ /dev/null @@ -1,7 +0,0 @@ -// @@@LearnMore|Learn more about F# at https://fsharp.org@@@ -// @@@SeeTutorial|See the 'F# Tutorial' project for more help.@@@ - -[] -let main argv = - printfn "%A" argv - 0 // @@@Return|return an integer exit code@@@ diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf deleted file mode 100644 index a580d9e396..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Obecné informace o sestavení se řídí přes následující - - - - set of attributes. Change these attribute values to modify the information - sadu atributů. Změnou hodnot těchto atributů se upraví informace - - - - associated with an assembly. - přidružené k sestavení. - - - - Setting ComVisible to false makes the types in this assembly not visible - Nastavením atributu ComVisible na hodnotu False budou typy v tomto sestavení neviditelné - - - - to COM components. If you need to access a type in this assembly from - pro komponenty modelu COM. Pokud potřebujete přistoupit k typu v tomto sestavení z - - - - COM, set the ComVisible attribute to true on that type. - modelu COM, nastavte atribut ComVisible daného typu na hodnotu True. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Následující GUID se používá pro ID knihovny typů, pokud je tento projekt vystavený pro COM. - - - - Version information for an assembly consists of the following four values: - Informace o verzi sestavení se skládá z těchto čtyř hodnot: - - - - Major Version - Hlavní verze - - - - Minor Version - Podverze - - - - Build Number - Číslo sestavení - - - - Revision - Revize - - - - You can specify all the values or you can default the Build and Revision Numbers - Můžete zadat všechny hodnoty nebo nechat nastavená výchozí čísla sestavení a revize - - - - by using the '*' as shown below: - pomocí zástupného znaku * takto: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf deleted file mode 100644 index 8df6ae7fc3..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Allgemeine Informationen über eine Assembly werden über die folgende - - - - set of attributes. Change these attribute values to modify the information - Attributgruppe gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, - - - - associated with an assembly. - die einer Assembly zugeordnet sind. - - - - Setting ComVisible to false makes the types in this assembly not visible - Durch Festlegen von ComVisible auf FALSE sind die Typen in dieser Assembly nicht - - - - to COM components. If you need to access a type in this assembly from - für COM-Komponenten sichtbar. Wenn Sie auf einen Typ in dieser Assembly von - - - - COM, set the ComVisible attribute to true on that type. - COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf TRUE festlegen. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird - - - - Version information for an assembly consists of the following four values: - Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: - - - - Major Version - Hauptversion - - - - Minor Version - Nebenversion - - - - Build Number - Buildnummer - - - - Revision - Revision - - - - You can specify all the values or you can default the Build and Revision Numbers - Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern - - - - by using the '*' as shown below: - übernehmen, indem Sie "*" eingeben: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf deleted file mode 100644 index 9beb403796..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - La información general de un ensamblado se controla mediante el siguiente - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Cambie estos valores de atributo para modificar la información - - - - associated with an assembly. - asociada con un ensamblado. - - - - Setting ComVisible to false makes the types in this assembly not visible - Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles - - - - to COM components. If you need to access a type in this assembly from - para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde - - - - COM, set the ComVisible attribute to true on that type. - COM, establezca el atributo ComVisible en true en este tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM. - - - - Version information for an assembly consists of the following four values: - La información de versión de un ensamblado consta de los cuatro valores siguientes: - - - - Major Version - Versión principal - - - - Minor Version - Versión secundaria - - - - Build Number - Número de compilación - - - - Revision - Revisión - - - - You can specify all the values or you can default the Build and Revision Numbers - Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión - - - - by using the '*' as shown below: - mediante el carácter '*', como se muestra a continuación: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf deleted file mode 100644 index a259bd3051..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Les informations générales relatives à un assembly dépendent de - - - - set of attributes. Change these attribute values to modify the information - l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations - - - - associated with an assembly. - associées à un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly - - - - to COM components. If you need to access a type in this assembly from - aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, affectez la valeur true à l'attribut ComVisible sur ce type. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM - - - - Version information for an assembly consists of the following four values: - Les informations de version pour un assembly se composent des quatre valeurs suivantes : - - - - Major Version - Version principale - - - - Minor Version - Version secondaire - - - - Build Number - Numéro de build - - - - Revision - Révision - - - - You can specify all the values or you can default the Build and Revision Numbers - Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut - - - - by using the '*' as shown below: - en utilisant '*', comme indiqué ci-dessous : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf deleted file mode 100644 index d5fc6c7558..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Le informazioni generali relative a un assembly sono controllate dal seguente - - - - set of attributes. Change these attribute values to modify the information - set di attributi. Modificare i valori di questi attributi per modificare le informazioni - - - - associated with an assembly. - associate a un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili - - - - to COM components. If you need to access a type in this assembly from - ai componenti COM. Se è necessario accedere a un tipo in questo assembly da - - - - COM, set the ComVisible attribute to true on that type. - COM, impostare su true l'attributo ComVisible per tale tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi - - - - Version information for an assembly consists of the following four values: - Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti: - - - - Major Version - Versione principale - - - - Minor Version - Versione secondaria - - - - Build Number - Numero di build - - - - Revision - Revisione - - - - You can specify all the values or you can default the Build and Revision Numbers - È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build - - - - by using the '*' as shown below: - utilizzando l'asterisco (*) come illustrato di seguito: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf deleted file mode 100644 index 1f413753d1..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ja.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - アセンブリに関する一般情報は、以下の属性セットによって - - - - set of attributes. Change these attribute values to modify the information - 制御されます。アセンブリに関連付けられている情報を変更するには、 - - - - associated with an assembly. - これらの属性値を変更します。 - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible を false に設定すると、COM コンポーネントがこのアセンブリ内のその型を認識 - - - - to COM components. If you need to access a type in this assembly from - できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 - - - - COM, set the ComVisible attribute to true on that type. - その型の ComVisible 属性を true に設定します。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります - - - - Version information for an assembly consists of the following four values: - アセンブリのバージョン情報は、以下の 4 つの値で構成されます。: - - - - Major Version - メジャー バージョン - - - - Minor Version - マイナー バージョン - - - - Build Number - ビルド番号 - - - - Revision - リビジョン - - - - You can specify all the values or you can default the Build and Revision Numbers - すべての値を指定するか、下に示すように '*' を使用してビルドおよびリビジョン番号を - - - - by using the '*' as shown below: - 既定値にすることができます。: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf deleted file mode 100644 index 258b4ebab2..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 어셈블리의 일반 정보는 다음 특성 집합을 통해 - - - - set of attributes. Change these attribute values to modify the information - 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 - - - - associated with an assembly. - 이러한 특성 값을 변경하세요. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 - - - - to COM components. If you need to access a type in this assembly from - 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 - - - - COM, set the ComVisible attribute to true on that type. - 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. - - - - Version information for an assembly consists of the following four values: - 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.: - - - - Major Version - 주 버전 - - - - Minor Version - 부 버전 - - - - Build Number - 빌드 번호 - - - - Revision - 수정 버전 - - - - You can specify all the values or you can default the Build and Revision Numbers - 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 - - - - by using the '*' as shown below: - 지정되도록 할 수 있습니다.: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf deleted file mode 100644 index ee3471fb55..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Ogólne informacje o zestawie są kontrolowane poprzez następujący - - - - set of attributes. Change these attribute values to modify the information - zbiór atrybutów. Zmień wartości tych atrybutów by zmodyfikować informacje - - - - associated with an assembly. - powiązane z zestawem. - - - - Setting ComVisible to false makes the types in this assembly not visible - Ustawienie wartości ComVisible na false sprawia, że typy w tym zestawie nie będą widoczne - - - - to COM components. If you need to access a type in this assembly from - dla składników COM. Jeśli potrzebny jest dostęp do typu w tym zestawie z - - - - COM, set the ComVisible attribute to true on that type. - COM, ustaw atrybut ComVisible na true dla danego typu. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Następujący GUID jest dla ID typelib jeśli ten projekt jest dostępny dla COM - - - - Version information for an assembly consists of the following four values: - Informacje o wersji zestawu zawierają następujące cztery wartości: - - - - Major Version - Wersja główna - - - - Minor Version - Wersja pomocnicza - - - - Build Number - Numer kompilacji - - - - Revision - Poprawka - - - - You can specify all the values or you can default the Build and Revision Numbers - Można określać wszystkie wartości lub używać domyślnych numerów kompilacji i poprawki - - - - by using the '*' as shown below: - przy użyciu symbolu „*”, tak jak pokazano poniżej: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf deleted file mode 100644 index 48d258faa2..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - As informações gerais sobre um assembly são controladas por meio do seguinte - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Altere estes valores de atributo para modificar as informações - - - - associated with an assembly. - associados a um assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Definir ComVisible como false oculta os tipos neste assembly - - - - to COM components. If you need to access a type in this assembly from - para componentes COM. Caso precise acessar um tipo neste assembly a partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, defina o atributo ComVisible como true nesse tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - O GUID a seguir é para a ID de typelib quando este projeto é exposto a COM - - - - Version information for an assembly consists of the following four values: - As informações da versão de um assembly consistem nos quatro valores a seguir: - - - - Major Version - Versão Principal - - - - Minor Version - Versão Secundária - - - - Build Number - Número da Versão - - - - Revision - Revisão - - - - You can specify all the values or you can default the Build and Revision Numbers - É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão - - - - by using the '*' as shown below: - utilizando o '*' como mostrado abaixo: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf deleted file mode 100644 index c0f2735eae..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Общие сведения о сборке можно задать с помощью следующего - - - - set of attributes. Change these attribute values to modify the information - набора атрибутов. Отредактируйте эти значения атрибутов, чтобы изменить сведения, - - - - associated with an assembly. - связанные с этой сборкой. - - - - Setting ComVisible to false makes the types in this assembly not visible - При установке значения False в атрибуте ComVisible типы в этой сборке становятся невидимыми - - - - to COM components. If you need to access a type in this assembly from - для COM-компонентов. Если требуется обратиться к типу в этой сборке через - - - - COM, set the ComVisible attribute to true on that type. - COM, задайте для атрибута ComVisible значение True для этого типа. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Следующий GUID служит для идентификации библиотеки типов, если этот проект видим для COM - - - - Version information for an assembly consists of the following four values: - Сведения о версии сборки состоят из следующих четырех значений: - - - - Major Version - Основной номер версии - - - - Minor Version - Вспомогательная версия - - - - Build Number - Номер сборки - - - - Revision - Редакция - - - - You can specify all the values or you can default the Build and Revision Numbers - Можно задать все значения или принять номера сборки и редакции по умолчанию - - - - by using the '*' as shown below: - используя "*", как показано ниже: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf deleted file mode 100644 index 906ec8f3ef..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki - - - - set of attributes. Change these attribute values to modify the information - öznitelikler kümesi. Bilgileri değiştirmek için bu öznitelik değerlerini değiştirin - - - - associated with an assembly. - Bir bütünleştirilmiş kod ile ilişkilendirildi. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible ayarının false olarak belirlenmesi bu derlemedeki türleri - - - - to COM components. If you need to access a type in this assembly from - COM bileşenlerine görünmez yapar. Bu derlemedeki bir türe COM'dan - - - - COM, set the ComVisible attribute to true on that type. - erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Eğer bu proje COM'a maruz kaldıysa aşağıdaki GUID typelib'in IDsi içindir - - - - Version information for an assembly consists of the following four values: - Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur: - - - - Major Version - Birincil Sürüm - - - - Minor Version - İkincil Sürüm - - - - Build Number - Yapı Numarası - - - - Revision - Düzeltme - - - - You can specify all the values or you can default the Build and Revision Numbers - Tüm değerleri belirtebilir veya varsayılan Oluşturma ve Düzeltme Numaralarını kullanabilirsiniz - - - - by using the '*' as shown below: - '*' karakterini aşağıda gösterildiği gibi kullanarak: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf deleted file mode 100644 index d76c9dbd18..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 有关程序集的一般信息由以下 - - - - set of attributes. Change these attribute values to modify the information - 控制。更改这些特性值可修改 - - - - associated with an assembly. - 与程序集关联的信息。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 将 ComVisible 设置为 false 将使此程序集中的类型 - - - - to COM components. If you need to access a type in this assembly from - 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, - - - - COM, set the ComVisible attribute to true on that type. - 请将此类型的 ComVisible 特性设置为 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID - - - - Version information for an assembly consists of the following four values: - 程序集的版本信息由下列四个值组成: - - - - Major Version - 主版本 - - - - Minor Version - 次版本 - - - - Build Number - 生成号 - - - - Revision - 修订 - - - - You can specify all the values or you can default the Build and Revision Numbers - 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, - - - - by using the '*' as shown below: - 方法是按如下所示使用“*”: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf deleted file mode 100644 index 477f8719df..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 組件的一般資訊是由下列的屬性集控制 - - - - set of attributes. Change these attribute values to modify the information - 變更這些屬性的值即可修改組件的相關 - - - - associated with an assembly. - 資訊。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 將 ComVisible 設定為 false 會使得這個組件中的類型 - - - - to COM components. If you need to access a type in this assembly from - 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 - - - - COM, set the ComVisible attribute to true on that type. - 的類型,請在該類型上將 ComVisible 屬性設定為 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID - - - - Version information for an assembly consists of the following four values: - 組件的版本資訊由下列四個值所組成: : - - - - Major Version - 主要版本 - - - - Minor Version - 次要版本 - - - - Build Number - 組建編號 - - - - Revision - 修訂 - - - - You can specify all the values or you can default the Build and Revision Numbers - 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 - - - - by using the '*' as shown below: - 指定為預設值: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf deleted file mode 100644 index 0a1913fea3..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Další informace o F# najdete na https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Pokud potřebujete další nápovědu, viz projekt Výukový kurz F#. - - - - return an integer exit code - vrátit celočíselný ukončovací kód - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf deleted file mode 100644 index 8c434e9d7d..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Weitere Informationen zu F# unter https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Weitere Hilfe finden Sie im Projekt "F#-Tutorial". - - - - return an integer exit code - Integer-Exitcode zurückgeben - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf deleted file mode 100644 index 1472966885..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Más información sobre F# en https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Vea el proyecto "Tutorial de F#" para obtener más ayuda. - - - - return an integer exit code - devolver un código de salida entero - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf deleted file mode 100644 index 8052d98708..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - En savoir plus sur F# : https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Voir le projet 'Didacticiel F#' pour obtenir de l'aide. - - - - return an integer exit code - retourne du code de sortie entier - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf deleted file mode 100644 index c9027ad5b6..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Altre informazioni su F# disponibili all'indirizzo https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Per altre informazioni, vedere il progetto 'Esercitazione su F#'. - - - - return an integer exit code - restituisce un intero come codice di uscita - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf deleted file mode 100644 index c24608aec3..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ja.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# の詳細については、https://fsharp.org をご覧ください - - - - See the 'F# Tutorial' project for more help. - 詳細については、'F# チュートリアル' プロジェクトを参照してください。 - - - - return an integer exit code - 整数の終了コードを返します - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf deleted file mode 100644 index 7d9f7dc54e..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - https://fsharp.org에서 F#에 대해 자세히 알아보기 - - - - See the 'F# Tutorial' project for more help. - 자세한 도움말은 'F# 자습서' 프로젝트를 참조하세요. - - - - return an integer exit code - 정수 종료 코드 반환 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf deleted file mode 100644 index 763d2db3df..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Dowiedz się więcej o języku F# na stronie https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Aby uzyskać dodatkową pomoc, zobacz projekt „Samouczek języka F#”. - - - - return an integer exit code - zwracanie kodu zakończenia w postaci liczby całkowitej - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf deleted file mode 100644 index 7af54cd8fd..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Saiba mais sobre o F# em https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Veja o projeto 'F# Tutorial' para obter mais ajuda. - - - - return an integer exit code - retornar um código de saída inteiro - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf deleted file mode 100644 index 54eb018503..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Дополнительные сведения об F# см. на странице https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Дополнительную справку см. в проекте "Учебник по F#". - - - - return an integer exit code - возвращение целочисленного кода выхода - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf deleted file mode 100644 index c584140b66..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# hakkında daha fazla bilgi edinmek için bkz. https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Daha fazla yardım almak için 'F# Öğreticisi' projesine göz atın. - - - - return an integer exit code - bir tamsayı çıkış kodu döndürür - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf deleted file mode 100644 index 27df727dbd..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 了解更多关于 F# 的信息,请访问 https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - 请参阅“F# 教程”项目以获取更多帮助。 - - - - return an integer exit code - 返回整数退出代码 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf deleted file mode 100644 index 5f67238de8..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 前往 https://fsharp.org 深入了解 F# - - - - See the 'F# Tutorial' project for more help. - 請參閱「F# 教學課程」專案,取得更多說明。 - - - - return an integer exit code - 傳回整數的結束代碼 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest deleted file mode 100644 index 5f28d2c06e..0000000000 --- a/vsintegration/ProjectTemplates/ConsoleProject/source.extension.vsixmanifest +++ /dev/null @@ -1,24 +0,0 @@ - - - - - F# .NETCore Project Templates - F# project templates for .NETCore. - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/ProjectTemplates/Directory.Build.props b/vsintegration/ProjectTemplates/Directory.Build.props deleted file mode 100644 index 49fb4e2d1f..0000000000 --- a/vsintegration/ProjectTemplates/Directory.Build.props +++ /dev/null @@ -1,10 +0,0 @@ - - - - ProjectTemplates - Microsoft.FSharp - - - - - diff --git a/vsintegration/ProjectTemplates/Directory.Build.targets b/vsintegration/ProjectTemplates/Directory.Build.targets deleted file mode 100644 index 6dd437b28f..0000000000 --- a/vsintegration/ProjectTemplates/Directory.Build.targets +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj b/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj deleted file mode 100644 index 23239f0047..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/LibraryProject.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - LibraryProject - - - - - - Template\AssemblyInfo.fs; - Template\Script.fsx; - - - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs b/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs deleted file mode 100644 index ae735840e6..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/AssemblyInfo.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace $safeprojectname$.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// @@@GeneralInfo-Line1|General Information about an assembly is controlled through the following@@@ -// @@@GeneralInfo-Line2|set of attributes. Change these attribute values to modify the information@@@ -// @@@GeneralInfo-Line3|associated with an assembly.@@@ -[] -[] -[] -[] -[] -[] -[] -[] - -// @@@ComVisible-Line1|Setting ComVisible to false makes the types in this assembly not visible@@@ -// @@@ComVisible-Line2|to COM components. If you need to access a type in this assembly from@@@ -// @@@ComVisible-Line3|COM, set the ComVisible attribute to true on that type.@@@ -[] - -// @@@Guid-Line1|The following GUID is for the ID of the typelib if this project is exposed to COM@@@ -[] - -// @@@VersionInfo-Line1|Version information for an assembly consists of the following four values:@@@ -// -// @@@MajorVersion|Major Version@@@ -// @@@MinorVersion|Minor Version@@@ -// @@@BuildNumber|Build Number@@@ -// @@@Revision|Revision@@@ -// -// @@@VersionInfo-Line2|You can specify all the values or you can default the Build and Revision Numbers@@@ -// @@@VersionInfo-Line3|by using the '*' as shown below:@@@ -// [] -[] -[] - -do - () \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj deleted file mode 100644 index 5878583967..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Library - $safeprojectname$ - $safeprojectname$ - true - v$targetframeworkversion$ - true - 3239;$(WarningsAsErrors) - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - bin\$(Configuration)\$(AssemblyName).XML - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - bin\$(Configuration)\$(AssemblyName).XML - - - - - - - - - - - - - - 11 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate deleted file mode 100644 index d7f9a14d8d..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Microsoft.FSharp.Library - FSharp - 4.5 - 1 - true - Library - true - true - - - - AssemblyInfo.fs - Library1.fs - Script.fsx - - - - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard - - - - - - - - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs b/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs deleted file mode 100644 index c8a8cd1b46..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library1.fs +++ /dev/null @@ -1,4 +0,0 @@ -namespace $safeprojectname$ - -type Class1() = - member this.X = "F#" diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx b/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx deleted file mode 100644 index 0caeb86ca6..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Script.fsx +++ /dev/null @@ -1,8 +0,0 @@ -// @@@LearnMore|Learn more about F# at https://fsharp.org@@@ -// @@@SeeTutorial|See the 'F# Tutorial' project for more help.@@@ - -#load "Library1.fs" -open $safeprojectname$ - -// @@@Define|Define your library scripting code here@@@ - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf deleted file mode 100644 index a580d9e396..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Obecné informace o sestavení se řídí přes následující - - - - set of attributes. Change these attribute values to modify the information - sadu atributů. Změnou hodnot těchto atributů se upraví informace - - - - associated with an assembly. - přidružené k sestavení. - - - - Setting ComVisible to false makes the types in this assembly not visible - Nastavením atributu ComVisible na hodnotu False budou typy v tomto sestavení neviditelné - - - - to COM components. If you need to access a type in this assembly from - pro komponenty modelu COM. Pokud potřebujete přistoupit k typu v tomto sestavení z - - - - COM, set the ComVisible attribute to true on that type. - modelu COM, nastavte atribut ComVisible daného typu na hodnotu True. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Následující GUID se používá pro ID knihovny typů, pokud je tento projekt vystavený pro COM. - - - - Version information for an assembly consists of the following four values: - Informace o verzi sestavení se skládá z těchto čtyř hodnot: - - - - Major Version - Hlavní verze - - - - Minor Version - Podverze - - - - Build Number - Číslo sestavení - - - - Revision - Revize - - - - You can specify all the values or you can default the Build and Revision Numbers - Můžete zadat všechny hodnoty nebo nechat nastavená výchozí čísla sestavení a revize - - - - by using the '*' as shown below: - pomocí zástupného znaku * takto: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf deleted file mode 100644 index 8df6ae7fc3..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Allgemeine Informationen über eine Assembly werden über die folgende - - - - set of attributes. Change these attribute values to modify the information - Attributgruppe gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, - - - - associated with an assembly. - die einer Assembly zugeordnet sind. - - - - Setting ComVisible to false makes the types in this assembly not visible - Durch Festlegen von ComVisible auf FALSE sind die Typen in dieser Assembly nicht - - - - to COM components. If you need to access a type in this assembly from - für COM-Komponenten sichtbar. Wenn Sie auf einen Typ in dieser Assembly von - - - - COM, set the ComVisible attribute to true on that type. - COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf TRUE festlegen. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird - - - - Version information for an assembly consists of the following four values: - Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: - - - - Major Version - Hauptversion - - - - Minor Version - Nebenversion - - - - Build Number - Buildnummer - - - - Revision - Revision - - - - You can specify all the values or you can default the Build and Revision Numbers - Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern - - - - by using the '*' as shown below: - übernehmen, indem Sie "*" eingeben: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf deleted file mode 100644 index 9beb403796..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - La información general de un ensamblado se controla mediante el siguiente - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Cambie estos valores de atributo para modificar la información - - - - associated with an assembly. - asociada con un ensamblado. - - - - Setting ComVisible to false makes the types in this assembly not visible - Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles - - - - to COM components. If you need to access a type in this assembly from - para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde - - - - COM, set the ComVisible attribute to true on that type. - COM, establezca el atributo ComVisible en true en este tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM. - - - - Version information for an assembly consists of the following four values: - La información de versión de un ensamblado consta de los cuatro valores siguientes: - - - - Major Version - Versión principal - - - - Minor Version - Versión secundaria - - - - Build Number - Número de compilación - - - - Revision - Revisión - - - - You can specify all the values or you can default the Build and Revision Numbers - Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión - - - - by using the '*' as shown below: - mediante el carácter '*', como se muestra a continuación: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf deleted file mode 100644 index a259bd3051..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Les informations générales relatives à un assembly dépendent de - - - - set of attributes. Change these attribute values to modify the information - l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations - - - - associated with an assembly. - associées à un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly - - - - to COM components. If you need to access a type in this assembly from - aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, affectez la valeur true à l'attribut ComVisible sur ce type. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM - - - - Version information for an assembly consists of the following four values: - Les informations de version pour un assembly se composent des quatre valeurs suivantes : - - - - Major Version - Version principale - - - - Minor Version - Version secondaire - - - - Build Number - Numéro de build - - - - Revision - Révision - - - - You can specify all the values or you can default the Build and Revision Numbers - Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut - - - - by using the '*' as shown below: - en utilisant '*', comme indiqué ci-dessous : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf deleted file mode 100644 index d5fc6c7558..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Le informazioni generali relative a un assembly sono controllate dal seguente - - - - set of attributes. Change these attribute values to modify the information - set di attributi. Modificare i valori di questi attributi per modificare le informazioni - - - - associated with an assembly. - associate a un assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili - - - - to COM components. If you need to access a type in this assembly from - ai componenti COM. Se è necessario accedere a un tipo in questo assembly da - - - - COM, set the ComVisible attribute to true on that type. - COM, impostare su true l'attributo ComVisible per tale tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi - - - - Version information for an assembly consists of the following four values: - Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti: - - - - Major Version - Versione principale - - - - Minor Version - Versione secondaria - - - - Build Number - Numero di build - - - - Revision - Revisione - - - - You can specify all the values or you can default the Build and Revision Numbers - È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build - - - - by using the '*' as shown below: - utilizzando l'asterisco (*) come illustrato di seguito: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf deleted file mode 100644 index 1f413753d1..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ja.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - アセンブリに関する一般情報は、以下の属性セットによって - - - - set of attributes. Change these attribute values to modify the information - 制御されます。アセンブリに関連付けられている情報を変更するには、 - - - - associated with an assembly. - これらの属性値を変更します。 - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible を false に設定すると、COM コンポーネントがこのアセンブリ内のその型を認識 - - - - to COM components. If you need to access a type in this assembly from - できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 - - - - COM, set the ComVisible attribute to true on that type. - その型の ComVisible 属性を true に設定します。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります - - - - Version information for an assembly consists of the following four values: - アセンブリのバージョン情報は、以下の 4 つの値で構成されます。: - - - - Major Version - メジャー バージョン - - - - Minor Version - マイナー バージョン - - - - Build Number - ビルド番号 - - - - Revision - リビジョン - - - - You can specify all the values or you can default the Build and Revision Numbers - すべての値を指定するか、下に示すように '*' を使用してビルドおよびリビジョン番号を - - - - by using the '*' as shown below: - 既定値にすることができます。: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf deleted file mode 100644 index 258b4ebab2..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 어셈블리의 일반 정보는 다음 특성 집합을 통해 - - - - set of attributes. Change these attribute values to modify the information - 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 - - - - associated with an assembly. - 이러한 특성 값을 변경하세요. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 - - - - to COM components. If you need to access a type in this assembly from - 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 - - - - COM, set the ComVisible attribute to true on that type. - 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. - - - - Version information for an assembly consists of the following four values: - 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.: - - - - Major Version - 주 버전 - - - - Minor Version - 부 버전 - - - - Build Number - 빌드 번호 - - - - Revision - 수정 버전 - - - - You can specify all the values or you can default the Build and Revision Numbers - 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로 - - - - by using the '*' as shown below: - 지정되도록 할 수 있습니다.: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf deleted file mode 100644 index ee3471fb55..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Ogólne informacje o zestawie są kontrolowane poprzez następujący - - - - set of attributes. Change these attribute values to modify the information - zbiór atrybutów. Zmień wartości tych atrybutów by zmodyfikować informacje - - - - associated with an assembly. - powiązane z zestawem. - - - - Setting ComVisible to false makes the types in this assembly not visible - Ustawienie wartości ComVisible na false sprawia, że typy w tym zestawie nie będą widoczne - - - - to COM components. If you need to access a type in this assembly from - dla składników COM. Jeśli potrzebny jest dostęp do typu w tym zestawie z - - - - COM, set the ComVisible attribute to true on that type. - COM, ustaw atrybut ComVisible na true dla danego typu. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Następujący GUID jest dla ID typelib jeśli ten projekt jest dostępny dla COM - - - - Version information for an assembly consists of the following four values: - Informacje o wersji zestawu zawierają następujące cztery wartości: - - - - Major Version - Wersja główna - - - - Minor Version - Wersja pomocnicza - - - - Build Number - Numer kompilacji - - - - Revision - Poprawka - - - - You can specify all the values or you can default the Build and Revision Numbers - Można określać wszystkie wartości lub używać domyślnych numerów kompilacji i poprawki - - - - by using the '*' as shown below: - przy użyciu symbolu „*”, tak jak pokazano poniżej: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf deleted file mode 100644 index 48d258faa2..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - As informações gerais sobre um assembly são controladas por meio do seguinte - - - - set of attributes. Change these attribute values to modify the information - conjunto de atributos. Altere estes valores de atributo para modificar as informações - - - - associated with an assembly. - associados a um assembly. - - - - Setting ComVisible to false makes the types in this assembly not visible - Definir ComVisible como false oculta os tipos neste assembly - - - - to COM components. If you need to access a type in this assembly from - para componentes COM. Caso precise acessar um tipo neste assembly a partir de - - - - COM, set the ComVisible attribute to true on that type. - COM, defina o atributo ComVisible como true nesse tipo. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - O GUID a seguir é para a ID de typelib quando este projeto é exposto a COM - - - - Version information for an assembly consists of the following four values: - As informações da versão de um assembly consistem nos quatro valores a seguir: - - - - Major Version - Versão Principal - - - - Minor Version - Versão Secundária - - - - Build Number - Número da Versão - - - - Revision - Revisão - - - - You can specify all the values or you can default the Build and Revision Numbers - É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão - - - - by using the '*' as shown below: - utilizando o '*' como mostrado abaixo: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf deleted file mode 100644 index c0f2735eae..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Общие сведения о сборке можно задать с помощью следующего - - - - set of attributes. Change these attribute values to modify the information - набора атрибутов. Отредактируйте эти значения атрибутов, чтобы изменить сведения, - - - - associated with an assembly. - связанные с этой сборкой. - - - - Setting ComVisible to false makes the types in this assembly not visible - При установке значения False в атрибуте ComVisible типы в этой сборке становятся невидимыми - - - - to COM components. If you need to access a type in this assembly from - для COM-компонентов. Если требуется обратиться к типу в этой сборке через - - - - COM, set the ComVisible attribute to true on that type. - COM, задайте для атрибута ComVisible значение True для этого типа. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Следующий GUID служит для идентификации библиотеки типов, если этот проект видим для COM - - - - Version information for an assembly consists of the following four values: - Сведения о версии сборки состоят из следующих четырех значений: - - - - Major Version - Основной номер версии - - - - Minor Version - Вспомогательная версия - - - - Build Number - Номер сборки - - - - Revision - Редакция - - - - You can specify all the values or you can default the Build and Revision Numbers - Можно задать все значения или принять номера сборки и редакции по умолчанию - - - - by using the '*' as shown below: - используя "*", как показано ниже: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf deleted file mode 100644 index 906ec8f3ef..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki - - - - set of attributes. Change these attribute values to modify the information - öznitelikler kümesi. Bilgileri değiştirmek için bu öznitelik değerlerini değiştirin - - - - associated with an assembly. - Bir bütünleştirilmiş kod ile ilişkilendirildi. - - - - Setting ComVisible to false makes the types in this assembly not visible - ComVisible ayarının false olarak belirlenmesi bu derlemedeki türleri - - - - to COM components. If you need to access a type in this assembly from - COM bileşenlerine görünmez yapar. Bu derlemedeki bir türe COM'dan - - - - COM, set the ComVisible attribute to true on that type. - erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın. - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - Eğer bu proje COM'a maruz kaldıysa aşağıdaki GUID typelib'in IDsi içindir - - - - Version information for an assembly consists of the following four values: - Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur: - - - - Major Version - Birincil Sürüm - - - - Minor Version - İkincil Sürüm - - - - Build Number - Yapı Numarası - - - - Revision - Düzeltme - - - - You can specify all the values or you can default the Build and Revision Numbers - Tüm değerleri belirtebilir veya varsayılan Oluşturma ve Düzeltme Numaralarını kullanabilirsiniz - - - - by using the '*' as shown below: - '*' karakterini aşağıda gösterildiği gibi kullanarak: - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf deleted file mode 100644 index d76c9dbd18..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 有关程序集的一般信息由以下 - - - - set of attributes. Change these attribute values to modify the information - 控制。更改这些特性值可修改 - - - - associated with an assembly. - 与程序集关联的信息。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 将 ComVisible 设置为 false 将使此程序集中的类型 - - - - to COM components. If you need to access a type in this assembly from - 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, - - - - COM, set the ComVisible attribute to true on that type. - 请将此类型的 ComVisible 特性设置为 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID - - - - Version information for an assembly consists of the following four values: - 程序集的版本信息由下列四个值组成: - - - - Major Version - 主版本 - - - - Minor Version - 次版本 - - - - Build Number - 生成号 - - - - Revision - 修订 - - - - You can specify all the values or you can default the Build and Revision Numbers - 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, - - - - by using the '*' as shown below: - 方法是按如下所示使用“*”: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf deleted file mode 100644 index 477f8719df..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hant.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - General Information about an assembly is controlled through the following - 組件的一般資訊是由下列的屬性集控制 - - - - set of attributes. Change these attribute values to modify the information - 變更這些屬性的值即可修改組件的相關 - - - - associated with an assembly. - 資訊。 - - - - Setting ComVisible to false makes the types in this assembly not visible - 將 ComVisible 設定為 false 會使得這個組件中的類型 - - - - to COM components. If you need to access a type in this assembly from - 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 - - - - COM, set the ComVisible attribute to true on that type. - 的類型,請在該類型上將 ComVisible 屬性設定為 true。 - - - - The following GUID is for the ID of the typelib if this project is exposed to COM - 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID - - - - Version information for an assembly consists of the following four values: - 組件的版本資訊由下列四個值所組成: : - - - - Major Version - 主要版本 - - - - Minor Version - 次要版本 - - - - Build Number - 組建編號 - - - - Revision - 修訂 - - - - You can specify all the values or you can default the Build and Revision Numbers - 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 - - - - by using the '*' as shown below: - 指定為預設值: : - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf deleted file mode 100644 index e9771690a9..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Další informace o F# najdete na https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Pokud potřebujete další nápovědu, viz projekt Výukový kurz F#. - - - - Define your library scripting code here - Tady definujte skriptovací kód knihovny. - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf deleted file mode 100644 index 61df76a280..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Weitere Informationen zu F# unter https://fsharp.org. - - - - See the 'F# Tutorial' project for more help. - Weitere Hilfe finden Sie im Projekt "F#-Tutorial". - - - - Define your library scripting code here - Skriptcode für die Bibliothek hier definieren - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf deleted file mode 100644 index 96fb3d3647..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Más información sobre F# en https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Vea el proyecto "Tutorial de F#" para obtener más ayuda. - - - - Define your library scripting code here - Definir aquí el código de scripting de bibliotecas - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf deleted file mode 100644 index cb48575303..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Pour en savoir plus sur le F# : https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Voir le projet 'Didacticiel F#' pour obtenir de l'aide. - - - - Define your library scripting code here - Définir votre code de script de bibliothèque ici - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf deleted file mode 100644 index 42558ead9d..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Altre informazioni su F# disponibili all'indirizzo https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Per altre informazioni, vedere il progetto 'Esercitazione su F#'. - - - - Define your library scripting code here - Viene definito qui il codice di script della libreria - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf deleted file mode 100644 index 45967e26bf..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ja.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# の詳細については、https://fsharp.org をご覧ください - - - - See the 'F# Tutorial' project for more help. - 詳細については、'F# チュートリアル' プロジェクトを参照してください。 - - - - Define your library scripting code here - ここでライブラリ スクリプト コードを定義します - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf deleted file mode 100644 index 661f9e6344..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - https://fsharp.org에서 F#에 대해 자세히 알아보기 - - - - See the 'F# Tutorial' project for more help. - 자세한 도움말은 'F# 자습서' 프로젝트를 참조하세요. - - - - Define your library scripting code here - 라이브러리 스크립팅 코드를 정의합니다. - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf deleted file mode 100644 index e32717ff70..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Dowiedz się więcej o języku F# na stronie https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Aby uzyskać dodatkową pomoc, zobacz projekt „Samouczek języka F#”. - - - - Define your library scripting code here - Tutaj zdefiniuj kod skryptu biblioteki - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf deleted file mode 100644 index 1bd32f9343..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Saiba mais sobre o F# em https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Veja o projeto 'F# Tutorial' para obter mais ajuda. - - - - Define your library scripting code here - Defina seu código de script de biblioteca aqui - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf deleted file mode 100644 index b8a6d8cced..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - Дополнительные сведения об F# см. на странице https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Дополнительную справку см. в проекте "Учебник по F#". - - - - Define your library scripting code here - Определите здесь код скрипта библиотеки - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf deleted file mode 100644 index 1b3c2476e6..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - F# hakkında daha fazla bilgi edinmek için bkz. https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - Daha fazla yardım almak için 'F# Öğreticisi' projesine göz atın. - - - - Define your library scripting code here - Kitaplık betik oluşturma kodunuzu buradan tanımlayın - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf deleted file mode 100644 index 4d849f68e3..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 了解更多关于 F# 的信息,请访问 https://fsharp.org - - - - See the 'F# Tutorial' project for more help. - 请参阅“F# 教程”项目以获取更多帮助。 - - - - Define your library scripting code here - 在此处定义库脚本代码 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf deleted file mode 100644 index 14ed4156de..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Learn more about F# at https://fsharp.org - 前往 https://fsharp.org 深入了解 F# - - - - See the 'F# Tutorial' project for more help. - 請參閱「F# 教學課程」專案,取得更多說明。 - - - - Define your library scripting code here - 在這裡定義程式庫指令碼程式碼 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest deleted file mode 100644 index f5157eaa6b..0000000000 --- a/vsintegration/ProjectTemplates/LibraryProject/source.extension.vsixmanifest +++ /dev/null @@ -1,25 +0,0 @@ - - - - - F# .NETCore Project Templates - F# project templates for .NETCore. - - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj deleted file mode 100644 index dd2eed1525..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - $guid1$ - Exe - $safeprojectname$ - $safeprojectname$ - v$targetframeworkversion$ - true - true - true - 3239;$(WarningsAsErrors) - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - true - - - - - - - - - - - - - - 11 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx deleted file mode 100644 index 52b6649ca3..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx +++ /dev/null @@ -1,997 +0,0 @@ -// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ -// -// ******************************************************************************************************* -// @@@Instructions-Line1|To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click@@@ -// @@@Instructions-Line2|and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu.@@@ -// ******************************************************************************************************* -// -// @@@MoreAbout|For more about F#, see:@@@ -// https://fsharp.org -// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/ -// -// @@@SeeDocumentaton|To see this tutorial in documentation form, see:@@@ -// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tour -// -// @@@LearnMoreAbout|To learn more about applied F# programming, use@@@ -// https://fsharp.org/guides/enterprise/ -// https://fsharp.org/guides/cloud/ -// https://fsharp.org/guides/web/ -// https://fsharp.org/guides/data-science/ -// -// @@@ToInstall-Line1|To install the Visual F# Power Tools, use@@@ -// @@@ToInstall-Line2|'Tools' --> 'Extensions and Updates' --> `Online` and search@@@ -// -// @@@AdditionalTemplates-Line1|For additional templates to use with F#, see the 'Online Templates' in Visual Studio,@@@ -// @@@AdditionalTemplates-Line2|'New Project' --> 'Online Templates'@@@ - -// @@@SupportsComments|F# supports three kinds of comments:@@@ - -// @@@DoubleSlash|1. Double-slash comments. These are used in most situations.@@@ -(* @@@MLStyle|2. ML-style Block comments. These aren't used that often.@@@ *) -/// @@@TripleSlash-Line1|3. Triple-slash comments. These are used for documenting functions, types, and so on.@@@ -/// @@@TripleSlash-Line2|They will appear as text when you hover over something which is decorated with these comments.@@@ -/// -/// @@@XmlComments-Line1|They also support .NET-style XML comments, which allow you to generate reference documentation,@@@ -/// @@@XmlComments-Line2|and they also allow editors (such as Visual Studio) to extract information from them.@@@ -/// @@@XmlComments-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation@@@ - - -// @@@OpenNamespaces|Open namespaces using the 'open' keyword.@@@ -// -// @@@LearnMore|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword@@@ -open System - - -/// @@@Module-Line1|A module is a grouping of F# code, such as values, types, and function values.@@@ -/// @@@Module-Line2|Grouping code in modules helps keep related code together and helps avoid name conflicts in your program.@@@ -/// -/// @@@Module-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules@@@ -module IntegersAndNumbers = - - /// @@@SampleInt|This is a sample integer.@@@ - let sampleInteger = 176 - - /// @@@SampleFloat|This is a sample floating point number.@@@ - let sampleDouble = 4.1 - - /// @@@Computed-Line1|This computed a new number by some arithmetic. Numeric types are converted using@@@ - /// @@@Computed-Line2|functions 'int', 'double' and so on.@@@ - let sampleInteger2 = (sampleInteger/4 + 5 - 7) * 4 + int sampleDouble - - /// @@@ListNumbers|This is a list of the numbers from 0 to 99.@@@ - let sampleNumbers = [ 0 .. 99 ] - - /// @@@ListSquares|This is a list of all tuples containing all the numbers from 0 to 99 and their squares.@@@ - let sampleTableOfSquares = [ for i in 0 .. 99 -> (i, i*i) ] - - // @@@PrintList1|The next line prints a list that includes tuples, using '%A' for generic printing.@@@ - printfn "The table of squares from 0 to 99 is:\n%A" sampleTableOfSquares - - // @@@SampleIntType|This is a sample integer with a type annotation@@@ - let sampleInteger3: int = 1 - - -/// @@@ValuesImmutable-Line1|Values in F# are immutable by default. They cannot be changed@@@ -/// @@@ValuesImmutable-Line2|in the course of a program's execution unless explicitly marked as mutable.@@@ -/// -/// @@@ValuesImmutable-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable@@@ -module Immutability = - - /// @@@LetKeyword-Line1|Binding a value to a name via 'let' makes it immutable.@@@ - /// - /// @@@LetKeyword-Line2|The second line of code fails to compile because 'number' is immutable and bound.@@@ - /// @@@LetKeyword-Line3|Re-defining 'number' to be a different value is not allowed in F#.@@@ - let number = 2 - // let number = 3 - - /// @@@MutableKeyword|A mutable binding. This is required to be able to mutate the value of 'otherNumber'.@@@ - let mutable otherNumber = 2 - - printfn "'otherNumber' is %d" otherNumber - - // @@@MutableAssignment-Line1|When mutating a value, use '<-' to assign a new value.@@@ - // - // @@@MutableAssignment-Line2|You could not use '=' here for this purpose since it is used for equality@@@ - // @@@MutableAssignment-Line3|or other contexts such as 'let' or 'module'@@@ - otherNumber <- otherNumber + 1 - - printfn "'otherNumber' changed to be %d" otherNumber - - -/// @@@FunctionsModule-Line1|Much of F# programming consists of defining functions that transform input data to produce@@@ -/// @@@FunctionsModule-Line2|useful results.@@@ -/// -/// @@@FunctionsModule-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/@@@ -module BasicFunctions = - - /// @@@LetFunction-Line1|You use 'let' to define a function. This one accepts an integer argument and returns an integer.@@@ - /// @@@LetFunction-Line2|Parentheses are optional for function arguments, except for when you use an explicit type annotation.@@@ - let sampleFunction1 x = x*x + 3 - - /// @@@ApplyFunction-Line1|Apply the function, naming the function return result using 'let'.@@@ - /// @@@ApplyFunction-Line2|The variable type is inferred from the function return type.@@@ - let result1 = sampleFunction1 4573 - - // @@@printf-Line1|This line uses '%d' to print the result as an integer. This is type-safe.@@@ - // @@@printf-Line2|If 'result1' were not of type 'int', then the line would fail to compile.@@@ - printfn "The result of squaring the integer 4573 and adding 3 is %d" result1 - - /// @@@TypeAnnotation|When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required.@@@ - let sampleFunction2 (x:int) = 2*x*x - x/5 + 3 - - let result2 = sampleFunction2 (7 + 4) - printfn "The result of applying the 2nd sample function to (7 + 4) is %d" result2 - - /// @@@Conditionals-Line1|Conditionals use if/then/elid/elif/else.@@@ - /// - /// @@@Conditionals-Line2|Note that F# uses whitespace indentation-aware syntax, similar to languages like Python.@@@ - let sampleFunction3 x = - if x < 100.0 then - 2.0*x*x - x/5.0 + 3.0 - else - 2.0*x*x + x/5.0 - 37.0 - - let result3 = sampleFunction3 (6.5 + 4.5) - - // @@@printf-Line3|This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe.@@@ - printfn "The result of applying the 3rd sample function to (6.5 + 4.5) is %f" result3 - - -/// @@@Booleans-Line1|Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic.@@@ -/// -/// @@@Booleans-Line2|To learn more, see:@@@ -/// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/primitive-types -/// @@@Booleans-Line3|and@@@ -/// https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/symbol-and-operator-reference/boolean-operators -module Booleans = - - /// @@@BooleanValues|Booleans values are 'true' and 'false'.@@@ - let boolean1 = true - let boolean2 = false - - /// @@@BooleanOperators|Operators on booleans are 'not', '&&' and '||'.@@@ - let boolean3 = not boolean1 && (boolean2 || false) - - // @@@BooleanPrintf|This line uses '%b'to print a boolean value. This is type-safe.@@@ - printfn "The expression 'not boolean1 && (boolean2 || false)' is %b" boolean3 - - -/// @@@Strings-Line1|Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation.@@@ -/// -/// @@@Strings-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings@@@ -module StringManipulation = - - /// @@@StringQuotes|Strings use double quotes.@@@ - let string1 = "Hello" - let string2 = "world" - - /// @@@StringLiterals-Line1|Strings can also use @ to create a verbatim string literal.@@@ - /// @@@StringLiterals-Line2|This will ignore escape characters such as '\', '\n', '\t', etc.@@@ - let string3 = @"C:\Program Files\" - - /// @@@StringTripleQuotes|String literals can also use triple-quotes.@@@ - let string4 = """The computer said "hello world" when I told it to!""" - - /// @@@StringConcatenation|String concatenation is normally done with the '+' operator.@@@ - let helloWorld = string1 + " " + string2 - - // @@@StringPrinting|This line uses '%s' to print a string value. This is type-safe.@@@ - printfn "%s" helloWorld - - /// @@@Substrings-Line1|Substrings use the indexer notation. This line extracts the first 7 characters as a substring.@@@ - /// @@@Substrings-Line2|Note that like many languages, Strings are zero-indexed in F#.@@@ - let substring = helloWorld.[0..6] - printfn "%s" substring - - -/// @@@Tuples-Line1|Tuples are simple combinations of data values into a combined value.@@@ -/// -/// @@@Tuples-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples@@@ -module Tuples = - - /// @@@TupleInteger|A simple tuple of integers.@@@ - let tuple1 = (1, 2, 3) - - /// @@@TupleFunction-Line1|A function that swaps the order of two values in a tuple.@@@ - /// - /// @@@TupleFunction-Line2|F# Type Inference will automatically generalize the function to have a generic type,@@@ - /// @@@TupleFunction-Line3|meaning that it will work with any type.@@@ - let swapElems (a, b) = (b, a) - - printfn "The result of swapping (1, 2) is %A" (swapElems (1,2)) - - /// @@@TupleMultiType-Line1|A tuple consisting of an integer, a string,@@@ - /// @@@TupleMultiType-Line2|and a double-precision floating point number.@@@ - let tuple2 = (1, "fred", 3.1415) - - printfn "tuple1: %A\ttuple2: %A" tuple1 tuple2 - - /// @@@TupleTypeAnnotation-Line1|A simple tuple of integers with a type annotation.@@@ - /// @@@TupleTypeAnnotation-Line2|Type annotations for tuples use the * symbol to separate elements@@@ - let tuple3: int * int = (5, 9) - - /// @@@StructTuple-Line1|Tuples are normally objects, but they can also be represented as structs.@@@ - /// - /// @@@StructTuple-Line2|These interoperate completely with structs in C# and Visual Basic.NET; however,@@@ - /// @@@StructTuple-Line3|struct tuples are not implicitly convertable with object tuples (often called reference tuples).@@@ - /// - /// @@@StructTuple-Line4|The second line below will fail to compile because of this. Uncomment it to see what happens.@@@ - let sampleStructTuple = struct (1, 2) - //let thisWillNotCompile: (int*int) = struct (1, 2) - - // @@@TupleConvert-Line1|Although you cannot implicitly convert between struct tuples and reference tuples,@@@ - // @@@TupleConvert-Line2|you can explicitly convert via pattern matching, as demonstrated below.@@@ - let convertFromStructTuple (struct(a, b)) = (a, b) - let convertToStructTuple (a, b) = struct(a, b) - - printfn "Struct Tuple: %A\nReference tuple made from the Struct Tuple: %A" sampleStructTuple (sampleStructTuple |> convertFromStructTuple) - - -/// @@@Pipes-Line1|The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<')@@@ -/// @@@Pipes-Line2|are used extensively when processing data. These operators are themselves functions@@@ -/// @@@Pipes-Line3|which make use of Partial Application.@@@ -/// -/// @@@Pipes-Line4|To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining@@@ -/// @@@Pipes-Line5|To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments@@@ -module PipelinesAndComposition = - - /// @@@Squares|Squares a value.@@@ - let square x = x * x - - /// @@@AddOne|Adds 1 to a value.@@@ - let addOne x = x + 1 - - /// @@@TestOdd|Tests if an integer value is odd via modulo.@@@ - let isOdd x = x % 2 <> 0 - - /// @@@NumberList1|A list of 5 numbers. More on lists later.@@@ - let numbers = [ 1; 2; 3; 4; 5 ] - - /// @@@FilterWithoutPipes-Line1|Given a list of integers, it filters out the even numbers,@@@ - /// @@@FilterWithoutPipes-Line2|squares the resulting odds, and adds 1 to the squared odds.@@@ - let squareOddValuesAndAddOne values = - let odds = List.filter isOdd values - let squares = List.map square odds - let result = List.map addOne squares - result - - printfn "processing %A through 'squareOddValuesAndAddOne' produces: %A" numbers (squareOddValuesAndAddOne numbers) - - /// @@@FilterShorter-Line1|A shorter way to write 'squareOddValuesAndAddOne' is to nest each@@@ - /// @@@FilterShorter-Line2|sub-result into the function calls themselves.@@@ - /// - /// @@@FilterShorter-Line3|This makes the function much shorter, but it's difficult to see the@@@ - /// @@@FilterShorter-Line4|order in which the data is processed.@@@ - let squareOddValuesAndAddOneNested values = - List.map addOne (List.map square (List.filter isOdd values)) - - printfn "processing %A through 'squareOddValuesAndAddOneNested' produces: %A" numbers (squareOddValuesAndAddOneNested numbers) - - /// @@@FilterWithPipes-Line1|A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators.@@@ - /// @@@FilterWithPipes-Line2|This allows you to avoid creating intermediate results, but is much more readable@@@ - /// @@@FilterWithPipes-Line3|than nesting function calls like 'squareOddValuesAndAddOneNested'@@@ - let squareOddValuesAndAddOnePipeline values = - values - |> List.filter isOdd - |> List.map square - |> List.map addOne - - printfn "processing %A through 'squareOddValuesAndAddOnePipeline' produces: %A" numbers (squareOddValuesAndAddOnePipeline numbers) - - /// @@@PipeInLambda-Line1|You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call@@@ - /// @@@PipeInLambda-Line2|into the first, using a Lambda Function.@@@ - /// - /// @@@PipeInLambda-Line3|Note that pipelines are also being used inside the lambda function. F# pipe operators@@@ - /// @@@PipeInLambda-Line4|can be used for single values as well. This makes them very powerful for processing data.@@@ - let squareOddValuesAndAddOneShorterPipeline values = - values - |> List.filter isOdd - |> List.map(fun x -> x |> square |> addOne) - - printfn "processing %A through 'squareOddValuesAndAddOneShorterPipeline' produces: %A" numbers (squareOddValuesAndAddOneShorterPipeline numbers) - - /// @@@PipesComposition-Line1|Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>'@@@ - /// @@@PipesComposition-Line2|to compose the two core operations: filtering out even numbers, then squaring and adding one.@@@ - /// @@@PipesComposition-Line3|Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply@@@ - /// @@@PipesComposition-Line4|being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used@@@ - /// @@@PipesComposition-Line5|there as well.@@@ - /// - /// @@@PipesComposition-Line6|The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a@@@ - /// @@@PipesComposition-Line7|list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list@@@ - /// @@@PipesComposition-Line8|of integers, you'll notice that it produces the same results as previous functions.@@@ - /// - /// @@@PipesComposition-Line9|This is using what is known as function composition. This is possible because functions in F#@@@ - /// @@@PipesComposition-Line10|use Partial Application and the input and output types of each data processing operation match@@@ - /// @@@PipesComposition-Line11|the signatures of the functions we're using.@@@ - let squareOddValuesAndAddOneComposition = - List.filter isOdd >> List.map (square >> addOne) - - printfn "processing %A through 'squareOddValuesAndAddOneComposition' produces: %A" numbers (squareOddValuesAndAddOneComposition numbers) - - -/// @@@Lists-Line1|Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation.@@@ -/// -/// @@@Lists-Line2|This module shows various ways to generate lists and process lists with some functions@@@ -/// @@@Lists-Line3|in the 'List' module in the F# Core Library.@@@ -/// -/// @@@Lists-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists@@@ -module Lists = - - /// @@@ListEmptyDefinition|Lists are defined using [ ... ]. This is an empty list.@@@ - let list1 = [ ] - - /// @@@ListElementDefinition|This is a list with 3 elements. ';' is used to separate elements on the same line.@@@ - let list2 = [ 1; 2; 3 ] - - /// @@@ListNewlineElements|You can also separate elements by placing them on their own lines.@@@ - let list3 = [ - 1 - 2 - 3 - ] - - /// @@@NumberList2|This is a list of integers from 1 to 1000@@@ - let numberList = [ 1 .. 1000 ] - - /// @@@ListComputation-Line1|Lists can also be generated by computations. This is a list containing@@@ - /// @@@ListComputation-Line2|all the days of the year.@@@ - let daysList = - [ for month in 1 .. 12 do - for day in 1 .. System.DateTime.DaysInMonth(2017, month) do - yield System.DateTime(2017, month, day) ] - - // @@@PrintList2|Print the first 5 elements of 'daysList' using 'List.take'.@@@ - printfn "The first 5 days of 2017 are: %A" (daysList |> List.take 5) - - /// @@@ListComputationConditional-Line1|Computations can include conditionals. This is a list containing the tuples@@@ - /// @@@ListComputationConditional-Line2|which are the coordinates of the black squares on a chess board.@@@ - let blackSquares = - [ for i in 0 .. 7 do - for j in 0 .. 7 do - if (i+j) % 2 = 1 then - yield (i, j) ] - - /// @@@ListMap-Line1|Lists can be transformed using 'List.map' and other functional programming combinators.@@@ - /// @@@ListMap-Line2|This definition produces a new list by squaring the numbers in numberList, using the pipeline@@@ - /// @@@ListMap-Line3|operator to pass an argument to List.map.@@@ - let squares = - numberList - |> List.map (fun x -> x*x) - - /// @@@ListFilter-Line1|There are many other list combinations. The following computes the sum of the squares of the@@@ - /// @@@ListFilter-Line2|numbers divisible by 3.@@@ - let sumOfSquares = - numberList - |> List.filter (fun x -> x % 3 = 0) - |> List.sumBy (fun x -> x * x) - - printfn "The sum of the squares of numbers up to 1000 that are divisible by 3 is: %d" sumOfSquares - - -/// @@@Arrays-Line1|Arrays are fixed-size, mutable collections of elements of the same type.@@@ -/// -/// @@@Arrays-Line2|Although they are similar to Lists (they support enumeration and have similar combinators for data processing),@@@ -/// @@@Arrays-Line3|they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable.@@@ -/// -/// @@@Arrays-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays@@@ -module Arrays = - - /// @@@EmptyArray|This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead.@@@ - let array1 = [| |] - - /// @@@ArrayConstructionList|Arrays are specified using the same range of constructs as lists.@@@ - let array2 = [| "hello"; "world"; "and"; "hello"; "world"; "again" |] - - /// @@@ArrayConstructionRange|This is an array of numbers from 1 to 1000.@@@ - let array3 = [| 1 .. 1000 |] - - /// @@@ArrayComputationConstruction|This is an array containing only the words "hello" and "world".@@@ - let array4 = - [| for word in array2 do - if word.Contains("l") then - yield word |] - - /// @@@ArrayInit|This is an array initialized by index and containing the even numbers from 0 to 2000.@@@ - let evenNumbers = Array.init 1001 (fun n -> n * 2) - - /// @@@ArraySlicing|Sub-arrays are extracted using slicing notation.@@@ - let evenNumbersSlice = evenNumbers.[0..500] - - /// @@@ArrayLooping|You can loop over arrays and lists using 'for' loops.@@@ - for word in array4 do - printfn "word: %s" word - - // @@@ArrayAssignment-Line1|You can modify the contents of an an array element by using the left arrow assignment operator.@@@ - // - // @@@ArrayAssignment-Line2|To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables@@@ - array2.[1] <- "WORLD!" - - /// @@@ArrayMap-Line1|You can transform arrays using 'Array.map' and other functional programming operations.@@@ - /// @@@ArrayMap-Line2|The following calculates the sum of the lengths of the words that start with 'h'.@@@ - let sumOfLengthsOfWords = - array2 - |> Array.filter (fun x -> x.StartsWith "h") - |> Array.sumBy (fun x -> x.Length) - - printfn "The sum of the lengths of the words in Array 2 is: %d" sumOfLengthsOfWords - - -/// @@@Sequences-Line1|Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays.@@@ -/// -/// @@@Sequences-Line2|Sequences are evaluated on-demand and are re-evaluated each time they are iterated.@@@ -/// @@@Sequences-Line3|An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>.@@@ -/// -/// @@@Sequences-Line4|Sequence processing functions can be applied to Lists and Arrays as well.@@@ -/// -/// @@@Sequences-Line5|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences@@@ -module Sequences = - - /// @@@EmptySequence|This is the empty sequence.@@@ - let seq1 = Seq.empty - - /// @@@SequenceOfValues|This a sequence of values.@@@ - let seq2 = seq { yield "hello"; yield "world"; yield "and"; yield "hello"; yield "world"; yield "again" } - - /// @@@OnDemandSequence|This is an on-demand sequence from 1 to 1000.@@@ - let numbersSeq = seq { 1 .. 1000 } - - /// @@@SequenceComposition|This is a sequence producing the words "hello" and "world"@@@ - let seq3 = - seq { for word in seq2 do - if word.Contains("l") then - yield word } - - /// @@@SequenceInit|This sequence producing the even numbers up to 2000.@@@ - let evenNumbers = Seq.init 1001 (fun n -> n * 2) - - let rnd = System.Random() - - /// @@@InfiniteSequence-Line1|This is an infinite sequence which is a random walk.@@@ - /// @@@InfiniteSequence-Line2|This example uses yield! to return each element of a subsequence.@@@ - let rec randomWalk x = - seq { yield x - yield! randomWalk (x + rnd.NextDouble() - 0.5) } - - /// @@@Sequence100Elements|This example shows the first 100 elements of the random walk.@@@ - let first100ValuesOfRandomWalk = - randomWalk 5.0 - |> Seq.truncate 100 - |> Seq.toList - - printfn "First 100 elements of a random walk: %A" first100ValuesOfRandomWalk - - -/// @@@RecursiveFunctions-Line1|Recursive functions can call themselves. In F#, functions are only recursive@@@ -/// @@@RecursiveFunctions-Line2|when declared using 'let rec'.@@@ -/// -/// @@@RecursiveFunctions-Line3|Recursion is the preferred way to process sequences or collections in F#.@@@ -/// -/// @@@RecursiveFunctions-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions@@@ -module RecursiveFunctions = - - /// @@@RecFunDef-Line1|This example shows a recursive function that computes the factorial of an@@@ - /// @@@RecRunDef-Line2|integer. It uses 'let rec' to define a recursive function.@@@ - let rec factorial n = - if n = 0 then 1 else n * factorial (n-1) - - printfn "Factorial of 6 is: %d" (factorial 6) - - /// @@@RecGcd-Line1|Computes the greatest common factor of two integers.@@@ - /// - /// @@@RecGcd-Line2|Since all of the recursive calls are tail calls,@@@ - /// @@@RecGcd-Line3|the compiler will turn the function into a loop,@@@ - /// @@@RecGcd-Line4|which improves performance and reduces memory consumption.@@@ - let rec greatestCommonFactor a b = - if a = 0 then b - elif a < b then greatestCommonFactor a (b - a) - else greatestCommonFactor (a - b) b - - printfn "The Greatest Common Factor of 300 and 620 is %d" (greatestCommonFactor 300 620) - - /// @@@RecSumList|This example computes the sum of a list of integers using recursion.@@@ - let rec sumList xs = - match xs with - | [] -> 0 - | y::ys -> y + sumList ys - - /// @@@RecSumListTail|This makes 'sumList' tail recursive, using a helper function with a result accumulator.@@@ - let rec private sumListTailRecHelper accumulator xs = - match xs with - | [] -> accumulator - | y::ys -> sumListTailRecHelper (accumulator+y) ys - - /// @@@RecSumListTailInvoke-Line1|This invokes the tail recursive helper function, providing '0' as a seed accumulator.@@@ - /// @@@RecSumListTailInvoke-Line2|An approach like this is common in F#.@@@ - let sumListTailRecursive xs = sumListTailRecHelper 0 xs - - let oneThroughTen = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] - - printfn "The sum 1-10 is %d" (sumListTailRecursive oneThroughTen) - - -/// @@@Records-Line1|Records are an aggregate of named values, with optional members (such as methods).@@@ -/// @@@Records-Line2|They are immutable and have structural equality semantics.@@@ -/// -/// @@@Records-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records@@@ -module RecordTypes = - - /// @@@RecordDefinition|This example shows how to define a new record type.@@@ - type ContactCard = - { Name : string - Phone : string - Verified : bool } - - /// @@@RecordInstantiation1|This example shows how to instantiate a record type.@@@ - let contact1 = - { Name = "Alf" - Phone = "(206) 555-0157" - Verified = false } - - /// @@@RecordInstantiation2|You can also do this on the same line with ';' separators.@@@ - let contactOnSameLine = { Name = "Alf"; Phone = "(206) 555-0157"; Verified = false } - - /// @@@UpdateRecord-Line1|This example shows how to use "copy-and-update" on record values. It creates@@@ - /// @@@UpdateRecord-Line2|a new record value that is a copy of contact1, but has different values for@@@ - /// @@@UpdateRecord-Line3|the 'Phone' and 'Verified' fields.@@@ - /// - /// @@@UpdateRecord-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions@@@ - let contact2 = - { contact1 with - Phone = "(206) 555-0112" - Verified = true } - - /// @@@ProcessRecord-Line1|This example shows how to write a function that processes a record value.@@@ - /// @@@ProcessRecord-Line2|It converts a 'ContactCard' object to a string.@@@ - let showContactCard (c: ContactCard) = - c.Name + " Phone: " + c.Phone + (if not c.Verified then " (unverified)" else "") - - printfn "Alf's Contact Card: %s" (showContactCard contact1) - - /// @@@RecordWithMember-Line1|This is an example of a Record with a member.@@@ - type ContactCardAlternate = - { Name : string - Phone : string - Address : string - Verified : bool } - - /// @@@RecordWithMember-Line2|Members can implement object-oriented members.@@@ - member this.PrintedContactCard = - this.Name + " Phone: " + this.Phone + (if not this.Verified then " (unverified)" else "") + this.Address - - let contactAlternate = - { Name = "Alf" - Phone = "(206) 555-0157" - Verified = false - Address = "111 Alf Street" } - - // @@@RecordAccess|Members are accessed via the '.' operator on an instantiated type.@@@ - printfn "Alf's alternate contact card is %s" contactAlternate.PrintedContactCard - - /// @@@RecordStruct-Line1|Records can also be represented as structs via the 'Struct' attribute.@@@ - /// @@@RecordStruct-Line2|This is helpful in situations where the performance of structs outweighs@@@ - /// @@@RecordStruct-Line3|the flexibility of reference types.@@@ - [] - type ContactCardStruct = - { Name : string - Phone : string - Verified : bool } - - -/// @@@DiscriminatedUnions-Line1|Discriminated Unions (DU for short) are values which could be a number of named forms or cases.@@@ -/// @@@DiscriminatedUnions-Line2|Data stored in DUs can be one of several distinct values.@@@ -/// -/// @@@DiscriminatedUnions-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions@@@ -module DiscriminatedUnions = - - /// @@@CardSuit|The following represents the suit of a playing card.@@@ - type Suit = - | Hearts - | Clubs - | Diamonds - | Spades - - /// @@@CardRank|A Disciminated Union can also be used to represent the rank of a playing card.@@@ - type Rank = - /// @@@CardRankValue|Represents the rank of cards 2 .. 10@@@ - | Value of int - | Ace - | King - | Queen - | Jack - - /// @@@CardMember|Discriminated Unions can also implement object-oriented members.@@@ - static member GetAllRanks() = - [ yield Ace - for i in 2 .. 10 do yield Value i - yield Jack - yield Queen - yield King ] - - /// @@@CardType-Line1|This is a record type that combines a Suit and a Rank.@@@ - /// @@@CardType-Line2|It's common to use both Records and Disciminated Unions when representing data.@@@ - type Card = { Suit: Suit; Rank: Rank } - - /// @@@ComputeFullDeck|This computes a list representing all the cards in the deck.@@@ - let fullDeck = - [ for suit in [ Hearts; Diamonds; Clubs; Spades] do - for rank in Rank.GetAllRanks() do - yield { Suit=suit; Rank=rank } ] - - /// @@@CardToString|This example converts a 'Card' object to a string.@@@ - let showPlayingCard (c: Card) = - let rankString = - match c.Rank with - | Ace -> "Ace" - | King -> "King" - | Queen -> "Queen" - | Jack -> "Jack" - | Value n -> string n - let suitString = - match c.Suit with - | Clubs -> "clubs" - | Diamonds -> "diamonds" - | Spades -> "spades" - | Hearts -> "hearts" - rankString + " of " + suitString - - /// @@@PrintAllCards|This example prints all the cards in a playing deck.@@@ - let printAllCards() = - for card in fullDeck do - printfn "%s" (showPlayingCard card) - - // @@@SingleCaseDu-Line1|Single-case DUs are often used for domain modeling. This can buy you extra type safety@@@ - // @@@SingleCaseDu-Line2|over primitive types such as strings and ints.@@@ - // - // @@@SingleCaseDu-Line3|Single-case DUs cannot be implicitly converted to or from the type they wrap.@@@ - // @@@SingleCaseDu-Line4|For example, a function which takes in an Address cannot accept a string as that input,@@@ - // @@@SingleCaseDu-Line5|or vive/versa.@@@ - type Address = Address of string - type Name = Name of string - type SSN = SSN of int - - // @@@InstantiateSingleCaseDu|You can easily instantiate a single-case DU as follows.@@@ - let address = Address "111 Alf Way" - let name = Name "Alf" - let ssn = SSN 1234567890 - - /// @@@UnwrapSingleCaseDu|When you need the value, you can unwrap the underlying value with a simple function.@@@ - let unwrapAddress (Address a) = a - let unwrapName (Name n) = n - let unwrapSSN (SSN s) = s - - // @@@PrintSingleCaseDu|Printing single-case DUs is simple with unwrapping functions.@@@ - printfn "Address: %s, Name: %s, and SSN: %d" (address |> unwrapAddress) (name |> unwrapName) (ssn |> unwrapSSN) - - /// @@@DuRecursiveDef-Line1|Disciminated Unions also support recursive definitions.@@@ - /// - /// @@@DuRecursiveDef-Line2|This represents a Binary Search Tree, with one case being the Empty tree,@@@ - /// @@@DuRecursiveDef-Line3|and the other being a Node with a value and two subtrees.@@@ - type BST<'T> = - | Empty - | Node of value:'T * left: BST<'T> * right: BST<'T> - - /// @@@SearchBinaryTree-Line1|Check if an item exists in the binary search tree.@@@ - /// @@@SearchBinaryTree-Line2|Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false.@@@ - let rec exists item bst = - match bst with - | Empty -> false - | Node (x, left, right) -> - if item = x then true - elif item < x then (exists item left) // @@@CheckLeftSubtree|Check the left subtree.@@@ - else (exists item right) // @@@CheckRightSubtree|Check the right subtree.@@@ - - /// @@@BinaryTreeInsert-Line1|Inserts an item in the Binary Search Tree.@@@ - /// @@@BinaryTreeInsert-Line2|Finds the place to insert recursively using Pattern Matching, then inserts a new node.@@@ - /// @@@BinaryTreeInsert-Line3|If the item is already present, it does not insert anything.@@@ - let rec insert item bst = - match bst with - | Empty -> Node(item, Empty, Empty) - | Node(x, left, right) as node -> - if item = x then node // @@@BinaryTreeInsert-Line4|No need to insert, it already exists; return the node.@@@ - elif item < x then Node(x, insert item left, right) // @@@BinaryTreeInsert-Line5|Call into left subtree.@@@ - else Node(x, left, insert item right) // @@@BinaryTreeInsert-Line6|Call into right subtree.@@@ - - /// @@@DuStruct-Line1|Discriminated Unions can also be represented as structs via the 'Struct' attribute.@@@ - /// @@@DuStruct-Line2|This is helpful in situations where the performance of structs outweighs@@@ - /// @@@DuStruct-Line3|the flexibility of reference types.@@@ - /// - /// @@@DuStruct-Line4|However, there are two important things to know when doing this:@@@ - /// @@@DuStruct-Line5|1. A struct DU cannot be recursively-defined.@@@ - /// @@@DuStruct-Line6|2. A struct DU must have unique names for each of its cases.@@@ - [] - type Shape = - | Circle of radius: float - | Square of side: float - | Triangle of height: float * width: float - - -/// @@@PatternMatching-Line1|Pattern Matching is a feature of F# that allows you to utilize Patterns,@@@ -/// @@@PatternMatching-Line2|which are a way to compare data with a logical structure or structures,@@@ -/// @@@PatternMatching-Line3|decompose data into constituent parts, or extract information from data in various ways.@@@ -/// @@@PatternMatching-Line4|You can then dispatch on the "shape" of a pattern via Pattern Matching.@@@ -/// -/// @@@PatternMatching-Line5|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching@@@ -module PatternMatching = - - /// @@@PersonRecord|A record for a person's first and last name@@@ - type Person = { - First : string - Last : string - } - - /// @@@EmployeeDu|A Discriminated Union of 3 different kinds of employees@@@ - type Employee = - | Engineer of engineer: Person - | Manager of manager: Person * reports: List - | Executive of executive: Person * reports: List * assistant: Employee - - /// @@@CountEmployees-Line1|Count everyone underneath the employee in the management hierarchy,@@@ - /// @@@CountEmployees-Line2|including the employee.@@@ - let rec countReports(emp : Employee) = - 1 + match emp with - | Engineer(id) -> - 0 - | Manager(id, reports) -> - reports |> List.sumBy countReports - | Executive(id, reports, assistant) -> - (reports |> List.sumBy countReports) + countReports assistant - - - /// @@@FindDave-Line1|Find all managers/executives named "Dave" who do not have any reports.@@@ - /// @@@FindDave-Line2|This uses the 'function' shorthand to as a lambda expression.@@@ - let rec findDaveWithOpenPosition(emps : List) = - emps - |> List.filter(function - | Manager({First = "Dave"}, []) -> true // @@@MatchEmptyList|[] matches an empty list.@@@ - | Executive({First = "Dave"}, [], _) -> true - | _ -> false) // @@@MatchWildcard-Line1|'_' is a wildcard pattern that matches anything.@@@ - // @@@MatchWildCard-Line2|This handles the "or else" case.@@@ - - /// @@@MatchShorthand-Line1|You can also use the shorthand function construct for pattern matching,@@@ - /// @@@MatchShorthand-Line2|which is useful when you're writing functions which make use of Partial Application.@@@ - let private parseHelper f = f >> function - | (true, item) -> Some item - | (false, _) -> None - - let parseDateTimeOffset = parseHelper DateTimeOffset.TryParse - - let result = parseDateTimeOffset "1970-01-01" - match result with - | Some dto -> printfn "It parsed!" - | None -> printfn "It didn't parse!" - - // @@@ParseHelpers|Define some more functions which parse with the helper function.@@@ - let parseInt = parseHelper Int32.TryParse - let parseDouble = parseHelper Double.TryParse - let parseTimeSpan = parseHelper TimeSpan.TryParse - - // @@@ActivePatterns-Line1|Active Patterns are another powerful construct to use with pattern matching.@@@ - // @@@ActivePatterns-Line2|They allow you to partition input data into custom forms, decomposing them at the pattern match call site.@@@ - // - // @@@ActivePatterns-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns@@@ - let (|Int|_|) = parseInt - let (|Double|_|) = parseDouble - let (|Date|_|) = parseDateTimeOffset - let (|TimeSpan|_|) = parseTimeSpan - - /// @@@MatchActivePattern|Pattern Matching via 'function' keyword and Active Patterns often looks like this.@@@ - let printParseResult = function - | Int x -> printfn "%d" x - | Double x -> printfn "%f" x - | Date d -> printfn "%s" (d.ToString()) - | TimeSpan t -> printfn "%s" (t.ToString()) - | _ -> printfn "Nothing was parse-able!" - - // @@@PrintParse|Call the printer with some different values to parse.@@@ - printParseResult "12" - printParseResult "12.045" - printParseResult "12/28/2016" - printParseResult "9:01PM" - printParseResult "banana!" - - -/// @@@Option-Line1|Option values are any kind of value tagged with either 'Some' or 'None'.@@@ -/// @@@Option-Line2|They are used extensively in F# code to represent the cases where many other@@@ -/// @@@Option-Line3|languages would use null references.@@@ -/// -/// @@@Option-Line4|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options@@@ -module OptionValues = - - /// @@@ZipCode|First, define a zipcode defined via Single-case Discriminated Union.@@@ - type ZipCode = ZipCode of string - - /// @@@Customer|Next, define a type where the ZipCode is optional.@@@ - type Customer = { ZipCode: ZipCode option } - - /// @@@ShippingCalculator-Line1|Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code,@@@ - /// @@@ShippingCalculator-Line2|given implementations for the 'getState' and 'getShippingZone' abstract methods.@@@ - type ShippingCalculator = - abstract GetState : ZipCode -> string option - abstract GetShippingZone : string -> int - - /// @@@CalcShippingZone-Line1|Next, calculate a shipping zone for a customer using a calculator instance.@@@ - /// @@@CalcShippingZone-Line2|This uses combinators in the Option module to allow a functional pipeline for@@@ - /// @@@CalcShippingZone-Line3|transforming data with Optionals.@@@ - let CustomerShippingZone (calculator: ShippingCalculator, customer: Customer) = - customer.ZipCode - |> Option.bind calculator.GetState - |> Option.map calculator.GetShippingZone - - -/// @@@UnitsOfMeasure-Line1|Units of measure are a way to annotate primitive numeric types in a type-safe way.@@@ -/// @@@UnitsOfMeasure-Line2|You can then perform type-safe arithmetic on these values.@@@ -/// -/// @@@UnitsOfMeasure-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure@@@ -module UnitsOfMeasure = - - /// @@@CommonUnits|First, open a collection of common unit names@@@ - open Microsoft.FSharp.Data.UnitSystems.SI.UnitNames - - /// @@@DefineUnitConstant|Define a unitized constant@@@ - let sampleValue1 = 1600.0 - - /// @@@MileUnit|Next, define a new unit type@@@ - [] - type mile = - /// @@@MileToMeter|Conversion factor mile to meter.@@@ - static member asMeter = 1609.34 - - /// @@@DefineMileConstant|Define a unitized constant@@@ - let sampleValue2 = 500.0 - - /// @@@ComputeMileToMeter|Compute metric-system constant@@@ - let sampleValue3 = sampleValue2 * mile.asMeter - - // @@@PrintUnitsOfMeasure|Values using Units of Measure can be used just like the primitive numeric type for things like printing.@@@ - printfn "After a %f race I would walk %f miles which would be %f meters" sampleValue1 sampleValue2 sampleValue3 - - -/// @@@Classes-Line1|Classes are a way of defining new object types in F#, and support standard Object-oriented constructs.@@@ -/// @@@Classes-Line2|They can have a variety of members (methods, properties, events, etc.)@@@ -/// -/// @@@Classes-Line3|To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes@@@ -/// -/// @@@Classes-Line4|To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members@@@ -module DefiningClasses = - - /// @@@Vector-Line1|A simple two-dimensional Vector class.@@@ - /// - /// @@@Vector-Line2|The class's constructor is on the first line,@@@ - /// @@@Vector-Line3|and takes two arguments: dx and dy, both of type 'double'.@@@ - type Vector2D(dx : double, dy : double) = - - /// @@@ClassInternalField-Line1|This internal field stores the length of the vector, computed when the@@@ - /// @@@ClassInternalField-Line2|object is constructed@@@ - let length = sqrt (dx*dx + dy*dy) - - // @@@ThisKeyword-Line1|'this' specifies a name for the object's self identifier.@@@ - // @@@ThisKeyword-Line2|In instance methods, it must appear before the member name.@@@ - member this.DX = dx - - member this.DY = dy - - member this.Length = length - - /// @@@MemberMethod|This member is a method. The previous members were properties.@@@ - member this.Scale(k) = Vector2D(k * this.DX, k * this.DY) - - /// @@@InstantiateClass|This is how you instantiate the Vector2D class.@@@ - let vector1 = Vector2D(3.0, 4.0) - - /// @@@ScaledVector|Get a new scaled vector object, without modifying the original object.@@@ - let vector2 = vector1.Scale(10.0) - - printfn "Length of vector1: %f\nLength of vector2: %f" vector1.Length vector2.Length - - -/// @@@GenericClasses-Line1|Generic classes allow types to be defined with respect to a set of type parameters.@@@ -/// @@@GenericClasses-Line2|In the following, 'T is the type parameter for the class.@@@ -/// -/// @@@GenericClasses-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/@@@ -module DefiningGenericClasses = - - type StateTracker<'T>(initialElement: 'T) = - - /// @@@InternalField|This internal field store the states in a list.@@@ - let mutable states = [ initialElement ] - - /// @@@AddElement|Add a new element to the list of states.@@@ - member this.UpdateState newState = - states <- newState :: states // @@@MutableAssignment|use the '<-' operator to mutate the value.@@@ - - /// @@@History|Get the entire list of historical states.@@@ - member this.History = states - - /// @@@Current|Get the latest state.@@@ - member this.Current = states.Head - - /// @@@InferredTypeParameter|An 'int' instance of the state tracker class. Note that the type parameter is inferred.@@@ - let tracker = StateTracker 10 - - // @@@AddState|Add a state@@@ - tracker.UpdateState 17 - - -/// @@@Interfaces-Line1|Interfaces are object types with only 'abstract' members.@@@ -/// @@@Interfaces-Line2|Object types and object expressions can implement interfaces.@@@ -/// -/// @@@Interfaces-Line3|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces@@@ -module ImplementingInterfaces = - - /// @@@IDisposable|This is a type that implements IDisposable.@@@ - type ReadFile() = - - let file = new System.IO.StreamReader("readme.txt") - - member this.ReadLine() = file.ReadLine() - - // @@@IDisposableImplementation|This is the implementation of IDisposable members.@@@ - interface System.IDisposable with - member this.Dispose() = file.Close() - - - /// @@@IDisposableObjectExpression-Line1|This is an object that implements IDisposable via an Object Expression@@@ - /// @@@IDisposableObjectExpression-Line2|Unlike other languages such as C# or Java, a new type definition is not needed@@@ - /// @@@IDisposableObjectExpression-Line3|to implement an interface.@@@ - let interfaceImplementation = - { new System.IDisposable with - member this.Dispose() = printfn "disposed" } - - -/// @@@Parallel-Line1|The FSharp.Core library defines a range of parallel processing functions. Here@@@ -/// @@@Parallel-Line2|you use some functions for parallel processing over arrays.@@@ -/// -/// @@@Parallel-Line3|To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D@@@ -module ParallelArrayProgramming = - - /// @@@InputArray|First, an array of inputs.@@@ - let oneBigArray = [| 0 .. 100000 |] - - // @@@ExpensiveFunction|Next, define a functions that does some CPU intensive computation.@@@ - let rec computeSomeFunction x = - if x <= 2 then 1 - else computeSomeFunction (x - 1) + computeSomeFunction (x - 2) - - // @@@ParallelMap|Next, do a parallel map over a large input array.@@@ - let computeResults() = - oneBigArray - |> Array.Parallel.map (fun x -> computeSomeFunction (x % 20)) - - // @@@PrintParallel|Next, print the results.@@@ - printfn "Parallel computation results: %A" (computeResults()) - - - -/// @@@Events-Line1|Events are a common idiom for .NET programming, especially with WinForms or WPF applications.@@@ -/// -/// @@@Events-Line2|To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events@@@ -module Events = - - /// @@@SimpleEvent|First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger).@@@ - let simpleEvent = new Event() - - // @@@AddEventHandler1|Next, add handler to the event.@@@ - simpleEvent.Publish.Add( - fun x -> printfn "this handler was added with Publish.Add: %d" x) - - // @@@TriggerEvent|Next, trigger the event.@@@ - simpleEvent.Trigger(5) - - // @@@EventWithArgs|Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs).@@@ - let eventForDelegateType = new Event() - - // @@@AddEventHandler2|Next, add a handler for this new event.@@@ - eventForDelegateType.Publish.AddHandler( - EventHandler(fun _ _ -> printfn "this handler was added with Publish.AddHandler")) - - // @@@TriggerEventWithArgs|Next, trigger this event (note that sender argument should be set).@@@ - eventForDelegateType.Trigger(null, EventArgs.Empty) - - - -#if COMPILED -module BoilerPlateForForm = - [] - do () - do System.Windows.Forms.Application.Run() -#endif diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate deleted file mode 100644 index adb7d6e230..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Microsoft.FSharp.Tutorial - FSharp - 4.5 - 1 - true - Tutorial - true - true - - - - Tutorial.fsx - - - - NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - NuGet.VisualStudio.TemplateWizard - - - - - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf deleted file mode 100644 index 6de826791a..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Tato ukázka vás provede elementy jazyka F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Pokud chcete kód provést v nástroji F# Interactive, zvýrazněte oddíl kódu a stiskněte Alt-Enter nebo klikněte pravým tlačítkem myši - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - a vyberte Provést v Interactive. Okno F# Interactive můžete otevřít z nabídky Zobrazit. - - - - For more about F#, see: - Další informace o F# najdete na: - - - - To see this tutorial in documentation form, see: - Na tomto webu najdete tento kurz v podobě dokumentace: - - - - To learn more about applied F# programming, use - K získání dalších informací o použitém programovém kódu F# použijte - - - - To install the Visual F# Power Tools, use - K instalaci Visual F# Power Tools použijte - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - Nástroje --> Rozšíření a aktualizace --> Online a potom hledejte - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Další šablony, které můžete používat s F#, najdete tak, že v sadě Visual Studio vyberete Online šablony, - - - - 'New Project' --> 'Online Templates' - Nový projekt --> Online šablony. - - - - F# supports three kinds of comments: - F# podporuje tři typy komentářů: - - - - 1. Double-slash comments. These are used in most situations. - 1. Komentáře se dvěma lomítky. Ty se používají ve většině situací. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Blokové komentáře ve stylu ML. Ty se moc často nepoužívají. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Komentáře se třemi lomítky. Ty se používají k dokumentaci funkcí, typů a podobně. - - - - They will appear as text when you hover over something which is decorated with these comments. - Když na elementy s těmito komentáři nastavíte ukazatel myši, zobrazí se komentáře jako text. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Podporují se také komentáře XML ve stylu .NET, které umožňují generovat referenční dokumentaci. - - - - and they also allow editors (such as Visual Studio) to extract information from them. - Umožňují také, aby z nich editory (jako například Visual Studio) extrahovaly informace. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Otevírejte obory názvů pomocí klíčového slova open. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Modul je seskupení kódu F#, například hodnot, typů a hodnot funkcí. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Seskupování kódu do modulů pomáhá zachovat související kód pohromadě a vyhnout se v programu konfliktům názvů. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Toto je ukázkové celé číslo. - - - - This is a sample floating point number. - Toto je ukázkové číslo s plovoucí desetinnou čárkou. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Tady se pomocí aritmetiky vypočítalo nové číslo. Číselné typy se převádějí pomocí - - - - functions 'int', 'double' and so on. - funkcí int, double atd. - - - - This is a list of the numbers from 0 to 99. - Toto je seznam čísel od 0 do 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Toto je seznam všech řazených kolekcí členů obsahujících všechna čísla od 0 do 99 a jejich druhé mocniny. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Další řádek vytiskne seznam, který zahrnuje řazené kolekce členů, s použitím %A pro obecný tisk. - - - - This is a sample integer with a type annotation - Toto je ukázkové celé číslo s anotací typu. - - - - Values in F# are immutable by default. They cannot be changed - Hodnoty v F# jsou ve výchozím nastavení neměnné. Nedají se změnit - - - - in the course of a program's execution unless explicitly marked as mutable. - během provádění programu, pokud nejsou explicitně označené jako měnitelné. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Po navázání hodnoty na název pomocí klíčového slova „let“ se hodnota stane neměnnou. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Druhý řádek kódu nejde zkompilovat, protože proměnná number je neměnná a vázaná. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Předefinování položky number na jinou hodnotu se v jazyce F# nepovoluje. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Změnitelná vazba. Je to nutné, aby bylo možné měnit hodnotu otherNumber. - - - - When mutating a value, use '<-' to assign a new value. - Při změnách hodnoty použijte <- pro přiřazení nové hodnoty. - - - - You could not use '=' here for this purpose since it is used for equality - Znak = tady pro tento účel nemůžete použít, protože se používá pro rovnost - - - - or other contexts such as 'let' or 'module' - nebo jiné kontexty jako let nebo module - - - - Much of F# programming consists of defining functions that transform input data to produce - Velká část programování v F# spočívá v definování funkcí, které transformují vstupní data na - - - - useful results. - užitečné výsledky. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Pomocí klíčového slova „let“ můžete definovat funkci. Tato přebírá celočíselný argument a vrací celé číslo. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Závorky jsou pro argumenty funkce nepovinné – s výjimkou použití anotace explicitního typu. - - - - Apply the function, naming the function return result using 'let'. - Použití funkce a pojmenování výsledku vrácení funkce pomocí klíčového slova let - - - - The variable type is inferred from the function return type. - Typ proměnné je odvozený z návratového typu funkce. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Tento řádek používá %d k vytištění výsledku jako celého čísla. Je to typově bezpečné. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Pokud by result1 nebyl typu int, pak by se kompilace řádku nezdařila. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - V případě potřeby anotujte typ názvu parametru pomocí (argument:typ). Závorky jsou povinné. - - - - Conditionals use if/then/elid/elif/else. - Podmíněné výrazy používají příkazy if, then, elid, elif, else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Všimněte si, že F# používá syntaxi rozpoznávající odsazení pomocí mezer – je to podobné jako u jazyků, jako je Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Tento řádek používá %f k vytištění výsledku jako hodnoty s plovoucí desetinnou čárkou. Stejně jako u výše uvedeného parametru %d je to typově bezpečné. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Logické hodnoty představují základní datové typy v jazyce F#. Tady je několik příkladů logických hodnot a podmíněné logiky. - - - - To learn more, see: - Další informace: - - - - and - a - - - - Booleans values are 'true' and 'false'. - Logické hodnoty jsou true a false. - - - - Operators on booleans are 'not', '&&' and '||'. - Operátory u logických hodnot jsou not, && a ||. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Tento řádek používá %b k vytištění logické hodnoty. Je to typově bezpečné. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Řetězce představují základní datové typy v jazyce F#. Tady je několik příkladů řetězců a základní manipulace s nimi. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Pro řetězce se používají dvojité uvozovky. - - - - Strings can also use @ to create a verbatim string literal. - V řetězcích je také možné použít @ k vytvoření řetězcového literálu verbatim. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Tím se budou ignorovat řídicí znaky jako \, \n, \t apod. - - - - String literals can also use triple-quotes. - Řetězcové literály můžou používat také trojité uvozovky. - - - - String concatenation is normally done with the '+' operator. - Zřetězení se obvykle provádí operátorem +. - - - - This line uses '%s' to print a string value. This is type-safe. - Tento řádek používá %s k vytištění řetězcové hodnoty. Je to typově bezpečné. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Podřetězce používají notaci indexeru. Tento řádek extrahuje prvních 7 znaků jako podřetězec. - - - - Note that like many languages, Strings are zero-indexed in F#. - Všimněte si, že jako v mnoha jiných jazycích mají řetězce v jazyce F# nulový index. - - - - Tuples are simple combinations of data values into a combined value. - Řazená kolekce členů představuje jedinou hodnotu vytvořenou jednoduchým zkombinováním hodnot dat. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Jednoduchá řazená kolekce členů v podobě celých čísel. - - - - A function that swaps the order of two values in a tuple. - Funkce, která zamění pořadí dvou hodnot v řazené kolekci členů - - - - F# Type Inference will automatically generalize the function to have a generic type, - Odvození typu proměnné v jazyce F# automaticky generalizuje funkci tak, aby byla obecného typu, - - - - meaning that it will work with any type. - což znamená, že bude fungovat s jakýmkoli typem. - - - - A tuple consisting of an integer, a string, - Řazená kolekce členů skládající se z celého čísla, řetězce - - - - and a double-precision floating point number. - a čísla s plovoucí desetinnou čárkou a dvojitou přesností - - - - A simple tuple of integers with a type annotation. - Jednoduchá řazená kolekce členů celých čísel s anotací typu - - - - Type annotations for tuples use the * symbol to separate elements - Anotace typů pro řazené kolekce členů používají k oddělování elementů symbol *. - - - - Tuples are normally objects, but they can also be represented as structs. - Řazené kolekce členů jsou obvykle objekty, ale můžou být vyjádřeny i jako struktury. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Ty zcela spolupracují se strukturami v jazycích C# a Visual Basic .NET. Platí ale, že - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - řazené kolekce členů představující struktury nejsou implicitně převeditelné na řazené kolekce členů představující objekty (často označované jako řazené kolekce členů odkazů). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Kompilace druhého řádku uvedeného níže se z tohoto důvodu nezdaří. Odkomentujte ho a podívejte se, co se stane. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Mezi řazenými kolekcemi členů představujícími struktury a řazenými kolekcemi členů odkazů nemůžete provést implicitní převod, - - - - you can explicitly convert via pattern matching, as demonstrated below. - ale můžete převod provést explicitně přes porovnávání vzorů, jak je znázorněno níže. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Operátory kanálu (|>, <| atd.) a operátory složení (>>, <<) v jazyce F# - - - - are used extensively when processing data. These operators are themselves functions - se při zpracovávání dat používají ve velkém měřítku. Tyto operátory představují samy o sobě funkce, - - - - which make use of Partial Application. - které využívají částečné použití argumentů. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Další informace o těchto operátorech: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Další informace o částečném použití argumentů: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Umocní hodnotu na druhou. - - - - Adds 1 to a value. - Přičte 1 k hodnotě. - - - - Tests if an integer value is odd via modulo. - Otestuje, jestli je celočíselná hodnota lichá na základě zbytku po dělení. - - - - A list of 5 numbers. More on lists later. - Seznam 5 čísel. Více o seznamech později. - - - - Given a list of integers, it filters out the even numbers, - V daném seznamu celých čísel odfiltruje sudá čísla, - - - - squares the resulting odds, and adds 1 to the squared odds. - umocní výsledná lichá čísla na druhou a přičte 1 k lichým číslům umocněným na druhou. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Kratší způsob, jak napsat squareOddValuesAndAddOne, je vnořit jednotlivé - - - - sub-result into the function calls themselves. - dílčí výsledky přímo do volání funkcí. - - - - This makes the function much shorter, but it's difficult to see the - Díky tomu může být funkce mnohem kratší, ale je obtížné sledovat - - - - order in which the data is processed. - pořadí, v jakém se data zpracovávají. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Preferovaným způsobem, jak napsat squareOddValuesAndAddOne, je použití operátorů kanálu v jazyce F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - To vám umožní vyhnout se vytváření mezivýsledků, ale je to mnohem čitelnější - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - než vnoření volání funkcí, jak je vidět v squareOddValuesAndAddOneNested. - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Můžete zkrátit squareOddValuesAndAddOnePipeline přesunutím druhého volání List.map - - - - into the first, using a Lambda Function. - do prvního, pomocí funkce lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Všimněte si, že kanály se používají i ve funkci lambda. Operátory kanálu v jazyce F# - - - - can be used for single values as well. This makes them very powerful for processing data. - se dají použít i pro jednotlivé hodnoty. Díky tomu jsou velmi efektivní při zpracovávání dat. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - A konečně, můžete eliminovat nutnost explicitně převzít values jako parametr pomocí >> - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - s cílem sestavit dvě základní operace: odfiltrování sudých čísel a následné umocnění na druhou a přičtení jedné. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Obdobně není nutná část výrazu lambda „fun x -> ...“, protože x se jednoduše - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - v tomto oboru definuje tak, aby ho bylo možné předat jako funkční kanál. Proto je tam >> možné použít - - - - there as well. - také. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Výsledek squareOddValuesAndAddOneComposition je sám o sobě další funkcí, která přebírá - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - jako vstup seznam celých čísel. Pokud provedete squareOddValuesAndAddOneComposition se seznamem - - - - of integers, you'll notice that it produces the same results as previous functions. - celých čísel, všimnete si, že dává stejné výsledky jako předchozí funkce. - - - - This is using what is known as function composition. This is possible because functions in F# - Označuje se to jako složení funkcí. Je to možné, protože funkce v jazyce F# - - - - use Partial Application and the input and output types of each data processing operation match - používají částečné použití argumentů a vstupní a výstupní typy každé operace zpracování dat odpovídají - - - - the signatures of the functions we're using. - signaturám funkcí, které používáme. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Seznamy jsou uspořádané, neměnné a jednorázově propojené. Velmi dynamicky se vyhodnocují. - - - - This module shows various ways to generate lists and process lists with some functions - Tento modul zobrazuje různé způsoby, jak generovat seznamy a jak je zpracovat pomocí některých funkcí - - - - in the 'List' module in the F# Core Library. - v modulu List v knihovně F# Core. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Seznamy se definují pomocí syntaxe [ ... ]. Toto je prázdný seznam. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Toto je seznam se 3 elementy. K oddělení prvků na stejném řádku se používá středník (;). - - - - You can also separate elements by placing them on their own lines. - Elementy můžete oddělit i jejich umístěním na samostatné řádky. - - - - This is a list of integers from 1 to 1000 - Toto je seznam celých čísel od 1 do 1000 - - - - Lists can also be generated by computations. This is a list containing - Seznamy je možné generovat pomocí výpočtů. Toto je seznam obsahující - - - - all the days of the year. - všechny dny v roce. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Vytiskněte prvních 5 elementů daysList pomocí List.take. - - - - Computations can include conditionals. This is a list containing the tuples - Výpočty můžou obsahovat podmíněné výrazy. Toto je seznam obsahující řazené kolekce členů - - - - which are the coordinates of the black squares on a chess board. - což jsou souřadnice černých polí na šachovnici. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Seznamy se dají transformovat pomocí souboru List.map a dalších funkčních programových kombinátorů. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Tato definice vytvoří nový seznam vypočítáním druhých mocnin hodnot v seznamu numberList pomocí kanálu - - - - operator to pass an argument to List.map. - operátor pro předání argumentu do souboru List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Existuje mnoho dalších kombinací seznamů. Následující kód vypočítá součet druhých mocnin - - - - numbers divisible by 3. - čísel dělitelných 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Pole jsou měnitelné kolekce s pevně stanovenou velikostí, které obsahují elementy stejného typu. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - I když se podobají seznamům (podporují výčet a mají podobné kombinátory pro zpracování dat), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - jsou obecně rychlejší a podporují rychlý náhodný přístup. Nevýhodou je nižší zabezpečení, protože je možné je měnit. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Toto je prázdné pole. Všimněte si, že syntaxe je podobná seznamům, ale používá se [| ... |]. - - - - Arrays are specified using the same range of constructs as lists. - Pole jsou definovaná pomocí stejného rozsahu konstruktorů jako seznamy. - - - - This is an array of numbers from 1 to 1000. - Toto je pole čísel od 1 do 1000. - - - - This is an array containing only the words "hello" and "world". - Toto je pole obsahující pouze slova hello a world. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Toto je pole inicializované indexem, které obsahuje sudá čísla od 0 do 2000. - - - - Sub-arrays are extracted using slicing notation. - Dílčí pole se extrahují pomocí slicingové notace. - - - - You can loop over arrays and lists using 'for' loops. - Přes pole a seznamy se můžete přesunovat pomocí smyček for. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Můžete upravit obsah elementu pole pomocí operátoru přiřazení s šipkou doleva. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Další informace o tomto operátoru: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Pole můžete transformovat pomocí Array.map a dalších funkčních programových operací. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Následující kód vypočítá součet délek slov, která začínají na „h“. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sekvence jsou logické řady elementů, které jsou všechny stejného typu. Jedná se o obecnější typ než seznamy a pole. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sekvence se vyhodnocují na vyžádání a při každé iteraci se vyhodnocují znovu. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Sekvence F# je alias pro .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funkce na zpracování sekvencí je možné použít také na seznamy a pole. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Toto je prázdná sekvence. - - - - This a sequence of values. - Toto je sekvence hodnot. - - - - This is an on-demand sequence from 1 to 1000. - Toto je sekvence na vyžádání od 1 do 1000. - - - - This is a sequence producing the words "hello" and "world" - Toto je sekvence, která vrátí slova hello a world - - - - This sequence producing the even numbers up to 2000. - Tato sekvence vrátí sudá čísla až do 2000. - - - - This is an infinite sequence which is a random walk. - Toto je nekonečná sekvence, která je náhodnou funkcí walk. - - - - This example uses yield! to return each element of a subsequence. - Tento příklad vrací pomocí příkazu yield! jednotlivé elementy dílčí sekvence. - - - - This example shows the first 100 elements of the random walk. - Tento příklad ukazuje prvních 100 elementů náhodné funkce walk. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Rekurzivní funkce můžou volat samy sebe. V F# jsou všechny funkce rekurzivní - - - - when declared using 'let rec'. - při deklarování pomocí let rec. - - - - Recursion is the preferred way to process sequences or collections in F#. - Rekurze je preferovaný způsob zpracování sekvencí nebo kolekcí v jazyce F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Tento příklad ukazuje rekurzivní funkci, která vypočítá faktoriál - - - - integer. It uses 'let rec' to define a recursive function. - integer. Pomocí let rec se definuje rekurzivní funkce. - - - - Computes the greatest common factor of two integers. - Vypočítá největšího společného dělitele dvou celých čísel. - - - - Since all of the recursive calls are tail calls, - Vzhledem k tomu, že všechna rekurzivní volání jsou volání funkce Tail, - - - - the compiler will turn the function into a loop, - kompilátor změní funkci na smyčku, - - - - which improves performance and reduces memory consumption. - což zvyšuje výkon a snižuje spotřebu paměti. - - - - This example computes the sum of a list of integers using recursion. - Tento příklad zjistí součet seznamu celých čísel pomocí rekurze. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Tím se funkce Tail sumList stane rekurzivní, a to s použitím pomocné funkce s akumulátorem výsledků. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Tím se vyvolá rekurzivní pomocná funkce Tail, poskytující 0 jako zdrojový akumulátor. - - - - An approach like this is common in F#. - Takový postup je v jazyce F# běžný. - - - - Records are an aggregate of named values, with optional members (such as methods). - Záznamy jsou agregátem pojmenovaných hodnot s volitelnými členy (jako jsou metody). - - - - They are immutable and have structural equality semantics. - Jsou neměnné a mají sémantiku se strukturální rovností. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Tento příklad ukazuje, jak definovat nový typ záznamu. - - - - This example shows how to instantiate a record type. - Tento příklad ukazuje, jak vytvořit instanci typu záznamu. - - - - You can also do this on the same line with ';' separators. - Můžete to udělat i na stejném řádku se středníky (;) jako oddělovači. - - - - This example shows how to use "copy-and-update" on record values. It creates - Tento příklad ukazuje, jak použít copy-and-update pro hodnoty záznamu. Vytvoří - - - - a new record value that is a copy of contact1, but has different values for - hodnotu nového záznamu, která je kopií záznamu contact1, ale má jiné hodnoty pro - - - - the 'Phone' and 'Verified' fields. - pole Telefon a Ověřeno. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Tento příklad ukazuje, jak napsat funkci, která zpracuje hodnotu záznamu. - - - - It converts a 'ContactCard' object to a string. - Převádí objekt ContactCard na řetězec. - - - - This is an example of a Record with a member. - Toto je příklad záznamu se členem. - - - - Members can implement object-oriented members. - Členové můžou implementovat objektově orientované členy. - - - - Members are accessed via the '.' operator on an instantiated type. - Ke členům se přistupuje prostřednictvím operátoru „.“ u typu tvořícího instanci. - - - - Records can also be represented as structs via the 'Struct' attribute. - Záznamy můžou být vyjádřeny i jako struktury prostřednictvím atributu Struct. - - - - This is helpful in situations where the performance of structs outweighs - To je užitečné v situacích, kdy má výkon struktur větší váhu než - - - - the flexibility of reference types. - flexibilita odkazových typů. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Rozlišovaná sjednocení (zkratka: DU) jsou hodnoty, které můžou představovat celou řadu pojmenovaných forem nebo případů. - - - - Data stored in DUs can be one of several distinct values. - Data uložená v DU můžou představovat jednu z několika různých hodnot. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Následující příklad představuje barvu hrací karty. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Rozlišované sjednocení může také představovat hodnotu hrací karty. - - - - Represents the rank of cards 2 .. 10 - Představuje hodnotu karet 2 .. 10. - - - - Discriminated Unions can also implement object-oriented members. - Rozlišovaná sjednocení můžou také implementovat objektově orientované členy. - - - - This is a record type that combines a Suit and a Rank. - Toto je typ záznamu, který kombinuje barvu a hodnotu hrací karty. - - - - It's common to use both Records and Disciminated Unions when representing data. - Při vyjadřování dat se běžně používají záznamy i rozlišovaná sjednocení. - - - - This computes a list representing all the cards in the deck. - Tady se vypočítá seznam představující všechny karty z balíčku. - - - - This example converts a 'Card' object to a string. - Tento příklad převede objekt Card na řetězec. - - - - This example prints all the cards in a playing deck. - Tento příklad vytiskne všechny karty v hracím balíčku. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Rozlišovaná sjednocení s jedním případem se často používají pro modelování domén. Tím můžete získat dodatečnou bezpečnost typů - - - - over primitive types such as strings and ints. - oproti primitivním typům, jako jsou řetězce a celá čísla. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Rozlišovaná sjednocení s jedním případem nejde implicitně převést na typ nebo z typu, který obalují. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Například funkce, která přebírá adresu, nemůže jako vstup převzít řetězec - - - - or vive/versa. - a naopak. - - - - You can easily instantiate a single-case DU as follows. - Instanci rozlišovaného sjednocení s jedním případem můžete snadno vytvořit následujícím způsobem. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Pokud danou hodnotu potřebujete, můžete základní hodnotu rozbalit pomocí jednoduché funkce. - - - - Printing single-case DUs is simple with unwrapping functions. - Tisk rozlišovaných sjednocení s jedním případem je jednoduchý s použitím rozbalovacích funkcí. - - - - Disciminated Unions also support recursive definitions. - Rozlišovaná sjednocení podporují i rekurzivní definice. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Toto představuje binární vyhledávací strom, přičemž jeden případ je prázdný strom - - - - and the other being a Node with a value and two subtrees. - a druhý je uzel s hodnotou a dvěma podstromy. - - - - Check if an item exists in the binary search tree. - Zkontroluje, jestli položka existuje v binárním vyhledávacím stromu. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Rekurzivně vyhledává porovnáváním vzorů. Vrátí hodnotu true, pokud existuje; v opačném případě false. - - - - Check the left subtree. - Zkontroluje levý podstrom. - - - - Check the right subtree. - Zkontroluje pravý podstrom. - - - - Inserts an item in the Binary Search Tree. - Vloží položku do binárního vyhledávacího stromu. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Najde místo pro rekurzivní vložení pomocí porovnávání vzorů a pak vloží nový uzel. - - - - If the item is already present, it does not insert anything. - Pokud je už položka přítomna, nevloží nic. - - - - No need to insert, it already exists; return the node. - Nemusí se vkládat, už existuje; vrátí se uzel. - - - - Call into left subtree. - Provede volání do levého podstromu. - - - - Call into right subtree. - Provede volání do pravého podstromu. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Rozlišovaná sjednocení můžou být vyjádřena i jako struktury prostřednictvím atributu Struct. - - - - This is helpful in situations where the performance of structs outweighs - To je užitečné v situacích, kdy má výkon struktur větší váhu než - - - - the flexibility of reference types. - flexibilita odkazových typů. - - - - However, there are two important things to know when doing this: - Při tomto postupu je ale třeba vědět dvě důležité věci: - - - - 1. A struct DU cannot be recursively-defined. - 1. Rozlišované sjednocení typu struktura nemůže být definované rekurzivně. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Rozlišované sjednocení typu struktura musí mít jedinečné názvy pro každý ze svých případů. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Porovnávání vzorů je funkce jazyka F#, která umožňuje používat vzory, - - - - which are a way to compare data with a logical structure or structures, - což představuje způsob, jak porovnávat data s logickou strukturou nebo strukturami, - - - - decompose data into constituent parts, or extract information from data in various ways. - jak rozložit data na základní části nebo extrahovat informace z dat různými způsoby. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Odesílání pak můžete provádět na základě vzoru v rámci porovnávání vzorů. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Záznam pro jméno a příjmení daného člověka - - - - A Discriminated Union of 3 different kinds of employees - Rozlišované sjednocení se 3 různými typy zaměstnanců - - - - Count everyone underneath the employee in the management hierarchy, - Spočítají se všichni zaměstnanci pod daným zaměstnancem v hierarchii řízení, - - - - including the employee. - včetně tohoto zaměstnance. - - - - Find all managers/executives named "Dave" who do not have any reports. - Vyhledá všechny nadřízené/výkonné pracovníky se jménem Dave, kteří nemají žádné podřízené. - - - - This uses the 'function' shorthand to as a lambda expression. - Tady se používá zkrácený název function jako výraz lambda. - - - - [] matches an empty list. - [] odpovídá prázdnému seznamu. - - - - '_' is a wildcard pattern that matches anything. - „_“ je zástupný vzor, kterému odpovídá úplně všechno. - - - - This handles the "or else" case. - Toto řeší případ „or else“ - - - - You can also use the shorthand function construct for pattern matching, - Můžete také použít zkrácenou konstrukci function pro porovnávání vzorů, - - - - which is useful when you're writing functions which make use of Partial Application. - což je užitečné při psaní funkcí, které využívají částečné použití argumentů. - - - - Define some more functions which parse with the helper function. - Definujte pár dalších funkcí, které se analyzují s pomocnou funkcí. - - - - Active Patterns are another powerful construct to use with pattern matching. - Aktivní vzory představují další efektivní konstrukci pro použití s porovnáváním vzorů. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Umožňují rozdělit vstupní data do vlastních forem, přičemž se rozkládají v místě volání porovnávání vzorů. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Porovnávání vzorů přes klíčové slovo function a aktivní vzory často vypadá takto. - - - - Call the printer with some different values to parse. - Volání tiskárny s nějakými jinými hodnotami k parsování - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Hodnotami parametru můžou být hodnoty jakéhokoliv typu s označením Some (Nějaké) nebo None (Žádné). - - - - They are used extensively in F# code to represent the cases where many other - Používají se často v kódu F#, kde reprezentují případy, ve kterých by se v řadě jiných - - - - languages would use null references. - jazyků používaly odkazy null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Nejprve definujte PSČ prostřednictvím rozlišovaného sjednocení s jedním případem. - - - - Next, define a type where the ZipCode is optional. - Dále definujte typ, kde je PSČ volitelné. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Potom definujte typ rozhraní, který bude představovat objekt pro výpočet expediční oblasti pro PSČ zákazníka - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - se zohledněním implementací pro abstraktní metody getState a getShippingZone. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Dále vypočítejte expediční oblast pro zákazníka pomocí instance kalkulačky. - - - - This uses combinators in the Option module to allow a functional pipeline for - Tady se používají kombinátory v modulu Option, pomocí kterých se povoluje funkční kanál pro - - - - transforming data with Optionals. - transformaci dat s volitelnými hodnotami. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Měrné jednotky jsou způsob, jak anotovat primitivní číselné typy typově bezpečnou metodou. - - - - You can then perform type-safe arithmetic on these values. - Pak u těchto hodnot můžete provádět typově bezpečnou aritmetiku. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Nejdříve otevřete kolekci běžných názvů jednotek. - - - - Define a unitized constant - Definovat unifikovanou konstantu - - - - Next, define a new unit type - Potom definujte nový typ jednotky - - - - Conversion factor mile to meter. - Přepočtový koeficient pro přepočet mílí na metry - - - - Define a unitized constant - Definovat unifikovanou konstantu - - - - Compute metric-system constant - Vypočítat konstantu v metrickém systému - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Hodnoty s měrnými jednotkami je možné používat stejně jako primitivní číselný typ pro operace, jako je tisk. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Třídy představují způsob definice nových objektových typů v jazyce F# a podporují standardní objektově orientované konstrukce. - - - - They can have a variety of members (methods, properties, events, etc.) - Můžou mít celou řadu členů (metody, vlastnosti, události atd.). - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Další informace o třídách: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Další informace o členech: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Jednoduchá dvojrozměrná vektorová třída. - - - - The class's constructor is on the first line, - Konstruktor třídy je na prvním řádku - - - - and takes two arguments: dx and dy, both of type 'double'. - a přebírá dva argumenty: dx a dy, oba typu double. - - - - This internal field stores the length of the vector, computed when the - Toto interní pole ukládá délku vektoru vypočítanou při - - - - object is constructed - zkonstruování objektu - - - - 'this' specifies a name for the object's self identifier. - this určuje název identifikátoru samotného objektu. - - - - In instance methods, it must appear before the member name. - V metodách instancí se musí objevovat před názvem člena. - - - - This member is a method. The previous members were properties. - Tento člen je metoda. Předchozí členové představují vlastnosti. - - - - This is how you instantiate the Vector2D class. - Toto je způsob, jak vytvořit instanci třídy Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Získá nový škálovaný vektorový objekt, aniž by se změnil původní objekt. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Obecné třídy umožňují definování typů s ohledem na sadu parametrů typu. - - - - In the following, 'T is the type parameter for the class. - V následujícím příkladu „T“ představuje parametr typu pro třídu. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Toto interní pole ukládá stavy v seznamu. - - - - Add a new element to the list of states. - Přidá nový element do seznamu stavů. - - - - use the '<-' operator to mutate the value. - Použije operátor <- ke změně (mutaci) hodnoty. - - - - Get the entire list of historical states. - Získá celý seznam historických stavů. - - - - Get the latest state. - Získá nejnovější stav. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Instance int třídy pro sledování stavů. Poznámka: Parametr typu je odvozený. - - - - Add a state - Přidat stav - - - - Interfaces are object types with only 'abstract' members. - Rozhraní jsou typy objektů pouze s členy abstract. - - - - Object types and object expressions can implement interfaces. - Objektové typy a výrazy můžou implementovat rozhraní. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Toto je typ, který implementuje rozhraní IDisposable. - - - - This is the implementation of IDisposable members. - Toto je implementace členů IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Toto je objekt, který implementuje IDisposable pomocí výrazu objektu. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Na rozdíl od jiných jazyků, jako jsou C# nebo Java, není nutná nová definice typu - - - - to implement an interface. - pro implementaci rozhraní. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - Knihovna FSharp.Core definuje rozsah funkcí paralelního zpracování. Tady - - - - you use some functions for parallel processing over arrays. - použijete některé funkce pro paralelní zpracování polí. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Další informace: https://msdn.microsoft.com/cs-cz/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Nejdříve pole vstupů. - - - - Next, define a functions that does some CPU intensive computation. - Dále definujte funkci, která bude provádět výpočty náročné na procesor. - - - - Next, do a parallel map over a large input array. - Dále proveďte paralelní mapování přes velké vstupní pole. - - - - Next, print the results. - Potom vytiskněte výsledky. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Události jsou běžné základní struktury programového kódu .NET, zejména s aplikacemi WinForms nebo WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Další informace: https://docs.microsoft.com/cs-cz/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Nejdříve vytvořte instanci objektu Event, který se bude skládat z bodu odběru (event.Publish) a aktivační události (event.Trigger). - - - - Next, add handler to the event. - Potom přidejte obslužnou rutinu pro událost. - - - - Next, trigger the event. - Potom spusťte událost. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Potom vytvořte instanci objektu Event podle standardní konvence .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Dále přidejte obslužnou rutinu pro tuto novou událost. - - - - Next, trigger this event (note that sender argument should be set). - Potom spusťte tuto událost (poznámka: musí být nastavený argument odesílatele). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf deleted file mode 100644 index 0908855049..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Dieses Beispiel zeigt Ihnen verschiedene Elemente der F#-Programmiersprache. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Markieren Sie zum Ausführen des Codes in F# Interactive einen Codeabschnitt, und drücken Sie dann entweder ALT+EINGABETASTE oder klicken Sie mit der rechten Maustaste - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - und wählen Sie "In Interactive ausführen" aus. Sie können das F# Interactive-Fenster über das Menü "Ansicht" öffnen. - - - - For more about F#, see: - Weitere Informationen zu F# finden Sie unter: - - - - To see this tutorial in documentation form, see: - Dieses Tutorial ist auch als Dokumentation verfügbar. Siehe hierzu: - - - - To learn more about applied F# programming, use - Verwenden Sie Folgendes, um weitere Informationen zur praktischen F#-Programmierung zu erhalten: - - - - To install the Visual F# Power Tools, use - Verwenden Sie Folgendes, um die Visual F# Power Tools zu installieren: - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - "Extras" > "Erweiterungen und Updates" > "Online", und suchen Sie nach - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Weitere Vorlagen zum Verwenden mit F# finden Sie in Visual Studio unter "Onlinevorlagen", - - - - 'New Project' --> 'Online Templates' - "Neue Projekte" > "Onlinevorlagen". - - - - F# supports three kinds of comments: - F# unterstützt drei Arten von Kommentaren: - - - - 1. Double-slash comments. These are used in most situations. - 1. Kommentare mit doppeltem Schrägstrich. Diese werden in den meisten Situationen verwendet. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Blockkommentare im ML-Stil. Diese werden nicht sehr häufig verwendet. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Kommentare mit drei Schrägstrichen. Diese werden zum Dokumentieren von Funktionen, Typen usw. verwendet. - - - - They will appear as text when you hover over something which is decorated with these comments. - Sie erscheinen als Text, wenn Sie den Mauszeiger über einem Element positionieren, das mit diesen Kommentaren versehen ist. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Sie bieten außerdem Unterstützung für XML-Kommentare im .NET-Stil zum Generieren von Referenzdokumentation, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - und sie ermöglichen das Extrahieren von Informationen über Editoren (z.B. Visual Studio). - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/xml-documentation. - - - - Open namespaces using the 'open' keyword. - Öffnen Sie Namespaces mit dem Schlüsselwort "open". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Weitere Informationen finden Sie hier: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword. - - - - A module is a grouping of F# code, such as values, types, and function values. - Ein Modul ist eine Gruppierung von F#-Code, z.B. Werte, Typen und Funktionswerte. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Die Codegruppierung in Modulen ermöglicht das Zusammenfassen von zueinander in Beziehung stehendem Code sowie das Vermeiden von Namenskonflikten in Ihrem Programm. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/modules. - - - - This is a sample integer. - Dies ist ein Beispiel für eine Ganzzahl. - - - - This is a sample floating point number. - Dies ist ein Beispiel für eine Gleitkommazahl. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Hier wird mithilfe einer arithmetischen Operation eine neue Zahl berechnet. Numerische Typen werden unter Verwendung der - - - - functions 'int', 'double' and so on. - Funktionen "int", "double" usw. konvertiert. - - - - This is a list of the numbers from 0 to 99. - Dies ist eine Liste der Zahlen von 0 bis 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Dies ist eine Liste aller Tupel, die alle Zahlen von 0 bis 99 sowie Ihre Quadratzahlen enthalten. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Die nächste Zeile gibt eine Liste mit Tupeln aus, wobei "%A" für die generische Ausgabe verwendet wird. - - - - This is a sample integer with a type annotation - Dies ist ein Beispiel für eine ganze Zahl mit einer Typanmerkung. - - - - Values in F# are immutable by default. They cannot be changed - Werte in F# sind standardmäßig unveränderlich. Sie können im Verlauf - - - - in the course of a program's execution unless explicitly marked as mutable. - der Ausführung eines Programms nicht geändert werden – es sei denn, sie sind explizit als änderbar gekennzeichnet. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Wenn ein Wert mithilfe von "let" an einen Namen gebunden wird, ist er unveränderlich. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Die zweite Codezeile kann nicht kompiliert werden, da "number" unveränderlich und gebunden ist. - - - - Re-defining 'number' to be a different value is not allowed in F#. - "number" darf in F# nicht als ein anderer Wert neu definiert werden. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Eine veränderliche Bindung. Dies ist erforderlich, damit der Wert von "otherNumber" verändert werden kann. - - - - When mutating a value, use '<-' to assign a new value. - Wenn Sie einen Wert verändern, weisen Sie mithilfe von "<-" einen neuen Wert zu. - - - - You could not use '=' here for this purpose since it is used for equality - Sie können "=" hier nicht verwenden, da es für Gleichheit verwendet wird. - - - - or other contexts such as 'let' or 'module' - oder andere Kontexte wie "let" oder "module" - - - - Much of F# programming consists of defining functions that transform input data to produce - Bei der F#-Programmierung werden größtenteils Funktionen definiert, die Eingabedaten in hilfreiche - - - - useful results. - Ergebnisse umwandelt. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Verwenden Sie "let", um eine Funktion zu definieren. Diese akzeptiert ein Integer-Argument und gibt einen Integer zurück. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Klammern sind für Funktionsargumente optional, außer wenn Sie eine explizite Typanmerkung verwenden. - - - - Apply the function, naming the function return result using 'let'. - Die Funktion anwenden, und das Rückgabeergebnis der Funktion mithilfe von "let" benennen. - - - - The variable type is inferred from the function return type. - Der Variablentyp wird vom Rückgabetyp der Funktion abgeleitet. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Diese Zeile verwendet "%d", um das Ergebnis als Integer zu drucken. Dies ist typsicher. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Wenn "result1" nicht vom Typ "int" wäre, käme es bei der Kompilierung der Zeile zu einem Fehler. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Blenden Sie bei Bedarf den Typ eines Parameternamens mithilfe von "(argument:type)" ein. Klammern sind erforderlich. - - - - Conditionals use if/then/elid/elif/else. - Für Bedingungen wird Folgendes verwendet: if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Bei der Syntax von F# werden ebenso wie bei Sprachen wie Python leerzeichenbasierte Einzüge beachtet. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Diese Zeile verwendet "%f", um das Ergebnis als float-Eigenschaft zu drucken. Wie auch zuvor bei "%d" ist dies typsicher. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Boolesche Werte sind grundlegende Datentypen in F#. Hier finden Sie einige Beispiele für boolesche Werte und Bedingungen. - - - - To learn more, see: - Weitere Informationen finden Sie unter: - - - - and - Und - - - - Booleans values are 'true' and 'false'. - Boolesche Werte sind "true" und "false". - - - - Operators on booleans are 'not', '&&' and '||'. - Operatoren für boolesche Werte sind "not", "&&" und "||". - - - - This line uses '%b'to print a boolean value. This is type-safe. - Diese Zeile verwendet "%b" zum Drucken eines booleschen Werts. Dies ist typsicher. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Zeichenfolgen sind grundlegende Datentypen in F#. Hier finden Sie einige Beispiele für Zeichenfolgen und Zeichenfolgenmanipulationen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Für Zeichenfolgen werden doppelte Anführungszeichen verwendet. - - - - Strings can also use @ to create a verbatim string literal. - Mit "@" lassen sich ausführliche Zeichenfolgenliterale erstellen. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Dadurch werden Escapezeichen wie "\", "\n", "\t" usw. ignoriert. - - - - String literals can also use triple-quotes. - Für Zeichenfolgen können auch dreifache Anführungszeichen verwendet werden. - - - - String concatenation is normally done with the '+' operator. - Die Verkettung von Zeichenfolgen erfolgt in der Regel mit dem Operator "+". - - - - This line uses '%s' to print a string value. This is type-safe. - Diese Zeile verwendet "%s" zum Drucken eines Zeichenfolgewerts. Dies ist typsicher. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Für Teilzeichenfolgen wird die Indexernotation verwendet. Diese Zeile extrahiert die ersten sieben Zeichen als Teilzeichenfolge. - - - - Note that like many languages, Strings are zero-indexed in F#. - Im Gegensatz zu den meisten anderen Sprachen sind Zeichenfolgen in F# nullindiziert. - - - - Tuples are simple combinations of data values into a combined value. - Tupel sind einfache Datenwertkombinationen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Ein einfaches Tupel aus Integerwerten. - - - - A function that swaps the order of two values in a tuple. - Eine Funktion, die die Reihenfolge von zwei Werten in einem Tupel austauscht. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Der F#-Typrückschluss generalisiert die Funktion automatisch und erstellt einen generischen Typ, - - - - meaning that it will work with any type. - d. h. er funktioniert mit jedem Typ. - - - - A tuple consisting of an integer, a string, - Ein Tupel aus einem Integer, einer Zeichenfolge - - - - and a double-precision floating point number. - und einer Gleitkommazahl mit doppelter Genauigkeit. - - - - A simple tuple of integers with a type annotation. - Ein einfaches Tupel aus Integerwerten mit einer Typanmerkung. - - - - Type annotations for tuples use the * symbol to separate elements - Typanmerkungen für Tupel trennen Elemente durch das *-Symbol. - - - - Tuples are normally objects, but they can also be represented as structs. - Tupel sind normalerweise Objekte, sie können aber auch als Strukturen dargestellt werden. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Sie arbeiten mit Strukturen in C# und Visual Basic.Net vollständig zusammen. - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - Strukturtupel sind jedoch nicht implizit mit Objekttupeln (häufig als Referenztupel bezeichnet) konvertierbar. - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Die unten angezeigte zweite Zeile kann aus diesem Grund nicht kompiliert werden. Heben Sie die Auskommentierung auf, und sehen Sie, was passiert. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Sie können zwar nicht implizit zwischen Strukturtupeln und Verweistupeln konvertieren, - - - - you can explicitly convert via pattern matching, as demonstrated below. - Sie können aber wie unten gezeigt eine explizite Konvertierung über den Musterabgleich durchführen. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Die F#-PipeOperatoren ("|>", "<|" usw.) und die F#-Zusammensetzungsoperatoren (">>", "<<") - - - - are used extensively when processing data. These operators are themselves functions - werden bei der Datenverarbeitung umfassend eingesetzt. Diese Operatoren sind Funktionen, - - - - which make use of Partial Application. - die die partielle Anwendung nutzen. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Weitere Informationen zu diesen Operatoren finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Weitere Informationen zur partiellen Anwendung finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Quadriert einen Wert. - - - - Adds 1 to a value. - Addiert 1 zu einem Wert hinzu. - - - - Tests if an integer value is odd via modulo. - Testet mit Modulo, ob ein Integerwert gerade ist. - - - - A list of 5 numbers. More on lists later. - Eine Liste mit fünf Nummern. Weitere Informationen zu Listen finden Sie später. - - - - Given a list of integers, it filters out the even numbers, - Aus einer Liste mit Integern werden die geraden Zahlen herausgefiltert, - - - - squares the resulting odds, and adds 1 to the squared odds. - die sich ergebenden ungeraden Zahlen werden quadratiert, und zu dem Ergebnis wird 1 hinzuaddiert. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Eine kürzere Möglichkeit zum Schreiben von "squareOddValuesAndAddOne" besteht im Verschachteln von jedem - - - - sub-result into the function calls themselves. - Teilergebnis im Funktionsaufruf selbst. - - - - This makes the function much shorter, but it's difficult to see the - Dadurch wird die Funktion viel kürzer, - - - - order in which the data is processed. - die Reihenfolge der Datenverarbeitung ist jedoch schlechter sichtbar. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Eine bevorzugte Möglichkeit zum Schreiben von "squareOddValuesAndAddOne" besteht in der Verwendung von F#-Pipe-Operatoren. - - - - This allows you to avoid creating intermediate results, but is much more readable - Dadurch können Sie verhindern, dass Zwischenergebnisse erstellt werden, dies ist jedoch besser lesbar - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - als verschachtelte Funktionsaufrufe wie "squareOddValuesAndAddOneNested". - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Sie können "squareOddValuesAndAddOnePipeline" kürzen, indem Sie den zweiten "List.map"-Aufruf - - - - into the first, using a Lambda Function. - mithilfe einer Lambda-Funktion in den ersten verschieben. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Pipelines werden auch innerhalb der Lambda-Funktion verwendet. F#-Pipe-Operatoren - - - - can be used for single values as well. This makes them very powerful for processing data. - können auch für einzelne Werte verwendet werden. So ist eine leistungsstarke Datenverarbeitung möglich. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Es ist nicht mehr erforderlich, "values" als Parameter aufzunehmen, indem Sie mithilfe von ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - die beiden zentralen Vorgänge erstellen: Herausfiltern von geraden Zahlen, Quadratieren und Addieren von 1. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Der Teil "fun x -> ..." des Lambdaausdrucks ist dementsprechend ebenfalls nicht erforderlich, da "x" lediglich - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - in dem Bereich definiert wird, damit es an eine Funktionspipeline übergeben werden kann. Daher kann ">>" - - - - there as well. - dort ebenfalls verwendet werden. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Das Ergebnis von "squareOddValuesAndAddOneComposition" selbst ist eine andere Funktion, die eine - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - Liste von Integern als Eingabe verwendet. Wenn Sie "squareOddValuesAndAddOneComposition" mit einer Liste - - - - of integers, you'll notice that it produces the same results as previous functions. - von Integern ausführen, erhalten Sie das gleiche Ergebnis wie bei vorherigen Funktionen. - - - - This is using what is known as function composition. This is possible because functions in F# - Dabei wird die so genannte Funktionskomposition verwendet. Das ist möglich, da Funktionen in F# - - - - use Partial Application and the input and output types of each data processing operation match - die partielle Anwendung nutzen, und die Ein- und Ausgabetypen jedes Datenverarbeitungsvorgangs - - - - the signatures of the functions we're using. - mit den Signaturen der verwendeten Funktionen übereinstimmen. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Listen sind geordnete, unveränderliche, einfach verknüpfte Listen. Ihre Auswertung ist streng. - - - - This module shows various ways to generate lists and process lists with some functions - Dieses Modul zeigt verschiedene Möglichkeiten zum Erstellen von Listen und Prozesslisten mit einigen Funktionen - - - - in the 'List' module in the F# Core Library. - im Modul "List" in der F#-Kernbibliothek. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Listen werden mithilfe von "[ ... ]" definiert. Dies ist eine leere Liste. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Dies ist eine Liste mit drei Elementen. ";" dient dazu, Elemente in der gleichen Zeile zu trennen. - - - - You can also separate elements by placing them on their own lines. - Sie können Elemente auch trennen, indem Sie sie in separaten Zeilen einfügen. - - - - This is a list of integers from 1 to 1000 - Dies ist eine Liste mit ganzen Zahlen von 1 bis 1000. - - - - Lists can also be generated by computations. This is a list containing - Listen können auch mithilfe von Berechnungen generiert werden. Dies ist eine Liste mit - - - - all the days of the year. - allen Tagen des Jahres. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Drucken Sie mithilfe von "List.take" die ersten fünf Elemente in "daysList". - - - - Computations can include conditionals. This is a list containing the tuples - Berechnungen können Bedingungen enthalten. Dies ist eine Liste mit den Tupeln, - - - - which are the coordinates of the black squares on a chess board. - bei denen es sich um die Koordinaten der schwarzen Felder auf einem Schachbrett handelt. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listen können mithilfe von "List.map" und anderen funktionalen Programmierkombinatoren umgewandelt werden. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Diese Definition erzeugt eine neue Liste, indem die Zahlen in "numberList" quadriert werden. Dabei wird der Pipeline- - - - - operator to pass an argument to List.map. - Operator verwendet, um ein Argument an "List.map" zu übergeben. - - - - There are many other list combinations. The following computes the sum of the squares of the - Es stehen noch viele andere Listenkombinationen zur Verfügung. Mit dem Folgenden wird die Summe der Quadrate der - - - - numbers divisible by 3. - durch 3 teilbaren Zahlen berechnet. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Arrays sind veränderliche Sammlungen fester Größe, die Elemente des gleichen Typs enthalten. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Sie ähneln Listen (sie unterstützen Enumeration und haben ähnliche Combinators für die Datenverarbeitung), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - sind im Allgemeinen jedoch schneller und unterstützen einen schnellen wahlfreien Zugriff. Dafür sind sie jedoch weniger sicher, da sie veränderlich sind. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Dies ist das leere Array. Die Syntax ähnelt der von Listen, verwendet jedoch stattdessen "[| ... |]". - - - - Arrays are specified using the same range of constructs as lists. - Arrays werden mithilfe der gleichen Konstrukte angegeben wie Listen. - - - - This is an array of numbers from 1 to 1000. - Dies ist ein Array mit Zahlen von 1 bis 1000. - - - - This is an array containing only the words "hello" and "world". - Dieses Array enthält nur die Wörter "hello" und "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Dieses Array wurde per Index initialisiert und enthält gerade Zahlen von 0 bis 2000. - - - - Sub-arrays are extracted using slicing notation. - Teilarrays werden mithilfe der Segmentnotation extrahiert. - - - - You can loop over arrays and lists using 'for' loops. - Mit For-Schleifen können Sie bei Arrays und Listen Schleifen ausführen. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Sie können die Inhalte eines Arrayelements mithilfe des Zuweisungsoperators "Pfeil nach links" ändern. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Weitere Informationen zu diesem Operator finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Sie können Arrays mithilfe von "Array.map" und anderen funktionalen Programmiervorgängen umwandeln. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Mit Folgendem wird die Summe der Längen von Wörtern berechnet, die mit "h" beginnen. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sequenzen sind logische Serien von Elementen, die alle vom gleichen Typ sind. Ihr Typ ist allgemeiner als Listen und Arrays. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sequenzen werden bei Bedarf ausgewertet und bei jeder Iteration erneut ausgewertet. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Eine F#-Sequenz ist ein Alias für .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funktionen mit Sequenzverarbeitung können auch auf Listen und Arrays angewendet werden. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Dies ist die leere Sequenz. - - - - This a sequence of values. - Dies ist eine Sequenz mit Werten. - - - - This is an on-demand sequence from 1 to 1000. - Dies ist eine bedarfsbasierte Sequenz von 1 bis 1000. - - - - This is a sequence producing the words "hello" and "world" - Diese Sequenz generiert die Wörter "hello" und "world". - - - - This sequence producing the even numbers up to 2000. - Diese Sequenz erzeugt gerade Zahlen bis 2000. - - - - This is an infinite sequence which is a random walk. - Dies ist eine unendliche Sequenz und ermöglicht Zufallsdurchläufe. - - - - This example uses yield! to return each element of a subsequence. - In diesem Beispiel werden mithilfe von "yield!" die einzelnen Elemente einer Untersequenz zurückgegeben. - - - - This example shows the first 100 elements of the random walk. - Dieses Beispiel zeigt die ersten 100 Elemente des Zufallsdurchlaufs. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Rekursive Funktionen können sich selbst aufrufen. In F# sind Funktionen nur rekursiv, - - - - when declared using 'let rec'. - für die Deklaration mithilfe von "let rec". - - - - Recursion is the preferred way to process sequences or collections in F#. - Rekursion ist die bevorzugte Möglichkeit zum Verarbeiten von Sequenzen oder Sammlungen in F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Dieses Beispiel zeigt eine rekursive Funktion, die die Fakultät einer ganzen - - - - integer. It uses 'let rec' to define a recursive function. - Zahl berechnet. Zum Definieren einer rekursiven Funktion wird "let rec" verwendet. - - - - Computes the greatest common factor of two integers. - Berechnet den höchsten gemeinsamen Faktor von zwei Integern. - - - - Since all of the recursive calls are tail calls, - Da alle rekursiven Aufrufe Endeaufrufe sind, - - - - the compiler will turn the function into a loop, - wandelt der Compiler die Funktion in eine Schleife um, - - - - which improves performance and reduces memory consumption. - was die Leistung verbessert und die Arbeitsspeicherbedarf reduziert. - - - - This example computes the sum of a list of integers using recursion. - Dieses Beispiel berechnet mithilfe von Rekursion die Summe einer Liste von Integern. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Mithilfe einer Hilfsfunktion mit einem Ergebnisakkumulator wird "sumList" endrekursiv. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Dies ruft die endrekursive Hilfsfunktion auf und verwendet "0" als Startwertakkumulator. - - - - An approach like this is common in F#. - Dies ist eine häufige Vorgehensweise in F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Datensätze sind ein Aggregat aus benannten Werten mit optionalen Membern (wie etwa Methoden). - - - - They are immutable and have structural equality semantics. - Sie sind nicht veränderlich und verfügen über eine strukturelle Gleichheitssemantik. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Dieses Beispiel zeigt, wie ein neuer Datensatztyp definiert wird. - - - - This example shows how to instantiate a record type. - In diesem Beispiel erfahren Sie, wie Sie einen Datensatztyp instanziieren. - - - - You can also do this on the same line with ';' separators. - Das ist in der gleichen Zeile auch mit dem Trennzeichen ";" möglich. - - - - This example shows how to use "copy-and-update" on record values. It creates - Dieses Beispiel zeigt die Verwendung von "Kopieren und aktualisieren" für Datensatzwerte. Es wird - - - - a new record value that is a copy of contact1, but has different values for - ein neuer Datensatz als Kopie von "contact1" erstellt, der jedoch über andere Werte - - - - the 'Phone' and 'Verified' fields. - für die Felder "Phone" und "Verified" verfügt. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Dieses Beispiel veranschaulicht das Schreiben einer Funktion zum Verarbeiten eines Datensatzwerts. - - - - It converts a 'ContactCard' object to a string. - Es konvertiert ein Objekt vom Typ "ContactCard" in eine Zeichenfolge. - - - - This is an example of a Record with a member. - Dies ist ein Beispiel für einen Datensatz mit einem Member. - - - - Members can implement object-oriented members. - Member können objektorientierte Member implementieren. - - - - Members are accessed via the '.' operator on an instantiated type. - Auf Member wird über den Operator "." in einem instanziierten Typ zugegriffen. - - - - Records can also be represented as structs via the 'Struct' attribute. - Datensätze können mithilfe des Attributs "Struct" auch als Strukturen dargestellt werden. - - - - This is helpful in situations where the performance of structs outweighs - Dies ist in Situationen hilfreich, in denen die Leistung der Strukturen wichtiger ist als - - - - the flexibility of reference types. - die Flexibilität der Verweistypen. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Diskriminierte Unions (DUs) sind Werte, die eine Anzahl benannter Formen oder Fälle sein können. - - - - Data stored in DUs can be one of several distinct values. - In DUs gespeicherte Daten können einer von verschiedenen eindeutigen Werten sein. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Folgendes stellt die Farbe einer Spielkarte dar. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Eine diskriminierte Union kann auch verwendet werden, um den Rang einer Spielkarte darzustellen. - - - - Represents the rank of cards 2 .. 10 - Stellt den Rang der Karten 2 bis 10 dar 10 - - - - Discriminated Unions can also implement object-oriented members. - Diskriminierte Unions können objektorientierte Member implementieren. - - - - This is a record type that combines a Suit and a Rank. - Dieser Datensatztyp kombiniert eine Farbe und einen Rang. - - - - It's common to use both Records and Disciminated Unions when representing data. - Beim Darstellen von Daten werden häufig sowohl Datensätze als auch diskriminierte Unions verwendet. - - - - This computes a list representing all the cards in the deck. - Dies berechnet eine Liste mit allen Karten im Stapel. - - - - This example converts a 'Card' object to a string. - Dieses Beispiel konvertiert ein Objekt vom Typ "Card" in eine Zeichenfolge. - - - - This example prints all the cards in a playing deck. - Dieses Beispiel gibt alle Karten in einem Kartenstapel aus. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Einzelfall-DUs werden häufig für die Domänenmodellierung verwendet. Dadurch erhalten Sie zusätzliche Typsicherheit - - - - over primitive types such as strings and ints. - für primitive Typen wie Zeichenfolgen und Integer. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Eine implizite Konvertierung von Einzelfall-DUs in den umschlossenen Typ oder aus diesem Typ ist nicht möglich. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Beispielsweise eine Funktion, die eine Adresse akzeptiert, kann keine Zeichenfolge als Eingabe akzeptieren - - - - or vive/versa. - (oder umgekehrt). - - - - You can easily instantiate a single-case DU as follows. - Sie können Einzelfall-DUs folgendermaßen instanziieren. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Wenn Sie den Wert benötigen, können Sie den zugrunde liegenden Wert mit einer einfachen Funktion entpacken. - - - - Printing single-case DUs is simple with unwrapping functions. - Mit entpackten Funktionen lassen sich Einzelfall-DUs einfach drucken. - - - - Disciminated Unions also support recursive definitions. - Diskriminierte Unions unterstützen auch rekursive Definitionen. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Dies stellt eine Struktur für die Binärsuche dar, wobei ein Fall eine leere Struktur ist - - - - and the other being a Node with a value and two subtrees. - und der andere Fall einen Knoten mit einem Wert und zwei Unterstrukturen darstellt. - - - - Check if an item exists in the binary search tree. - Prüfen Sie, ob die Struktur für die Binärsuche ein Element enthält. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Sucht rekursiv mithilfe des Musterabgleichs. Gibt bei vorhandenem Element "true" aus, andernfalls "false". - - - - Check the left subtree. - Prüfen Sie die linke Unterstruktur. - - - - Check the right subtree. - Prüfen Sie die rechte Unterstruktur. - - - - Inserts an item in the Binary Search Tree. - Fügt in die Struktur für die Binärsuche ein Element ein. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Findet die Position für das rekursive Einfügen mithilfe des Musterabgleichs und fügt anschließend einen neuen Knoten ein. - - - - If the item is already present, it does not insert anything. - Wenn das Element bereits vorhanden ist, wird nichts eingefügt. - - - - No need to insert, it already exists; return the node. - Einfügen nicht erforderlich, da bereits vorhanden; Knoten zurückgeben. - - - - Call into left subtree. - Aufruf in linker Unterstruktur. - - - - Call into right subtree. - Aufruf in rechter Unterstruktur. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Diskriminierte Unions können mithilfe des Attributs "Struct" auch als Struktur dargestellt werden. - - - - This is helpful in situations where the performance of structs outweighs - Dies ist in Situationen hilfreich, in denen die Leistung der Strukturen wichtiger ist als - - - - the flexibility of reference types. - die Flexibilität der Verweistypen. - - - - However, there are two important things to know when doing this: - Dabei sind jedoch zwei Punkte zu beachten: - - - - 1. A struct DU cannot be recursively-defined. - 1. Eine Struktur-DU kann nicht rekursiv definiert werden. - - - - 2. A struct DU must have unique names for each of its cases. - 2. In einer Struktur-DU muss jeder Fall einen eindeutigen Namen haben. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Der Musterabgleich ist eine Funktion von F#, die Ihnen die Verwendung von Mustern ermöglicht, - - - - which are a way to compare data with a logical structure or structures, - die eine Möglichkeit sind, um Daten mit logischen Strukturen oder Strukturen zu vergleichen, - - - - decompose data into constituent parts, or extract information from data in various ways. - Daten in ihre Einzelteile zu zerlegen oder auf verschiedene Weise Informationen aus Daten zu extrahieren. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Das Verteilen ist anschließend mithilfe des Musterabgleichs anhand der Form eines Musters möglich. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Ein Datensatz für den Vor- und Nachnamen einer Person - - - - A Discriminated Union of 3 different kinds of employees - Eine diskriminierte Union mit drei verschiedenen Arten von Mitarbeitern - - - - Count everyone underneath the employee in the management hierarchy, - Zählen Sie alle Personen unterhalb des Angestellten in der Verwaltungshierarchie, - - - - including the employee. - einschließlich des Angestellten. - - - - Find all managers/executives named "Dave" who do not have any reports. - Suchen Sie alle Manager/Führungskräfte mit dem Namen "Dave", die über keine Berichte verfügen. - - - - This uses the 'function' shorthand to as a lambda expression. - Dies verwendet die Kurzform "function" als Lambdaausdruck. - - - - [] matches an empty list. - [] entspricht einer leeren Liste. - - - - '_' is a wildcard pattern that matches anything. - "_" ist ein Platzhaltermuster, das mit allem übereinstimmt - - - - This handles the "or else" case. - Dies behandelt den "or else"-Fall. - - - - You can also use the shorthand function construct for pattern matching, - Sie können das Kurzform-Funktionskonstrukt auch für den Musterabgleich verwenden, - - - - which is useful when you're writing functions which make use of Partial Application. - was beim Schreiben von Funktionen, die die partielle Anwendung nutzen, hilfreich ist. - - - - Define some more functions which parse with the helper function. - Definieren Sie weitere Funktionen, die eine Analyse mithilfe der Hilfsfunktion durchführen. - - - - Active Patterns are another powerful construct to use with pattern matching. - Aktive Muster sind ein weiteres leistungsstarkes Konstrukt, das beim Musterabgleich verwendet werden kann. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Sie ermöglichen eine Partitionierung der Eingabedaten in benutzerdefinierte Formen, wobei sie an der Musterabgleichs-Aufrufsite zerlegt werden. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Der Musterabgleich mithilfe des Schlüsselworts "function" und das aktive Muster sehen häufig wie folgt aus. - - - - Call the printer with some different values to parse. - Rufen Sie den Drucker mit unterschiedlichen zu analysierenden Werten auf. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Bei Optionswerten handelt es sich um eine beliebige Art von Werten, die entweder mit "Some" oder mit "None" markiert sind. - - - - They are used extensively in F# code to represent the cases where many other - Sie werden in F#-Code umfassend verwendet, um die Fälle darzustellen, in denen viele - - - - languages would use null references. - Sprachen NULL-Verweise verwenden würden. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Definieren Sie als Erstes eine Postleitzahl, die über eine diskriminierte Einzelfall-Union definiert ist. - - - - Next, define a type where the ZipCode is optional. - Definieren Sie als Nächstes einen Typ, bei dem "ZipCode" optional ist. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Definieren Sie dann einen Schnittstellentyp, der ein Objekt zum Berechnen der Versandkosten für die Postleitzahl des Kunden repräsentiert, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - sofern Implementierungen für die abstrakten Methoden "getState" und "getShippingZone" vorhanden sind. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Berechnen Sie nun mithilfe einer Rechnerinstanz die Versandkosten für einen Kunden. - - - - This uses combinators in the Option module to allow a functional pipeline for - Dies verwendet Kombinatoren im Option-Modul für eine funktionale Pipeline zum - - - - transforming data with Optionals. - Transformieren von Daten mit Optionen. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Maßeinheiten sind eine Möglichkeit, um für primitive numerische Typen typsicher den Änderungsverlauf einzublenden. - - - - You can then perform type-safe arithmetic on these values. - Anschließend können Sie für diese Werte die typsichere Arithmetik ausführen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Öffnen Sie zunächst eine Auflistung mit allgemeinen Einheitennamen. - - - - Define a unitized constant - Definieren Sie eine einheitliche Konstante. - - - - Next, define a new unit type - Definieren Sie als Nächstes einen neuen Einheitentyp. - - - - Conversion factor mile to meter. - Faktor für die Umrechnung von Meilen in Meter. - - - - Define a unitized constant - Definieren Sie eine einheitliche Konstante. - - - - Compute metric-system constant - Berechnen Sie die Konstante für das metrische System. - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Werte, die Maßeinheiten verwenden, können wie der primitive numerische Typ z.B. zum Drucken genutzt werden. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Klassen sind eine Möglichkeit zum Definieren neuer Objekttypen in F#. Sie unterstützen standardmäßige objektorientierte Konstrukte. - - - - They can have a variety of members (methods, properties, events, etc.) - Sie können über verschiedene Member verfügen (Methoden, Eigenschaften, Ereignisse usw.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Weitere Informationen zu Klassen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Weitere Informationen zu Membern finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Eine einfache, zweidimensionale Vektorklasse. - - - - The class's constructor is on the first line, - Der Konstruktor der Klasse befindet sich in der ersten Zeile - - - - and takes two arguments: dx and dy, both of type 'double'. - und akzeptiert zwei Argumente: dx und dy, beide vom Typ "double". - - - - This internal field stores the length of the vector, computed when the - Dieses interne Feld speichert die Länge des Vektors, die berechnet wird, wenn - - - - object is constructed - das Objekt konstruiert wird. - - - - 'this' specifies a name for the object's self identifier. - "this" gibt einen Namen für den Selbstbezeichner des Objekts an. - - - - In instance methods, it must appear before the member name. - In Instanzmethoden muss dies vor dem Membernamen angegeben werden. - - - - This member is a method. The previous members were properties. - Dieser Member ist eine Methode. Die vorherigen Member waren Eigenschaften. - - - - This is how you instantiate the Vector2D class. - So instanziieren Sie die Vector2D-Klasse. - - - - Get a new scaled vector object, without modifying the original object. - Rufen Sie ein neues skaliertes Vektorobjekt ab, ohne das ursprüngliche Objekt zu verändern. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Generische Klassen ermöglichen das Definieren von Typen in Bezug auf eine Gruppe von Typparametern. - - - - In the following, 'T is the type parameter for the class. - Im Folgenden ist 'T der Typparameter für die Klasse. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Dieses interne Feld speichert die Zustände in einer Liste. - - - - Add a new element to the list of states. - Der Liste der Zustände ein neues Element hinzufügen - - - - use the '<-' operator to mutate the value. - Den "<-"-Operator verwenden, um den Wert zu mutieren - - - - Get the entire list of historical states. - Die gesamte Liste der Verlaufszustände abrufen - - - - Get the latest state. - Den aktuellen Zustand abrufen - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Eine int-Instanz der state tracker-Klasse. Beachten Sie, dass der Typ-Parameter abgeleitet wird. - - - - Add a state - Einen Zustand hinzufügen - - - - Interfaces are object types with only 'abstract' members. - Schnittstellen sind Objekttypen, die nur über abstrakte Member verfügen. - - - - Object types and object expressions can implement interfaces. - Objekttypen und Objektausdrücke können Schnittstellen implementieren. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Dieser Typ implementiert "IDisposable". - - - - This is the implementation of IDisposable members. - Dies ist die Implementierung von IDisposable-Membern. - - - - This is an object that implements IDisposable via an Object Expression - Dies ist ein Objekt, das IDisposable über einen Objektausdruck implementiert. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Im Gegensatz zu anderen Sprachen wie C# oder Java ist keine neue Typendefinition erforderlich, - - - - to implement an interface. - um eine Schnittstelle zu implementieren. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - Die Bibliothek "FSharp.Core" definiert eine Reihe paralleler Verarbeitungsfunktionen. Hier - - - - you use some functions for parallel processing over arrays. - verwenden Sie einige Funktionen zur parallelen Verarbeitung über Arrays. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Weitere Informationen finden Sie unter: https://msdn.microsoft.com/de-de/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Definieren Sie zunächst ein Array mit Eingaben. - - - - Next, define a functions that does some CPU intensive computation. - Definieren Sie dann eine Funktion mit CPU-intensiven Berechnungen. - - - - Next, do a parallel map over a large input array. - Führen Sie als Nächstes eine parallele Zuordnung für ein umfangreiches Eingabearray durch. - - - - Next, print the results. - Geben Sie die Ergebnisse aus. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Ereignisse sind ein gängiger Begriff bei der .NET-Programmierung, v. a. bei WinForms oder WPF-Anwendungen. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Erstellen Sie zunächst eine Instanz des Event-Objekts mit Abonnementpunkt (event.Publish) und Ereignisauslöser (event.Trigger). - - - - Next, add handler to the event. - Fügen Sie dem Ereignis einen Handler hinzu. - - - - Next, trigger the event. - Lösen Sie das Ereignis aus. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Erstellen Sie als Nächstes eine Event-Instanz gemäß der .NET-Standardkonvention: (sender, EventArgs) - - - - Next, add a handler for this new event. - Fügen Sie einen Handler für das neue Ereignis hinzu. - - - - Next, trigger this event (note that sender argument should be set). - Lösen Sie das Ereignis aus. (Hinweis: das sender-Argument muss festgelegt sein.) - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf deleted file mode 100644 index 692964c713..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Este ejemplo le guiará por los elementos del lenguaje F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Para ejecutar el código en F# interactivo, resalte una sección de código y presione Alt+Entrar, o bien haga clic con el botón secundario - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - y seleccione "Ejecutar en modo interactivo". Puede abrir la ventana de F# interactivo desde el menú "Ver". - - - - For more about F#, see: - Para obtener más información acerca de F#, vea: - - - - To see this tutorial in documentation form, see: - Para ver este tutorial en forma de documentación, vea: - - - - To learn more about applied F# programming, use - Para obtener más información sobre la programación de F# aplicada, use - - - - To install the Visual F# Power Tools, use - Para instalar Visual F# Power Tools, use - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - "Herramientas" --> "Extensiones y actualizaciones" --> "En línea" y busque - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Para obtener plantillas adicionales para su uso con F#, consulte 'Plantillas en línea' en Visual Studio, - - - - 'New Project' --> 'Online Templates' - "Nuevo proyecto" --> "Plantillas en línea" - - - - F# supports three kinds of comments: - F# admite tres tipos de comentarios: - - - - 1. Double-slash comments. These are used in most situations. - 1. Comentarios con doble barra diagonal. Se usan en la mayoría de las situaciones. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Comentarios de bloque de estilo ML. No se usan con tanta frecuencia. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Comentarios de triple barra diagonal. Se utilizan para funciones de documentación, tipos, etc. - - - - They will appear as text when you hover over something which is decorated with these comments. - Aparecerán como texto al mantener el puntero por encima de algo decorado con estos comentarios. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - También admiten comentarios XML de estilo .NET, que le permite generar documentación de referencia, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - y también permite a los editores (como Visual Studio) extraer información de ellos. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Abra los espacios de nombres con la palabra clave "open". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Un módulo es una agrupación de código de F#, como valores, tipos y valores de función. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - El código de agrupación de los módulos ayuda a mantener el código relacionado en conjunto y ayuda a evitar los conflictos de nombres en su programa. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Este es un entero de ejemplo. - - - - This is a sample floating point number. - Este es un número de punto flotante de ejemplo. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Se calcula un número nuevo aplicando cierta aritmética. Los tipos numéricos se convierten mediante - - - - functions 'int', 'double' and so on. - funciones "int", "double", etc. - - - - This is a list of the numbers from 0 to 99. - Esta es una lista de números del 0 al 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Esta es una lista de todas las tuplas que contienen todos los números de 0 a 99 y sus cuadrados. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - La línea siguiente imprime una lista que incluye tuplas, utilizando "%A" para la impresión genérica. - - - - This is a sample integer with a type annotation - Este es un entero de ejemplo con una anotación de tipo - - - - Values in F# are immutable by default. They cannot be changed - Los valores de F# son inmutables de manera predeterminada. No se pueden cambiar - - - - in the course of a program's execution unless explicitly marked as mutable. - en el transcurso de la ejecución de un programa a menos que se marquen explícitamente como mutable. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Al enlazar un valor a un nombre con "let", se convierte en inmutable. - - - - The second line of code fails to compile because 'number' is immutable and bound. - La segunda línea de código no se compila porque "number" es inmutable y está enlazado. - - - - Re-defining 'number' to be a different value is not allowed in F#. - En F#, no se puede redefinir "number" para darle otro valor. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Enlace mutable. Es necesario para poder mutar el valor de "otherNumber". - - - - When mutating a value, use '<-' to assign a new value. - Para la mutación de un valor, use "<-" para asignar un valor nuevo. - - - - You could not use '=' here for this purpose since it is used for equality - No pudo usar "=" con este propósito, porque se usa para la igualdad - - - - or other contexts such as 'let' or 'module' - u otros contextos, como "let" o "module" - - - - Much of F# programming consists of defining functions that transform input data to produce - Gran parte de la programación de F# consiste en definir funciones que transforman los datos de entrada para generar - - - - useful results. - resultados útiles. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - "let" se utiliza para definir una función. En este caso, acepta un argumento de entero y devuelve un entero. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Los paréntesis son opcionales para argumentos de función, excepto cuando se utiliza una anotación de tipo explícito. - - - - Apply the function, naming the function return result using 'let'. - Aplicar la función, asignando un nombre al resultado devuelto por la función mediante 'let'. - - - - The variable type is inferred from the function return type. - El tipo de variable se infiere del tipo de valor devuelto por la función. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Esta línea utiliza "%d" para imprimir el resultado de un entero. Cuenta con seguridad de tipos. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Si "result1" no fuese de tipo "int", la línea no se compilaría. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Si es necesario, anote el tipo de un nombre de parámetro usando "(argument:type)". Los paréntesis son obligatorios. - - - - Conditionals use if/then/elid/elif/else. - Los condicionales usan if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Tenga en cuenta que F# utiliza una sintaxis que tiene en cuenta la sangría de espacios en blanco, de forma parecida a lenguajes como Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Esta línea utiliza "%f" para imprimir el resultado como un valor float. Al igual que "%d", cuenta con seguridad de tipos. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Los valores booleanos son tipos de datos fundamentales en F#. Estos son algunos ejemplos de valores booleanos y lógica condicional. - - - - To learn more, see: - Para obtener más información, vea: - - - - and - Y - - - - Booleans values are 'true' and 'false'. - Los valores booleanos son "true" y "false". - - - - Operators on booleans are 'not', '&&' and '||'. - Los operadores de valores booleanos son "not", "&&" y "||". - - - - This line uses '%b'to print a boolean value. This is type-safe. - Esta línea utiliza "%b" para imprimir un valor booleano. Cuenta con seguridad de tipos. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Las cadenas son tipos de datos fundamentales en F#. Estos son algunos ejemplos de cadenas y de manipulación básica de cadenas. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Las cadenas usan comillas dobles. - - - - Strings can also use @ to create a verbatim string literal. - Las cadenas también pueden usar @ para crear un literal de cadena textual. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - No tiene en cuenta los caracteres de escape, como "\", "\n", "\t", etc. - - - - String literals can also use triple-quotes. - Los literales de cadena también pueden usar comillas triples. - - - - String concatenation is normally done with the '+' operator. - La concatenación de cadenas suele hacerse con el operador "+". - - - - This line uses '%s' to print a string value. This is type-safe. - Esta línea utiliza "%s" para imprimir un valor de cadena. Cuenta con seguridad de tipos. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Las subcadenas utilizan la notación del indexador. Esta línea extrae los 7 primeros caracteres como una subcadena. - - - - Note that like many languages, Strings are zero-indexed in F#. - Tenga en cuenta que, al igual que en otros muchos lenguajes, las cadenas tienen índice 0 en F#. - - - - Tuples are simple combinations of data values into a combined value. - Las tuplas son combinaciones simples de valores de datos en un valor combinado. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Tupla de enteros sencilla. - - - - A function that swaps the order of two values in a tuple. - Una función que intercambia el orden de dos valores en una tupla. - - - - F# Type Inference will automatically generalize the function to have a generic type, - La inferencia de tipos de F# generalizará la función de forma automática para que tenga un tipo genérico, - - - - meaning that it will work with any type. - lo que significa que funcionará con cualquier tipo. - - - - A tuple consisting of an integer, a string, - Una tupla que consta de un entero, una cadena, - - - - and a double-precision floating point number. - y un número de punto flotante de doble precisión. - - - - A simple tuple of integers with a type annotation. - Una tupla de enteros sencilla con una anotación de tipo. - - - - Type annotations for tuples use the * symbol to separate elements - Las anotaciones de tipo para las tuplas usan el símbolo * para separar los elementos - - - - Tuples are normally objects, but they can also be represented as structs. - Las tuplas suelen ser objetos, pero también se pueden representar como estructuras. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Interoperan completamente con estructuras de C# y Visual Basic.NET; sin embargo, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - las tuplas de estructuras no son implícitamente convertibles con tuplas de objeto (a menudo denominadas tuplas de referencia). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - La segunda línea no se compilará por esto. Quite las marcas de comentario para ver qué ocurre. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Aunque no puede convertir tuplas de struct en tuplas de referencia y viceversa de forma implícita, - - - - you can explicitly convert via pattern matching, as demonstrated below. - puede hacer la conversión de forma explícita mediante coincidencia de patrones, como se muestra a continuación. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Los operadores de canalización ("|>", "<|", etc.) y de composición (">>", "<<") de F# - - - - are used extensively when processing data. These operators are themselves functions - se utilizan mucho en el procesamiento de datos. Estos operadores son en sí mismos funciones. - - - - which make use of Partial Application. - que usan aplicación parcial. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Para obtener más información sobre estos operadores, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Para obtener más información sobre la aplicación parcial, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Eleva un valor la cuadrado. - - - - Adds 1 to a value. - Suma 1 a un valor. - - - - Tests if an integer value is odd via modulo. - Comprueba si un valor entero es impar mediante un módulo. - - - - A list of 5 numbers. More on lists later. - Lista de 5 números. Más adelante, se proporciona más información sobre listas. - - - - Given a list of integers, it filters out the even numbers, - Dada una lista de enteros, aplica un filtro para excluir los números pares, - - - - squares the resulting odds, and adds 1 to the squared odds. - eleva al cuadrado los impares resultantes y les suma 1. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Una forma más corta de escribir "squareOddValuesAndAddOne" es anidar cada - - - - sub-result into the function calls themselves. - subresultado en las propias llamadas a la función. - - - - This makes the function much shorter, but it's difficult to see the - Esto hace la función mucho más corta, pero es difícil ver el - - - - order in which the data is processed. - orden en el que se procesan los datos. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Una forma recomendable de escribir "squareOddValuesAndAddOne" es usar operadores de canalización de F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Esto permite evitar que se creen resultados intermedios, pero es mucho más fácil de leer - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - que anidar las llamadas a la función como "squareOddValuesAndAddOneNested" - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - No puede acortar "squareOddValuesAndAddOnePipeline" moviendo la segunda llamada de "List.map" - - - - into the first, using a Lambda Function. - a la primera, usando una función lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Tenga en cuenta que las canalizaciones se usan también en la función lambda. Los operadores de canalización de F# - - - - can be used for single values as well. This makes them very powerful for processing data. - se puede usar también para valores individuales. Esto les confiere una gran capacidad para el procesamiento de datos. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Por último, puede eliminar la necesidad de tomar "valores" de forma explícita como parámetro usando ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - para componer las dos operaciones principales: aplicar un filtro para excluir los números pares, elevar al cuadrado y sumar uno. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - De igual modo, no se necesita tampoco la parte "fun x -> ..." de la expresión lambda, porque "x" - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - se define en ese ámbito para poderlo pasar a una canalización funcional. Por tanto, ">>" se pude usar - - - - there as well. - aquí también. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - El resultado de "squareOddValuesAndAddOneComposition" es en sí mismo otra función que toma una - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - lista de enteros como entrada. Si ejecuta "squareOddValuesAndAddOneComposition" con una lista - - - - of integers, you'll notice that it produces the same results as previous functions. - de enteros, notará que produce los mismos resultados que las funciones anteriores. - - - - This is using what is known as function composition. This is possible because functions in F# - Aquí se utiliza lo que se conoce como composición de funciones. Es posible porque las funciones en F# - - - - use Partial Application and the input and output types of each data processing operation match - utilizan aplicación parcial y los tipos de entrada y salida de cada operación de procesamiento de datos buscan - - - - the signatures of the functions we're using. - las signaturas de las funciones que estamos usando. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Las listas están ordenadas, son inmutables y están vinculadas individualmente. Son diligentes en su evaluación. - - - - This module shows various ways to generate lists and process lists with some functions - Este módulo muestra varias formas de generar listas y procesarlas con algunas funciones - - - - in the 'List' module in the F# Core Library. - en el módulo "List" de la biblioteca principal de F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Las listas se definen mediante [ ... ]. Esta es una lista vacía. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Esta es una lista de 3 elementos. Se utiliza ";" para separar los elementos que están en la misma línea. - - - - You can also separate elements by placing them on their own lines. - También puede separar los elementos poniendo cada uno en su propia línea. - - - - This is a list of integers from 1 to 1000 - Esta es una lista de enteros del 1 al 1000 - - - - Lists can also be generated by computations. This is a list containing - Las listas también pueden generarse mediante cálculos. Esta es una lista que contiene - - - - all the days of the year. - todos los días del año. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Imprime los 5 primeros elementos de "daysList" usando "List.take". - - - - Computations can include conditionals. This is a list containing the tuples - Los cálculos pueden incluir condicionales. Esta es una lista que contiene las tuplas - - - - which are the coordinates of the black squares on a chess board. - que son las coordenadas de los cuadrados negros de un tablero de ajedrez. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Las listas se pueden transformas mediante "List.map" y otros combinadores de programación funcionales. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Esta definición genera una nueva lista al elevar al cuadrado los números incluidos en numberList y usa el operador - - - - operator to pass an argument to List.map. - de canalización para pasar un argumento a List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Hay otras muchas combinaciones de listas. La siguiente, calcula la suma de los cuadrados de los - - - - numbers divisible by 3. - números divisibles por 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Las matrices son colecciones mutables de tamaño fijo de elementos del mismo tipo. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Aunque son parecidas a las listas (admiten enumeración y tienen combinadores parecidos para el procesamiento de datos), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - suelen ser más rápidas y admitir acceso aleatorio rápido. A cambio, tiene el inconveniente de que es menos seguro porque es mutable. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Esta es una matriz vacía. Observe que la sintaxis es parecida a la de las listas, pero utiliza "[| ... |]" en su lugar. - - - - Arrays are specified using the same range of constructs as lists. - Las matrices se especifican con el mismo intervalo de construcciones que las listas. - - - - This is an array of numbers from 1 to 1000. - Esta es una matriz de números del 1 al 1000. - - - - This is an array containing only the words "hello" and "world". - Esta es una matriz que solo contiene las palabras "hola" y "todos". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Esta es una matriz inicializada con un índice que contiene los números pares del 0 al 2000. - - - - Sub-arrays are extracted using slicing notation. - Las submatrices se extraen mediante la notación divisoria. - - - - You can loop over arrays and lists using 'for' loops. - Puede ejecutar un bucle en matrices y listas usando bucles "for". - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Puede modificar el contenido de un elemento de matriz mediante el operador de asignación de flecha izquierda. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Para obtener más información sobre este operador, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Para transformar matrices, use "Array.map" y otras operaciones de programación funcionales. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - La operación siguiente calcula la suma de las longitudes de las palabras que empiezan por "h". - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Las secuencias son una serie lógica de elementos del mismo tipo. Son de un tipo más general que las listas o las matrices. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Las secuencias se evalúan previa petición y se vuelven a evaluar cada vez que se recorren en iteración. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Una secuencia de F# es un alias para un elemento System.Collections.Generic.IEnumerable<'T> de .NET. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Las funciones de procesamiento de secuencias también pueden aplicarse a las listas y a las matrices. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Esta es una secuencia vacía. - - - - This a sequence of values. - Esta es una secuencia de valores. - - - - This is an on-demand sequence from 1 to 1000. - Esta es una secuencia a petición del 1 al 1000. - - - - This is a sequence producing the words "hello" and "world" - Esta es una secuencia que genera las palabras "hola" y "todos" - - - - This sequence producing the even numbers up to 2000. - Esta secuencia genera los números pares hasta el 2000. - - - - This is an infinite sequence which is a random walk. - Esta es una secuencia infinita que constituye un recorrido aleatorio. - - - - This example uses yield! to return each element of a subsequence. - Este ejemplo usa yield! para devolver cada uno de los elementos de una subsecuencia. - - - - This example shows the first 100 elements of the random walk. - Este ejemplo muestra los 100 primeros elementos del recorrido aleatorio. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Las funciones recursivas pueden llamarse a sí mismas. En F#, las funciones solo son recursivas - - - - when declared using 'let rec'. - cuando se declara con "let rec". - - - - Recursion is the preferred way to process sequences or collections in F#. - La recursión es la forma recomendada de procesar secuencias o colecciones en F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Este ejemplo muestra una función recursiva que calcula el factorial de un - - - - integer. It uses 'let rec' to define a recursive function. - entero. Usa "let rec" para definir una función recursiva. - - - - Computes the greatest common factor of two integers. - Calcula el mayor factor común de dos enteros. - - - - Since all of the recursive calls are tail calls, - Puesto que todas las llamadas recursivas son llamadas de cola, - - - - the compiler will turn the function into a loop, - el compilador devolverá la función en un bucle, - - - - which improves performance and reduces memory consumption. - lo que mejora el rendimiento y reduce el consumo de memoria. - - - - This example computes the sum of a list of integers using recursion. - Este ejemplo calcula la suma de una lista de enteros con recursión. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Esto convierte la función "sumList" en recursiva de cola, usando una función auxiliar con un acumulador de resultados. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Este código invoca la función auxiliar recursiva de cola, proporcionando "0" como acumulador de valores de inicialización. - - - - An approach like this is common in F#. - Este método es habitual en F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Los registros son un agregado de valores con nombre, con miembros opcionales (como los métodos). - - - - They are immutable and have structural equality semantics. - Son inmutables y tienen semántica de igualdad estructural. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Este ejemplo muestra cómo definir un nuevo tipo de registro. - - - - This example shows how to instantiate a record type. - Este ejemplo muestra cómo crear una instancia de un tipo de registro. - - - - You can also do this on the same line with ';' separators. - También puede hacer esto en la misma línea usando ";" como separador. - - - - This example shows how to use "copy-and-update" on record values. It creates - Este ejemplo muestra cómo usar "copy-and-update" en los valores de registro. Crea - - - - a new record value that is a copy of contact1, but has different values for - un nuevo valor de registro que es una copia de contact1, pero con valores distintos para - - - - the 'Phone' and 'Verified' fields. - los campos "Phone" y "Verified". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Este ejemplo muestra cómo escribir una función que procesa un valor del registro. - - - - It converts a 'ContactCard' object to a string. - Convierte un objeto "ContactCard" en una cadena. - - - - This is an example of a Record with a member. - Este es un ejemplo de un registro con un miembro. - - - - Members can implement object-oriented members. - Los miembros pueden implementar miembros orientados a objetos. - - - - Members are accessed via the '.' operator on an instantiated type. - A los miembros se accede con el operador "." en un tipo del que se ha creado una instancia. - - - - Records can also be represented as structs via the 'Struct' attribute. - Los registros se pueden representar también como estructuras con el atributo "Struct". - - - - This is helpful in situations where the performance of structs outweighs - Esto es útil en situaciones donde el rendimiento de las estructuras es superior a - - - - the flexibility of reference types. - la flexibilidad de los tipos de referencia. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Las uniones discriminadas (DU) son valores que podrían ser un gran número de formas o casos con nombre. - - - - Data stored in DUs can be one of several distinct values. - Los datos almacenados en uniones discriminadas pueden ser uno de varios valores diferentes. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - El siguiente código representa el palo de una carta. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - También se puede usar una unión discriminada para representar el rango de una carta. - - - - Represents the rank of cards 2 .. 10 - Representa el rango de cartas 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Las uniones discriminadas pueden implementar también miembros orientados a objetos. - - - - This is a record type that combines a Suit and a Rank. - Este es un tipo de registro que combina un palo y un rango. - - - - It's common to use both Records and Disciminated Unions when representing data. - Es habitual utilizar tanto registros como uniones discriminadas cuando se representan datos. - - - - This computes a list representing all the cards in the deck. - Este código calcula una lista que representa todas las cartas de la baraja. - - - - This example converts a 'Card' object to a string. - Este ejemplo convierte un objeto "Card" en una cadena. - - - - This example prints all the cards in a playing deck. - Este ejemplo imprime todas las cartas de una baraja. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Las uniones discriminadas de un solo caso se usan con frecuencia en el modelado de dominios. Esto puede aportar mayor seguridad de tipos - - - - over primitive types such as strings and ints. - en tipos primitivos, como cadenas y enteros. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Las uniones discriminadas de un solo caso no se pueden convertir de forma implícita en el tipo que encapsulan, ni viceversa. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Por ejemplo, una función que toma una dirección no puede aceptar una cadena como esa entrada, - - - - or vive/versa. - o viceversa. - - - - You can easily instantiate a single-case DU as follows. - Puede crear fácilmente una instancia de una unión discriminada de un solo caso del siguiente modo. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Cuando necesite el valor, puede desencapsular el valor subyacente con una función sencilla. - - - - Printing single-case DUs is simple with unwrapping functions. - Imprimir uniones discriminadas de un solo caso es muy sencillo con funciones de desencapsulamiento. - - - - Disciminated Unions also support recursive definitions. - Las uniones discriminadas admiten también definiciones recursivas. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Esto representa un árbol de búsqueda binaria, donde un caso es el árbol vacío - - - - and the other being a Node with a value and two subtrees. - y el otro es un nodo con un valor y dos subárboles. - - - - Check if an item exists in the binary search tree. - Comprueba si existe un elemento en el árbol de búsqueda binaria. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Hace búsquedas de forma recursiva usando coincidencia de patrones. Devuelve true si existe; de lo contrario, false. - - - - Check the left subtree. - Comprueba el subárbol de la izquierda. - - - - Check the right subtree. - Comprueba el subárbol de la derecha. - - - - Inserts an item in the Binary Search Tree. - Inserta un elemento en el árbol de búsqueda binaria. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Busca dónde insertar de forma recursiva un nuevo nodo usando coincidencia de patrones y lo inserta. - - - - If the item is already present, it does not insert anything. - Si el elemento ya está presente, no inserta nada. - - - - No need to insert, it already exists; return the node. - No es necesario insertarlo, ya existe; devuelve el nodo. - - - - Call into left subtree. - Llama al subárbol de la izquierda. - - - - Call into right subtree. - Llama al subárbol de la derecha. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Las uniones discriminadas se pueden representar también como estructuras con el atributo "Struct". - - - - This is helpful in situations where the performance of structs outweighs - Esto es útil en situaciones donde el rendimiento de las estructuras es superior a - - - - the flexibility of reference types. - la flexibilidad de los tipos de referencia. - - - - However, there are two important things to know when doing this: - No obstante, hay dos cosas importantes que deben tenerse en cuenta cuando se hace esto: - - - - 1. A struct DU cannot be recursively-defined. - 1. Una unión discriminada de estructura no se puede definir de forma recursiva. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Una unión discriminada de estructura debe tener un nombre único para cada uno de sus casos. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - La coincidencia de patrones es una característica de F# que permite utilizar patrones, - - - - which are a way to compare data with a logical structure or structures, - que son una forma de comparar datos con estructuras lógicas, - - - - decompose data into constituent parts, or extract information from data in various ways. - descomponer datos en partes constituyentes o extraer información de datos de varias formas. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Después, puede hacer envíos en función de la "forma" de un patrón mediante coincidencia de patrones. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Un registro para el nombre y los apellidos de una persona - - - - A Discriminated Union of 3 different kinds of employees - Una unión discriminada de 3 tipos de empleados diferentes - - - - Count everyone underneath the employee in the management hierarchy, - Cuenta a todos por debajo del empleado en la jerarquía de administración, - - - - including the employee. - incluido el empleado. - - - - Find all managers/executives named "Dave" who do not have any reports. - Buscar a todos los directores o ejecutivos que se llamen "Dave" que no tengan jefes. - - - - This uses the 'function' shorthand to as a lambda expression. - Aquí se utiliza la forma abreviada "function" como una expresión lambda. - - - - [] matches an empty list. - [] coincide con una lista vacía. - - - - '_' is a wildcard pattern that matches anything. - "_" es un patrón comodín que busca cualquier cosa. - - - - This handles the "or else" case. - Este código controla el caso "or else". - - - - You can also use the shorthand function construct for pattern matching, - También puede usar la construcción abreviada de funciones para la coincidencia de patrones, - - - - which is useful when you're writing functions which make use of Partial Application. - que es muy útil cuando se escriben funciones que utilizan aplicación parcial. - - - - Define some more functions which parse with the helper function. - Define algunas funciones más que se analizan con la función auxiliar. - - - - Active Patterns are another powerful construct to use with pattern matching. - Los patrones activos son también una construcción muy eficaz para usarla con coincidencia de patrones. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Permiten particionar los datos de entrada en formas personalizadas, descomponiéndolos en el sitio de llamada de coincidencia de patrones. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - La coincidencia de patrones con la palabra clave "function" y patrones activos suele ser similar a este código. - - - - Call the printer with some different values to parse. - Llamar a la impresora con algunos valores diferentes para analizar. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Los valores de opción son cualquier tipo de valor etiquetado como 'Some' o 'None'. - - - - They are used extensively in F# code to represent the cases where many other - Se usan de forma exhaustiva en el código de F# para representar los casos en los que muchos otros - - - - languages would use null references. - lenguajes usarían referencias NULL. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - En primer lugar, defina un código postal con una unión discriminada de un solo caso. - - - - Next, define a type where the ZipCode is optional. - Después, defina un tipo donde ZipCode sea opcional. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Después, defina un tipo de interfaz que represente un objeto para calcular la zona de envío del código postal del cliente, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - especificando implementaciones para los métodos abstractos 'getState' y 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Después, calcule una zona de envío para un cliente con una instancia de la calculadora. - - - - This uses combinators in the Option module to allow a functional pipeline for - Aquí se utilizan combinadores en el módulo Option para permitir que una canalización funcional - - - - transforming data with Optionals. - transforme datos con valores opcionales. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Las unidades de medida son una forma de anotar tipos numéricos primitivos con seguridad de tipos. - - - - You can then perform type-safe arithmetic on these values. - Después, puede realizar operaciones aritméticas con seguridad de tipos en estos valores. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Primero, abra una colección de nombres de unidad comunes - - - - Define a unitized constant - Defina una constante dividida en unidades - - - - Next, define a new unit type - Después, defina un nuevo tipo de unidad - - - - Conversion factor mile to meter. - Factor de conversión de millas a metros. - - - - Define a unitized constant - Defina una constante dividida en unidades - - - - Compute metric-system constant - Calcular constante del sistema métrico - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Los valores que usan unidades de medida se pueden usar simplemente como tipo numérico primitivo para cosas como la impresión. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Las clases son una forma de definir tipos de objeto nuevos en F# y admiten construcciones orientadas a objetos estándar. - - - - They can have a variety of members (methods, properties, events, etc.) - Pueden tener una gran variedad de miembros (métodos, propiedades, eventos, etc.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Para obtener más información sobre las clases, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Para obtener más información sobre miembros, vea https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Clase Vector bidimensional sencilla. - - - - The class's constructor is on the first line, - El constructor de la clase está en la primera línea - - - - and takes two arguments: dx and dy, both of type 'double'. - y toma dos argumentos: dx y dy, ambos de tipo "double". - - - - This internal field stores the length of the vector, computed when the - Este campo interno almacena la longitud del vector, que se calcula cuando - - - - object is constructed - se construye el objeto - - - - 'this' specifies a name for the object's self identifier. - 'this' especifica un nombre para el propio identificador del objeto. - - - - In instance methods, it must appear before the member name. - En los métodos de instancia, debe aparecer delante del nombre del miembro. - - - - This member is a method. The previous members were properties. - Este miembro es un método. Los miembros anteriores eran propiedades. - - - - This is how you instantiate the Vector2D class. - Así es cómo se crea una instancia de la clase Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Obtener un nuevo objeto de vector a escala sin modificar el objeto original. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Las clases genéricas permiten definir tipos con respecto a un conjunto de parámetros de tipo. - - - - In the following, 'T is the type parameter for the class. - En el siguiente código, 'T es el parámetro de tipo para la clase. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Este campo interno almacena los estados en una lista. - - - - Add a new element to the list of states. - Agregar un nuevo elemento a la lista de estados. - - - - use the '<-' operator to mutate the value. - Use el operador "<-" para mutar el valor. - - - - Get the entire list of historical states. - Obtener la lista completa de estados históricos. - - - - Get the latest state. - Obtener el último estado. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Una instancia 'int' de la clase del rastreador de estados. Observe que se ha inferido el parámetro de tipo. - - - - Add a state - Agregar un estado - - - - Interfaces are object types with only 'abstract' members. - Las interfaces son tipos de objeto que solo tienen miembros "abstract". - - - - Object types and object expressions can implement interfaces. - Los tipos de objeto y las expresiones de objeto pueden implementar interfaces. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Este es un tipo que implementa IDisposable. - - - - This is the implementation of IDisposable members. - Esta es la implementación de los miembros de IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Este es un objeto que implementa IDisposable mediante una expresión de objeto - - - - Unlike other languages such as C# or Java, a new type definition is not needed - A diferencia de otros lenguajes, como C# o Java, no es necesaria una nueva definición de tipo - - - - to implement an interface. - para implementar una interfaz. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - La biblioteca FSharp.Core define un intervalo de funciones de procesamiento paralelo. Aquí - - - - you use some functions for parallel processing over arrays. - se usan algunas funciones de procesamiento paralelo en matrices. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Para obtener más información, vea: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Primero, una matriz de entradas. - - - - Next, define a functions that does some CPU intensive computation. - Después, defina una función que realice algunos cálculos con gran consumo de CPU. - - - - Next, do a parallel map over a large input array. - Después, realice una asignación en paralelo en una matriz de entrada grande. - - - - Next, print the results. - Después, imprima los resultados. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Los eventos son algo habitual en la programación para .NET, especialmente con aplicaciones de WinForms o WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Para obtener más información, vea: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Primero, cree una instancia del objeto Event que conste de un punto de suscripción (event.Publish) y un desencadenador de eventos (event.Trigger). - - - - Next, add handler to the event. - Después, agregue un controlador al evento. - - - - Next, trigger the event. - Después, desencadene el evento. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Después, cree una instancia de Event que siga la convención estándar de .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Después, agregue un controlador para este nuevo evento. - - - - Next, trigger this event (note that sender argument should be set). - Después, desencadene este evento (tenga en cuenta que el argumento sender debe estar establecido). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf deleted file mode 100644 index ecef37c188..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Cet exemple est destiné à vous montrer les différents éléments du langage F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Pour exécuter le code dans F# Interactive, mettez en surbrillance une portion du code, puis appuyez sur Alt+Entrée ou cliquez avec le bouton droit, - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - puis sélectionnez Exécuter en mode interactif. Pour ouvrir la fenêtre F# Interactive, accédez au menu Affichage. - - - - For more about F#, see: - Pour en savoir plus sur F#, consultez : - - - - To see this tutorial in documentation form, see: - Pour afficher ce didacticiel au format documentation, consultez : - - - - To learn more about applied F# programming, use - Pour en savoir plus sur la programmation F# appliquée, utilisez - - - - To install the Visual F# Power Tools, use - Pour installer Visual F# Power Tools, utilisez - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Outils' --> 'Extensions et mises à jour' --> `En ligne` et rechercher - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Pour consulter d'autres modèles d'utilisation du langage F#, cliquez sur Modèles en ligne dans Visual Studio, - - - - 'New Project' --> 'Online Templates' - 'Nouveau projet' --> 'Modèles en ligne' - - - - F# supports three kinds of comments: - F# prend en charge trois genres de commentaires : - - - - 1. Double-slash comments. These are used in most situations. - 1. Commentaires avec double barre oblique (utilisés dans la plupart des cas). - - - - 2. ML-style Block comments. These aren't used that often. - 2. Commentaires de bloc de style ML (rarement utilisés). - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Commentaires avec triple barre oblique (utilisés pour documenter les fonctions, les types, etc.). - - - - They will appear as text when you hover over something which is decorated with these comments. - Ils apparaissent sous forme de texte quand vous pointez sur un élément décoré avec ces commentaires. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Ils prennent également en charge les commentaires XML de style .NET, ce qui vous permet de générer une documentation de référence. - - - - and they also allow editors (such as Visual Studio) to extract information from them. - Les éditeurs tels que Visual Studio peuvent également extraire des informations à partir de ces commentaires. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Ouvrir des espaces de noms à l'aide du mot clé 'open'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Un module est un regroupement d’éléments de code F#, comme des valeurs, des types et des valeurs de fonction. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Le regroupement du code dans les modules permet de conserver le code associé ensemble et d'éviter les conflits de noms dans votre programme. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Exemple d'entier. - - - - This is a sample floating point number. - Exemple de nombre à virgule flottante. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Nouveau nombre calculé par une opération arithmétique. Les types numériques sont convertis à l'aide des - - - - functions 'int', 'double' and so on. - fonctions 'int', 'double', etc. - - - - This is a list of the numbers from 0 to 99. - Liste des nombres de 0 à 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Liste de tous les tuples contenant tous les nombres de 0 à 99 et leur carré. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - La ligne suivante imprime une liste comprenant des tuples, en utilisant '%A' pour l'impression générique. - - - - This is a sample integer with a type annotation - Exemple d'entier avec une annotation de type. - - - - Values in F# are immutable by default. They cannot be changed - Les valeurs en F# sont immuables par défaut. Elles ne peuvent pas être changées - - - - in the course of a program's execution unless explicitly marked as mutable. - durant l'exécution d'un programme, sauf si elles sont explicitement marquées comme mutables. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Le fait de lier une valeur à un nom au moyen de 'let' la rend non modifiable. - - - - The second line of code fails to compile because 'number' is immutable and bound. - La compilation de la deuxième ligne de code échoue, car 'number' est non modifiable et lié. - - - - Re-defining 'number' to be a different value is not allowed in F#. - La redéfinition de 'number' en une valeur différente n'est pas autorisée dans F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Liaison mutable. Obligatoire pour muter la valeur de 'otherNumber'. - - - - When mutating a value, use '<-' to assign a new value. - En cas de mutation d'une valeur, utilisez '<-' pour assigner une nouvelle valeur. - - - - You could not use '=' here for this purpose since it is used for equality - Vous ne pouvez pas utiliser '=' ici à cet effet, car il est utilisé pour l'égalité - - - - or other contexts such as 'let' or 'module' - ou autres contextes tels que 'let' ou 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - La programmation F# consiste en grande partie à définir des fonctions qui transforment des données d'entrée pour produire des - - - - useful results. - résultats utiles. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Utilisez 'let' pour définir une fonction. Celle-ci accepte un argument entier et retourne un entier. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Les parenthèses sont facultatives pour les arguments de fonction, sauf quand vous utilisez une annotation de type explicite. - - - - Apply the function, naming the function return result using 'let'. - Appliquez la fonction, en nommant le résultat de retour de la fonction à l'aide de 'let'. - - - - The variable type is inferred from the function return type. - Le type de variable est déduit du type de retour de la fonction. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Cette ligne utilise '%d' pour imprimer le résultat comme entier. Cette opération est de type sécurisé. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Si 'result1' n'est pas de type 'int', la compilation de la ligne échoue. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Si nécessaire, annotez le type d'un nom de paramètre en utilisant '(argument:type)'. Les parenthèses sont obligatoires. - - - - Conditionals use if/then/elid/elif/else. - Les conditions utilisent if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Notez que F# utilise une syntaxe prenant en charge la mise en retrait à l'aide d'espaces, comme Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Cette ligne utilise '%f' pour imprimer le résultat comme float. Comme '%d' ci-dessus, cette opération est de type sécurisé. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Les booléens sont des types de données fondamentaux en F#. Voici quelques exemples illustrant des booléens et la logique conditionnelle. - - - - To learn more, see: - Pour en savoir plus, consultez : - - - - and - Et - - - - Booleans values are 'true' and 'false'. - Les valeurs booléennes sont 'true' et 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Les opérateurs sur les booléens sont 'not', '&&' et '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Cette ligne utilise '%b' pour imprimer une valeur booléenne. Cette opération est de type sécurisé. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Les chaînes sont des types de données fondamentaux en F#. Voici quelques exemples illustrant des chaînes et la manipulation de chaînes de base. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Les chaînes utilisent des guillemets doubles. - - - - Strings can also use @ to create a verbatim string literal. - Les chaînes peuvent également utiliser @ pour créer un littéral de chaîne textuelle. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Les caractères d'échappement tels que '\', '\n', '\t', etc. sont ainsi ignorés. - - - - String literals can also use triple-quotes. - Les littéraux de chaîne peuvent également utiliser des guillemets triples. - - - - String concatenation is normally done with the '+' operator. - L'opérateur '+' est généralement utilisé pour la concaténation de chaînes. - - - - This line uses '%s' to print a string value. This is type-safe. - Cette ligne utilise '%s' pour imprimer une valeur de chaîne. Cette opération est de type sécurisé. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Les sous-chaînes utilisent la notation de l'indexeur. Cette ligne extrait les 7 premiers caractères comme sous-chaîne. - - - - Note that like many languages, Strings are zero-indexed in F#. - Comme dans bien d'autres langages, les chaînes ont un index de base zéro en F#. - - - - Tuples are simple combinations of data values into a combined value. - Les tuples sont des combinaisons simples de valeurs de données formant une valeur combinée. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Tuple simple d'entiers. - - - - A function that swaps the order of two values in a tuple. - Fonction qui inverse l'ordre de deux valeurs d'un tuple. - - - - F# Type Inference will automatically generalize the function to have a generic type, - L'inférence de type F# généralise automatiquement la fonction pour qu'elle soit de type générique, - - - - meaning that it will work with any type. - ce qui signifie qu'elle peut fonctionner avec n'importe quel type. - - - - A tuple consisting of an integer, a string, - Tuple constitué d'un entier, d'une chaîne - - - - and a double-precision floating point number. - et d'un nombre à virgule flottante à double précision. - - - - A simple tuple of integers with a type annotation. - Tuple simple d'entiers avec une annotation de type. - - - - Type annotations for tuples use the * symbol to separate elements - Annotations de type pour les tuples qui utilisent le symbole * afin de séparer les éléments - - - - Tuples are normally objects, but they can also be represented as structs. - Les tuples sont généralement des objets, mais peuvent aussi être représentés sous forme de structs. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Ils interagissent entièrement avec les structs en C# et Visual Basic .NET ; cependant, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - les tuples de type struct ne sont pas implicitement convertibles avec des tuples d'objet (souvent appelés tuples de référence). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - La compilation de la deuxième ligne ci-dessous échoue à cause de cela. Supprimez les marques de commentaire pour voir ce qui se passe. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Bien que vous ne puissiez pas effectuer de conversion implicite entre les tuples de type struct et les tuples de type référence, - - - - you can explicitly convert via pattern matching, as demonstrated below. - vous pouvez effectuer une conversion explicite à l'aide de critères spéciaux, comme indiqué ci-dessous. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Les opérateurs de canal F# ('|>', '<|', etc.) et les opérateurs de composition F# ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - sont très utilisés de façon pour le traitement des données. Ces opérateurs sont eux-mêmes des fonctions - - - - which make use of Partial Application. - qui utilisent l'application partielle. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Pour en savoir plus sur ces opérateurs, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Pour en savoir plus sur l'application partielle, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Met une valeur au carré. - - - - Adds 1 to a value. - Ajoute 1 à une valeur. - - - - Tests if an integer value is odd via modulo. - Teste si une valeur entière est impaire à l'aide d'une opération modulo. - - - - A list of 5 numbers. More on lists later. - Liste de 5 nombres. Nous reviendrons sur les listes plus tard. - - - - Given a list of integers, it filters out the even numbers, - Pour une liste d'entiers donnée, élimine les nombres pairs par filtrage, - - - - squares the resulting odds, and adds 1 to the squared odds. - met au carré les nombres impairs résultants, puis ajoute 1 au carré des nombres impairs. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Pour écrire plus rapidement 'squareOddValuesAndAddOne', imbriquez chaque - - - - sub-result into the function calls themselves. - sous-résultat dans les appels de fonction. - - - - This makes the function much shorter, but it's difficult to see the - La fonction est ainsi considérablement raccourcie, mais il est difficile de voir - - - - order in which the data is processed. - l'ordre dans lequel les données sont traitées. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Pour écrire 'squareOddValuesAndAddOne', utilisez de préférence des opérateurs de canal F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Aucun résultat intermédiaire n'est créé, mais la syntaxe est beaucoup plus lisible - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - que d'imbriquer des appels de fonction comme 'squareOddValuesAndAddOneNested' - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Vous pouvez raccourcir 'squareOddValuesAndAddOnePipeline' en déplaçant le second appel 'List.map' - - - - into the first, using a Lambda Function. - dans le premier en utilisant une fonction lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Notez que les pipelines sont également utilisés dans la fonction lambda. Les opérateurs de canal F# - - - - can be used for single values as well. This makes them very powerful for processing data. - peuvent également être utilisés pour des valeurs uniques. Ils sont donc très efficaces dans le traitement des données. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Enfin, vous pouvez éliminer la nécessité d'accepter explicitement 'values' comme paramètre en utilisant '>>' - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - pour composer les deux opérations principales : élimination des nombres pairs par filtrage, puis mise au carré et ajout d'une unité. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - De même, la partie 'fun x -> ...' de l'expression lambda n'est pas nécessaire, car 'x' est simplement - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - défini dans cette portée pour pouvoir être passé à un pipeline fonctionnel. Vous pouvez donc utiliser '>>' - - - - there as well. - ici aussi. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Le résultat de 'squareOddValuesAndAddOneComposition' est une autre fonction qui accepte une - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - liste d'entiers comme entrée. Si vous exécutez 'squareOddValuesAndAddOneComposition' avec une liste - - - - of integers, you'll notice that it produces the same results as previous functions. - d'entiers, les résultats sont identiques à ceux des fonctions précédentes. - - - - This is using what is known as function composition. This is possible because functions in F# - C'est ce qui s'appelle la composition de fonctions. Cela vient du fait que les fonctions dans F# - - - - use Partial Application and the input and output types of each data processing operation match - utilisent l'application partielle et que les types d'entrée et de sortie de chaque opération de traitement de données correspondent - - - - the signatures of the functions we're using. - aux signatures des fonctions que nous utilisons. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Les listes sont ordonnées, non modifiables et liées individuellement. Elles font l'objet d'une évaluation stricte. - - - - This module shows various ways to generate lists and process lists with some functions - Ce module montre différentes façons de générer et de traiter des listes à l'aide de fonctions - - - - in the 'List' module in the F# Core Library. - du module 'List' de la bibliothèque principale F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Les listes sont définies à l'aide de [ ... ]. Il s'agit d'une liste vide. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Il s'agit d'une liste avec 3 éléments. ';' permet de séparer des éléments sur la même ligne. - - - - You can also separate elements by placing them on their own lines. - Vous pouvez également séparer des éléments en les plaçant chacun sur une ligne. - - - - This is a list of integers from 1 to 1000 - Il s'agit de la liste des entiers de 1 à 1 000 - - - - Lists can also be generated by computations. This is a list containing - Les listes peuvent également être générées par calculs. Il s'agit d'une liste contenant - - - - all the days of the year. - tous les jours de l'année. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Imprimez les 5 premiers éléments de 'daysList' en utilisant 'List.take'. - - - - Computations can include conditionals. This is a list containing the tuples - Les calculs peuvent inclure des conditions. Il s'agit d'une liste contenant les tuples - - - - which are the coordinates of the black squares on a chess board. - qui sont les coordonnées des cases noires d'un échiquier. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Les listes peuvent être transformées à l'aide de 'List.map' et d'autres combinateurs de programmation fonctionnelle. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Cette définition produit une nouvelle liste en mettant au carré les nombres de numberList à l'aide de - - - - operator to pass an argument to List.map. - l'opérateur du pipeline pour passer un argument à List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Il existe de nombreuses autres combinaisons de listes. La combinaison suivante calcule la somme des carrés des - - - - numbers divisible by 3. - nombres divisibles par 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Les tableaux sont des collections de taille fixe et mutables d'éléments du même type. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Bien qu'ils soient semblables aux listes (prise en charge de l'énumération et combinateurs similaires pour le traitement des données), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - ils offrent généralement une vitesse accrue et prennent en charge l'accès aléatoire rapide. Ils sont toutefois moins sécurisés du fait de leur mutabilité. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Tableau vide. Notez que la syntaxe est semblable à celle des listes, mais '[| ... |]' est utilisé à la place. - - - - Arrays are specified using the same range of constructs as lists. - Les tableaux sont spécifiés à l'aide de la même plage de constructions que les listes. - - - - This is an array of numbers from 1 to 1000. - Il s'agit d'un tableau de nombres de 1 à 1 000. - - - - This is an array containing only the words "hello" and "world". - Il s'agit d'un tableau contenant uniquement les mots "hello" et "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Il s'agit d'un tableau lancé par index, qui contient les nombres pairs de 0 à 2 000. - - - - Sub-arrays are extracted using slicing notation. - Les sous-tableaux sont extraits à l'aide de la notation de découpage. - - - - You can loop over arrays and lists using 'for' loops. - Vous pouvez effectuer une boucle sur des tableaux et des listes à l'aide de boucles 'for'. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Vous pouvez modifier le contenu d'un élément de tableau à l'aide de l'opérateur d'assignation flèche gauche. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Pour en savoir plus sur cet opérateur, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Vous pouvez transformer des tableaux à l'aide de 'Array.map' et d'autres opérations de programmation fonctionnelle. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - L'opération suivante calcule la somme des longueurs des mots qui commencent par 'h'. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Les séquences sont des séries logiques d'éléments du même type. Elles sont plus générales que les listes et les tableaux. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Les séquences sont évaluées sur demande et sont réévaluées à chacune de leur itération. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Une séquence F# est un alias pour un System.Collections.Generic.IEnumerable .NET<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Les fonctions de traitement de séquence peuvent être appliquées aux listes et aux tableaux également. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Il s'agit de la séquence vide. - - - - This a sequence of values. - Il s'agit d'une séquence de valeurs. - - - - This is an on-demand sequence from 1 to 1000. - Séquence à la demande de 1 à 1000. - - - - This is a sequence producing the words "hello" and "world" - Il s'agit d'une séquence produisant les mots "hello" et "world" - - - - This sequence producing the even numbers up to 2000. - Cette séquence produit les nombres pairs jusqu'à 2 000. - - - - This is an infinite sequence which is a random walk. - Il s'agit d'une séquence infinie correspondant à une marche aléatoire. - - - - This example uses yield! to return each element of a subsequence. - Cet exemple utilise yield! pour retourner chaque élément d'une sous-séquence. - - - - This example shows the first 100 elements of the random walk. - Cet exemple montre les 100 premiers éléments de la marche aléatoire. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Les fonctions récursives peuvent s'appeler elles-mêmes. En F#, les fonctions sont uniquement récursives - - - - when declared using 'let rec'. - en cas de déclaration avec 'let rec'. - - - - Recursion is the preferred way to process sequences or collections in F#. - Il est recommandé d'utiliser la récursivité pour traiter des séquences ou des collections en F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Cet exemple montre une fonction récursive qui calcule la factorielle d'un - - - - integer. It uses 'let rec' to define a recursive function. - entier. Il utilise 'let rec' pour définir une fonction récursive. - - - - Computes the greatest common factor of two integers. - Calcule le plus grand commun diviseur de deux entiers. - - - - Since all of the recursive calls are tail calls, - Comme tous les appels récursifs sont des appels terminaux, - - - - the compiler will turn the function into a loop, - le compilateur transforme la fonction en boucle, - - - - which improves performance and reduces memory consumption. - ce qui améliore le niveau de performance et réduit la consommation de mémoire. - - - - This example computes the sum of a list of integers using recursion. - Cet exemple calcule la somme d'une liste d'entiers à l'aide de la récursivité. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 'sumList' est converti en fonction à récursivité terminale, en utilisant une fonction d'assistance avec accumulateur de résultats. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - La fonction d'assistance de récursivité terminale est appelée et fournit '0' comme accumulateur de valeurs initiales. - - - - An approach like this is common in F#. - Une telle approche est courante en F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Les enregistrements sont des agrégats de valeurs nommées, avec des membres facultatifs (comme des méthodes). - - - - They are immutable and have structural equality semantics. - Ils ne sont pas modifiables et ont une sémantique d'égalité structurelle. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Cet exemple montre comment définir un nouveau type d'enregistrement. - - - - This example shows how to instantiate a record type. - Cet exemple montre comment instancier un type d'enregistrement. - - - - You can also do this on the same line with ';' separators. - Vous pouvez également effectuer cette opération sur la même ligne avec des séparateurs ';'. - - - - This example shows how to use "copy-and-update" on record values. It creates - Cet exemple montre comment utiliser "copy-and-update" sur des valeurs d'enregistrement. Il crée - - - - a new record value that is a copy of contact1, but has different values for - une nouvelle valeur d'enregistrement qui est une copie de contact1, mais qui a différentes valeurs pour - - - - the 'Phone' and 'Verified' fields. - les champs 'Phone' et 'Verified'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Cet exemple montre comment écrire une fonction qui traite une valeur d'enregistrement. - - - - It converts a 'ContactCard' object to a string. - Il convertit un objet 'ContactCard' en chaîne. - - - - This is an example of a Record with a member. - Il s'agit d'un exemple d'enregistrement avec un membre. - - - - Members can implement object-oriented members. - Les membres peuvent implémenter des membres orientés objet. - - - - Members are accessed via the '.' operator on an instantiated type. - Les membres sont accessibles au moyen de l'opérateur '.' sur un type instancié. - - - - Records can also be represented as structs via the 'Struct' attribute. - Les enregistrements peuvent également être représentés sous forme de structs par le biais de l'attribut 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Cela peut s'avérer utile dans les situations où le niveau de performance des structs l'emporte - - - - the flexibility of reference types. - sur la flexibilité des types de référence. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Les unions discriminées sont des valeurs qui peuvent correspondre à un certain nombre de formulaires ou de cas nommés. - - - - Data stored in DUs can be one of several distinct values. - Les données stockées dans les unions discriminées peuvent prendre une valeur parmi plusieurs valeurs distinctes. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Ce qui suit représente la couleur d'une carte à jouer. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Une union discriminée peut également servir à représenter le rang d'une carte à jouer. - - - - Represents the rank of cards 2 .. 10 - Représente le rang des cartes 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Les unions discriminées peuvent également implémenter des membres orientés objet. - - - - This is a record type that combines a Suit and a Rank. - Il s'agit d'un type d'enregistrement qui combine une couleur et un rang. - - - - It's common to use both Records and Disciminated Unions when representing data. - Il est fréquent d'utiliser à la fois des enregistrements et des unions discriminées pour représenter des données. - - - - This computes a list representing all the cards in the deck. - Ceci calcule une liste représentant toutes les cartes du paquet. - - - - This example converts a 'Card' object to a string. - Cet exemple convertit un objet 'Card' en chaîne. - - - - This example prints all the cards in a playing deck. - Cet exemple imprime toutes les cartes d'un jeu de cartes. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Les unions discriminées à cas unique sont souvent utilisées pour la modélisation de domaines. Il peut en résulter une meilleure cohérence des types - - - - over primitive types such as strings and ints. - sur des types primitifs tels que les chaînes et les entiers. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Les unions discriminées à cas unique ne peuvent pas être converties implicitement vers ou à partir du type qu'elles incluent dans un wrapper. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Par exemple, une fonction qui accepte une adresse ne peut pas accepter une chaîne comme entrée - - - - or vive/versa. - ou vice versa. - - - - You can easily instantiate a single-case DU as follows. - Vous pouvez facilement instancier une union discriminée à cas unique comme suit. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Quand vous avez besoin de la valeur, vous pouvez exclure la valeur sous-jacente du wrapper à l'aide d'une fonction simple. - - - - Printing single-case DUs is simple with unwrapping functions. - Les fonctions d'exclusion d'un wrapper facilitent l'impression d'unions discriminées à cas unique. - - - - Disciminated Unions also support recursive definitions. - Les unions discriminées prennent également en charge les définitions récursives. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Ceci représente un arbre de recherche binaire, l'un des cas étant l'arbre vide - - - - and the other being a Node with a value and two subtrees. - et l'autre étant un nœud avec une valeur et deux sous-arbres. - - - - Check if an item exists in the binary search tree. - Vérifiez si un élément existe dans l'arbre de recherche binaire. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Effectue une recherche récursive à l'aide de critères spéciaux. Retourne true si l'élément existe ; sinon, false. - - - - Check the left subtree. - Vérifiez le sous-arbre gauche. - - - - Check the right subtree. - Vérifiez le sous-arbre droit. - - - - Inserts an item in the Binary Search Tree. - Insère un élément dans l'arbre de recherche binaire. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Recherche l'emplacement de l'insertion récursive à l'aide de critères spéciaux, puis insère un nouveau nœud. - - - - If the item is already present, it does not insert anything. - Si l'élément est déjà présent, rien n'est inséré. - - - - No need to insert, it already exists; return the node. - Insertion inutile, car l'élément existe déjà ; retournez le nœud. - - - - Call into left subtree. - Appelez le sous-arbre gauche. - - - - Call into right subtree. - Appelez le sous-arbre droit. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Les unions discriminées peuvent également être représentées sous forme de structs au moyen de l'attribut 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Cela peut s'avérer utile dans les situations où le niveau de performance des structs l'emporte - - - - the flexibility of reference types. - sur la flexibilité des types de référence. - - - - However, there are two important things to know when doing this: - Cependant, retenez les deux points suivants si vous procédez de la sorte : - - - - 1. A struct DU cannot be recursively-defined. - 1. Une union discriminée struct ne peut pas être définie de manière récursive. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Une union discriminée struct doit avoir des noms uniques pour chacun de ses cas. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Les critères spéciaux sont une fonctionnalité de F# qui vous permet d'utiliser des modèles - - - - which are a way to compare data with a logical structure or structures, - pour comparer des données avec une ou plusieurs structures logiques, - - - - decompose data into constituent parts, or extract information from data in various ways. - décomposer des données en parties constitutives ou extraire des informations à partir de données de plusieurs façons. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Vous pouvez ensuite effectuer une répartition selon la "forme" d'un modèle à l'aide de critères spéciaux. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Enregistrement contenant le nom et le prénom d'une personne - - - - A Discriminated Union of 3 different kinds of employees - Union discriminée de 3 genres d'employés différents - - - - Count everyone underneath the employee in the management hierarchy, - Comptez tout le monde sous l'employé dans la hiérarchie de gestion - - - - including the employee. - (employé inclus). - - - - Find all managers/executives named "Dave" who do not have any reports. - Recherchez tous les responsables ou cadres dont le prénom est "Dave" et qui ne disposent d'aucun rapport. - - - - This uses the 'function' shorthand to as a lambda expression. - Le raccourci 'function' est utilisé comme expression lambda. - - - - [] matches an empty list. - [] correspond à une liste vide. - - - - '_' is a wildcard pattern that matches anything. - '_' est un modèle générique qui correspond à n'importe quel élément. - - - - This handles the "or else" case. - Ceci permet de gérer le cas "or else". - - - - You can also use the shorthand function construct for pattern matching, - Vous pouvez également utiliser la construction de fonction raccourcie pour les critères spéciaux, - - - - which is useful when you're writing functions which make use of Partial Application. - ce qui peut s'avérer utile quand vous écrivez des fonctions qui utilisent l'application partielle. - - - - Define some more functions which parse with the helper function. - Définissez d'autres fonctions d'analyse avec la fonction d'assistance. - - - - Active Patterns are another powerful construct to use with pattern matching. - Les modèles actifs sont une autre construction efficace à utiliser avec les critères spéciaux. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Ils permettent de partitionner des données d'entrée dans des formulaires personnalisés, en les décomposant au niveau du site d'appel de correspondance au modèle. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Les critères spéciaux avec le mot clé 'function' et les modèles actifs ressemblent souvent à ceci. - - - - Call the printer with some different values to parse. - Appelez l'imprimante avec des valeurs différentes à analyser. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Les valeurs d'option sont tout type de valeur marquée avec 'Some' ou 'None'. - - - - They are used extensively in F# code to represent the cases where many other - Elles sont très utilisées dans le code F# pour représenter les cas où de nombreux autres - - - - languages would use null references. - langages utilisent des références null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Commencez par définir un code postal au moyen d'une union discriminée à cas unique. - - - - Next, define a type where the ZipCode is optional. - Définissez ensuite un type où ZipCode est facultatif. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Ensuite, définissez un type d'interface qui représente un objet pour calculer la zone d'expédition correspondant au code postal du client, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - en fonction des implémentations des méthodes abstraites 'getState' et 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Ensuite, calculez une zone d'expédition pour un client à l'aide d'une instance de calculatrice. - - - - This uses combinators in the Option module to allow a functional pipeline for - Des combinateurs du module Option sont utilisés pour permettre à un pipeline fonctionnel de - - - - transforming data with Optionals. - transformer les données avec Optionals. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Les unités de mesure sont un moyen d'annoter les types numériques primitifs de manière sécurisée pour les types. - - - - You can then perform type-safe arithmetic on these values. - Vous pouvez ensuite effectuer des opérations arithmétiques de type sécurisé sur ces valeurs. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Pour commencer, ouvrez une collection de noms d'unité courants - - - - Define a unitized constant - Définissez une constante unifiée - - - - Next, define a new unit type - Ensuite, définissez un nouveau type d'unité - - - - Conversion factor mile to meter. - Facteur de conversion mile en mètre. - - - - Define a unitized constant - Définissez une constante unifiée - - - - Compute metric-system constant - Calculez la constante de système métrique - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Les valeurs avec des unités de mesure s'utilisent de la même façon que le type numérique primitif dans des opérations comme l'impression. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Les classes sont un moyen de définir de nouveaux types d'objet en F#. Elles prennent en charge les constructions orientées objet standard. - - - - They can have a variety of members (methods, properties, events, etc.) - Elles peuvent avoir différents membres (méthodes, propriétés, événements, etc.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Pour en savoir plus sur les classes, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Pour en savoir plus sur les membres, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Classe Vector à deux dimensions simple. - - - - The class's constructor is on the first line, - Le constructeur de la classe est sur la première ligne - - - - and takes two arguments: dx and dy, both of type 'double'. - et accepte deux arguments : dx et dy (tous deux de type 'double'). - - - - This internal field stores the length of the vector, computed when the - Ce champ interne stocke la longueur du vecteur, calculée quand - - - - object is constructed - l'objet est construit - - - - 'this' specifies a name for the object's self identifier. - 'this' spécifie un nom pour l'auto-identificateur de l'objet. - - - - In instance methods, it must appear before the member name. - Dans les méthodes d'instance, il doit apparaître avant le nom du membre. - - - - This member is a method. The previous members were properties. - Ce membre est une méthode. Les membres précédents étaient des propriétés. - - - - This is how you instantiate the Vector2D class. - Voici comment instancier la classe Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Obtenez un nouvel objet vector mis à l'échelle, sans modifier l'objet d'origine. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Les classes génériques autorisent la définition des types par rapport à un jeu de paramètres de type. - - - - In the following, 'T is the type parameter for the class. - Dans ce qui suit, 'T est le paramètre de type pour la classe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Ce champ interne stocke les états dans une liste. - - - - Add a new element to the list of states. - Ajoutez un nouvel élément à la liste d'états. - - - - use the '<-' operator to mutate the value. - utilisez l'opérateur '<-' pour muter la valeur. - - - - Get the entire list of historical states. - Obtenez la liste complète des états historiques. - - - - Get the latest state. - Obtenez le dernier état. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Instance 'int' de la classe de suivi des états. Notez que le paramètre de type est déduit. - - - - Add a state - Ajouter un état - - - - Interfaces are object types with only 'abstract' members. - Les interfaces sont des types d'objet avec des membres 'abstract' uniquement. - - - - Object types and object expressions can implement interfaces. - Les types et expressions d'objet peuvent implémenter des interfaces. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Type qui implémente IDisposable. - - - - This is the implementation of IDisposable members. - Implémentation de membres IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Objet qui implémente IDisposable à l'aide d'une expression d'objet - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Contrairement à d'autres langages tels que C# ou Java, une nouvelle définition de type n'est pas nécessaire - - - - to implement an interface. - pour implémenter une interface. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - La bibliothèque FSharp.Core définit une plage de fonctions de traitement parallèle. Ici - - - - you use some functions for parallel processing over arrays. - vous utilisez des fonctions pour le traitement parallèle des tableaux. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Pour en savoir plus, consultez : https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Tout d'abord, un tableau d'entrées. - - - - Next, define a functions that does some CPU intensive computation. - Ensuite, définissez une fonction qui effectue un calcul nécessitant une utilisation intensive du processeur. - - - - Next, do a parallel map over a large input array. - Ensuite, effectuez un mappage parallèle sur un grand tableau d'entrée. - - - - Next, print the results. - Ensuite, imprimez les résultats. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Les événements sont un idiome courant de la programmation .NET, en particulier avec les applications WinForms ou WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Pour en savoir plus, consultez : https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Pour commencer, créez une instance d'objet Event qui se compose d'un point d'abonnement (event.Publish) et d'un déclencheur d'événements (event.Trigger). - - - - Next, add handler to the event. - Ensuite, ajoutez un gestionnaire à l'événement. - - - - Next, trigger the event. - Ensuite, déclenchez l'événement. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Ensuite, créez une instance d'événement qui respecte la convention .NET standard : (sender, EventArgs). - - - - Next, add a handler for this new event. - Ensuite, ajoutez un gestionnaire à ce nouvel événement. - - - - Next, trigger this event (note that sender argument should be set). - Ensuite, déclenchez cet événement (notez que l'argument sender doit être défini). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf deleted file mode 100644 index ecd508e58b..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Questo esempio consente all'utente di familiarizzare con gli elementi del linguaggio F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Per eseguire il codice in F# Interactive, evidenziare una sezione di codice e premere ALT-INVIO oppure fare clic con il pulsante destro del mouse - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - e selezionare "Esegui in Interactive". È possibile aprire la finestra di F# Interactive dal menu "Visualizza". - - - - For more about F#, see: - Per altre informazioni su F#, vedere: - - - - To see this tutorial in documentation form, see: - Per visualizzare questa esercitazione sotto forma di documentazione, vedere: - - - - To learn more about applied F# programming, use - Per altre informazioni sulla programmazione F# applicata, usare - - - - To install the Visual F# Power Tools, use - Per installare Visual F# Power Tools, usare - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Strumenti' --> 'Estensioni e aggiornamenti' --> `Online` e cercare - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Per altri modelli da usare con F#, vedere 'Modelli online' in Visual Studio, - - - - 'New Project' --> 'Online Templates' - 'Nuovo progetto' --> 'Modelli online' - - - - F# supports three kinds of comments: - In F# sono supportati tre tipi di commenti: - - - - 1. Double-slash comments. These are used in most situations. - 1. Commenti introdotti da una doppia barra. Vengono usati nella maggior parte delle situazioni. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Commenti per il blocco in stile ML. Non vengono usati molto spesso. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Commenti introdotti da una tripla barra. Vengono usati per la documentazione di funzioni, tipi e così via. - - - - They will appear as text when you hover over something which is decorated with these comments. - Verranno visualizzati come testo quando si passa con il puntatore su un elemento decorato con questi commenti. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Supportano anche commenti XML in stile .NET, che consentono di generare documentazione di riferimento. - - - - and they also allow editors (such as Visual Studio) to extract information from them. - Consentono anche agli editor, come Visual Studio, di estrarre informazioni. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Aprire gli spazi dei nomi con la parola chiave 'open'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Un modulo è un raggruppamento di codice F#, ad esempio valori, tipi e valori di funzione. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Il raggruppamento del codice nei moduli consente di riunire il codice correlato e contribuisce a evitare conflitti di nome nel programma. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Questo è un valore integer di esempio. - - - - This is a sample floating point number. - Questo è un numero a virgola mobile di esempio. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Questo ha calcolato un nuovo numero in base a una certa aritmetica. I tipi numerici vengono convertiti con - - - - functions 'int', 'double' and so on. - funzioni 'int', 'double' e così via. - - - - This is a list of the numbers from 0 to 99. - Questo è un elenco di numeri compresi tra 0 e 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Questo è un elenco di tutte le tuple che contengono tutti i numeri compresi tra 0 e 99 e i relativi quadrati. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - La riga successiva stampa un elenco che include le tuple, usando '%A' per la stampa generica. - - - - This is a sample integer with a type annotation - Questo è un intero di esempio con un'annotazione di tipo - - - - Values in F# are immutable by default. They cannot be changed - Per impostazione predefinita, i valori in F# non sono modificabili e non è possibile cambiarli - - - - in the course of a program's execution unless explicitly marked as mutable. - durante l'esecuzione di un programma a meno che non siano contrassegnati esplicitamente come modificabili. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Il binding di un valore in un nome tramite 'let' lo rende non modificabile. - - - - The second line of code fails to compile because 'number' is immutable and bound. - La seconda riga di codice non viene compilata perché 'number' non è modificabile e ne è stato eseguito il binding. - - - - Re-defining 'number' to be a different value is not allowed in F#. - La ridefinizione di 'number' in un valore diverso non è consentita in F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Binding modificabile. È necessario per poter modificare il valore di 'otherNumber'. - - - - When mutating a value, use '<-' to assign a new value. - Durante la modifica di un valore, usare '<-' per assegnare un nuovo valore. - - - - You could not use '=' here for this purpose since it is used for equality - Non è possibile usare '=' in questo punto per questa finalità perché viene usato per l'uguaglianza - - - - or other contexts such as 'let' or 'module' - o altri contesti come 'let' o 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - Buona parte della programmazione F# consiste nella definizione di funzioni che trasformano i dati di input per produrre - - - - useful results. - risultati utili. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Usare 'let' per definire una funzione. Questa accetta un argomento Integer e restituisce un intero. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Le parentesi sono facoltative per gli argomenti di funzione, ad eccezione dei casi in cui si usa un'annotazione di tipo esplicita. - - - - Apply the function, naming the function return result using 'let'. - Applicare la funzione, denominando il risultato restituito della funzione tramite 'let'. - - - - The variable type is inferred from the function return type. - Il tipo variabile viene dedotto dal tipo restituito della funzione. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Questa riga usa '%d' per stampare il risultato in formato Integer. È indipendente dai tipi. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Se il tipo di 'result1' non fosse 'int', la riga non verrebbe compilata. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Quando necessario, annotare il tipo di un nome di parametro usando '(argument:type)'. Le parentesi sono obbligatorie. - - - - Conditionals use if/then/elid/elif/else. - Nelle istruzioni condizionali si usano if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Si noti che F# usa la sintassi con riconoscimento degli spazi vuoti di rientro, in modo analogo a linguaggi come Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Questa riga usa '%f' per stampare il risultato in formato float. Come con '%d' in precedenza, è indipendente dai tipi. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - I valori booleani sono tipi di dati fondamentali in F#. Ecco alcuni esempi di valori booleani e logica condizionale. - - - - To learn more, see: - Per altre informazioni, vedere: - - - - and - e - - - - Booleans values are 'true' and 'false'. - I valori booleani sono 'true' e 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Gli operatori su valori booleani sono 'not', '&&' e '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Questa riga usa '%b' per stampare un valore booleano. È indipendente dai tipi. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Le stringhe sono tipi di dati fondamentali in F#. Ecco alcuni esempi di stringhe e di manipolazione di base delle stringhe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Per le stringhe si usano le virgolette doppie. - - - - Strings can also use @ to create a verbatim string literal. - Nelle stringhe si può anche usare @ per creare un valore letterale di stringa verbatim. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - In questo modo i caratteri di escape, come '\', '\n', '\t' e così via, verranno ignorati. - - - - String literals can also use triple-quotes. - Nei valori letterali si possono usare anche virgolette triple. - - - - String concatenation is normally done with the '+' operator. - Per la concatenazione di stringhe viene in genere usato l'operatore '+'. - - - - This line uses '%s' to print a string value. This is type-safe. - Questa riga usa '%s' per stampare un valore stringa. È indipendente dai tipi. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Nelle sottostringhe si usa la notazione dell'indicizzatore. Questa riga estrae i primi sette caratteri come sottostringa. - - - - Note that like many languages, Strings are zero-indexed in F#. - Si noti che, analogamente a molti linguaggi, le stringhe presentano indice zero in F#. - - - - Tuples are simple combinations of data values into a combined value. - Le tuple sono semplici combinazioni di valori dati in un valore combinato. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Tupla di interi semplice. - - - - A function that swaps the order of two values in a tuple. - Funzione che scambia l'ordine di due valori in una tupla. - - - - F# Type Inference will automatically generalize the function to have a generic type, - L'inferenza del tipo di F# consentirà di generalizzare automaticamente la funzione in modo che il relativo tipo sia generico, - - - - meaning that it will work with any type. - per indicare che funzionerà con qualsiasi tipo. - - - - A tuple consisting of an integer, a string, - Tupla costituita da un intero, una stringa - - - - and a double-precision floating point number. - e un numero a virgola mobile a precisione doppia. - - - - A simple tuple of integers with a type annotation. - Tupla di interi semplice con annotazione di tipo. - - - - Type annotations for tuples use the * symbol to separate elements - Nelle annotazioni di tipo per le tuple si usa il simbolo * per separare gli elementi - - - - Tuples are normally objects, but they can also be represented as structs. - Le tuple sono in genere oggetti, ma possono essere rappresentate anche come struct. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Questi interagiscono completamente con gli struct in C# e Visual Basic.NET; tuttavia, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - le tuple di struct non sono convertibili in modo implicito con tuple di oggetto (spesso chiamate tuple di riferimento). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - A causa di questo problema la seconda riga sotto non verrà compilata. Rimuovere il commento per vedere cosa succede. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Anche se non è possibile eseguire la conversione in modo implicito tra tuple della struttura e tuple di riferimento, - - - - you can explicitly convert via pattern matching, as demonstrated below. - è possibile eseguire la conversione in modo esplicito tramite i criteri di ricerca, come illustrato di seguito. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Gli operatori pipe di F# ('|>', '<|' e così via) e gli operatori di composizione di F# ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - sono particolarmente usati durante l'elaborazione dati. Questi operatori sono di per sé funzioni - - - - which make use of Partial Application. - che usano l'applicazione parziale. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Per altre informazioni su questi operatori, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Per altre informazioni sull'applicazione parziale, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Calcola il quadrato di un valore. - - - - Adds 1 to a value. - Aggiunge 1 a un valore. - - - - Tests if an integer value is odd via modulo. - Testa se un valore intero è dispari tramite modulo. - - - - A list of 5 numbers. More on lists later. - Elenco di cinque numeri. Per altre informazioni sugli elenchi, vedere più avanti. - - - - Given a list of integers, it filters out the even numbers, - Dato un elenco di interi, filtra i numeri pari, - - - - squares the resulting odds, and adds 1 to the squared odds. - calcola i quadrati dei numeri dispari risultati e aggiunge 1 ai numeri dispari quadrati. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Uno dei modi più brevi per scrivere 'squareOddValuesAndAddOne' consiste nell'annidare ogni - - - - sub-result into the function calls themselves. - risultato secondario nelle chiamate di funzione stesse. - - - - This makes the function much shorter, but it's difficult to see the - In questo modo la funzione è molto più breve, ma risulta più difficile visualizzare - - - - order in which the data is processed. - l'ordine in cui vengono elaborati i dati. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Uno dei modi preferiti per scrivere 'squareOddValuesAndAddOne' consiste nell'usare gli operatori pipe di F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - In tal modo sarà possibile evitare risultati intermedi, ma si migliora la leggibilità - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - rispetto all'annidamento di chiamate di funzione come 'squareOddValuesAndAddOneNested' - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - È possibile abbreviare 'squareOddValuesAndAddOnePipeline' spostando la seconda chiamata a `List.map` - - - - into the first, using a Lambda Function. - nella prima usando una funzione lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Si noti che le pipeline vengono usate anche all'interno della funzione lambda. Gli operatori pipe di F# - - - - can be used for single values as well. This makes them very powerful for processing data. - possono essere usati anche per singoli valori, di conseguenza sono particolarmente efficaci per l'elaborazione dei dati. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - È infine possibile evitare di accettare in modo esplicito 'values' come parametro usando '>>' - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - per comporre le due operazioni di base, ovvero filtrare i numeri pari, calcolare il quadrato e aggiungere 1. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Analogamente, anche la parte 'fun x -> ...' dell'espressione lambda non è necessaria perché 'x' viene semplicemente - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - definito in tale ambito in modo che sia possibile passarlo a una pipeline funzionale. In questo punto è quindi possibile - - - - there as well. - usare anche '>>'. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Il risultato di 'squareOddValuesAndAddOneComposition' è di per sé un'altra funzione che accetta come input un - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - elenco di interi. Se si esegue 'squareOddValuesAndAddOneComposition' con un elenco - - - - of integers, you'll notice that it produces the same results as previous functions. - di interi, si noterà che consente di ottenere gli stessi risultati delle funzioni precedenti. - - - - This is using what is known as function composition. This is possible because functions in F# - Usa la cosiddetta composizione di funzione. Tale operazione è possibile perché in F# le funzioni - - - - use Partial Application and the input and output types of each data processing operation match - usano l'applicazione parziale e i tipi di input e output di ogni operazione di elaborazione dati corrispondono - - - - the signatures of the functions we're using. - alle firme delle funzioni usate. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Gli elenchi sono elenchi a un solo collegamento ordinati e non modificabili la cui valutazione è di tipo eager. - - - - This module shows various ways to generate lists and process lists with some functions - Questo modulo mostra diversi modi per generare elenchi ed elenchi i processi con alcune funzioni - - - - in the 'List' module in the F# Core Library. - nel modulo 'List' della libreria di base di F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Per definire gli elenchi si usa [ ... ]. Questo è un elenco vuoto. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Questo è un elenco con tre elementi. Per delimitare gli elementi sulla stessa riga, viene usato il punto e virgola (';'). - - - - You can also separate elements by placing them on their own lines. - È anche possibile delimitare gli elementi posizionandoli su righe distinte. - - - - This is a list of integers from 1 to 1000 - Questo è un elenco di numeri interi tra 1 e 1000 - - - - Lists can also be generated by computations. This is a list containing - Gli elenchi possono anche essere generati da calcoli. Questo è un elenco contenente - - - - all the days of the year. - tutti i giorni dell'anno. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Stampa i primi cinque elementi di 'daysList' usando 'List.take'. - - - - Computations can include conditionals. This is a list containing the tuples - I calcoli possono contenere istruzioni condizionali. Questo è un elenco contenente le tuple - - - - which are the coordinates of the black squares on a chess board. - che rappresentano le coordinate dei quadrati neri su una scacchiera. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Per trasformare gli elenchi, è possibile usare 'List.map' e altri combinatori di programmazione funzionale. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Questa definizione consente di produrre un nuovo elenco mediante la quadratura dei numeri in numberList, usando l'operatore pipeline - - - - operator to pass an argument to List.map. - per passare un argomento a List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Esistono molte altre combinazioni di elenco. L'istruzione seguente calcola la somma dei quadrati dei - - - - numbers divisible by 3. - numeri divisibili per 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Le matrici sono raccolte modificabili di dimensioni fisse di elementi dello stesso tipo. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Anche se sono simili agli elenchi (supportano l'enumerazione e contengono combinatori simili per l'elaborazione dati), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - sono in genere più veloci e supportano l'accesso casuale rapido. La maggiore velocità implica però una minore sicurezza perché questi elementi sono modificabili. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Questa è la matrice vuota. Si noti che la sintassi è simile a quella degli elenchi, ma viene usato `[| ... |]`. - - - - Arrays are specified using the same range of constructs as lists. - Per specificare le matrici viene usato lo stesso intervallo di costrutti degli elenchi. - - - - This is an array of numbers from 1 to 1000. - Questo è una matrice di numeri compresi tra 1 e 1000. - - - - This is an array containing only the words "hello" and "world". - Questa è una matrice contenente solo le parole "hello" e "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Questa è una matrice inizializzata dall'indice e contenente i numeri pari compresi tra 0 e 2000. - - - - Sub-arrays are extracted using slicing notation. - Le sottomatrici vengono estratte mediante una notazione di sezionamento. - - - - You can loop over arrays and lists using 'for' loops. - Per eseguire il ciclo su matrici ed elenchi, si possono usare i cicli 'for'. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - È possibile modificare il contenuto di un elemento di matrice usando l'operatore di assegnazione freccia sinistra. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Per altre informazioni su questo operatore, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Per trasformare le matrici, è possibile usare 'Array.map' e altre operazioni di programmazione funzionale. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Il codice seguente consente di calcolare la somma delle lunghezze delle parole che iniziano con 'h'. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Le sequenze sono costituite da una serie logica di elementi, tutti dello stesso tipo. Sono di un tipo più generale rispetto ad elenchi e matrici. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Le sequenze vengono valutate su richiesta e rivalutate ogni volta che vengono iterate. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Una sequenza F# è un alias dell'elemento System.Collections.Generic.IEnumerable<'T> di .NET. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Le funzioni di elaborazione della sequenza possono essere applicate anche a elenchi e matrici. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Questa è la sequenza vuota. - - - - This a sequence of values. - Questa è una sequenza di valori. - - - - This is an on-demand sequence from 1 to 1000. - Questa è una sequenza su richiesta compresa tra 1 e 1000. - - - - This is a sequence producing the words "hello" and "world" - Questa è una sequenza che produce le parole "hello" e "world" - - - - This sequence producing the even numbers up to 2000. - Questa è la sequenza che produce i numeri pari fino a 2000. - - - - This is an infinite sequence which is a random walk. - Questa è una sequenza infinita, ovvero un percorso casuale. - - - - This example uses yield! to return each element of a subsequence. - In questo esempio si usa yield! per restituire ogni elemento di una sottosequenza. - - - - This example shows the first 100 elements of the random walk. - Questo esempio mostra i primi 100 elementi del percorso casuale. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Le funzioni ricorsive possono chiamarsi da sole. In F# le funzioni sono ricorsive solo - - - - when declared using 'let rec'. - quando per la dichiarazione si usa 'let rec'. - - - - Recursion is the preferred way to process sequences or collections in F#. - La ricorsione è il modo preferito per elaborare sequenze o raccolte in F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Questo esempio mostra una funzione ricorsiva che calcola il fattoriale di un - - - - integer. It uses 'let rec' to define a recursive function. - numero intero. Usa 'let rec' per definire una funzione ricorsiva. - - - - Computes the greatest common factor of two integers. - Calcola il fattore comune maggiore di due interi. - - - - Since all of the recursive calls are tail calls, - Dal momento che tutte le chiamate ricorsive sono chiamate tail, - - - - the compiler will turn the function into a loop, - il compilatore convertirà la funzione in un ciclo, - - - - which improves performance and reduces memory consumption. - in modo da migliorare le prestazioni e ridurre il consumo di memoria. - - - - This example computes the sum of a list of integers using recursion. - Questo esempio consente di calcolare la somma di un elenco di interi usando la ricorsione. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - In questo modo la funzione tail 'sumList' viene resa ricorsiva, usando una funzione helper con un accumulatore di risultati. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Viene chiamata la funzione helper tail ricorsiva, fornendo '0' come accumulatore di seeding. - - - - An approach like this is common in F#. - Un approccio di questo tipo è comune in F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - I record sono un aggregato di valori denominati, con membri facoltativi, ad esempio metodi. - - - - They are immutable and have structural equality semantics. - Non sono modificabili e includono la semantica di uguaglianza strutturale. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Questo esempio mostra come definire un nuovo tipo di record. - - - - This example shows how to instantiate a record type. - Questo esempio mostra come creare un'istanza di un tipo di record. - - - - You can also do this on the same line with ';' separators. - È possibile eseguire questa operazione sulla stessa riga usando i separatori ';'. - - - - This example shows how to use "copy-and-update" on record values. It creates - Questo esempio mostra come usare il metodo di copia e aggiornamento su valori di record. Crea - - - - a new record value that is a copy of contact1, but has different values for - un nuovo valore di record che è una copia di contact1, ma contiene valori diversi per - - - - the 'Phone' and 'Verified' fields. - i campi 'Phone' e 'Verified'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Questo esempio mostra come scrivere una funzione che elabora un valore di record. - - - - It converts a 'ContactCard' object to a string. - Converte un oggetto 'ContactCard' in una stringa. - - - - This is an example of a Record with a member. - Questo è un esempio di record con un membro. - - - - Members can implement object-oriented members. - I membri possono implementare membri orientati a oggetti. - - - - Members are accessed via the '.' operator on an instantiated type. - In un tipo di cui è stata creata un'istanza l'accesso ai membri avviene tramite l'operatore '.'. - - - - Records can also be represented as structs via the 'Struct' attribute. - I record possono essere rappresentati anche come struct tramite l'attributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Questo comportamento è utile in situazioni in cui la prestazioni degli struct sono prioritarie rispetto alla - - - - the flexibility of reference types. - flessibilità dei tipi di riferimento. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Le unioni discriminate sono valori che potrebbero corrispondere a un certo numero di case o form denominati. - - - - Data stored in DUs can be one of several distinct values. - I dati archiviati nelle unioni discriminate possono essere uno di diversi valori distinti. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - L'istruzione seguente rappresenta il seme di una carta da gioco. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - È possibile usare un'unione discriminata anche per rappresentare il valore di una carta da gioco. - - - - Represents the rank of cards 2 .. 10 - Rappresenta il valore delle carte da 2 a 10 - - - - Discriminated Unions can also implement object-oriented members. - Le unioni discriminate possono inoltre implementare membri orientati a oggetti. - - - - This is a record type that combines a Suit and a Rank. - Questo è un tipo di record che combina un seme e un valore. - - - - It's common to use both Records and Disciminated Unions when representing data. - Per la rappresentazione dei dati si usano in genere record e unioni discriminate. - - - - This computes a list representing all the cards in the deck. - Calcola un elenco che rappresenta tutte le carte del mazzo. - - - - This example converts a 'Card' object to a string. - Questo esempio consente di convertire un oggetto 'Card' in una stringa. - - - - This example prints all the cards in a playing deck. - Questo esempio consente di stampare tutte le carte di un mazzo. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Le unioni discriminate a case singolo vengono spesso usate per la modellazione dei domini. In questo modo è possibile garantire una maggiore sicurezza dei tipi - - - - over primitive types such as strings and ints. - rispetto a tipi primitivi come stringhe e valori int. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Le unioni discriminate a case singolo non possono essere convertite in modo implicito nel o dal tipo di cui eseguono il wrapping. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Ad esempio, una funzione che accetta un indirizzo non può accettare come input una stringa, - - - - or vive/versa. - o viceversa. - - - - You can easily instantiate a single-case DU as follows. - È possibile creare facilmente un'istanza di una unione discriminata a case singolo come descritto di seguito. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Quando è necessario il valore, è possibile annullare il wrapping del valore sottostante con una funzione semplice. - - - - Printing single-case DUs is simple with unwrapping functions. - Le funzioni di unwrapping semplificano la stampa di unioni discriminate a case singolo. - - - - Disciminated Unions also support recursive definitions. - Le unioni discriminate supportano anche definizioni ricorsive. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Rappresenta un albero di ricerca binaria, in cui un caso è l'albero vuoto, - - - - and the other being a Node with a value and two subtrees. - e l'altro è un nodo con un valore e due sottoalberi. - - - - Check if an item exists in the binary search tree. - Verifica l'esistenza di un elemento nell'albero della ricerca binaria. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Esegue la ricerca in modo ricorsivo usando i criteri di ricerca. Restituisce true se esiste; in caso contrario, false. - - - - Check the left subtree. - Verifica il sottoalbero di sinistra. - - - - Check the right subtree. - Verifica il sottoalbero di destra. - - - - Inserts an item in the Binary Search Tree. - Inserisce un elemento nell'albero della ricerca binaria. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Trova la posizione da inserire in modo ricorsivo con i criteri di ricerca, quindi inserisce un nuovo nodo. - - - - If the item is already present, it does not insert anything. - Se l'elemento è già presente, non inserisce nulla. - - - - No need to insert, it already exists; return the node. - Non è necessario inserirla perché esiste già; restituisce il nodo. - - - - Call into left subtree. - Chiamata nel sottoalbero di sinistra. - - - - Call into right subtree. - Chiamata nel sottoalbero di destra. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Le unioni discriminate possono essere rappresentate anche come struct tramite l'attributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Questo comportamento è utile in situazioni in cui la prestazioni degli struct sono prioritarie rispetto alla - - - - the flexibility of reference types. - flessibilità dei tipi di riferimento. - - - - However, there are two important things to know when doing this: - Quando si esegue questa operazione, è però importante conoscere due aspetti: - - - - 1. A struct DU cannot be recursively-defined. - 1. Un'unione discriminata di struct non può essere definita in modo ricorsivo. - - - - 2. A struct DU must have unique names for each of its cases. - 2. A ogni case di un'unione discriminata di struct deve essere assegnato un nome univoco. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - I criteri di ricerca sono una funzionalità di F# che consente di utilizzare i criteri, - - - - which are a way to compare data with a logical structure or structures, - che consentono di confrontare i dati con una o più strutture logiche, - - - - decompose data into constituent parts, or extract information from data in various ways. - scomporre i dati nelle parti costituenti o estrarre le informazioni dai dati in diversi modi. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - È quindi possibile intervenire sulla "forma" di un criterio tramite i criteri di ricerca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Record per il nome e il cognome di una persona - - - - A Discriminated Union of 3 different kinds of employees - Unione discriminata di tre diversi tipi di dipendenti - - - - Count everyone underneath the employee in the management hierarchy, - Conta chiunque sotto il dipendente nella gerarchia di gestione, - - - - including the employee. - includendo il dipendente. - - - - Find all managers/executives named "Dave" who do not have any reports. - Trova tutti i manager/dirigenti il cui nome è "Dave" e per i quali non sono disponibili report. - - - - This uses the 'function' shorthand to as a lambda expression. - Usa la sintassi abbreviata di 'function' come espressione lambda. - - - - [] matches an empty list. - [] corrisponde a un elenco vuoto. - - - - '_' is a wildcard pattern that matches anything. - '_' è un carattere jolly che corrisponde a qualsiasi stringa. - - - - This handles the "or else" case. - Gestisce il caso "or else". - - - - You can also use the shorthand function construct for pattern matching, - Per i criteri di ricerca è anche possibile usare il costrutto di funzione a sintassi abbreviata, - - - - which is useful when you're writing functions which make use of Partial Application. - che risulta utile quando si scrivono funzioni che usano l'applicazione parziale. - - - - Define some more functions which parse with the helper function. - Consente di definire alcune altre funzioni che vengono analizzate con la funzione helper. - - - - Active Patterns are another powerful construct to use with pattern matching. - I criteri attivi sono un altro costrutto efficace da usare con i criteri di ricerca. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Consentono di partizionare i dati di input in form personalizzati, scomponendoli a livello del sito di chiamata dei criteri di ricerca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - I criteri di ricerca con parola chiave 'function' e criteri attivi sono spesso simili a questi. - - - - Call the printer with some different values to parse. - Chiama la stampante con alcuni valori diversi da analizzare. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Il valore dell'opzione è qualsiasi valore con tag 'Some' o 'None'. - - - - They are used extensively in F# code to represent the cases where many other - Questi valori sono ampiamente utilizzati nel codice F# per rappresentare i casi in cui molti altri - - - - languages would use null references. - linguaggi utilizzerebbero riferimenti null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Consente innanzitutto di definire un codice postale definito tramite l'unione discriminata a case singolo. - - - - Next, define a type where the ZipCode is optional. - Definire quindi un tipo in cui l'elemento ZipCode è facoltativo. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Definire quindi un tipo di interfaccia che rappresenta un oggetto per calcolare la zona di spedizione per il codice postale del cliente, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - date le implementazioni per i metodi astratti 'getState' e 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Calcolare quindi una zona di spedizione per un cliente usando un'istanza della calcolatrice. - - - - This uses combinators in the Option module to allow a functional pipeline for - Usa i combinatori del modulo Option per consentire una pipeline funzionale per - - - - transforming data with Optionals. - la trasformazione di dati con Optionals. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Le unità di misura consentono di annotare tipi numerici primitivi in modo indipendente dai tipi. - - - - You can then perform type-safe arithmetic on these values. - È quindi possibile eseguire operazioni aritmetiche indipendenti dai tipi su questi valori. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Aprire innanzitutto una raccolta di nomi di unità comuni - - - - Define a unitized constant - Definire una costante unificata - - - - Next, define a new unit type - Definire quindi un nuovo tipo di unità - - - - Conversion factor mile to meter. - Fattore di conversione da miglia a metri. - - - - Define a unitized constant - Definire una costante unificata - - - - Compute metric-system constant - Calcola la costante del sistema metrico - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - I valori che usano unità di misura possono essere usati come il tipo numerico primitivo per elementi come la stampa. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Le classi sono un modo per definire nuovi tipi di oggetto in F# e supportano costrutti standard orientati a oggetti. - - - - They can have a variety of members (methods, properties, events, etc.) - Possono includere numerosi membri (metodi, proprietà, eventi e così via) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Per altre informazioni sulle classi, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Per altre informazioni sui membri, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Semplice classe di vettore bidimensionale. - - - - The class's constructor is on the first line, - Il costruttore della classe si trova sulla prima riga - - - - and takes two arguments: dx and dy, both of type 'double'. - e accetta due argomenti, dx e dy, entrambi di tipo 'double'. - - - - This internal field stores the length of the vector, computed when the - In questo campo interno è archiviata la lunghezza del vettore, calcolata durante - - - - object is constructed - la costruzione dell'oggetto - - - - 'this' specifies a name for the object's self identifier. - 'this' specifica un nome per l'autoidentificatore dell'oggetto. - - - - In instance methods, it must appear before the member name. - Nei metodi di istanza, deve trovarsi prima del nome del membro. - - - - This member is a method. The previous members were properties. - Questo membro è un metodo. I membri precedenti erano proprietà. - - - - This is how you instantiate the Vector2D class. - In questo modo viene creata un'istanza della classe Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Consente di ottenere un nuovo oggetto vettore scalato senza modificare l'oggetto originale. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Le classi generiche consentono di definire tipi rispetto a un set di parametri di tipo. - - - - In the following, 'T is the type parameter for the class. - Nel codice seguente 'T è il parametro di tipo per la classe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Questo campo interno archivia gli stati in un elenco. - - - - Add a new element to the list of states. - Aggiunge un nuovo elemento all'elenco degli stati. - - - - use the '<-' operator to mutate the value. - usare l'operatore '<-' per modificare il valore. - - - - Get the entire list of historical states. - Consente di ottenere l'intero elenco degli stati cronologici. - - - - Get the latest state. - Consente di ottenere l'ultimo stato. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Istanza 'int' della classe di rilevamento stato. Si noti che il parametro di tipo è dedotto. - - - - Add a state - Viene aggiunto uno stato - - - - Interfaces are object types with only 'abstract' members. - Le interfacce sono tipi di oggetto contenenti solo membri 'abstract'. - - - - Object types and object expressions can implement interfaces. - I tipi di oggetto e le espressioni di oggetto possono implementare interfacce. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Questo è un tipo che implementa IDisposable. - - - - This is the implementation of IDisposable members. - Questa è l'implementazione dei membri di IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Questo è un oggetto che implementa IDisposable tramite un'espressione di oggetto - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Diversamente da altri linguaggi, come C# o Java, non è necessaria una nuova definizione di tipo - - - - to implement an interface. - per implementare un'interfaccia. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - La libreria FSharp.Core definisce un intervallo di funzioni di elaborazione parallela. In questo caso - - - - you use some functions for parallel processing over arrays. - si usano alcune funzioni per l'elaborazione parallela sulle matrici. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Per altre informazioni, vedere: https://msdn.microsoft.com/it-it/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Definire innanzitutto una matrice di input. - - - - Next, define a functions that does some CPU intensive computation. - Definire quindi una funzione che esegue alcuni calcoli intensivi della CPU. - - - - Next, do a parallel map over a large input array. - Eseguire quindi un mapping parallelo su una matrice di input di grandi dimensioni. - - - - Next, print the results. - Stampare quindi i risultati. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Gli eventi sono un termine comune per la programmazione .NET, in particolare con le applicazioni Windows Form o WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Per altre informazioni, vedere: https://docs.microsoft.com/it-it/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Creare innanzitutto un'istanza dell'oggetto Event costituito dal punto di sottoscrizione (event.Publish) e dal trigger di evento (event.Trigger). - - - - Next, add handler to the event. - Aggiungere quindi il gestore all'evento. - - - - Next, trigger the event. - Attivare quindi l'evento. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Creare quindi un'istanza dell'oggetto Event che segue la convenzione .NET standard: (sender, EventArgs). - - - - Next, add a handler for this new event. - Aggiungere quindi un gestore per questo nuovo evento. - - - - Next, trigger this event (note that sender argument should be set). - Attivare quindi questo evento (si noti che è necessario impostare l'argomento sender). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf deleted file mode 100644 index 0eda61edb1..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - このサンプルは、F# 言語の要素を紹介します。 - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - F# インタラクティブでコードを実行するには、コードの一部を強調表示して、Alt キーを押しながら Enter キーを押すか、右マウス ボタンをクリックし - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - [対話形式で実行]5D; を選択します。[表示]5D; メニューから F# インタラクティブ ウィンドウを開くことができます。 - - - - For more about F#, see: - F# の詳細については、次のページを参照してください: - - - - To see this tutorial in documentation form, see: - このチュートリアルをドキュメント形式で表示するには、次を参照してください: - - - - To learn more about applied F# programming, use - 適用された F# プログラミングの詳細については、次を使用します - - - - To install the Visual F# Power Tools, use - Visual F# Power Tools をインストールするには、次を使用します - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - [ツール]5D; --> [拡張機能と更新プログラム]5D; --> [オンライン]5D; と検索 - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - F# で使用するその他のテンプレートについては、Visual Studio の 'オンライン テンプレート' を参照してください。 - - - - 'New Project' --> 'Online Templates' - ([新しいプロジェクト]5D; --> [オンライン テンプレート]5D;) を参照してください。 - - - - F# supports three kinds of comments: - F# は、3 種類のコメントをサポートしています: - - - - 1. Double-slash comments. These are used in most situations. - 1. ダブルスラッシュ コメント。これはほとんどの場合に使用されます。 - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML スタイル ブロック コメント。これはそれほど頻繁には使用されません。 - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. トリプル スラッシュ コメント。これは、関数や型などの文書化に使用されます。 - - - - They will appear as text when you hover over something which is decorated with these comments. - このコメントで修飾されているものをポイントすると、これがテキストとして表示されます。 - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - これは .NET スタイルの XML コメントもサポートしています。このコメントを使用すると、リファレンス ドキュメントを生成できます。 - - - - and they also allow editors (such as Visual Studio) to extract information from them. - また、(Visual Studio などの) エディターでそこから情報を抽出することもできます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 'open' キーワードを使用して名前空間を開きます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - モジュールは、値、型、関数値などの、F# コードのグループ化です。 - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - コードをモジュールにグループ化することで、関連コードを 1 つにまとめて、プログラムでの名前の競合を回避することができます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - これは、サンプルの整数値です。 - - - - This is a sample floating point number. - これは、サンプルの浮動小数点数です。 - - - - This computed a new number by some arithmetic. Numeric types are converted using - 算術によって新しい数値が算出されました。数値型は以下を使用するよう変換されています - - - - functions 'int', 'double' and so on. - 関数の 'int'、'double' などです。 - - - - This is a list of the numbers from 0 to 99. - これは 0 ~ 99 の数値のリストです。 - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - これは、0 ~ 99 のすべての数値とその二乗を含むすべてのタプルのリストです。 - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 次の行は、タプルを含むリストを出力します。一般的な出力に '%A' を使用しています。 - - - - This is a sample integer with a type annotation - これは、型の注釈付きのサンプルの整数です - - - - Values in F# are immutable by default. They cannot be changed - 既定では、F# の値は不変です。明示的に変更可能として指定しない限り、 - - - - in the course of a program's execution unless explicitly marked as mutable. - プログラムの実行の過程で変更することはできません。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 'let' を介して値を名前にバインドすると、変更できなくなります。 - - - - The second line of code fails to compile because 'number' is immutable and bound. - コードの 2 番目の行は、'number' が変更できず、バインドされているため、コンパイルに失敗します。 - - - - Re-defining 'number' to be a different value is not allowed in F#. - F# では、'number' を別の値に再定義することはできません。 - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 変更可能なバインド。これは 'otherNumber' の値を変更できるようにするために必要です。 - - - - When mutating a value, use '<-' to assign a new value. - 値を変換する場合は、'<-' を使用して新しい値を割り当てます。 - - - - You could not use '=' here for this purpose since it is used for equality - この場合、'=' は等価を示すために使用するため、ここで使用することはできません - - - - or other contexts such as 'let' or 'module' - または、'let' や 'module' などの他のコンテキスト - - - - Much of F# programming consists of defining functions that transform input data to produce - F# プログラミングの多くは、生成する入力データを変換する定義する関数で構成されています - - - - useful results. - 有用な結果。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 関数を定義するには、'let' を使用します。これは整数の引数を受け取り、整数を返します。 - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 明示的な型の注釈を使用する場合を除いて、かっこは関数引数では省略可能です。 - - - - Apply the function, naming the function return result using 'let'. - 関数を適用します。'let' を使用し、関数の戻り値の結果に名前を付けます。 - - - - The variable type is inferred from the function return type. - 変数の型は、関数の戻り値の型から推論されます。 - - - - This line uses '%d' to print the result as an integer. This is type-safe. - この行は '%d' を使用して結果を整数として出力します。これはタイプ セーフです。 - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 'result1' が 'int' 型でなかった場合、行はコンパイルに失敗します。 - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 必要であれば、'(引数:型)' を使用してパラメーター名の型に注釈を付けます。かっこは必須です。 - - - - Conditionals use if/then/elid/elif/else. - 条件は、if/then/elid/elif/else を使用します。 - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - F# は Python などの言語のように、空白のインデント対応構文を使用することに注意してください。 - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - この行は '%f' を使用して結果を浮動小数として出力します。上記の '%d' と同様に、これはタイプ セーフです。 - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - ブール値は F# の基本のデータ型です。ブール値と条件ロジックの例をいくつか示します。 - - - - To learn more, see: - 詳細については、次を参照してください: - - - - and - AND - - - - Booleans values are 'true' and 'false'. - ブール型の値は 'true' と 'false' です。 - - - - Operators on booleans are 'not', '&&' and '||'. - ブール値の演算子は 'not'、'&&'、および '||' です。 - - - - This line uses '%b'to print a boolean value. This is type-safe. - この行は '%b' を使用してブール値を出力します。これはタイプ セーフです。 - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 文字列は F# の基本のデータ型です。文字列と基本的な文字列操作の例をいくつか示します。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 文字列は二重引用符を使用します。 - - - - Strings can also use @ to create a verbatim string literal. - 文字列は @ を使用して、verbatim 文字列リテラルを作成することもできます。 - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - これは、'\'、'\n'、'\t' などのエスケープ文字を無視します。 - - - - String literals can also use triple-quotes. - 文字列リテラルは三重引用符を使用することもできます。 - - - - String concatenation is normally done with the '+' operator. - 通常、文字列の連結は '+' 演算子を使用して実行されます。 - - - - This line uses '%s' to print a string value. This is type-safe. - この行は、'%s' を使用して文字列値を出力します。これはタイプ セーフです。 - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - サブ文字列はインデクサー表記を使用します。この行はサブ文字列として最初の 7 文字を抽出します。 - - - - Note that like many languages, Strings are zero-indexed in F#. - 多くの言語と同様に、F# では、文字列のインデックスは 0 から始まることに注意してください。 - - - - Tuples are simple combinations of data values into a combined value. - タプルは、データ値と合計値の単純な組み合わせです。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 整数のシンプルなタプルです。 - - - - A function that swaps the order of two values in a tuple. - タプルの 2 つの値の順序を入れ替える関数。 - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 型の推定は、ジェネリック型を持つように関数を自動的に一般化し、 - - - - meaning that it will work with any type. - 任意の型で動作することを意味します。 - - - - A tuple consisting of an integer, a string, - タプルを構成するのは、整数、文字列、 - - - - and a double-precision floating point number. - および倍精度浮動小数点数です。 - - - - A simple tuple of integers with a type annotation. - 型の注釈が指定された整数のシンプルなタプル。 - - - - Type annotations for tuples use the * symbol to separate elements - タプルの型の注釈では、要素を区切るために * の記号を使用します - - - - Tuples are normally objects, but they can also be represented as structs. - タプルは通常はオブジェクトですが、構造体として表すこともできます。 - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - C# と Visual Basic.NET では、これらは構造体と完全に相互運用されます。ただし、 - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 構造体のタプルは、オブジェクト タプル (参照タプルと呼ばれることが多い) と暗黙的に変換できません。 - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - このため、以下の 2 番目の行はコンパイルに失敗します。発生する事象を確認するには、コメントを解除します。 - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 構造体タプルと参照タプル間で暗黙的に変換することはできませんが、 - - - - you can explicitly convert via pattern matching, as demonstrated below. - 以下に示すように、パターン マッチングを使用して明示的に変換できます。 - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# パイプ演算子 ('|>'、'<|' など) と F# 合成演算子 ('>>'、'<<') - - - - are used extensively when processing data. These operators are themselves functions - は、データの処理時に幅広く使用されます。これらの演算子はそれ自体が関数であり、 - - - - which make use of Partial Application. - 部分適用を利用します。 - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - これらの演算子の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 部分適用の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 値を 2 乗します。 - - - - Adds 1 to a value. - 値に 1 を追加します。 - - - - Tests if an integer value is odd via modulo. - 剰余を使って整数値が奇数であるかどうかをテストします。 - - - - A list of 5 numbers. More on lists later. - 5 個の数値のリストです。リストの詳細については後述。 - - - - Given a list of integers, it filters out the even numbers, - 整数のリストを指定すると、偶数を除外し、 - - - - squares the resulting odds, and adds 1 to the squared odds. - 結果の奇数を 2 乗し、2 乗した奇数に 1 を加算します。 - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 'squareOddValuesAndAddOne' を記述するためのより簡単な方法は、 - - - - sub-result into the function calls themselves. - それぞれのサブ結果を関数呼び出し自体に入れ子にすることです。 - - - - This makes the function much shorter, but it's difficult to see the - これにより、関数は大幅に短くなりますが、データが処理される順序を - - - - order in which the data is processed. - 判別するのは難しくなります。 - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 'squareOddValuesAndAddOne' を記述するための推奨される方法は、F# パイプ演算子を使用する方法です。 - - - - This allows you to avoid creating intermediate results, but is much more readable - これにより、中間結果を作成しなくてもよくなります。また、 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 'squareOddValuesAndAddOneNested' のような関数呼び出しを入れ子にするよりもはるかに読みやすくすることができます - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - ラムダ関数を使用して、2 番目の `List.map` 呼び出しを先頭に移動することにより、 - - - - into the first, using a Lambda Function. - 'squareOddValuesAndAddOnePipeline' を短くすることができます。 - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - パイプラインはラムダ関数の内部でも使用されることに注意してください。F# パイプ演算子は、 - - - - can be used for single values as well. This makes them very powerful for processing data. - 単一の値にも使用できます。これにより、データ処理能力が向上します。 - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 最後に、'>>' を使用して次の 2 つのコア操作を作成すると、'values' をパラメーターとして - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 明示的に受け取る必要がなくなります: 偶数を除外してから、2 乗して 1 を加算する。 - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 同様に、ラムダ式の 'fun x -> ...' ビットも必要ありません。 'x' は単に、 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 関数型パイプラインに渡すことができるようにそのスコープ内で定義されているだけだからです。そのため、 - - - - there as well. - そこでも同様に '>>' を使用できます。 - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition' の結果は、それ自体が別の関数です。その関数は、 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 整数のリストを入力として受け取ります。整数のリストを指定して 'squareOddValuesAndAddOneComposition' を - - - - of integers, you'll notice that it produces the same results as previous functions. - 実行すると、前の関数と同じ結果が生成されることがわかります。 - - - - This is using what is known as function composition. This is possible because functions in F# - これは、関数合成と呼ばれるものを使用しています。これが可能なのは、F# の関数が - - - - use Partial Application and the input and output types of each data processing operation match - 部分適用を使用しており、各データ処理操作の入力と出力の型が、使用している - - - - the signatures of the functions we're using. - 関数のシグネチャと一致するためです。 - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - リストは、順序指定された、変更できない単方向リストです。 リストは集中評価されます。 - - - - This module shows various ways to generate lists and process lists with some functions - このモジュールは、リストを生成し、F# コア ライブラリ内の 'List' モジュールに含まれる - - - - in the 'List' module in the F# Core Library. - いくつかの関数を使用してリストを処理するためのさまざまな方法を示しています。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - リストは [ ... ] を使用して定義されます。これは空のリストです。 - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - これは 3 つの要素を含むリストです。';' は同じ行にある要素を区切るために使用されます。 - - - - You can also separate elements by placing them on their own lines. - 要素は、それぞれの行に配置することで分割することもできます。 - - - - This is a list of integers from 1 to 1000 - これは 1 ~ 1000 の整数のリストです - - - - Lists can also be generated by computations. This is a list containing - リストは計算によっても生成できます。これは、次を含むリストです: - - - - all the days of the year. - 1 年のすべての日。 - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 'List.take' を使用して 'daysList' の最初の 5 つの要素を出力します。 - - - - Computations can include conditionals. This is a list containing the tuples - 計算には条件を含めることができます。これはタプルを含むリストです - - - - which are the coordinates of the black squares on a chess board. - チェス盤の黒いマス目の座標のタプルを含むリストです。 - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - リストは 'List.map' と他の関数型プログラミング連結子を使用して変換することができます。 - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - この定義は、パイプラインを使用して numberList 内の数値を 2 乗することによって新しいリストを生成します - - - - operator to pass an argument to List.map. - 引数を List.map に渡す演算子です。 - - - - There are many other list combinations. The following computes the sum of the squares of the - 他に多くのリストの組み合わせがあります。次の二乗和をコンピューティングします: - - - - numbers divisible by 3. - 3 で割り切れる数。 - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 配列は、型が同じ要素の固定サイズの変更可能なコレクションです。 - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - これらはリストと似ています (列挙型をサポートし、データ処理のための同様の連結子を備えています) が、 - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 一般的により高速であり、高速ランダム アクセスをサポートしています。その代わり、変更可能であるため安全性が低下します。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - これは空の配列です。構文はリストの構文と似ていますが、代わりに `[| ... |]` を使用することにご注意ください。 - - - - Arrays are specified using the same range of constructs as lists. - 配列は、リストと同じコンストラクトの範囲を使用して指定されます。 - - - - This is an array of numbers from 1 to 1000. - これは 1 ~ 1000 の数値の配列です。 - - - - This is an array containing only the words "hello" and "world". - これは "hello" と "world" のみを含む配列です。 - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - これはインデックスによって初期化され、0 ~ 2000 の間の偶数を含む配列です。 - - - - Sub-arrays are extracted using slicing notation. - サブ配列はスライス表記法を使用して抽出されます。 - - - - You can loop over arrays and lists using 'for' loops. - 'for' ループを使用して、配列とリストに渡ってループできます。 - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 左矢印代入演算子を使用して、配列要素の内容を変更できます。 - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - この演算子の詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 'Array.map' と他の関数型プログラミング操作を使用して、配列を変換できます。 - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 以下は、'h' で始まる単語の長さの合計を計算します。 - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - シーケンスは論理的な一連の要素であり、すべてが同じ型です。これらはリストや配列よりも一般的な型です。 - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - シーケンスはオンデマンドで評価され、繰り返されるたびに再評価されます。 - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# シーケンスは .NET System.Collections.Generic.IEnumerable<'T> のエイリアスです。 - - - - Sequence processing functions can be applied to Lists and Arrays as well. - シーケンス処理関数はリストと配列にも適用できます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - これは空のシーケンスです。 - - - - This a sequence of values. - これは一連の値です。 - - - - This is an on-demand sequence from 1 to 1000. - これは 1 ~ 1000 のオンデマンドのシーケンスです。 - - - - This is a sequence producing the words "hello" and "world" - これは 単語 "hello" と "world" を生成するシーケンスです - - - - This sequence producing the even numbers up to 2000. - このシーケンスは、2000 までの偶数を生成します。 - - - - This is an infinite sequence which is a random walk. - これはランダム ウォークである無限シーケンスです。 - - - - This example uses yield! to return each element of a subsequence. - この例では、yield! を使用して、サブシーケンスの各要素を返します。 - - - - This example shows the first 100 elements of the random walk. - この例では、ランダム ウォークの最初の 100 要素を示します。 - - - - Recursive functions can call themselves. In F#, functions are only recursive - 再帰関数は自身を呼び出すことができます。F# では、関数は単に再帰的です - - - - when declared using 'let rec'. - 'let rec' を使用して宣言される場合。 - - - - Recursion is the preferred way to process sequences or collections in F#. - 再帰は、F# でシーケンスまたはコレクションを処理するための推奨される方法です。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - この例では、次の階乗をコンピューティングする再帰関数を示します - - - - integer. It uses 'let rec' to define a recursive function. - 整数。'let rec' を使用して、再帰関数を定義します。 - - - - Computes the greatest common factor of two integers. - 2 つの整数の最大公約数をコンピューティングします。 - - - - Since all of the recursive calls are tail calls, - すべての再帰呼び出しは末尾呼び出しであるため、 - - - - the compiler will turn the function into a loop, - コンパイラは関数をループにします - - - - which improves performance and reduces memory consumption. - これによりパフォーマンスが向上し、メモリの消費を抑えることができます。 - - - - This example computes the sum of a list of integers using recursion. - この例では、再帰を使用して整数のリストの合計をコンピューティングします。 - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - これは、ヘルパー関数を結果アキュムレータと共に使用して 'sumList' を末尾再帰にします。 - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - これは、シード アキュムレータとして '0' を指定して、末尾再帰的なヘルパー関数を呼び出します。 - - - - An approach like this is common in F#. - F# では、このようなアプローチは一般的です。 - - - - Records are an aggregate of named values, with optional members (such as methods). - レコードは、オプションのメンバー (メソッドなど) を含む名前付きの値の集約です。 - - - - They are immutable and have structural equality semantics. - これらは変更できず、構造上の等価セマンティクスを持ちます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - この例では、新しいレコード型を定義する方法を示します。 - - - - This example shows how to instantiate a record type. - この例では、レコードの種類をインスタンス化する方法を示します。 - - - - You can also do this on the same line with ';' separators. - ';' 区切りを使用して、同じ行でこれを行うこともできます。 - - - - This example shows how to use "copy-and-update" on record values. It creates - この例では、レコード値で "copy-and-update" を使用する方法を示します。次を作成します: - - - - a new record value that is a copy of contact1, but has different values for - contact1 のコピーであるレコード値。ただし、次の値は異なります: - - - - the 'Phone' and 'Verified' fields. - [電話番号]5D; および [検証済み]5D; フィールド。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - この例では、レコード値を処理する関数を書き込む方法を示します。 - - - - It converts a 'ContactCard' object to a string. - 'ContactCard' オブジェクトを文字列に変換します。 - - - - This is an example of a Record with a member. - これは、メンバーを含むレコードの例です。 - - - - Members can implement object-oriented members. - メンバーはオブジェクト指向のメンバーを実装できます。 - - - - Members are accessed via the '.' operator on an instantiated type. - メンバーには、インスタンス化された型に対する '.' 演算子を介してアクセスできます。 - - - - Records can also be represented as structs via the 'Struct' attribute. - レコードは 'Struct' 属性を介して構造体として表すこともできます。 - - - - This is helpful in situations where the performance of structs outweighs - これは、構造体のパフォーマンスが参照型の柔軟性よりも - - - - the flexibility of reference types. - 重要である場合に役立ちます。 - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 判別共用体 (略して DU) は、多数の名前付きのフォームまたはケースである可能性のある値です。 - - - - Data stored in DUs can be one of several distinct values. - DU の格納データは、複数の個別の値のいずれかになります。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - たとえば、次は一揃いのトランプを表します。 - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 判別共用体はトランプのランクを表すためにも使用できます。 - - - - Represents the rank of cards 2 .. 10 - 2 ~ 10 の札のランクを表します - - - - Discriminated Unions can also implement object-oriented members. - 判別共用体はオブジェクト指向のメンバーを実装することもできます。 - - - - This is a record type that combines a Suit and a Rank. - これは Suit と Rank を組み合わせたレコード型です。 - - - - It's common to use both Records and Disciminated Unions when representing data. - データを表すときには、レコードと判別共用体の両方を使用するのが一般的です。 - - - - This computes a list representing all the cards in the deck. - これは、一組のトランプのすべてのカードを表すリストをコンピューティングします。 - - - - This example converts a 'Card' object to a string. - この例では 'Card' オブジェクトを文字列に変換します。 - - - - This example prints all the cards in a playing deck. - この例では、一組のトランプのカードすべてを印刷します。 - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 単一ケースの DU は、ドメイン モデリングで多く使用されます。これにより、文字列や整数などの - - - - over primitive types such as strings and ints. - プリミティブ型に加えて、さらにタイプ セーフが追加されます。 - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 単一ケースの DU は、ラップする型との間で暗黙的に変換することはできません。 - - - - For example, a function which takes in an Address cannot accept a string as that input, - たとえば、アドレスを受け取る関数は文字列をその入力として受け入れることはできません - - - - or vive/versa. - (その逆もできません)。 - - - - You can easily instantiate a single-case DU as follows. - 次のように、単一ケースの DU のインスタンスを簡単に作成できます。 - - - - When you need the value, you can unwrap the underlying value with a simple function. - 値が必要な場合は、簡単な関数を使用して基になる値のラップを解除できます。 - - - - Printing single-case DUs is simple with unwrapping functions. - 単一ケースの DU は、関数のラップを解除するだけで出力できます。 - - - - Disciminated Unions also support recursive definitions. - 判別共用体は再帰的な定義もサポートしています。 - - - - This represents a Binary Search Tree, with one case being the Empty tree, - これはバイナリ検索ツリーを表します。片方のケースは空のツリーであり、 - - - - and the other being a Node with a value and two subtrees. - もう片方は値と 2 つのサブツリーを含む Node です。 - - - - Check if an item exists in the binary search tree. - バイナリ検索ツリーにアイテムが存在するかどうかを確認します。 - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - パターン マッチングを使用して再帰的に検索します。存在する場合は true を返し、そうでない場合は false を返します。 - - - - Check the left subtree. - 左側のサブツリーを確認します。 - - - - Check the right subtree. - 右側のサブツリーを確認します。 - - - - Inserts an item in the Binary Search Tree. - バイナリ検索ツリーにアイテムを挿入します。 - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - パターン マッチングを使用して再帰的に挿入する場所を検索し、新しいノードを挿入します。 - - - - If the item is already present, it does not insert anything. - アイテムが既に存在する場合は、何も挿入しません。 - - - - No need to insert, it already exists; return the node. - 既に存在しているため、挿入する必要はありません。ノードを返します。 - - - - Call into left subtree. - 左側のサブツリーに呼び出します。 - - - - Call into right subtree. - 右側のサブツリーに呼び出します。 - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 判別共用体は、'Struct' 属性を介して構造体として表すこともできます。 - - - - This is helpful in situations where the performance of structs outweighs - これは、構造体のパフォーマンスが参照型の柔軟性よりも - - - - the flexibility of reference types. - 重要である場合に役立ちます。 - - - - However, there are two important things to know when doing this: - ただし、これを行うときに理解しておく必要のある重要な点が 2 つあります: - - - - 1. A struct DU cannot be recursively-defined. - 1. 構造体 DU は再帰的に定義できません。 - - - - 2. A struct DU must have unique names for each of its cases. - 2. 構造体 DU の名前は各ケースに対して一意である必要があります。 - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - パターン マッチングはパターンを使用できるようにする F# の機能です。 - - - - which are a way to compare data with a logical structure or structures, - これは、データと 1 つまたは複数の論理構造を比較したり、 - - - - decompose data into constituent parts, or extract information from data in various ways. - データを構成要素部分に分解したり、さまざまな方法でデータから情報を抽出したりするための方法です。 - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - その後、パターン マッチングを介してパターンの "形" でディスパッチできます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 個人の姓および名のレコード - - - - A Discriminated Union of 3 different kinds of employees - 3 種類の社員の判別共用体 - - - - Count everyone underneath the employee in the management hierarchy, - 管理階層構造の中で、ある社員の下にいる全員の数を数えます - - - - including the employee. - (その社員自身を含む)。 - - - - Find all managers/executives named "Dave" who do not have any reports. - 名前が "Dave" で、レポートのないすべてのマネージャー/役員を検索します。 - - - - This uses the 'function' shorthand to as a lambda expression. - これは、ラムダ式として 'function' の短縮形を使用します。 - - - - [] matches an empty list. - [] は空白のリストに一致します。 - - - - '_' is a wildcard pattern that matches anything. - '_' は、任意のものに一致するワイルドカード パターンです。 - - - - This handles the "or else" case. - これは "or else" ケースを処理します。 - - - - You can also use the shorthand function construct for pattern matching, - パターン マッチングのために、短縮形の関数コンストラクトを使用することもできます。 - - - - which is useful when you're writing functions which make use of Partial Application. - これは、部分適用を利用する関数を記述している場合に役立ちます。 - - - - Define some more functions which parse with the helper function. - ヘルパー関数で解析する別の関数をいくつか定義します。 - - - - Active Patterns are another powerful construct to use with pattern matching. - アクティブなパターンは、パターン マッチングで使用するもう 1 つの強力なコンストラクトです。 - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - パターン マッチの呼び出しサイトで分解して、入力データをカスタム フォームにパーティション分割できるようにします。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 'function' キーワードとアクティブ パターンによるパターン マッチングは、多くの場合、次のようになります。 - - - - Call the printer with some different values to parse. - 解析するいくつかの異なる値でプリンターを呼び出します。 - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - オプション値とは、'Some' または 'None' がタグされたあらゆる種類の値です。 - - - - They are used extensively in F# code to represent the cases where many other - F# コードで広く使用され、他の多くの言語で null 参照が使用される - - - - languages would use null references. - ケースを表します。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - まず、単一ケースの判別共用体を介して定義した郵便番号を定義します。 - - - - Next, define a type where the ZipCode is optional. - 次に、郵便番号が省略可能である型を定義します。 - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 次に、オブジェクトを表すインターフェイスの型を定義して、顧客の郵便番号の出荷ゾーンをコンピューティングし、 - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 'getState' および 'getShippingZone' 抽象メソッドの実装が指定されています。 - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 次に、電卓のインスタンスを使用して顧客の出荷ゾーンを計算します。 - - - - This uses combinators in the Option module to allow a functional pipeline for - これは、オプション モジュール内の連結子を使用することにより、オプションを使用したデータ変換のために - - - - transforming data with Optionals. - 関数型パイプラインを使用できるようにします。 - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 測定単位は、タイプ セーフな方法でプリミティブな数値型に注釈を付ける方法です。 - - - - You can then perform type-safe arithmetic on these values. - 次に、これらの値に対してタイプ セーフの算術を実行できます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - まず、共通の単位名のコレクションを開きます - - - - Define a unitized constant - 単位化された定数を定義します - - - - Next, define a new unit type - 次に、新しい単位の種類を定義します - - - - Conversion factor mile to meter. - マイルからメートルへの変換係数。 - - - - Define a unitized constant - 単位化された定数を定義します - - - - Compute metric-system constant - メートル法の定数をコンピューティングします - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 測定単位を使用する値は、印刷などに対するプリミティブな数値型と同じように使用できます。 - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - クラスは、F# で新しいオブジェクト型を定義する方法であり、標準のオブジェクト指向のコンストラクトをサポートします。 - - - - They can have a variety of members (methods, properties, events, etc.) - さまざまなメンバー (メンバー、プロパティ、イベントなど) を含めることができます - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - クラスの詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - メンバーの詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 単純な 2 次元のベクター クラス。 - - - - The class's constructor is on the first line, - クラスのコンストラクターは最初の行にあり、 - - - - and takes two arguments: dx and dy, both of type 'double'. - また、dx と dy の 2 つの引数を取ります。どちらも 'double' 型です。 - - - - This internal field stores the length of the vector, computed when the - この内部フィールドはベクトルの長さを格納します。これは、次の時点でにコンピューティングされます: - - - - object is constructed - オブジェクトが構築されます - - - - 'this' specifies a name for the object's self identifier. - 'this' は、オブジェクトの自己識別子の名前を指定します。 - - - - In instance methods, it must appear before the member name. - インスタンス メソッドでは、メンバー名の前に表示される必要があります。 - - - - This member is a method. The previous members were properties. - このメンバーはメソッドです。前のメンバーはプロパティでした。 - - - - This is how you instantiate the Vector2D class. - これは、Vector2D クラスのインスタンスを作成する方法です。 - - - - Get a new scaled vector object, without modifying the original object. - 元のオブジェクトを変更せずに、新しく調節されたベクター オブジェクトを取得します。 - - - - Generic classes allow types to be defined with respect to a set of type parameters. - ジェネリック クラスでは、型パラメーターのセットに対して型を定義することができます。 - - - - In the following, 'T is the type parameter for the class. - 以下では、'T はクラスの型パラメーターです。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - この内部フィールドは状態をリストに保存します。 - - - - Add a new element to the list of states. - 状態のリストに新しい要素を追加します。 - - - - use the '<-' operator to mutate the value. - '<-' 演算子を使用して、値を変換します。 - - - - Get the entire list of historical states. - 状態の履歴のリスト全体を取得します。 - - - - Get the latest state. - 最新の状態を取得します。 - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 状態トラッカー クラスの 'int' インスタンス。型パラメーターは推論されていることに注意してください。 - - - - Add a state - 状態を追加します - - - - Interfaces are object types with only 'abstract' members. - インターフェイスは 'abstract' メンバーのみを持つオブジェクト型です。 - - - - Object types and object expressions can implement interfaces. - オブジェクト型とオブジェクト式はインターフェイスを実装できます。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - これは IDisposable を実装する型です。 - - - - This is the implementation of IDisposable members. - これは IDisposable メンバーの実装です。 - - - - This is an object that implements IDisposable via an Object Expression - これは、オブジェクト式を使用して IDisposable を実装するオブジェクトです - - - - Unlike other languages such as C# or Java, a new type definition is not needed - C# や Java などの他の言語とは異なり、インターフェイスを実装するために - - - - to implement an interface. - 新しい型定義は必要ありません。 - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core ライブラリは並列処理関数の範囲を定義します。ここでは - - - - you use some functions for parallel processing over arrays. - アレイ全体で並列処理に対していくつかの関数を使用できます。 - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 詳細については、次を参照してください: https://msdn.microsoft.com/ja-jp/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - まず、入力の配列です。 - - - - Next, define a functions that does some CPU intensive computation. - 次に、CPU 集約型の計算を実行する関数を定義します。 - - - - Next, do a parallel map over a large input array. - 次に、大きい入力配列に対して並列マップを実行します。 - - - - Next, print the results. - 次に、結果を印刷します。 - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - イベントは、特に WinForms または WPF アプリケーションでの .NET プログラミングの一般的な用法です。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 詳細については、次を参照してください: https://docs.microsoft.com/ja-jp/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - まず、サブスクリプション ポイント (event.Publish) およびイベント トリガー (event.Trigger) で構成されるイベント オブジェクトのインスタンスを作成します。 - - - - Next, add handler to the event. - 次に、ハンドラーをイベントに追加します。 - - - - Next, trigger the event. - 次に、イベントをトリガーします。 - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 次に、標準的な .NET 表記規則に従うイベントのインスタンスを作成します: (sender, EventArgs)。 - - - - Next, add a handler for this new event. - 次に、この新しいイベントのハンドラーを追加します。 - - - - Next, trigger this event (note that sender argument should be set). - 次に、このイベントをトリガーします (sender 引数を設定する必要があります)。 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf deleted file mode 100644 index 7e8e4a4de4..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - 이 샘플에서는 F# 언어의 요소에 대해 안내합니다. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - F# 대화형에서 코드를 실행하려면 코드 섹션을 강조 표시하고 <Alt+Enter>를 누르거나 마우스 오른쪽 단추를 클릭한 다음 - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - "대화형으로 실행"을 선택하세요. "보기" 메뉴에서 F# 대화형 창을 열 수 있습니다. - - - - For more about F#, see: - F#에 대한 자세한 내용은 다음을 참조하세요. - - - - To see this tutorial in documentation form, see: - 이 자습서를 설명서 형식으로 보려면 다음을 참조하세요. - - - - To learn more about applied F# programming, use - 적용된 F# 프로그래밍에 대해 자세히 알아보려면 다음을 사용하세요. - - - - To install the Visual F# Power Tools, use - Visual F# Power 도구를 설치하려면 다음을 사용하세요. - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - '도구' --> '확장 및 업데이트' --> `온라인`으로 이동하고 검색합니다. - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - F#과 함께 사용할 수 있는 추가 템플릿은 Visual Studio의 다음 위치에서 '온라인 템플릿'을 참조하세요. - - - - 'New Project' --> 'Online Templates' - '새 프로젝트' --> '온라인 템플릿' - - - - F# supports three kinds of comments: - F#에서는 세 가지 종류의 주석을 지원합니다. - - - - 1. Double-slash comments. These are used in most situations. - 1. 이중 슬래시 주석은 대부분의 경우에 사용됩니다. - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML 스타일 블록 주석은 자주 사용되지 않습니다. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. 삼중 슬래시 주석은 함수, 형식 등을 설명하는 경우에 사용됩니다. - - - - They will appear as text when you hover over something which is decorated with these comments. - 이러한 주석으로 데코레이트된 항목 위에 마우스를 올리면 텍스트로 표시됩니다. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - 참조 문서를 생성할 수 있는 .NET 스타일 XML 주석도 지원하며, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - 또한 편집기(예: Visual Studio)에서 정보를 추출할 수 있도록 합니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 'open' 키워드를 사용하여 네임스페이스를 엽니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - 모듈은 값, 형식, 함수 값 같은 F# 코드의 그룹화입니다. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - 모듈로 코드를 그룹화하면 관련 코드를 함께 유지하고 프로그램에서 이름 충돌을 방지하는 데 도움이 됩니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - 샘플 정수입니다. - - - - This is a sample floating point number. - 샘플 부동 소수점 숫자입니다. - - - - This computed a new number by some arithmetic. Numeric types are converted using - 산술을 사용하여 새 수를 계산했습니다. 숫자 형식은 - - - - functions 'int', 'double' and so on. - 'int', 'double' 등의 함수를 사용하여 변환됩니다. - - - - This is a list of the numbers from 0 to 99. - 0에서 99까지의 숫자 목록입니다. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - 0에서 99까지의 모든 숫자와 제곱을 포함하는 모든 튜플 목록입니다. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 다음 줄은 제네릭 출력에 대해 '%A'을(를) 사용하여 튜플을 포함하는 목록을 출력합니다. - - - - This is a sample integer with a type annotation - 형식 주석이 있는 샘플 정수입니다. - - - - Values in F# are immutable by default. They cannot be changed - F#의 값은 기본적으로 변경할 수 없습니다. 변경 가능으로 - - - - in the course of a program's execution unless explicitly marked as mutable. - 명시적으로 표시되지 않는 한 프로그램 실행 중 변경할 수 없습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 'let'을 통해 값을 이름에 바인딩하면 값을 변경할 수 없게 됩니다. - - - - The second line of code fails to compile because 'number' is immutable and bound. - 'number'는 변경이 불가능하고 바인딩되어 있으므로 코드의 두 번째 줄이 컴파일되지 않습니다. - - - - Re-defining 'number' to be a different value is not allowed in F#. - F#에서는 'number'를 다른 값으로 다시 정의할 수 없습니다. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 변경할 수 있는 바인딩은 'otherNumber' 값을 변경하기 위해 필요합니다. - - - - When mutating a value, use '<-' to assign a new value. - 값을 변경할 때는 '<-'를 사용하여 새 값을 할당하세요. - - - - You could not use '=' here for this purpose since it is used for equality - '='이 같음에 대해 사용되지 않으므로 여기에서 이 용도로 '='을 사용할 수 없습니다. - - - - or other contexts such as 'let' or 'module' - 또는 'let'이나 'module' 같은 기타 컨텍스트 - - - - Much of F# programming consists of defining functions that transform input data to produce - 대부분의 F# 프로그래밍은 유용한 결과를 생성하기 위해 입력 데이터를 변환하는 함수 정의로 - - - - useful results. - 구성됩니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 'let'을 사용하여 정수 인수를 받고 정수를 반환하는 함수를 정의합니다. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 괄호는 명시적 형식 주석을 사용하는 경우 외에는 함수 인수에 선택적으로 사용할 수 있습니다. - - - - Apply the function, naming the function return result using 'let'. - 함수를 적용하고, 'let'을 사용하여 함수 반환 결과에 이름을 지정합니다. - - - - The variable type is inferred from the function return type. - 변수 형식은 함수 반환 형식에서 유추됩니다. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - 이 줄은 '%d'을(를) 사용하여 결과를 integer로 인쇄합니다. 이 코드는 형식이 안전합니다. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 'result1'이 'int' 형식이 아닌 경우 줄이 컴파일되지 않습니다. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 필요한 경우 '(argument:type)'을 사용하여 매개 변수 이름 형식에 대한 주석을 답니다. 괄호가 필요합니다. - - - - Conditionals use if/then/elid/elif/else. - 조건은 if/then/elid/elif/else를 사용합니다. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - F#은 Python과 같은 언어처럼 공백 들여쓰기 인식 구문을 사용합니다. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - 이 줄은 '%f'을(를) 사용하여 결과를 float으로 인쇄합니다. 위의 '%d'처럼 이 코드는 형식이 안전합니다. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - 부울은 F#에서 기본적인 데이터 형식입니다. 다음은 부울 및 조건부 논리의 몇 가지 예입니다. - - - - To learn more, see: - 자세히 알아보려면 다음을 참조하세요. - - - - and - 그리고 - - - - Booleans values are 'true' and 'false'. - 부울 값은 'true' 및 'false'입니다. - - - - Operators on booleans are 'not', '&&' and '||'. - 부울의 연산자는 'not', '&&' 및 '||'입니다. - - - - This line uses '%b'to print a boolean value. This is type-safe. - 이 줄은 '%b'을(를) 사용하여 부울 값을 인쇄합니다. 이 코드는 형식이 안전합니다. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 문자열은 F#에서 기본적인 데이터 형식입니다. 다음은 문자열 및 기본 문자열 조작의 몇 가지 예입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 문자열은 큰따옴표를 사용합니다. - - - - Strings can also use @ to create a verbatim string literal. - 또한 문자열은 @을 사용하여 축자 문자열 리터럴을 만듭니다. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - 이 경우 '\', '\n', '\t' 등과 같은 이스케이프 문자열을 무시합니다. - - - - String literals can also use triple-quotes. - 또한 문자열 리터럴은 세 따옴표를 사용합니다. - - - - String concatenation is normally done with the '+' operator. - 문자열 연결은 일반적으로 '+' 연산자로 합니다. - - - - This line uses '%s' to print a string value. This is type-safe. - 이 줄은 '%s'을(를) 사용하여 문자열 값을 인쇄합니다. 이 코드는 형식이 안전합니다. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - 부분 문자열은 인덱서 표기법을 사용합니다. 이 줄은 처음 7개 문자를 부분 문자열로 추출합니다. - - - - Note that like many languages, Strings are zero-indexed in F#. - 다른 여러 언어처럼 F#에서는 문자열이 0으로 인덱싱됩니다. - - - - Tuples are simple combinations of data values into a combined value. - 튜플은 데이터 값을 조합된 값으로 만드는 간단한 조합입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 단순한 정수 튜플입니다. - - - - A function that swaps the order of two values in a tuple. - 튜플에 있는 두 값의 순서를 바꾸는 함수입니다. - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 형식 유추에서는 자동으로 함수를 제너릭 형식으로 일반화하므로, - - - - meaning that it will work with any type. - 모든 형식에 사용할 수 있습니다. - - - - A tuple consisting of an integer, a string, - 정수, 문자열 및 배정밀도 부동 소수점 - - - - and a double-precision floating point number. - 숫자로 구성된 튜플입니다. - - - - A simple tuple of integers with a type annotation. - 형식 주석이 포함된 단순한 정수 튜플입니다. - - - - Type annotations for tuples use the * symbol to separate elements - 튜플에 대한 형식 주석은 * 기호를 사용하여 요소를 구분합니다. - - - - Tuples are normally objects, but they can also be represented as structs. - 튜플은 일반적으로 개체이지만 구조체로 나타낼 수도 있습니다. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - 이러한 구조체는 C# 및 Visual Basic.NET의 구조체와 완벽히 상호 운용되지만, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 구조체 튜플은 개체 튜플(참조 튜플이라고도 함)로 암시적인 변환을 할 수 없습니다. - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - 이로써 아래 두 번째 줄은 컴파일되지 않으며 결과를 확인하려면 이 줄의 주석 처리를 제거하세요. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 구조체 튜플과 참조 튜플 간을 암시적으로 변환할 수 없지만, - - - - you can explicitly convert via pattern matching, as demonstrated below. - 아래 설명된 것처럼 패턴 일치를 통해 명시적으로 변환할 수 있습니다. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# 파이프 연산자('|>', '<|' 등) 및 F# 합성 연산자('>>', '<<')는 - - - - are used extensively when processing data. These operators are themselves functions - 데이터를 처리할 때 광범위하게 사용됩니다. 이러한 연산자는 자체가 함수이며 - - - - which make use of Partial Application. - 부분 애플리케이션을 사용합니다. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - 이러한 연산자에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 부분 애플리케이션에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 값을 제곱합니다. - - - - Adds 1 to a value. - 값에 1을 더합니다. - - - - Tests if an integer value is odd via modulo. - 모듈로를 통해 정수 값이 홀수인지 테스트합니다. - - - - A list of 5 numbers. More on lists later. - 5개 숫자 목록입니다. 추가 숫자는 나중에 표시됩니다. - - - - Given a list of integers, it filters out the even numbers, - 정수 목록인 경우 짝수를 필터링하고, - - - - squares the resulting odds, and adds 1 to the squared odds. - 결과 홀수를 제곱하고 제곱한 홀수에 1을 더합니다. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 'squareOddValuesAndAddOne'을 더 짧게 작성하려면 - - - - sub-result into the function calls themselves. - 각 하위 결과를 함수 호출 자체에 중첩합니다. - - - - This makes the function much shorter, but it's difficult to see the - 그러면 함수가 더 짧아지지만 데이터가 처리되는 순서를 - - - - order in which the data is processed. - 알아보기 어렵습니다. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 'squareOddValuesAndAddOne'을 작성하려면 기본적으로 F# 파이프 연산자를 사용합니다. - - - - This allows you to avoid creating intermediate results, but is much more readable - 그러면 중간 결과를 생성하지 않아도 되며 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 'squareOddValuesAndAddOneNested'와 같이 함수 호출을 중첩할 때보다 읽기도 쉽습니다. - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 'squareOddValuesAndAddOnePipeline'을 줄이려면 두 번째 `List.map` 호출을 - - - - into the first, using a Lambda Function. - 람다 함수를 사용하여 첫 번째로 이동합니다. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - 파이프라인은 람다 함수 내에도 사용됩니다. F# 파이프 연산자는 - - - - can be used for single values as well. This makes them very powerful for processing data. - 단일 값에도 사용할 수 있습니다. 따라서 데이터 처리에 매우 유용합니다. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 마지막으로 명시적으로 'values'를 매개 변수로 사용할 필요가 없습니다. '>>'를 사용하여 - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 짝수를 필터링한 다음 제곱하고 1을 더하는 두 가지 핵심 작업을 작성하면 됩니다. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 마찬가지로 'fun x -> ...' 람다 식도 필요하지 않습니다. 'x'를 해당 범위에서 간단히 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 정의하여 함수 파이프라인에 전달할 수 있기 때문입니다. 따라서 여기에서도 '>>'를 - - - - there as well. - 사용할 수 있습니다. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition'의 결과 자체도 정수 목록을 입력으로 사용하는 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 다른 함수입니다. 'squareOddValuesAndAddOneComposition'을 정수 목록을 사용하여 - - - - of integers, you'll notice that it produces the same results as previous functions. - 실행하는 경우 이전 함수와 동일한 결과를 생성합니다. - - - - This is using what is known as function composition. This is possible because functions in F# - 여기서는 이른바 함수 컴퍼지션을 사용합니다. 이것이 가능한 이유는 F#의 함수가 - - - - use Partial Application and the input and output types of each data processing operation match - 부분 애플리케이션을 사용하고 각 데이터 처리 작업의 입력 및 출력 형식이 사용 중인 함수의 - - - - the signatures of the functions we're using. - 시그니처와 일치하기 때문입니다. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - 순서가 지정되고 변경 불가능한 단일 연결 목록으로 즉시 평가됩니다. - - - - This module shows various ways to generate lists and process lists with some functions - 이 모듈에서는 F# 주요 라이브러리의 'List' 모듈에 있는 일부 함수를 사용하여 목록을 생성하고 - - - - in the 'List' module in the F# Core Library. - 목록을 처리하는 다양한 방법을 보여 줍니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - 목록은 [ ... ]을 사용하여 정의됩니다. 이것은 빈 목록입니다. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - 3개 요소가 포함된 목록입니다. 동일한 줄에서 ';'을 사용하여 요소를 구분합니다. - - - - You can also separate elements by placing them on their own lines. - 요소를 다른 줄에 배치하여 요소를 구분할 수도 있습니다. - - - - This is a list of integers from 1 to 1000 - 이것은 1에서 1000까지의 정수 리스트입니다. - - - - Lists can also be generated by computations. This is a list containing - 리스트는 계산에 의해서도 생성될 수 있습니다. 다음은 - - - - all the days of the year. - 연중 모든 날짜를 포함하는 리스트입니다. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 'daysList'의 처음 5개 요소를 'List.take'를 사용하여 인쇄합니다. - - - - Computations can include conditionals. This is a list containing the tuples - 계산은 조건을 포함할 수 있습니다. 다음은 - - - - which are the coordinates of the black squares on a chess board. - 체스 보드에서 검은색 칸의 좌표를 가리키는 튜플이 포함된 리스트입니다. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - 리스트는 'List.map' 및 기타 함수 프로그래밍 조합기를 사용하여 변환될 수 있습니다. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - 이 정의는 인수를 List.map으로 전달하기 위해 파이프라인 연산자를 사용하여 numberList의 숫자를 - - - - operator to pass an argument to List.map. - 제곱하여 새 리스트를 생성합니다. - - - - There are many other list combinations. The following computes the sum of the squares of the - 다른 리스트 조합이 많이 있습니다. 다음은 - - - - numbers divisible by 3. - 3으로 나눠지는 수의 제곱의 합을 계산합니다. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 배열은 고정 크기이며 같은 형식의 요소로 구성된 변경 가능한 컬렉션입니다. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - 배열은 목록과 마찬가지로 열거형을 지원하고 데이터 처리를 위한 유사한 조합기를 사용하지만, - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 배열은 일반적으로 더 빠르고 빠른 임의 액세스를 지원합니다. 변경이 가능하므로 덜 안전하다는 단점은 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - 빈 배열입니다. 목록의 구문과 유사하지만 `[| ... |]`을 대신 사용합니다. - - - - Arrays are specified using the same range of constructs as lists. - 배열은 리스트와 같은 범위의 구문을 사용하여 지정됩니다. - - - - This is an array of numbers from 1 to 1000. - 1에서 1000까지의 숫자 배열입니다. - - - - This is an array containing only the words "hello" and "world". - "hello"와 "world"라는 단어만 포함된 배열입니다. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - 0에서 2000까지의 짝수가 포함되고 인덱스로 초기화된 배열입니다. - - - - Sub-arrays are extracted using slicing notation. - 하위 배열은 조각화 표기법을 사용하여 추출됩니다. - - - - You can loop over arrays and lists using 'for' loops. - 'for' 루프를 사용하여 배열 및 목록을 반복할 수 있습니다. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 왼쪽 화살표 대입 연산자를 사용하여 배열 요소의 내용을 수정할 수 있습니다. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - 이 연산자에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 'Array'map' 및 기타 함수 프로그래밍 연산을 사용하여 배열을 변환할 수 있습니다. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 다음은 'h'로 시작하는 단어 길이의 합을 계산합니다. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - 시퀀스는 모두 형식이 같은 요소가 논리적으로 연속되는 것입니다. 목록 및 배열보다 일반적인 형식입니다. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - 시퀀스는 요청 시 계산되며 반복될 때마다 다시 계산됩니다. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# 시퀀스는 .NET System.Collections.Generic.IEnumerable<'T>의 별칭입니다. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - 시퀀스 처리 함수는 리스트와 배열 모두에 적용할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - 빈 시퀀스입니다. - - - - This a sequence of values. - 시퀀스 값입니다. - - - - This is an on-demand sequence from 1 to 1000. - 1에서 1000까지의 요청 시 시퀀스입니다. - - - - This is a sequence producing the words "hello" and "world" - "hello"와 "world"라는 단어를 생성하는 시퀀스입니다. - - - - This sequence producing the even numbers up to 2000. - 2000까지의 짝수를 생성하는 시퀀스입니다. - - - - This is an infinite sequence which is a random walk. - 임의 행로인 무한 시퀀스입니다. - - - - This example uses yield! to return each element of a subsequence. - 이 예에서는 yield!를 사용하여 하위 시퀀스의 각 요소를 반환합니다. - - - - This example shows the first 100 elements of the random walk. - 이 예에서는 임의 행로의 처음 100개 요소를 보여 줍니다. - - - - Recursive functions can call themselves. In F#, functions are only recursive - 재귀 함수는 자신을 호출할 수 있습니다. F#에서 함수는 - - - - when declared using 'let rec'. - 'let rec'을 사용하여 선언할 때에만 반복됩니다. - - - - Recursion is the preferred way to process sequences or collections in F#. - 재귀는 F#에서 시퀀스 또는 컬렉션을 처리하는 기본 방법입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 자세히 알아보려면 https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions를 참조하세요. - - - - This example shows a recursive function that computes the factorial of an - 이 예에서는 정수의 계승을 계산하는 재귀 함수를 보여 줍니다. - - - - integer. It uses 'let rec' to define a recursive function. - 'let rec'를 사용하여 재귀 함수를 정의합니다. - - - - Computes the greatest common factor of two integers. - 두 정수의 최대 공약수를 계산합니다. - - - - Since all of the recursive calls are tail calls, - 모든 재귀 호출은 마무리 호출이므로, - - - - the compiler will turn the function into a loop, - 컴파일러에서는 함수를 루프로 전환합니다. - - - - which improves performance and reduces memory consumption. - 루프는 성능을 향상시키고 메모리 소비량을 줄여 줍니다. - - - - This example computes the sum of a list of integers using recursion. - 이 예제에서는 재귀를 사용하여 정수 목록의 합을 계산합니다. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 도우미 함수와 결과 누적기를 사용하여 'sumList'를 마무리 재귀 함수로 만듭니다. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - '0'을 시드 누적기로 제공하여 마무리 재귀 도우미 함수를 호출합니다. - - - - An approach like this is common in F#. - F#에서 이와 같은 접근 방식이 일반적입니다. - - - - Records are an aggregate of named values, with optional members (such as methods). - 레코드는 명명된 값의 집계이며, 필요에 따라 메서드와 같은 선택적 멤버도 포함합니다. - - - - They are immutable and have structural equality semantics. - 레코드는 변경 불가능하며 구조적으로 같음 의미 체계가 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - 이 예에서는 새 레코드 형식을 정의하는 방법을 보여 줍니다. - - - - This example shows how to instantiate a record type. - 이 예제에서는 레코드 형식을 인스턴스화하는 방법을 보여 줍니다. - - - - You can also do this on the same line with ';' separators. - 동일한 줄에서 ';' 구분 기호를 사용하여 이 작업을 수행할 수도 있습니다. - - - - This example shows how to use "copy-and-update" on record values. It creates - 이 예에서는 레코드 값에 "copy-and-update"를 사용하는 방법을 보여 줍니다. - - - - a new record value that is a copy of contact1, but has different values for - contact1의 복사본인 새 레코드 값을 만들지만 - - - - the 'Phone' and 'Verified' fields. - 'Phone'과 'Verified' 필드의 값이 다릅니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - 이 예에서는 레코드 값을 처리하는 함수를 작성하는 방법을 보여 줍니다. - - - - It converts a 'ContactCard' object to a string. - 'ContactCard' 개체를 문자열로 변환합니다. - - - - This is an example of a Record with a member. - 멤버가 하나인 레코드의 예제입니다. - - - - Members can implement object-oriented members. - 멤버는 개체 지향 멤버를 구현할 수 있습니다. - - - - Members are accessed via the '.' operator on an instantiated type. - 인스턴스화된 형식에서 '.' 연산자를 통해 멤버에 액세스합니다. - - - - Records can also be represented as structs via the 'Struct' attribute. - 'Struct' 특성을 통해 레코드를 구조체로 나타낼 수도 있습니다. - - - - This is helpful in situations where the performance of structs outweighs - 구조체 성능이 참조 형식의 유연성보다 중요한 경우에 - - - - the flexibility of reference types. - 유용합니다. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 구분된 공용 구조체(줄여서 DU)는 여러 명명된 폼 또는 케이스일 수 있는 값입니다. - - - - Data stored in DUs can be one of several distinct values. - DU에 저장된 데이터는 여러 고유한 값 중 하나일 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - 다음은 플레인 카드의 짝패를 나타냅니다. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 구분된 공용 구조체를 사용하여 플레잉 카드의 순위를 나타낼 수도 있습니다. - - - - Represents the rank of cards 2 .. 10 - 카드 2부터 10까지의 순위를 나타냅니다. - - - - Discriminated Unions can also implement object-oriented members. - 구분된 공용 구조체는 개체 지향 멤버도 구현할 수 있습니다. - - - - This is a record type that combines a Suit and a Rank. - 짝패와 순위를 조합하는 레코드 형식입니다. - - - - It's common to use both Records and Disciminated Unions when representing data. - 일반적으로 레코드와 구분된 공용 구조체를 모두 사용하여 데이터를 나타냅니다. - - - - This computes a list representing all the cards in the deck. - 데크에 있는 모든 카드를 나타내는 목록을 계산합니다. - - - - This example converts a 'Card' object to a string. - 이 예에서는 'Card' 개체를 문자열로 변환합니다. - - - - This example prints all the cards in a playing deck. - 이 예에서는 플레잉 데크의 모든 카드를 인쇄합니다. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 단일 케이스 DU를 도메인 모델링에 사용하는 경우가 많습니다. 그러면 문자열 및 정수와 같은 - - - - over primitive types such as strings and ints. - 기본 형식보다 형식 안전성을 추가로 얻을 수 있습니다. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 단일 케이스 DU를 래핑하는 형식으로 암시적으로 변환하거나 반대로 변환할 수 없습니다. - - - - For example, a function which takes in an Address cannot accept a string as that input, - 예를 들어 주소에서 사용하는 함수는 문자열을 입력으로 사용할 수 없으며, - - - - or vive/versa. - 그 반대도 마찬가지입니다. - - - - You can easily instantiate a single-case DU as follows. - 다음과 같이 단일 케이스 DU를 쉽게 인스턴스화할 수 있습니다. - - - - When you need the value, you can unwrap the underlying value with a simple function. - 값이 필요하면 간단한 함수로 내부 값을 래핑 해제할 수 있습니다. - - - - Printing single-case DUs is simple with unwrapping functions. - 래핑 해제 함수로 단일 케이스 DU를 간단히 인쇄할 수 있습니다. - - - - Disciminated Unions also support recursive definitions. - 구분된 공용 구조체는 재귀 정의도 지원합니다. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - 이진 검색 트리를 나타냅니다. 여기서 한 케이스는 빈 트리이고 - - - - and the other being a Node with a value and two subtrees. - 다른 케이스는 값과 두 개의 하위 트리를 포함하는 노드입니다. - - - - Check if an item exists in the binary search tree. - 이진 검색 트리에 항목이 있는지 확인합니다. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - 패턴 일치를 사용하여 재귀적으로 검색합니다. 있으면 true를 반환하고 그렇지 않은 경우 false를 반환합니다. - - - - Check the left subtree. - 왼쪽 하위 트리를 확인합니다. - - - - Check the right subtree. - 오른쪽 하위 트리를 확인합니다. - - - - Inserts an item in the Binary Search Tree. - 이진 검색 트리에 항목을 삽입합니다. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - 패턴 일치를 사용하여 재귀적으로 삽입할 위치를 찾은 다음 새 노드를 삽입합니다. - - - - If the item is already present, it does not insert anything. - 항목이 이미 있으면 아무 항목도 삽입하지 않습니다. - - - - No need to insert, it already exists; return the node. - 이미 항목이 있으므로 삽입할 필요가 없습니다. 노드를 반환합니다. - - - - Call into left subtree. - 왼쪽 하위 트리를 호출합니다. - - - - Call into right subtree. - 오른쪽 하위 트리를 호출합니다. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 'Struct' 특성을 통해 구분된 공용 구조체를 구조체로 나타낼 수도 있습니다. - - - - This is helpful in situations where the performance of structs outweighs - 구조체 성능이 참조 형식의 유연성보다 중요한 경우에 - - - - the flexibility of reference types. - 유용합니다. - - - - However, there are two important things to know when doing this: - 하지만 이 작업을 수행할 때는 다음 두 가지 중요한 사항을 알고 있어야 합니다. - - - - 1. A struct DU cannot be recursively-defined. - 1. 구조체 DU는 재귀적으로 정의할 수 없습니다. - - - - 2. A struct DU must have unique names for each of its cases. - 2. 각 케이스마다 구조체 DU의 이름이 고유해야 합니다. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - 패턴 일치는 패턴을 활용할 수 있는 F#의 기능이며, - - - - which are a way to compare data with a logical structure or structures, - 패턴을 사용하면 데이터를 논리 구조와 비교하거나, - - - - decompose data into constituent parts, or extract information from data in various ways. - 데이터를 구성 부분으로 분해하거나, 다양한 방법으로 데이터에서 정보를 추출할 수 있습니다. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - 그런 다음 패턴 일치를 사용하여 패턴의 "모양"을 디스패치할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 사람의 성과 이름에 대한 레코드입니다. - - - - A Discriminated Union of 3 different kinds of employees - 세 가지 다른 직원 유형이 있는 구분된 공용 구조체 - - - - Count everyone underneath the employee in the management hierarchy, - 관리 계층 구조에서 이 직원을 포함하여 이 아래에 있는 모든 직원의 수를 - - - - including the employee. - 셉니다. - - - - Find all managers/executives named "Dave" who do not have any reports. - 이름이 "Dave"이고 부하직원이 없는 모든 관리자/간부를 찾습니다. - - - - This uses the 'function' shorthand to as a lambda expression. - 여기서는 'function' 약어를 람다 식으로 사용합니다. - - - - [] matches an empty list. - []는 빈 목록과 일치합니다. - - - - '_' is a wildcard pattern that matches anything. - '_'는 모든 항목과 일치하는 와일드카드 패턴입니다. - - - - This handles the "or else" case. - 이 와일드카드 패턴은 "or else" 케이스를 처리합니다. - - - - You can also use the shorthand function construct for pattern matching, - 패턴 일치에 약어 형식 함수 구문을 사용할 수도 있습니다. - - - - which is useful when you're writing functions which make use of Partial Application. - 이 구문은 부분 애플리케이션을 사용하는 함수를 작성할 때 유용합니다. - - - - Define some more functions which parse with the helper function. - 도우미 함수를 사용하여 구문 분석하는 함수를 더 정의합니다. - - - - Active Patterns are another powerful construct to use with pattern matching. - 활성 패턴은 패턴 일치와 함께 사용하면 유용한 다른 구문입니다. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - 활성 패턴을 사용하면 입력 데이터를 사용자 지정 폼으로 분할하고, 패턴 일치 호출 사이트에서 이 폼을 분해할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 'function' 키워드 및 활성 패턴을 통한 패턴 일치는 이처럼 보이는 경우가 많습니다. - - - - Call the printer with some different values to parse. - 구문 분석할 다른 값을 사용하여 프린터를 호출합니다. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - 옵션 값에는 'Some' 또는 'None'으로 태그 처리된 모든 종류의 값을 사용할 수 있습니다. - - - - They are used extensively in F# code to represent the cases where many other - F# 코드에서 광범위하게 사용되어 다른 언어에서는 null 참조를 사용하는 케이스를 - - - - languages would use null references. - 나타냅니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - 먼저 단일 케이스 구분된 공용 구조체를 통해 정의된 우편 번호를 정의합니다. - - - - Next, define a type where the ZipCode is optional. - 다음으로 ZipCode가 선택 사항인 형식을 정의합니다. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 그리고 고객의 우편 번호에 대한 배송 영역을 계산하기 위해 개체를 나타내는 인터페이스 형식을 정의합니다. - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 고객의 우편 번호에 대한 쇼핑 지역을 계산하는 추상 클래스입니다. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 다음으로 계산기 인스턴스를 사용하여 고객의 배송 영역을 계산합니다. - - - - This uses combinators in the Option module to allow a functional pipeline for - 여기서는 Option 모듈 내의 조합기를 사용하여 함수 파이프라인에서 - - - - transforming data with Optionals. - Optionals를 통해 데이터를 변환할 수 있게 합니다. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 측정 단위를 사용하면 형식이 안전한 방식으로 기본 숫자 형식에 주석을 달 수 있습니다. - - - - You can then perform type-safe arithmetic on these values. - 그런 다음 이러한 값에 대해 형식이 안전한 산술 연산을 수행할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - 먼저 일반적인 단위 이름의 컬렉션을 엽니다. - - - - Define a unitized constant - 결합된 상수 정의 - - - - Next, define a new unit type - 다음으로 새 단위 형식을 정의합니다. - - - - Conversion factor mile to meter. - 마일 대 미터 변환 비율입니다. - - - - Define a unitized constant - 결합된 상수 정의 - - - - Compute metric-system constant - 미터 단위 상수를 계산합니다. - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 측정 단위를 사용하는 값은 인쇄와 같은 작업에 기본 숫자 형식처럼 사용할 수 있습니다. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - 클래스는 F#에서 새 개체 형식을 정의하는 방법이며 표준 개체 지향 구문을 지원합니다. - - - - They can have a variety of members (methods, properties, events, etc.) - 클래스는 다양한 멤버(메서드, 속성, 이벤트 등)를 포함할 수 있습니다. - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - 클래스에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - 멤버에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 단순한 2차원 벡터 클래스입니다. - - - - The class's constructor is on the first line, - 클래스의 생성자는 첫 줄에 있고, - - - - and takes two arguments: dx and dy, both of type 'double'. - 'double' 형식의 두 인수 dx 및 dy를 사용합니다. - - - - This internal field stores the length of the vector, computed when the - 이 내부 필드는 개체가 생성될 때 계산된 벡터 길이를 - - - - object is constructed - 저장합니다. - - - - 'this' specifies a name for the object's self identifier. - 'this'는 개체 자체의 식별자에 대한 이름을 지정합니다. - - - - In instance methods, it must appear before the member name. - 인스턴스 메서드에서는 멤버 이름 앞에 와야 합니다. - - - - This member is a method. The previous members were properties. - 이 멤버는 메서드입니다. 이전 멤버는 속성이었습니다. - - - - This is how you instantiate the Vector2D class. - Vector2D 클래스를 인스턴스화하는 방법은 다음과 같습니다. - - - - Get a new scaled vector object, without modifying the original object. - 원래 개체를 수정하지 않고 비율이 조정된 새 벡터 개체를 가져옵니다. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - 제네릭 클래스를 통해 형식 매개변수 집합에 대해 형식을 정의할 수 있습니다. - - - - In the following, 'T is the type parameter for the class. - 다음에서 'T는 클래스의 형식 매개 변수입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - 이 내부 필드는 목록에 상태를 저장합니다. - - - - Add a new element to the list of states. - 상태 리스트에 새 요소를 추가합니다. - - - - use the '<-' operator to mutate the value. - '<-' 연산자를 사용하여 값을 변경합니다. - - - - Get the entire list of historical states. - 기록 상태의 전체 목록을 가져옵니다. - - - - Get the latest state. - 최신 상태를 가져옵니다. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 상태 추적기 클래스의 'int' 인스턴스입니다. 형식 매개 변수는 유추됩니다. - - - - Add a state - 상태를 추가합니다. - - - - Interfaces are object types with only 'abstract' members. - 인터페이스는 '추상' 멤버만 있는 개체 형식입니다. - - - - Object types and object expressions can implement interfaces. - 개체 형식 및 개체 식은 인터페이스를 구현할 수 있습니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - IDisposable를 구현하는 형식입니다. - - - - This is the implementation of IDisposable members. - IDisposable 멤버의 구현입니다. - - - - This is an object that implements IDisposable via an Object Expression - 개체 식을 통해 IDisposable을 구현하는 개체입니다. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - C# 또는 Java와 같은 다른 언어와 달리 인터페이스를 구현하기 위해 새 형식 정의가 - - - - to implement an interface. - 필요하지 않습니다. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core 라이브러리는 병렬 처리 함수 범위를 정의합니다. - - - - you use some functions for parallel processing over arrays. - 여기에서 배열에 대해 병렬 처리 함수를 사용합니다. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 자세히 알아보려면 다음을 참조하세요. https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - 먼저 입력 배열입니다. - - - - Next, define a functions that does some CPU intensive computation. - 다음으로 CPU를 많이 사용하는 계산을 수행하는 함수를 정의합니다. - - - - Next, do a parallel map over a large input array. - 다음으로 큰 입력 배열에 대해 병렬 맵을 수행합니다. - - - - Next, print the results. - 다음으로 결과를 인쇄합니다. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - 이벤트는 특히 WinForms 또는 WPF 애플리케이션을 사용하는 .NET 프로그래밍에서 일반적으로 사용되는 말입니다. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - 먼저 구독 지점(event.Publish)과 이벤트 트리거(event.Trigger)로 구성된 Event 개체의 인스턴스를 만듭니다. - - - - Next, add handler to the event. - 다음으로 이벤트에 처리기를 추가합니다. - - - - Next, trigger the event. - 다음으로 이벤트를 트리거합니다. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 다음으로 표준 .NET 규칙(sender, EventArgs)을 따르는 Event의 인스턴스를 만듭니다. - - - - Next, add a handler for this new event. - 다음으로 이 새 이벤트에 대한 처리기를 추가합니다. - - - - Next, trigger this event (note that sender argument should be set). - 다음으로 이 이벤트를 트리거합니다(sender 인수를 설정해야 함). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf deleted file mode 100644 index 9ee0ae09ae..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Ten przykład zawiera opis elementów języka F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Aby wykonać kod w programie F# Interactive, zaznacz sekcję kodu i naciśnij kombinację klawiszy Alt-Enter lub kliknij prawym przyciskiem myszy, - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - a następnie wybierz opcję „Wykonaj w trybie interaktywnym”. Okno narzędzia F# Interactive można otworzyć z menu „Widok”. - - - - For more about F#, see: - Aby uzyskać więcej informacji o języku F#, zobacz: - - - - To see this tutorial in documentation form, see: - Aby wyświetlić ten samouczek w formie dokumentacji, zobacz: - - - - To learn more about applied F# programming, use - Aby dowiedzieć się więcej o programowaniu w języku F# w praktyce, użyj - - - - To install the Visual F# Power Tools, use - Aby zainstalować narzędzia Visual F# Power Tools, użyj - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - „Narzędzia” --> „Rozszerzenia i aktualizacje” --> „Online” i wyszukaj - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Aby uzyskać informacje o dodatkowych szablonach do użycia w języku F#, zobacz sekcję dotyczącą szablonów w trybie online w programie Visual Studio, - - - - 'New Project' --> 'Online Templates' - „Nowy projekt” --> „Szablony w trybie online” - - - - F# supports three kinds of comments: - Język F# obsługuje trzy rodzaje komentarzy: - - - - 1. Double-slash comments. These are used in most situations. - 1. Komentarze z podwójnym ukośnikiem. Są używane w większości sytuacji. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Komentarze blokowe w stylu ML. Nie są używane zbyt często. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Komentarze z potrójnymi ukośnikami. Są używane do dokumentowania funkcji, typów itd. - - - - They will appear as text when you hover over something which is decorated with these comments. - Będą wyświetlane jako tekst po zatrzymaniu wskaźnika myszy nad tym, do czego zostały dodane. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Obsługują także komentarze XML w stylu programu .NET, które pozwalają na generowanie dokumentacji referencyjnej, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - a także umożliwiają edytorom (takim jak program Visual Studio) na wydobywanie z nich informacji. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Otwieraj przestrzenie nazw, używając słowa kluczowego „open”. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Moduł to zbiór kodu w języku F#, takiego jak wartości, typy i wartości funkcji. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Grupowanie kodu w modułach pomaga trzymać razem powiązany kod i unikać konfliktów nazw w programie. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/pl-pl/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - To jest przykładowa liczba całkowita. - - - - This is a sample floating point number. - To jest przykładowa liczba zmiennoprzecinkowa. - - - - This computed a new number by some arithmetic. Numeric types are converted using - To obliczyło nową liczbę, wykonując pewne operacje arytmetyczne. Typy liczbowe są konwertowane za pomocą - - - - functions 'int', 'double' and so on. - funkcji „int”, „double” itd. - - - - This is a list of the numbers from 0 to 99. - To jest lista liczb od 0 do 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - To jest lista wszystkich krotek zawierających wszystkie liczby od 0 do 99 i ich kwadraty. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Następny wiersz wyświetla listę z krotkami, używając symbolu „%A” do wyświetlania ogólnego. - - - - This is a sample integer with a type annotation - To jest przykładowa liczba całkowita z adnotacją typu - - - - Values in F# are immutable by default. They cannot be changed - Wartości w języku F# są domyślnie niezmienialne. Nie można ich modyfikować - - - - in the course of a program's execution unless explicitly marked as mutable. - w trakcie wykonywania programu, chyba że zostaną jawnie oznaczone jako zmienialne. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Powiązanie wartości z nazwą za pomocą polecenia „let” sprawia, że będzie ona niezmienna. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Nie można skompilować drugiego wiersza kodu, ponieważ element „number” jest niezmienny i powiązany. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Ponowne definiowanie elementu „number” na inną wartość nie jest dozwolone w języku F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Modyfikowalne powiązanie. Jest to wymagane w celu modyfikowania wartości elementu „otherNumber”. - - - - When mutating a value, use '<-' to assign a new value. - Podczas modyfikowania wartości użyj strzałki „<-”, aby przydzielić nową wartość. - - - - You could not use '=' here for this purpose since it is used for equality - Nie możesz w tym celu użyć tutaj znaku „=”, ponieważ jest on używany do oznaczania równości - - - - or other contexts such as 'let' or 'module' - lub innych kontekstów, np. „let” lub „module” - - - - Much of F# programming consists of defining functions that transform input data to produce - Duża część programowania w języku F# to definiowanie funkcji, które przekształcają dane wejściowe w celu utworzenia - - - - useful results. - przydatne wyniki. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Polecenia „let” używa się do definiowania funkcji. To polecenie akceptuje argument w postaci liczby całkowitej i zwraca liczbę całkowitą. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Nawiasy są opcjonalne w przypadku argumentów funkcji, z wyjątkiem użycia jawnego typu adnotacji. - - - - Apply the function, naming the function return result using 'let'. - Zastosuj funkcję i nadaj jej wynikowi zwrotnemu nazwę, używając instrukcji „let”. - - - - The variable type is inferred from the function return type. - Typ zmiennej jest wywnioskowany na podstawie zwracanego typu funkcji. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Ten wiersz używa elementu „%d”, aby wydrukować wynik jako liczbę całkowitą. Jest to bezpieczne. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Jeśli element „result1” nie miałby typu „int”, kompilacja wiersza zakończyłaby się niepowodzeniem. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - W razie potrzeby adnotuj typ nazwy parametru przy użyciu polecenia „(argument:typ)”. Nawiasy są wymagane. - - - - Conditionals use if/then/elid/elif/else. - Wyrażenia warunkowe używają słów kluczowych if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Należy zauważyć, że język F# używa składni uwzględniającej wcięcia w postaci odstępów, tak jak w przypadku języków podobnych do języka Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Ten wiersz używa elementu „%f”, aby wydrukować wynik jako liczbę zmiennoprzecinkową. Podobnie jak w przypadku elementu „%d” powyżej jest to bezpieczne. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Wartości logiczne są fundamentalnymi typami danych w języku F#. Oto kilka przykładów wartości logicznych i logiki warunkowej. - - - - To learn more, see: - Aby dowiedzieć się więcej, zobacz: - - - - and - oraz - - - - Booleans values are 'true' and 'false'. - Wartości logiczne przyjmują wartość „true” i „false”. - - - - Operators on booleans are 'not', '&&' and '||'. - Operatory wartości logicznych to „not”, „&&” i „||”. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Ten wiersz używa elementu „%b”, aby wydrukować wartość logiczną. Jest to bezpieczne. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Ciągi są fundamentalnymi typami danych w języku F#. Oto kilka przykładów ciągów i podstawowych manipulacji ciągami. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Ciągi używają cudzysłowów. - - - - Strings can also use @ to create a verbatim string literal. - W ciągach można także używać znaku @ do tworzenia dosłownych literałów ciągu. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Spowoduje to ignorowanie znaków ucieczki, np. „\”, „\n”, „\t” itp. - - - - String literals can also use triple-quotes. - Literały ciągu mogą także używać potrójnych cudzysłowów. - - - - String concatenation is normally done with the '+' operator. - Łączenie ciągów wykonuje się zazwyczaj przy użyciu operatora „+”. - - - - This line uses '%s' to print a string value. This is type-safe. - Ten wiersz używa elementu „%s”, aby wydrukować wartość ciągu. Jest to bezpieczne. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Podciągi używają notacji indeksatora. Ten wiersz wyodrębnia pierwsze 7 znaków w formie podciągu. - - - - Note that like many languages, Strings are zero-indexed in F#. - Należy zauważyć, że w języku F# ciągi znaków są indeksowane od zera, podobnie jak w wielu innych językach. - - - - Tuples are simple combinations of data values into a combined value. - Krotki to proste kombinacje wartości danych tworzące połączoną wartość. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Prosta krotka liczb całkowitych. - - - - A function that swaps the order of two values in a tuple. - Funkcja zamieniająca kolejność dwóch wartości w krotce. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Wnioskowanie o typie języka F# będzie automatycznie uogólniać funkcję do typu ogólnego, - - - - meaning that it will work with any type. - co oznacza, że będzie działać z dowolnym typem. - - - - A tuple consisting of an integer, a string, - Krotka składająca się z liczby całkowitej, ciągu - - - - and a double-precision floating point number. - i liczby zmiennoprzecinkowej podwójnej precyzji. - - - - A simple tuple of integers with a type annotation. - Prosta krotka składająca się z liczb całkowitych z adnotacją typu. - - - - Type annotations for tuples use the * symbol to separate elements - Adnotacje typu w krotkach korzystają z symbolu * do oddzielania elementów - - - - Tuples are normally objects, but they can also be represented as structs. - Krotki są zazwyczaj obiektami, niemniej mogą być również reprezentowane w formie struktur. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Całkowicie współpracują ze strukturami w języku C# i Visual Basic.NET; niemniej - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - krotki w formie struktur nie mogą być niejawnie konwertowane na krotki w formie obiektów (często zwane krotkami odwołań). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Z tego powodu nie będzie można skompilować drugiego wiersza poniżej. Usuń komentarz z tego wiersza, aby zobaczyć, co się stanie. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Mimo że nie możesz przeprowadzać niejawnej konwersji między krotkami struktury i krotkami odwołania, - - - - you can explicitly convert via pattern matching, as demonstrated below. - możesz konwertować jawnie za pośrednictwem dopasowywania do wzorców, jak pokazano poniżej. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Operatory potoków języka F# („|>”, „<|” itp.) oraz operatory kompozycji języka F# („>>”, „<<”) - - - - are used extensively when processing data. These operators are themselves functions - są często używane podczas przetwarzania danych. Operatory te są funkcjami - - - - which make use of Partial Application. - wykorzystującymi częściową aplikację. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Aby dowiedzieć się więcej o tych operatorach, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Aby dowiedzieć się więcej o częściowej aplikacji, zobacz: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Podnosi wartość do potęgi drugiej. - - - - Adds 1 to a value. - Dodaje 1 do wartości. - - - - Tests if an integer value is odd via modulo. - Sprawdza, czy wartość liczby całkowitej jest nieparzysta za pomocą operacji modulo. - - - - A list of 5 numbers. More on lists later. - Lista 5 liczb. Więcej informacji na temat list znajduje się dalej. - - - - Given a list of integers, it filters out the even numbers, - W oparciu o podaną listę liczb całkowitych funkcja filtruje liczby parzyste, - - - - squares the resulting odds, and adds 1 to the squared odds. - podnosi nieparzyste wyniki do potęgi drugiej, a następnie dodaje 1 do podniesionych do potęgi drugiej liczb nieparzystych. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Krótszym sposobem zapisu „squareOddValuesAndAddOne” jest zagnieżdżenie każdego - - - - sub-result into the function calls themselves. - wyniku podrzędnego w samych wywołaniach funkcji. - - - - This makes the function much shorter, but it's difficult to see the - Dzięki temu funkcja będzie znacznie krótsza, ale trudno będzie zobaczyć - - - - order in which the data is processed. - kolejność przetwarzania danych. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Preferowanym sposobem zapisu funkcji „squareOddValuesAndAddOne” jest użycie operatorów potoków języka F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Dzięki temu unika się tworzenia wyników pośrednich, a całość jest znacznie bardziej czytelna - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - niż w przypadku zagnieżdżania wywołań funkcji, np. „squareOddValuesAndAddOneNested” - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Możesz skrócić wywołanie „squareOddValuesAndAddOnePipeline” przez przeniesienie drugiego wywołania „List.map” - - - - into the first, using a Lambda Function. - do pierwszego, korzystając z funkcji lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Należy zauważyć, że potoki są również używane w funkcji lambda. Operatorów potoków języka F# - - - - can be used for single values as well. This makes them very powerful for processing data. - można również użyć w przypadku pojedynczych wartości. Dzięki temu jest to bardzo zaawansowane narzędzie do przetwarzania danych. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - W końcu możesz wyeliminować potrzebę jawnego przyjmowania elementu „values” jako parametru, używając wyrażenia „>>”, - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - aby zredagować dwie kluczowe operacje: odfiltrowywanie liczb parzystych, a następnie podnoszenie do potęgi drugiej i dodawanie jedynki. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Podobnie fragment „fun x -> ...” wyrażenia lambda nie jest wymagany, ponieważ wartość „x” jest po prostu - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - definiowana w tym zakresie w celu przekazania do potoku funkcyjnego. Dlatego można również użyć wyrażenia „>>” - - - - there as well. - w tym miejscu. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Wynikiem funkcji „squareOddValuesAndAddOneComposition” jest inna funkcja, która przyjmuje - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - listę liczb całkowitych w formie danych wejściowych. Jeśli wykonasz funkcję „squareOddValuesAndAddOneComposition” z listą - - - - of integers, you'll notice that it produces the same results as previous functions. - liczb całkowitych, funkcja będzie podawać takie same wyniki jak poprzednie funkcje. - - - - This is using what is known as function composition. This is possible because functions in F# - Używa się tu kompozycji funkcji. Jest to możliwe, ponieważ funkcje w języku F# - - - - use Partial Application and the input and output types of each data processing operation match - używają częściowej aplikacji, a typy danych wejściowych i wyjściowych dla każdej operacji przetwarzania danych są dopasowane do - - - - the signatures of the functions we're using. - podpisów funkcji, których używamy. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Listy są uporządkowane, niezmienne i jednokierunkowe. Są wartościowane przed przetworzeniem. - - - - This module shows various ways to generate lists and process lists with some functions - Ten moduł pokazuje różne sposoby generowania list i ich przetwarzania przy użyciu niektórych funkcji - - - - in the 'List' module in the F# Core Library. - w module „Lista” w bibliotece podstawowej języka F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Aby dowiedzieć się więcej, zobacz: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Listy definiuje się za pomocą zapisu [ ... ]. To jest pusta lista. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Jest to lista z 3 elementami. Znak „;” oddziela elementy w tym samym wierszu. - - - - You can also separate elements by placing them on their own lines. - Możesz również oddzielić elementy przez umieszczenie ich w osobnych wierszach. - - - - This is a list of integers from 1 to 1000 - To jest lista liczb całkowitych z zakresu od 1 do 1000 - - - - Lists can also be generated by computations. This is a list containing - Listy można także generować za pomocą obliczeń. To jest lista zawierająca - - - - all the days of the year. - wszystkie dni roku. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Wydrukuj 5 pierwszych elementów listy „daysList” przy użyciu wyrażenia „List.take”. - - - - Computations can include conditionals. This is a list containing the tuples - Obliczenia mogą obejmować wyrażenia warunkowe. To jest lista zawierająca krotki - - - - which are the coordinates of the black squares on a chess board. - które są współrzędnymi czarnych kwadratów na szachownicy. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listy można przekształcać za pomocą elementu „List.map” i innych kombinatorów programowania funkcjonalnego. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Ta definicja umożliwia utworzenie nowej listy przez podniesienie do kwadratu elementów na liście numberList za pomocą potoku - - - - operator to pass an argument to List.map. - operatora, aby przekazać argument do elementu List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Istnieje wiele innych kombinacji listy. Następujący kod oblicza sumę kwadratów - - - - numbers divisible by 3. - liczby podzielne przez 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Tablice to zmienialne kolekcje o stałym rozmiarze, w których zawierają się elementy tego samego typu. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Chociaż są podobne do list (obsługują wyliczenia i mają podobne kombinatory przetwarzania danych), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - ogólnie są szybsze i obsługują szybki dostęp losowy. Niemniej oznacza to mniejsze bezpieczeństwo związane z możliwością ich modyfikacji. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - To jest pusta tablica. Należy zauważyć, że składnia jest podobna do składni list, ale tutaj używa się zapisu „[| ... |]”. - - - - Arrays are specified using the same range of constructs as lists. - Tablice określa się za pomocą tego samego zestawu konstrukcji co listy. - - - - This is an array of numbers from 1 to 1000. - To jest tablica liczb z zakresu od 1 do 1000. - - - - This is an array containing only the words "hello" and "world". - To jest tablica zawierająca tylko słowa „hello” i „world”. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - To jest tablica zainicjowana za pomocą indeksu i zawierająca liczby parzyste z zakresu od 0 do 2000. - - - - Sub-arrays are extracted using slicing notation. - Tablice podrzędne wyodrębnia się za pomocą notacji wycinania. - - - - You can loop over arrays and lists using 'for' loops. - Możesz zapętlić tablice i listy przy użyciu pętli „for”. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Możesz zmodyfikować zawartość elementu tablicy za pomocą operatora przypisania „strzałka w lewo”. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Aby dowiedzieć się więcej o tym operatorze, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Możesz przekształcić tablice za pomocą operacji „Array.map” i innych operacji programowania funkcjonalnego. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Następujący kod oblicza sumę długości słów zaczynających się od litery „h”. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sekwencje są logicznymi seriami elementów tego samego typu. Jest to typ bardziej ogólny niż listy i tablice. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sekwencje są sprawdzane na żądanie, a ich ponowne sprawdzenie następuje za każdym razem, gdy są one iterowane. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Sekwencja języka F# jest aliasem dla elementu .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funkcje przetwarzania sekwencji można także zastosować dla list i tablic. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - To jest pusta sekwencja. - - - - This a sequence of values. - To jest sekwencja wartości. - - - - This is an on-demand sequence from 1 to 1000. - To jest sekwencja na żądanie zawierająca liczby od 1 do 1000. - - - - This is a sequence producing the words "hello" and "world" - To jest sekwencja generująca słowa „hello” i „world” - - - - This sequence producing the even numbers up to 2000. - Ta sekwencja generuje numery parzyste nie większe niż 2000. - - - - This is an infinite sequence which is a random walk. - To jest nieskończona sekwencja stanowiąca losowe przechodzenie. - - - - This example uses yield! to return each element of a subsequence. - W tym przykładzie użyto instrukcji yield! do zwrócenia każdego elementu sekwencji podrzędnej. - - - - This example shows the first 100 elements of the random walk. - Ten przykład przedstawia pierwszych 100 elementów losowego przechodzenia. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Funkcje rekursywne mogą wywoływać same siebie. W języku F# funkcje to jedyne rekursywne - - - - when declared using 'let rec'. - w przypadku deklarowania przy użyciu wyrażenia „let rec”. - - - - Recursion is the preferred way to process sequences or collections in F#. - Rekursja jest preferowanym sposobem przetwarzania sekwencji lub kolekcji w języku F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Ten przykład przedstawia funkcję rekursywną, która oblicza silnię - - - - integer. It uses 'let rec' to define a recursive function. - liczba całkowita. Używa deklaratora „let rec” do zdefiniowania funkcji rekursywnej. - - - - Computes the greatest common factor of two integers. - Oblicza największy wspólny dzielnik dwóch liczb całkowitych. - - - - Since all of the recursive calls are tail calls, - Jako że wszystkie wywołania rekurencyjne są wywołaniami ogonowymi, - - - - the compiler will turn the function into a loop, - kompilator zamieni funkcję w pętlę, - - - - which improves performance and reduces memory consumption. - która umożliwi zwiększenie wydajności i zmniejszenie zużycia pamięci. - - - - This example computes the sum of a list of integers using recursion. - Ten przykład oblicza sumę listy liczb całkowitych przy użyciu rekursji. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Operacja zamieni listę „sumList” w listę z rekursją ogonową przy użyciu funkcji pomocniczej z akumulatorem wyników. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Spowoduje to wywołanie funkcji pomocniczej z rekursją ogonową, z wartością „0” jako akumulatorem początkowym. - - - - An approach like this is common in F#. - Takie podejście jest typowe dla języka F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Rekordy są agregacjami nazwanych wartości z opcjonalnymi elementami członkowskimi (np. metodami). - - - - They are immutable and have structural equality semantics. - Są niezmienne i mają semantykę równości strukturalnej. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Ten przykład przedstawia sposób definiowania nowego typu rekordu. - - - - This example shows how to instantiate a record type. - W tym przykładzie pokazano sposób tworzenia wystąpienia typu rekordu. - - - - You can also do this on the same line with ';' separators. - Możesz to również zrobić w tym samym wierszu, korzystając z separatorów „;”. - - - - This example shows how to use "copy-and-update" on record values. It creates - Ten przykład przedstawia sposób użycia operacji „kopiuj i aktualizuj” na wartościach rekordu. Tworzy - - - - a new record value that is a copy of contact1, but has different values for - nową wartość rekordu, która jest kopią elementu contact1, lecz ma inne wartości dla - - - - the 'Phone' and 'Verified' fields. - pola „Phone” i „Verified”. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Ten przykład przedstawia, jak napisać funkcję przetwarzającą wartość rekordu. - - - - It converts a 'ContactCard' object to a string. - Konwertuje obiekt „ContactCard” na ciąg. - - - - This is an example of a Record with a member. - Jest to przykład rekordu z elementem członkowskim. - - - - Members can implement object-oriented members. - Elementy członkowskie mogą implementować elementy członkowskie zorientowane obiektowo. - - - - Members are accessed via the '.' operator on an instantiated type. - Do elementów członkowskich uzyskuje się dostęp za pośrednictwem operatora „.” w typie skonkretyzowanym. - - - - Records can also be represented as structs via the 'Struct' attribute. - Rekordy można również reprezentować jako struktury za pośrednictwem atrybutu „Struct”. - - - - This is helpful in situations where the performance of structs outweighs - Jest to przydatne w sytuacjach, w których wydajność struktur przewyższa - - - - the flexibility of reference types. - elastyczność typów odwołań. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Unie rozłączne (DU, Discriminated Union) są wartościami, które mogą być liczbą nazwanych formularzy lub przypadków. - - - - Data stored in DUs can be one of several distinct values. - Dane przechowywane w uniach rozłącznych mogą mieć jedną z kilku różnych wartości. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Następująca wartość reprezentuje kolor karty do gry. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Unii rozłącznej można również użyć do reprezentowania wartości karty do gry. - - - - Represents the rank of cards 2 .. 10 - Reprezentuje wartości kart 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Unie rozłączne mogą również implementować elementy członkowskie zorientowane obiektowo. - - - - This is a record type that combines a Suit and a Rank. - To jest typ rekordu łączący kolor i wysokość. - - - - It's common to use both Records and Disciminated Unions when representing data. - Często używa się rekordów i unii rozłącznych w przypadku reprezentowania danych. - - - - This computes a list representing all the cards in the deck. - Operacja oblicza listę reprezentującą wszystkie karty w talii. - - - - This example converts a 'Card' object to a string. - Ten przykład umożliwia przekonwertowanie elementu „Card” na ciąg. - - - - This example prints all the cards in a playing deck. - Ten przykład umożliwia wyświetlenie wszystkich kart w talii. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Unie rozłączne o pojedynczych przypadkach są często używane podczas modelowania domeny. Może to zapewnić większe bezpieczeństwo typów - - - - over primitive types such as strings and ints. - niż typy pierwotne, np. ciągi i liczby całkowite. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Unie rozłączne o pojedynczych przypadkach nie mogą być niejawnie konwertowane do lub z typu przez nich opakowywanego. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Przykładowo funkcja przyjmująca adres nie może zaakceptować ciągu jako danych wejściowych - - - - or vive/versa. - i na odwrót. - - - - You can easily instantiate a single-case DU as follows. - Możesz z łatwością utworzyć wystąpienie dla unii rozłącznej o pojedynczym przypadku w następujący sposób. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Jeśli potrzebujesz wartości, możesz cofnąć opakowywanie wartości bazowej za pomocą prostej funkcji. - - - - Printing single-case DUs is simple with unwrapping functions. - Drukowanie unii rozłącznych o pojedynczych przypadkach jest proste z funkcjami cofającymi opakowywanie. - - - - Disciminated Unions also support recursive definitions. - Unie rozłączne obsługują również definicje rekursywne. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Reprezentuje to binarne drzewo wyszukiwania, gdzie jeden przypadek jest pustym drzewem, - - - - and the other being a Node with a value and two subtrees. - a drugi węzłem z wartością i dwoma poddrzewami. - - - - Check if an item exists in the binary search tree. - Sprawdź, czy element istnieje w binarnym drzewie wyszukiwania. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Wyszukuje rekursywnie przy użyciu dopasowywania wzorca. Zwraca wartość true, jeśli element istnieje; w przeciwnym wypadku zwraca wartość false. - - - - Check the left subtree. - Sprawdź lewe poddrzewo. - - - - Check the right subtree. - Sprawdź prawe poddrzewo. - - - - Inserts an item in the Binary Search Tree. - Wstawia element do binarnego drzewa wyszukiwania. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Znajduje miejsce do wstawienia rekursywnego przy użyciu dopasowania wzorca, a następnie wstawia nowy węzeł. - - - - If the item is already present, it does not insert anything. - Jeśli element jest już obecny, nie wstawia niczego. - - - - No need to insert, it already exists; return the node. - Wstawianie nie jest konieczne, element już istnieje; zwróć węzeł. - - - - Call into left subtree. - Wywołanie do lewego poddrzewa. - - - - Call into right subtree. - Wywołanie do prawego poddrzewa. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Unie rozłączne mogą być również reprezentowane w formie struktur za pośrednictwem atrybutu „Struct”. - - - - This is helpful in situations where the performance of structs outweighs - Jest to przydatne w sytuacjach, w których wydajność struktur przewyższa - - - - the flexibility of reference types. - elastyczność typów odwołań. - - - - However, there are two important things to know when doing this: - Niemniej w przypadku tej operacji należy pamiętać o dwóch ważnych rzeczach: - - - - 1. A struct DU cannot be recursively-defined. - 1. Unii rozłącznej w formie struktury nie można zdefiniować rekursywnie. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Unia rozłączna w formie struktury musi mieć unikatowe nazwy dla każdego ze swoich przypadków. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Dopasowywanie wzorca jest funkcją języka F# umożliwiającą wykorzystywanie wzorców, - - - - which are a way to compare data with a logical structure or structures, - które są sposobem na porównywanie danych ze strukturami logicznymi lub strukturami, - - - - decompose data into constituent parts, or extract information from data in various ways. - rozkładanie danych na części składowe lub wyodrębnianie informacji z danych na różne sposoby. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Następnie możesz wysłać „kształt” wzorca za pośrednictwem funkcji dopasowywania wzorca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Rekord zawierający imię i nazwisko osoby - - - - A Discriminated Union of 3 different kinds of employees - Unia rozłączna 3 różnych rodzajów pracowników - - - - Count everyone underneath the employee in the management hierarchy, - Licz wszystkich podlegających pracownikowi w hierarchii zarządzania, - - - - including the employee. - z uwzględnieniem pracownika. - - - - Find all managers/executives named "Dave" who do not have any reports. - Znajdź wszystkich kierowników/dyrektorów o imieniu „Dave”, którzy nie mają żadnych podwładnych. - - - - This uses the 'function' shorthand to as a lambda expression. - Operacja używa skrótu słowa „function” jako wyrażenia lambda. - - - - [] matches an empty list. - [] dopasuje pustą listę. - - - - '_' is a wildcard pattern that matches anything. - „_” to wzorzec wieloznaczny, który pasuje do wszystkiego. - - - - This handles the "or else" case. - Obsługuje przypadek „w przeciwnym razie”. - - - - You can also use the shorthand function construct for pattern matching, - Możesz również użyć konstrukcji funkcji skrótu w przypadku dopasowywania wzorców, - - - - which is useful when you're writing functions which make use of Partial Application. - co jest przydatne podczas pisania funkcji wykorzystujących częściową aplikację. - - - - Define some more functions which parse with the helper function. - Zdefiniuj więcej funkcji, które będą analizować przy użyciu funkcji pomocniczej. - - - - Active Patterns are another powerful construct to use with pattern matching. - Wzorce aktywne to kolejna zaawansowana konstrukcja do zastosowania podczas dopasowywania wzorców. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Umożliwiają one partycjonowanie danych wejściowych do formularzy niestandardowych przez ich rozkładanie w lokacji wywołania dopasowania wzorca. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Dopasowywanie wzorców za pośrednictwem słowa kluczowego „function” i wzorców aktywnych często wygląda w następujący sposób. - - - - Call the printer with some different values to parse. - Wywołaj drukarkę za pomocą innych wartości do przeanalizowania. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Wartości opcji to dowolne wartości otagowane jako „Some” lub „None”. - - - - They are used extensively in F# code to represent the cases where many other - Są one bardzo często używane w kodzie języka F# do reprezentowania przypadków, w których w wielu innych - - - - languages would use null references. - językach użyte zostałyby odwołania o wartości null. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Najpierw zdefiniuj kod pocztowy zdefiniowany za pośrednictwem unii rozłącznej o pojedynczym przypadku. - - - - Next, define a type where the ZipCode is optional. - Następnie zdefiniuj typ, w którym element ZipCode jest opcjonalny. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Następnie zdefiniuj typ interfejsu reprezentujący obiekt, aby obliczyć strefę wysyłki dla kodu pocztowego klienta - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - przy użyciu danych implementacji metod abstrakcyjnych „getState” i „getShippingZone”. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Następnie oblicz strefę wysyłki dla klienta za pomocą wystąpienia kalkulatora. - - - - This uses combinators in the Option module to allow a functional pipeline for - Operacja używa kombinatorów w module opcji, aby umożliwiać potokowi funkcjonalnemu - - - - transforming data with Optionals. - przekształcanie danych z wykorzystaniem elementów opcjonalnych. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Jednostki miary są bezpiecznym sposobem dodawania adnotacji do pierwotnych typów numerycznych. - - - - You can then perform type-safe arithmetic on these values. - Następnie możesz przeprowadzić bezpieczne operacje arytmetyczne dla tych wartości. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Najpierw otwórz kolekcję typowych nazw jednostek - - - - Define a unitized constant - Definiuj stałą w jednostkach - - - - Next, define a new unit type - Następnie zdefiniuj nowy typ jednostki - - - - Conversion factor mile to meter. - Współczynnik konwersji mil na metry. - - - - Define a unitized constant - Definiuj stałą w jednostkach - - - - Compute metric-system constant - Oblicz stałą systemu metryk - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Wartości używające jednostek miary można dostosować tak jak pierwotny typ numeryczny, np. w przypadku drukowania. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Klasy są sposobem definiowania nowych typów obiektów w języku F# i obsługują standardowe konstrukcje zorientowane obiektowo. - - - - They can have a variety of members (methods, properties, events, etc.) - Mogą mieć różne elementy członkowskie (metody, właściwości, zdarzenia itp.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Aby dowiedzieć się więcej o klasach, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Aby dowiedzieć się więcej o elementach członkowskich, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Prosta, dwuwymiarowa klasa Vector. - - - - The class's constructor is on the first line, - Konstruktor klasy znajduje się w pierwszym wierszu - - - - and takes two arguments: dx and dy, both of type 'double'. - i przyjmuje dwa argumenty: dx i dy, oba typu „double”. - - - - This internal field stores the length of the vector, computed when the - To pole wewnętrzne przechowuje długość wektora obliczoną podczas - - - - object is constructed - obiekt jest skonstruowany - - - - 'this' specifies a name for the object's self identifier. - Wyraz „this” określa nazwę własnego identyfikatora obiektu. - - - - In instance methods, it must appear before the member name. - W metodach wystąpień musi on znajdować się przed nazwą elementu członkowskiego. - - - - This member is a method. The previous members were properties. - Ten element członkowski jest metodą. Poprzednie elementy członkowskie były właściwościami. - - - - This is how you instantiate the Vector2D class. - Jest to sposób tworzenia wystąpienia dla klasy Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Pobierz nowy skalowany obiekt wektora bez modyfikowania obiektu oryginalnego. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Klasy ogólne umożliwiają definiowanie typów z uwzględnieniem zestawu parametrów typu. - - - - In the following, 'T is the type parameter for the class. - W następującym przykładzie 'T jest parametrem typu dla klasy. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - To wewnętrzne pole przechowuje stany na liście. - - - - Add a new element to the list of states. - Dodaj nowy element do listy stanów. - - - - use the '<-' operator to mutate the value. - użyj operatora „<-”, aby zmodyfikować wartość. - - - - Get the entire list of historical states. - Pobierz całą listę stanów historycznych. - - - - Get the latest state. - Pobierz najnowszy stan. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Wystąpienie typu „int” klasy procedury śledzenia stanu. Należy zwrócić uwagę, że parametr typu jest wywnioskowany. - - - - Add a state - Dodaj stan - - - - Interfaces are object types with only 'abstract' members. - Interfejsy to typy obiektu, których wszystkie elementy członkowskie są abstrakcyjne. - - - - Object types and object expressions can implement interfaces. - Typy obiektu i wyrażenia obiektu mogą implementować interfejsy. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - To jest typ implementujący interfejs IDisposable. - - - - This is the implementation of IDisposable members. - To jest implementacja elementów członkowskich interfejsu IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - To jest obiekt implementujący interfejs IDisposable za pośrednictwem wyrażenia obiektu - - - - Unlike other languages such as C# or Java, a new type definition is not needed - W przeciwieństwie do innych języków, np. C# lub Java, nowy typ definicji nie jest wymagany - - - - to implement an interface. - do zaimplementowania interfejsu. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - Biblioteka FSharp.Core definiuje zestaw funkcji przetwarzania równoległego. Tutaj - - - - you use some functions for parallel processing over arrays. - niektóre funkcje są używane do równoległego przetwarzania tablic. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Aby dowiedzieć się więcej, zobacz https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Najpierw tablica wartości wejściowych. - - - - Next, define a functions that does some CPU intensive computation. - Następnie zdefiniuj funkcje, które wykonują obliczenia intensywnie korzystające z procesora. - - - - Next, do a parallel map over a large input array. - Następnie wykonaj równoległe mapowanie dla dużej tablicy wejściowej. - - - - Next, print the results. - Następnie wyświetl wyniki. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Zdarzenia są wspólnym idiomem dla programowania na platformie .NET, zwłaszcza przy użyciu aplikacji WinForms lub WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Aby dowiedzieć się więcej, zobacz https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Najpierw utwórz wystąpienie obiektu Event, które składa się z punktu subskrypcji (event.Publish) i wyzwalacza zdarzenia (event.Trigger). - - - - Next, add handler to the event. - Następnie dodaj procedurę obsługi do zdarzenia. - - - - Next, trigger the event. - Następnie wyzwól zdarzenie. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Następnie utwórz wystąpienie zdarzenia zgodne ze standardową konwencją platformy .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Następnie dodaj procedurę obsługi dla tego nowego zdarzenia. - - - - Next, trigger this event (note that sender argument should be set). - Następnie wyzwól to zdarzenie (zwróć uwagę, że argument elementu wysyłającego powinien być ustawiony). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf deleted file mode 100644 index 64df6c8506..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Esta amostra guiará você pelos elementos da linguagem F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Para executar o código no F# Interativo, realce uma seção de código e pressione Alt-Enter ou clique com botão direito do mouse - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - e selecione "Executar em Interativo". Você pode abrir a janela F# Interativo no menu "Exibir". - - - - For more about F#, see: - Para obter mais informações sobre F#, consulte: - - - - To see this tutorial in documentation form, see: - Para ver este tutorial em forma de documentação, consulte: - - - - To learn more about applied F# programming, use - Para saber mais sobre a programação F# aplicada, use - - - - To install the Visual F# Power Tools, use - Para instalar o Visual F# Power Tools, use - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Ferramentas' --> 'Extensões e Atualizações' --> `Online` e pesquise - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Para obter modelos adicionais a serem usados com F#, consulte 'Modelos online' no Visual Studio, - - - - 'New Project' --> 'Online Templates' - 'Novo projeto --> 'Modelos online' - - - - F# supports three kinds of comments: - F# dá suporte a três tipos de comentários: - - - - 1. Double-slash comments. These are used in most situations. - 1. Comentários de barra dupla. São usados na maioria das situações. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Comentários de bloco em estilo de ML. Eles não são usados com muita frequência. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Comentários de barra tripla. São usados para funções de documentação, tipos, etc. - - - - They will appear as text when you hover over something which is decorated with these comments. - Eles aparecerão como texto quando você passar o mouse sobre algo decorado com esses comentários. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Eles também dão suporte a comentários XML em estilo .NET, que permitem que você gere documentação de referência, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - além de permitirem que editores (como o Visual Studio) extraiam informações deles. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Abra os namespaces usando a palavra-chave 'open'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Um módulo é um agrupamento de código F#, assim como valores, valores de função e tipos. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Agrupar código em módulos ajuda a manter o código relacionado junto e ajuda a evitar conflitos de nome em seu programa. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Este é um inteiro de exemplo. - - - - This is a sample floating point number. - Esta é uma amostra de número de ponto flutuante. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Isso computou um novo número por meio de alguma aritmética. Tipos numéricos são convertidos usando - - - - functions 'int', 'double' and so on. - funções 'int', 'double' e assim por diante. - - - - This is a list of the numbers from 0 to 99. - Esta é uma lista de números de 0 a 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Isso é uma lista de todas as tuplas contendo todos os números de 0 a 99 e seus quadrados. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - A próxima linha imprime uma lista que inclui tuplas, usando '%A' para impressão genérica. - - - - This is a sample integer with a type annotation - Este é um inteiro de exemplo com uma anotação de tipo - - - - Values in F# are immutable by default. They cannot be changed - Os valores em F# são imutáveis por padrão. Eles não podem ser alterados - - - - in the course of a program's execution unless explicitly marked as mutable. - no decorrer da execução de um programa a menos que explicitamente marcados como mutáveis. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Associar um valor a um nome via 'let' o torna imutável. - - - - The second line of code fails to compile because 'number' is immutable and bound. - A compilação da segunda linha de código falha porque 'number' é imutável e limitado. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Não é permitido redefinir 'number' para um valor diferente em F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Uma associação mutável. Isso é necessário para que se possa modificar o valor de 'otherNumber'. - - - - When mutating a value, use '<-' to assign a new value. - Ao converter um valor, use '<-' para atribuir um novo valor. - - - - You could not use '=' here for this purpose since it is used for equality - Você não pode usar '=' aqui para essa finalidade, já que ele é usado para igualdade - - - - or other contexts such as 'let' or 'module' - ou outros contextos como 'let' ou 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - Grande parte da programação F# consiste em definir funções que transformam os dados de entrada para produzir - - - - useful results. - resultados úteis. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Use 'let' para definir uma função. Ele aceita um argumento inteiro e retorna um inteiro. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Parênteses são opcionais para os argumentos da função, exceto quando você usa uma anotação de tipo explícito. - - - - Apply the function, naming the function return result using 'let'. - Aplique a função, nomeando o resultado de retorno de função usando 'let'. - - - - The variable type is inferred from the function return type. - O tipo de variável é deduzido do tipo de retorno de função. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Esta linha usa '%d' para imprimir o resultado como um inteiro. Isso é fortemente tipado. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Se 'result1' não fosse do tipo 'int', a linha falharia na compilação. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Quando necessário, anote o tipo de um nome de parâmetro usando '(argument:type)'. É necessário usar parênteses. - - - - Conditionals use if/then/elid/elif/else. - Condicionais usam if/then/elid/elif/else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Observe que F# usa sintaxe com reconhecimento de recuo de espaço em branco, semelhante a linguagens como Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Esta linha usa '%f' para imprimir o resultado como um float. Como em '%d' acima, isso é fortemente tipado. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Boolianos são tipos de dados fundamentais em F#. Aqui estão alguns exemplos de Boolianos e lógica condicional. - - - - To learn more, see: - Para saber mais, acesse: - - - - and - E - - - - Booleans values are 'true' and 'false'. - Valores booliano são 'true' e 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Operadores em boolianos são 'not', '&&' e '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Esta linha usa '%b' para imprimir um valor booliano. Isso é fortemente tipado. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Cadeias de caracteres são tipos de dados fundamentais em F#. Aqui estão alguns exemplos de Cadeias de caracteres e a manipulação básicas de Cadeia de caracteres. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Cadeias de caracteres usam aspas duplas. - - - - Strings can also use @ to create a verbatim string literal. - Cadeias de caracteres também podem usar @ para criar um literal de cadeia de caracteres textual. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Isso vai ignorar caracteres de escapada como '\', '\n', '\t', etc. - - - - String literals can also use triple-quotes. - Literais de cadeia de caracteres também podem usar aspas triplas. - - - - String concatenation is normally done with the '+' operator. - A concatenação de cadeia de caracteres normalmente é feita com o operador '+'. - - - - This line uses '%s' to print a string value. This is type-safe. - Esta linha usa '%s' para imprimir um valor de cadeia de caracteres. Isso é fortemente tipado. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Subcadeias de caracteres usam a notação de indexador. Essa linha extrai os sete primeiros caracteres como uma subcadeia de caracteres. - - - - Note that like many languages, Strings are zero-indexed in F#. - Observe que, como muitas linguagens, Cadeias de Caracteres são indexadas com zero em F#. - - - - Tuples are simple combinations of data values into a combined value. - Tuplas são combinações simples de valores de dados em um valor combinado. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Uma tupla simples de inteiros. - - - - A function that swaps the order of two values in a tuple. - Uma função que troca a ordem de dois valores em uma tupla. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Inferência de Tipos F# generalizará automaticamente a função para ter um tipo genérico, - - - - meaning that it will work with any type. - significando que ele funcionará com qualquer tipo. - - - - A tuple consisting of an integer, a string, - Uma tupla consistindo em um inteiro, uma cadeia de caracteres, - - - - and a double-precision floating point number. - e um número de ponto flutuante de precisão dupla. - - - - A simple tuple of integers with a type annotation. - Uma tupla simples de números inteiros com uma anotação de tipo. - - - - Type annotations for tuples use the * symbol to separate elements - As anotações de tipo para tuplas usam o símbolo * para separar elementos - - - - Tuples are normally objects, but they can also be represented as structs. - Tuplas normalmente são objetos, mas também podem ser representados como structs. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Esses interoperam completamente com structs em C# e Visual Basic.NET; entretanto, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - tuplas de struct não são implicitamente conversíveis com tuplas de objeto (geralmente chamadas de tuplas de referência). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - A compilação da segunda linha abaixo falhará por causa disso. Remova a marca de comentário para ver o que acontece. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Embora não seja possível converter implicitamente entre tuplas de struct e tuplas de referência, - - - - you can explicitly convert via pattern matching, as demonstrated below. - você pode converter explicitamente via correspondência de padrões, conforme demonstrado abaixo. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Os operadores de pipe F# ('|>', '<|', etc.) e os operadores de composição F# ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - são usadas extensivamente durante o processamento de dados. Esses operadores são funções - - - - which make use of Partial Application. - que fazem uso do Aplicativo Parcial. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Para saber mais sobre esses operadores, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Para saber mais sobre Aplicativo Parcial, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Eleva um valor ao quadrado. - - - - Adds 1 to a value. - Adiciona 1 a um valor. - - - - Tests if an integer value is odd via modulo. - Testa se um valor inteiro for ímpar por meio do módulo. - - - - A list of 5 numbers. More on lists later. - Uma lista de cinco números. Mais sobre listas posteriormente. - - - - Given a list of integers, it filters out the even numbers, - Dada uma lista de inteiros, ele filtra os números pares, - - - - squares the resulting odds, and adds 1 to the squared odds. - eleva os ímpares resultantes ao quadrado e adiciona 1 aos ímpares elevados ao quadrado. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Uma maneira mais curta para gravar 'squareOddValuesAndAddOne' é aninhar cada - - - - sub-result into the function calls themselves. - sub-resultado em função invoca a si mesmo. - - - - This makes the function much shorter, but it's difficult to see the - Isso faz com que a função fique muito menor, mas é difícil ver a - - - - order in which the data is processed. - ordem em que os dados são processados. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Uma maneira preferencial para gravar 'squareOddValuesAndAddOne' é usar operadores de pipe F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Isso permite que você evite criar resultados intermediários, mas é muito mais legível - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - que a função de aninhamento invoca como 'squareOddValuesAndAddOneNested' - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - Você pode reduzir 'squareOddValuesAndAddOnePipeline' movendo a segunda chamada `List.map` - - - - into the first, using a Lambda Function. - no primeiro, usando uma Função Lambda. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Observe que pipelines também estão sendo usados dentro da função lambda. Operadores de pipe F# - - - - can be used for single values as well. This makes them very powerful for processing data. - podem ser usados para valores únicos também. Isso os torna muito eficientes para o processamento de dados. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Por fim, você pode eliminar a necessidade de incluir explicitamente 'valores' como um parâmetro usando '>>' - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - para compor as duas principais operações: filtrar números pares e, em seguida, elevar ao quadrado e adicionar um. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Da mesma forma, o bit 'fun x -> ...' da expressão lambda também não é necessário porque 'x' é simplesmente - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - sendo definido nesse escopo para que possa ser passada a um pipeline funcional. Portanto, '>>' pode ser usado - - - - there as well. - lá também. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - O resultado de 'squareOddValuesAndAddOneComposition' é em si outra função que leva um - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - lista de inteiros como sua entrada. Se você executar 'squareOddValuesAndAddOneComposition' com uma lista - - - - of integers, you'll notice that it produces the same results as previous functions. - de inteiros, você observará que ela produz os mesmos resultados que as funções anteriores. - - - - This is using what is known as function composition. This is possible because functions in F# - Isso está usando o que é conhecido como composição de função. Isso é possível porque funções em F# - - - - use Partial Application and the input and output types of each data processing operation match - use Aplicativo Parcial e os tipos de entrada e saída de cada correspondência de operação de processamento de dados - - - - the signatures of the functions we're using. - as assinaturas das funções que estamos usando. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - As listas são listas ordenadas, imutáveis, vinculadas de modo único. Elas são adiantadas em sua avaliação. - - - - This module shows various ways to generate lists and process lists with some functions - Este módulo mostra várias formas de gerar listas e listas de processo com algumas funções - - - - in the 'List' module in the F# Core Library. - no módulo 'Lista' na Biblioteca Principal de F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - As listas são definidas usando [ ... ]. Esta é uma lista vazia. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Esta é uma lista com 3 elementos. ';' é usado para separar elementos na mesma linha. - - - - You can also separate elements by placing them on their own lines. - Você também pode separar elementos colocando-os em suas próprias linhas. - - - - This is a list of integers from 1 to 1000 - Esta é uma lista de inteiros de 1 a 1.000 - - - - Lists can also be generated by computations. This is a list containing - Listas também podem ser geradas pelos cálculos. Esta é uma lista contendo - - - - all the days of the year. - todos os dias do ano. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Imprima os primeiros cinco elementos de 'daysList' usando 'List.take'. - - - - Computations can include conditionals. This is a list containing the tuples - Cálculos podem incluir condicionais. Esta é uma lista contendo as tuplas - - - - which are the coordinates of the black squares on a chess board. - que são as coordenadas dos quadrados pretos em um tabuleiro de xadrez. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listas podem ser transformadas usando 'List. map' e outros combinadores de programação funcional. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Essa definição produz uma nova lista ao elevar ao quadrado os números em numberList, usando o pipeline - - - - operator to pass an argument to List.map. - operador para passar um argumento para List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Há muitas outras combinações de lista. O exemplo a seguir computa a soma dos quadrados dos - - - - numbers divisible by 3. - números divisíveis por 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Matrizes são coleções de tamanho fixo, mutáveis de elementos do mesmo tipo. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Embora elas sejam semelhantes às Listas (eles dão suporte à enumeração e têm combinadores semelhantes para processamento de dados), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - elas geralmente são mais rápidas e dão suporte ao acesso aleatório rápido. Isso vem com o custo de ser menos seguro por ser mutável. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Esta é a matriz vazia. Observe que a sintaxe é semelhante à de Listas, mas usa '[| ... |]' em vez disso. - - - - Arrays are specified using the same range of constructs as lists. - Matrizes são especificadas usando o mesmo intervalo de construções usado em listas. - - - - This is an array of numbers from 1 to 1000. - Esta é uma matriz de números de 1 a 1.000. - - - - This is an array containing only the words "hello" and "world". - Esta é uma matriz que contém apenas as palavras "olá" e "mundo". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Esta é uma matriz inicializada pelo índice e que contém os números pares de 0 a 2.000. - - - - Sub-arrays are extracted using slicing notation. - Submatrizes são extraídas usando a notação de divisão. - - - - You can loop over arrays and lists using 'for' loops. - Você pode executar um loop através de matrizes e listas usando loops 'for'. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Você pode modificar o conteúdo de um elemento de matriz usando o operador de atribuição de seta para a esquerda. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Para saber mais sobre esse operador, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Você pode transformar as matrizes usando 'Array.map' e outras operações de programação funcional. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - O exemplo a seguir calcula a soma dos tamanhos de palavras que começam com 'h'. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sequências são uma série lógica de elementos, todos do mesmo tipo. Eles são um tipo mais geral que Listas e Matrizes. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - As sequências são avaliada sob demanda e reavaliadas sempre que são repetidas. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Uma sequência de F# é um alias para um System.Collections.Generic.IEnumerable .NET<' t>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Funções de processamento de sequência também podem ser aplicadas a matrizes e listas. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Esta é a sequência vazia. - - - - This a sequence of values. - Esta é uma sequência de valores. - - - - This is an on-demand sequence from 1 to 1000. - Esta é uma sequência sob demanda de 1 a 1000. - - - - This is a sequence producing the words "hello" and "world" - Esta é uma sequência produzindo as palavras "olá" e "mundo" - - - - This sequence producing the even numbers up to 2000. - Esta sequência produzindo os números pares até 2.000. - - - - This is an infinite sequence which is a random walk. - Esta é uma sequência infinita, que é um exame aleatório. - - - - This example uses yield! to return each element of a subsequence. - Este exemplo usa yield! para retornar cada elemento de uma subsequência. - - - - This example shows the first 100 elements of the random walk. - Este exemplo mostra os primeiros 100 elementos do exame aleatório. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Funções recursivas podem chamar a si mesmas. Em F#, funções são recursivas somente - - - - when declared using 'let rec'. - quando declarada usando 'let rec'. - - - - Recursion is the preferred way to process sequences or collections in F#. - Recursão é a maneira preferencial de processar sequências ou coleções em F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Este exemplo mostra uma função recursiva que computa o fatorial de um - - - - integer. It uses 'let rec' to define a recursive function. - inteiro. Ele usa 'let gra' para definir uma função recursiva. - - - - Computes the greatest common factor of two integers. - Calcula o máximo divisor comum de dois inteiros. - - - - Since all of the recursive calls are tail calls, - Como todas as chamadas recursivas são chamadas tail, - - - - the compiler will turn the function into a loop, - o compilador transformará a função em um loop, - - - - which improves performance and reduces memory consumption. - que melhora o desempenho e reduz o consumo de memória. - - - - This example computes the sum of a list of integers using recursion. - Este exemplo calcula a soma de uma lista de inteiros usando recursão. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Isso torna a cauda de 'sumList' recursiva usando uma função auxiliar com um acumulador de resultado. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Isso invoca a cauda da função auxiliar recursiva, fornecendo '0' como um acumulador de semente. - - - - An approach like this is common in F#. - Uma abordagem como essa é comum em F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Registros são uma agregação de valores nomeados com membros opcionais (como métodos). - - - - They are immutable and have structural equality semantics. - Eles são imutáveis e têm semântica de igualdade estrutural. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Este exemplo mostra como definir um novo tipo de registro. - - - - This example shows how to instantiate a record type. - Este exemplo mostra como criar uma instância de um tipo de registro. - - - - You can also do this on the same line with ';' separators. - Você também pode fazer isso na mesma linha com separadores ';'. - - - - This example shows how to use "copy-and-update" on record values. It creates - Este exemplo mostra como usar o "copiar e atualizar" em valores do Registro. Ele cria - - - - a new record value that is a copy of contact1, but has different values for - um novo valor de registro é uma cópia de contact1, mas tem valores diferentes para - - - - the 'Phone' and 'Verified' fields. - os campos 'Telefone' e 'Verificado'. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Este exemplo mostra como escrever uma função que processa um valor de Registro. - - - - It converts a 'ContactCard' object to a string. - Converte um objeto 'ContactCard' em uma cadeia de caracteres. - - - - This is an example of a Record with a member. - Este é um exemplo de um Registro com um membro. - - - - Members can implement object-oriented members. - Os membros podem implementar membros orientados a objeto. - - - - Members are accessed via the '.' operator on an instantiated type. - Os membros são acessados por meio do operador '.' em um tipo instanciado. - - - - Records can also be represented as structs via the 'Struct' attribute. - Registros também podem ser representados como structs por meio do atributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Isso é útil em situações em que o desempenho de structs é superior - - - - the flexibility of reference types. - a flexibilidade de tipos de referência. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Uniões Discriminadas (UD) são valores que podem ser vários formulários nomeados ou casos. - - - - Data stored in DUs can be one of several distinct values. - Dados armazenados em DUs podem ser um dos vários valores distintos. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - O exemplo a seguir representa o naipe de uma carta de baralho. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Uma União Discriminada também pode ser usada para representar a classificação de uma carta de baralho. - - - - Represents the rank of cards 2 .. 10 - Representa posição das cartas 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Uniões Discriminadas também podem implementar membros orientados a objeto. - - - - This is a record type that combines a Suit and a Rank. - Este é um tipo de registro que combina um Naipe e uma Classificação. - - - - It's common to use both Records and Disciminated Unions when representing data. - É comum usar Registros e Uniões Discriminadas ao representar dados. - - - - This computes a list representing all the cards in the deck. - Isto calcula uma lista que representa todas as cartas do baralho. - - - - This example converts a 'Card' object to a string. - Este exemplo converte um objeto 'Carta' em uma cadeia de caracteres. - - - - This example prints all the cards in a playing deck. - Este exemplo imprime todas as cartas de um baralho de jogo. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - UDs de caso único são frequentemente usadas para modelagem de domínio. Isso pode significar um tipo extra de segurança para você - - - - over primitive types such as strings and ints. - sobre tipos primitivos como cadeias de caracteres e inteiros. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - UDs de caso único não podem ser convertidas implicitamente de ou para o tipo que elas encapsulam. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Por exemplo, uma função que compreende um Endereço não pode aceitar uma sequência de caracteres como essa entrada, - - - - or vive/versa. - ou vice-versa. - - - - You can easily instantiate a single-case DU as follows. - Você pode facilmente criar uma instância em uma UD de único caso conforme mostrado a seguir. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Quando precisar do valor, você pode decodificar o valor subjacente com uma função simples. - - - - Printing single-case DUs is simple with unwrapping functions. - Imprimir UDs de caso único é simples com funções não encapsuladas. - - - - Disciminated Unions also support recursive definitions. - Uniões Discriminadas também dão suporte a definições recursivas. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Isso representa uma Árvore de Pesquisa Binária, com um caso sendo a árvore Vazia, - - - - and the other being a Node with a value and two subtrees. - e o outro sendo um Nó com um valor e duas subárvores. - - - - Check if an item exists in the binary search tree. - Verifique se um item existe na árvore de pesquisa binária. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Pesquisa recursivamente usando Correspondência de Padrões. Retorna verdadeiro se existir; caso contrário, falso. - - - - Check the left subtree. - Verifique a subárvore à esquerda. - - - - Check the right subtree. - Verifique a subárvore à direita. - - - - Inserts an item in the Binary Search Tree. - Insere um item na Árvore de Pesquisa Binária. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Encontra o local para inserir recursivamente usando Correspondência de Padrões e, em seguida, insere um novo nó. - - - - If the item is already present, it does not insert anything. - Se o item já estiver presente, ele não insere nada. - - - - No need to insert, it already exists; return the node. - Não é preciso inseri-lo, ele já existe; retorne o nó. - - - - Call into left subtree. - Chamar subárvore à esquerda. - - - - Call into right subtree. - Chamar subárvore à direita. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Uniões Discriminadas também podem ser representadas como structs por meio do atributo 'Struct'. - - - - This is helpful in situations where the performance of structs outweighs - Isso é útil em situações em que o desempenho de structs é superior - - - - the flexibility of reference types. - a flexibilidade de tipos de referência. - - - - However, there are two important things to know when doing this: - No entanto, existem duas coisas importantes a saber ao fazer isso: - - - - 1. A struct DU cannot be recursively-defined. - 1. Uma UD struct não pode ser definida recursivamente. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Uma UD struct deve ter nomes exclusivos para cada um dos seus casos. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Correspondência de padrões é um recurso do F# que permite que você utilize Padrões, - - - - which are a way to compare data with a logical structure or structures, - que são uma forma de comparar dados com uma estrutura lógica ou com estruturas, - - - - decompose data into constituent parts, or extract information from data in various ways. - decompor os dados em partes constituintes ou extrair informações de dados de diversas maneiras. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Em seguida, você pode expedir na "forma" de um padrão por meio da Correspondência de Padrões. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Um registro de nome e sobrenome de uma pessoa - - - - A Discriminated Union of 3 different kinds of employees - Uma União Discriminada de 3 tipos diferentes de funcionários - - - - Count everyone underneath the employee in the management hierarchy, - Conta todos abaixo do funcionário na hierarquia de gerenciamento, - - - - including the employee. - incluindo o funcionário. - - - - Find all managers/executives named "Dave" who do not have any reports. - Localize todos os gerentes/executivos chamados "Dave" que não têm nenhum relatório. - - - - This uses the 'function' shorthand to as a lambda expression. - Isso usa a forma abreviada de 'function' como uma expressão lambda. - - - - [] matches an empty list. - [] corresponde a uma lista vazia. - - - - '_' is a wildcard pattern that matches anything. - '_' é um padrão de caractere curinga que coincide com qualquer coisa. - - - - This handles the "or else" case. - Isso identifica o caso "ou também". - - - - You can also use the shorthand function construct for pattern matching, - Você também pode usar o constructo da função abreviada para correspondência de padrões, - - - - which is useful when you're writing functions which make use of Partial Application. - que é útil quando você está gravando funções que fazem uso do Aplicativo Parcial. - - - - Define some more functions which parse with the helper function. - Defina mais algumas funções que são analisadas com a função auxiliar. - - - - Active Patterns are another powerful construct to use with pattern matching. - Padrões Ativos são outro constructo avançado para usar com correspondência de padrões. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Eles permitem particionar os dados de entrada em formulários personalizados, decompondo-os no local da chamada de correspondência de padrão. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Correspondência de Padrões por meio de palavra-chave 'function' e Padrões Ativos geralmente têm essa aparência. - - - - Call the printer with some different values to parse. - Chamar a impressora com alguns valores diferentes para analisar. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Os valores de opção são qualquer tipo de valor marcado com 'Algum' ou 'Nenhum'. - - - - They are used extensively in F# code to represent the cases where many other - Eles são usados extensivamente no código F# para representar os casos em que muitos outros - - - - languages would use null references. - idiomas usariam referências nulas. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - Primeiro, determine um CEP definido por meio de União Discriminada de Único Caso. - - - - Next, define a type where the ZipCode is optional. - Em seguida, defina um tipo em que o CEP é opcional. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Em seguida, defina um tipo de interface que representa um objeto para computar a zona de remessa para o CEP do cliente, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - determinadas implementações para os métodos abstratos 'getState' e 'getShippingZone'. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Em seguida, calcule uma zona de remessa para um cliente usando uma instância da calculadora. - - - - This uses combinators in the Option module to allow a functional pipeline for - Isso usa combinadores no módulo Option para permitir um pipeline funcional para - - - - transforming data with Optionals. - transformando dados com Opcionais. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Unidades de medida são uma forma de anotar tipos numéricos primitivos de um modo fortemente tipado. - - - - You can then perform type-safe arithmetic on these values. - Então, você pode executar a aritmética fortemente tipada nesses valores. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - Primeiro, abra uma coleção de nomes comuns de unidade - - - - Define a unitized constant - Definir uma constante unitizada - - - - Next, define a new unit type - Em seguida, defina um novo tipo de unidade - - - - Conversion factor mile to meter. - Fator de conversão de milha para metro. - - - - Define a unitized constant - Definir uma constante unitizada - - - - Compute metric-system constant - Computar a constante de sistema métrico - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Valores que usam Unidades de Medida podem ser usados exatamente como o tipo numérico primitivo para coisas como impressão. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Classes são uma maneira de definir novos tipos de objetos em F# e dão suporte a constructos padrão Orientados a objeto. - - - - They can have a variety of members (methods, properties, events, etc.) - Elas podem ter uma variedade de membros (métodos, propriedades, eventos, etc.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Para saber mais sobre Classes, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Para saber mais sobre Membros, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Uma classe de vetor bidimensional simples. - - - - The class's constructor is on the first line, - O construtor da classe está na primeira linha, - - - - and takes two arguments: dx and dy, both of type 'double'. - e leva dois argumentos: dx e dy, ambos do tipo 'duplo'. - - - - This internal field stores the length of the vector, computed when the - Este campo interno armazena o comprimento do vetor, computado quando o - - - - object is constructed - objeto é construído - - - - 'this' specifies a name for the object's self identifier. - 'this' especifica um nome para o identificador automático do objeto. - - - - In instance methods, it must appear before the member name. - Em métodos de instância, ele deve aparecer antes do nome do membro. - - - - This member is a method. The previous members were properties. - Esse membro é um método. Os membros anteriores eram propriedades. - - - - This is how you instantiate the Vector2D class. - É assim que você cria uma instância de classe Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Obter um novo objeto de vetor em escala, sem modificar o objeto original. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Classes genéricas permitem que os tipos sejam definidos em relação a um conjunto de parâmetros de tipo. - - - - In the following, 'T is the type parameter for the class. - No exemplo a seguir, 'T é o parâmetro de tipo para a classe. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Este campo interno armazena os estados em uma lista. - - - - Add a new element to the list of states. - Adicione um novo elemento à lista de estados. - - - - use the '<-' operator to mutate the value. - use o operador '<-' para modificar o valor. - - - - Get the entire list of historical states. - Obter a lista completa de estados históricos. - - - - Get the latest state. - Obter o estado mais recente. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Uma instância ' int' da classe de controlador do estado. Observe que o parâmetro de tipo é deduzido. - - - - Add a state - Adicionar um estado - - - - Interfaces are object types with only 'abstract' members. - As interfaces são tipos de objeto com apenas membros 'abstract'. - - - - Object types and object expressions can implement interfaces. - Tipos de objeto e expressões de objeto podem implementar interfaces. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Este é um tipo que implementa IDisposable. - - - - This is the implementation of IDisposable members. - Essa é a implementação de membros IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Este é um objeto que implementa IDisposable por meio de uma Expressão de Objeto - - - - Unlike other languages such as C# or Java, a new type definition is not needed - Diferentemente de outras linguagens, como C# ou Java, uma nova definição de tipo não é necessária - - - - to implement an interface. - para implementar uma interface. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - A biblioteca FSharp.Core define várias funções de processamento paralelo. Aqui - - - - you use some functions for parallel processing over arrays. - você usa algumas funções para processamento paralelo por matrizes. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Para saber mais, acesse: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - Primeiro, uma matriz de entradas. - - - - Next, define a functions that does some CPU intensive computation. - Em seguida, defina uma função que realiza computação com uso intensivo de CPU. - - - - Next, do a parallel map over a large input array. - Em seguida, faça um mapa paralelo por uma grande matriz de entrada. - - - - Next, print the results. - Em seguida, imprima os resultados. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Eventos são uma linguagem comum para programação em .NET, especialmente com aplicativos WinForms ou WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Para saber mais, acesse: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Primeiro, crie a instância do objeto Evento que consiste em ponto de assinatura (event.Publish) e gatilho de eventos (event.Trigger). - - - - Next, add handler to the event. - Em seguida, adicione o manipulador ao evento. - - - - Next, trigger the event. - Em seguida, dispare o evento. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Em seguida, crie uma instância do evento que segue a convenção padrão do .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Em seguida, adicione um manipulador para este novo evento. - - - - Next, trigger this event (note that sender argument should be set). - Em seguida, dispare esse evento (observe que o argumento do remetente deve ser definido). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf deleted file mode 100644 index 6bded45999..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Этот пример поможет узнать о различных элементах языка F#. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Чтобы выполнить код в F# Interactive, выделите фрагмент кода и нажмите ALT+ВВОД или щелкните правой кнопкой мыши - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - и выберите команду "Выполнение в интерактивном режиме". Интерактивное окно F# можно также открыть из меню "Вид". - - - - For more about F#, see: - Дополнительные сведения о F# см. по адресу: - - - - To see this tutorial in documentation form, see: - Чтобы просмотреть это руководство в виде документа, см.: - - - - To learn more about applied F# programming, use - Чтобы получить дополнительные сведения о прикладном программировании на языке F#, воспользуйтесь - - - - To install the Visual F# Power Tools, use - Чтобы установить Visual F# Power Tools, используйте - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - "Сервис" --> "Расширения и обновления" --> "В сети" и выполните поиск - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - Дополнительные шаблоны, которые можно использовать с F#, см. в разделе "Шаблоны в Интернете" в Visual Studio. - - - - 'New Project' --> 'Online Templates' - "Создать проект --> Шаблоны в Интернете" - - - - F# supports three kinds of comments: - F# поддерживает три типа комментариев: - - - - 1. Double-slash comments. These are used in most situations. - 1. Комментарии с двойной косой чертой. Они используются в большинстве ситуаций. - - - - 2. ML-style Block comments. These aren't used that often. - 2. Комментарии блоков в стиле ML. Они используются довольно редко. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Комментарии с тройной косой чертой. Они используются для документирования функций, типов и т. д. - - - - They will appear as text when you hover over something which is decorated with these comments. - При наведении указателя мыши на код, задекорированный этими комментариями, они отображаются в виде текста. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Кроме того, они поддерживают XML-комментарии в стиле .NET, делая возможным формирование справочной документации, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - а также позволяют редакторам (таким как Visual Studio) извлекать из них информацию. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - Открывайте пространства имен с помощью ключевого слова "open". - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Модуль представляет собой группирование кода F#, например значений, типов и значений функций. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Группирование кода в модулях помогает держать связанный код в одном месте и предотвратить конфликты имен в программе. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Подробности: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Это пример целого числа. - - - - This is a sample floating point number. - Это пример числа с плавающей запятой. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Это новое число, вычисленное с помощью некоторых арифметических операций. Числовые типы преобразуются с помощью - - - - functions 'int', 'double' and so on. - функций "int", "double" и т. п. - - - - This is a list of the numbers from 0 to 99. - Это список чисел от 0 до 99. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Это список всех кортежей, содержащих все числа от 0 до 99 и их квадраты. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Следующая строка выводит список, включающий в себя кортежи, используя "%A" для универсальной печати. - - - - This is a sample integer with a type annotation - Это пример целого числа с аннотацией типа - - - - Values in F# are immutable by default. They cannot be changed - В F# значения по умолчанию неизменяемы. Их невозможно изменить - - - - in the course of a program's execution unless explicitly marked as mutable. - во время выполнения программы, если только они явно не помечены как изменяемые. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Привязка значения к имени через let делает его неизменяемым. - - - - The second line of code fails to compile because 'number' is immutable and bound. - Сбой компиляции второй строки кода происходит, так как number неизменяем и привязан. - - - - Re-defining 'number' to be a different value is not allowed in F#. - Переопределение number в другое значение запрещено в F#. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Изменяемая привязка. Она необходима, чтобы иметь возможность изменять значение otherNumber. - - - - When mutating a value, use '<-' to assign a new value. - При изменении значения используйте "<-", чтобы присвоить новое значение. - - - - You could not use '=' here for this purpose since it is used for equality - Не удалось использовать "=" здесь и для этой цели, так как знак используется как оператор равенства. - - - - or other contexts such as 'let' or 'module' - или другие контексты, такие как "let" или "module" - - - - Much of F# programming consists of defining functions that transform input data to produce - Программирование на языке F# в основном заключается в определении функций, которые преобразуют входные данные и выдают - - - - useful results. - полезные результаты. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - let используется для определения функции. Эта функция принимает целочисленный аргумент и возвращает целое число. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - Круглые скобки необязательны для аргументов функции, если только не используется явная аннотация типа. - - - - Apply the function, naming the function return result using 'let'. - Применяйте функции, именуя возвращаемый функцией результат с помощью let. - - - - The variable type is inferred from the function return type. - Тип переменной определяется типом возвращаемого значения функции. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - В этой строке используется "%d" для вывода результата как целого числа. Это типобезопасно. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - Если бы result1 не принадлежал к типу int, при компиляции строки произошел бы сбой. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - При необходимости аннотируйте тип имени параметра при помощи "(argument:type)". Скобки обязательны. - - - - Conditionals use if/then/elid/elif/else. - В условных выражениях используются операторы if, then, elid, elif и else. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - Обратите внимание, что в F# используется синтаксис с отступами в виде пробелов, аналогично таким языкам, как Python. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Эта строка использует "%f" для вывода результата в виде числа с плавающей запятой. Как и в случае с "%d" выше, это типобезопасно. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Логические значения являются основными типами данных в F#. Ниже приведен ряд примеров логических типов данных и условной логики. - - - - To learn more, see: - Подробности: - - - - and - И - - - - Booleans values are 'true' and 'false'. - Логические значения — это true и false. - - - - Operators on booleans are 'not', '&&' and '||'. - Операторы для логических значений — not, && и ||. - - - - This line uses '%b'to print a boolean value. This is type-safe. - В этой строке "%b" используется для вывода логического значения. Это типобезопасно. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Строки являются основными типами данных в F#. Ниже приведено несколько примеров строк и основных действий с ними. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - В строках используются двойные кавычки. - - - - Strings can also use @ to create a verbatim string literal. - В строках также может использоваться @ для создания буквальных (verbatim) строковых литералов. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Будут пропускаться escape-символы, такие как "\", "\n", "\t" и т. д. - - - - String literals can also use triple-quotes. - В строковых литералах также используются тройные кавычки. - - - - String concatenation is normally done with the '+' operator. - Сцепление строк обычно выполняется при помощи оператора "+". - - - - This line uses '%s' to print a string value. This is type-safe. - В этой строке "%s" используется для вывода строкового значения. Это типобезопасно. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Подстроки используют нотацию индексатора. Эта строка кода извлекает первые семь символов в виде подстроки. - - - - Note that like many languages, Strings are zero-indexed in F#. - Учтите, что, как и во многих других языках, в F# строки индексируются от нуля. - - - - Tuples are simple combinations of data values into a combined value. - Кортеж — это простое сочетание значений данных в виде объединенного значения. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Простой кортеж целых чисел. - - - - A function that swaps the order of two values in a tuple. - Функция, меняющая местами два значения в кортеже. - - - - F# Type Inference will automatically generalize the function to have a generic type, - Определение типа F# будет автоматически назначать функции универсальный тип, - - - - meaning that it will work with any type. - что означает, что он будет работать с любым типом. - - - - A tuple consisting of an integer, a string, - Кортеж, состоящий из целого числа, строки - - - - and a double-precision floating point number. - и числа двойной точности с плавающей запятой. - - - - A simple tuple of integers with a type annotation. - Простой кортеж целых чисел с аннотацией типа. - - - - Type annotations for tuples use the * symbol to separate elements - Аннотации типов для кортежей используют символ * для разделения элементов. - - - - Tuples are normally objects, but they can also be represented as structs. - Кортежи обычно являются объектами, но они также могут быть представлены как структуры. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Они полноценно взаимодействуют со структурами в C# и Visual Basic.NET; тем не менее - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - кортежи структур нельзя явно преобразовать в кортежи объектов (часто называемые эталонными кортежами). - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Из-за этого произойдет сбой компиляции второй строки ниже. Раскомментируйте ее, чтобы увидеть, что произойдет. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Хотя кортежи-структуры и ссылочные кортежи невозможно преобразовывать неявно, - - - - you can explicitly convert via pattern matching, as demonstrated below. - вы можете явно преобразовывать их с помощью сопоставления шаблонов, как показано ниже. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - Операторы конвейера F# ("|>", "<|" и т. д.) и операторы объединения F# (">>", "<<") - - - - are used extensively when processing data. These operators are themselves functions - широко используются при обработке данных. Эти операторы сами по себе являются функциями, - - - - which make use of Partial Application. - использующими частичное применение. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Подробности об этих операторах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining. - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Подробности о частичном применении: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments. - - - - Squares a value. - Возводит значение в квадрат. - - - - Adds 1 to a value. - Добавляет 1 к значению. - - - - Tests if an integer value is odd via modulo. - Проверяет, является ли целое число нечетным по модулю. - - - - A list of 5 numbers. More on lists later. - Список из 5 чисел. Дополнительно о списках позднее. - - - - Given a list of integers, it filters out the even numbers, - При наличии списка целых чисел выполняет фильтрацию по номерам событий, - - - - squares the resulting odds, and adds 1 to the squared odds. - возводит полученные нечетные в квадрат, а затем добавляет 1 к нечетным, возведенным в квадрат. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - Более короткий способ записи squareOddValuesAndAddOne — вложить каждый - - - - sub-result into the function calls themselves. - вложенный результат в сами вызовы функции. - - - - This makes the function much shorter, but it's difficult to see the - Это позволяет значительно сократить функцию, но будет сложно увидеть - - - - order in which the data is processed. - порядок, в котором обрабатываются данные. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - Предпочтительный способ записи squareOddValuesAndAddOne — использовать операторы конвейера F#. - - - - This allows you to avoid creating intermediate results, but is much more readable - Это позволяет избежать создания промежуточных результатов, и при этом более удобно для чтения, - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - чем вложение вызовов функций, таких как squareOddValuesAndAddOneNested. - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - squareOddValuesAndAddOnePipeline можно сократить, переместив второй вызов List.map - - - - into the first, using a Lambda Function. - в первый, используя лямбда-функцию. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Учтите, что конвейеры также используются внутри лямбда-функции. Операторы конвейера F# - - - - can be used for single values as well. This makes them very powerful for processing data. - можно также использовать для отдельных значений. Это делает их очень эффективными при обработке данных. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - И наконец, можно исключить необходимость явного принятия значений в качестве параметра при помощи ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - для объединения двух основных операций: фильтрации четных чисел, а затем возведения в квадрат и добавления единицы. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Аналогично, часть "fun x -> ..." лямбда-выражения также не требуется, так как x просто - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - определяется в этой области действия, чтобы его можно было передать в функциональный конвейер. Таким образом, здесь также можно - - - - there as well. - использовать ">>". - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - Результат squareOddValuesAndAddOneComposition сам по себе является другой функцией, которая принимает - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - список целых чисел в качестве входных данных. Если squareOddValuesAndAddOneComposition выполняется со списком - - - - of integers, you'll notice that it produces the same results as previous functions. - целых чисел, вы заметите, что результаты соответствуют результатам предыдущих функций. - - - - This is using what is known as function composition. This is possible because functions in F# - Используется так называемая композиция функций. Это возможно, так как функции в F# - - - - use Partial Application and the input and output types of each data processing operation match - используют частичное применение, а входные и выходные типы каждой операции обработки данных соответствуют - - - - the signatures of the functions we're using. - сигнатурам функций, которые мы используем. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Списки — это упорядоченные, неизменяемые однонаправленные списки. При вычислении они являются безотложными. - - - - This module shows various ways to generate lists and process lists with some functions - Этот модуль демонстрирует различные способы создания и обработки списков при помощи некоторых функций - - - - in the 'List' module in the F# Core Library. - в модуле List основной библиотеки F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/lists. - - - - Lists are defined using [ ... ]. This is an empty list. - Списки определяются с помощью [ ... ]. Это пустой список. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Это — список с тремя элементами. Символ ";" используется для разделения элементов в одной строке. - - - - You can also separate elements by placing them on their own lines. - Элементы можно также разделить, поместив их в отдельные строки. - - - - This is a list of integers from 1 to 1000 - Это список целых чисел от 1 до 1000. - - - - Lists can also be generated by computations. This is a list containing - Списки также могут создаваться в результате вычислений. Это список, содержащий - - - - all the days of the year. - все дни года. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - Вывод первых пяти элементов daysList при помощи List.take. - - - - Computations can include conditionals. This is a list containing the tuples - Вычисления могут включать условные выражения. Это список, содержащий кортежи - - - - which are the coordinates of the black squares on a chess board. - являющиеся координатами черных квадратов на шахматной доске. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Списки можно преобразовывать с помощью List.map и других методов объединения, применяемых в функциональном программировании. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Это определение создает новый список путем возведения в квадрат чисел из numberList с помощью конвейера. - - - - operator to pass an argument to List.map. - оператор для передачи аргумента в List.map. - - - - There are many other list combinations. The following computes the sum of the squares of the - Существует множество других сочетаний списков. Приведенный ниже код вычисляет сумму квадратов. - - - - numbers divisible by 3. - числа, кратные 3. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Массивы — это изменяемые коллекции фиксированного размера, содержащие элементы одного типа. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Хотя они и похожи на списки (поддерживают перечисление и включают схожие методы объединения для обработки данных), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - они, как правило, быстрее и поддерживают быстрый случайный доступ. С другой стороны, они менее безопасны, так как изменяемы. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/arrays. - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Это — пустой массив. Обратите внимание, что синтаксис похож на синтаксис списков, но используются квадратные скобки "[| ... |]". - - - - Arrays are specified using the same range of constructs as lists. - Массивы задаются с помощью того же диапазона конструкций в виде списков. - - - - This is an array of numbers from 1 to 1000. - Это массив чисел от 1 до 1000. - - - - This is an array containing only the words "hello" and "world". - Это — массив, содержащий только слова "hello" и "world". - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Это — массив, инициализируемый по индексу и содержащий четные числа от 0 до 2000. - - - - Sub-arrays are extracted using slicing notation. - Подмассивы извлекаются с помощью нотации выделения фрагмента. - - - - You can loop over arrays and lists using 'for' loops. - Можно выполнять перебор массивов и списков при помощи циклов for. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Изменить содержимое элемента массива можно с помощью оператора присваивания в виде стрелки влево. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Подробности об этом операторе: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/values/index#mutable-variables. - - - - You can transform arrays using 'Array.map' and other functional programming operations. - Вы можете преобразовывать массивы при помощи Array.map и других операций функционального программирования. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Следующий фрагмент вычисляет сумму длин слов, которые начинаются с буквы "h". - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Последовательности — это логические серии элементов одного типа. Это — более общий тип, чем списки и массивы. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Последовательности вычисляются по требованию и заново вычисляются при каждом их переборе. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - Последовательность F# является псевдонимом для .NET System.Collections.Generic.IEnumerable<'T>. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Функции обработки последовательностей можно также применять к спискам и массивам. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Это пустая последовательность. - - - - This a sequence of values. - Это последовательность значений. - - - - This is an on-demand sequence from 1 to 1000. - Это последовательность по требованию от 1 до 1000. - - - - This is a sequence producing the words "hello" and "world" - Это последовательность, создающая слова hello и world. - - - - This sequence producing the even numbers up to 2000. - Эта последовательность выдает целые числа до 2000. - - - - This is an infinite sequence which is a random walk. - Это бесконечная последовательность, представляющая случайное блуждание. - - - - This example uses yield! to return each element of a subsequence. - В этом примере используется оператор yield! для получения каждого элемента подпоследовательности. - - - - This example shows the first 100 elements of the random walk. - В этом примере показаны первые 100 элементов случайного блуждания. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Рекурсивные функции могут вызывать сами себя. В F# функции являются рекурсивными только - - - - when declared using 'let rec'. - при объявлении с помощью let rec. - - - - Recursion is the preferred way to process sequences or collections in F#. - Рекурсия — это предпочтительный способ обработки последовательностей или коллекций в F#. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions. - - - - This example shows a recursive function that computes the factorial of an - В этом примере показана рекурсивная функция, вычисляющая факториал - - - - integer. It uses 'let rec' to define a recursive function. - целое число. В нем используется "let rec" для определения рекурсивной функции. - - - - Computes the greatest common factor of two integers. - Вычисляет наибольший общий делитель двух целых чисел. - - - - Since all of the recursive calls are tail calls, - Так как все рекурсивные вызовы являются хвостовыми вызовами, - - - - the compiler will turn the function into a loop, - компилятор сделает из функции цикл, - - - - which improves performance and reduces memory consumption. - что повысит производительность и снизит потребление памяти. - - - - This example computes the sum of a list of integers using recursion. - Этот пример вычисляет сумму списка целых чисел при помощи рекурсии. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - При этом sumList становится функцией с хвостовой рекурсией, использующей вспомогательную функцию с аккумулятором результатов. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Вызывается вспомогательная функция хвостовой рекурсии, предоставляющая "0" в качестве аккумулятора начальных значений. - - - - An approach like this is common in F#. - Подобный подход широко распространен в F#. - - - - Records are an aggregate of named values, with optional members (such as methods). - Записи являются агрегатами именованных значений с необязательными элементами (такими как методы). - - - - They are immutable and have structural equality semantics. - Они являются неизменяемыми и обладают семантикой структурного равенства. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/records. - - - - This example shows how to define a new record type. - В этом примере показано, как определить новый тип записи. - - - - This example shows how to instantiate a record type. - В этом примере показано создание экземпляра типа записи. - - - - You can also do this on the same line with ';' separators. - Это также можно сделать в одной строке при помощи разделителя ";", - - - - This example shows how to use "copy-and-update" on record values. It creates - В этом примере показано, как использовать функцию "копировать и обновить" применительно к значениям записей. В нем создается - - - - a new record value that is a copy of contact1, but has different values for - новое значение записи, которое является копией contact1, но имеет другие значения для - - - - the 'Phone' and 'Verified' fields. - поля Phone и Verified. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions. - - - - This example shows how to write a function that processes a record value. - В этом примере показано, как создать функцию, обрабатывающую значение записи. - - - - It converts a 'ContactCard' object to a string. - Он преобразует объект ContactCard в строку. - - - - This is an example of a Record with a member. - Это — пример записи с элементом. - - - - Members can implement object-oriented members. - Элементы могут реализовать объектно-ориентированные элементы. - - - - Members are accessed via the '.' operator on an instantiated type. - Доступ к элементам осуществляется через оператор "." для экземпляра типа. - - - - Records can also be represented as structs via the 'Struct' attribute. - Записи также могут быть представлены как структуры при помощи атрибута Struct. - - - - This is helpful in situations where the performance of structs outweighs - Это удобно в ситуациях, когда производительность структур важнее - - - - the flexibility of reference types. - гибкости ссылочных типов. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Размеченные объединения (DU) — это значения, которые могут состоять из нескольких именованных форм или ветвей. - - - - Data stored in DUs can be one of several distinct values. - Данные, хранимые в размеченных объединениях, могут являться одними из нескольких различных значений. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/discriminated-unions. - - - - The following represents the suit of a playing card. - Следующий код представляет масть игральной карты. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Размеченное объединение также может использоваться для представления ранга игральной карты. - - - - Represents the rank of cards 2 .. 10 - Представляет достоинство карт 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - Кроме того, размеченные объединения могут реализовать объектно-ориентированные элементы. - - - - This is a record type that combines a Suit and a Rank. - Это тип записи, объединяющий масть и достоинство. - - - - It's common to use both Records and Disciminated Unions when representing data. - Как правило, при представлении данных используются как записи, так и размеченные объединения. - - - - This computes a list representing all the cards in the deck. - Вычисляется список, представляющий все карты в колоде. - - - - This example converts a 'Card' object to a string. - В этом примере объект Card преобразуется в строку. - - - - This example prints all the cards in a playing deck. - В этом примере печатаются все карты колоды. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Размеченные объединения с одной ветвью часто используются для моделирования доменов. Это более типобезопасно, чем использование - - - - over primitive types such as strings and ints. - примитивных типов, таких как строки и целые числа. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Размеченные объединения с одной ветвью нельзя неявно преобразовать в тип или из типа, оболочкой которого они служат. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Например, функция, которая принимает адрес, не может принять в качестве входных данных строку - - - - or vive/versa. - или наоборот. - - - - You can easily instantiate a single-case DU as follows. - Можно легко создать экземпляр размеченного объединения с одной ветвью следующим образом. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Если вам требуется значение, вы можете распаковать базовое значение при помощи простой функции. - - - - Printing single-case DUs is simple with unwrapping functions. - Вывод размеченных объединений с одной ветвью не представляет сложности при использовании функций распаковки. - - - - Disciminated Unions also support recursive definitions. - Размеченные объединения также поддерживают рекурсивные определения. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Это представляет двоичное дерево поиска, в котором одна ветвь является пустым деревом, - - - - and the other being a Node with a value and two subtrees. - а другая — узлом со значением и двумя поддеревьями. - - - - Check if an item exists in the binary search tree. - Проверка наличия элемента в двоичном дереве поиска. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Рекурсивный поиск при помощи сопоставления шаблонов. Возвращает значение True, если существует; в противном случае — значение False. - - - - Check the left subtree. - Проверка левого поддерева. - - - - Check the right subtree. - Проверка правого поддерева. - - - - Inserts an item in the Binary Search Tree. - Вставляет элемент в двоичное дерево поиска. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Находит место для рекурсивной вставки при помощи сопоставления шаблонов, а затем вставляет новый узел. - - - - If the item is already present, it does not insert anything. - Если элемент уже существует, ничего не вставляется. - - - - No need to insert, it already exists; return the node. - Нет необходимости вставки, так как она уже существует; возврат узла. - - - - Call into left subtree. - Вызов левого поддерева. - - - - Call into right subtree. - Вызов правого поддерева. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Размеченные объединения также могут быть представлены как структуры при помощи атрибута Struct. - - - - This is helpful in situations where the performance of structs outweighs - Это удобно в ситуациях, когда производительность структур важнее - - - - the flexibility of reference types. - гибкости ссылочных типов. - - - - However, there are two important things to know when doing this: - Но при этом следует помнить о следующих двух важных вещах: - - - - 1. A struct DU cannot be recursively-defined. - 1. Размеченное объединение структуры не может определяться рекурсивно. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Каждой из ветвей размеченного объединения структуры должны быть присвоены уникальные названия. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Сопоставление шаблонов — это возможность F#, которая позволяет использовать шаблоны, - - - - which are a way to compare data with a logical structure or structures, - что представляет способ сравнения данных с логической структурой или структурами, - - - - decompose data into constituent parts, or extract information from data in various ways. - разложение данных на составные части или извлечение информации из данных различными способами. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Затем можно передать "форму" шаблона при помощи сопоставления шаблонов. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/pattern-matching. - - - - A record for a person's first and last name - Запись с именем и фамилией человека - - - - A Discriminated Union of 3 different kinds of employees - Размеченное соединение трех разных типов сотрудников - - - - Count everyone underneath the employee in the management hierarchy, - Подсчет всех сотрудников на уровнях иерархии управления, следующих за этим сотрудником, - - - - including the employee. - включая этого сотрудника. - - - - Find all managers/executives named "Dave" who do not have any reports. - Поиск всех менеджеров и руководителей с именем Dave, не имеющих отчетов. - - - - This uses the 'function' shorthand to as a lambda expression. - При этом используется сокращение функции до лямбда-выражения. - - - - [] matches an empty list. - [] соответствует пустому списку. - - - - '_' is a wildcard pattern that matches anything. - "_" — подстановочный знак, обозначающий любой набор символов. - - - - This handles the "or else" case. - Обрабатывается ветвь "or else". - - - - You can also use the shorthand function construct for pattern matching, - Для сопоставления шаблонов можно также использовать краткую форму конструкции функции, - - - - which is useful when you're writing functions which make use of Partial Application. - что удобно при написании функций, использующих частичное применение. - - - - Define some more functions which parse with the helper function. - Определение некоторых других функций, которые выполняют анализ при помощи вспомогательной функции. - - - - Active Patterns are another powerful construct to use with pattern matching. - Активные шаблоны — это еще одна эффективная конструкция, используемая при сопоставлении шаблонов. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Они позволяют сегментировать входные данные в настраиваемые формы с декомпозицией в месте вызова сопоставления шаблонов. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/active-patterns. - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - Сопоставление шаблонов по ключевому слову function и активным шаблонам часто выглядит следующим образом. - - - - Call the printer with some different values to parse. - Вызов принтера с несколькими разными значениями для анализа. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Опциональные значения - это любой тип значений, отмеченных ключевым словом Some или None. - - - - They are used extensively in F# code to represent the cases where many other - Они широко используются в коде F# для представления случаев, когда во многих - - - - languages would use null references. - других языках используются пустые ссылки. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/options. - - - - First, define a zipcode defined via Single-case Discriminated Union. - Во-первых, определите индекс при помощи размеченного объединения с одной ветвью. - - - - Next, define a type where the ZipCode is optional. - Далее определите тип, в котором ZipCode является необязательным. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Далее определите тип интерфейса, представляющий объект для вычисления зоны доставки по почтовому индексу заказчика, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - при заданных реализациях абстрактных методов getState и getShippingZone. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Затем определите зону доставки для заказчика при помощи экземпляра калькулятора. - - - - This uses combinators in the Option module to allow a functional pipeline for - При этом используются методы объединения в модуле Option, чтобы обеспечить работу функционального конвейера для - - - - transforming data with Optionals. - преобразования данных с помощью Optionals. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Единицы измерения — это способ аннотации примитивных числовых типов типобезопасным способом. - - - - You can then perform type-safe arithmetic on these values. - Затем с этими значениями можно выполнять типобезопасные арифметические действия. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/units-of-measure. - - - - First, open a collection of common unit names - Сначала откройте коллекцию стандартных названий единиц измерения. - - - - Define a unitized constant - Определите константу с единицей измерения. - - - - Next, define a new unit type - Далее определите новый тип единицы. - - - - Conversion factor mile to meter. - Коэффициент пересчета миль в метры. - - - - Define a unitized constant - Определите константу с единицей измерения. - - - - Compute metric-system constant - Вычислите константу в метрической системе. - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Значения, использующие единицы измерения, можно применять как примитивные числовые типы для таких действий, как печать. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Классы — это способ определения новых типов объектов в F#. Они поддерживают стандартные объектно-ориентированные конструкции. - - - - They can have a variety of members (methods, properties, events, etc.) - Они могут содержать различные элементы (методы, свойства, события и т. д.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Подробности о классах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/classes. - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Подробности об элементах: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/members. - - - - A simple two-dimensional Vector class. - Простой двухмерный класс Vector. - - - - The class's constructor is on the first line, - Конструктор класса находится в первой строке - - - - and takes two arguments: dx and dy, both of type 'double'. - и принимает два аргумента: dx и dy, оба имеют тип double. - - - - This internal field stores the length of the vector, computed when the - В этом внутреннем поле хранится длина вектора, вычисляемая, когда - - - - object is constructed - объект создается - - - - 'this' specifies a name for the object's self identifier. - Ключевое слово this задает имя идентификатора самого объекта. - - - - In instance methods, it must appear before the member name. - В методах экземпляров оно должно находиться перед именем элемента. - - - - This member is a method. The previous members were properties. - Этот элемент является методом. Предыдущие элементы были свойствами. - - - - This is how you instantiate the Vector2D class. - Вот как выполняется создание экземпляра класса Vector2D. - - - - Get a new scaled vector object, without modifying the original object. - Получение нового объекта масштабируемого вектора без изменения исходного объекта. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Универсальные классы позволяют определять типы с набором параметров типа. - - - - In the following, 'T is the type parameter for the class. - В следующем примере 'T — это параметр типа для класса. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/generics/. - - - - This internal field store the states in a list. - В этом внутреннем поле хранятся состояния в списке. - - - - Add a new element to the list of states. - Добавление нового элемента в список состояний. - - - - use the '<-' operator to mutate the value. - Оператор "<-" служит для изменения значения. - - - - Get the entire list of historical states. - Получение полного списка исторических состояний. - - - - Get the latest state. - Получение последнего состояния. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Экземпляр int класса отслеживания состояний. Обратите внимание, что параметр типа подразумевается. - - - - Add a state - Добавление состояния - - - - Interfaces are object types with only 'abstract' members. - Интерфейсы — это типы объектов, которые имеют только абстрактные члены. - - - - Object types and object expressions can implement interfaces. - Типы объектов и выражения объектов могут реализовывать интерфейсы. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/interfaces. - - - - This is a type that implements IDisposable. - Это — тип, который реализует интерфейс IDisposable. - - - - This is the implementation of IDisposable members. - Это — реализация элементов интерфейса IDisposable. - - - - This is an object that implements IDisposable via an Object Expression - Это — объект, реализующий интерфейс IDisposable через выражение объекта. - - - - Unlike other languages such as C# or Java, a new type definition is not needed - В отличие от других языков, таких как C# или Java, новое определение типа не требуется - - - - to implement an interface. - для реализации интерфейса. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - В библиотеке FSharp.Core определен ряд функций параллельной обработки. Здесь - - - - you use some functions for parallel processing over arrays. - вы используете определенные функции для параллельной обработки массивов. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Подробности: https://msdn.microsoft.com/ru-ru/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D. - - - - First, an array of inputs. - Сначала — массив входных данных. - - - - Next, define a functions that does some CPU intensive computation. - Далее определите функции, выполняющие ряд вычислений с интенсивным использованием ЦП. - - - - Next, do a parallel map over a large input array. - Затем выполните параллельное сопоставление по большому входному массиву. - - - - Next, print the results. - Далее напечатайте результаты. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - События представляют собой стандартные идиомы программирования .NET, особенно для приложений WinForms или WPF. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Подробности: https://docs.microsoft.com/ru-ru/dotnet/articles/fsharp/language-reference/members/events. - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - Сначала создайте экземпляр объекта Event, состоящий из точки подписки (event.Publish) и триггера события (event.Trigger). - - - - Next, add handler to the event. - Затем добавьте обработчик для события. - - - - Next, trigger the event. - Затем активируйте событие. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Затем создайте экземпляр события в соответствии со стандартным соглашением .NET: (sender, EventArgs). - - - - Next, add a handler for this new event. - Затем добавьте обработчик для этого нового события. - - - - Next, trigger this event (note that sender argument should be set). - Затем вызовите событие (обратите внимание на то, что аргумент sender должен быть задан). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf deleted file mode 100644 index 2fcd8d0f2c..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - Bu örnek, size F# dilinin öğelerini gösterir. - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Kodu F# Etkileşimli’de yürütmek için kodun bir bölümünü vurgulayın ve Alt-Enter'a basın veya sağ tıklatın - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - ve "Etkileşimlide Yürüt" seçeneğini belirleyin. F# Etkileşimli Penceresini "Görünüm" menüsünden açabilirsiniz. - - - - For more about F#, see: - F# hakkında daha fazla bilgi için bkz: - - - - To see this tutorial in documentation form, see: - Bu öğreticiyi belge biçiminde görmek için, bkz: - - - - To learn more about applied F# programming, use - Uygulamalı F# programlama hakkında daha fazla bilgi edinmek için şunu kullanın: - - - - To install the Visual F# Power Tools, use - Visual F# Power Tools'u yüklemek için - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - 'Araçlar' --> 'Uzantılar ve Güncelleştirmeler' --> `Çevrimiçi` seçeneğini kullanın ve arama yapın - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - F# ile kullanabileceğiniz ek şablonlar için Visual Studio'daki 'Çevrimiçi Şablonlar'a bakın, - - - - 'New Project' --> 'Online Templates' - 'Yeni Proje' --> 'Çevrimiçi Şablonlar' - - - - F# supports three kinds of comments: - F# üç açıklama türünü destekler: - - - - 1. Double-slash comments. These are used in most situations. - 1. Çift eğik çizgili açıklamalar. Çoğu durumda bunlar kullanılır. - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML stili Blok açıklamaları. Bunlar sık kullanılmaz. - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. Üç eğik çizgili açıklamalar. Bunlar işlevleri, türleri vb. belgelemek için kullanılır. - - - - They will appear as text when you hover over something which is decorated with these comments. - Bu açıklamalarla belirlenmiş bir öğenin üzerine geldiğinizde, açıklamalar metin olarak görüntülenir. - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - Ayrıca başvuru belgeleri oluşturmanıza olanak sağlayan .NET stili XML açıklamalarını destekler, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - bilgi ayıklamak için düzenleyicilerin (örneğin Visual Studio) kullanılmasına da olanak sağlar. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 'Open' anahtar sözcüğünü kullanarak ad alanlarını açın. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - Modül; değer, tür ve işlev değeri gibi bir F# kodu gruplandırmasıdır. - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - Kodu modüller içinde gruplandırmak ilgili kodların bir arada bulunmasını sağlar ve programınızda ad çakışmalarını önlemeye yardımcı olur. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - Bu, örnek bir tamsayıdır. - - - - This is a sample floating point number. - Bu, örnek bir kayan noktalı sayıdır. - - - - This computed a new number by some arithmetic. Numeric types are converted using - Bu, aritmetik kullanarak yeni bir sayı hesaplar. Sayısal türler - - - - functions 'int', 'double' and so on. - 'int', 'double' vb. işlevler kullanılarak dönüştürülür. - - - - This is a list of the numbers from 0 to 99. - Bu, 0'dan 99'a kadar olan sayıların listesidir. - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - Bu, 0'dan 99'a kadar olan sayıları ve bunların karelerini içeren bir listedir. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - Sonraki satır genel yazdırma için '%A' kullanarak demetleri içeren bir liste yazdırır. - - - - This is a sample integer with a type annotation - Bu tür açıklaması olan örnek bir tamsayıdır - - - - Values in F# are immutable by default. They cannot be changed - F# değerleri varsayılan olarak sabittir. Bu değerler - - - - in the course of a program's execution unless explicitly marked as mutable. - değiştirilebilir olarak açıkça işaretlenmediği sürece bir programın yürütülmesi sırasında değiştirilemez. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - Bir değeri 'let' ile bir ada bağlamak, değeri sabit yapar. - - - - The second line of code fails to compile because 'number' is immutable and bound. - 'Number' değişmez ve bağlı olduğu için ikinci kod satırı derlenemiyor. - - - - Re-defining 'number' to be a different value is not allowed in F#. - F# içinde 'number' değerini farklı bir değer olarak yeniden tanımlamaya izin verilmez. - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - Değiştirilebilir bir bağlama. Bu, 'otherNumber' değerini değiştirmek için gereklidir. - - - - When mutating a value, use '<-' to assign a new value. - Bir değeri değiştirirken, yeni bir değer atamak için '<-' kullanın. - - - - You could not use '=' here for this purpose since it is used for equality - Eşitlik amacıyla kullanıldığından, burada '=' kullanamazsınız - - - - or other contexts such as 'let' or 'module' - veya 'let' ya da 'module' gibi diğer bağlamlar - - - - Much of F# programming consists of defining functions that transform input data to produce - F# programlama çoğunlukla, giriş verilerini kullanışlı sonuçlara dönüştüren işlevleri - - - - useful results. - tanımlamaktan oluşur. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - Bir işlevi tanımlamak için 'let' kullanın. Bu, bir tamsayı bağımsız değişkenini kabul ederek bir tamsayı döndürür. - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - İşlev bağımsız değişkenlerinde ayraçlar, açık tür ek açıklaması kullanılan durumlar dışında isteğe bağlıdır. - - - - Apply the function, naming the function return result using 'let'. - İşlev döndürme sonucunu 'let' ile adlandırarak işlevi uygulayın. - - - - The variable type is inferred from the function return type. - Değişken türü, işlev dönüş türü olarak algılanır. - - - - This line uses '%d' to print the result as an integer. This is type-safe. - Bu satır, sonucu bir tamsayı olarak yazdırmak için '%d' kullanır. Tür kullanımıyla uyumludur. - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 'Result1' 'int' türünde değilse, satır derleme işlemi başarısız olur. - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - Gerekli olduğunda, '(argument:type)' kullanarak parametre adı türü için ek açıklama girin. Ayraçlar gereklidir. - - - - Conditionals use if/then/elid/elif/else. - Koşullu deyimlerde if/then/elid/elif/else kullanılır. - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - F#'ın, Python gibi diller ile benzer şekilde, boşluk girintisini tanıyan söz dizimi kullandığını unutmayın. - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - Bu satır, sonucu kayan noktalı sayı olarak yazdırmak için '%f' kullanır. Yukarıdaki '%d' gibi bu da tür kullanımıyla uyumludur. - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - Boole değerleri, F# içindeki temel veri türleridir. Aşağıda bazı Boole ve koşullu mantık örnekleri verilmiştir. - - - - To learn more, see: - Daha fazla bilgi için bkz. - - - - and - ve - - - - Booleans values are 'true' and 'false'. - Boole değerleri şunlardır: 'true' ve 'false'. - - - - Operators on booleans are 'not', '&&' and '||'. - Boole değerleri üzerindeki işleçler: 'not', '&&' ve '||'. - - - - This line uses '%b'to print a boolean value. This is type-safe. - Bu satır, bir boole değeri yazdırmak için '%b' kullanır. Tür kullanımıyla uyumludur. - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - Dizeler, F# içindeki temel veri türleridir. Aşağıda bazı Dizeler ve temel dize işleme örnekleri verilmiştir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - Dizeler çift tırnak kullanır. - - - - Strings can also use @ to create a verbatim string literal. - Dizeler ayrıca, tam harf dizisi oluşturmak için @ kullanabilir. - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - Bu; '\', '\n', '\t' vb. kaçış karakterlerini yoksayar. - - - - String literals can also use triple-quotes. - Harf dizileri ayrıca üçlü tırnak da kullanabilir. - - - - String concatenation is normally done with the '+' operator. - Dizi bitiştirme normalde '+' işleci ile yapılır. - - - - This line uses '%s' to print a string value. This is type-safe. - Bu satır, bir dize değeri yazdırmak için '%s' kullanır. Tür kullanımıyla uyumludur. - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - Alt dizeler dizin oluşturucu gösterimini kullanır. Bu satır, ilk 7 karakteri alt dize olarak ayıklar. - - - - Note that like many languages, Strings are zero-indexed in F#. - Birçok dilde olduğu gibi F#'ta da Dizeler sıfır dizinlidir. - - - - Tuples are simple combinations of data values into a combined value. - Demetler, veri değerlerinin birleşik bir değer halindeki basit bileşimleridir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - Basit bir tamsayı demeti. - - - - A function that swaps the order of two values in a tuple. - Bir demetteki iki değerin sırasını değiştiren bir işlev. - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# Tür Çıkarımı, işlevi genel türe sahip olacak şekilde otomatik olarak genelleştirir, - - - - meaning that it will work with any type. - yani, herhangi bir tür ile çalışabilir. - - - - A tuple consisting of an integer, a string, - Bir tamsayı, bir dize ve bir çift duyarlıklı kayan nokta sayısından - - - - and a double-precision floating point number. - oluşan bir demet. - - - - A simple tuple of integers with a type annotation. - Tür ek açıklaması içeren basit bir tamsayı tanımlama grubu. - - - - Type annotations for tuples use the * symbol to separate elements - Tanımlama grupları için tür ek açıklamaları öğeleri ayırmak için * sembolünü kullanır - - - - Tuples are normally objects, but they can also be represented as structs. - Demetler, normalde nesnedir ancak yapı olarak da gösterilebilir. - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - Bunlar C# ve Visual Basic.NET ile tamamen uyumlu olarak birlikte çalışır ancak - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - yapı demetleri, nesne demetleri ile (genellikle başvuru demetleri olarak adlandırılır) örtük olarak dönüştürülebilir değildir. - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - Bu nedenle aşağıdaki ikinci satırı derleme işlemi başarısız olacak. Ne olacağını görmek için açıklamayı kaldırın. - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - Yapı demetleri ile başvuru demetleri arasında örtük dönüştürme gerçekleştiremezsiniz, ancak - - - - you can explicitly convert via pattern matching, as demonstrated below. - aşağıda gösterildiği gibi, desen eşleştirme aracılığıyla açık dönüştürme gerçekleştirebilirsiniz. - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# kanal işleçleri ('|>', '<|', vb.) ve F# birleştirme işleçleri ('>>', '<<') - - - - are used extensively when processing data. These operators are themselves functions - veriler işlenirken yaygın olarak kullanılır. Bu işleçler, başı başına birer işlevdir ve - - - - which make use of Partial Application. - Kısmi Uygulamadan yararlanır. - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - Bu işleçler hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - Kısmi Uygulama hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - Bir değerin karesini alır. - - - - Adds 1 to a value. - Bir değere 1 ekler. - - - - Tests if an integer value is odd via modulo. - Mod aracılığıyla bir tamsayı değerinin tek sayı olup olmadığını test eder. - - - - A list of 5 numbers. More on lists later. - 5 numaradan oluşan bir liste. Listeler hakkında daha fazla bilgiyi ilerleyen bölümlerde bulabilirsiniz. - - - - Given a list of integers, it filters out the even numbers, - Bir tamsayı listesinde, çift sayıları filtreler, - - - - squares the resulting odds, and adds 1 to the squared odds. - kalan tek sayıların karesini alır ve karesi alınan tek sayılara 1 ekler. - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 'squareOddValuesAndAddOne' yazmanın daha kısa bir yolu, her bir - - - - sub-result into the function calls themselves. - alt sonucu işlev hücrelerinin kendisinde iç içe yerleştirmektir. - - - - This makes the function much shorter, but it's difficult to see the - Bu, işlevi çok daha kısa hale getirir ancak - - - - order in which the data is processed. - verilerin işlenme sırasını görmek zordur. - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 'squareOddValuesAndAddOne' yazmanın tercih edilen bir yolu, F# kanal işleçlerini kullanmaktır. - - - - This allows you to avoid creating intermediate results, but is much more readable - Bu, ara sonuçlar oluşturmaktan kaçınmanızı sağlar ancak - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 'squareOddValuesAndAddOneNested' gibi iç içe geçmiş işlev çağrılarından daha okunaklıdır - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 'squareOddValuesAndAddOnePipeline' öğesini kısaltmak için ikinci `List.map` çağrısını - - - - into the first, using a Lambda Function. - bir Lambda İşlevi kullanarak birinciye taşıyabilirsiniz. - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - Komut zincirleri, lambda işlevi içinde de kullanılıyor. F# kanal işleçleri - - - - can be used for single values as well. This makes them very powerful for processing data. - tek değerler için de kullanılabilir. Bu, işleçlerin veri işleme işlevlerini geliştirir. - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - Son olarak, şu iki temel işlemi oluşturmak için '>>' kullanarak 'values' öğesini parametre olarak - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - açıkça alma ihtiyacını ortadan kaldırabilirsiniz: çift sayıları filtreleme ve ardından karelerini alıp bir ekleme. - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - Benzer şekilde, 'x' bir işlevsel komut zincirine geçirilmek için bu kapsamda tanımlandığından - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - lambda ifadesindeki 'fun x -> ...' bölümü de gerekli değildir. Bu nedenle, '>>' - - - - there as well. - burada da kullanılabilir. - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition' sonucunun kendisi, giriş olarak bir tamsayı listesi alan - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - diğer bir işlevdir. 'squareOddValuesAndAddOneComposition' öğesini bir tamsayı listesi ile - - - - of integers, you'll notice that it produces the same results as previous functions. - yürütürseniz, önceki işlevler ile aynı sonuçları ürettiğini fark görürsünüz. - - - - This is using what is known as function composition. This is possible because functions in F# - Bu, işlev kompozisyonu olarak bilinen işlemi kullanır. Bu, F# içindeki işlevler Kısmi Uygulama kullandığı - - - - use Partial Application and the input and output types of each data processing operation match - ve her bir bilgi işlem işleminin giriş ve çıkış türleri kullandığımız işlevlerin imzaları ile eşleştiği için - - - - the signatures of the functions we're using. - mümkün olmaktadır. - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - Listeler sıralı, sabit ve tek bağlantılıdır. Bu listelerde erken değerlendirme yapılır. - - - - This module shows various ways to generate lists and process lists with some functions - Bu modül, liste oluşturmanın çeşitli yollarını gösterir ve listeleri F# Core Kitaplığı'ndaki - - - - in the 'List' module in the F# Core Library. - 'List' modülünde yer alan işlevlerle işler. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - Listeler [ ... ] kullanılarak tanımlanır. Bu boş bir listedir. - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - Bu, 3 öğeden oluşan bir listedir. ';' aynı satırdaki öğeleri ayırmak için kullanılır. - - - - You can also separate elements by placing them on their own lines. - Öğeleri, ayrı satırlara yerleştirerek de ayırabilirsiniz. - - - - This is a list of integers from 1 to 1000 - Bu, 1'den 1000'e kadar olan tamsayıların listesidir - - - - Lists can also be generated by computations. This is a list containing - Listeler ayrıca hesaplamalar aracılığıyla da üretilebilir. Bu, yılın tüm - - - - all the days of the year. - günlerini içeren bir listedir. - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 'List.take' kullanarak 'daysList'in ilk 5 öğesini yazdırın. - - - - Computations can include conditionals. This is a list containing the tuples - Hesaplamalar, koşullu deyimler içerebilir. Bu, bir satranç tahtasındaki siyah karelerin - - - - which are the coordinates of the black squares on a chess board. - koordinatları olan demetleri içeren bir listedir. - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - Listeler, 'List.map' ve diğer işlevsel programlama birleştiricileri kullanılarak dönüştürülebilir. - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - Bu tanım, numberList içindeki sayıların karelerini alıp, List.map'e bir bağımsız değişken geçirmek üzere - - - - operator to pass an argument to List.map. - komut zinciri işlecini kullanarak yeni bir liste oluşturur. - - - - There are many other list combinations. The following computes the sum of the squares of the - Başka birçok liste bileşimi daha vardır. Aşağıda, 3'e bölünebilen sayıların karelerinin - - - - numbers divisible by 3. - toplamı hesaplanır. - - - - Arrays are fixed-size, mutable collections of elements of the same type. - Diziler, aynı türdeki sabit boyutlu, değiştirilebilir öğe koleksiyonlarıdır. - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - Lists'e benzer olsalar da (numaralandırmayı desteklerler ve bilgi işlem için benzer birleştiricilere sahiptirler) - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - genellikle daha hızlıdırlar ve hızlı rastgele erişimi desteklerler. Buna karşılık, değişken oldukları için daha az güvenlidirler. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - Bu, boş dizidir. Söz diziminin Lists'e benzediğine ancak `[| ... |]` kullandığına dikkat edin. - - - - Arrays are specified using the same range of constructs as lists. - Diziler, listeler ile aynı yapı aralıkları kullanılarak belirtilir. - - - - This is an array of numbers from 1 to 1000. - Bu, 1'den 1000'e kadar olan sayıların dizisidir. - - - - This is an array containing only the words "hello" and "world". - Bu, yalnızca "hello" ve "world" sözcüklerini içeren bir dizidir. - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - Bu, dizin tarafından başlatılan ve 0'dan 2000'e kadar olan çift sayıları içeren bir dizidir. - - - - Sub-arrays are extracted using slicing notation. - Alt diziler dilimleme gösterimi aracılığıyla ayıklanır. - - - - You can loop over arrays and lists using 'for' loops. - Diziler ve listeler üzerinden döngü oluşturmak için 'for' döngülerini kullanabilirsiniz. - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - Bir dizi öğesinin içeriğini sol ok atama işlecini kullanarak değiştirebilirsiniz. - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - Bu işleç hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 'Array.map' ve diğer işlevsel programlama işlemlerini kullanarak dizileri dönüştürebilirsiniz. - - - - The following calculates the sum of the lengths of the words that start with 'h'. - Aşağıdaki, 'h' ile başlayan sözcüklerin uzunluklarının toplamını hesaplar. - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - Sıralar, aynı türdeki öğelerden oluşan mantıksal öğe serileridir. Bunlar, Lists ve Arrays'e kıyasla daha genel türlerdir. - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - Sıralar isteğe bağlı olarak değerlendirilir ve her yinelendiklerinde yeniden değerlendirilir. - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# sırası, .NET System.Collections.Generic.IEnumerable<'T> için diğer addır. - - - - Sequence processing functions can be applied to Lists and Arrays as well. - Seri işleme işlevleri, Listeler ve Dizilere de uygulanabilir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - Bu, boş bir seridir. - - - - This a sequence of values. - Bu bir değerler serisidir. - - - - This is an on-demand sequence from 1 to 1000. - Bu, 1'den 1000'e kadar olan isteğe bağlı bir seridir. - - - - This is a sequence producing the words "hello" and "world" - Bu, "hello" ve "world" sözcüklerini üreten bir seridir - - - - This sequence producing the even numbers up to 2000. - Bu, 2000'e kadar olan çift sayıları üreten bir seridir. - - - - This is an infinite sequence which is a random walk. - Bu, rastgele olan sonsuz bir seridir. - - - - This example uses yield! to return each element of a subsequence. - Bu örnek, alt serinin her öğesini döndürmek için yield! kullanır. - - - - This example shows the first 100 elements of the random walk. - Bu örnek rastgele serinin ilk 100 öğesini gösterir. - - - - Recursive functions can call themselves. In F#, functions are only recursive - Özyinelemeli işlevler kendilerini çağırabilir. F# içinde, işlevler yalnızca - - - - when declared using 'let rec'. - 'let rec' kullanılarak bildirildiğinde özyinelemeli olur. - - - - Recursion is the preferred way to process sequences or collections in F#. - Özyineleme, F# içinde sıraları veya koleksiyonları işlemek için tercih edilen yöntemdir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - Bu örnek, bir tamsayının faktöriyelini hesaplayan özyinelemeli bir işlevi - - - - integer. It uses 'let rec' to define a recursive function. - gösterir. Özyinelemeli işlevi tanımlamak için 'let rec' kullanır. - - - - Computes the greatest common factor of two integers. - İki tamsayının en büyük ortak çarpanını hesaplar. - - - - Since all of the recursive calls are tail calls, - Özyinelemeli tüm çağrılar tail çağrısı olduğundan, - - - - the compiler will turn the function into a loop, - derleyici, işlevi bir döngüye dönüştürür, - - - - which improves performance and reduces memory consumption. - bu da performansı artırır ve bellek tüketimini azaltır. - - - - This example computes the sum of a list of integers using recursion. - Bu örnek, özyineleme kullanarak bir tamsayılar listesinin toplamını hesaplar. - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - Bu, bir sonuç biriktirici ile bir yardımcı işlev kullanarak 'sumList' tail öğesini özyinelemeli yapar. - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - Bu, çekirdek biriktirici olarak '0' sağlayarak özyinelemeli tail yardımcı işlevini çağırır. - - - - An approach like this is common in F#. - Benzer yaklaşımlar F# içinde yaygındır. - - - - Records are an aggregate of named values, with optional members (such as methods). - Kayıtlar, isteğe bağlı üyeleri (örneğin, metotlar) içeren adlandırılmış değerlerin kümesidir. - - - - They are immutable and have structural equality semantics. - Bunlar sabittir ve yapısal eşitlik semantiğine sahiptir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - Bu örnek yeni bir kayıt türü tanımlamayı gösterir. - - - - This example shows how to instantiate a record type. - Bu örnekte, bir kayıt türünün örneğinin nasıl oluşturulacağı gösterilmektedir. - - - - You can also do this on the same line with ';' separators. - Bunu ';' ayırıcıları ile aynı satırda da yapabilirsiniz. - - - - This example shows how to use "copy-and-update" on record values. It creates - Bu örnek kayıt değerlerinde "kopyalama ve güncelleştirme" kullanımını gösterir. contact1'in - - - - a new record value that is a copy of contact1, but has different values for - kopyası olan, ama 'Telefon' ve 'Doğrulanmış' alanları için farklı değerleri olan - - - - the 'Phone' and 'Verified' fields. - yeni bir kayıt değeri oluşturur. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - Bu örnek kayıt değerini işleyen bir işlev yazmayı gösterir. - - - - It converts a 'ContactCard' object to a string. - 'ContactCard' nesnesini dizeye dönüştürür. - - - - This is an example of a Record with a member. - Bu, üye içeren bir Kayıt örneğidir. - - - - Members can implement object-oriented members. - Üyeler, nesne yönelimli üyeleri uygulayabilir. - - - - Members are accessed via the '.' operator on an instantiated type. - Örnekli bir tür üzerinde, üyelere '.' işleci ile erişilir. - - - - Records can also be represented as structs via the 'Struct' attribute. - Kayıtlar 'Struct' özniteliği ile yapı olarak da gösterilebilir. - - - - This is helpful in situations where the performance of structs outweighs - Bu, yapıların performansının, başvuru türlerinin esnekliğinden daha önemli - - - - the flexibility of reference types. - olduğu durumlarda kullanışlıdır. - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - Ayırt Edici Birleşimler (kısaca DU), bir dizi adlandırılmış form veya durum olabilen değerleri ifade eder. - - - - Data stored in DUs can be one of several distinct values. - DU'larda depolanan veriler birkaç farklı değerden biri olabilir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - Aşağıdaki, bir iskambil kartının cinsini gösterir. - - - - A Disciminated Union can also be used to represent the rank of a playing card. - Bir iskambil kartının sırasını göstermek için bir Ayırt Edici Birleşim de kullanılabilir. - - - - Represents the rank of cards 2 .. 10 - 2 .. 10 arasındaki kartları temsil eder - - - - Discriminated Unions can also implement object-oriented members. - Ayırt Edici Birleşimler ayrıca nesne yönelimli üyeleri uygulayabilir. - - - - This is a record type that combines a Suit and a Rank. - Bu, Cins ve Sırayı birleştiren bir kayıt türüdür. - - - - It's common to use both Records and Disciminated Unions when representing data. - Verileri temsil ederken Kayıtları ve Ayırt Edici Birleşimleri birlikte kullanmak yaygındır. - - - - This computes a list representing all the cards in the deck. - Bu, destedeki tüm kartları gösteren bir liste hesaplar. - - - - This example converts a 'Card' object to a string. - Bu örnek, bir 'Card' nesnesini dizeye dönüştürür. - - - - This example prints all the cards in a playing deck. - Bu örnek bir iskambil destesindeki tüm kartları yazdırır. - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - Tek Olaylı DU'lar genellikle etki alanı modelleme için kullanılır. Bu, dizeler ve tamsayılar gibi temel türlere göre - - - - over primitive types such as strings and ints. - ek tür güvenliği sağlamanıza yardımcı olabilir. - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - Tek durumlu DU'lar, sarmaladıkları türe veya bu türden örtük olarak dönüştürülemez. - - - - For example, a function which takes in an Address cannot accept a string as that input, - Örneğin, Adres alan bir işlev bu giriş için dize kabul edemez - - - - or vive/versa. - veya bu durumun tersi olamaz. - - - - You can easily instantiate a single-case DU as follows. - Tek Olaylı DU'ları aşağıdaki gibi kolayca örnekleyebilirsiniz. - - - - When you need the value, you can unwrap the underlying value with a simple function. - Değere ihtiyacınız olduğunda, basit bir işlev ile temel değerin sarmalamasını açabilirsiniz. - - - - Printing single-case DUs is simple with unwrapping functions. - Sarmalama açma işlevleri ile tek olayı DU'ları yazdırmak kolaydır. - - - - Disciminated Unions also support recursive definitions. - Ayırt Edici Birleşimler ayrıca özyinelemeli tanımları da destekler. - - - - This represents a Binary Search Tree, with one case being the Empty tree, - Bu, bir olayı Boş ağacı ve diğeri bir değer ile iki alt ağaç içeren bir Düğüme sahip - - - - and the other being a Node with a value and two subtrees. - İkili Arama Ağacı'nı gösterir. - - - - Check if an item exists in the binary search tree. - İkili arama ağacında bir öğe olup olmadığını denetleyin. - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - Desen Eşleştirme kullanarak özyinelemeli olarak arar. Varsa true, aksi takdirde false döndürür. - - - - Check the left subtree. - Sol alt ağacı denetleyin. - - - - Check the right subtree. - Sağ alt ağacı denetleyin. - - - - Inserts an item in the Binary Search Tree. - İkili Arama Ağacı'na bir öğe ekler. - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - Desen Eşleştirme kullanarak özyinelemeli olarak eklenecek yeri bulur ve ardından yeni bir düğüm ekler. - - - - If the item is already present, it does not insert anything. - Öğe zaten varsa yeni bir öğe eklenmez. - - - - No need to insert, it already exists; return the node. - Eklemeye gerek yok, öğe zaten var; düğümü döndürün. - - - - Call into left subtree. - Sol alt ağaca çağırın. - - - - Call into right subtree. - Sağ alt ağaca çağırın. - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - Ayırt Edici Birleşimler, 'Struct' özniteliği aracılığıyla yapı olarak da gösterilebilir. - - - - This is helpful in situations where the performance of structs outweighs - Bu, yapıların performansının, başvuru türlerinin esnekliğinden daha önemli - - - - the flexibility of reference types. - olduğu durumlarda kullanışlıdır. - - - - However, there are two important things to know when doing this: - Ancak, bunu yaparken bilmeniz gereken iki önemli nokta vardır: - - - - 1. A struct DU cannot be recursively-defined. - 1. Bir yapı DU'su, özyinelemeli olarak tanımlanamaz. - - - - 2. A struct DU must have unique names for each of its cases. - 2. Bir yapı DU'su, her bir durumu için benzersiz adlara sahip olmalıdır. - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - Desen Eşleştirme, Desenleri kullanmanızı sağlayan bir F# özelliğidir. - - - - which are a way to compare data with a logical structure or structures, - Desenler, verileri mantıksal yapı veya yapılar ile karşılaştırmak, - - - - decompose data into constituent parts, or extract information from data in various ways. - verileri bileşenlerine ayırmak veya verilerden bilgileri çeşitli şekillerde ayıklamak için harika bir yol sunar. - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - Daha sonra Desen Eşleştirme ile bir desenin "şeklini" gönderebilirsiniz. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - Bir kişinin ad ve soyadı kaydı - - - - A Discriminated Union of 3 different kinds of employees - 3 farklı çalışan türünden oluşan bir Ayırt Edici Birleşim - - - - Count everyone underneath the employee in the management hierarchy, - Çalışan da dahil olmak üzere, yönetim hiyerarşisinde çalışanın altındaki - - - - including the employee. - herkesi sayın. - - - - Find all managers/executives named "Dave" who do not have any reports. - Herhangi bir raporu olmayan, "Dave" adlı tüm yöneticileri bulun. - - - - This uses the 'function' shorthand to as a lambda expression. - Bu, 'function' kısaltmasını bir lambda ifadesi olarak kullanır. - - - - [] matches an empty list. - [] boş bir liste ile eşleşir. - - - - '_' is a wildcard pattern that matches anything. - '_' herhangi bir öğeyle eşleşen bir joker karakter desenidir. - - - - This handles the "or else" case. - Bu, "or else" durumunu ele alır. - - - - You can also use the shorthand function construct for pattern matching, - Kısaltma özellik yapısını desen eşleştirme için de kullanabilirsiniz, - - - - which is useful when you're writing functions which make use of Partial Application. - bu Kısmi Uygulamayı kullanan işlevler yazarken kullanışlıdır. - - - - Define some more functions which parse with the helper function. - Yardımcı işlev ile ayrıştırılan birkaç işlev daha tanımlayın. - - - - Active Patterns are another powerful construct to use with pattern matching. - Etkin Desenler, desen eşleştirme ile kullanabileceğiniz diğer bir güçlü yapıdır. - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - Giriş verilerini desen eşleştirme çağrı sitesinde bölerek özel formlara ayırmanıza olanak sağlar. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 'Function' anahtar sözcüğü ve Etkin Desenler aracılığıyla Desen Eşleştirme, genellikle böyle görünür. - - - - Call the printer with some different values to parse. - Ayrıştırılacak farklı değerlerle yazıcıyı çağırın. - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - Seçenek değerleri 'Some' veya 'None' ile etiketlenmiş herhangi bir değer türü olabilir. - - - - They are used extensively in F# code to represent the cases where many other - Bunlar yaygın olarak diğer birçok dilin null başvurular kullandığı durumları temsil - - - - languages would use null references. - etmek üzere F# kodunda kullanılır. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - İlk olarak, Tek Durumlu Ayırt Edici Birleşim ile tanımlanan bir posta kodu tanımlayın. - - - - Next, define a type where the ZipCode is optional. - Sonra, ZipCode’un isteğe bağlı olduğu bir tür tanımlayın. - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - Sonra, müşterinin posta kodu için sevkiyat alanını hesaplayan bir nesneyi temsil eden arabirim türünü tanımlayın, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 'getState' ve 'getShippingZone' soyut metotları uygulamalarından faydalanır. - - - - Next, calculate a shipping zone for a customer using a calculator instance. - Sonra, hesaplayıcı örneğini kullanarak müşteri için sevkiyat bölgesi hesaplayın. - - - - This uses combinators in the Option module to allow a functional pipeline for - Bu, Optionals ile veri dönüştürülmesini sağlamak için - - - - transforming data with Optionals. - Option modülünde birleştiricilerin kullanılmasını sağlar. - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - Ölçü birimleri, basit sayısal türler için tür açısından güvenli bir şekilde ek açıklama girmenin bir yoludur. - - - - You can then perform type-safe arithmetic on these values. - Böylece bu değerler üzerinde tür açısından güvenli aritmetik gerçekleştirebilirsiniz. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - İlk olarak, ortak birim adlarından oluşan bir koleksiyon açın - - - - Define a unitized constant - Birimlere ayrılmış bir sabit tanımlayın - - - - Next, define a new unit type - Sonra, yeni bir birim türü tanımlayın - - - - Conversion factor mile to meter. - Milden metreye dönüştürme faktörü. - - - - Define a unitized constant - Birimlere ayrılmış bir sabit tanımlayın - - - - Compute metric-system constant - Metrik sistem sabitini hesaplayın - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - Ölçü Birimleri kullanan değerler, yazdırma gibi işler için temel sayısal tür ile aynı şekilde kullanılabilir. - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - Sınıflar, F# içinde yeni nesneleri tanımlamanın bir yoludur ve standart Nesne yönelimli yapıları destekler. - - - - They can have a variety of members (methods, properties, events, etc.) - Çeşitli üyelere sahip olabilirler (metotlar, özellikler, olaylar vb.) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - Sınıflar hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - Üyeler hakkında daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - Basit bir iki boyutlu Vektör sınıfı. - - - - The class's constructor is on the first line, - Sınıfın oluşturucusu ilk satırdadır - - - - and takes two arguments: dx and dy, both of type 'double'. - ve ikisi de 'double' türünde olan iki bağımsız değişken alır: dx ve dy. - - - - This internal field stores the length of the vector, computed when the - Bu dahili alan, nesne oluşturulduğunda hesaplanan vektör - - - - object is constructed - uzunluğunu depolar - - - - 'this' specifies a name for the object's self identifier. - 'this', nesnenin kendi tanımlayıcısı için bir ad belirtir. - - - - In instance methods, it must appear before the member name. - Örnek metotlarında üye adından önce gelmelidir. - - - - This member is a method. The previous members were properties. - Bu üye, bir metot. Önceki üyeler özellikti. - - - - This is how you instantiate the Vector2D class. - Vector2D sınıfının örneğini bu şekilde oluşturabilirsiniz. - - - - Get a new scaled vector object, without modifying the original object. - Özgün nesneyi değiştirmeden, yeni bir ölçekli vektör nesnesi alın. - - - - Generic classes allow types to be defined with respect to a set of type parameters. - Genel sınıflar, türlerin bir tür parametreleri kümesine göre tanımlanmasına izin verir. - - - - In the following, 'T is the type parameter for the class. - Aşağıda, 'T', sınıf için tür parametresidir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - Bu dahili alan, bir listedeki durumları depolar. - - - - Add a new element to the list of states. - Durumlar listesine yeni bir öğe ekleyin. - - - - use the '<-' operator to mutate the value. - değeri değiştirmek için '<-' işlecini kullanın. - - - - Get the entire list of historical states. - Geçmiş durumların tam listesini alın. - - - - Get the latest state. - Son durumu alın. - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - Durum izleyicisi sınıfının bir 'int' örneği. Tür parametresinin algılandığını unutmayın. - - - - Add a state - Durum ekle - - - - Interfaces are object types with only 'abstract' members. - Arabirimler, yalnızca 'abstract' üyelere sahip olan nesne türleridir. - - - - Object types and object expressions can implement interfaces. - Nesne türleri ve nesne ifadeleri arabirim uygulayabilir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - Bu, IDisposable uygulayan bir türdür. - - - - This is the implementation of IDisposable members. - Bu, IDisposable üyelerinin uygulamasıdır. - - - - This is an object that implements IDisposable via an Object Expression - Bu, bir Object İfadesi ile IDisposable uygulayan bir nesnedir - - - - Unlike other languages such as C# or Java, a new type definition is not needed - C# veya Java gibi diğer dillerin aksine, bir arabirim uygulamak için yeni bir tür tanımı - - - - to implement an interface. - gerekli değildir. - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core kitaplığı bir paralel işleme işlevleri aralığı tanımlar. Burada - - - - you use some functions for parallel processing over arrays. - diziler üzerinde çeşitli paralel işleme işlevleri kullanırsınız. - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - Daha fazla bilgi için bkz. https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - İlk olarak, bir giriş dizisi. - - - - Next, define a functions that does some CPU intensive computation. - Sonra, yoğun CPU kullanarak hesaplama yapan bir işlev tanımlayın. - - - - Next, do a parallel map over a large input array. - Sonra, büyük bir giriş dizisi üzerinde paralel bir eşleme oluşturun. - - - - Next, print the results. - Sonra, sonuçları yazdırın. - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - Events, .NET programlamasında özellikle WinForms veya WPF uygulamaları ile yaygın olarak kullanılan bir deyimdir. - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - Daha fazla bilgi için bkz. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - İlk olarak, abonelik noktası (event.Publish) ve olay tetikleyicisinden (event.Trigger) oluşan Olay nesnesi örneğini oluşturun. - - - - Next, add handler to the event. - Sonra, olaya işleyici ekleyin. - - - - Next, trigger the event. - Sonra, olayı tetikleyin. - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - Sonra, olayın standart .NET kuralını takip eden bir örneğini oluşturun: (sender, EventArgs). - - - - Next, add a handler for this new event. - Sonra, bu yeni olay için bir işleyici ekleyin. - - - - Next, trigger this event (note that sender argument should be set). - Sonra, bu olayı tetikleyin (sender bağımsız değişkeninin ayarlanmış olması gerektiğine dikkat edin). - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf deleted file mode 100644 index cb0a1983af..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - 此示例将引导你了解 F# 语言的各个元素。 - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - 若要在 F# 交互窗口中执行代码,请突出显示一个代码节并按 Alt-Enter 或右击 - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - 并选择“在 Interactive 中执行”。 可从“视图”菜单中打开 F# 交互窗口。 - - - - For more about F#, see: - 有关 F# 的详细信息,请参见: - - - - To see this tutorial in documentation form, see: - 若要以文档的形式查看此教程,请参阅: - - - - To learn more about applied F# programming, use - 若要了解有关已应用的 F# 编程的详细信息,请使用 - - - - To install the Visual F# Power Tools, use - 若要安装 Visual F# Power Tools,请使用 - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - “工具”-->“扩展和更新”-->“联机”和搜索 - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - 有关要用于 F# 的其他模板,请参见 Visual Studio 中的“联机模板”, - - - - 'New Project' --> 'Online Templates' - “新建项目”-->“联机模板” - - - - F# supports three kinds of comments: - F# 支持三种注释: - - - - 1. Double-slash comments. These are used in most situations. - 1. 双斜线注释。 此类注释用于大多数情况。 - - - - 2. ML-style Block comments. These aren't used that often. - 2. ML 样式块注释。此类注释不经常使用。 - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. 三斜线注释。此类注释用于记录功能和类型等。 - - - - They will appear as text when you hover over something which is decorated with these comments. - 光标悬停在附带有注释的位置时,这些注释会以文本形式显示。 - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - 它们还支持 .NET 样式的 XML 注释,这些注释可生成参考文档, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - 还可允许编辑器(例如 Visual Studio)从其中提取信息。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 使用 "open" 关键字打开命名空间。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - 模块是值、类型和函数值等 F# 代码的分组。 - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - 用模块分组代码有助于汇集相关代码和避免程序中出现名称冲突。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - 此为示例整数。 - - - - This is a sample floating point number. - 此为示例浮点数。 - - - - This computed a new number by some arithmetic. Numeric types are converted using - 这按照某种运算方法计算新的数字。数字类型通过 - - - - functions 'int', 'double' and so on. - "int"、"double" 等函数进行转换。 - - - - This is a list of the numbers from 0 to 99. - 这是从 0 到 99 的数字列表 - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - 这是包含从 0 到 99 的所有数字及其平方的所有元组的列表. - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 下一行打印包含元组的列表,使用 "%A" 来进行一般打印。 - - - - This is a sample integer with a type annotation - 这是一个具有类型注释的示例整数 - - - - Values in F# are immutable by default. They cannot be changed - F# 中的值默认为不可变。程序执行过程中 - - - - in the course of a program's execution unless explicitly marked as mutable. - 这些值无法更改,除非被显式标记为可变。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 通过 "let" 将值绑定到名称可使其不可变。 - - - - The second line of code fails to compile because 'number' is immutable and bound. - 未能编译第二行代码,因为 "number" 不可变且已绑定。 - - - - Re-defining 'number' to be a different value is not allowed in F#. - F# 中不允许将 "number" 重定义为其他值。 - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 一个可变绑定。必须提供这种绑定才能改变 "otherNumber" 的值。 - - - - When mutating a value, use '<-' to assign a new value. - 若要改变值,请使用 "<-" 分配新值。 - - - - You could not use '=' here for this purpose since it is used for equality - 在这里不能将 "=" 用作此目的,因为该符号用于表示等式 - - - - or other contexts such as 'let' or 'module' - 或者 "let" 或 "module" 等其他上下文 - - - - Much of F# programming consists of defining functions that transform input data to produce - 大部分 F# 编程包括定义函数,该函数转换输入数据以生成 - - - - useful results. - 有用的结果。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 可使用 "let" 定义函数。它将接受整数参数,然后返回整数。 - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 括号对函数参数是可选的,但使用显示类型注释时除外。 - - - - Apply the function, naming the function return result using 'let'. - 应用函数,并使用“let”命名函数返回结果。 - - - - The variable type is inferred from the function return type. - 变量类型是从函数返回类型推导出来的。 - - - - This line uses '%d' to print the result as an integer. This is type-safe. - 该行用 "%d" 将结果作为整数进行打印。这属于类型安全。 - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 如果 "result1" 不是类型 "int",则将无法编译该行。 - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 如有需要,可使用 "(argument:type)" 批注参数名称类型。括号是必需的。 - - - - Conditionals use if/then/elid/elif/else. - 条件语句使用 if/then/elid/elif/else。 - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - 注意,F# 使用可识别空格缩进的语法,与 Python 等语言类似。 - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - 此行使用 "%f" 将结果作为浮点打印。与上述 "%d" 情况一样,属于类型安全。 - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - 布尔是 F# 中的基本数据类型。下面是一些布尔值和条件逻辑示例。 - - - - To learn more, see: - 有关详细信息,请参阅: - - - - and - - - - - Booleans values are 'true' and 'false'. - 布尔值为 "true" 和 "false"。 - - - - Operators on booleans are 'not', '&&' and '||'. - 布尔运算符为 "not"、"&&" 和 "||"。 - - - - This line uses '%b'to print a boolean value. This is type-safe. - 本行用 "%b" 打印布尔值。这属于类型安全。 - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 字符串是 F# 中的基本数据类型。下面是一些字符串和基本的字符串操作示例。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 字符串使用双引号。 - - - - Strings can also use @ to create a verbatim string literal. - 字符串也可使用 @ 创建逐字的字符串。 - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - 这将忽略转义字符,如 "\", "\n", "\t" 等。 - - - - String literals can also use triple-quotes. - 字符串文本也可使用三重引号。 - - - - String concatenation is normally done with the '+' operator. - 字符串串联通常是用 "+" 运算符完成的。 - - - - This line uses '%s' to print a string value. This is type-safe. - 本行用 "%s" 打印字符串值。这属于类型安全。 - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - 子字符串使用索引表示法。此行提取前 7 个字符作为子字符串。 - - - - Note that like many languages, Strings are zero-indexed in F#. - 注意,与许多语言相同,字符串在 F# 中从零开始编制索引。 - - - - Tuples are simple combinations of data values into a combined value. - 元组是组合成组合值的简单数据值组合。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 一个包含整数的简单元组。 - - - - A function that swaps the order of two values in a tuple. - 一个用于交换两个值在元组中的顺序的函数。 - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 类型推理可自动泛化函数,使其具有泛型类型, - - - - meaning that it will work with any type. - 意味着它可与任何类型兼容。 - - - - A tuple consisting of an integer, a string, - 一个整数,一个字符串以及 - - - - and a double-precision floating point number. - 一个双精度浮点数字组成的元组。 - - - - A simple tuple of integers with a type annotation. - 一个具有类型批注的简单的整数元组。 - - - - Type annotations for tuples use the * symbol to separate elements - 元组的类型批注使用 * 号来分隔元素 - - - - Tuples are normally objects, but they can also be represented as structs. - 元组通常为对象,但也可表示为结构。 - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - 这些可在 C# 和 Visual Basic.NET 中与结构完全进行交互操作;然而, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 结构元组不隐式转换为对象元组(通常称为引用元组)。 - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - 下面的第二行将因此无法编译。取消注释观察将发生什么。 - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 尽管不能在结构元组和引用元组之间进行隐式转换, - - - - you can explicitly convert via pattern matching, as demonstrated below. - 可通过模式匹配进行显式转换,如下所示。 - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# 管道运算符("|>"、"<|" 等 )和 F# 组合运算符(">>"、"<<") - - - - are used extensively when processing data. These operators are themselves functions - 广泛用于数据处理。这些运算符本身就是函数, - - - - which make use of Partial Application. - 它使用偏函数应用。 - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - 若要深入了解这些运算符,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 若要深入了解偏函数应用,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 计算值的平方。 - - - - Adds 1 to a value. - 将值加 1。 - - - - Tests if an integer value is odd via modulo. - 通过取模测试整数是否为奇数。 - - - - A list of 5 numbers. More on lists later. - 包含 5 个数字的列表。稍后列表上会有更多数字。 - - - - Given a list of integers, it filters out the even numbers, - 如果是整数列表,它会筛选出偶数, - - - - squares the resulting odds, and adds 1 to the squared odds. - 将产生的奇数平方,然后将奇数平方值加 1。 - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 编写 "squareOddValuesAndAddOne" 的简便方法是将每个 - - - - sub-result into the function calls themselves. - 子结果嵌入函数调用本身。 - - - - This makes the function much shorter, but it's difficult to see the - 这将使函数短得多,但难以查看 - - - - order in which the data is processed. - 处理数据的顺序。 - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 编写 "squareOddValuesAndAddOne" 的首选方法是使用 F# 管道运算符。 - - - - This allows you to avoid creating intermediate results, but is much more readable - 这可使你避免产生中间结果,而且可读性更好 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - 嵌入式函数调用(如 "squareOddValuesAndAddOneNested")更具可读性 - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 使用 Lambda 函数,通过将第二个 "List.map" 调用移动到第一个, - - - - into the first, using a Lambda Function. - 可以缩短 "squareOddValuesAndAddOnePipeline"。 - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - 注意,管道也在 lambda 函数内使用。F# 管道运算符 - - - - can be used for single values as well. This makes them very powerful for processing data. - 还可用于单个值。这使它们处理数据的功能很强大。 - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 最后,无需再将 "value" 显式作为参数,你可使用 ">>" - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 以合成两个核心运算: 筛选出偶数,然后平方并加 1。 - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 同样,lambda 表达式的 "fun x -> ..." 也不需要了,因为 "x" 只是 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 在该范围内定义,以便可传递到功能管道。因此,也可将 ">>" - - - - there as well. - 用在该处。 - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - "squareOddValuesAndAddOneComposition" 的结果本身就是另一个函数,它 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 将整数列表作为其输入值。如果使用整数列表执行 "squareOddValuesAndAddOneComposition", - - - - of integers, you'll notice that it produces the same results as previous functions. - 你将发现它与上述函数产生的结果相同。 - - - - This is using what is known as function composition. This is possible because functions in F# - 这使用的就是所谓的函数组合。这是可能的,因为 F# 中的函数 - - - - use Partial Application and the input and output types of each data processing operation match - 使用偏函数应用,并且每个数据处理操作的输入和输出类型与 - - - - the signatures of the functions we're using. - 我们使用的函数签名。 - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - 列表属于有序、不可变、单向链接的列表。它们都采用主动求值方式。 - - - - This module shows various ways to generate lists and process lists with some functions - 本模块介绍使用某些函数生成列表和处理列表的各种方法 - - - - in the 'List' module in the F# Core Library. - 在 F# 核心库的 "List" 模块中。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - 使用 [ ... ] 定义列表。这是空列表。 - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - 这是一个包含 3 个元素的列表。";" 用于分隔同一行的元素。 - - - - You can also separate elements by placing them on their own lines. - 也可通过将各元素放在其自身行来分隔。 - - - - This is a list of integers from 1 to 1000 - 这是从 1 到 1000 的整数列表 - - - - Lists can also be generated by computations. This is a list containing - 也可通过计算来生成列表。此列表包含 - - - - all the days of the year. - 一年的所有天。 - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 使用 "List.take" 打印 "daysList" 的前 5 个元素。 - - - - Computations can include conditionals. This is a list containing the tuples - 计算可以包括条件。这是包含元组的列表 - - - - which are the coordinates of the black squares on a chess board. - 这是棋盘上黑色方格的坐标。 - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - 列表可使用 "List.map" 和其他函数编程连结符进行转换。 - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - 此定义通过使用管道将 numberList 中的数字进行平方运算来生成新列表 - - - - operator to pass an argument to List.map. - 将参数传递给 List.map 的运算符。 - - - - There are many other list combinations. The following computes the sum of the squares of the - 还有许多其他列表组合。下面计算以下内容的平方和: - - - - numbers divisible by 3. - 数字可被 3 整除。 - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 数组是固定大小,同类型元素的可变集合。 - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - 尽管它们与列表相同(支持枚举,且具有用于数据处理的类似连接符), - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 它们通常速度更快,且支持快速随机访问。代价是因为可变而不太安全。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - 这是空数组。注意,语法与列表类似,但改用 `[| ... |]`。 - - - - Arrays are specified using the same range of constructs as lists. - 使用与列表相同的构造范围来指定数组。 - - - - This is an array of numbers from 1 to 1000. - 这是从 1 到 1000 的数字数组。 - - - - This is an array containing only the words "hello" and "world". - 这是只包含单词 "hello" 和 "world" 的数组。 - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - 这是由索引初始化的数组,包含从 0 到 2000 之间的偶数。 - - - - Sub-arrays are extracted using slicing notation. - 使用切片表示法提取子数组。 - - - - You can loop over arrays and lists using 'for' loops. - 可使用 "for" 循环循环数组和列表。 - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 可使用左箭头赋值运算符来修改数组元素的内容。 - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - 若要深入了解此运算符,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 可使用 "Array.map" 和其他功能性编程运算来转换数组。 - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 下面的函数计算以 "h" 开头的单词的总长度。 - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - 序列是类型相同的所有元素的逻辑系列。序列是比列表和数组更常规的类型。 - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - 将根据需要计算序列,并在每次循环访问它们时重新进行计算。 - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# 序列是 .NET System.Collections.Generic.IEnumerable<'T> 的别名。 - - - - Sequence processing functions can be applied to Lists and Arrays as well. - 序列处理函数也可以应用于列表和数组。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - 这是空序列。 - - - - This a sequence of values. - 这是一个值的序列。 - - - - This is an on-demand sequence from 1 to 1000. - 这是从 1 到 1000 的按需序列。 - - - - This is a sequence producing the words "hello" and "world" - 这是生成单词 "hello" 和 "world" 的序列 - - - - This sequence producing the even numbers up to 2000. - 此序列生成最大为 2000 的偶数。 - - - - This is an infinite sequence which is a random walk. - 这是可随机访问的无限序列。 - - - - This example uses yield! to return each element of a subsequence. - 此示例使用 yield! 返回子序列的每个元素。 - - - - This example shows the first 100 elements of the random walk. - 此示例演示随机访问的前 100 个元素。 - - - - Recursive functions can call themselves. In F#, functions are only recursive - 递归函数可调用其自身。在 F# 中,函数只递归 - - - - when declared using 'let rec'. - 使用 "let rec" 声明时。 - - - - Recursion is the preferred way to process sequences or collections in F#. - 递归是 F# 中处理序列或集合的首选方式。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - 此示例演示递归函数,计算以下内容的阶乘: - - - - integer. It uses 'let rec' to define a recursive function. - 整数。它使用 "let rec" 来定义递归函数。 - - - - Computes the greatest common factor of two integers. - 计算两个整数的最大公因数。 - - - - Since all of the recursive calls are tail calls, - 由于所有递归调用都是尾调用, - - - - the compiler will turn the function into a loop, - 因此编译器会将该函数转变成一个循环, - - - - which improves performance and reduces memory consumption. - 这可提高性能并减少内存消耗。 - - - - This example computes the sum of a list of integers using recursion. - 本示例使用递归计算整数列表的总和。 - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 通过将 Helper 函数与结果累加器一起使用,使 "sumList" 成为尾递归函数。 - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - 假如 "0" 作为种子累加器,这将调用尾递归 helper 函数。 - - - - An approach like this is common in F#. - 此类方法在 F# 中很常见。 - - - - Records are an aggregate of named values, with optional members (such as methods). - 记录是已命名值的聚合,同时具有可选成员(例如,方法)。 - - - - They are immutable and have structural equality semantics. - 它们不可变且具有结构相等性语义。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - 此示例演示如何定义新记录类型。 - - - - This example shows how to instantiate a record type. - 本示例演示如何实例化记录类型。 - - - - You can also do this on the same line with ';' separators. - 也可使用 ";" 分隔符在同一行上执行此操作。 - - - - This example shows how to use "copy-and-update" on record values. It creates - 此示例演示如何对记录值使用 "copy-and-update"。它创建了 - - - - a new record value that is a copy of contact1, but has different values for - 新的记录值,该值是 contact1 的副本,但对以下内容具有不同的值: - - - - the 'Phone' and 'Verified' fields. - “电话”和“已验证”字段。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - 此示例演示如何编写处理记录值的函数。 - - - - It converts a 'ContactCard' object to a string. - 它将 "ContactCard" 对象转换为字符串。 - - - - This is an example of a Record with a member. - 这是一个具有成员的记录示例。 - - - - Members can implement object-oriented members. - 成员可实现面向对象的成员。 - - - - Members are accessed via the '.' operator on an instantiated type. - 可通过实例化类型上的 "." 运算符访问成员。 - - - - Records can also be represented as structs via the 'Struct' attribute. - 记录也可通过 "Struct" 属性表示为结构。 - - - - This is helpful in situations where the performance of structs outweighs - 这在结构性能更重要的情况下很有用 - - - - the flexibility of reference types. - 引用类型的灵活性。 - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 可区分联合(简称 DU)的值可以是一系列已命名窗体或用例。 - - - - Data stored in DUs can be one of several distinct values. - DU 中存储的数据可以为多个不同值之一。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - 下面代表一套扑克牌。 - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 可区分联合还可用来表示纸牌的设置级别。 - - - - Represents the rank of cards 2 .. 10 - 表示扑克牌点数 2 .. 10 - - - - Discriminated Unions can also implement object-oriented members. - 可区分联合还可实现面向对象的成员。 - - - - This is a record type that combines a Suit and a Rank. - 这是结合花色和牌面大小的记录类型。 - - - - It's common to use both Records and Disciminated Unions when representing data. - 表示数据时同时使用记录和可区分联合是很常见的。 - - - - This computes a list representing all the cards in the deck. - 它将计算代表牌组中所有扑克牌的列表。 - - - - This example converts a 'Card' object to a string. - 此示例将“纸牌”对象转换为字符串。 - - - - This example prints all the cards in a playing deck. - 此示例打印扑克牌中的所有牌。 - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 单用例 DU 常用于域建模。这可确保额外类型的安全 - - - - over primitive types such as strings and ints. - 字符串和整数等基元类型。 - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 单用例 DU 无法隐式转换为其包装的类型或从其包装的类型进行转换。 - - - - For example, a function which takes in an Address cannot accept a string as that input, - 例如,地址中采用的函数无法接受字符串作为输入, - - - - or vive/versa. - 反之亦然。 - - - - You can easily instantiate a single-case DU as follows. - 可轻松实例化单用例 DU,如下所示。 - - - - When you need the value, you can unwrap the underlying value with a simple function. - 需要值时,可使用单个函数解包基础值。 - - - - Printing single-case DUs is simple with unwrapping functions. - 打印单用例 DU 与解包函数一样简单。 - - - - Disciminated Unions also support recursive definitions. - 可区分联合还支持递归定义。 - - - - This represents a Binary Search Tree, with one case being the Empty tree, - 这代表一个二进制文件搜索树,且有一个用例为空树, - - - - and the other being a Node with a value and two subtrees. - 而另一个用例为具有一个值和两个子树的节点。 - - - - Check if an item exists in the binary search tree. - 检查项是否存在于二进制文件搜索树中。 - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - 使用模式匹配进行递归搜索。如果存在,则返回 true,否则返回 false。 - - - - Check the left subtree. - 检查左子树。 - - - - Check the right subtree. - 检查右子树。 - - - - Inserts an item in the Binary Search Tree. - 在二进制文件搜索树中插入项。 - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - 查找使用模式匹配递归插入的位置,然后插入新节点。 - - - - If the item is already present, it does not insert anything. - 如果项已存在,则不会插入任何内容。 - - - - No need to insert, it already exists; return the node. - 无需插入,该项已存在;返回节点。 - - - - Call into left subtree. - 调入左子树。 - - - - Call into right subtree. - 调入右子树。 - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 可区分联合也可通过 "Struct" 属性表示为结构。 - - - - This is helpful in situations where the performance of structs outweighs - 这在结构性能更重要的情况下很有用 - - - - the flexibility of reference types. - 引用类型的灵活性。 - - - - However, there are two important things to know when doing this: - 然而,执行此操作时需了解两个重要事项: - - - - 1. A struct DU cannot be recursively-defined. - 1. 无法以递归方式定义结构 DU。 - - - - 2. A struct DU must have unique names for each of its cases. - 2. 结构 DU 必须对其每个用例均有唯一名称。 - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - 模式匹配是 F# 的一个功能,使你能够利用模式, - - - - which are a way to compare data with a logical structure or structures, - 它们是将数据与逻辑结构或结构进行比较的方法, - - - - decompose data into constituent parts, or extract information from data in various ways. - 将数据分解为各个构成部分,或通过各种方式从数据中提取信息。 - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - 然后,你便可以在模式的“形状”上通过模式匹配进行派遣。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 人员的姓氏和名字的记录 - - - - A Discriminated Union of 3 different kinds of employees - 具有 3 种不同员工的可区分联合 - - - - Count everyone underneath the employee in the management hierarchy, - 在管理层次结构下对员工进行计数, - - - - including the employee. - 其中包括员工。 - - - - Find all managers/executives named "Dave" who do not have any reports. - 查找所有名为 "Dave" 且没有任何下属的经理/主管。 - - - - This uses the 'function' shorthand to as a lambda expression. - 这使用 "function" 简写为 lambda 表达式。 - - - - [] matches an empty list. - [] 匹配空列表。 - - - - '_' is a wildcard pattern that matches anything. - "_" 是与任何对象均匹配的通配符模式。 - - - - This handles the "or else" case. - 它处理 "or else" 情况。 - - - - You can also use the shorthand function construct for pattern matching, - 你也可将简写函数构造用于模式匹配, - - - - which is useful when you're writing functions which make use of Partial Application. - 这在编写使用偏函数应用的函数时很有用。 - - - - Define some more functions which parse with the helper function. - 定义更多使用 helper 函数分析的函数。 - - - - Active Patterns are another powerful construct to use with pattern matching. - 活动模式是另一个与模式匹配配合使用的强大构造。 - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - 它们使你能够将输入数据分区到自定义窗体,然后在模式匹配调用站点分解它们。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 通过 "function" 关键字的匹配模式和活动模式通常如下所示。 - - - - Call the printer with some different values to parse. - 使用一些其他值调用打印机进行分析。 - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - 选项值是用“Some”或“None”标记的任何类型的值。 - - - - They are used extensively in F# code to represent the cases where many other - 它们在 F# 代码中广泛用于表示许多其他 - - - - languages would use null references. - 语言使用 null 引用的用例。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - 首先,定义通过单用例可区分联合定义的邮政编码。 - - - - Next, define a type where the ZipCode is optional. - 接下来,定义一个类型,其中 ZipCode 是可选项。 - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 接下来,定义表示对象的接口类型,用于计算客户邮政编码的送货区域, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 假定提供了“getState”和“getShippingZone”抽象方法的实现。 - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 接下来,使用计算器实例计算客户的发货区域。 - - - - This uses combinators in the Option module to allow a functional pipeline for - 它在选项模块中使用连接符以允许功能管道 - - - - transforming data with Optionals. - 用于使用可选项转换数据。 - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 度量单位是一种以类型安全方式批注基元数值类型的方式。 - - - - You can then perform type-safe arithmetic on these values. - 然后,你便可以对这些值执行类型安全算术。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - 首先,打开常用单位名称集合 - - - - Define a unitized constant - 定义单元化常量 - - - - Next, define a new unit type - 接下来,定义新的单位类型 - - - - Conversion factor mile to meter. - 英里到米的换算系数。 - - - - Define a unitized constant - 定义单元化常量 - - - - Compute metric-system constant - 计算公制常量 - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 使用度量单位的值可像基元数值类型用于打印等操作一样直接使用。 - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - 类是 F# 中定义新对象类型的一种方式,且支持标准的面向对象的构造。 - - - - They can have a variety of members (methods, properties, events, etc.) - 它们可以有各种成员(如,方法、属性、事件等) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - 若要了解关于类的详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - 若要深入了解成员,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 简单的二维矢量类。 - - - - The class's constructor is on the first line, - 该类的构造函数位于第一行, - - - - and takes two arguments: dx and dy, both of type 'double'. - 并且采用两个参数: dx 和 dy,二者均属于类型 "double"。 - - - - This internal field stores the length of the vector, computed when the - 此内部字段存储矢量的长度,当发生以下情况时进行计算: - - - - object is constructed - 对象已构造 - - - - 'this' specifies a name for the object's self identifier. - “this”用于指定对象的自我标识符的名称。 - - - - In instance methods, it must appear before the member name. - 在实例方法中,它必须出现在成员名称之前。 - - - - This member is a method. The previous members were properties. - 该成员属于方法。以前的成员属于属性。 - - - - This is how you instantiate the Vector2D class. - 这就是你实例化 Vector2D 类的方式。 - - - - Get a new scaled vector object, without modifying the original object. - 获取新的缩放矢量对象而不修改原始对象。 - - - - Generic classes allow types to be defined with respect to a set of type parameters. - 通用类允许考虑使用一组类型参数来定义类型。 - - - - In the following, 'T is the type parameter for the class. - 以下示例中,"T" 表示类的类型参数。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - 此内部字段将状态存储在列表中。 - - - - Add a new element to the list of states. - 将新元素添加到状态列表中。 - - - - use the '<-' operator to mutate the value. - 使用 "<-" 运算符改变值。 - - - - Get the entire list of historical states. - 获取历史状态的完整列表。 - - - - Get the latest state. - 获取最新状态。 - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 状态跟踪程序类的一个“int”实例。请注意,已推断类型参数。 - - - - Add a state - 添加状态 - - - - Interfaces are object types with only 'abstract' members. - 接口是只有“抽象”成员的对象类型。 - - - - Object types and object expressions can implement interfaces. - 对象类型和对象表达式可以实现接口。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - 它是实现 IDisposable 的类型。 - - - - This is the implementation of IDisposable members. - 它是 IDisposable 成员的实现。 - - - - This is an object that implements IDisposable via an Object Expression - 该对象可通过对象表达式实现 IDisposable - - - - Unlike other languages such as C# or Java, a new type definition is not needed - 与 C# 或 Java 等其他语言不同,无需新的类型定义 - - - - to implement an interface. - 以实现接口。 - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core 库定义了一系列并行处理函数。此处 - - - - you use some functions for parallel processing over arrays. - 可使用某些函数对数组进行并行处理。 - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 有关详细信息,请参阅: https://msdn.microsoft.com/zh-cn/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - 首先,输入一个数组。 - - - - Next, define a functions that does some CPU intensive computation. - 接下来,定义执行某些 CPU 密集型计算的函数。 - - - - Next, do a parallel map over a large input array. - 接下来,对大型输入数组执行并行映射。 - - - - Next, print the results. - 接下来,打印结果。 - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - 事件是 .NET 编程的常见习惯用语,尤其是使用 WinForms 或 WPF 应用程序编程时。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 有关详细信息,请参阅: https://docs.microsoft.com/zh-cn/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - 首先,创建包含订阅点(event.Publish)和事件触发器(event.Trigger)的事件对象实例。 - - - - Next, add handler to the event. - 接下来,将处理程序添加到事件。 - - - - Next, trigger the event. - 接下来,触发该事件。 - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 接下来,创建遵循标准 .NET 约定的事件的实例: (sender, EventArgs)。 - - - - Next, add a handler for this new event. - 接下来,为此新事件添加处理程序。 - - - - Next, trigger this event (note that sender argument should be set). - 接下来,触发此事件(请注意,应设置 sender 参数)。 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf deleted file mode 100644 index fd33d17fa3..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf +++ /dev/null @@ -1,1637 +0,0 @@ - - - - - - This sample will guide you through elements of the F# language. - 此範例將引導您了解 F# 語言的項目。 - - - - To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - 若要執行 F# 互動中的程式碼,請反白顯示某個程式碼區段並按下 Alt-Enter,或者以滑鼠右鍵按一下 - - - - and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - 並選取 [以互動方式執行]。您可以從 [檢視] 功能表開啟 F# 互動式視窗。 - - - - For more about F#, see: - 如需有關 F# 的詳細資訊,請參閱: - - - - To see this tutorial in documentation form, see: - 若要參閱文件表單中的此教學課程,請參閱: - - - - To learn more about applied F# programming, use - 如需深入了解套用的 F# 程式設計,請使用 - - - - To install the Visual F# Power Tools, use - 若要安裝 Visual F# Power Tools,請使用 - - - - 'Tools' --> 'Extensions and Updates' --> `Online` and search - [工具]5D; --> [延伸模組和更新]5D; --> [連線]5D; 並搜尋 - - - - For additional templates to use with F#, see the 'Online Templates' in Visual Studio, - 如需有關搭配 F# 一起使用的其他範本,請參閱 Visual Studio 中的 [線上範本]5D;, - - - - 'New Project' --> 'Online Templates' - [新增專案]5D; --> [線上範本]5D; - - - - F# supports three kinds of comments: - F# 支援三種註解: - - - - 1. Double-slash comments. These are used in most situations. - 1. 將註解加上雙斜線。適用於大部分的情況。 - - - - 2. ML-style Block comments. These aren't used that often. - 2. 將註解加上 ML 樣式區塊。較不常使用。 - - - - 3. Triple-slash comments. These are used for documenting functions, types, and so on. - 3. 將註解加上三斜線。適用於記錄函式、類型等。 - - - - They will appear as text when you hover over something which is decorated with these comments. - 當您暫留在以這些註解為裝飾的項目上時,這些註解會顯示為文字。 - - - - They also support .NET-style XML comments, which allow you to generate reference documentation, - 這些註解也支援 .NET 樣式的 XML 註解,讓您可以產生參考文件, - - - - and they also allow editors (such as Visual Studio) to extract information from them. - 也讓編輯者 (像是 Visual Studio) 可以從註解中擷取資訊。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/xml-documentation - 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/xml-documentation - - - - Open namespaces using the 'open' keyword. - 使用 'open' 關鍵字開啟命名空間。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/import-declarations-the-open-keyword - - - - A module is a grouping of F# code, such as values, types, and function values. - 模組是 F# 程式碼的分組,例如值、類型及函式值。 - - - - Grouping code in modules helps keep related code together and helps avoid name conflicts in your program. - 將程式碼分組為模組有助於將相關的程式碼整合在一塊,且能避免程式發生名稱衝突。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/modules - 若要深入了解,請參閱: https://docs.microsoft.com/zh-tw/dotnet/articles/fsharp/language-reference/modules - - - - This is a sample integer. - 此為範例整數。 - - - - This is a sample floating point number. - 此為範例浮點數。 - - - - This computed a new number by some arithmetic. Numeric types are converted using - 這使用了一些算數來計算新數字。使用函式 'int'、'double' 等 - - - - functions 'int', 'double' and so on. - 來轉換數字類型。 - - - - This is a list of the numbers from 0 to 99. - 此為從 0 到 99 的數字清單。 - - - - This is a list of all tuples containing all the numbers from 0 to 99 and their squares. - 此為所有 Tuple 的清單,內含從 0 到 99 的所有數字及其平方。 - - - - The next line prints a list that includes tuples, using '%A' for generic printing. - 下一行會使用 '%A' 執行一般列印,來列印包含 Tuple 的清單。 - - - - This is a sample integer with a type annotation - 此為具有型別註解的範例整數 - - - - Values in F# are immutable by default. They cannot be changed - 根據預設,F# 中的值是不可變的。於程式執行過程中,除非明確標示為可變的 - - - - in the course of a program's execution unless explicitly marked as mutable. - 否則無法對其進行變更。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#why-immutable - - - - Binding a value to a name via 'let' makes it immutable. - 透過 'let' 將值繫結到名稱,即可將它設為不可變動。 - - - - The second line of code fails to compile because 'number' is immutable and bound. - 因為 'number' 無法變動並已繫結,所以無法編譯第二行程式碼。 - - - - Re-defining 'number' to be a different value is not allowed in F#. - 在 F# 中,不得將 'number' 重新定義為不同的值。 - - - - A mutable binding. This is required to be able to mutate the value of 'otherNumber'. - 可變動的繫結。需要此項目才可變更 'otherNumber' 的值。 - - - - When mutating a value, use '<-' to assign a new value. - 變動值時,請使用 '<-' 指派新的值。 - - - - You could not use '=' here for this purpose since it is used for equality - '=' 在此表示等於,所以無法用於此用途 - - - - or other contexts such as 'let' or 'module' - 或其他內容,例如 'let' 或 'module' - - - - Much of F# programming consists of defining functions that transform input data to produce - F# 程式設計時常需要定義函式來轉換輸入資料,從而產生 - - - - useful results. - 實用的結果。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/ - - - - You use 'let' to define a function. This one accepts an integer argument and returns an integer. - 您可以使用 'let' 來定義函式。此接受整數引數,並會傳回整數。 - - - - Parentheses are optional for function arguments, except for when you use an explicit type annotation. - 對函式引數來說不一定要使用括號,但使用明確的型別註解時例外。 - - - - Apply the function, naming the function return result using 'let'. - 套用函式,使用 'let' 命名函數會傳回結果。 - - - - The variable type is inferred from the function return type. - 變數型別是從函式傳回型別推斷出來。 - - - - This line uses '%d' to print the result as an integer. This is type-safe. - 此行使用 '%d' 以整數形式列印結果。這是型別安全。 - - - - If 'result1' were not of type 'int', then the line would fail to compile. - 如果 'result1' 的類型不是 'int',則無法編譯該行。 - - - - When needed, annotate the type of a parameter name using '(argument:type)'. Parentheses are required. - 需要時,請使用 '(argument:type)' 為參數名稱的類型加上標註。需要使用括號。 - - - - Conditionals use if/then/elid/elif/else. - 條件使用 if/then/elid/elif/else。 - - - - Note that F# uses whitespace indentation-aware syntax, similar to languages like Python. - 請注意,F# 使用空白縮排感知語法,其與 Python 這類語言類似。 - - - - This line uses '%f' to print the result as a float. As with '%d' above, this is type-safe. - 此行使用 '%f' 以浮點形式列印結果。與上述 '%d' 相同,這是型別安全。 - - - - Booleans are fundamental data types in F#. Here are some examples of Booleans and conditional logic. - 布林值是 F# 中的基本資料類型。以下是一些布林值與條件式邏輯的範例。 - - - - To learn more, see: - 若要深入了解,請參閱: - - - - and - - - - - Booleans values are 'true' and 'false'. - 布林值為 'true' 和 'false'。 - - - - Operators on booleans are 'not', '&&' and '||'. - 布林值上的運算子為 'not'、'&&' 和 '||'。 - - - - This line uses '%b'to print a boolean value. This is type-safe. - 此行使用 '%b' 列印布林值。這是型別安全。 - - - - Strings are fundamental data types in F#. Here are some examples of Strings and basic String manipulation. - 字串在 F# 中是基本的資料類型。以下是一些字串與基本字串操作的範例。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/strings - - - - Strings use double quotes. - 字串使用雙引號。 - - - - Strings can also use @ to create a verbatim string literal. - 字串也可使用 @ 來建立逐字字串常值。 - - - - This will ignore escape characters such as '\', '\n', '\t', etc. - 這將會忽略逸出字元,例如 '\'、'\n'、'\t' 等等。 - - - - String literals can also use triple-quotes. - 字串常值也可使用三引號。 - - - - String concatenation is normally done with the '+' operator. - 串連字串通常使用 '+' 運算子進行。 - - - - This line uses '%s' to print a string value. This is type-safe. - 此行使用 '%s' 列印字串值。這是型別安全。 - - - - Substrings use the indexer notation. This line extracts the first 7 characters as a substring. - 子字串使用索引子標記法。此行會擷取前 7 個字元作為子字串。 - - - - Note that like many languages, Strings are zero-indexed in F#. - 請注意,就像許多語言一樣,字串在 F# 中會以零為基底編製索引。 - - - - Tuples are simple combinations of data values into a combined value. - 元組是簡單的資料值合併為合併值。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/tuples - - - - A simple tuple of integers. - 簡式整數元組。 - - - - A function that swaps the order of two values in a tuple. - 將元組中兩個值的順序互換的函式。 - - - - F# Type Inference will automatically generalize the function to have a generic type, - F# 型別推斷會自動將函式一般化成泛型類型, - - - - meaning that it will work with any type. - 表示其可與任何類型搭配運作。 - - - - A tuple consisting of an integer, a string, - 元組,包含整數、字串、 - - - - and a double-precision floating point number. - 和雙精確度浮點數。 - - - - A simple tuple of integers with a type annotation. - 具有類型註釋之整數的簡單元組。 - - - - Type annotations for tuples use the * symbol to separate elements - 元組的類型註釋會使用 * 符號分隔項目 - - - - Tuples are normally objects, but they can also be represented as structs. - 元組一般是物件,但也可以用結構形式呈現。 - - - - These interoperate completely with structs in C# and Visual Basic.NET; however, - 這些會與 C# 和 Visual Basic .NET 中的結構完全相互操作; 不過, - - - - struct tuples are not implicitly convertable with object tuples (often called reference tuples). - 結構元組無法利用物件元組 (通常稱為參考元組) 進行隱含轉換。 - - - - The second line below will fail to compile because of this. Uncomment it to see what happens. - 因此,將無法編譯以下的第二行。請取消它的註解,看看會如何。 - - - - Although you cannot implicitly convert between struct tuples and reference tuples, - 雖然您不能隱含地在結構元組及參考元組間進行轉換, - - - - you can explicitly convert via pattern matching, as demonstrated below. - 但您可透過模式比對明確地轉換,如下所示。 - - - - The F# pipe operators ('|>', '<|', etc.) and F# composition operators ('>>', '<<') - F# 管道運算子 ('|>'、'<|' 等) 與 F# 組合運算子 ('>>'、'<<') - - - - are used extensively when processing data. These operators are themselves functions - 廣泛用於處理資料時。這些運算子本身就是函式 - - - - which make use of Partial Application. - 其會利用局部應用程式。 - - - - To learn more about these operators, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - 若要深入了解這些運算子,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#function-composition-and-pipelining - - - - To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - 若要深入了解局部應用程式,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments - - - - Squares a value. - 產生值的平方。 - - - - Adds 1 to a value. - 將值加 1。 - - - - Tests if an integer value is odd via modulo. - 測試整數值是否為經過模數的奇數。 - - - - A list of 5 numbers. More on lists later. - 5 個數字的清單。清單上稍後會有更多項目。 - - - - Given a list of integers, it filters out the even numbers, - 提供整數清單,它會篩選出偶數, - - - - squares the resulting odds, and adds 1 to the squared odds. - 取結果奇數的平方值,並對平方後的奇數加 1。 - - - - A shorter way to write 'squareOddValuesAndAddOne' is to nest each - 撰寫 'squareOddValuesAndAddOne' 較簡短的方式是巢狀每個項目 - - - - sub-result into the function calls themselves. - 子結果進入函式呼叫本身。 - - - - This makes the function much shorter, but it's difficult to see the - 這會將函式設成更短,但較難查看 - - - - order in which the data is processed. - 資料的處理順序。 - - - - A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators. - 撰寫 'squareOddValuesAndAddOne' 的慣用方式是使用 F# 管道運算子。 - - - - This allows you to avoid creating intermediate results, but is much more readable - 這可讓您避免建立中繼結果,但比較容易閱讀 - - - - than nesting function calls like 'squareOddValuesAndAddOneNested' - ,相較於 'squareOddValuesAndAddOneNested' 這類的巢狀函式呼叫 - - - - You can shorten 'squareOddValuesAndAddOnePipeline' by moving the second `List.map` call - 您可以移動第二個 'List.map' 呼叫來縮短 'squareOddValuesAndAddOnePipeline' - - - - into the first, using a Lambda Function. - 到第一個項目,使用 Lambda 函式。 - - - - Note that pipelines are also being used inside the lambda function. F# pipe operators - 請注意,管線也會用於 lambda 函式內。F# 管道運算子 - - - - can be used for single values as well. This makes them very powerful for processing data. - 也可以用於單一值。如此可讓它們在處理資料時功能極為強大。 - - - - Lastly, you can eliminate the need to explicitly take 'values' in as a parameter by using '>>' - 最後,您不需要使用 '>>' 來明確接受 'values' 作為參數 - - - - to compose the two core operations: filtering out even numbers, then squaring and adding one. - 以撰寫兩個核心作業: 篩選出偶數,然後取其平方值再加一。 - - - - Likewise, the 'fun x -> ...' bit of the lambda expression is also not needed, because 'x' is simply - 同樣地,也不需要 lambda 運算式的 'fun x -> ...' 位元,因為 'x' 只是 - - - - being defined in that scope so that it can be passed to a functional pipeline. Thus, '>>' can be used - 定義於該範圍內,以將它傳遞至功能管線。因此,可以使用 '>>' - - - - there as well. - 也會在該處。 - - - - The result of 'squareOddValuesAndAddOneComposition' is itself another function which takes a - 'squareOddValuesAndAddOneComposition' 的結果本身是另一個函式,且該函式接受 - - - - list of integers as its input. If you execute 'squareOddValuesAndAddOneComposition' with a list - 作為輸入的整數清單。如果您執行 'squareOddValuesAndAddOneComposition' 時搭配清單 - - - - of integers, you'll notice that it produces the same results as previous functions. - (整數),您將注意到它會產生與先前函式相同的結果。 - - - - This is using what is known as function composition. This is possible because functions in F# - 這將使用所謂的函式組合。原因可能是 F# 中的函式 - - - - use Partial Application and the input and output types of each data processing operation match - 使用局部應用程式,以及每個資料處理作業相符的輸入與輸出類型 - - - - the signatures of the functions we're using. - 所使用之函式的簽章。 - - - - Lists are ordered, immutable, singly-linked lists. They are eager in their evaluation. - 清單是已排序且不可變動的單向連結清單。它們於評估時會即刻進行運算。 - - - - This module shows various ways to generate lists and process lists with some functions - 此模組示範產生清單及利用某些函式處理清單的各種方法 - - - - in the 'List' module in the F# Core Library. - 在 F# 核心程式庫的 'List' 模組中。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/lists - - - - Lists are defined using [ ... ]. This is an empty list. - 清單使用 [ ... ] 定義。這是空白清單。 - - - - This is a list with 3 elements. ';' is used to separate elements on the same line. - 這是內含 3 個項目的清單。使用 ';' 分隔同一行的項目。 - - - - You can also separate elements by placing them on their own lines. - 您也可以將項目放在各自的行上加以分隔。 - - - - This is a list of integers from 1 to 1000 - 此為從 1 到 1000 的整數清單 - - - - Lists can also be generated by computations. This is a list containing - 計算也可產生清單。此清單內含 - - - - all the days of the year. - 當年每一天。 - - - - Print the first 5 elements of 'daysList' using 'List.take'. - 使用 'List.take' 列印 'daysList' 的前 5 個項目。 - - - - Computations can include conditionals. This is a list containing the tuples - 計算可包含條件。此為內含元組的清單 - - - - which are the coordinates of the black squares on a chess board. - 其為棋盤上黑方格的座標。 - - - - Lists can be transformed using 'List.map' and other functional programming combinators. - 可以使用 'List.map' 及其他函式程式設計結合器轉換清單。 - - - - This definition produces a new list by squaring the numbers in numberList, using the pipeline - 此定義會產生新的清單,方法是使用管線使 numberList 中的數字成平方 - - - - operator to pass an argument to List.map. - 運算子以將引數傳遞到 List.map。 - - - - There are many other list combinations. The following computes the sum of the squares of the - 還有許多其他清單組合。以下會計算下項的平方總和: - - - - numbers divisible by 3. - 可由 3 整除的數字。 - - - - Arrays are fixed-size, mutable collections of elements of the same type. - 陣列是固定大小且類型相同的可變動項目集合。 - - - - Although they are similar to Lists (they support enumeration and have similar combinators for data processing), - 陣列雖與清單 (支援列舉,並具有類似的結合器可用於資料處理) 相似,但 - - - - they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - 陣列通常比較快,而且支援快速隨機存取。但可變動的代價是安全性變低。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/arrays - - - - This is The empty array. Note that the syntax is similar to that of Lists, but uses `[| ... |]` instead. - 此為空白的陣列。請注意與清單前置詞相似的前置詞,請改用 `[| ... |]`。 - - - - Arrays are specified using the same range of constructs as lists. - 使用與所列相同的建構範圍指定陣列。 - - - - This is an array of numbers from 1 to 1000. - 這是從 1 到 1000 的數字陣列。 - - - - This is an array containing only the words "hello" and "world". - 這是僅包含 "hello" 與 "world" 字詞的陣列。 - - - - This is an array initialized by index and containing the even numbers from 0 to 2000. - 這是由索引初始化的陣列,內含從 0 到 2000 之間的偶數。 - - - - Sub-arrays are extracted using slicing notation. - 使用了切割標記法來擷取子陣列。 - - - - You can loop over arrays and lists using 'for' loops. - 您可以使用 'for' 迴圈逐一反覆執行陣列與清單。 - - - - You can modify the contents of an an array element by using the left arrow assignment operator. - 您可以使用向左鍵指派運算子來修改陣列元素的內容。 - - - - To learn more about this operator, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - 若要深入了解此運算子,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/values/index#mutable-variables - - - - You can transform arrays using 'Array.map' and other functional programming operations. - 您可以使用 'Array.map' 及其他功能程式設計作業來轉換陣列。 - - - - The following calculates the sum of the lengths of the words that start with 'h'. - 以下會計算 'h' 開頭的字組之長度總和。 - - - - Sequences are a logical series of elements, all of the same type. These are a more general type than Lists and Arrays. - 序列是一系列的邏輯項目,全部皆為相同的類型。它是比清單及陣列更常見的類型。 - - - - Sequences are evaluated on-demand and are re-evaluated each time they are iterated. - 序列是視需要評估,並在每次反覆執行時重新評估。 - - - - An F# sequence is an alias for a .NET System.Collections.Generic.IEnumerable<'T>. - F# 序列是 .NET System.Collections.Generic.IEnumerable<'T> 的別名。 - - - - Sequence processing functions can be applied to Lists and Arrays as well. - 序列處理函式也可以套用到清單和陣列。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/sequences - - - - This is the empty sequence. - 此為空白序列。 - - - - This a sequence of values. - 這是值的序列。 - - - - This is an on-demand sequence from 1 to 1000. - 此為從 1 到 1000 的隨選序列。 - - - - This is a sequence producing the words "hello" and "world" - 此為產生 "hello" 及 "world" 的序列 - - - - This sequence producing the even numbers up to 2000. - 此序列產生 2000 以下的偶數。 - - - - This is an infinite sequence which is a random walk. - 這是屬於隨機漫步的無限序列。 - - - - This example uses yield! to return each element of a subsequence. - 此範例使用 yield! 傳回序列的每個元素。 - - - - This example shows the first 100 elements of the random walk. - 此範例顯示了隨機漫步的前 100 個項目。 - - - - Recursive functions can call themselves. In F#, functions are only recursive - 遞迴函式可以呼叫其本身。在 F# 中,函式均為遞迴 - - - - when declared using 'let rec'. - (於使用 'let rec' 宣告時)。 - - - - Recursion is the preferred way to process sequences or collections in F#. - 遞迴是處理 F# 中序列或集合的慣用方法。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/index#recursive-functions - - - - This example shows a recursive function that computes the factorial of an - 此範例顯示遞迴函式,其可計算下項的階乘: - - - - integer. It uses 'let rec' to define a recursive function. - 整數。其使用 'let rec' 來定義遞迴函式。 - - - - Computes the greatest common factor of two integers. - 計算兩個整數的最大公因數。 - - - - Since all of the recursive calls are tail calls, - 因為所有遞迴呼叫都是先計算細項的呼叫 (tail call),所以 - - - - the compiler will turn the function into a loop, - 編譯器會將函式轉換為迴圈, - - - - which improves performance and reduces memory consumption. - 以改善效能並降低記憶體耗用。 - - - - This example computes the sum of a list of integers using recursion. - 此範例會計算使用遞迴之整數清單的總和。 - - - - This makes 'sumList' tail recursive, using a helper function with a result accumulator. - 這會將 'sumList' 設成尾遞迴,使用內含結果累加器的 Helper 函式。 - - - - This invokes the tail recursive helper function, providing '0' as a seed accumulator. - 這會叫用尾遞迴 helper 函式,提供 '0' 作為種子累加器。 - - - - An approach like this is common in F#. - 在 F# 中,這類方式十分常見。 - - - - Records are an aggregate of named values, with optional members (such as methods). - 記錄是具有選擇性成員 (例如方法) 之具名值的彙總。 - - - - They are immutable and have structural equality semantics. - 它們不可變動,且具有結構相等的語意。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/records - - - - This example shows how to define a new record type. - 此範例示範如何定義新記錄類型。 - - - - This example shows how to instantiate a record type. - 此範例示範如何具現化記錄類型。 - - - - You can also do this on the same line with ';' separators. - 您也可以使用 ';' 分隔符號,在同一行執行此作業。 - - - - This example shows how to use "copy-and-update" on record values. It creates - 此範例顯示如何在記錄值上使用 "copy-and-update"。其會建立 - - - - a new record value that is a copy of contact1, but has different values for - 新記錄值,其為 contact1 的複本,但對於下項有不同的值: - - - - the 'Phone' and 'Verified' fields. - [Phone]5D; 與 [Verified]5D; 欄位。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/copy-and-update-record-expressions - - - - This example shows how to write a function that processes a record value. - 此範例示範如何寫入會處理記錄值的函式。 - - - - It converts a 'ContactCard' object to a string. - 其會將 'ContactCard' 物件轉換為字串。 - - - - This is an example of a Record with a member. - 這是內含成員之記錄的範例。 - - - - Members can implement object-oriented members. - 成員可以實作物件導向成員。 - - - - Members are accessed via the '.' operator on an instantiated type. - 成員透過在具現化類型上的 '.' 運算子加以存取。 - - - - Records can also be represented as structs via the 'Struct' attribute. - 記錄也可透過 'Struct' 屬性以結構形式呈現。 - - - - This is helpful in situations where the performance of structs outweighs - 它在結構效能較優的情況下很有用 - - - - the flexibility of reference types. - 參考類型的彈性。 - - - - Discriminated Unions (DU for short) are values which could be a number of named forms or cases. - 差異聯集 (簡寫為 DU) 是可能為數個具名表單或案例的值。 - - - - Data stored in DUs can be one of several distinct values. - DU 中所儲存的資料可以是數個相異值中的一個。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/discriminated-unions - - - - The following represents the suit of a playing card. - 以下代表一副撲克牌。 - - - - A Disciminated Union can also be used to represent the rank of a playing card. - 差異聯集也可用以代表一張撲克牌的順位。 - - - - Represents the rank of cards 2 .. 10 - 代表 2 .. 10 這幾張牌的順位 - - - - Discriminated Unions can also implement object-oriented members. - 差異聯集也可以實作物件導向成員。 - - - - This is a record type that combines a Suit and a Rank. - 這是合併了 Suit 和 Rank 的記錄類型。 - - - - It's common to use both Records and Disciminated Unions when representing data. - 代表資料時,通常會使用記錄與差異聯集。 - - - - This computes a list representing all the cards in the deck. - 這會計算代表一疊牌中所有牌的清單。 - - - - This example converts a 'Card' object to a string. - 此範例將 'Card' 物件轉換為字串。 - - - - This example prints all the cards in a playing deck. - 此範例會列印牌局的所有紙牌。 - - - - Single-case DUs are often used for domain modeling. This can buy you extra type safety - 單一案例 DU 通常用於網域模型。這讓使用類型變得更加安全 - - - - over primitive types such as strings and ints. - 針對基本類型,例如 strings 和 ints。 - - - - Single-case DUs cannot be implicitly converted to or from the type they wrap. - 單一案例 DU 無法隱含地轉換成它們所包裝的類型,反之亦然。 - - - - For example, a function which takes in an Address cannot accept a string as that input, - 例如,接受位址的函式無法接受字串作為輸入, - - - - or vive/versa. - 反之亦然。 - - - - You can easily instantiate a single-case DU as follows. - 您可以輕鬆地具現化單一案例 DU,如下所示。 - - - - When you need the value, you can unwrap the underlying value with a simple function. - 當您需要值時,可以使用簡單的函式來展開基礎值。 - - - - Printing single-case DUs is simple with unwrapping functions. - 使用展開 (unwrap) 函式來列印單一案例的 DU 十分簡單。 - - - - Disciminated Unions also support recursive definitions. - 差異聯集也支援遞迴定義。 - - - - This represents a Binary Search Tree, with one case being the Empty tree, - 這代表二進位搜尋樹狀結構,其中有一個案例是空的樹狀結構, - - - - and the other being a Node with a value and two subtrees. - 而另一個是具有一個值和兩個子樹狀結構的節點。 - - - - Check if an item exists in the binary search tree. - 請確認二進位搜尋樹狀結構中是否已有項目存在。 - - - - Searches recursively using Pattern Matching. Returns true if it exists; otherwise, false. - 使用模式比對進行遞迴搜尋。若存在即傳回 true; 否則傳回 false。 - - - - Check the left subtree. - 請檢查左樹狀子結構。 - - - - Check the right subtree. - 請檢查右樹狀子結構。 - - - - Inserts an item in the Binary Search Tree. - 在二進位搜尋樹狀結構中插入項目。 - - - - Finds the place to insert recursively using Pattern Matching, then inserts a new node. - 尋找要使用模式比對遞迴插入的位置,然後插入新節點。 - - - - If the item is already present, it does not insert anything. - 如果該項目已經存在,就不會插入任何內容。 - - - - No need to insert, it already exists; return the node. - 其已存在,所以無須插入; 傳回該節點。 - - - - Call into left subtree. - 呼叫左樹狀子結構。 - - - - Call into right subtree. - 呼叫右樹狀子結構。 - - - - Discriminated Unions can also be represented as structs via the 'Struct' attribute. - 差異聯集也可透過 'Struct' 屬性以結構形式呈現。 - - - - This is helpful in situations where the performance of structs outweighs - 它在結構效能較優的情況下很有用 - - - - the flexibility of reference types. - 參考類型的彈性。 - - - - However, there are two important things to know when doing this: - 但執行這項作業時,需要知道兩件重要的事情: - - - - 1. A struct DU cannot be recursively-defined. - 1. 不可遞迴定義結構 DU。 - - - - 2. A struct DU must have unique names for each of its cases. - 2. 結構 DU 的每個案例都必須要有唯一的名稱。 - - - - Pattern Matching is a feature of F# that allows you to utilize Patterns, - 模式比對是讓您能利用模式的一項 F# 功能, - - - - which are a way to compare data with a logical structure or structures, - 這是使用一或多個邏輯結構來比對資料的方式, - - - - decompose data into constituent parts, or extract information from data in various ways. - 將資料分解為構成組件,或透過各種方式來擷取資料中的資訊。 - - - - You can then dispatch on the "shape" of a pattern via Pattern Matching. - 接著可根據透過比對模式之模式的「形狀」加以分派。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching - - - - A record for a person's first and last name - 人員姓名的記錄 - - - - A Discriminated Union of 3 different kinds of employees - 3 種不同種類員工的差異聯集 - - - - Count everyone underneath the employee in the management hierarchy, - 計算管理階層中該員工下的每位人員, - - - - including the employee. - 包括員工。 - - - - Find all managers/executives named "Dave" who do not have any reports. - 尋找沒有任何報表且名為 "Dave" 的所有經理/主管。 - - - - This uses the 'function' shorthand to as a lambda expression. - 這會使用 'function' 速記作為 lambda 運算式。 - - - - [] matches an empty list. - [] 代表空的清單。 - - - - '_' is a wildcard pattern that matches anything. - '_' 是符合所有項目的萬用字元模式。 - - - - This handles the "or else" case. - 這會處理 "or else" 案例。 - - - - You can also use the shorthand function construct for pattern matching, - 您也可以使用速記函式建構來進行模式比對, - - - - which is useful when you're writing functions which make use of Partial Application. - 適用於撰寫可利用局部應用程式的函式時。 - - - - Define some more functions which parse with the helper function. - 再額外定義一些使用 Helper 函式進行剖析的函式。 - - - - Active Patterns are another powerful construct to use with pattern matching. - 現用模式是另一項功能強大之建構,可與模式比對搭配使用。 - - - - They allow you to partition input data into custom forms, decomposing them at the pattern match call site. - 它們可讓您將輸入資料分割到多個自訂表單,於模式比對呼叫網站進行分解。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns - - - - Pattern Matching via 'function' keyword and Active Patterns often looks like this. - 透過 'function' 關鍵字與現用模式進行模式比對,通常看來如下。 - - - - Call the printer with some different values to parse. - 透過解析一些不同的值來呼叫印表機。 - - - - Option values are any kind of value tagged with either 'Some' or 'None'. - 選項值是以 'Some' 或 'None' 標記的任何一種值。 - - - - They are used extensively in F# code to represent the cases where many other - 它們廣泛用於 F# 程式碼中,來代表許多其他語言會 - - - - languages would use null references. - 使用 null 參考的狀況。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/options - - - - First, define a zipcode defined via Single-case Discriminated Union. - 首先,定義透過單一案例差異聯集所定義的郵遞區號。 - - - - Next, define a type where the ZipCode is optional. - 接著,定義不一定需要 ZipCode 的類型。 - - - - Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code, - 然後,定義代表物件的介面類型,以計算客戶郵遞區號的郵寄區域, - - - - given implementations for the 'getState' and 'getShippingZone' abstract methods. - 'getState' 和 'getShippingZone' 抽象方法的指定實作。 - - - - Next, calculate a shipping zone for a customer using a calculator instance. - 接下來,為使用計算機執行個體的客戶計算出貨區。 - - - - This uses combinators in the Option module to allow a functional pipeline for - 這會在 Option 模組中使用結合器,以允許在執行下列功能時使用功能管線: - - - - transforming data with Optionals. - 使用選用項目來轉換資料。 - - - - Units of measure are a way to annotate primitive numeric types in a type-safe way. - 測量單位是以型別安全方式為基本數值類型加上註釋的方法。 - - - - You can then perform type-safe arithmetic on these values. - 接著可以在這些值上執行型別安全算術。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/units-of-measure - - - - First, open a collection of common unit names - 首先,開啟常用單位名稱的集合 - - - - Define a unitized constant - 定義 unitized 常數 - - - - Next, define a new unit type - 接著,定義新單位類型 - - - - Conversion factor mile to meter. - 英哩到公尺的轉換因數。 - - - - Define a unitized constant - 定義 unitized 常數 - - - - Compute metric-system constant - 計算計量系統常數 - - - - Values using Units of Measure can be used just like the primitive numeric type for things like printing. - 使用測量單位之值的用法,就像是列印這類作業的基本數字類型一樣。 - - - - Classes are a way of defining new object types in F#, and support standard Object-oriented constructs. - 類別是在 F# 中定義新物件類型的一種方式,且支援標準物件導向建構。 - - - - They can have a variety of members (methods, properties, events, etc.) - 它們可以有各式不同的成員 (方法、屬性、事件等等) - - - - To learn more about Classes, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - 若要深入了解類別,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/classes - - - - To learn more about Members, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - 若要深入了解成員,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members - - - - A simple two-dimensional Vector class. - 簡式二維向量類別。 - - - - The class's constructor is on the first line, - 類別的建構函式位於第一行, - - - - and takes two arguments: dx and dy, both of type 'double'. - 並接受兩種引數: dx 與 dy,兩者的類型都是 'double'。 - - - - This internal field stores the length of the vector, computed when the - 這個內部欄位會儲存向量長度,計算時機為 - - - - object is constructed - 物件已建構 - - - - 'this' specifies a name for the object's self identifier. - 'this' 會為物件的自我識別碼指定名稱。 - - - - In instance methods, it must appear before the member name. - 在執行個體方法中,它必須出現在成員名稱前面。 - - - - This member is a method. The previous members were properties. - 此成員是方法。先前的成員是屬性。 - - - - This is how you instantiate the Vector2D class. - 這是 Vector2D 類別的具現化方式。 - - - - Get a new scaled vector object, without modifying the original object. - 取得全新且可調整大小的向量物件,但不修改原始物件。 - - - - Generic classes allow types to be defined with respect to a set of type parameters. - 泛型類別可定義關乎一組類型參數的類型。 - - - - In the following, 'T is the type parameter for the class. - 在下列範例中,'T 是類別的型別參數。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - - - - This internal field store the states in a list. - 此內部欄位會以清單形式儲存狀態。 - - - - Add a new element to the list of states. - 新增項目至狀態清單。 - - - - use the '<-' operator to mutate the value. - 使用 '<-' 運算子可變動值。 - - - - Get the entire list of historical states. - 取得完整的歷程狀態清單。 - - - - Get the latest state. - 取得最新狀態。 - - - - An 'int' instance of the state tracker class. Note that the type parameter is inferred. - 狀態追蹤器類別的 'int' 執行個體。請注意,型別參數是推斷出來的。 - - - - Add a state - 加入狀態 - - - - Interfaces are object types with only 'abstract' members. - 介面為只有 'abstract' 成員的物件類型。 - - - - Object types and object expressions can implement interfaces. - 物件類型與物件運算式可以實作介面。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces - - - - This is a type that implements IDisposable. - 這是實作 IDisposable 的類型。 - - - - This is the implementation of IDisposable members. - 這是 IDisposable 成員的實作。 - - - - This is an object that implements IDisposable via an Object Expression - 這是透過物件運算式實作 IDisposable 的物件 - - - - Unlike other languages such as C# or Java, a new type definition is not needed - 與 C# 或 Java 等其他這類語言不同,不需要新的類型定義 - - - - to implement an interface. - 以實作介面。 - - - - The FSharp.Core library defines a range of parallel processing functions. Here - FSharp.Core 程式庫定義一個範圍內的平行處理函式。這裡 - - - - you use some functions for parallel processing over arrays. - 您可以使用一些函式對陣列進行平行處理。 - - - - To learn more, see: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - 若要深入了解,請參閱: https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/array.parallel-module-%5Bfsharp%5D - - - - First, an array of inputs. - 首先,輸入的陣列。 - - - - Next, define a functions that does some CPU intensive computation. - 接下來,定義執行某些 CPU 密集型計算的函式。 - - - - Next, do a parallel map over a large input array. - 接下來,對大型輸入陣列執行平行對應。 - - - - Next, print the results. - 接下來,列印結果。 - - - - Events are a common idiom for .NET programming, especially with WinForms or WPF applications. - 事件是 .NET 程式設計的常見慣用語,特別是使用 WinForms 或 WPF 應用程式時。 - - - - To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - 若要深入了解,請參閱: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/members/events - - - - First, create instance of Event object that consists of subscription point (event.Publish) and event trigger (event.Trigger). - 首先,建立由訂閱點 (event.Publish) 與事件觸發程序 (event.Trigger) 所組成之事件物件的執行個體。 - - - - Next, add handler to the event. - 接下來,將處理常式新增到事件。 - - - - Next, trigger the event. - 接下來,觸發該事件。 - - - - Next, create an instance of Event that follows standard .NET convention: (sender, EventArgs). - 接下來,為遵循標準 .NET 慣例的事件建立執行個體: (sender, EventArgs)。 - - - - Next, add a handler for this new event. - 接下來,為此新事件新增處理常式。 - - - - Next, trigger this event (note that sender argument should be set). - 接下來,觸發此事件 (請注意,應該設定 sender 引數)。 - - - - - \ No newline at end of file diff --git a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj b/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj deleted file mode 100644 index 72afa7b760..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/TutorialProject.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - TutorialProject - - - - - - Template\Tutorial.fsx - - - - - diff --git a/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest b/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest deleted file mode 100644 index 39bac985bc..0000000000 --- a/vsintegration/ProjectTemplates/TutorialProject/source.extension.vsixmanifest +++ /dev/null @@ -1,25 +0,0 @@ - - - - - F# .NETCore Project Templates - F# project templates for .NETCore. - - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest deleted file mode 100644 index 4b0a45a6e9..0000000000 --- a/vsintegration/Vsix/VisualFSharpTemplates/Source.extension.vsixmanifest +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - Visual F# Templates - Deploy Visual F# Tools Desktop Project Templates to Visual Studio - Microsoft.FSharp.VSIX.Templates - https://docs.microsoft.com/en-us/dotnet/articles/fsharp/ - - - - - - - - - - - - - - - - - - diff --git a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj deleted file mode 100644 index cfab3f5dfa..0000000000 --- a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - Library - Microsoft\FSharpTemplates - net472 - true - - - - - PreserveNewest - packages\System.ValueTuple.4.4.0.nupkg - true - - - PreserveNewest - packages\FSharp.Core.$(FSharpCoreShippedPackageVersion).nupkg - true - - - Designer - - - - - - - - - - - {604f0daa-2d33-48dd-b162-edf0b672803d} - ConsoleProject - ProjectTemplates - TemplateProjectOutputGroup%3b - false - True - - - {01678cda-a11f-4dee-9344-2edf91cf1ae7} - LibraryProject - ProjectTemplates - TemplateProjectOutputGroup%3b - false - True - - - {2facee44-48bd-40b5-a2ee-b54a0c9bb7c4} - TutorialProject - ProjectTemplates - TemplateProjectOutputGroup%3b - false - True - - - - From b08e9e3ec9e31b16c1177c8585a180cdf34b7fb8 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Fri, 17 Jan 2020 15:52:29 -0800 Subject: [PATCH 194/214] Move Finalize from TcImports to another object (#8251) * Move Finalize from TcImports to another object responsible for disposing of TcImports resources * Use ResizeArray --- src/fsharp/CompileOps.fs | 60 ++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index da9f025fea..41d863dab0 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -3756,6 +3756,38 @@ type TcConfigProvider = // TcImports //-------------------------------------------------------------------------- +[] +type TcImportsSafeDisposal + (disposeActions: ResizeArray unit>, +#if !NO_EXTENSIONTYPING + disposeTypeProviderActions: ResizeArray unit>, +#endif + compilationThread: ICompilationThread) = + + let mutable isDisposed = false + + let dispose () = + // disposing deliberately only closes this tcImports, not the ones up the chain + isDisposed <- true + if verbose then + dprintf "disposing of TcImports, %d binaries\n" disposeActions.Count +#if !NO_EXTENSIONTYPING + let actions = disposeTypeProviderActions + if actions.Count > 0 then + compilationThread.EnqueueWork (fun _ -> for action in actions do action()) +#endif + for action in disposeActions do action() + + override _.Finalize() = + dispose () + + interface IDisposable with + + member this.Dispose() = + if not isDisposed then + GC.SuppressFinalize this + dispose () + #if !NO_EXTENSIONTYPING // These are hacks in order to allow TcImports to be held as a weak reference inside a type provider. // The reason is due to older type providers compiled using an older TypeProviderSDK, that SDK used reflection on fields and properties to determine the contract. @@ -3800,34 +3832,24 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let mutable dllTable: NameMap = NameMap.empty let mutable ccuInfos: ImportedAssembly list = [] let mutable ccuTable: NameMap = NameMap.empty - let mutable disposeActions = [] + let disposeActions = ResizeArray() let mutable disposed = false let mutable ilGlobalsOpt = ilGlobalsOpt let mutable tcGlobals = None #if !NO_EXTENSIONTYPING - let mutable disposeTypeProviderActions = [] + let disposeTypeProviderActions = ResizeArray() let mutable generatedTypeRoots = new System.Collections.Generic.Dictionary() let mutable tcImportsWeak = TcImportsWeakHack (WeakReference<_> this) #endif + + let disposal = new TcImportsSafeDisposal(disposeActions, disposeTypeProviderActions, compilationThread) let CheckDisposed() = if disposed then assert false let dispose () = CheckDisposed() - // disposing deliberately only closes this tcImports, not the ones up the chain - disposed <- true - if verbose then - dprintf "disposing of TcImports, %d binaries\n" disposeActions.Length -#if !NO_EXTENSIONTYPING - let actions = disposeTypeProviderActions - disposeTypeProviderActions <- [] - if actions.Length > 0 then - compilationThread.EnqueueWork (fun _ -> for action in actions do action()) -#endif - let actions = disposeActions - disposeActions <- [] - for action in actions do action() + (disposal :> IDisposable).Dispose() static let ccuHasType (ccu: CcuThunk) (nsname: string list) (tname: string) = let matchNameSpace (entityOpt: Entity option) n = @@ -4043,12 +4065,12 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse member private tcImports.AttachDisposeAction action = CheckDisposed() - disposeActions <- action :: disposeActions + disposeActions.Add action #if !NO_EXTENSIONTYPING member private tcImports.AttachDisposeTypeProviderAction action = CheckDisposed() - disposeTypeProviderActions <- action :: disposeTypeProviderActions + disposeTypeProviderActions.Add action #endif // Note: the returned binary reader is associated with the tcImports, i.e. when the tcImports are closed @@ -4781,9 +4803,6 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse knownUnresolved |> List.map (function UnresolvedAssemblyReference(file, originalReferences) -> file, originalReferences) |> List.iter reportAssemblyNotResolved - - override tcImports.Finalize () = - dispose () static member BuildNonFrameworkTcImports (ctok, tcConfigP: TcConfigProvider, tcGlobals: TcGlobals, baseTcImports, nonFrameworkReferences, knownUnresolved) = cancellable { @@ -4809,7 +4828,6 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse interface System.IDisposable with member tcImports.Dispose() = dispose () - GC.SuppressFinalize tcImports override tcImports.ToString() = "TcImports(...)" From f202533f5606c16d6fc28530023491af82f8b63f Mon Sep 17 00:00:00 2001 From: Will Smith Date: Fri, 17 Jan 2020 16:06:37 -0800 Subject: [PATCH 195/214] Added keepAllBackgroundSymbolUses to FSharpChecker (#8256) --- src/fsharp/NameResolution.fs | 2 ++ src/fsharp/NameResolution.fsi | 3 +++ src/fsharp/service/IncrementalBuild.fs | 9 +++++---- src/fsharp/service/IncrementalBuild.fsi | 2 +- src/fsharp/service/service.fs | 14 ++++++++------ src/fsharp/service/service.fsi | 2 +- 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 30f456fd86..7173baa3f6 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -1702,6 +1702,8 @@ type TcSymbolUses(g, capturedNameResolutions: ResizeArray, ResizeArray(), Array.empty) + /// An accumulator for the results being emitted into the tcSink. type TcResultsSinkImpl(g, ?sourceText: ISourceText) = let capturedEnvs = ResizeArray<_>() diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index ea3bbd8aea..3bb04f3737 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -326,6 +326,9 @@ type internal TcSymbolUses = /// Get the locations of all the printf format specifiers in the file member GetFormatSpecifierLocationsAndArity : unit -> (range * int)[] + /// Empty collection of symbol uses + static member Empty : TcSymbolUses + /// Represents open declaration statement. type internal OpenDeclaration = { /// Long identifier as it's presented in source code. diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index de773fd3aa..5e36f94b55 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -1208,7 +1208,7 @@ type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState: type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInputs, nonFrameworkResolutions, unresolvedReferences, tcConfig: TcConfig, projectDirectory, outfile, assemblyName, niceNameGen: NiceNameGenerator, lexResourceManager, sourceFiles, loadClosureOpt: LoadClosure option, - keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds) = + keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds, keepAllBackgroundSymbolUses) = let tcConfigP = TcConfigProvider.Constant tcConfig let fileParsed = new Event() @@ -1386,7 +1386,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput let implFile = if keepAssemblyContents then implFile else None let tcResolutions = if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty let tcEnvAtEndOfFile = (if keepAllBackgroundResolutions then tcEnvAtEndOfFile else tcState.TcEnvFromImpls) - let tcSymbolUses = sink.GetSymbolUses() + let tcSymbolUses = if keepAllBackgroundSymbolUses then sink.GetSymbolUses() else TcSymbolUses.Empty RequireCompilationThread ctok // Note: events get raised on the CompilationThread @@ -1700,7 +1700,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput projectReferences, projectDirectory, useScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds, - tryGetMetadataSnapshot, suggestNamesForErrors) = + tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) = let useSimpleResolutionSwitch = "--simpleresolution" cancellable { @@ -1820,7 +1820,8 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput resourceManager, sourceFilesNew, loadClosureOpt, keepAssemblyContents=keepAssemblyContents, keepAllBackgroundResolutions=keepAllBackgroundResolutions, - maxTimeShareMilliseconds=maxTimeShareMilliseconds) + maxTimeShareMilliseconds=maxTimeShareMilliseconds, + keepAllBackgroundSymbolUses=keepAllBackgroundSymbolUses) return Some builder with e -> errorRecoveryNoRange e diff --git a/src/fsharp/service/IncrementalBuild.fsi b/src/fsharp/service/IncrementalBuild.fsi index fb60dbff69..d775c92fcc 100755 --- a/src/fsharp/service/IncrementalBuild.fsi +++ b/src/fsharp/service/IncrementalBuild.fsi @@ -161,7 +161,7 @@ type internal IncrementalBuilder = /// This may be a marginally long-running operation (parses are relatively quick, only one file needs to be parsed) member GetParseResultsForFile : CompilationThreadToken * filename:string -> Cancellable - static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool -> Cancellable + static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool * keepAllBackgroundSymbolUses: bool -> Cancellable /// Generalized Incremental Builder. This is exposed only for unit testing purposes. module internal IncrementalBuild = diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 6d963f614b..b4864ab1ef 100755 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -249,7 +249,7 @@ type ScriptClosureCacheToken() = interface LockToken // There is only one instance of this type, held in FSharpChecker -type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors) as self = +type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) as self = // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.reactor: The one and only Reactor let reactor = Reactor.Singleton let beforeFileChecked = Event() @@ -306,7 +306,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC (ctok, legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles, Array.toList options.OtherOptions, projectReferences, options.ProjectDirectory, options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, FSharpCheckerResultsSettings.maxTimeShareMilliseconds, - tryGetMetadataSnapshot, suggestNamesForErrors) + tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) match builderOpt with | None -> () @@ -904,9 +904,10 @@ type FSharpChecker(legacyReferenceResolver, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, - suggestNamesForErrors) = + suggestNamesForErrors, + keepAllBackgroundSymbolUses) = - let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors) + let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) static let globalInstance = lazy FSharpChecker.Create() @@ -923,7 +924,7 @@ type FSharpChecker(legacyReferenceResolver, let maxMemEvent = new Event() /// Instantiate an interactive checker. - static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors) = + static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors, ?keepAllBackgroundSymbolUses) = let legacyReferenceResolver = match legacyReferenceResolver with @@ -935,7 +936,8 @@ type FSharpChecker(legacyReferenceResolver, let projectCacheSizeReal = defaultArg projectCacheSize projectCacheSizeDefault let tryGetMetadataSnapshot = defaultArg tryGetMetadataSnapshot (fun _ -> None) let suggestNamesForErrors = defaultArg suggestNamesForErrors false - new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors) + let keepAllBackgroundSymbolUses = defaultArg keepAllBackgroundSymbolUses true + new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) member __.ReferenceResolver = legacyReferenceResolver diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi index 7f52818b81..b64017a742 100755 --- a/src/fsharp/service/service.fsi +++ b/src/fsharp/service/service.fsi @@ -77,7 +77,7 @@ type public FSharpChecker = /// If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage. /// An optional resolver for non-file references, for legacy purposes /// An optional resolver to access the contents of .NET binaries in a memory-efficient way - static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool -> FSharpChecker + static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool * ?keepAllBackgroundSymbolUses: bool -> FSharpChecker /// /// Parse a source code file, returning information about brace matching in the file. From 329da81cc9180bdae564f5c6d17301de8cc60a82 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Sun, 19 Jan 2020 06:11:19 +0100 Subject: [PATCH 196/214] Do not convert back and forth from list (#8262) * Do not convert back and forth from list * Use a simple for loop in replicate * Put wildcard back --- src/fsharp/FSharp.Core/list.fs | 8 ++++---- src/fsharp/FSharp.Core/local.fs | 2 +- src/fsharp/TypeChecker.fs | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index bf37ab08a1..920f0f0d9f 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -171,13 +171,13 @@ namespace Microsoft.FSharp.Collections [] let init length initializer = Microsoft.FSharp.Primitives.Basics.List.init length initializer - let rec initConstAcc n x acc = - if n <= 0 then acc else initConstAcc (n-1) x (x :: acc) - [] let replicate count initial = if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) - initConstAcc count initial [] + let mutable result = [] + for i in 0..count-1 do + result <- initial :: result + result [] let iter2 action list1 list2 = diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 8e1b17ea91..3d812fc72c 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -83,7 +83,7 @@ open System.Collections.Generic module internal List = - let arrayZeroCreate (n:int) = (# "newarr !0" type ('T) n : 'T array #) + let inline arrayZeroCreate (n:int) = (# "newarr !0" type ('T) n : 'T array #) [] let nonempty x = match x with [] -> false | _ -> true diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 539f67d844..c7e69f71be 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -5482,7 +5482,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | [SynPatErrorSkip(SynPat.Tuple (false, args, _)) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Tuple (false, args, _)), _))] when numArgTys > 1 -> args // note: we allow both 'C _' and 'C (_)' regardless of number of argument of the pattern - | [SynPatErrorSkip(SynPat.Wild _ as e) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Wild _ as e), _))] -> Array.toList (Array.create numArgTys e) + | [SynPatErrorSkip(SynPat.Wild _ as e) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Wild _ as e), _))] -> List.replicate numArgTys e | [arg] -> [arg] | _ when numArgTys = 0 -> error(Error(FSComp.SR.tcUnionCaseDoesNotTakeArguments(), m)) | _ when numArgTys = 1 -> error(Error(FSComp.SR.tcUnionCaseRequiresOneArgument(), m)) From 49428d629d88fc54a999b9e7ddf36987c46d5695 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Sat, 18 Jan 2020 22:25:07 -0800 Subject: [PATCH 197/214] Allow length of zero for ByteMemory (#8273) --- src/absil/bytes.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index 754b9d49dd..89556fc968 100755 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -67,7 +67,7 @@ type ByteArrayMemory(bytes: byte[], offset, length) = inherit ByteMemory() do - if length <= 0 || length > bytes.Length then + if length < 0 || length > bytes.Length then raise (ArgumentOutOfRangeException("length")) if offset < 0 || (offset + length) > bytes.Length then @@ -155,7 +155,7 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = raise (ArgumentOutOfRangeException("i")) do - if length <= 0 then + if length < 0 then raise (ArgumentOutOfRangeException("length")) override _.Item From eee7567abb671a9662cfa7c9758114f905343086 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Sun, 19 Jan 2020 07:46:48 +0100 Subject: [PATCH 198/214] Inline isRecdTy (#8274) --- src/fsharp/NameResolution.fs | 7 ++++--- src/fsharp/TypeChecker.fs | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 941de1c35e..10e330f207 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -3214,11 +3214,12 @@ let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad ty (mp, id: Ident) allFi |> ListSet.setify (fun fref1 fref2 -> tyconRefEq g fref1.TyconRef fref2.TyconRef) |> List.map (fun x -> ResolutionInfo.Empty, FieldResolution(x, false)) - if isAppTy g ty then + match tryDestAppTy g ty with + | ValueSome tcref -> match ncenv.InfoReader.TryFindRecdOrClassFieldInfoOfType(id.idText, m, ty) with | ValueSome (RecdFieldInfo(_, rfref)) -> [ResolutionInfo.Empty, FieldResolution(rfref, false)] | _ -> - if isRecdTy g ty then + if tcref.IsRecordTycon then // record label doesn't belong to record type -> suggest other labels of same record let suggestLabels (addToBuffer: string -> unit) = for label in SuggestOtherLabelsOfSameRecordType g nenv ty id allFields do @@ -3229,7 +3230,7 @@ let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad ty (mp, id: Ident) allFi error(ErrorWithSuggestions(errorText, m, id.idText, suggestLabels)) else lookup() - else + | _ -> lookup() | _ -> let lid = (mp@[id]) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index c7e69f71be..6609d5ad95 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -6876,7 +6876,7 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, match tryDestAppTy cenv.g objTy with | ValueNone -> error(Error(FSComp.SR.tcNewMustBeUsedWithNamedType(), mNewExpr)) | ValueSome tcref -> - let isRecordTy = isRecdTy cenv.g objTy + let isRecordTy = tcref.IsRecordTycon if not isRecordTy && not (isInterfaceTy cenv.g objTy) && isSealedTy cenv.g objTy then errorR(Error(FSComp.SR.tcCannotCreateExtensionOfSealedType(), mNewExpr)) CheckSuperType cenv objTy synObjTy.Range @@ -7265,12 +7265,12 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF for (i, id) in Array.indexed anonInfo.SortedIds do yield id, Choice2Of2 (mkAnonRecdFieldGetViaExprAddr (anonInfo, oldveaddr, tinst, i, mOrigExpr)) | ValueNone -> - if isRecdTy cenv.g origExprTy then - let tcref, tinst = destAppTy cenv.g origExprTy + match tryAppTy cenv.g origExprTy with + | ValueSome(tcref, tinst) when tcref.IsRecordTycon -> let fspecs = tcref.Deref.TrueInstanceFieldsAsList for fspec in fspecs do yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) - else + | _ -> error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) |] |> Array.distinctBy (fst >> textOfId) From 6edf6ee041b792ab4a05ec638657e7ac6fd16a5d Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 20 Jan 2020 06:45:10 -0800 Subject: [PATCH 199/214] Remove Finalize on obj holder for RawByteMemory (#8237) * Remove Finalize on obj holder for RawByteMemory as memory mapped files use a safe handler. * Removed Finalize from SafeUnamanagedMemoryStream as it is an impl detail for viewing RawByteMemory as a stream * Remove new * Update bytes.fs --- src/absil/bytes.fs | 58 +++++++++++++-------------------------------- src/absil/bytes.fsi | 2 +- 2 files changed, 18 insertions(+), 42 deletions(-) diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index 89556fc968..24159a728c 100755 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -120,34 +120,29 @@ type ByteArrayMemory(bytes: byte[], offset, length) = type SafeUnmanagedMemoryStream = inherit UnmanagedMemoryStream - val mutable private hold: obj + val mutable private holder: obj val mutable private isDisposed: bool - new (addr, length, hold) = + new (addr, length, holder) = { inherit UnmanagedMemoryStream(addr, length) - hold = hold + holder = holder isDisposed = false } - new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, hold) = + new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, holder) = { inherit UnmanagedMemoryStream(addr, length, capacity, access) - hold = hold + holder = holder isDisposed = false } - override x.Finalize() = - x.Dispose false - override x.Dispose disposing = base.Dispose disposing - if not x.isDisposed then - x.hold <- null // Null out so it can be collected. - x.isDisposed <- true + x.holder <- null // Null out so it can be collected. [] -type RawByteMemory(addr: nativeptr, length: int, hold: obj) = +type RawByteMemory(addr: nativeptr, length: int, holder: obj) = inherit ByteMemory () let check i = @@ -159,7 +154,7 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = raise (ArgumentOutOfRangeException("length")) override _.Item - with get i = + with get i = check i NativePtr.add addr i |> NativePtr.read @@ -174,7 +169,7 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = check (pos + count - 1) System.Text.Encoding.UTF8.GetString(NativePtr.add addr pos, count) - override _.ReadBytes(pos, count) = + override _.ReadBytes(pos, count) = check pos check (pos + count - 1) let res = Bytes.zeroCreate count @@ -194,7 +189,7 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = override _.Slice(pos, count) = check pos check (pos + count - 1) - RawByteMemory(NativePtr.add addr pos, count, hold) :> ByteMemory + RawByteMemory(NativePtr.add addr pos, count, holder) :> ByteMemory override x.CopyTo stream = use stream2 = x.AsStream() @@ -210,10 +205,10 @@ type RawByteMemory(addr: nativeptr, length: int, hold: obj) = res override _.AsStream() = - new SafeUnmanagedMemoryStream(addr, int64 length, hold) :> Stream + new SafeUnmanagedMemoryStream(addr, int64 length, holder) :> Stream override _.AsReadOnlyStream() = - new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, hold) :> Stream + new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, holder) :> Stream [] type ReadOnlyByteMemory(bytes: ByteMemory) = @@ -259,17 +254,7 @@ type ByteMemory with mmf let accessor = mmf.CreateViewAccessor(0L, length, MemoryMappedFileAccess.ReadWrite) - - let safeHolder = - { new obj() with - override x.Finalize() = - (x :?> IDisposable).Dispose() - interface IDisposable with - member x.Dispose() = - GC.SuppressFinalize x - accessor.Dispose() - mmf.Dispose() } - RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, safeHolder) + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, (mmf, accessor)) static member FromFile(path, access, ?canShadowCopy: bool) = let canShadowCopy = defaultArg canShadowCopy false @@ -313,19 +298,10 @@ type ByteMemory with | FileAccess.ReadWrite when not accessor.CanRead || not accessor.CanWrite -> invalidOp "Cannot read or write file" | _ -> () - let safeHolder = - { new obj() with - override x.Finalize() = - (x :?> IDisposable).Dispose() - interface IDisposable with - member x.Dispose() = - GC.SuppressFinalize x - accessor.Dispose() - mmf.Dispose() } - RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, safeHolder) - - static member FromUnsafePointer(addr, length, hold: obj) = - RawByteMemory(NativePtr.ofNativeInt addr, length, hold) :> ByteMemory + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, (mmf, accessor)) + + static member FromUnsafePointer(addr, length, holder: obj) = + RawByteMemory(NativePtr.ofNativeInt addr, length, holder) :> ByteMemory static member FromArray(bytes, offset, length) = ByteArrayMemory(bytes, offset, length) :> ByteMemory diff --git a/src/absil/bytes.fsi b/src/absil/bytes.fsi index 11e7c9f58c..46b30b6c5a 100755 --- a/src/absil/bytes.fsi +++ b/src/absil/bytes.fsi @@ -95,7 +95,7 @@ type ByteMemory with /// Creates a ByteMemory object that is backed by a raw pointer. /// Use with care. - static member FromUnsafePointer: addr: nativeint * length: int * hold: obj -> ByteMemory + static member FromUnsafePointer: addr: nativeint * length: int * holder: obj -> ByteMemory /// Creates a ByteMemory object that is backed by a byte array with the specified offset and length. static member FromArray: bytes: byte[] * offset: int * length: int -> ByteMemory From 7a2db2dc475789717a68f35cd22df2eaacbcc969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Cie=C5=9Blak?= Date: Mon, 20 Jan 2020 15:53:43 +0100 Subject: [PATCH 200/214] Remove project cracker (#8288) * Remove ProjectCracker project * Remove Project Cracker tests * Remove ProjectCracker docs --- ...arp.Compiler.Service.ProjectCracker.fsproj | 33 - .../ProjectCracker.fs | 127 ---- .../App.config | 22 - ...rp.Compiler.Service.ProjectCracker.targets | 7 - ...Compiler.Service.ProjectCrackerTool.fsproj | 30 - .../Program.fs | 46 -- .../ProjectCrackerOptions.fs | 11 - .../ProjectCrackerTool.fs | 471 -------------- .../FSharp.Compiler.Service.Tests.fsproj | 4 - fcs/FSharp.Compiler.Service.sln | 38 +- fcs/README.md | 14 +- fcs/docsrc/content/devnotes.md | 2 +- fcs/docsrc/content/project.fsx | 56 -- tests/service/ExprTests.fs | 312 ---------- tests/service/MultiProjectAnalysisTests.fs | 2 - tests/service/ProjectOptionsTests.fs | 578 ------------------ 16 files changed, 17 insertions(+), 1736 deletions(-) delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCrackerTool/App.config delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCracker.targets delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs delete mode 100644 fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs delete mode 100644 tests/service/ProjectOptionsTests.fs diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj b/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj deleted file mode 100644 index 5f5d169797..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - $(FcsTargetNetFxFramework) - true - - - Legacy project file cracker for the F# compiler service. - Legacy project file cracker for the F# compiler service. - false - F# community contributors - https://github.com/fsharp/FSharp.Compiler.Service/blob/master/LICENSE - https://github.com/fsharp/FSharp.Compiler.Service - logo.png - F#, compiler, msbuild - - - - - ProjectCrackerOptions.fs - - - - - - - - - - - - - \ No newline at end of file diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs deleted file mode 100644 index 3a096cb566..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs +++ /dev/null @@ -1,127 +0,0 @@ -namespace FSharp.Compiler.SourceCodeServices - -#if !NETSTANDARD -open System.Runtime.Serialization.Json -#endif -open System.Text -open System.IO -open System - -module Utils = - - let Convert loadedTimeStamp (originalOpts: ProjectCrackerTool.ProjectOptions) = - let logMap = ref Map.empty - - let rec convertProject (opts: ProjectCrackerTool.ProjectOptions) = - if not (isNull opts.Error) then failwith opts.Error - - let referencedProjects() = Array.map (fun (a, b) -> a,convertProject b) opts.ReferencedProjectOptions - - let sourceFiles, otherOptions = - opts.Options - |> Array.partition (fun x -> - let extension = Path.GetExtension(x).ToLower() - x.IndexOfAny(Path.GetInvalidPathChars()) = -1 - && (extension = ".fs" || extension = ".fsi")) - - let sepChar = Path.DirectorySeparatorChar - - let sourceFiles = sourceFiles |> Array.map (fun x -> - match sepChar with - | '\\' -> x.Replace('/', '\\') - | '/' -> x.Replace('\\', '/') - | _ -> x - ) - - logMap := Map.add opts.ProjectFile opts.LogOutput !logMap - { ProjectFileName = opts.ProjectFile - ProjectId = None - SourceFiles = sourceFiles - OtherOptions = otherOptions - ReferencedProjects = referencedProjects() - IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = false - LoadTime = loadedTimeStamp - UnresolvedReferences = None - OriginalLoadReferences = [] - ExtraProjectInfo = None - Stamp = None } - - convertProject originalOpts, !logMap - -type ProjectCracker = - - static member GetProjectOptionsFromProjectFileLogged(projectFileName : string, ?properties : (string * string) list, ?loadedTimeStamp, ?enableLogging) = - let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading - let properties = defaultArg properties [] - let enableLogging = defaultArg enableLogging true - - -#if NETSTANDARD - let arguments = [| - yield projectFileName - yield enableLogging.ToString() - for k, v in properties do - yield k - yield v - |] - - let ret, opts = FSharp.Compiler.SourceCodeServices.ProjectCrackerTool.ProjectCrackerTool.crackOpen arguments - ignore ret -#else - let arguments = new StringBuilder() - arguments.Append('"').Append(projectFileName).Append('"') |> ignore - arguments.Append(' ').Append(enableLogging.ToString()) |> ignore - for k, v in properties do - arguments.Append(' ').Append(k).Append(' ').Append(v) |> ignore - let codebase = Path.GetDirectoryName(Uri(typeof.Assembly.CodeBase).LocalPath) - - let crackerFilename = Path.Combine(codebase,"FSharp.Compiler.Service.ProjectCrackerTool.exe") - if not (File.Exists crackerFilename) then - failwithf "ProjectCracker exe not found at: %s it must be next to the ProjectCracker dll." crackerFilename - - let p = new System.Diagnostics.Process() - - p.StartInfo.FileName <- crackerFilename - p.StartInfo.Arguments <- arguments.ToString() - p.StartInfo.UseShellExecute <- false - p.StartInfo.CreateNoWindow <- true - p.StartInfo.RedirectStandardOutput <- true - p.StartInfo.RedirectStandardError <- true - - let sbOut = StringBuilder() - let sbErr = StringBuilder() - - p.ErrorDataReceived.AddHandler(fun _ a -> sbErr.AppendLine a.Data |> ignore) - p.OutputDataReceived.AddHandler(fun _ a -> sbOut.AppendLine a.Data |> ignore) - - ignore <| p.Start() - - p.EnableRaisingEvents <- true - p.BeginOutputReadLine() - p.BeginErrorReadLine() - - p.WaitForExit() - - let crackerOut = sbOut.ToString() - let crackerErr = sbErr.ToString() - - let opts = - try - let ser = new DataContractJsonSerializer(typeof) - let stringBytes = Encoding.Unicode.GetBytes crackerOut - use ms = new MemoryStream(stringBytes) - ser.ReadObject(ms) :?> ProjectCrackerTool.ProjectOptions - with - exn -> - raise (Exception(sprintf "error parsing ProjectCrackerTool output, stdoutput was:\n%s\n\nstderr was:\n%s" crackerOut crackerErr, exn)) -#endif - - Utils.Convert loadedTimeStamp opts - - static member GetProjectOptionsFromProjectFile(projectFileName : string, ?properties : (string * string) list, ?loadedTimeStamp) = - fst (ProjectCracker.GetProjectOptionsFromProjectFileLogged( - projectFileName, - ?properties=properties, - ?loadedTimeStamp=loadedTimeStamp, - enableLogging=false)) diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/App.config b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/App.config deleted file mode 100644 index fdab151af2..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/App.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCracker.targets b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCracker.targets deleted file mode 100644 index ed01293ada..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCracker.targets +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj deleted file mode 100644 index 9a0a86d1be..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj +++ /dev/null @@ -1,30 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\..\src - - - - Exe - $(FcsTargetNetFxFramework) - true - $(DefineConstants);CROSS_PLATFORM_COMPILER - $(DefineConstants);ENABLE_MONO_SUPPORT - $(OtherFlags) --staticlink:FSharp.Core - true - false - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs deleted file mode 100644 index 5cc3fc8b1e..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/Program.fs +++ /dev/null @@ -1,46 +0,0 @@ -namespace FSharp.Compiler.SourceCodeServices.ProjectCrackerTool - -open System -open System.Reflection -open System.Runtime.Serialization.Json - -module Program = - -#if !NETCOREAPP - let addMSBuildv14BackupResolution () = - let onResolveEvent = new ResolveEventHandler(fun sender evArgs -> - let requestedAssembly = AssemblyName(evArgs.Name) - if requestedAssembly.Name.StartsWith("Microsoft.Build", StringComparison.Ordinal) && - not (requestedAssembly.Name.EndsWith(".resources", StringComparison.Ordinal)) && - not (requestedAssembly.Version.ToString().Contains("12.0.0.0")) - then - // If the version of MSBuild that we're using wasn't present on the machine, then - // just revert back to 12.0.0.0 since that's normally installed as part of the .NET - // Framework. - requestedAssembly.Version <- Version("12.0.0.0") - Assembly.Load requestedAssembly - else - null) - AppDomain.CurrentDomain.add_AssemblyResolve(onResolveEvent) -#endif - - let crackAndSendOutput asText argv = - let ret, opts = ProjectCrackerTool.crackOpen argv - - if asText then - printfn "%A" opts - else - let ser = new DataContractJsonSerializer(typeof) - ser.WriteObject(Console.OpenStandardOutput(), opts) - ret - - - [][] - let main argv = - let asText = Array.exists (fun (s: string) -> s = "--text") argv - let argv = Array.filter (fun (s: string) -> s <> "--text") argv - -#if !NETCOREAPP - addMSBuildv14BackupResolution () -#endif - crackAndSendOutput asText argv diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs deleted file mode 100644 index a48bdc25aa..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs +++ /dev/null @@ -1,11 +0,0 @@ -namespace FSharp.Compiler.SourceCodeServices.ProjectCrackerTool - -[] -type ProjectOptions = - { - ProjectFile: string - Options: string[] - ReferencedProjectOptions: (string * ProjectOptions)[] - LogOutput: string - Error: string - } diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs deleted file mode 100644 index 0f2d4ad056..0000000000 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs +++ /dev/null @@ -1,471 +0,0 @@ -namespace FSharp.Compiler.SourceCodeServices.ProjectCrackerTool - -open System -open System.IO -open System.Text -open Microsoft.Build.Framework -open Microsoft.Build.Utilities - -module internal ProjectCrackerTool = - open System.Collections.Generic - - let runningOnMono = -#if NETCOREAPP - false -#else - try match System.Type.GetType("Mono.Runtime") with null -> false | _ -> true - with e -> false -#endif - - type internal BasicStringLogger() = - inherit Logger() - - let sb = new StringBuilder() - - let log (e: BuildEventArgs) = - sb.Append(e.Message) |> ignore - sb.AppendLine() |> ignore - - override x.Initialize(eventSource:IEventSource) = - sb.Clear() |> ignore - eventSource.AnyEventRaised.Add(log) - - member x.Log = sb.ToString() - - type internal HostCompile() = - member th.Compile(_:obj, _:obj, _:obj) = 0 - interface ITaskHost - - let vs = - let programFiles = - let getEnv v = - let result = System.Environment.GetEnvironmentVariable(v) - match result with - | null -> None - | _ -> Some result - - match List.tryPick getEnv [ "ProgramFiles(x86)"; "ProgramFiles" ] with - | Some r -> r - | None -> "C:\\Program Files (x86)" - - let vsVersions = ["14.0"; "12.0"] - let msbuildBin v = IO.Path.Combine(programFiles, "MSBuild", v, "Bin", "MSBuild.exe") - List.tryFind (fun v -> IO.File.Exists(msbuildBin v)) vsVersions - - let mkAbsolute dir v = - if Path.IsPathRooted v then v - else Path.Combine(dir, v) - - let mkAbsoluteOpt dir v = Option.map (mkAbsolute dir) v - - let CrackProjectUsingNewBuildAPI fsprojFile properties logOpt = - let fsprojFullPath = try Path.GetFullPath(fsprojFile) with _ -> fsprojFile - let fsprojAbsDirectory = Path.GetDirectoryName fsprojFullPath - - use _pwd = - let dir = Directory.GetCurrentDirectory() - Directory.SetCurrentDirectory(fsprojAbsDirectory) - { new System.IDisposable with - member x.Dispose() = Directory.SetCurrentDirectory(dir) } - use engine = new Microsoft.Build.Evaluation.ProjectCollection() - let host = new HostCompile() - - engine.HostServices.RegisterHostObject(fsprojFullPath, "CoreCompile", "Fsc", host) - - let projectInstanceFromFullPath (fsprojFullPath: string) = - use file = new FileStream(fsprojFullPath, FileMode.Open, FileAccess.Read, FileShare.Read) - use stream = new StreamReader(file) - use xmlReader = System.Xml.XmlReader.Create(stream) - - let project = - try - engine.LoadProject(xmlReader, FullPath=fsprojFullPath) - with - | exn -> - let tools = engine.Toolsets |> Seq.map (fun x -> x.ToolsPath) |> Seq.toList - raise (new Exception(sprintf "Could not load project %s in ProjectCollection. Available tools: %A. Message: %s" fsprojFullPath tools exn.Message)) - - project.SetGlobalProperty("BuildingInsideVisualStudio", "true") |> ignore - if not (List.exists (fun (p,_) -> p = "VisualStudioVersion") properties) then - match vs with - | Some version -> project.SetGlobalProperty("VisualStudioVersion", version) |> ignore - | None -> () - project.SetGlobalProperty("ShouldUnsetParentConfigurationAndPlatform", "false") |> ignore - for (prop, value) in properties do - project.SetGlobalProperty(prop, value) |> ignore - - project.CreateProjectInstance() - - let project = projectInstanceFromFullPath fsprojFullPath - let directory = project.Directory - - let getprop (p: Microsoft.Build.Execution.ProjectInstance) s = - let v = p.GetPropertyValue s - if String.IsNullOrWhiteSpace v then None - else Some v - - let outFileOpt = getprop project "TargetPath" - - let log = match logOpt with - | None -> [] - | Some l -> [l :> ILogger] - - project.Build([| "Build" |], log) |> ignore - - let getItems s = [ for f in project.GetItems(s) -> mkAbsolute directory f.EvaluatedInclude ] - - let projectReferences = - [ for cp in project.GetItems("ProjectReference") do - yield cp.GetMetadataValue("FullPath") - ] - - let references = - [ for i in project.GetItems("ReferencePath") do - yield i.EvaluatedInclude - for i in project.GetItems("ChildProjectReferences") do - yield i.EvaluatedInclude ] - - outFileOpt, directory, getItems, references, projectReferences, getprop project, project.FullPath - -#if !NETCOREAPP - let CrackProjectUsingOldBuildAPI (fsprojFile:string) properties logOpt = - let engine = new Microsoft.Build.BuildEngine.Engine() - Option.iter (fun l -> engine.RegisterLogger(l)) logOpt - - let bpg = Microsoft.Build.BuildEngine.BuildPropertyGroup() - - bpg.SetProperty("BuildingInsideVisualStudio", "true") - for (prop, value) in properties do - bpg.SetProperty(prop, value) - - engine.GlobalProperties <- bpg - - let projectFromFile (fsprojFile:string) = - // We seem to need to pass 12.0/4.0 in here for some unknown reason - let project = new Microsoft.Build.BuildEngine.Project(engine, engine.DefaultToolsVersion) - do project.Load(fsprojFile) - project - - let project = projectFromFile fsprojFile - project.Build([| "ResolveReferences" |]) |> ignore - let directory = Path.GetDirectoryName project.FullFileName - - let getProp (p: Microsoft.Build.BuildEngine.Project) s = - let v = p.GetEvaluatedProperty s - if String.IsNullOrWhiteSpace v then None - else Some v - - let outFileOpt = - match mkAbsoluteOpt directory (getProp project "OutDir") with - | None -> None - | Some d -> mkAbsoluteOpt d (getProp project "TargetFileName") - - let getItems s = - let fs = project.GetEvaluatedItemsByName(s) - [ for f in fs -> mkAbsolute directory f.FinalItemSpec ] - - let projectReferences = - [ for i in project.GetEvaluatedItemsByName("ProjectReference") do - yield mkAbsolute directory i.FinalItemSpec - ] - - let references = - [ for i in project.GetEvaluatedItemsByName("ReferencePath") do - yield i.FinalItemSpec - for i in project.GetEvaluatedItemsByName("ChildProjectReferences") do - yield i.FinalItemSpec ] - // Duplicate slashes sometimes appear in the output here, which prevents - // them from matching keys used in FSharpProjectOptions.ReferencedProjects - |> List.map (fun (s: string) -> s.Replace("//","/")) - - outFileOpt, directory, getItems, references, projectReferences, getProp project, project.FullFileName - -#endif - - //---------------------------------------------------------------------------- - // FSharpProjectFileInfo - // - [] - type FSharpProjectFileInfo (fsprojFileName:string, ?properties, ?enableLogging) = - let properties = defaultArg properties [] - let enableLogging = defaultArg enableLogging false - - let logOpt = - if enableLogging then - let log = new BasicStringLogger() - do log.Verbosity <- Microsoft.Build.Framework.LoggerVerbosity.Diagnostic - Some log - else - None - - let outFileOpt, directory, getItems, references, projectReferences, getProp, fsprojFullPath = - try -#if NETCOREAPP - CrackProjectUsingNewBuildAPI fsprojFileName properties logOpt - with -#else - if runningOnMono then - CrackProjectUsingOldBuildAPI fsprojFileName properties logOpt - else - CrackProjectUsingNewBuildAPI fsprojFileName properties logOpt - with - | :? Microsoft.Build.BuildEngine.InvalidProjectFileException as e -> - raise (Microsoft.Build.Exceptions.InvalidProjectFileException( - e.ProjectFile, - e.LineNumber, - e.ColumnNumber, - e.EndLineNumber, - e.EndColumnNumber, - e.Message, - e.ErrorSubcategory, - e.ErrorCode, - e.HelpKeyword)) -#endif - | :? ArgumentException as e -> raise (IO.FileNotFoundException(e.Message)) - - let logOutput = match logOpt with None -> "" | Some l -> l.Log - let pages = getItems "Page" - let embeddedResources = getItems "EmbeddedResource" - let files = getItems "Compile" - let resources = getItems "Resource" - let noaction = getItems "None" - let content = getItems "Content" - - let split (s : string option) (cs : char []) = - match s with - | None -> [||] - | Some s -> - if String.IsNullOrWhiteSpace s then [||] - else s.Split(cs, StringSplitOptions.RemoveEmptyEntries) - - let getbool (s : string option) = - match s with - | None -> false - | Some s -> - match (Boolean.TryParse s) with - | (true, result) -> result - | (false, _) -> false - - let fxVer = getProp "TargetFrameworkVersion" - let optimize = getProp "Optimize" |> getbool - let assemblyNameOpt = getProp "AssemblyName" - let tailcalls = getProp "Tailcalls" |> getbool - let outputPathOpt = getProp "OutputPath" - let docFileOpt = getProp "DocumentationFile" - let outputTypeOpt = getProp "OutputType" - let debugTypeOpt = getProp "DebugType" - let baseAddressOpt = getProp "BaseAddress" - let sigFileOpt = getProp "GenerateSignatureFile" - let keyFileOpt = getProp "KeyFile" - let pdbFileOpt = getProp "PdbFile" - let platformOpt = getProp "Platform" - let targetTypeOpt = getProp "TargetType" - let versionFileOpt = getProp "VersionFile" - let targetProfileOpt = getProp "TargetProfile" - let warnLevelOpt = getProp "Warn" - let subsystemVersionOpt = getProp "SubsystemVersion" - let win32ResOpt = getProp "Win32ResourceFile" - let heOpt = getProp "HighEntropyVA" |> getbool - let win32ManifestOpt = getProp "Win32ManifestFile" - let debugSymbols = getProp "DebugSymbols" |> getbool - let prefer32bit = getProp "Prefer32Bit" |> getbool - let warnAsError = getProp "TreatWarningsAsErrors" |> getbool - let defines = split (getProp "DefineConstants") [| ';'; ','; ' ' |] - let nowarn = split (getProp "NoWarn") [| ';'; ','; ' ' |] - let warningsAsError = split (getProp "WarningsAsErrors") [| ';'; ','; ' ' |] - let libPaths = split (getProp "ReferencePath") [| ';'; ',' |] - let otherFlags = split (getProp "OtherFlags") [| ' ' |] - let isLib = (outputTypeOpt = Some "Library") - - let docFileOpt = - match docFileOpt with - | None -> None - | Some docFile -> Some(mkAbsolute directory docFile) - - - let options = - [ yield "--simpleresolution" - yield "--noframework" - match outFileOpt with - | None -> () - | Some outFile -> yield "--out:" + outFile - match docFileOpt with - | None -> () - | Some docFile -> yield "--doc:" + docFile - match baseAddressOpt with - | None -> () - | Some baseAddress -> yield "--baseaddress:" + baseAddress - match keyFileOpt with - | None -> () - | Some keyFile -> yield "--keyfile:" + keyFile - match sigFileOpt with - | None -> () - | Some sigFile -> yield "--sig:" + sigFile - match pdbFileOpt with - | None -> () - | Some pdbFile -> yield "--pdb:" + pdbFile - match versionFileOpt with - | None -> () - | Some versionFile -> yield "--versionfile:" + versionFile - match warnLevelOpt with - | None -> () - | Some warnLevel -> yield "--warn:" + warnLevel - match subsystemVersionOpt with - | None -> () - | Some s -> yield "--subsystemversion:" + s - if heOpt then yield "--highentropyva+" - match win32ResOpt with - | None -> () - | Some win32Res -> yield "--win32res:" + win32Res - match win32ManifestOpt with - | None -> () - | Some win32Manifest -> yield "--win32manifest:" + win32Manifest - match targetProfileOpt with - | None -> () - | Some targetProfile -> yield "--targetprofile:" + targetProfile - yield "--fullpaths" - yield "--flaterrors" - if warnAsError then yield "--warnaserror" - yield - if isLib then "--target:library" - else "--target:exe" - for symbol in defines do - if not (String.IsNullOrWhiteSpace symbol) then yield "--define:" + symbol - for nw in nowarn do - if not (String.IsNullOrWhiteSpace nw) then yield "--nowarn:" + nw - for nw in warningsAsError do - if not (String.IsNullOrWhiteSpace nw) then yield "--warnaserror:" + nw - yield if debugSymbols then "--debug+" - else "--debug-" - yield if optimize then "--optimize+" - else "--optimize-" - yield if tailcalls then "--tailcalls+" - else "--tailcalls-" - match debugTypeOpt with - | None -> () - | Some debugType -> - match debugType.ToUpperInvariant() with - | "NONE" -> () - | "PDBONLY" -> yield "--debug:pdbonly" - | "FULL" -> yield "--debug:full" - | _ -> () - match platformOpt |> Option.map (fun o -> o.ToUpperInvariant()), prefer32bit, - targetTypeOpt |> Option.map (fun o -> o.ToUpperInvariant()) with - | Some "ANYCPU", true, Some "EXE" | Some "ANYCPU", true, Some "WINEXE" -> yield "--platform:anycpu32bitpreferred" - | Some "ANYCPU", _, _ -> yield "--platform:anycpu" - | Some "X86", _, _ -> yield "--platform:x86" - | Some "X64", _, _ -> yield "--platform:x64" - | Some "ITANIUM", _, _ -> yield "--platform:Itanium" - | _ -> () - match targetTypeOpt |> Option.map (fun o -> o.ToUpperInvariant()) with - | Some "LIBRARY" -> yield "--target:library" - | Some "EXE" -> yield "--target:exe" - | Some "WINEXE" -> yield "--target:winexe" - | Some "MODULE" -> yield "--target:module" - | _ -> () - yield! otherFlags - for f in resources do - yield "--resource:" + f - for i in libPaths do - yield "--lib:" + mkAbsolute directory i - for r in references do - yield "-r:" + r - yield! files ] - - member x.Options = options - member x.FrameworkVersion = fxVer - member x.ProjectReferences = projectReferences - member x.References = references - member x.CompileFiles = files - member x.ResourceFiles = resources - member x.EmbeddedResourceFiles = embeddedResources - member x.ContentFiles = content - member x.OtherFiles = noaction - member x.PageFiles = pages - member x.OutputFile = outFileOpt - member x.Directory = directory - member x.AssemblyName = assemblyNameOpt - member x.OutputPath = outputPathOpt - member x.FullPath = fsprojFullPath - member x.LogOutput = logOutput - static member Parse(fsprojFileName:string, ?properties, ?enableLogging) = new FSharpProjectFileInfo(fsprojFileName, ?properties=properties, ?enableLogging=enableLogging) - - let getOptions file enableLogging properties = - let cache = new Dictionary<_,_>() - let rec getOptions file : Option * ProjectOptions = - match cache.TryGetValue file with - | true, option -> option - | _ -> - let parsedProject = FSharpProjectFileInfo.Parse(file, properties=properties, enableLogging=enableLogging) - - let referencedProjectOptions = - [| for file in parsedProject.ProjectReferences do - if Path.GetExtension(file) = ".fsproj" then - match getOptions file with - | Some outFile, opts -> yield outFile, opts - | None, _ -> () |] - - // Workaround for Mono 4.2, which doesn't populate the subproject - // details anymore outside of a solution context. See https://github.com/mono/mono/commit/76c6a08e730393927b6851709cdae1d397cbcc3a#diff-59afd196a55d61d5d1eaaef7bd49d1e5 - // and some explanation from the author at https://github.com/fsharp/FSharp.Compiler.Service/pull/455#issuecomment-154103963 - // - // In particular we want the output path, which we can get from - // fully parsing that project itself. We also have to specially parse - // C# referenced projects, as we don't look at them otherwise. - let referencedProjectOutputs = - if runningOnMono then - [ yield! Array.map (fun (s,_) -> "-r:" + s) referencedProjectOptions - for file in parsedProject.ProjectReferences do - let ext = Path.GetExtension(file) - if ext = ".csproj" || ext = ".vbproj" then - let parsedProject = FSharpProjectFileInfo.Parse(file, properties=properties, enableLogging=false) - match parsedProject.OutputFile with - | None -> () - | Some f -> yield "-r:" + f ] - else - [] - - // On some versions of Mono the referenced projects are already - // correctly included, so we make sure not to introduce duplicates - |> List.filter (fun r -> not (Set.contains r (set parsedProject.Options))) - - let options = { ProjectFile = file - Options = Array.ofSeq (parsedProject.Options @ referencedProjectOutputs) - ReferencedProjectOptions = referencedProjectOptions - LogOutput = parsedProject.LogOutput - Error = null } - - let result = parsedProject.OutputFile, options - cache.Add(file,result) - result - - snd (getOptions file) - - - let rec pairs l = - match l with - | [] | [_] -> [] - | x::y::rest -> (x,y) :: pairs rest - - let crackOpen (argv: string[])= - if argv.Length >= 2 then - let projectFile = argv.[0] - let enableLogging = match Boolean.TryParse(argv.[1]) with - | true, true -> true - | _ -> false - try - let props = pairs (List.ofArray argv.[2..]) - let opts = getOptions argv.[0] enableLogging props - 0, opts - with e -> - 2, { ProjectFile = projectFile; - Options = [||]; - ReferencedProjectOptions = [||]; - LogOutput = e.ToString() + " StackTrace: " + e.StackTrace - Error = e.Message + " StackTrace: " + e.StackTrace } - else - 1, { ProjectFile = ""; - Options = [||]; - ReferencedProjectOptions = [||]; - LogOutput = "At least two arguments required." - Error = null } diff --git a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index a9ef5d78b3..874bb28070 100644 --- a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -54,9 +54,6 @@ CSharpProjectAnalysis.fs - - ProjectOptionsTests.fs - StructureTests.fs @@ -103,6 +100,5 @@ - \ No newline at end of file diff --git a/fcs/FSharp.Compiler.Service.sln b/fcs/FSharp.Compiler.Service.sln index 192f8bd624..af0ed390cb 100644 --- a/fcs/FSharp.Compiler.Service.sln +++ b/fcs/FSharp.Compiler.Service.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29418.71 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{B6B68AE6-E7A4-4D43-9B34-FFA74BFE192B}" ProjectSection(SolutionItems) = preProject @@ -9,7 +9,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{B6B6 build.sh = build.sh nuget\FSharp.Compiler.Service.MSBuild.v12.nuspec = nuget\FSharp.Compiler.Service.MSBuild.v12.nuspec nuget\FSharp.Compiler.Service.nuspec = nuget\FSharp.Compiler.Service.nuspec - nuget\FSharp.Compiler.Service.ProjectCracker.nuspec = nuget\FSharp.Compiler.Service.ProjectCracker.nuspec paket.dependencies = paket.dependencies README.md = README.md RELEASE_NOTES.md = RELEASE_NOTES.md @@ -41,23 +40,19 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{0554567F EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{E396742E-B4E5-4584-A9E4-CC1A491F5BC1}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "EditorService", "samples\EditorService\EditorService.fsproj", "{A40507D6-FA48-43D3-B18A-AE3DAACE4020}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "EditorService", "samples\EditorService\EditorService.fsproj", "{A40507D6-FA48-43D3-B18A-AE3DAACE4020}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "InteractiveService", "samples\InteractiveService\InteractiveService.fsproj", "{067E95E5-E3DC-4CA7-813A-4D1E277D2D52}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "InteractiveService", "samples\InteractiveService\InteractiveService.fsproj", "{067E95E5-E3DC-4CA7-813A-4D1E277D2D52}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Tokenizer", "samples\Tokenizer\Tokenizer.fsproj", "{92793069-816F-4F69-84AC-0966F8275E65}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Tokenizer", "samples\Tokenizer\Tokenizer.fsproj", "{92793069-816F-4F69-84AC-0966F8275E65}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "UntypedTree", "samples\UntypedTree\UntypedTree.fsproj", "{C816728D-BBEA-472D-9F6C-E8913957A673}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "UntypedTree", "samples\UntypedTree\UntypedTree.fsproj", "{C816728D-BBEA-472D-9F6C-E8913957A673}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FscExe", "samples\FscExe\FscExe.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FscExe", "samples\FscExe\FscExe.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharp_Analysis", "FSharp.Compiler.Service.Tests\CSharp_Analysis\CSharp_Analysis.csproj", "{887630A3-4B1D-40EA-B8B3-2D842E9C40DB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharp_Analysis", "FSharp.Compiler.Service.Tests\CSharp_Analysis\CSharp_Analysis.csproj", "{887630A3-4B1D-40EA-B8B3-2D842E9C40DB}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsiExe", "samples\FsiExe\FsiExe.fsproj", "{F9540CA8-1CE0-4546-A23A-A461E416E95B}" -EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Service.ProjectCrackerTool", "FSharp.Compiler.Service.ProjectCrackerTool\FSharp.Compiler.Service.ProjectCrackerTool.fsproj", "{B1BDD96D-47E1-4E65-8107-FBAE23A06DB4}" -EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Service.ProjectCracker", "FSharp.Compiler.Service.ProjectCracker\FSharp.Compiler.Service.ProjectCracker.fsproj", "{893C3CD9-5AF8-4027-A667-21E62FC2C703}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FsiExe", "samples\FsiExe\FsiExe.fsproj", "{F9540CA8-1CE0-4546-A23A-A461E416E95B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{098D1C35-D0FB-4720-83DD-8002293EA237}" ProjectSection(SolutionItems) = preProject @@ -71,14 +66,13 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "package", "package", "{9020E136-794A-473F-9B1B-9623C97B7161}" ProjectSection(SolutionItems) = preProject nuget\FSharp.Compiler.Service.template = nuget\FSharp.Compiler.Service.template - nuget\projectcracker.template = nuget\projectcracker.template EndProjectSection EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Service.MSBuild.v12", "FSharp.Compiler.Service.MSBuild.v12\FSharp.Compiler.Service.MSBuild.v12.fsproj", "{8157B50E-397D-4232-A4E0-1977AFC7076D}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service.MSBuild.v12", "FSharp.Compiler.Service.MSBuild.v12\FSharp.Compiler.Service.MSBuild.v12.fsproj", "{8157B50E-397D-4232-A4E0-1977AFC7076D}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Service", "FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service", "FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Service.Tests", "FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj", "{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service.Tests", "FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj", "{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -114,14 +108,6 @@ Global {F9540CA8-1CE0-4546-A23A-A461E416E95B}.Debug|Any CPU.Build.0 = Debug|Any CPU {F9540CA8-1CE0-4546-A23A-A461E416E95B}.Release|Any CPU.ActiveCfg = Release|Any CPU {F9540CA8-1CE0-4546-A23A-A461E416E95B}.Release|Any CPU.Build.0 = Release|Any CPU - {B1BDD96D-47E1-4E65-8107-FBAE23A06DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1BDD96D-47E1-4E65-8107-FBAE23A06DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1BDD96D-47E1-4E65-8107-FBAE23A06DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B1BDD96D-47E1-4E65-8107-FBAE23A06DB4}.Release|Any CPU.Build.0 = Release|Any CPU - {893C3CD9-5AF8-4027-A667-21E62FC2C703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {893C3CD9-5AF8-4027-A667-21E62FC2C703}.Debug|Any CPU.Build.0 = Debug|Any CPU - {893C3CD9-5AF8-4027-A667-21E62FC2C703}.Release|Any CPU.ActiveCfg = Release|Any CPU - {893C3CD9-5AF8-4027-A667-21E62FC2C703}.Release|Any CPU.Build.0 = Release|Any CPU {8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8157B50E-397D-4232-A4E0-1977AFC7076D}.Debug|Any CPU.Build.0 = Debug|Any CPU {8157B50E-397D-4232-A4E0-1977AFC7076D}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/fcs/README.md b/fcs/README.md index 33f5989094..5f54c58793 100644 --- a/fcs/README.md +++ b/fcs/README.md @@ -17,8 +17,6 @@ There are subtle differences between FSharp.Compiler.Service and FSharp.Compiler - FCS has a .NET Standard 2.0 version in the nuget package -- FCS testing also tests the "Project Cracker" (see below) - - FCS doesn't add the System.ValueTuple.dll reference by default, see ``#if COMPILER_SERVICE_AS_DLL`` in compiler codebase ## Version Numbers @@ -29,7 +27,6 @@ To update the version number a global replace through fcs\... is currently neede Directory.Build.props nuget/FSharp.Compiler.Service.nuspec nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec - nuget/FSharp.Compiler.Service.ProjectCracker.nuspec RELEASE_NOTES.md ## Building, Testing, Packaging, Releases @@ -62,9 +59,8 @@ which does things like: You can push the packages if you have permissions, either automatically using ``build Release`` or manually set APIKEY=... - ..\fsharp\.nuget\nuget.exe push %HOMEDRIVE%%HOMEPATH%\Downloads\FSharp.Compiler.Service.32.0.0.nupkg %APIKEY% -Source https://nuget.org - ..\fsharp\.nuget\nuget.exe push %HOMEDRIVE%%HOMEPATH%\Downloads\FSharp.Compiler.Service.MSBuild.v12.32.0.0.nupkg %APIKEY% -Source https://nuget.org - ..\fsharp\.nuget\nuget.exe push %HOMEDRIVE%%HOMEPATH%\Downloads\FSharp.Compiler.Service.ProjectCracker.32.0.0.nupkg %APIKEY% -Source https://nuget.org + ..\fsharp\.nuget\nuget.exe push %HOMEDRIVE%%HOMEPATH%\Downloads\FSharp.Compiler.Service.33.0.1.nupkg %APIKEY% -Source https://nuget.org + ..\fsharp\.nuget\nuget.exe push %HOMEDRIVE%%HOMEPATH%\Downloads\FSharp.Compiler.Service.MSBuild.v12.33.0.1.nupkg %APIKEY% -Source https://nuget.org ### Use of Paket and FAKE @@ -82,15 +78,13 @@ Testing reuses the test files from ..\tests\service which were are also FCS test Output is in ``docs``. In the ``FSharp.Compiler.Service`` repo this is checked in and hosted as . -## The two other NuGet packages +## Other NuGet packages It also contains both the source, build, packaging and test logic for - ``FSharp.Compiler.Service.MSBuild.v12`` adds legacy MSBuild v12 support to an instance of FSharp.Compiler.Service, if exact compatibility for scripting references such as ``#r "Foo, Version=1.3.4"`` is required. -- ``FSharp.Compiler.Service.ProjectCracker`` is part of ``FsAutoComplete`` and Ionide and is used to crack old-style project formats using MSBuild. It used to be part of the FCS API. - -Both of these components are gradually becoming obsolete +These components are gradually becoming obsolete ## Engineering road map diff --git a/fcs/docsrc/content/devnotes.md b/fcs/docsrc/content/devnotes.md index 7f80660f36..98684f9f35 100644 --- a/fcs/docsrc/content/devnotes.md +++ b/fcs/docsrc/content/devnotes.md @@ -54,4 +54,4 @@ Release checklist to publish a new version on nuget.org 1. Update `RELEASE_NOTES.md` 2. Check the version numbers are correct across the source (some files duplicate them) 3. Commit and add the necessary tag to the repo -4. Publish the nupkgs for `FSharp.Compiler.Service` and `FSharp.Compiler.Service.ProjectCracker` once they appear in AppVeyor artifacts +4. Publish the nupkgs for `FSharp.Compiler.Service` once it appears in AppVeyor artifacts diff --git a/fcs/docsrc/content/project.fsx b/fcs/docsrc/content/project.fsx index a537000435..7573b7f9ba 100644 --- a/fcs/docsrc/content/project.fsx +++ b/fcs/docsrc/content/project.fsx @@ -23,7 +23,6 @@ of `InteractiveChecker`: *) // Reference F# compiler API #r "FSharp.Compiler.Service.dll" -#r "FSharp.Compiler.Service.ProjectCracker.dll" open System open System.Collections.Generic @@ -306,61 +305,6 @@ correctly and then analyze each project in turn. *) -(** -Cracking a legacy project file ------------------------------ - -F# projects normally use the '.fsproj' project file format. -A project cracking facility for legacy old-style .fsproj is provided as a separate NuGet package: -FSharp.Compiler.Service.ProjectCracker. - -Project cracking for modern project files should be done using a library such as DotNetProjInfo. -See FsAutoComplete for example code. - -The legacy NuGet package `FSharp.Compiler.Service.ProjectCracker` contains a -library `FSharp.Compiler.Service.ProjectCracker.dll`, which should be -referenced by your application directly, and an executable -`FSharp.Compiler.Service.ProjectCrackerTool.exe`, which should be copied -into the output folder of your application by the build process. If -you install using Paket or NuGet, then this will be configured for you -automatically. If not, you should reference the provided `.targets` -file manually in your application. This can be found in the NuGet -package at `build/net461/FSharp.Compiler.Service.ProjectCrackerTool.targets`. - -The reason for this split was so the analysis of an F# project -file is performed out of process, in order that the necessary assembly -binding redirects can be applied without requiring the caller to -arrange this. In this way MSBuild versions from 4 up to 14 can be -accommodated transparently. - -In this example we get the project options for one of the -project files in the F# Compiler Service project itself - you should also be able to use this technique -for any project that builds cleanly using the command line tools 'xbuild' or 'msbuild'. - - -*) - -let projectFile = __SOURCE_DIRECTORY__ + @"/../../src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj" - -ProjectCracker.GetProjectOptionsFromProjectFile(projectFile) - - -(** - -You can also request RELEASE mode and set other build configuration parameters: - -*) - -ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Release")]) - -(** - -For debugging purposes it is also possible to obtain a detailed log from the assembly resolution process. - -*) - -let options, logs = ProjectCracker.GetProjectOptionsFromProjectFileLogged(projectFile, [("Configuration", "Release")]) - (** Summary ------- diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index 284bc72e48..b039632af0 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -1,7 +1,6 @@  #if INTERACTIVE #r "../../artifacts/bin/fcs/net461/FSharp.Compiler.Service.dll" // note, build FSharp.Compiler.Service.Tests.fsproj to generate this, this DLL has a public API so can be used from F# Interactive -#r "../../artifacts/bin/fcs/net461/FSharp.Compiler.Service.ProjectCracker.dll" #r "../../artifacts/bin/fcs/net461/nunit.framework.dll" #load "FsUnit.fs" #load "Common.fs" @@ -2956,315 +2955,4 @@ let ``Test expressions of optimized declarations stress big expressions`` () = printDeclarations None (List.ofSeq file1.Declarations) |> Seq.toList |> ignore -#if NOT_YET_ENABLED - -#if !NO_PROJECTCRACKER && !NETCOREAPP - -[] -let ``Check use of type provider that provides calls to F# code`` () = - let config = -#if DEBUG - ["Configuration", "Debug"] -#else - ["Configuration", "Release"] -#endif - let options = - ProjectCracker.GetProjectOptionsFromProjectFile (Path.Combine(Path.Combine(Path.Combine(__SOURCE_DIRECTORY__, "data"),"TestProject"),"TestProject.fsproj"), config) - - let res = - options - |> exprChecker.ParseAndCheckProject - |> Async.RunSynchronously - - Assert.AreEqual ([||], res.Errors, sprintf "Should not be errors, but: %A" res.Errors) - - let results = - [ for f in res.AssemblyContents.ImplementationFiles do - for d in f.Declarations do - for line in d |> printDeclaration None do - yield line ] - - results |> List.iter (printfn "%s") - - results |> shouldEqual - ["type TestProject"; "type AssemblyInfo"; "type TestProject"; "type T"; - """type Class1"""; - """member .ctor(unitVar0) = (new Object(); ()) @ (5,5--5,11)"""; - """member get_X1(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothing () @ (6,21--6,36)""" - """member get_X2(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingGeneric (3) @ (7,21--7,43)""" - """member get_X3(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingOneArg (3) @ (8,21--8,42)""" - """member get_X4(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in C.DoNothing () @ (9,21--9,41)""" - """member get_X5(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in C.DoNothingGeneric (3) @ (10,21--10,48)""" - """member get_X6(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in C.DoNothingOneArg (3) @ (11,21--11,47)""" - """member get_X7(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in C.DoNothingTwoArg (new C(),3) @ (12,21--12,47)""" - """member get_X8(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new C().InstanceDoNothing() @ (13,21--13,49)""" - """member get_X9(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new C().InstanceDoNothingGeneric(3) @ (14,21--14,56)""" - """member get_X10(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new C().InstanceDoNothingOneArg(3) @ (15,22--15,56)""" - """member get_X11(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new C().InstanceDoNothingTwoArg(new C(),3) @ (16,22--16,56)""" - """member get_X12(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in G`1.DoNothing () @ (17,22--17,49)""" - """member get_X13(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in G`1.DoNothingOneArg (3) @ (18,22--18,55)""" - """member get_X14(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in G`1.DoNothingTwoArg (new C(),3) @ (19,22--19,55)""" - """member get_X15(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in let matchValue: Microsoft.FSharp.Core.Option = FSharpOption`1.Some (1) in (if Operators.op_Equality (matchValue.Tag,1) then let x: Microsoft.FSharp.Core.int = matchValue.get_Value() in x else 0) @ (20,22--20,54)""" - """member get_X16(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in let matchValue: Microsoft.FSharp.Core.Choice = Choice1Of2(1) in (if Operators.op_Equality (matchValue.Tag,0) then 1 else 0) @ (21,22--21,54)""" - """member get_X17(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in let r: TestTP.Helper.R = {A = 1; B = 0} in (r.B <- 1; r.A) @ (22,22--22,60)""" - """member get_X18(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingTwoArg (3,4) @ (23,22--23,43)""" - """member get_X19(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingTwoArgCurried (3,4) @ (24,22--24,50)""" - """member get_X21(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in (fun arg00 -> fun arg10 -> C.DoNothingTwoArgCurried (arg00,arg10) new C()) 3 @ (25,22--25,55)""" - """member get_X23(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in (let objectArg: TestTP.Helper.C = new C() in fun arg00 -> fun arg10 -> objectArg.InstanceDoNothingTwoArgCurried(arg00,arg10) new C()) 3 @ (26,22--26,63)""" - """member get_X24(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingGenericWithConstraint (3) @ (27,22--27,58)""" - """member get_X25(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingGenericWithTypeConstraint,Microsoft.FSharp.Core.int> (FSharpList`1.Cons (3,FSharpList`1.get_Empty ())) @ (28,22--28,62)""" - """member get_X26(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.doNothingGenericWithTypeConstraint,Microsoft.FSharp.Core.int> (FSharpList`1.Cons (3,FSharpList`1.get_Empty ())) @ (29,22--29,62)""" - """member get_X27(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Helper.DoNothingReally () @ (30,22--30,53)""" - """member get_X28(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new CSharpClass(0).Method("x") :> Microsoft.FSharp.Core.Unit @ (31,22--31,40)""" - """member get_X29(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in Operators.op_Addition (new CSharpClass(0).Method2("x"),new CSharpClass(0).Method2("empty")) :> Microsoft.FSharp.Core.Unit @ (32,22--32,53)""" - """member get_X30(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new CSharpClass(0).Method3([|"x"; "y"|]) :> Microsoft.FSharp.Core.Unit @ (33,22--33,50)""" - """member get_X31(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new CSharpClass(0).GenericMethod(2) @ (34,22--34,47)""" - """member get_X32(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new CSharpClass(0).GenericMethod2(new Object()) @ (35,22--35,61)""" - """member get_X33(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new CSharpClass(0).GenericMethod3(3) @ (36,22--36,65)""" - """member get_X34(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in C.DoNothingReally () @ (37,22--37,58)""" - """member get_X35(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new C().DoNothingReallyInst() @ (38,22--38,66)""" - """member get_X36(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in (new CSharpClass(0) :> FSharp.Compiler.Service.Tests.ICSharpExplicitInterface).ExplicitMethod("x") :> Microsoft.FSharp.Core.Unit @ (39,22--39,62)""" - """member get_X37(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in (new C() :> TestTP.Helper.I).DoNothing() @ (40,22--40,46)""" - """member get_X38(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in new C().VirtualDoNothing() @ (41,22--41,45)""" - """member get_X39(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in let t: Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int = (1,2,3) in let i: Microsoft.FSharp.Core.int = t.Item1 in i @ (42,22--42,51)""" - """member get_X40(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in (moduleValue <- 1; moduleValue) @ (43,22--43,39)""" - """member get_X41(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in let x: TestTP.Helper.C = new C() in (x.set_Property(1); x.get_Property()) @ (44,22--44,41)""" - """member get_X42(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in let x: TestTP.Helper.C = new C() in (x.set_AutoProperty(1); x.get_AutoProperty()) @ (45,22--45,45)""" - """member get_X43(this) (unitVar1) = let this: Microsoft.FSharp.Core.obj = ("My internal state" :> Microsoft.FSharp.Core.obj) :> ErasedWithConstructor.Provided.MyType in (C.set_StaticAutoProperty (1); C.get_StaticAutoProperty ()) @ (46,22--46,51)""" - ] - - let members = - [ for f in res.AssemblyContents.ImplementationFiles do yield! printMembersOfDeclatations f.Declarations ] - - members |> List.iter (printfn "%s") - - members |> shouldEqual - [ - ".ctor: Microsoft.FSharp.Core.unit -> TestProject.Class1" - ".ctor: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X1: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothing: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X2: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingGeneric<'T>: 'T -> Microsoft.FSharp.Core.unit" - "get_X3: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingOneArg: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_X4: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothing: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X5: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingGeneric<'T>: 'T -> Microsoft.FSharp.Core.unit" - "get_X6: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingOneArg: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_X7: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingTwoArg: TestTP.Helper.C * Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "get_X8: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "InstanceDoNothing: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X9: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "InstanceDoNothingGeneric<'T>: 'T -> Microsoft.FSharp.Core.unit" - "get_X10: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "InstanceDoNothingOneArg: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_X11: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "InstanceDoNothingTwoArg: TestTP.Helper.C * Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "get_X12: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothing: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X13: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingOneArg: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_X14: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingTwoArg: TestTP.Helper.C * Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "get_X15: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "Some: 'T -> 'T Microsoft.FSharp.Core.option" - "op_Equality<'T when 'T : equality>: 'T -> 'T -> Microsoft.FSharp.Core.bool" - "matchValue: Microsoft.FSharp.Core.Option" - "matchValue: Microsoft.FSharp.Core.Option" - "get_Value: Microsoft.FSharp.Core.unit -> 'T" - "x: Microsoft.FSharp.Core.int" - "get_X16: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "op_Equality<'T when 'T : equality>: 'T -> 'T -> Microsoft.FSharp.Core.bool" - "matchValue: Microsoft.FSharp.Core.Choice" - "get_X17: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "r: TestTP.Helper.R" - "r: TestTP.Helper.R" - "get_X18: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingTwoArg: Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_X19: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingTwoArgCurried: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_X21: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingTwoArgCurried: TestTP.Helper.C -> Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "arg00: TestTP.Helper.C" - "arg10: Microsoft.FSharp.Core.int" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "get_X23: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "objectArg: TestTP.Helper.C" - "InstanceDoNothingTwoArgCurried: TestTP.Helper.C -> Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "arg00: TestTP.Helper.C" - "arg10: Microsoft.FSharp.Core.int" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "get_X24: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingGenericWithConstraint<'T when 'T : equality>: 'T -> Microsoft.FSharp.Core.unit" - "get_X25: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingGenericWithTypeConstraint<'T, _ when 'T :> Microsoft.FSharp.Collections.seq<'a>>: 'T -> Microsoft.FSharp.Core.unit" - "Cons: 'T * 'T Microsoft.FSharp.Collections.list -> 'T Microsoft.FSharp.Collections.list" - "get_Empty: Microsoft.FSharp.Core.unit -> 'T Microsoft.FSharp.Collections.list" - "get_X26: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "doNothingGenericWithTypeConstraint<'T, _ when 'T :> Microsoft.FSharp.Collections.seq<'a>>: 'T -> Microsoft.FSharp.Core.unit" - "Cons: 'T * 'T Microsoft.FSharp.Collections.list -> 'T Microsoft.FSharp.Collections.list" - "get_Empty: Microsoft.FSharp.Core.unit -> 'T Microsoft.FSharp.Collections.list" - "get_X27: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingReally: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X28: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "Method: Microsoft.FSharp.Core.string -> Microsoft.FSharp.Core.int" - "get_X29: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "op_Addition<^T1, ^T2, ^T3>: ^T1 -> ^T2 -> ^T3" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "Method2: Microsoft.FSharp.Core.string -> Microsoft.FSharp.Core.int" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "Method2: Microsoft.FSharp.Core.string -> Microsoft.FSharp.Core.int" - "get_X30: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "Method3: Microsoft.FSharp.Core.string Microsoft.FSharp.Core.[] -> Microsoft.FSharp.Core.int" - "get_X31: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "GenericMethod<'T>: 'T -> Microsoft.FSharp.Core.unit" - "get_X32: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "GenericMethod2<'T when 'T : class>: 'T -> Microsoft.FSharp.Core.unit" - ".ctor: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X33: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "GenericMethod3<'T when 'T :> System.IComparable<'T>>: 'T -> Microsoft.FSharp.Core.unit" - "get_X34: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - "DoNothingReally: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X35: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "DoNothingReallyInst: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X36: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "ExplicitMethod: Microsoft.FSharp.Core.string -> Microsoft.FSharp.Core.int" - "get_X37: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "DoNothing: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X38: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.Unit" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "VirtualDoNothing: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.unit" - "get_X39: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "t: Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int * Microsoft.FSharp.Core.int" - "i: Microsoft.FSharp.Core.int" - "get_X40: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "moduleValue: Microsoft.FSharp.Core.int" - "moduleValue: Microsoft.FSharp.Core.int" - "get_X41: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "x: TestTP.Helper.C" - "set_Property: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "x: TestTP.Helper.C" - "get_Property: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "get_X42: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - ".ctor: Microsoft.FSharp.Core.unit -> TestTP.Helper.C" - "x: TestTP.Helper.C" - "set_AutoProperty: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "x: TestTP.Helper.C" - "get_AutoProperty: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "get_X43: TestProject.Class1 -> Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - "set_StaticAutoProperty: Microsoft.FSharp.Core.int -> Microsoft.FSharp.Core.unit" - "get_StaticAutoProperty: Microsoft.FSharp.Core.unit -> Microsoft.FSharp.Core.int" - ] - -#endif -#endif - - -#if SELF_HOST_STRESS - - -[] -let ``Test Declarations selfhost`` () = - let projectFile = __SOURCE_DIRECTORY__ + @"/FSharp.Compiler.Service.Tests.fsproj" - // Check with Configuration = Release - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Debug")]) - let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - wholeProjectResults.Errors.Length |> shouldEqual 0 - - wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 13 - - let textOfAll = [ for file in wholeProjectResults.AssemblyContents.ImplementationFiles -> Array.ofSeq (printDeclarations None (List.ofSeq file.Declarations)) ] - - () - - -[] -let ``Test Declarations selfhost whole compiler`` () = - - Directory.SetCurrentDirectory(__SOURCE_DIRECTORY__ + @"/../../src/fsharp/FSharp.Compiler.Service") - let projectFile = __SOURCE_DIRECTORY__ + @"/../../src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj" - - //let v = FSharpProjectFileInfo.Parse(projectFile, [("Configuration", "Debug"); ("NoFsSrGenTask", "true")],enableLogging=true) - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Debug"); ("NoFsSrGenTask", "true")]) - - // For subsets of the compiler: - //let options = { options with OtherOptions = options.OtherOptions.[0..51] } - - //for x in options.OtherOptions do printfn "%s" x - - let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - (wholeProjectResults.Errors |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error)).Length |> shouldEqual 0 - - for file in (wholeProjectResults.AssemblyContents.ImplementationFiles |> List.toArray) do - for d in file.Declarations do - for s in printDeclaration None d do - () //printfn "%s" s - - // Very Quick (1 sec - expressions are computed on demand) - for file in (wholeProjectResults.AssemblyContents.ImplementationFiles |> List.toArray) do - for d in file.Declarations do - for s in exprsOfDecl d do - () - - // Quickish (~4.5 seconds for all of FSharp.Compiler.Service.dll) - #time "on" - for file in (wholeProjectResults.AssemblyContents.ImplementationFiles |> List.toArray) do - for d in file.Declarations do - for (e,m) in exprsOfDecl d do - // This forces the computation of the expression - match e with - | BasicPatterns.Const _ -> () //printfn "%s" s - | _ -> () //printfn "%s" s - -[] -let ``Test Declarations selfhost FSharp.Core`` () = - - Directory.SetCurrentDirectory(__SOURCE_DIRECTORY__ + @"/../../../fsharp/src/fsharp/FSharp.Core") - let projectFile = __SOURCE_DIRECTORY__ + @"/../../../fsharp/src/fsharp/FSharp.Core/FSharp.Core.fsproj" - - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Debug")]) - - let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - //(wholeProjectResults.Errors |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error)).Length |> shouldEqual 0 - - for file in (wholeProjectResults.AssemblyContents.ImplementationFiles |> List.toArray) do - for d in file.Declarations do - for s in printDeclaration (Some (HashSet [])) d do - printfn "%s" s - - #time "on" - - for file in (wholeProjectResults.AssemblyContents.ImplementationFiles |> List.toArray) do - for d in file.Declarations do - for (e,m) in exprsOfDecl d do - // This forces the computation of the expression - match e with - | BasicPatterns.Const _ -> () - | _ -> () - -#endif diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index a4ba694cfa..ac5df3f1c7 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -823,7 +823,6 @@ let ``Test max memory gets triggered`` () = [] #endif let ``Type provider project references should not throw exceptions`` () = - //let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Debug")]) let options = {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/TypeProviderConsole.fsproj"; ProjectId = None @@ -915,7 +914,6 @@ let ``Type provider project references should not throw exceptions`` () = [] #endif let ``Projects creating generated types should not utilize cross-project-references but should still analyze oK once project is built`` () = - //let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Debug")]) let options = {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/TestConsole.fsproj"; diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs deleted file mode 100644 index ed30de97dc..0000000000 --- a/tests/service/ProjectOptionsTests.fs +++ /dev/null @@ -1,578 +0,0 @@ -#if INTERACTIVE -#r "../../artifacts/bin/fcs/net461/FSharp.Compiler.Service.dll" // note, build FSharp.Compiler.Service.Tests.fsproj to generate this, this DLL has a public API so can be used from F# Interactive -#r "../../artifacts/bin/fcs/net461/FSharp.Compiler.Service.ProjectCracker.dll" -#r "../../artifacts/bin/fcs/net461/nunit.framework.dll" -#load "FsUnit.fs" -#load "Common.fs" -#else -module FSharp.Compiler.Service.Tests.ProjectOptionsTests -#endif - -let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e -> false - -open System.IO -open NUnit.Framework -open FsUnit -open FSharp.Compiler.Ast -open FSharp.Compiler.SourceCodeServices - -open FSharp.Compiler.Service.Tests.Common - -#if !NO_PROJECTCRACKER && DISABLED // Disabled tests because of MSBuild API dependencies. The ProjectCracker is basically deprecated in any case - -let hasMSBuild14 = - use engine = new Microsoft.Build.Evaluation.ProjectCollection() - engine.Toolsets |> Seq.exists (fun x -> x.ToolsPath.Contains "v14.0") - -let normalizePath s = (new Uri(s)).LocalPath - -let checkOption (opts:string[]) s = - let found = "Found '"+s+"'" - (if opts |> Array.exists (fun o -> o.EndsWith(s)) then found else "Failed to find '"+s+"'") - |> shouldEqual found - -let checkOptionNotPresent (opts:string[]) s = - let found = "Found '"+s+"'" - let notFound = "Did not expect to find '"+s+"'" - (if opts |> Array.exists (fun o -> o.EndsWith(s)) then found else notFound) - |> shouldEqual notFound - -let getReferencedFilenames = Array.choose (fun (o:string) -> if o.StartsWith("-r:") then o.[3..] |> (Path.GetFileName >> Some) else None) -let getReferencedFilenamesAndContainingFolders = Array.choose (fun (o:string) -> if o.StartsWith("-r:") then o.[3..] |> (fun r -> ((r |> Path.GetFileName), (r |> Path.GetDirectoryName |> Path.GetFileName)) |> Some) else None) -let getOutputFile = Array.pick (fun (o:string) -> if o.StartsWith("--out:") then o.[6..] |> Some else None) - -let getCompiledFilenames = - Array.choose (fun (opt: string) -> - if opt.EndsWith ".fs" then - opt |> Path.GetFileName |> Some - else None) - >> Array.distinct - -(* -[] - let ``Project file parsing example 1 Default Configuration`` () = - let projectFile = __SOURCE_DIRECTORY__ + @"/FSharp.Compiler.Service.Tests.fsproj" - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile) - - checkOption options.SourceFiles "FileSystemTests.fs" - - checkOption options.OtherOptions "FSharp.Compiler.Service.dll" - checkOption options.OtherOptions "--define:TRACE" - checkOption options.OtherOptions "--define:DEBUG" - checkOption options.OtherOptions "--flaterrors" - checkOption options.OtherOptions "--simpleresolution" - checkOption options.OtherOptions "--noframework" - -[] -let ``Project file parsing example 1 Release Configuration`` () = - let projectFile = __SOURCE_DIRECTORY__ + @"/FSharp.Compiler.Service.Tests.fsproj" - // Check with Configuration = Release - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, [("Configuration", "Release")]) - - checkOption options.SourceFiles "FileSystemTests.fs" - - checkOption options.OtherOptions "FSharp.Compiler.Service.dll" - checkOption options.OtherOptions "--define:TRACE" - checkOptionNotPresent options.OtherOptions "--define:DEBUG" - checkOption options.OtherOptions "--debug:pdbonly" - -[] -let ``Project file parsing example 1 Default configuration relative path`` () = - let projectFile = "FSharp.Compiler.Service.Tests.fsproj" - Directory.SetCurrentDirectory(__SOURCE_DIRECTORY__) - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile) - - checkOption options.SourceFiles "FileSystemTests.fs" - - checkOption options.OtherOptions "FSharp.Compiler.Service.dll" - checkOption options.OtherOptions "--define:TRACE" - checkOption options.OtherOptions "--define:DEBUG" - checkOption options.OtherOptions "--flaterrors" - checkOption options.OtherOptions "--simpleresolution" - checkOption options.OtherOptions "--noframework" -*) - -[] -let ``Project file parsing VS2013_FSharp_Portable_Library_net45``() = - if (not hasMSBuild14) || runningOnMono then () else // Disabled on Mono due to lack of installed PCL reference libraries - the modern way is to reference the FSHarp.Core nuget package so this is ok - - let projectFile = __SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net45/Sample_VS2013_FSharp_Portable_Library_net45.fsproj" - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, []) - - checkOption options.OtherOptions "--targetprofile:netcore" - checkOption options.OtherOptions "--tailcalls-" - - checkOption options.OtherOptions "FSharp.Core.dll" - checkOption options.OtherOptions "Microsoft.CSharp.dll" - checkOption options.OtherOptions "System.Runtime.dll" - checkOption options.OtherOptions "System.Net.Requests.dll" - checkOption options.OtherOptions "System.Xml.XmlSerializer.dll" - -[] -let ``Project file parsing Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78``() = - if (not hasMSBuild14) || runningOnMono then () else // Disabled on Mono due to lack of installed PCL reference libraries - the modern way is to reference the FSHarp.Core nuget package so this is ok - - let projectFile = __SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78/Sample_VS2013_FSharp_Portable_Library_net451.fsproj" - Directory.SetCurrentDirectory(__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78/") - let options = ProjectCracker.GetProjectOptionsFromProjectFile(projectFile, []) - - checkOption options.OtherOptions "--targetprofile:netcore" - checkOption options.OtherOptions "--tailcalls-" - - checkOption options.OtherOptions "FSharp.Core.dll" - checkOption options.OtherOptions "Microsoft.CSharp.dll" - checkOption options.OtherOptions "System.Runtime.dll" - checkOption options.OtherOptions "System.Net.Requests.dll" - checkOption options.OtherOptions "System.Xml.XmlSerializer.dll" - -[] -let ``Project file parsing -- compile files 1``() = - let opts = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") - CollectionAssert.AreEqual (["Test1File2.fs"; "Test1File1.fs"], opts.SourceFiles |> Array.map Path.GetFileName) - CollectionAssert.IsEmpty (getCompiledFilenames opts.OtherOptions) - -[] -let ``Project file parsing -- compile files 2``() = - let opts = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") - - CollectionAssert.AreEqual (["Test2File2.fs"; "Test2File1.fs"], opts.SourceFiles |> Array.map Path.GetFileName) - CollectionAssert.IsEmpty (getCompiledFilenames opts.OtherOptions) - -[] -let ``Project file parsing -- bad project file``() = - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Malformed.fsproj") - try - ProjectCracker.GetProjectOptionsFromProjectFileLogged(f) |> ignore - failwith "Expected exception" - with e -> - Assert.That(e.Message, Contains.Substring "Could not load project") - Assert.That(e.Message, Contains.Substring "Malformed.fsproj") - -[] -let ``Project file parsing -- non-existent project file``() = - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/DoesNotExist.fsproj") - try - ProjectCracker.GetProjectOptionsFromProjectFileLogged(f, enableLogging=true) |> ignore - with e -> - Assert.That(e.Message, Contains.Substring "DoesNotExist.fsproj") - -[] -let ``Project file parsing -- output file``() = - let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") - - let expectedOutputPath = - normalizePath (__SOURCE_DIRECTORY__ + "/data/bin/Debug/Test1.dll") - - p.OtherOptions - |> getOutputFile - |> should equal expectedOutputPath - -[] -let ``Project file parsing -- references``() = - let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") - - let references = getReferencedFilenames p.OtherOptions - checkOption references "FSharp.Core.dll" - checkOption references "mscorlib.dll" - checkOption references "System.Core.dll" - checkOption references "System.dll" - printfn "Project file parsing -- references: references = %A" references - references |> should haveLength 4 - p.ReferencedProjects |> should be Empty - -[] -let ``Project file parsing -- no project references``() = - let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Test3.fsproj") - - let references = getReferencedFilenames p.OtherOptions - checkOption references "FSharp.Core.dll" - checkOption references "mscorlib.dll" - checkOption references "System.Core.dll" - checkOption references "System.dll" - p.ReferencedProjects |> should haveLength 0 - -[] -let ``Project file parsing -- 2nd level references``() = - let p,_ = ProjectCracker.GetProjectOptionsFromProjectFileLogged(__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj", enableLogging=true) - - let references = getReferencedFilenames p.OtherOptions - checkOption references "FSharp.Core.dll" - checkOption references "mscorlib.dll" - checkOption references "System.Core.dll" - checkOption references "System.dll" - checkOption references "Test1.dll" - printfn "Project file parsing -- references: references = %A" references - references |> should haveLength 5 - p.ReferencedProjects |> should haveLength 1 - (snd p.ReferencedProjects.[0]).ProjectFileName |> should contain (normalizePath (__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj")) - - -[] -let ``Project file parsing -- reference project output file``() = - let p = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/DifferingOutputDir/Dir2/Test2.fsproj") - - let expectedOutputPath = - normalizePath (__SOURCE_DIRECTORY__ + "/data/DifferingOutputDir/Dir2/OutputDir2/Test2.exe") - - p.OtherOptions - |> getOutputFile - |> should equal expectedOutputPath - - p.OtherOptions - |> Array.choose (fun (o:string) -> if o.StartsWith("-r:") then o.[3..] |> Some else None) - |> should contain (normalizePath (__SOURCE_DIRECTORY__ + @"/data/DifferingOutputDir/Dir1/OutputDir1/Test1.dll")) - -[] -let ``Project file parsing -- Tools Version 12``() = - if not hasMSBuild14 then () else - let opts = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") - checkOption (getReferencedFilenames opts.OtherOptions) "System.Core.dll" - -[] -let ``Project file parsing -- Logging``() = - if not hasMSBuild14 then () else - let projectFileName = normalizePath (__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") - let _, logMap = ProjectCracker.GetProjectOptionsFromProjectFileLogged(projectFileName, enableLogging=true) - let log = logMap.[projectFileName] - - Assert.That(log, Does.Contain("ResolveAssemblyReference")) - if runningOnMono then - Assert.That(log, Does.Contain("System.Core")) - Assert.That(log, Does.Contain("Microsoft.Build.Tasks.ResolveAssemblyReference")) - else - Assert.That(log, Does.Contain("Microsoft.Build.Tasks.Core")) - -[] -let ``Project file parsing -- FSharpProjectOptions.SourceFiles contains both fs and fsi files``() = - let projectFileName = normalizePath (__SOURCE_DIRECTORY__ + @"/data/FsAndFsiFiles.fsproj") - let options, log = ProjectCracker.GetProjectOptionsFromProjectFileLogged(projectFileName, enableLogging=true) - printfn "%A" log - let expectedSourceFiles = - [| "Test1File2.fsi" - "Test1File2.fs" - "Test1File1.fs" - "Test1File0.fsi" - "Test1File0.fs" |] - Assert.That(options.SourceFiles |> Array.map Path.GetFileName, Is.EqualTo expectedSourceFiles, "source files") - -[] -let ``Project file parsing -- Full path``() = - if not hasMSBuild14 then () else - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") - let p = ProjectCracker.GetProjectOptionsFromProjectFile(f) - p.ProjectFileName |> should equal f - -[] -let ``Project file parsing -- project references``() = - let f1 = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Test1.fsproj") - let f2 = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") - let options = ProjectCracker.GetProjectOptionsFromProjectFile(f2) - - options.ReferencedProjects |> should haveLength 1 - fst options.ReferencedProjects.[0] |> should endWith "Test1.dll" - snd options.ReferencedProjects.[0] |> should equal (ProjectCracker.GetProjectOptionsFromProjectFile(f1)) - -[] -let ``Project file parsing -- multi language project``() = - if not hasMSBuild14 then () else - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/MultiLanguageProject/ConsoleApplication1.fsproj") - - let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) - - options.ReferencedProjects |> should haveLength 1 - options.ReferencedProjects.[0] |> fst |> should endWith "ConsoleApplication2.exe" - - checkOption options.OtherOptions "ConsoleApplication2.exe" - checkOption options.OtherOptions "ConsoleApplication3.exe" - -[] -let ``Project file parsing -- PCL profile7 project``() = - if (not hasMSBuild14) || runningOnMono then () else // Disabled on Mono due to lack of installed PCL reference libraries - the modern way is to reference the FSHarp.Core nuget package so this is ok - - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net45/Sample_VS2013_FSharp_Portable_Library_net45.fsproj") - - let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) - let references = - options.OtherOptions - |> getReferencedFilenames - |> Set.ofArray - references - |> shouldEqual - (set [|"FSharp.Core.dll"; "Microsoft.CSharp.dll"; "Microsoft.VisualBasic.dll"; - "System.Collections.Concurrent.dll"; "System.Collections.dll"; - "System.ComponentModel.Annotations.dll"; - "System.ComponentModel.DataAnnotations.dll"; - "System.ComponentModel.EventBasedAsync.dll"; "System.ComponentModel.dll"; - "System.Core.dll"; "System.Diagnostics.Contracts.dll"; - "System.Diagnostics.Debug.dll"; "System.Diagnostics.Tools.dll"; - "System.Diagnostics.Tracing.dll"; "System.Dynamic.Runtime.dll"; - "System.Globalization.dll"; "System.IO.Compression.dll"; "System.IO.dll"; - "System.Linq.Expressions.dll"; "System.Linq.Parallel.dll"; - "System.Linq.Queryable.dll"; "System.Linq.dll"; "System.Net.Http.dll"; - "System.Net.NetworkInformation.dll"; "System.Net.Primitives.dll"; - "System.Net.Requests.dll"; "System.Net.dll"; "System.Numerics.dll"; - "System.ObjectModel.dll"; "System.Reflection.Context.dll"; - "System.Reflection.Extensions.dll"; "System.Reflection.Primitives.dll"; - "System.Reflection.dll"; "System.Resources.ResourceManager.dll"; - "System.Runtime.Extensions.dll"; - "System.Runtime.InteropServices.WindowsRuntime.dll"; - "System.Runtime.InteropServices.dll"; "System.Runtime.Numerics.dll"; - "System.Runtime.Serialization.Json.dll"; - "System.Runtime.Serialization.Primitives.dll"; - "System.Runtime.Serialization.Xml.dll"; "System.Runtime.Serialization.dll"; - "System.Runtime.dll"; "System.Security.Principal.dll"; - "System.ServiceModel.Duplex.dll"; "System.ServiceModel.Http.dll"; - "System.ServiceModel.NetTcp.dll"; "System.ServiceModel.Primitives.dll"; - "System.ServiceModel.Security.dll"; "System.ServiceModel.Web.dll"; - "System.ServiceModel.dll"; "System.Text.Encoding.Extensions.dll"; - "System.Text.Encoding.dll"; "System.Text.RegularExpressions.dll"; - "System.Threading.Tasks.Parallel.dll"; "System.Threading.Tasks.dll"; - "System.Threading.dll"; "System.Windows.dll"; "System.Xml.Linq.dll"; - "System.Xml.ReaderWriter.dll"; "System.Xml.Serialization.dll"; - "System.Xml.XDocument.dll"; "System.Xml.XmlSerializer.dll"; "System.Xml.dll"; - "System.dll"; "mscorlib.dll"|]) - - checkOption options.OtherOptions "--targetprofile:netcore" - -[] -let ``Project file parsing -- PCL profile78 project``() = - if (not hasMSBuild14) || runningOnMono then () else // Disabled on Mono due to lack of installed PCL reference libraries - the modern way is to reference the FSHarp.Core nuget package so this is ok - - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile78/Sample_VS2013_FSharp_Portable_Library_net451.fsproj") - - let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) - let references = - options.OtherOptions - |> getReferencedFilenames - |> Set.ofArray - references - |> shouldEqual - (set [|"FSharp.Core.dll"; "Microsoft.CSharp.dll"; "System.Collections.dll"; - "System.ComponentModel.EventBasedAsync.dll"; "System.ComponentModel.dll"; - "System.Core.dll"; "System.Diagnostics.Contracts.dll"; - "System.Diagnostics.Debug.dll"; "System.Diagnostics.Tools.dll"; - "System.Dynamic.Runtime.dll"; "System.Globalization.dll"; "System.IO.dll"; - "System.Linq.Expressions.dll"; "System.Linq.Queryable.dll"; "System.Linq.dll"; - "System.Net.NetworkInformation.dll"; "System.Net.Primitives.dll"; - "System.Net.Requests.dll"; "System.Net.dll"; "System.ObjectModel.dll"; - "System.Reflection.Extensions.dll"; "System.Reflection.Primitives.dll"; - "System.Reflection.dll"; "System.Resources.ResourceManager.dll"; - "System.Runtime.Extensions.dll"; - "System.Runtime.InteropServices.WindowsRuntime.dll"; - "System.Runtime.Serialization.Json.dll"; - "System.Runtime.Serialization.Primitives.dll"; - "System.Runtime.Serialization.Xml.dll"; "System.Runtime.Serialization.dll"; - "System.Runtime.dll"; "System.Security.Principal.dll"; - "System.ServiceModel.Http.dll"; "System.ServiceModel.Primitives.dll"; - "System.ServiceModel.Security.dll"; "System.ServiceModel.Web.dll"; - "System.ServiceModel.dll"; "System.Text.Encoding.Extensions.dll"; - "System.Text.Encoding.dll"; "System.Text.RegularExpressions.dll"; - "System.Threading.Tasks.dll"; "System.Threading.dll"; "System.Windows.dll"; - "System.Xml.Linq.dll"; "System.Xml.ReaderWriter.dll"; - "System.Xml.Serialization.dll"; "System.Xml.XDocument.dll"; - "System.Xml.XmlSerializer.dll"; "System.Xml.dll"; "System.dll"; "mscorlib.dll"|]) - - checkOption options.OtherOptions "--targetprofile:netcore" - -[] -let ``Project file parsing -- PCL profile259 project``() = - if (not hasMSBuild14) || runningOnMono then () else // Disabled on Mono due to lack of installed PCL reference libraries - the modern way is to reference the FSHarp.Core nuget package so this is ok - let f = normalizePath (__SOURCE_DIRECTORY__ + @"/../projects/Sample_VS2013_FSharp_Portable_Library_net451_adjusted_to_profile259/Sample_VS2013_FSharp_Portable_Library_net451.fsproj") - - let options = ProjectCracker.GetProjectOptionsFromProjectFile(f) - let references = - options.OtherOptions - |> getReferencedFilenames - |> Set.ofArray - references - |> shouldEqual - (set [|"FSharp.Core.dll"; "Microsoft.CSharp.dll"; "System.Collections.dll"; - "System.ComponentModel.EventBasedAsync.dll"; "System.ComponentModel.dll"; - "System.Core.dll"; "System.Diagnostics.Contracts.dll"; - "System.Diagnostics.Debug.dll"; "System.Diagnostics.Tools.dll"; - "System.Dynamic.Runtime.dll"; "System.Globalization.dll"; "System.IO.dll"; - "System.Linq.Expressions.dll"; "System.Linq.Queryable.dll"; "System.Linq.dll"; - "System.Net.NetworkInformation.dll"; "System.Net.Primitives.dll"; - "System.Net.Requests.dll"; "System.Net.dll"; "System.ObjectModel.dll"; - "System.Reflection.Extensions.dll"; "System.Reflection.Primitives.dll"; - "System.Reflection.dll"; "System.Resources.ResourceManager.dll"; - "System.Runtime.Extensions.dll"; - "System.Runtime.InteropServices.WindowsRuntime.dll"; - "System.Runtime.Serialization.Json.dll"; - "System.Runtime.Serialization.Primitives.dll"; - "System.Runtime.Serialization.Xml.dll"; "System.Runtime.Serialization.dll"; - "System.Runtime.dll"; "System.Security.Principal.dll"; - "System.ServiceModel.Web.dll"; "System.Text.Encoding.Extensions.dll"; - "System.Text.Encoding.dll"; "System.Text.RegularExpressions.dll"; - "System.Threading.Tasks.dll"; "System.Threading.dll"; "System.Windows.dll"; - "System.Xml.Linq.dll"; "System.Xml.ReaderWriter.dll"; - "System.Xml.Serialization.dll"; "System.Xml.XDocument.dll"; - "System.Xml.XmlSerializer.dll"; "System.Xml.dll"; "System.dll"; "mscorlib.dll"|]) - - checkOption options.OtherOptions "--targetprofile:netcore" - -(* -[] -let ``Project file parsing -- Exe with a PCL reference``() = - - let f = normalizePath(__SOURCE_DIRECTORY__ + @"/data/sqlite-net-spike/sqlite-net-spike.fsproj") - - let p = ProjectCracker.GetProjectOptionsFromProjectFile(f) - let references = getReferencedFilenames p.OtherOptions |> set - references |> should contain "FSharp.Core.dll" - references |> should contain "SQLite.Net.Platform.Generic.dll" - references |> should contain "SQLite.Net.Platform.Win32.dll" - references |> should contain "SQLite.Net.dll" - references |> should contain "System.Collections.Concurrent.dll" - references |> should contain "System.Linq.Queryable.dll" - references |> should contain "System.Resources.ResourceManager.dll" - references |> should contain "System.Threading.dll" - references |> should contain "System.dll" - references |> should contain "mscorlib.dll" - references |> should contain "System.Reflection.dll" - references |> should contain "System.Reflection.Emit.Lightweight.dll" -*) - -[] -let ``Project file parsing -- project file contains project reference to out-of-solution project and is used in release mode``() = - let projectFileName = normalizePath(__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") - let opts = ProjectCracker.GetProjectOptionsFromProjectFile(projectFileName,[("Configuration","Release")]) - let references = getReferencedFilenamesAndContainingFolders opts.OtherOptions |> set - // Check the reference is to a release DLL - references |> should contain ("Test1.dll", "Release") - -[] -let ``Project file parsing -- project file contains project reference to out-of-solution project and is used in debug mode``() = - - let projectFileName = normalizePath(__SOURCE_DIRECTORY__ + @"/data/Test2.fsproj") - let opts = ProjectCracker.GetProjectOptionsFromProjectFile(projectFileName,[("Configuration","Debug")]) - let references = getReferencedFilenamesAndContainingFolders opts.OtherOptions |> set - // Check the reference is to a debug DLL - references |> should contain ("Test1.dll", "Debug") - -[] -let ``Project file parsing -- space in file name``() = - let opts = ProjectCracker.GetProjectOptionsFromProjectFile(__SOURCE_DIRECTORY__ + @"/data/Space in name.fsproj") - CollectionAssert.AreEqual (["Test2File2.fs"; "Test2File1.fs"], opts.SourceFiles |> Array.map Path.GetFileName) - CollectionAssert.IsEmpty (getCompiledFilenames opts.OtherOptions) - -[] -let ``Project file parsing -- report files``() = - let programFilesx86Folder = System.Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") - if not runningOnMono then - - let dirRefs = programFilesx86Folder + @"\Reference Assemblies\Microsoft\FSharp\" - printfn "Enumerating %s" dirRefs - if Directory.Exists(dirRefs) then - for f in Directory.EnumerateFiles(dirRefs,"*",SearchOption.AllDirectories) do - printfn "File: %s" f - - let dir40 = programFilesx86Folder + @"\Microsoft SDKs\F#\4.0\" - printfn "Enumerating %s" dir40 - if Directory.Exists(dir40) then - for f in Directory.EnumerateFiles(dir40,"*",SearchOption.AllDirectories) do - printfn "File: %s" f - - let dir41 = programFilesx86Folder + @"\Microsoft SDKs\F#\4.1\" - printfn "Enumerating %s" dir41 - if Directory.Exists(dir41) then - for f in Directory.EnumerateFiles(dir41,"*",SearchOption.AllDirectories) do - printfn "File: %s" f - -[] -let ``Test OtherOptions order for GetProjectOptionsFromScript`` () = - let test scriptName expected2 = - let scriptPath = __SOURCE_DIRECTORY__ + @"/data/ScriptProject/" + scriptName + ".fsx" - let scriptSource = File.ReadAllText scriptPath - let projOpts, _diagnostics = checker.GetProjectOptionsFromScript(scriptPath, scriptSource) |> Async.RunSynchronously - projOpts.OtherOptions - |> Array.map (fun s -> if s.StartsWith "--" then s else Path.GetFileNameWithoutExtension s) - |> Array.forall (fun s -> Set.contains s expected2) - |> shouldEqual true - - let otherArgs = [|"--noframework"; "--warn:3"; "System.Numerics"; "System.ValueTuple"; "mscorlib"; "FSharp.Core"; "System"; "System.Xml"; "System.Runtime.Remoting"; "System.Runtime.Serialization.Formatters.Soap"; "System.Data"; "System.Drawing"; "System.Core"; "System.Runtime"; "System.Linq"; "System.Reflection"; "System.Linq.Expressions"; "System.Threading.Tasks"; "System.IO"; "System.Net.Requests"; "System.Collections"; "System.Runtime.Numerics"; "System.Threading"; "System.Web"; "System.Web.Services"; "System.Windows.Forms"; "FSharp.Compiler.Interactive.Settings"|] |> Set.ofArray - - test "Main1" otherArgs - test "Main2" otherArgs - test "Main3" otherArgs - test "Main4" otherArgs - test "MainBad" otherArgs - - -#endif - -[] -let ``Test SourceFiles order for GetProjectOptionsFromScript`` () = // See #594 - let test scriptName expected = - let scriptPath = __SOURCE_DIRECTORY__ + @"/data/ScriptProject/" + scriptName + ".fsx" - let scriptSource = File.ReadAllText scriptPath - let projOpts, _diagnostics = - checker.GetProjectOptionsFromScript(scriptPath, FSharp.Compiler.Text.SourceText.ofString scriptSource) - |> Async.RunSynchronously - projOpts.SourceFiles - |> Array.map Path.GetFileNameWithoutExtension - |> shouldEqual expected - test "Main1" [|"BaseLib1"; "Lib1"; "Lib2"; "Main1"|] - test "Main2" [|"BaseLib1"; "Lib1"; "Lib2"; "Lib3"; "Main2"|] - test "Main3" [|"Lib3"; "Lib4"; "Main3"|] - test "Main4" [|"BaseLib2"; "Lib5"; "BaseLib1"; "Lib1"; "Lib2"; "Main4"|] - test "MainBad" [|"MainBad"|] - -[] -#if NETCOREAPP -[] -#endif -let ``Script load closure project`` () = - let fileName1 = Path.GetTempPath() + Path.DirectorySeparatorChar.ToString() + "Impl.fs" - let fileName2 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx") - - let fileSource1Text = """ -module ImplFile - -#if INTERACTIVE -let x = 42 -#endif -""" - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - let fileSource2Text = """ -#load "Impl.fs" -ImplFile.x -""" - let fileSource2 = FSharp.Compiler.Text.SourceText.ofString fileSource2Text - File.WriteAllText(fileName1, fileSource1Text) - File.WriteAllText(fileName2, fileSource2Text) - - printfn "------Starting Script load closure project----" - printfn "Getting project options..." - let projectOptions, diagnostics = - checker.GetProjectOptionsFromScript(fileName2, fileSource2, useFsiAuxLib=false) |> Async.RunSynchronously - for d in diagnostics do - printfn "ERROR: %A" d - diagnostics.IsEmpty |> shouldEqual true - - printfn "Parse and check..." - let _, checkResults = - checker.ParseAndCheckFileInProject(fileName2, 0, fileSource2, projectOptions) |> Async.RunSynchronously - - match checkResults with - | FSharpCheckFileAnswer.Succeeded results -> - results.Errors |> shouldEqual [| |] - | _ -> failwith "type check was aborted" - - printfn "Getting parsing options..." - let parsingOptions, diagnostics = checker.GetParsingOptionsFromProjectOptions(projectOptions) - for d in diagnostics do - printfn "ERROR: %A" d - diagnostics.IsEmpty |> shouldEqual true - - printfn "Parsing file..." - let parseResults = checker.ParseFile(fileName1, fileSource1, parsingOptions) |> Async.RunSynchronously - printfn "Checking parsetree..." - parseResults.ParseTree.IsSome |> shouldEqual true - printfn "Checking decls..." - match parseResults.ParseTree.Value with - | ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, _, modules, _)) -> - let (SynModuleOrNamespace (_, _, _, decls, _, _, _, _)) = modules.Head - decls.Length |> shouldEqual 1 - | _ -> failwith "got sig file" - printfn "------Finished Script load closure project----" From 9d2ae9f97f72d31cd8f7e34f12995ff8d653a46d Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Mon, 20 Jan 2020 17:38:07 +0100 Subject: [PATCH 201/214] cleanup begin / end (#8290) --- src/fsharp/IlxGen.fs | 50 +++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index c39fad857f..6b0228ea02 100755 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2786,32 +2786,30 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list, elemTy, m) sequel = GenNewArraySimple cenv cgbuf eenv (elems, elemTy, m) sequel and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = - let g = cenv.g - // Is this an upcast? - if TypeRelations.TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgty srcty && - // Do an extra check - should not be needed - TypeRelations.TypeFeasiblySubsumesType 0 g cenv.amap m tgty TypeRelations.NoCoerce srcty then - begin - if (isInterfaceTy g tgty) then ( - GenExpr cenv cgbuf eenv SPSuppress e Continue - let ilToTy = GenType cenv.amap m eenv.tyenv tgty - // Section "III.1.8.1.3 Merging stack states" of ECMA-335 implies that no unboxing - // is required, but we still push the coerced type on to the code gen buffer. - CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [] - GenSequel cenv eenv.cloc cgbuf sequel - ) else ( - GenExpr cenv cgbuf eenv SPSuppress e sequel - ) - end - else - GenExpr cenv cgbuf eenv SPSuppress e Continue - if not (isObjTy g srcty) then - let ilFromTy = GenType cenv.amap m eenv.tyenv srcty - CG.EmitInstrs cgbuf (pop 1) (Push [g.ilg.typ_Object]) [ I_box ilFromTy ] - if not (isObjTy g tgty) then - let ilToTy = GenType cenv.amap m eenv.tyenv tgty - CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [ I_unbox_any ilToTy ] - GenSequel cenv eenv.cloc cgbuf sequel + let g = cenv.g + // Is this an upcast? + if TypeRelations.TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgty srcty && + // Do an extra check - should not be needed + TypeRelations.TypeFeasiblySubsumesType 0 g cenv.amap m tgty TypeRelations.NoCoerce srcty + then + if isInterfaceTy g tgty then + GenExpr cenv cgbuf eenv SPSuppress e Continue + let ilToTy = GenType cenv.amap m eenv.tyenv tgty + // Section "III.1.8.1.3 Merging stack states" of ECMA-335 implies that no unboxing + // is required, but we still push the coerced type on to the code gen buffer. + CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [] + GenSequel cenv eenv.cloc cgbuf sequel + else + GenExpr cenv cgbuf eenv SPSuppress e sequel + else + GenExpr cenv cgbuf eenv SPSuppress e Continue + if not (isObjTy g srcty) then + let ilFromTy = GenType cenv.amap m eenv.tyenv srcty + CG.EmitInstrs cgbuf (pop 1) (Push [g.ilg.typ_Object]) [ I_box ilFromTy ] + if not (isObjTy g tgty) then + let ilToTy = GenType cenv.amap m eenv.tyenv tgty + CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [ I_unbox_any ilToTy ] + GenSequel cenv eenv.cloc cgbuf sequel and GenReraise cenv cgbuf eenv (rtnty, m) sequel = let ilReturnTy = GenType cenv.amap m eenv.tyenv rtnty From de49b596e1bf9c94c855863dd4bfb1b1bb7bbd19 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Mon, 20 Jan 2020 17:41:27 +0100 Subject: [PATCH 202/214] Calculate final only when needed (#8284) --- src/fsharp/AugmentWithHashCompare.fs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/fsharp/AugmentWithHashCompare.fs b/src/fsharp/AugmentWithHashCompare.fs index ce562dedaa..03ea427a06 100755 --- a/src/fsharp/AugmentWithHashCompare.fs +++ b/src/fsharp/AugmentWithHashCompare.fs @@ -883,11 +883,15 @@ let nonVirtualMethod c : ValMemberInfo = let unitArg = ValReprInfo.unitArgData let unaryArg = [ ValReprInfo.unnamedTopArg ] let tupArg = [ [ ValReprInfo.unnamedTopArg1; ValReprInfo.unnamedTopArg1 ] ] -let mkValSpec g (tcref: TyconRef) tmty vis slotsig methn ty argData = +let mkValSpec g (tcref: TyconRef) tmty vis slotsig methn ty argData = let m = tcref.Range let tps = tcref.Typars m - let final = isUnionTy g tmty || isRecdTy g tmty || isStructTy g tmty - let membInfo = match slotsig with None -> nonVirtualMethod tcref | Some slotsig -> slotImplMethod(final, tcref, slotsig) + let membInfo = + match slotsig with + | None -> nonVirtualMethod tcref + | Some slotsig -> + let final = isUnionTy g tmty || isRecdTy g tmty || isStructTy g tmty + slotImplMethod(final, tcref, slotsig) let inl = ValInline.Optional let args = ValReprInfo.unnamedTopArg :: argData let topValInfo = Some (ValReprInfo (ValReprInfo.InferTyparInfo tps, args, ValReprInfo.unnamedRetVal)) @@ -899,8 +903,8 @@ let MakeValsForCompareAugmentation g (tcref: TyconRef) = let tps = tcref.Typars m let vis = tcref.TypeReprAccessibility - mkValSpec g tcref tmty vis (Some(mkIComparableCompareToSlotSig g)) "CompareTo" (tps +-> (mkCompareObjTy g tmty)) unaryArg, - mkValSpec g tcref tmty vis (Some(mkGenericIComparableCompareToSlotSig g tmty)) "CompareTo" (tps +-> (mkCompareTy g tmty)) unaryArg + mkValSpec g tcref tmty vis (Some(mkIComparableCompareToSlotSig g)) "CompareTo" (tps +-> (mkCompareObjTy g tmty)) unaryArg, + mkValSpec g tcref tmty vis (Some(mkGenericIComparableCompareToSlotSig g tmty)) "CompareTo" (tps +-> (mkCompareTy g tmty)) unaryArg let MakeValsForCompareWithComparerAugmentation g (tcref: TyconRef) = let m = tcref.Range @@ -915,15 +919,15 @@ let MakeValsForEqualsAugmentation g (tcref: TyconRef) = let vis = tcref.TypeReprAccessibility let tps = tcref.Typars m - let objEqualsVal = mkValSpec g tcref tmty vis (Some(mkEqualsSlotSig g)) "Equals" (tps +-> (mkEqualsObjTy g tmty)) unaryArg - let nocEqualsVal = mkValSpec g tcref tmty vis (if tcref.Deref.IsExceptionDecl then None else Some(mkGenericIEquatableEqualsSlotSig g tmty)) "Equals" (tps +-> (mkEqualsTy g tmty)) unaryArg + let objEqualsVal = mkValSpec g tcref tmty vis (Some(mkEqualsSlotSig g)) "Equals" (tps +-> (mkEqualsObjTy g tmty)) unaryArg + let nocEqualsVal = mkValSpec g tcref tmty vis (if tcref.Deref.IsExceptionDecl then None else Some(mkGenericIEquatableEqualsSlotSig g tmty)) "Equals" (tps +-> (mkEqualsTy g tmty)) unaryArg objEqualsVal, nocEqualsVal let MakeValsForEqualityWithComparerAugmentation g (tcref: TyconRef) = let _, tmty = mkMinimalTy g tcref let vis = tcref.TypeReprAccessibility let tps = tcref.Typars tcref.Range - let objGetHashCodeVal = mkValSpec g tcref tmty vis (Some(mkGetHashCodeSlotSig g)) "GetHashCode" (tps +-> (mkHashTy g tmty)) unitArg + let objGetHashCodeVal = mkValSpec g tcref tmty vis (Some(mkGetHashCodeSlotSig g)) "GetHashCode" (tps +-> (mkHashTy g tmty)) unitArg let withcGetHashCodeVal = mkValSpec g tcref tmty vis (Some(mkIStructuralEquatableGetHashCodeSlotSig g)) "GetHashCode" (tps +-> (mkHashWithComparerTy g tmty)) unaryArg let withcEqualsVal = mkValSpec g tcref tmty vis (Some(mkIStructuralEquatableEqualsSlotSig g)) "Equals" (tps +-> (mkEqualsWithComparerTy g tmty)) tupArg objGetHashCodeVal, withcGetHashCodeVal, withcEqualsVal From ddf520b85346ff0d2374c767d2415c964de4d111 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Mon, 20 Jan 2020 18:10:36 +0100 Subject: [PATCH 203/214] tryDestAppTy instead of isAppTy (#8285) --- src/fsharp/NameResolution.fs | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 10e330f207..a63c8e6e13 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -536,11 +536,11 @@ let ExtensionPropInfosOfTypeInScope collectionSettings (infoReader:InfoReader) ( let extMemsFromHierarchy = infoReader.GetEntireTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> - if isAppTy g ty then - let tcref = tcrefOfAppTy g ty + match tryDestAppTy g ty with + | ValueSome tcref -> let extMemInfos = nenv.eIndexedExtensionMembers.Find tcref SelectPropInfosFromExtMembers infoReader ad optFilter ty m extMemInfos - else []) + | _ -> []) extMemsDangling @ extMemsFromHierarchy @@ -606,11 +606,11 @@ let ExtensionMethInfosOfTypeInScope (collectionSettings: ResultCollectionSetting infoReader.GetEntireTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> let g = infoReader.g - if isAppTy g ty then - let tcref = tcrefOfAppTy g ty + match tryDestAppTy g ty with + | ValueSome tcref -> let extValRefs = nenv.eIndexedExtensionMembers.Find tcref SelectMethInfosFromExtMembers infoReader optFilter ty m extValRefs - else []) + | _ -> []) extMemsDangling @ extMemsFromHierarchy /// Get all the available methods of a type (both intrinsic and extension) @@ -2352,10 +2352,11 @@ let rec ResolveLongIdentInTypePrim (ncenv: NameResolver) nenv lookupKind (resInf match lookupKind with | LookupKind.Expr | LookupKind.Pattern -> - if isAppTy g ty then - let tcref = tcrefOfAppTy g ty + match tryDestAppTy g ty with + | ValueSome tcref -> for uc in tcref.UnionCasesArray do addToBuffer uc.DisplayName + | _ -> () | _ -> () raze (UndefinedName (depth, FSComp.SR.undefinedNameFieldConstructorOrMember, id, suggestMembers)) @@ -2363,7 +2364,12 @@ let rec ResolveLongIdentInTypePrim (ncenv: NameResolver) nenv lookupKind (resInf and ResolveLongIdentInNestedTypes (ncenv: NameResolver) nenv lookupKind resInfo depth id m ad (id2: Ident) (rest: Ident list) findFlag typeNameResInfo tys = tys |> CollectAtMostOneResult (fun ty -> - let resInfo = if isAppTy ncenv.g ty then resInfo.AddEntity(id.idRange, tcrefOfAppTy ncenv.g ty) else resInfo + let resInfo = + match tryDestAppTy ncenv.g ty with + | ValueSome tcref -> + resInfo.AddEntity(id.idRange, tcref) + | _ -> + resInfo ResolveLongIdentInTypePrim ncenv nenv lookupKind resInfo depth m ad id2 rest findFlag typeNameResInfo ty |> AtMostOneResult m) @@ -2878,8 +2884,10 @@ let ResolvePatternLongIdent sink (ncenv: NameResolver) warnOnUpper newDef m ad n // X.ListEnumerator // does not resolve // let ResolveNestedTypeThroughAbbreviation (ncenv: NameResolver) (tcref: TyconRef) m = - if tcref.IsTypeAbbrev && tcref.Typars(m).IsEmpty && isAppTy ncenv.g tcref.TypeAbbrev.Value && isNil (argsOfAppTy ncenv.g tcref.TypeAbbrev.Value) then - tcrefOfAppTy ncenv.g tcref.TypeAbbrev.Value + if tcref.IsTypeAbbrev && tcref.Typars(m).IsEmpty then + match tryAppTy ncenv.g tcref.TypeAbbrev.Value with + | ValueSome (abbrevTcref, []) -> abbrevTcref + | _ -> tcref else tcref @@ -3527,7 +3535,10 @@ let ItemOfTyconRef ncenv m (x: TyconRef) = Item.Types (x.DisplayName, [FreshenTycon ncenv m x]) let ItemOfTy g x = - let nm = if isAppTy g x then (tcrefOfAppTy g x).DisplayName else "?" + let nm = + match tryDestAppTy g x with + | ValueSome tcref -> tcref.DisplayName + | _ -> "?" Item.Types (nm, [x]) // Filter out 'PrivateImplementationDetail' classes From f5d909a351668eccc720a2db68018aca3bee3a63 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Mon, 20 Jan 2020 19:51:02 +0100 Subject: [PATCH 204/214] cleanup begin / end (#8292) --- src/absil/ilread.fs | 40 ++++---- src/fsharp/IlxGen.fs | 211 ++++++++++++++++++++----------------------- 2 files changed, 117 insertions(+), 134 deletions(-) diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index aa4438cedf..d016c2423e 100755 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -761,37 +761,33 @@ let seekReadIndexedRows (numRows, rowReader, keyFunc, keyComparer, binaryChop, r // now read off rows, forward and backwards let mid = (low + high) / 2 // read forward - begin - let mutable fin = false - let mutable curr = mid - while not fin do - if curr > numRows then - fin <- true - else - let currrow = rowReader curr - if keyComparer (keyFunc currrow) = 0 then - res <- rowConverter currrow :: res - else - fin <- true - curr <- curr + 1 - done - end + let mutable fin = false + let mutable curr = mid + while not fin do + if curr > numRows then + fin <- true + else + let currrow = rowReader curr + if keyComparer (keyFunc currrow) = 0 then + res <- rowConverter currrow :: res + else + fin <- true + curr <- curr + 1 + res <- List.rev res // read backwards - begin - let mutable fin = false - let mutable curr = mid - 1 - while not fin do - if curr = 0 then + let mutable fin = false + let mutable curr = mid - 1 + while not fin do + if curr = 0 then fin <- true - else + else let currrow = rowReader curr if keyComparer (keyFunc currrow) = 0 then res <- rowConverter currrow :: res else fin <- true curr <- curr - 1 - end // sanity check #if CHECKING if checking then diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 6b0228ea02..bae42ad081 100755 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -3396,65 +3396,63 @@ and GenTryCatch cenv cgbuf eenv (e1, vf: Val, ef, vh: Val, eh, m, resty, spTry, let startOfFilter = CG.GenerateMark cgbuf "startOfFilter" let afterFilter = CG.GenerateDelayMark cgbuf "afterFilter" let (sequelOnBranches, afterJoin, stackAfterJoin, sequelAfterJoin) = GenJoinPoint cenv cgbuf "filter" eenv g.int_ty m EndFilter - begin - // We emit the sequence point for the 'with' keyword span on the start of the filter - // block. However the targets of the filter block pattern matching should not get any - // sequence points (they will be 'true'/'false' values indicating if the exception has been - // caught or not). - // - // The targets of the handler block DO get sequence points. Thus the expected behaviour - // for a try/with with a complex pattern is that we hit the "with" before the filter is run - // and then jump to the handler for the successful catch (or continue with exception handling - // if the filter fails) - match spWith with - | SequencePointAtWith m -> CG.EmitSeqPoint cgbuf m - | NoSequencePointAtWith -> () - - - CG.SetStack cgbuf [g.ilg.typ_Object] - let _, eenvinner = AllocLocalVal cenv cgbuf vf eenvinner None (startOfFilter, afterFilter) - CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) - - GenStoreVal cenv cgbuf eenvinner vf.Range vf - - // Why SPSuppress? Because we do not emit a sequence point at the start of the List.filter - we've already put one on - // the 'with' keyword above - GenExpr cenv cgbuf eenvinner SPSuppress ef sequelOnBranches - CG.SetMarkToHere cgbuf afterJoin - CG.SetStack cgbuf stackAfterJoin - GenSequel cenv eenv.cloc cgbuf sequelAfterJoin - end + // We emit the sequence point for the 'with' keyword span on the start of the filter + // block. However the targets of the filter block pattern matching should not get any + // sequence points (they will be 'true'/'false' values indicating if the exception has been + // caught or not). + // + // The targets of the handler block DO get sequence points. Thus the expected behaviour + // for a try/with with a complex pattern is that we hit the "with" before the filter is run + // and then jump to the handler for the successful catch (or continue with exception handling + // if the filter fails) + match spWith with + | SequencePointAtWith m -> CG.EmitSeqPoint cgbuf m + | NoSequencePointAtWith -> () + + + CG.SetStack cgbuf [g.ilg.typ_Object] + let _, eenvinner = AllocLocalVal cenv cgbuf vf eenvinner None (startOfFilter, afterFilter) + CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) + + GenStoreVal cenv cgbuf eenvinner vf.Range vf + + // Why SPSuppress? Because we do not emit a sequence point at the start of the List.filter - we've already put one on + // the 'with' keyword above + GenExpr cenv cgbuf eenvinner SPSuppress ef sequelOnBranches + CG.SetMarkToHere cgbuf afterJoin + CG.SetStack cgbuf stackAfterJoin + GenSequel cenv eenv.cloc cgbuf sequelAfterJoin let endOfFilter = CG.GenerateMark cgbuf "endOfFilter" let filterMarks = (startOfFilter.CodeLabel, endOfFilter.CodeLabel) CG.SetMarkToHere cgbuf afterFilter let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - begin - CG.SetStack cgbuf [g.ilg.typ_Object] - let _, eenvinner = AllocLocalVal cenv cgbuf vh eenvinner None (startOfHandler, afterHandler) - CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) - GenStoreVal cenv cgbuf eenvinner vh.Range vh - - GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) - end + + CG.SetStack cgbuf [g.ilg.typ_Object] + let _, eenvinner = AllocLocalVal cenv cgbuf vh eenvinner None (startOfHandler, afterHandler) + CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) + GenStoreVal cenv cgbuf eenvinner vh.Range vh + + GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) + let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) ILExceptionClause.FilterCatch(filterMarks, handlerMarks) else let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - begin - match spWith with - | SequencePointAtWith m -> CG.EmitSeqPoint cgbuf m - | NoSequencePointAtWith -> () + + match spWith with + | SequencePointAtWith m -> CG.EmitSeqPoint cgbuf m + | NoSequencePointAtWith -> () - CG.SetStack cgbuf [g.ilg.typ_Object] - let _, eenvinner = AllocLocalVal cenv cgbuf vh eenvinner None (startOfHandler, afterHandler) - CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) + CG.SetStack cgbuf [g.ilg.typ_Object] + let _, eenvinner = AllocLocalVal cenv cgbuf vh eenvinner None (startOfHandler, afterHandler) + CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) - GenStoreVal cenv cgbuf eenvinner m vh + GenStoreVal cenv cgbuf eenvinner m vh - GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) - end + GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) + let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) ILExceptionClause.TypeCatch(g.ilg.typ_Object, handlerMarks) @@ -6591,56 +6589,47 @@ and GenTopImpl cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (TImplFile (qname, else [], [] - begin - - match mainInfoOpt with - - // Final file in .EXE - | Some mainInfo -> - - // Generate an explicit main method. If necessary, make a class constructor as - // well for the bindings earlier in the file containing the entry point. - match mgbuf.GetExplicitEntryPointInfo() with - - // Final file, explicit entry point: place the code in a .cctor, and add code to main that forces the .cctor (if topCode has initialization effect). - | Some tref -> - if doesSomething then - lazyInitInfo.Add (fun fspec feefee seqpt -> - // This adds the explicit init of the .cctor to the explicit entry point main method - mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, feefee, seqpt)) - - let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) - mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) - // Final file, implicit entry point. We generate no .cctor. - // void main@() { - // - // } - | None -> - - let ilAttrs = mkILCustomAttrs (GenAttrs cenv eenv mainInfo) - if not cenv.opts.isInteractive && not doesSomething then - let errorM = m.EndRange - warning (Error(FSComp.SR.ilMainModuleEmpty(), errorM)) - - // generate main@ - let ilMainMethodDef = - let mdef = mkILNonGenericStaticMethod(mainMethName, ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL topCode) - mdef.With(isEntryPoint= true, customAttrs = ilAttrs) - - mgbuf.AddMethodDef(initClassTy.TypeRef, ilMainMethodDef) - - - // Library file: generate an optional .cctor if topCode has initialization effect - | None -> + match mainInfoOpt with + // Final file in .EXE + | Some mainInfo -> + // Generate an explicit main method. If necessary, make a class constructor as + // well for the bindings earlier in the file containing the entry point. + match mgbuf.GetExplicitEntryPointInfo() with + // Final file, explicit entry point: place the code in a .cctor, and add code to main that forces the .cctor (if topCode has initialization effect). + | Some tref -> if doesSomething then + lazyInitInfo.Add (fun fspec feefee seqpt -> + // This adds the explicit init of the .cctor to the explicit entry point main method + mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, feefee, seqpt)) - // Add the cctor let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) + // Final file, implicit entry point. We generate no .cctor. + // void main@() { + // + // } + | None -> + let ilAttrs = mkILCustomAttrs (GenAttrs cenv eenv mainInfo) + if not cenv.opts.isInteractive && not doesSomething then + let errorM = m.EndRange + warning (Error(FSComp.SR.ilMainModuleEmpty(), errorM)) + + // generate main@ + let ilMainMethodDef = + let mdef = mkILNonGenericStaticMethod(mainMethName, ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL topCode) + mdef.With(isEntryPoint= true, customAttrs = ilAttrs) - end + mgbuf.AddMethodDef(initClassTy.TypeRef, ilMainMethodDef) + + + // Library file: generate an optional .cctor if topCode has initialization effect + | None -> + if doesSomething then + // Add the cctor + let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) + mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) // Commit the directed initializations if doesSomething then @@ -7511,29 +7500,27 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = let CodegenAssembly cenv eenv mgbuf fileImpls = if not (isNil fileImpls) then - let a, b = List.frontAndBack fileImpls - let eenv = List.fold (GenTopImpl cenv mgbuf None) eenv a - let eenv = GenTopImpl cenv mgbuf cenv.opts.mainMethodInfo eenv b - - // Some constructs generate residue types and bindings. Generate these now. They don't result in any - // top-level initialization code. - begin - let extraBindings = mgbuf.GrabExtraBindingsToGenerate() - //printfn "#extraBindings = %d" extraBindings.Length - if extraBindings.Length > 0 then - let mexpr = TMDefs [ for b in extraBindings -> TMDefLet(b, range0) ] - let _emptyTopInstrs, _emptyTopCode = - CodeGenMethod cenv mgbuf ([], "unused", eenv, 0, (fun cgbuf eenv -> - let lazyInitInfo = ResizeArray() - let qname = QualifiedNameOfFile(mkSynId range0 "unused") - LocalScope "module" cgbuf (fun scopeMarks -> - let eenv = AddBindingsForModuleDef (fun cloc v -> AllocTopValWithinExpr cenv cgbuf cloc scopeMarks v) eenv.cloc eenv mexpr - GenModuleDef cenv cgbuf qname lazyInitInfo eenv mexpr)), range0) - //printfn "#_emptyTopInstrs = %d" _emptyTopInstrs.Length - () - end - - mgbuf.AddInitializeScriptsInOrderToEntryPoint() + let a, b = List.frontAndBack fileImpls + let eenv = List.fold (GenTopImpl cenv mgbuf None) eenv a + let eenv = GenTopImpl cenv mgbuf cenv.opts.mainMethodInfo eenv b + + // Some constructs generate residue types and bindings. Generate these now. They don't result in any + // top-level initialization code. + let extraBindings = mgbuf.GrabExtraBindingsToGenerate() + //printfn "#extraBindings = %d" extraBindings.Length + if extraBindings.Length > 0 then + let mexpr = TMDefs [ for b in extraBindings -> TMDefLet(b, range0) ] + let _emptyTopInstrs, _emptyTopCode = + CodeGenMethod cenv mgbuf ([], "unused", eenv, 0, (fun cgbuf eenv -> + let lazyInitInfo = ResizeArray() + let qname = QualifiedNameOfFile(mkSynId range0 "unused") + LocalScope "module" cgbuf (fun scopeMarks -> + let eenv = AddBindingsForModuleDef (fun cloc v -> AllocTopValWithinExpr cenv cgbuf cloc scopeMarks v) eenv.cloc eenv mexpr + GenModuleDef cenv cgbuf qname lazyInitInfo eenv mexpr)), range0) + //printfn "#_emptyTopInstrs = %d" _emptyTopInstrs.Length + () + + mgbuf.AddInitializeScriptsInOrderToEntryPoint() //------------------------------------------------------------------------- // When generating a module we just write into mutable From 68f731f1ba0fd7b7852ac7929170de18b0dd27ff Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Mon, 20 Jan 2020 23:12:47 +0100 Subject: [PATCH 205/214] Remove tryRawToLabel (#8293) --- src/absil/ilread.fs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index d016c2423e..b9994f6418 100755 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -2459,15 +2459,11 @@ and seekReadImplMap (ctxt: ILMetadataReader) nm midx = and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start seqpoints = let labelsOfRawOffsets = new Dictionary<_, _>(sz/2) let ilOffsetsOfLabels = new Dictionary<_, _>(sz/2) - let tryRawToLabel rawOffset = - match labelsOfRawOffsets.TryGetValue rawOffset with - | true, v -> Some v - | _ -> None - + let rawToLabel rawOffset = - match tryRawToLabel rawOffset with - | Some l -> l - | None -> + match labelsOfRawOffsets.TryGetValue rawOffset with + | true, l -> l + | _ -> let lab = generateCodeLabel() labelsOfRawOffsets.[rawOffset] <- lab lab @@ -2696,9 +2692,9 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s // the start of the next instruction referred to by the raw offset. let raw2nextLab rawOffset = let isInstrStart x = - match tryRawToLabel x with - | None -> false - | Some lab -> ilOffsetsOfLabels.ContainsKey lab + match labelsOfRawOffsets.TryGetValue x with + | true, lab -> ilOffsetsOfLabels.ContainsKey lab + | _ -> false if isInstrStart rawOffset then rawToLabel rawOffset elif isInstrStart (rawOffset+1) then rawToLabel (rawOffset+1) else failwith ("the bytecode raw offset "+string rawOffset+" did not refer either to the start or end of an instruction") From 2a5a02f137edd4f090db72158d92cdc3883e5c0b Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Tue, 21 Jan 2020 23:44:21 +0100 Subject: [PATCH 206/214] Reduce Number of isAppTy calls (#8275) --- src/fsharp/symbols/SymbolHelpers.fs | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index cec9bfaf52..48a44c8abb 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -839,19 +839,22 @@ module internal SymbolHelpers = // This may explore assemblies that are not in the reference set. // In this case just assume the item is not suppressed. protectAssemblyExploration true (fun () -> - match item with - | Item.Types(it, [ty]) -> - isAppTy g ty && - g.suppressed_types - |> List.exists (fun supp -> - let generalizedSupp = generalizedTyconRef supp - // check the display name is precisely the one we're suppressing - isAppTy g generalizedSupp && it = supp.DisplayName && - // check if they are the same logical type (after removing all abbreviations) - let tcr1 = tcrefOfAppTy g ty - let tcr2 = tcrefOfAppTy g generalizedSupp - tyconRefEq g tcr1 tcr2) - | _ -> false) + match item with + | Item.Types(it, [ty]) -> + match tryDestAppTy g ty with + | ValueSome tcr1 -> + g.suppressed_types + |> List.exists (fun supp -> + let generalizedSupp = generalizedTyconRef supp + // check the display name is precisely the one we're suppressing + match tryDestAppTy g generalizedSupp with + | ValueSome tcr2 -> + it = supp.DisplayName && + // check if they are the same logical type (after removing all abbreviations) + tyconRefEq g tcr1 tcr2 + | _ -> false) + | _ -> false + | _ -> false) /// Filter types that are explicitly suppressed from the IntelliSense (such as uppercase "FSharpList", "Option", etc.) let RemoveExplicitlySuppressed (g: TcGlobals) (items: ItemWithInst list) = From 4662a06b52d35b25c51e0b18dfb491a4d8da4dee Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Tue, 21 Jan 2020 23:52:19 +0100 Subject: [PATCH 207/214] Reduce isAppTy calls in TypeDefinitelyHasEquality (#8286) --- src/fsharp/AugmentWithHashCompare.fs | 43 ++++++++++++++++------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/fsharp/AugmentWithHashCompare.fs b/src/fsharp/AugmentWithHashCompare.fs index 03ea427a06..87917c2950 100755 --- a/src/fsharp/AugmentWithHashCompare.fs +++ b/src/fsharp/AugmentWithHashCompare.fs @@ -1075,23 +1075,28 @@ let MakeBindingsForEqualsAugmentation (g: TcGlobals) (tycon: Tycon) = elif tycon.IsRecordTycon || tycon.IsStructOrEnumTycon then mkEquals mkRecdEquality else [] -let rec TypeDefinitelyHasEquality g ty = - if isAppTy g ty && HasFSharpAttribute g g.attrib_NoEqualityAttribute (tcrefOfAppTy g ty).Attribs then +let rec TypeDefinitelyHasEquality g ty = + let appTy = tryAppTy g ty + match appTy with + | ValueSome(tcref,_) when HasFSharpAttribute g g.attrib_NoEqualityAttribute tcref.Attribs -> false - elif isTyparTy g ty && - (destTyparTy g ty).Constraints |> List.exists (function TyparConstraint.SupportsEquality _ -> true | _ -> false) then - true - else - match ty with - | SpecialEquatableHeadType g tinst -> - tinst |> List.forall (TypeDefinitelyHasEquality g) - | SpecialNotEquatableHeadType g _ -> - false - | _ -> - // The type is equatable because it has Object.Equals(...) - isAppTy g ty && - let tcref, tinst = destAppTy g ty - // Give a good error for structural types excluded from the equality relation because of their fields - not (TyconIsCandidateForAugmentationWithEquals g tcref.Deref && Option.isNone tcref.GeneratedHashAndEqualsWithComparerValues) && - // Check the (possibly inferred) structural dependencies - (tinst, tcref.TyparsNoRange) ||> List.lengthsEqAndForall2 (fun ty tp -> not tp.EqualityConditionalOn || TypeDefinitelyHasEquality g ty) + | _ -> + if isTyparTy g ty && + (destTyparTy g ty).Constraints |> List.exists (function TyparConstraint.SupportsEquality _ -> true | _ -> false) then + true + else + match ty with + | SpecialEquatableHeadType g tinst -> + tinst |> List.forall (TypeDefinitelyHasEquality g) + | SpecialNotEquatableHeadType g _ -> + false + | _ -> + // The type is equatable because it has Object.Equals(...) + match appTy with + | ValueSome(tcref,tinst) -> + // Give a good error for structural types excluded from the equality relation because of their fields + not (TyconIsCandidateForAugmentationWithEquals g tcref.Deref && Option.isNone tcref.GeneratedHashAndEqualsWithComparerValues) && + // Check the (possibly inferred) structural dependencies + (tinst, tcref.TyparsNoRange) + ||> List.lengthsEqAndForall2 (fun ty tp -> not tp.EqualityConditionalOn || TypeDefinitelyHasEquality g ty) + | _ -> false From 8b09bec6c2d31acc91235c6ea0262c223311f7e8 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Tue, 21 Jan 2020 14:56:06 -0800 Subject: [PATCH 208/214] Fixed consuming CSharp interface with an inref parameter (#8287) * Added inref interop test * Fixed inref interop when creating a slot sig * 3.1 to 3.0 --- src/fsharp/infos.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index b2a41536c5..294005f90b 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -1536,7 +1536,7 @@ type MethInfo = let formalRetTy = ImportReturnTypeFromMetadata amap m ilminfo.RawMetadata.Return.Type ilminfo.RawMetadata.Return.CustomAttrs ftinfo.ILScopeRef ftinfo.TypeInstOfRawMetadata formalMethTyparTys let formalParams = [ [ for p in ilminfo.RawMetadata.Parameters do - let paramType = ImportILTypeFromMetadata amap m ftinfo.ILScopeRef ftinfo.TypeInstOfRawMetadata formalMethTyparTys p.Type + let paramType = ImportILTypeFromMetadataWithAttributes amap m ftinfo.ILScopeRef ftinfo.TypeInstOfRawMetadata formalMethTyparTys p.Type p.CustomAttrs yield TSlotParam(p.Name, paramType, p.IsIn, p.IsOut, p.IsOptional, []) ] ] formalRetTy, formalParams #if !NO_EXTENSIONTYPING From d6d77276baaa69c194609fccb4d24d9bc84489b1 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 21 Jan 2020 14:57:41 -0800 Subject: [PATCH 209/214] Merge dependency manager and fsi script testing (#8276) * Merge dependency manager and fsi script testing * Don't forget Linux Duh!!! --- eng/Build.ps1 | 12 - eng/build.sh | 1 - .../CompletionTests.fs | 71 - .../ConsoleHelpers.fs | 64 - .../Directory.Build.props | 9 - ...ompiler.Private.Scripting.UnitTests.fsproj | 27 - .../FSharpScriptTests.fs | 286 - .../TestHelpers.fs | 19 - .../housing.csv | 20641 ---------------- 9 files changed, 21130 deletions(-) delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv diff --git a/eng/Build.ps1 b/eng/Build.ps1 index cf7ce0413c..72ea53f146 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -48,7 +48,6 @@ param ( [switch]$testCoreClr, [switch]$testCambridge, [switch]$testCompiler, - [switch]$testDependencyManager, [switch]$testFSharpCore, [switch]$testFSharpQA, [switch]$testScripting, @@ -86,7 +85,6 @@ function Print-Usage() { Write-Host " -testAll Run all tests" Write-Host " -testCambridge Run Cambridge tests" Write-Host " -testCompiler Run FSharpCompiler unit tests" - Write-Host " -testDependencyManager Run FSharp.DependencyManager.UnitTests" Write-Host " -testDesktop Run tests against full .NET Framework" Write-Host " -testCoreClr Run tests against CoreCLR" Write-Host " -testFSharpCore Run FSharpCore unit tests" @@ -128,7 +126,6 @@ function Process-Arguments() { $script:testAll = $False $script:testCambridge = $False $script:testCompiler = $False - $script:testDependencyManager = $False $script:testDesktop = $False $script:testCoreClr = $False $script:testFSharpCore = $False @@ -348,7 +345,6 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $desktopTargetFramework @@ -358,7 +354,6 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $coreclrTargetFramework @@ -398,13 +393,6 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework } - if ($testDependencyManager) { - if (-not $noVisualStudio) { - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $desktopTargetFramework - } - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $coreclrTargetFramework - } - if ($testCambridge) { if (-not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $desktopTargetFramework diff --git a/eng/build.sh b/eng/build.sh index 6340d55746..218f4ef977 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -292,7 +292,6 @@ if [[ "$test_core_clr" == true ]]; then TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj" --targetframework $coreclrtestframework - TestUsingNUnit --testproject "$repo_root/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj" --targetframework $coreclrtestframework fi diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs deleted file mode 100644 index cd7da3c7d3..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Scripting.UnitTests - -open System -open System.Threading.Tasks -open FSharp.Compiler.Scripting -open NUnit.Framework - -[] -type CompletionTests() = - - [] - member _.``Instance completions in the same submission``() = - async { - use script = new FSharpScript() - let lines = [ "let x = 1" - "x." ] - let! completions = script.GetCompletionItems(String.Join("\n", lines), 2, 2) - let matchingCompletions = completions |> Array.filter (fun d -> d.Name = "CompareTo") - Assert.AreEqual(1, matchingCompletions.Length) - } |> Async.StartAsTask :> Task - - [] - member _.``Instance completions from a previous submission``() = - async { - use script = new FSharpScript() - script.Eval("let x = 1") |> ignoreValue - let! completions = script.GetCompletionItems("x.", 1, 2) - let matchingCompletions = completions |> Array.filter (fun d -> d.Name = "CompareTo") - Assert.AreEqual(1, matchingCompletions.Length) - } |> Async.StartAsTask :> Task - - [] - member _.``Static member completions``() = - async { - use script = new FSharpScript() - let! completions = script.GetCompletionItems("System.String.", 1, 14) - let matchingCompletions = completions |> Array.filter (fun d -> d.Name = "Join") - Assert.GreaterOrEqual(matchingCompletions.Length, 1) - } |> Async.StartAsTask :> Task - - [] - member _.``Type completions from namespace``() = - async { - use script = new FSharpScript() - let! completions = script.GetCompletionItems("System.", 1, 7) - let matchingCompletions = completions |> Array.filter (fun d -> d.Name = "String") - Assert.GreaterOrEqual(matchingCompletions.Length, 1) - } |> Async.StartAsTask :> Task - - [] - member _.``Namespace completions``() = - async { - use script = new FSharpScript() - let! completions = script.GetCompletionItems("System.", 1, 7) - let matchingCompletions = completions |> Array.filter (fun d -> d.Name = "Collections") - Assert.AreEqual(1, matchingCompletions.Length) - } |> Async.StartAsTask :> Task - - [] - member _.``Extension method completions``() = - async { - use script = new FSharpScript() - let lines = [ "open System.Linq" - "let list = new System.Collections.Generic.List()" - "list." ] - let! completions = script.GetCompletionItems(String.Join("\n", lines), 3, 5) - let matchingCompletions = completions |> Array.filter (fun d -> d.Name = "Select") - Assert.AreEqual(1, matchingCompletions.Length) - } |> Async.StartAsTask :> Task diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs deleted file mode 100644 index 6df77c83b3..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs +++ /dev/null @@ -1,64 +0,0 @@ -namespace FSharp.Compiler.Scripting.UnitTests - -open System -open System.Collections.Generic -open System.IO -open System.Text - -type internal CapturedTextReader() = - inherit TextReader() - let queue = Queue() - member _.ProvideInput(text: string) = - for c in text.ToCharArray() do - queue.Enqueue(c) - override _.Peek() = - if queue.Count > 0 then queue.Peek() |> int else -1 - override _.Read() = - if queue.Count > 0 then queue.Dequeue() |> int else -1 - -type internal RedirectConsoleInput() = - let oldStdIn = Console.In - let newStdIn = new CapturedTextReader() - do Console.SetIn(newStdIn) - member _.ProvideInput(text: string) = - newStdIn.ProvideInput(text) - interface IDisposable with - member __.Dispose() = - Console.SetIn(oldStdIn) - newStdIn.Dispose() - -type internal EventedTextWriter() = - inherit TextWriter() - let sb = StringBuilder() - let lineWritten = Event() - member _.LineWritten = lineWritten.Publish - override _.Encoding = Encoding.UTF8 - override _.Write(c: char) = - if c = '\n' then - let line = - let v = sb.ToString() - if v.EndsWith("\r") then v.Substring(0, v.Length - 1) - else v - sb.Clear() |> ignore - lineWritten.Trigger(line) - else sb.Append(c) |> ignore - -type internal RedirectConsoleOutput() = - let outputProduced = Event() - let errorProduced = Event() - let oldStdOut = Console.Out - let oldStdErr = Console.Error - let newStdOut = new EventedTextWriter() - let newStdErr = new EventedTextWriter() - do newStdOut.LineWritten.Add outputProduced.Trigger - do newStdErr.LineWritten.Add errorProduced.Trigger - do Console.SetOut(newStdOut) - do Console.SetError(newStdErr) - member _.OutputProduced = outputProduced.Publish - member _.ErrorProduced = errorProduced.Publish - interface IDisposable with - member __.Dispose() = - Console.SetOut(oldStdOut) - Console.SetError(oldStdErr) - newStdOut.Dispose() - newStdErr.Dispose() diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props b/tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props deleted file mode 100644 index 7cd41381b5..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - true - - - - - diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj deleted file mode 100644 index a16969af73..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - - net472;netcoreapp3.0 - netcoreapp3.0 - Library - true - nunit - true - - - - - - - - - - - - - - - - - diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs deleted file mode 100644 index 3046c3a76f..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ /dev/null @@ -1,286 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Scripting.UnitTests - -open System -open System.Diagnostics -open System.IO -open System.Reflection -open System.Threading -open System.Threading.Tasks -open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Scripting -open NUnit.Framework - -[] -type InteractiveTests() = - - [] - member __.``Eval object value``() = - use script = new FSharpScript() - let opt = script.Eval("1+1") |> getValue - let value = opt.Value - Assert.AreEqual(typeof, value.ReflectionType) - Assert.AreEqual(2, value.ReflectionValue :?> int) - - [] - member __.``Declare and eval object value``() = - use script = new FSharpScript() - let opt = script.Eval("let x = 1 + 2\r\nx") |> getValue - let value = opt.Value - Assert.AreEqual(typeof, value.ReflectionType) - Assert.AreEqual(3, value.ReflectionValue :?> int) - - [] - member __.``Capture console input``() = - use input = new RedirectConsoleInput() - use script = new FSharpScript() - input.ProvideInput "stdin:1234\r\n" - let opt = script.Eval("System.Console.ReadLine()") |> getValue - let value = opt.Value - Assert.AreEqual(typeof, value.ReflectionType) - Assert.AreEqual("stdin:1234", value.ReflectionValue) - - [] - member __.``Capture console output/error``() = - use output = new RedirectConsoleOutput() - use script = new FSharpScript() - use sawOutputSentinel = new ManualResetEvent(false) - use sawErrorSentinel = new ManualResetEvent(false) - output.OutputProduced.Add (fun line -> if line = "stdout:1234" then sawOutputSentinel.Set() |> ignore) - output.ErrorProduced.Add (fun line -> if line = "stderr:5678" then sawErrorSentinel.Set() |> ignore) - script.Eval("printfn \"stdout:1234\"; eprintfn \"stderr:5678\"") |> ignoreValue - Assert.True(sawOutputSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see output sentinel value written") - Assert.True(sawErrorSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see error sentinel value written") - - [] - member __.``Maintain state between submissions``() = - use script = new FSharpScript() - script.Eval("let add x y = x + y") |> ignoreValue - let opt = script.Eval("add 2 3") |> getValue - let value = opt.Value - Assert.AreEqual(typeof, value.ReflectionType) - Assert.AreEqual(5, value.ReflectionValue :?> int) - - [] - member __.``Assembly reference event successful``() = - use script = new FSharpScript() - let testAssembly = "System.dll" - let mutable assemblyResolveEventCount = 0 - let mutable foundAssemblyReference = false - Event.add (fun (assembly: string) -> - assemblyResolveEventCount <- assemblyResolveEventCount + 1 - foundAssemblyReference <- String.Compare(testAssembly, Path.GetFileName(assembly), StringComparison.OrdinalIgnoreCase) = 0) - script.AssemblyReferenceAdded - script.Eval(sprintf "#r \"%s\"" testAssembly) |> ignoreValue - Assert.AreEqual(1, assemblyResolveEventCount) - Assert.True(foundAssemblyReference) - - [] - member __.``Assembly reference event unsuccessful``() = - use script = new FSharpScript() - let testAssembly = "not-an-assembly-that-can-be-found.dll" - let mutable foundAssemblyReference = false - Event.add (fun _ -> foundAssemblyReference <- true) script.AssemblyReferenceAdded - let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) - Assert.AreEqual(1, errors.Length) - Assert.False(foundAssemblyReference) - - [] - member __.``Add include path event successful``() = - use script = new FSharpScript() - let includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) - let mutable includePathEventCount = 0 - let mutable foundIncludePath = false - Event.add (fun (inc: string) -> - includePathEventCount <- includePathEventCount + 1 - foundIncludePath <- foundIncludePath || String.Compare(includePath, inc, StringComparison.OrdinalIgnoreCase) = 0) - script.IncludePathAdded - script.Eval(sprintf "#I @\"%s\"" includePath) |> ignoreValue - Assert.AreEqual(1, includePathEventCount) - Assert.True(foundIncludePath) - - [] - member __.``Add include path event unsuccessful``() = - use script = new FSharpScript() - let includePath = Path.Combine("a", "path", "that", "can't", "be", "found") - let mutable foundIncludePath = false - Event.add (fun _ -> foundIncludePath <- true) script.IncludePathAdded - let _result, errors = script.Eval(sprintf "#I @\"%s\"" includePath) - Assert.AreEqual(1, errors.Length) - Assert.False(foundIncludePath) - - [] - member _.``Compilation errors report a specific exception``() = - use script = new FSharpScript() - let result, _errors = script.Eval("abc") - match result with - | Ok(_) -> Assert.Fail("expected a failure") - | Error(ex) -> Assert.IsInstanceOf(ex) - - [] - member _.``Runtime exceptions are propagated``() = - use script = new FSharpScript() - let result, errors = script.Eval("System.IO.File.ReadAllText(\"not-a-file-path-that-can-be-found-on-disk.txt\")") - Assert.IsEmpty(errors) - match result with - | Ok(_) -> Assert.Fail("expected a failure") - | Error(ex) -> Assert.IsInstanceOf(ex) - - [] - member __.``Nuget reference fires multiple events``() = - use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) - let mutable assemblyRefCount = 0 - let mutable includeAddCount = 0 - Event.add (fun _ -> assemblyRefCount <- assemblyRefCount + 1) script.AssemblyReferenceAdded - Event.add (fun _ -> includeAddCount <- includeAddCount + 1) script.IncludePathAdded - script.Eval("#r \"nuget:include=NUnitLite, version=3.11.0\"") |> ignoreValue - script.Eval("0") |> ignoreValue - Assert.GreaterOrEqual(assemblyRefCount, 2) - Assert.GreaterOrEqual(includeAddCount, 1) - -/// Native dll resolution is not implemented on desktop -#if NETSTANDARD - [] - member __.``ML - use assembly with native dependencies``() = - let code = @" -#r ""nuget:RestoreSources=https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json"" -#r ""nuget:Microsoft.ML,version=1.4.0-preview"" -#r ""nuget:Microsoft.ML.AutoML,version=0.16.0-preview"" -#r ""nuget:Microsoft.Data.DataFrame,version=0.1.1-e191008-1"" - -open System -open System.IO -open System.Linq -open Microsoft.Data - -let Shuffle (arr:int[]) = - let rnd = Random() - for i in 0 .. arr.Length - 1 do - let r = i + rnd.Next(arr.Length - i) - let temp = arr.[r] - arr.[r] <- arr.[i] - arr.[i] <- temp - arr - -let housingPath = ""housing.csv"" -let housingData = DataFrame.ReadCsv(housingPath) -let randomIndices = (Shuffle(Enumerable.Range(0, (int (housingData.RowCount) - 1)).ToArray())) -let testSize = int (float (housingData.RowCount) * 0.1) -let trainRows = randomIndices.[testSize..] -let testRows = randomIndices.[..testSize] -let housing_train = housingData.[trainRows] - -open Microsoft.ML -open Microsoft.ML.Data -open Microsoft.ML.AutoML - -let mlContext = MLContext() -let experiment = mlContext.Auto().CreateRegressionExperiment(maxExperimentTimeInSeconds = 15u) -let result = experiment.Execute(housing_train, labelColumnName = ""median_house_value"") -let details = result.RunDetails -printfn ""%A"" result -123 -" - use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) - let mutable assemblyRefCount = 0; - Event.add (fun _ -> assemblyRefCount <- assemblyRefCount + 1) script.AssemblyReferenceAdded - let opt = script.Eval(code) |> getValue - let value = opt.Value - Assert.AreEqual(123, value.ReflectionValue :?> int32) -#endif - - [] - member __.``Simple pinvoke should not be impacted by native resolver``() = - let code = @" -open System -open System.Runtime.InteropServices - -module Imports = - [] - extern uint32 GetCurrentProcessId() - - [] - extern uint32 getpid() - -// Will throw exception if fails -if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - printfn ""Current process: %d"" (Imports.GetCurrentProcessId()) -else - printfn ""Current process: %d"" (Imports.getpid()) -123 -" - use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) - let mutable assemblyRefCount = 0; - let opt = script.Eval(code) |> getValue - let value = opt.Value - Assert.AreEqual(123, value.ReflectionValue :?> int32) - - [] - member _.``Evaluation can be cancelled``() = - use script = new FSharpScript() - let sleepTime = 10000 - let mutable result = None - let mutable wasCancelled = false - use tokenSource = new CancellationTokenSource() - let eval () = - try - result <- Some(script.Eval(sprintf "System.Threading.Thread.Sleep(%d)\n2" sleepTime, tokenSource.Token)) - // if execution gets here (which it shouldn't), the value `2` will be returned - with - | :? OperationCanceledException -> wasCancelled <- true - let sw = Stopwatch.StartNew() - let evalTask = Task.Run(eval) - // cancel and wait for finish - tokenSource.Cancel() - evalTask.GetAwaiter().GetResult() - // ensure we cancelled and didn't complete the sleep or evaluation - Assert.True(wasCancelled) - Assert.LessOrEqual(sw.ElapsedMilliseconds, sleepTime) - Assert.AreEqual(None, result) - - [] - member _.``Values bound at the root trigger an event``() = - let mutable foundX = false - let mutable foundY = false - let mutable foundCount = 0 - use script = new FSharpScript() - script.ValueBound - |> Event.add (fun (value, typ, name) -> - foundX <- foundX || (name = "x" && typ = typeof && value :?> int = 1) - foundY <- foundY || (name = "y" && typ = typeof && value :?> int = 2) - foundCount <- foundCount + 1) - let code = @" -let x = 1 -let y = 2 -" - script.Eval(code) |> ignoreValue - Assert.True(foundX) - Assert.True(foundY) - Assert.AreEqual(2, foundCount) - - [] - member _.``Values re-bound trigger an event``() = - let mutable foundXCount = 0 - use script = new FSharpScript() - script.ValueBound - |> Event.add (fun (_value, typ, name) -> - if name = "x" && typ = typeof then foundXCount <- foundXCount + 1) - script.Eval("let x = 1") |> ignoreValue - script.Eval("let x = 2") |> ignoreValue - Assert.AreEqual(2, foundXCount) - - [] - member _.``Nested let bindings don't trigger event``() = - let mutable foundInner = false - use script = new FSharpScript() - script.ValueBound - |> Event.add (fun (_value, _typ, name) -> - foundInner <- foundInner || name = "inner") - let code = @" -let x = - let inner = 1 - () -" - script.Eval(code) |> ignoreValue - Assert.False(foundInner) diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs deleted file mode 100644 index 9238ff490a..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Scripting.UnitTests - -open System -open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.SourceCodeServices - -[] -module TestHelpers = - - let getValue ((value: Result), (errors: FSharpErrorInfo[])) = - if errors.Length > 0 then - failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) - match value with - | Ok(value) -> value - | Error ex -> raise ex - - let ignoreValue = getValue >> ignore diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv b/tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv deleted file mode 100644 index d5e3fa2499..0000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/housing.csv +++ /dev/null @@ -1,20641 +0,0 @@ -longitude,latitude,housing_median_age,total_rooms,total_bedrooms,population,households,median_income,median_house_value,ocean_proximity --122.23,37.88,41.0,880.0,129.0,322.0,126.0,8.3252,452600.0,NEAR BAY --122.22,37.86,21.0,7099.0,1106.0,2401.0,1138.0,8.3014,358500.0,NEAR BAY --122.24,37.85,52.0,1467.0,190.0,496.0,177.0,7.2574,352100.0,NEAR BAY --122.25,37.85,52.0,1274.0,235.0,558.0,219.0,5.6431,341300.0,NEAR BAY --122.25,37.85,52.0,1627.0,280.0,565.0,259.0,3.8462,342200.0,NEAR BAY --122.25,37.85,52.0,919.0,213.0,413.0,193.0,4.0368,269700.0,NEAR BAY --122.25,37.84,52.0,2535.0,489.0,1094.0,514.0,3.6591,299200.0,NEAR BAY --122.25,37.84,52.0,3104.0,687.0,1157.0,647.0,3.12,241400.0,NEAR BAY --122.26,37.84,42.0,2555.0,665.0,1206.0,595.0,2.0804,226700.0,NEAR BAY --122.25,37.84,52.0,3549.0,707.0,1551.0,714.0,3.6912,261100.0,NEAR BAY --122.26,37.85,52.0,2202.0,434.0,910.0,402.0,3.2031,281500.0,NEAR BAY --122.26,37.85,52.0,3503.0,752.0,1504.0,734.0,3.2705,241800.0,NEAR BAY --122.26,37.85,52.0,2491.0,474.0,1098.0,468.0,3.075,213500.0,NEAR BAY --122.26,37.84,52.0,696.0,191.0,345.0,174.0,2.6736,191300.0,NEAR BAY --122.26,37.85,52.0,2643.0,626.0,1212.0,620.0,1.9167,159200.0,NEAR BAY --122.26,37.85,50.0,1120.0,283.0,697.0,264.0,2.125,140000.0,NEAR BAY --122.27,37.85,52.0,1966.0,347.0,793.0,331.0,2.775,152500.0,NEAR BAY --122.27,37.85,52.0,1228.0,293.0,648.0,303.0,2.1202,155500.0,NEAR BAY --122.26,37.84,50.0,2239.0,455.0,990.0,419.0,1.9911,158700.0,NEAR BAY --122.27,37.84,52.0,1503.0,298.0,690.0,275.0,2.6033,162900.0,NEAR BAY --122.27,37.85,40.0,751.0,184.0,409.0,166.0,1.3578,147500.0,NEAR BAY --122.27,37.85,42.0,1639.0,367.0,929.0,366.0,1.7135,159800.0,NEAR BAY --122.27,37.84,52.0,2436.0,541.0,1015.0,478.0,1.725,113900.0,NEAR BAY --122.27,37.84,52.0,1688.0,337.0,853.0,325.0,2.1806,99700.0,NEAR BAY --122.27,37.84,52.0,2224.0,437.0,1006.0,422.0,2.6,132600.0,NEAR BAY --122.28,37.85,41.0,535.0,123.0,317.0,119.0,2.4038,107500.0,NEAR BAY --122.28,37.85,49.0,1130.0,244.0,607.0,239.0,2.4597,93800.0,NEAR BAY --122.28,37.85,52.0,1898.0,421.0,1102.0,397.0,1.808,105500.0,NEAR BAY --122.28,37.84,50.0,2082.0,492.0,1131.0,473.0,1.6424,108900.0,NEAR BAY --122.28,37.84,52.0,729.0,160.0,395.0,155.0,1.6875,132000.0,NEAR BAY --122.28,37.84,49.0,1916.0,447.0,863.0,378.0,1.9274,122300.0,NEAR BAY --122.28,37.84,52.0,2153.0,481.0,1168.0,441.0,1.9615,115200.0,NEAR BAY --122.27,37.84,48.0,1922.0,409.0,1026.0,335.0,1.7969,110400.0,NEAR BAY --122.27,37.83,49.0,1655.0,366.0,754.0,329.0,1.375,104900.0,NEAR BAY --122.27,37.83,51.0,2665.0,574.0,1258.0,536.0,2.7303,109700.0,NEAR BAY --122.27,37.83,49.0,1215.0,282.0,570.0,264.0,1.4861,97200.0,NEAR BAY --122.27,37.83,48.0,1798.0,432.0,987.0,374.0,1.0972,104500.0,NEAR BAY --122.28,37.83,52.0,1511.0,390.0,901.0,403.0,1.4103,103900.0,NEAR BAY --122.26,37.83,52.0,1470.0,330.0,689.0,309.0,3.48,191400.0,NEAR BAY --122.26,37.83,52.0,2432.0,715.0,1377.0,696.0,2.5898,176000.0,NEAR BAY --122.26,37.83,52.0,1665.0,419.0,946.0,395.0,2.0978,155400.0,NEAR BAY --122.26,37.83,51.0,936.0,311.0,517.0,249.0,1.2852,150000.0,NEAR BAY --122.26,37.84,49.0,713.0,202.0,462.0,189.0,1.025,118800.0,NEAR BAY --122.26,37.84,52.0,950.0,202.0,467.0,198.0,3.9643,188800.0,NEAR BAY --122.26,37.83,52.0,1443.0,311.0,660.0,292.0,3.0125,184400.0,NEAR BAY --122.26,37.83,52.0,1656.0,420.0,718.0,382.0,2.6768,182300.0,NEAR BAY --122.26,37.83,50.0,1125.0,322.0,616.0,304.0,2.026,142500.0,NEAR BAY --122.27,37.82,43.0,1007.0,312.0,558.0,253.0,1.7348,137500.0,NEAR BAY --122.26,37.82,40.0,624.0,195.0,423.0,160.0,0.9506,187500.0,NEAR BAY --122.27,37.82,40.0,946.0,375.0,700.0,352.0,1.775,112500.0,NEAR BAY --122.27,37.82,21.0,896.0,453.0,735.0,438.0,0.9218,171900.0,NEAR BAY --122.27,37.82,43.0,1868.0,456.0,1061.0,407.0,1.5045,93800.0,NEAR BAY --122.27,37.82,41.0,3221.0,853.0,1959.0,720.0,1.1108,97500.0,NEAR BAY --122.27,37.82,52.0,1630.0,456.0,1162.0,400.0,1.2475,104200.0,NEAR BAY --122.28,37.82,52.0,1170.0,235.0,701.0,233.0,1.6098,87500.0,NEAR BAY --122.28,37.82,52.0,945.0,243.0,576.0,220.0,1.4113,83100.0,NEAR BAY --122.28,37.82,52.0,1238.0,288.0,622.0,259.0,1.5057,87500.0,NEAR BAY --122.28,37.82,52.0,1489.0,335.0,728.0,244.0,0.8172,85300.0,NEAR BAY --122.28,37.82,52.0,1387.0,341.0,1074.0,304.0,1.2171,80300.0,NEAR BAY --122.29,37.82,2.0,158.0,43.0,94.0,57.0,2.5625,60000.0,NEAR BAY --122.29,37.83,52.0,1121.0,211.0,554.0,187.0,3.3929,75700.0,NEAR BAY --122.29,37.82,49.0,135.0,29.0,86.0,23.0,6.1183,75000.0,NEAR BAY --122.29,37.81,50.0,760.0,190.0,377.0,122.0,0.9011,86100.0,NEAR BAY --122.3,37.81,52.0,1224.0,237.0,521.0,159.0,1.191,76100.0,NEAR BAY --122.3,37.81,48.0,828.0,182.0,392.0,133.0,2.5938,73500.0,NEAR BAY --122.3,37.81,52.0,1010.0,209.0,604.0,187.0,1.1667,78400.0,NEAR BAY --122.3,37.81,48.0,1455.0,354.0,788.0,332.0,0.8056,84400.0,NEAR BAY --122.29,37.8,52.0,1027.0,244.0,492.0,147.0,2.6094,81300.0,NEAR BAY --122.3,37.81,52.0,572.0,109.0,274.0,82.0,1.8516,85000.0,NEAR BAY --122.29,37.81,46.0,2801.0,644.0,1823.0,611.0,0.9802,129200.0,NEAR BAY --122.29,37.81,26.0,768.0,152.0,392.0,127.0,1.7719,82500.0,NEAR BAY --122.29,37.81,46.0,935.0,297.0,582.0,277.0,0.7286,95200.0,NEAR BAY --122.29,37.81,49.0,844.0,204.0,560.0,152.0,1.75,75000.0,NEAR BAY --122.29,37.81,46.0,12.0,4.0,18.0,7.0,0.4999,67500.0,NEAR BAY --122.29,37.81,20.0,835.0,161.0,290.0,133.0,2.483,137500.0,NEAR BAY --122.28,37.81,17.0,1237.0,462.0,762.0,439.0,0.9241,177500.0,NEAR BAY --122.28,37.81,36.0,2914.0,562.0,1236.0,509.0,2.4464,102100.0,NEAR BAY --122.28,37.81,19.0,1207.0,243.0,721.0,207.0,1.1111,108300.0,NEAR BAY --122.29,37.81,23.0,1745.0,374.0,1054.0,325.0,0.8026,112500.0,NEAR BAY --122.28,37.8,38.0,684.0,176.0,344.0,155.0,2.0114,131300.0,NEAR BAY --122.28,37.81,17.0,924.0,289.0,609.0,289.0,1.5,162500.0,NEAR BAY --122.27,37.81,52.0,210.0,56.0,183.0,56.0,1.1667,112500.0,NEAR BAY --122.28,37.81,52.0,340.0,97.0,200.0,87.0,1.5208,112500.0,NEAR BAY --122.28,37.81,52.0,386.0,164.0,346.0,155.0,0.8075,137500.0,NEAR BAY --122.28,37.81,35.0,948.0,184.0,467.0,169.0,1.8088,118800.0,NEAR BAY --122.28,37.81,52.0,773.0,143.0,377.0,115.0,2.4083,98200.0,NEAR BAY --122.27,37.81,40.0,880.0,451.0,582.0,380.0,0.977,118800.0,NEAR BAY --122.27,37.81,10.0,875.0,348.0,546.0,330.0,0.76,162500.0,NEAR BAY --122.27,37.8,10.0,105.0,42.0,125.0,39.0,0.9722,137500.0,NEAR BAY --122.27,37.8,52.0,249.0,78.0,396.0,85.0,1.2434,500001.0,NEAR BAY --122.27,37.8,16.0,994.0,392.0,800.0,362.0,2.0938,162500.0,NEAR BAY --122.28,37.8,52.0,215.0,87.0,904.0,88.0,0.8668,137500.0,NEAR BAY --122.28,37.8,52.0,96.0,31.0,191.0,34.0,0.75,162500.0,NEAR BAY --122.27,37.79,27.0,1055.0,347.0,718.0,302.0,2.6354,187500.0,NEAR BAY --122.27,37.8,39.0,1715.0,623.0,1327.0,467.0,1.8477,179200.0,NEAR BAY --122.26,37.8,36.0,5329.0,2477.0,3469.0,2323.0,2.0096,130000.0,NEAR BAY --122.26,37.82,31.0,4596.0,1331.0,2048.0,1180.0,2.8345,183800.0,NEAR BAY --122.26,37.81,29.0,335.0,107.0,202.0,91.0,2.0062,125000.0,NEAR BAY --122.26,37.82,22.0,3682.0,1270.0,2024.0,1250.0,1.2185,170000.0,NEAR BAY --122.26,37.82,37.0,3633.0,1085.0,1838.0,980.0,2.6104,193100.0,NEAR BAY --122.25,37.81,29.0,4656.0,1414.0,2304.0,1250.0,2.4912,257800.0,NEAR BAY --122.25,37.81,28.0,5806.0,1603.0,2563.0,1497.0,3.2177,273400.0,NEAR BAY --122.25,37.81,39.0,854.0,242.0,389.0,228.0,3.125,237500.0,NEAR BAY --122.25,37.81,52.0,2155.0,701.0,895.0,613.0,2.5795,350000.0,NEAR BAY --122.26,37.81,34.0,5871.0,1914.0,2689.0,1789.0,2.8406,335700.0,NEAR BAY --122.24,37.82,52.0,1509.0,225.0,674.0,244.0,4.9306,313400.0,NEAR BAY --122.24,37.81,52.0,2026.0,482.0,709.0,456.0,3.2727,268500.0,NEAR BAY --122.25,37.81,52.0,1758.0,460.0,686.0,422.0,3.1691,259400.0,NEAR BAY --122.24,37.82,52.0,3481.0,751.0,1444.0,718.0,3.9,275700.0,NEAR BAY --122.25,37.82,28.0,3337.0,855.0,1520.0,802.0,3.9063,225000.0,NEAR BAY --122.25,37.82,52.0,1424.0,289.0,550.0,253.0,5.0917,262500.0,NEAR BAY --122.25,37.82,32.0,3809.0,1098.0,1806.0,1022.0,2.6429,218500.0,NEAR BAY --122.25,37.82,26.0,3959.0,1196.0,1749.0,1217.0,3.0233,255000.0,NEAR BAY --122.25,37.83,52.0,2376.0,559.0,939.0,519.0,3.1484,224100.0,NEAR BAY --122.25,37.83,35.0,1613.0,428.0,675.0,422.0,3.4722,243100.0,NEAR BAY --122.25,37.83,52.0,1279.0,287.0,534.0,291.0,3.1429,231600.0,NEAR BAY --122.25,37.83,28.0,5022.0,1750.0,2558.0,1661.0,2.4234,218500.0,NEAR BAY --122.25,37.83,52.0,4190.0,1105.0,1786.0,1037.0,3.0897,234100.0,NEAR BAY --122.23,37.84,50.0,2515.0,399.0,970.0,373.0,5.8596,327600.0,NEAR BAY --122.23,37.84,47.0,3175.0,454.0,1098.0,485.0,5.2868,347600.0,NEAR BAY --122.24,37.83,41.0,2576.0,406.0,794.0,376.0,5.956,366100.0,NEAR BAY --122.24,37.85,37.0,334.0,54.0,98.0,47.0,4.9643,335000.0,NEAR BAY --122.23,37.85,52.0,2800.0,411.0,1061.0,403.0,6.3434,373600.0,NEAR BAY --122.24,37.84,52.0,3529.0,574.0,1177.0,555.0,5.1773,389500.0,NEAR BAY --122.24,37.85,52.0,2612.0,365.0,901.0,367.0,7.2354,391100.0,NEAR BAY --122.22,37.85,28.0,5287.0,1048.0,2031.0,956.0,5.457,337300.0,NEAR BAY --122.22,37.84,50.0,2935.0,473.0,1031.0,479.0,7.5,295200.0,NEAR BAY --122.21,37.84,44.0,3424.0,597.0,1358.0,597.0,6.0194,292300.0,NEAR BAY --122.21,37.83,40.0,4991.0,674.0,1616.0,654.0,7.5544,411500.0,NEAR BAY --122.2,37.84,30.0,2211.0,346.0,844.0,343.0,6.0666,311500.0,NEAR BAY --122.21,37.84,34.0,3038.0,490.0,1140.0,496.0,7.0548,325900.0,NEAR BAY --122.19,37.84,18.0,1617.0,210.0,533.0,194.0,11.6017,392600.0,NEAR BAY --122.2,37.84,35.0,2865.0,460.0,1072.0,443.0,7.4882,319300.0,NEAR BAY --122.21,37.83,34.0,5065.0,788.0,1627.0,766.0,6.8976,333300.0,NEAR BAY --122.19,37.83,28.0,1326.0,184.0,463.0,190.0,8.2049,335200.0,NEAR BAY --122.2,37.83,26.0,1589.0,223.0,542.0,211.0,8.401,351200.0,NEAR BAY --122.19,37.83,29.0,1791.0,271.0,661.0,269.0,6.8538,368900.0,NEAR BAY --122.19,37.82,32.0,1835.0,264.0,635.0,263.0,8.317,365900.0,NEAR BAY --122.2,37.82,37.0,1229.0,181.0,420.0,176.0,7.0175,366700.0,NEAR BAY --122.2,37.82,39.0,3770.0,534.0,1265.0,500.0,6.3302,362800.0,NEAR BAY --122.18,37.81,30.0,292.0,38.0,126.0,52.0,6.3624,483300.0,NEAR BAY --122.21,37.82,52.0,2375.0,333.0,813.0,350.0,7.0549,331400.0,NEAR BAY --122.2,37.81,45.0,2964.0,436.0,1067.0,426.0,6.7851,323500.0,NEAR BAY --122.21,37.8,50.0,2833.0,605.0,1260.0,552.0,2.8929,216700.0,NEAR BAY --122.21,37.8,38.0,2254.0,535.0,951.0,487.0,3.0812,233100.0,NEAR BAY --122.21,37.81,52.0,1389.0,212.0,510.0,224.0,5.2402,296400.0,NEAR BAY --122.22,37.81,52.0,1971.0,335.0,765.0,308.0,6.5217,273700.0,NEAR BAY --122.22,37.8,52.0,2183.0,465.0,1129.0,460.0,3.2632,227700.0,NEAR BAY --122.22,37.8,52.0,2286.0,464.0,1073.0,441.0,3.0298,199600.0,NEAR BAY --122.22,37.8,52.0,2721.0,541.0,1185.0,515.0,4.5428,239800.0,NEAR BAY --122.22,37.81,52.0,2024.0,339.0,756.0,340.0,4.072,270100.0,NEAR BAY --122.22,37.81,52.0,2944.0,536.0,1034.0,521.0,5.3509,302100.0,NEAR BAY --122.23,37.8,52.0,2033.0,486.0,787.0,459.0,3.1603,269500.0,NEAR BAY --122.23,37.81,52.0,1433.0,229.0,612.0,213.0,4.7708,314700.0,NEAR BAY --122.22,37.81,52.0,2927.0,402.0,1021.0,380.0,8.1564,390100.0,NEAR BAY --122.23,37.81,52.0,2315.0,292.0,861.0,258.0,8.8793,410300.0,NEAR BAY --122.24,37.81,52.0,2485.0,313.0,953.0,327.0,6.8591,352400.0,NEAR BAY --122.24,37.81,52.0,1490.0,238.0,634.0,256.0,6.0302,287300.0,NEAR BAY --122.23,37.81,52.0,2814.0,365.0,878.0,352.0,7.508,348700.0,NEAR BAY --122.24,37.81,52.0,2093.0,550.0,918.0,483.0,2.7477,243800.0,NEAR BAY --122.24,37.8,52.0,888.0,168.0,360.0,175.0,2.1944,211500.0,NEAR BAY --122.25,37.8,52.0,2087.0,510.0,1197.0,488.0,3.0149,218400.0,NEAR BAY --122.24,37.81,52.0,2513.0,502.0,1048.0,518.0,3.675,269900.0,NEAR BAY --122.25,37.81,46.0,3232.0,835.0,1373.0,747.0,3.225,218800.0,NEAR BAY --122.25,37.8,42.0,4120.0,1065.0,1715.0,1015.0,2.9345,225000.0,NEAR BAY --122.25,37.8,43.0,2364.0,792.0,1359.0,722.0,2.1429,250000.0,NEAR BAY --122.25,37.8,41.0,1471.0,469.0,1062.0,413.0,1.6121,171400.0,NEAR BAY --122.25,37.8,29.0,2468.0,864.0,1335.0,773.0,1.3929,193800.0,NEAR BAY --122.24,37.79,27.0,1632.0,492.0,1171.0,429.0,2.3173,125000.0,NEAR BAY --122.25,37.79,45.0,1786.0,526.0,1475.0,460.0,1.7772,97500.0,NEAR BAY --122.25,37.79,50.0,629.0,188.0,742.0,196.0,2.6458,125000.0,NEAR BAY --122.25,37.79,52.0,1339.0,391.0,1086.0,363.0,2.181,138800.0,NEAR BAY --122.25,37.8,36.0,1678.0,606.0,1645.0,543.0,2.2303,116700.0,NEAR BAY --122.25,37.8,43.0,2344.0,647.0,1710.0,644.0,1.6504,151800.0,NEAR BAY --122.24,37.8,52.0,996.0,228.0,731.0,228.0,2.2697,127000.0,NEAR BAY --122.24,37.8,52.0,1591.0,373.0,1118.0,347.0,2.1563,128600.0,NEAR BAY --122.24,37.8,52.0,1586.0,398.0,1006.0,335.0,2.1348,140600.0,NEAR BAY --122.24,37.8,47.0,2046.0,588.0,1213.0,554.0,2.6292,182700.0,NEAR BAY --122.23,37.8,52.0,1192.0,289.0,772.0,257.0,2.3833,146900.0,NEAR BAY --122.24,37.8,52.0,1803.0,420.0,1321.0,401.0,2.957,122800.0,NEAR BAY --122.24,37.8,49.0,2838.0,749.0,1487.0,677.0,2.5238,169300.0,NEAR BAY --122.23,37.8,52.0,783.0,184.0,488.0,186.0,1.9375,126600.0,NEAR BAY --122.23,37.8,51.0,1590.0,414.0,949.0,392.0,1.9028,127900.0,NEAR BAY --122.23,37.8,50.0,1746.0,480.0,1149.0,415.0,2.25,123500.0,NEAR BAY --122.23,37.8,52.0,1252.0,299.0,844.0,280.0,2.3929,111900.0,NEAR BAY --122.23,37.79,43.0,5963.0,1344.0,4367.0,1231.0,2.1917,112800.0,NEAR BAY --122.23,37.79,52.0,1783.0,395.0,1659.0,412.0,2.9357,107900.0,NEAR BAY --122.23,37.79,30.0,999.0,264.0,1011.0,263.0,1.8854,137500.0,NEAR BAY --122.24,37.79,39.0,1469.0,431.0,1464.0,389.0,2.1638,105500.0,NEAR BAY --122.24,37.79,47.0,1372.0,395.0,1237.0,303.0,2.125,95500.0,NEAR BAY --122.24,37.79,52.0,674.0,180.0,647.0,168.0,3.375,116100.0,NEAR BAY --122.24,37.79,43.0,1626.0,376.0,1284.0,357.0,2.2542,112200.0,NEAR BAY --122.25,37.79,51.0,175.0,43.0,228.0,55.0,2.1,75000.0,NEAR BAY --122.25,37.79,39.0,461.0,129.0,381.0,123.0,1.6,112500.0,NEAR BAY --122.25,37.79,52.0,902.0,237.0,846.0,227.0,3.625,125000.0,NEAR BAY --122.26,37.8,20.0,2373.0,779.0,1659.0,676.0,1.6929,115000.0,NEAR BAY --122.22,37.77,52.0,391.0,128.0,520.0,138.0,1.6471,95000.0,NEAR BAY --122.22,37.77,52.0,1137.0,301.0,866.0,259.0,2.59,96400.0,NEAR BAY --122.23,37.77,52.0,769.0,206.0,612.0,183.0,2.57,72000.0,NEAR BAY --122.23,37.78,52.0,472.0,146.0,415.0,126.0,2.6429,71300.0,NEAR BAY --122.23,37.78,52.0,862.0,215.0,994.0,213.0,3.0257,80800.0,NEAR BAY --122.22,37.78,50.0,1920.0,530.0,1525.0,477.0,1.4886,128800.0,NEAR BAY --122.23,37.78,43.0,1420.0,472.0,1506.0,438.0,1.9338,112500.0,NEAR BAY --122.23,37.78,52.0,986.0,258.0,1008.0,255.0,1.4844,119400.0,NEAR BAY --122.23,37.78,44.0,2340.0,825.0,2813.0,751.0,1.6009,118100.0,NEAR BAY --122.23,37.79,48.0,1696.0,396.0,1481.0,343.0,2.0375,122500.0,NEAR BAY --122.23,37.79,49.0,1175.0,217.0,859.0,219.0,2.293,106300.0,NEAR BAY --122.22,37.79,37.0,2343.0,574.0,1608.0,523.0,2.1494,132500.0,NEAR BAY --122.23,37.79,30.0,610.0,145.0,425.0,140.0,1.6198,122700.0,NEAR BAY --122.23,37.79,40.0,930.0,199.0,564.0,184.0,1.3281,113300.0,NEAR BAY --122.22,37.79,44.0,1487.0,314.0,961.0,272.0,3.5156,109500.0,NEAR BAY --122.22,37.79,52.0,3424.0,690.0,2273.0,685.0,3.9048,164700.0,NEAR BAY --122.21,37.79,52.0,762.0,190.0,600.0,195.0,3.0893,125000.0,NEAR BAY --122.22,37.79,46.0,2366.0,575.0,1647.0,527.0,2.6042,124700.0,NEAR BAY --122.22,37.79,49.0,1826.0,450.0,1201.0,424.0,2.5,136700.0,NEAR BAY --122.22,37.79,38.0,3049.0,711.0,2167.0,659.0,2.7969,141700.0,NEAR BAY --122.2,37.79,29.0,1640.0,376.0,939.0,340.0,2.8321,150000.0,NEAR BAY --122.21,37.79,47.0,1543.0,307.0,859.0,292.0,2.9583,138800.0,NEAR BAY --122.21,37.79,34.0,2364.0,557.0,1517.0,516.0,2.8365,139200.0,NEAR BAY --122.21,37.79,35.0,1745.0,409.0,1143.0,386.0,2.875,143800.0,NEAR BAY --122.21,37.8,39.0,2003.0,500.0,1109.0,464.0,3.0682,156500.0,NEAR BAY --122.21,37.8,39.0,2018.0,447.0,1221.0,446.0,3.0757,151000.0,NEAR BAY --122.2,37.8,43.0,3045.0,499.0,1115.0,455.0,4.9559,273000.0,NEAR BAY --122.2,37.8,52.0,1547.0,293.0,706.0,268.0,4.7721,217100.0,NEAR BAY --122.21,37.8,52.0,3519.0,711.0,1883.0,706.0,3.4861,187100.0,NEAR BAY --122.2,37.8,41.0,2070.0,354.0,804.0,340.0,5.1184,239600.0,NEAR BAY --122.21,37.8,48.0,1321.0,263.0,506.0,252.0,4.0977,229700.0,NEAR BAY --122.19,37.8,48.0,1694.0,259.0,610.0,238.0,4.744,257300.0,NEAR BAY --122.19,37.8,46.0,1938.0,341.0,768.0,332.0,4.2727,246900.0,NEAR BAY --122.19,37.79,50.0,968.0,195.0,462.0,184.0,2.9844,179900.0,NEAR BAY --122.2,37.79,40.0,1060.0,256.0,667.0,235.0,4.1739,169600.0,NEAR BAY --122.2,37.8,46.0,2041.0,405.0,1059.0,399.0,3.8487,203300.0,NEAR BAY --122.19,37.8,52.0,1813.0,271.0,637.0,277.0,4.0114,263400.0,NEAR BAY --122.19,37.79,45.0,2718.0,451.0,1106.0,454.0,4.6563,231800.0,NEAR BAY --122.19,37.79,28.0,3144.0,761.0,1737.0,669.0,2.9297,140500.0,NEAR BAY --122.2,37.79,35.0,1802.0,459.0,1009.0,390.0,2.3036,126000.0,NEAR BAY --122.2,37.79,49.0,882.0,195.0,737.0,210.0,2.6667,122000.0,NEAR BAY --122.2,37.79,44.0,1621.0,452.0,1354.0,491.0,2.619,134700.0,NEAR BAY --122.21,37.79,45.0,2115.0,533.0,1530.0,474.0,2.4167,139400.0,NEAR BAY --122.2,37.79,45.0,2021.0,528.0,1410.0,480.0,2.7788,115400.0,NEAR BAY --122.21,37.78,46.0,2239.0,508.0,1390.0,569.0,2.7352,137300.0,NEAR BAY --122.21,37.78,52.0,1477.0,300.0,1065.0,269.0,1.8472,137000.0,NEAR BAY --122.21,37.78,52.0,1056.0,224.0,792.0,245.0,2.6583,142600.0,NEAR BAY --122.21,37.78,49.0,898.0,244.0,779.0,245.0,3.0536,137500.0,NEAR BAY --122.22,37.78,44.0,2968.0,710.0,2269.0,610.0,2.3906,111700.0,NEAR BAY --122.21,37.78,43.0,1702.0,460.0,1227.0,407.0,1.7188,126800.0,NEAR BAY --122.21,37.78,47.0,881.0,248.0,753.0,241.0,2.625,111300.0,NEAR BAY --122.22,37.77,40.0,494.0,114.0,547.0,135.0,2.8015,114800.0,NEAR BAY --122.22,37.78,50.0,1776.0,473.0,1807.0,440.0,1.7276,102300.0,NEAR BAY --122.22,37.78,44.0,1678.0,514.0,1700.0,495.0,2.0801,131900.0,NEAR BAY --122.22,37.78,51.0,1637.0,463.0,1543.0,393.0,2.489,119100.0,NEAR BAY --122.21,37.76,52.0,1420.0,314.0,1085.0,300.0,1.7546,80600.0,NEAR BAY --122.21,37.77,52.0,591.0,173.0,353.0,137.0,4.0904,80600.0,NEAR BAY --122.21,37.77,52.0,745.0,153.0,473.0,149.0,2.6765,88800.0,NEAR BAY --122.2,37.77,49.0,2272.0,498.0,1621.0,483.0,2.4338,102400.0,NEAR BAY --122.21,37.77,46.0,1234.0,375.0,1183.0,354.0,2.3309,98700.0,NEAR BAY --122.21,37.77,43.0,1017.0,328.0,836.0,277.0,2.2604,100000.0,NEAR BAY --122.19,37.77,42.0,932.0,254.0,900.0,263.0,1.8039,92300.0,NEAR BAY --122.2,37.77,39.0,2689.0,597.0,1888.0,537.0,2.2562,94800.0,NEAR BAY --122.2,37.77,41.0,1547.0,415.0,1024.0,341.0,2.0562,102000.0,NEAR BAY --122.2,37.78,52.0,2300.0,443.0,1225.0,423.0,3.5398,158400.0,NEAR BAY --122.2,37.78,39.0,1752.0,399.0,1071.0,376.0,3.1167,121600.0,NEAR BAY --122.2,37.78,50.0,1867.0,403.0,1128.0,378.0,2.5401,129100.0,NEAR BAY --122.2,37.77,43.0,2430.0,502.0,1537.0,484.0,2.898,121400.0,NEAR BAY --122.21,37.78,44.0,1729.0,414.0,1240.0,393.0,2.3125,102800.0,NEAR BAY --122.19,37.78,52.0,1026.0,180.0,469.0,168.0,2.875,160000.0,NEAR BAY --122.19,37.77,52.0,2170.0,428.0,1086.0,425.0,3.3715,143900.0,NEAR BAY --122.19,37.77,52.0,2329.0,445.0,1144.0,417.0,3.5114,151200.0,NEAR BAY --122.19,37.78,52.0,2492.0,415.0,1109.0,375.0,4.3125,164400.0,NEAR BAY --122.19,37.78,52.0,2198.0,397.0,984.0,369.0,3.22,156500.0,NEAR BAY --122.18,37.78,33.0,142.0,31.0,575.0,47.0,3.875,225000.0,NEAR BAY --122.19,37.78,49.0,1183.0,205.0,496.0,209.0,5.2328,174200.0,NEAR BAY --122.19,37.78,52.0,1070.0,193.0,555.0,190.0,3.7262,166900.0,NEAR BAY --122.2,37.78,45.0,1766.0,332.0,869.0,327.0,4.5893,163500.0,NEAR BAY --122.18,37.79,39.0,617.0,95.0,236.0,106.0,5.2578,253000.0,NEAR BAY --122.18,37.79,41.0,1411.0,233.0,626.0,214.0,7.0875,240700.0,NEAR BAY --122.18,37.79,46.0,2109.0,387.0,922.0,329.0,3.9712,208100.0,NEAR BAY --122.19,37.79,47.0,1229.0,243.0,582.0,256.0,2.9514,198100.0,NEAR BAY --122.19,37.79,50.0,954.0,217.0,546.0,201.0,2.6667,172800.0,NEAR BAY --122.18,37.81,37.0,1643.0,262.0,620.0,266.0,5.4446,336700.0,NEAR BAY --122.18,37.8,34.0,1355.0,195.0,442.0,195.0,6.2838,318200.0,NEAR BAY --122.18,37.8,23.0,2317.0,336.0,955.0,328.0,6.7527,285800.0,NEAR BAY --122.13,37.77,24.0,2459.0,317.0,916.0,324.0,7.0712,293000.0,NEAR BAY --122.16,37.79,22.0,12842.0,2048.0,4985.0,1967.0,5.9849,371000.0,NEAR BAY --122.17,37.78,42.0,1524.0,260.0,651.0,267.0,3.6875,157300.0,NEAR BAY --122.17,37.77,30.0,3326.0,746.0,1704.0,703.0,2.875,135300.0,NEAR BAY --122.18,37.78,43.0,1985.0,440.0,1085.0,407.0,3.4205,136700.0,NEAR BAY --122.18,37.78,50.0,1642.0,322.0,713.0,284.0,3.2984,160700.0,NEAR BAY --122.17,37.78,49.0,893.0,177.0,468.0,181.0,3.875,140600.0,NEAR BAY --122.17,37.78,52.0,653.0,128.0,296.0,121.0,4.175,144000.0,NEAR BAY --122.16,37.77,47.0,1256.0,,570.0,218.0,4.375,161900.0,NEAR BAY --122.16,37.77,48.0,977.0,194.0,446.0,180.0,4.7708,156300.0,NEAR BAY --122.16,37.77,45.0,2324.0,397.0,968.0,384.0,3.5739,176000.0,NEAR BAY --122.16,37.77,39.0,1583.0,349.0,857.0,316.0,3.0958,145800.0,NEAR BAY --122.17,37.77,39.0,1612.0,342.0,912.0,322.0,3.3958,141900.0,NEAR BAY --122.17,37.77,31.0,2424.0,533.0,1360.0,452.0,1.871,90700.0,NEAR BAY --122.17,37.76,41.0,1594.0,367.0,1074.0,355.0,1.9356,90600.0,NEAR BAY --122.17,37.76,47.0,2118.0,413.0,965.0,382.0,2.1842,107900.0,NEAR BAY --122.18,37.76,37.0,1575.0,358.0,933.0,320.0,2.2917,107000.0,NEAR BAY --122.17,37.76,38.0,1764.0,397.0,987.0,354.0,2.4333,98200.0,NEAR BAY --122.18,37.76,50.0,1187.0,261.0,907.0,246.0,1.9479,89500.0,NEAR BAY --122.18,37.76,52.0,754.0,175.0,447.0,165.0,3.9063,93800.0,NEAR BAY --122.18,37.76,49.0,2308.0,452.0,1299.0,451.0,1.8407,96700.0,NEAR BAY --122.18,37.77,27.0,909.0,236.0,396.0,157.0,2.0786,97500.0,NEAR BAY --122.18,37.77,42.0,1180.0,257.0,877.0,268.0,2.8125,97300.0,NEAR BAY --122.18,37.76,43.0,2018.0,408.0,1111.0,367.0,1.8913,91200.0,NEAR BAY --122.19,37.76,49.0,1368.0,282.0,790.0,269.0,1.7056,91400.0,NEAR BAY --122.18,37.77,52.0,2744.0,547.0,1479.0,554.0,2.2768,96200.0,NEAR BAY --122.18,37.77,51.0,2107.0,471.0,1173.0,438.0,3.2552,120100.0,NEAR BAY --122.18,37.77,52.0,1748.0,362.0,1029.0,366.0,2.0556,100000.0,NEAR BAY --122.19,37.76,52.0,2024.0,391.0,1030.0,350.0,2.4659,94700.0,NEAR BAY --122.2,37.76,47.0,1116.0,259.0,826.0,279.0,1.75,85700.0,NEAR BAY --122.19,37.77,41.0,2036.0,510.0,1412.0,454.0,2.0469,89300.0,NEAR BAY --122.19,37.77,45.0,1852.0,393.0,1132.0,349.0,2.7159,101400.0,NEAR BAY --122.19,37.76,41.0,921.0,207.0,522.0,159.0,1.2083,72500.0,NEAR BAY --122.19,37.76,45.0,995.0,238.0,630.0,237.0,1.925,74100.0,NEAR BAY --122.2,37.75,36.0,606.0,132.0,531.0,133.0,1.5809,70000.0,NEAR BAY --122.2,37.76,37.0,2680.0,736.0,1925.0,667.0,1.4097,84600.0,NEAR BAY --122.19,37.76,38.0,1493.0,370.0,1144.0,351.0,0.7683,81800.0,NEAR BAY --122.19,37.75,19.0,2207.0,565.0,1481.0,520.0,1.3194,81400.0,NEAR BAY --122.19,37.75,28.0,856.0,189.0,435.0,162.0,0.8012,81800.0,NEAR BAY --122.19,37.76,26.0,1293.0,297.0,984.0,303.0,1.9479,85800.0,NEAR BAY --122.19,37.74,36.0,847.0,212.0,567.0,159.0,1.1765,87100.0,NEAR BAY --122.18,37.74,42.0,541.0,154.0,380.0,123.0,2.3456,83500.0,NEAR BAY --122.19,37.73,44.0,1066.0,253.0,825.0,244.0,2.1538,79700.0,NEAR BAY --122.19,37.74,43.0,707.0,147.0,417.0,155.0,2.5139,83400.0,NEAR BAY --122.19,37.73,45.0,1528.0,291.0,801.0,287.0,1.2625,84700.0,NEAR BAY --122.18,37.73,42.0,909.0,215.0,646.0,198.0,2.9063,80000.0,NEAR BAY --122.18,37.73,43.0,1391.0,293.0,855.0,285.0,2.5192,76400.0,NEAR BAY --122.18,37.73,44.0,548.0,119.0,435.0,136.0,2.1111,79700.0,NEAR BAY --122.18,37.73,42.0,4074.0,874.0,2736.0,780.0,2.455,82400.0,NEAR BAY --122.17,37.74,41.0,1613.0,445.0,1481.0,414.0,2.4028,97700.0,NEAR BAY --122.17,37.74,47.0,463.0,134.0,327.0,137.0,2.15,97200.0,NEAR BAY --122.17,37.74,43.0,818.0,193.0,494.0,179.0,2.4776,101600.0,NEAR BAY --122.17,37.73,43.0,1473.0,371.0,1231.0,341.0,2.1587,86500.0,NEAR BAY --122.18,37.74,35.0,504.0,126.0,323.0,109.0,1.8438,90500.0,NEAR BAY --122.17,37.74,46.0,1026.0,226.0,749.0,225.0,3.0298,107600.0,NEAR BAY --122.17,37.74,46.0,769.0,183.0,693.0,178.0,2.25,84200.0,NEAR BAY --122.18,37.74,46.0,2103.0,391.0,1339.0,354.0,2.2467,88900.0,NEAR BAY --122.18,37.75,45.0,330.0,76.0,282.0,80.0,4.0469,80700.0,NEAR BAY --122.18,37.75,46.0,941.0,218.0,621.0,195.0,1.325,87100.0,NEAR BAY --122.17,37.75,38.0,992.0,,732.0,259.0,1.6196,85100.0,NEAR BAY --122.18,37.75,45.0,990.0,261.0,901.0,260.0,2.1731,82000.0,NEAR BAY --122.19,37.75,36.0,1126.0,263.0,482.0,150.0,1.9167,82800.0,NEAR BAY --122.18,37.75,43.0,1036.0,233.0,652.0,213.0,2.069,84600.0,NEAR BAY --122.18,37.75,36.0,1047.0,214.0,651.0,166.0,1.712,82100.0,NEAR BAY --122.17,37.76,33.0,1280.0,307.0,999.0,286.0,2.5625,89300.0,NEAR BAY --122.17,37.75,43.0,1587.0,320.0,907.0,306.0,1.9821,98300.0,NEAR BAY --122.17,37.75,41.0,1257.0,271.0,828.0,230.0,2.5043,92300.0,NEAR BAY --122.17,37.75,44.0,1218.0,248.0,763.0,254.0,2.3281,88800.0,NEAR BAY --122.17,37.75,48.0,1751.0,390.0,935.0,349.0,1.4375,90000.0,NEAR BAY --122.16,37.76,45.0,2299.0,514.0,1437.0,484.0,2.5122,95500.0,NEAR BAY --122.16,37.75,38.0,2457.0,624.0,1516.0,482.0,1.5625,91700.0,NEAR BAY --122.17,37.75,47.0,998.0,211.0,597.0,185.0,3.1587,100400.0,NEAR BAY --122.17,37.76,40.0,1685.0,343.0,949.0,342.0,1.8426,94800.0,NEAR BAY --122.16,37.76,46.0,1827.0,307.0,881.0,302.0,4.6696,164300.0,NEAR BAY --122.16,37.76,36.0,2781.0,574.0,1438.0,519.0,2.4598,155500.0,NEAR BAY --122.15,37.76,39.0,1823.0,286.0,763.0,270.0,6.0749,196900.0,NEAR BAY --122.14,37.77,27.0,2229.0,365.0,1297.0,355.0,4.8304,279100.0,NEAR BAY --122.14,37.76,34.0,1513.0,231.0,545.0,211.0,5.5701,252800.0,NEAR BAY --122.13,37.76,26.0,3266.0,491.0,1222.0,533.0,5.37,275400.0,NEAR BAY --122.12,37.75,33.0,1809.0,261.0,808.0,219.0,6.86,250000.0,NEAR BAY --122.12,37.75,28.0,794.0,111.0,329.0,109.0,7.6923,329800.0,NEAR BAY --122.14,37.75,36.0,690.0,105.0,299.0,109.0,4.0313,195500.0,NEAR BAY --122.14,37.75,33.0,1334.0,200.0,579.0,202.0,6.8323,255900.0,NEAR BAY --122.13,37.75,30.0,414.0,54.0,137.0,50.0,4.975,311100.0,NEAR BAY --122.13,37.75,36.0,768.0,93.0,229.0,93.0,5.3602,330000.0,NEAR BAY --122.13,37.74,41.0,4400.0,666.0,1476.0,648.0,5.0,248900.0,NEAR BAY --122.16,37.75,46.0,954.0,161.0,429.0,154.0,2.925,142900.0,NEAR BAY --122.15,37.75,40.0,1445.0,256.0,849.0,255.0,3.8913,126300.0,NEAR BAY --122.15,37.75,44.0,1938.0,399.0,946.0,331.0,3.225,135800.0,NEAR BAY --122.15,37.74,41.0,856.0,178.0,571.0,191.0,3.1458,130600.0,NEAR BAY --122.16,37.75,24.0,1790.0,454.0,1137.0,386.0,2.537,107900.0,NEAR BAY --122.16,37.75,44.0,617.0,131.0,378.0,135.0,2.5568,111100.0,NEAR BAY --122.15,37.74,43.0,1383.0,275.0,853.0,272.0,3.5083,122000.0,NEAR BAY --122.15,37.74,49.0,1325.0,277.0,764.0,282.0,3.3125,118000.0,NEAR BAY --122.16,37.75,40.0,1227.0,294.0,928.0,261.0,1.8235,95200.0,NEAR BAY --122.16,37.75,35.0,667.0,140.0,406.0,133.0,3.8047,94300.0,NEAR BAY --122.17,37.74,34.0,1223.0,281.0,824.0,280.0,2.2917,92500.0,NEAR BAY --122.17,37.75,37.0,1379.0,287.0,835.0,259.0,2.4962,91800.0,NEAR BAY --122.16,37.74,43.0,1534.0,300.0,826.0,295.0,4.0417,109400.0,NEAR BAY --122.16,37.74,46.0,1029.0,181.0,567.0,211.0,3.4844,129500.0,NEAR BAY --122.16,37.74,52.0,771.0,147.0,355.0,144.0,4.1458,143400.0,NEAR BAY --122.16,37.74,47.0,824.0,223.0,533.0,166.0,2.625,98200.0,NEAR BAY --122.16,37.74,44.0,1097.0,239.0,609.0,215.0,2.0227,103100.0,NEAR BAY --122.29,37.9,49.0,1283.0,238.0,576.0,236.0,3.3333,276800.0,NEAR BAY --122.29,37.9,52.0,1604.0,263.0,594.0,286.0,5.338,270900.0,NEAR BAY --122.29,37.89,52.0,2248.0,422.0,870.0,377.0,3.4732,246200.0,NEAR BAY --122.3,37.9,38.0,2263.0,522.0,1027.0,509.0,3.5125,224200.0,NEAR BAY --122.29,37.89,52.0,1571.0,349.0,693.0,326.0,3.1375,229100.0,NEAR BAY --122.3,37.89,46.0,1520.0,402.0,815.0,375.0,2.8036,211600.0,NEAR BAY --122.3,37.9,15.0,5083.0,1212.0,2420.0,1146.0,4.5824,256100.0,NEAR BAY --122.3,37.89,36.0,1077.0,293.0,518.0,276.0,3.0208,206300.0,NEAR BAY --122.3,37.89,52.0,1248.0,283.0,620.0,275.0,4.0875,221300.0,NEAR BAY --122.33,37.89,42.0,1342.0,291.0,551.0,266.0,4.5268,207400.0,NEAR BAY --122.34,37.88,37.0,3061.0,930.0,2556.0,924.0,1.7375,350000.0,NEAR BAY --122.29,37.89,52.0,3171.0,698.0,1498.0,696.0,3.1795,218200.0,NEAR BAY --122.29,37.88,50.0,1211.0,261.0,523.0,227.0,3.8672,216700.0,NEAR BAY --122.29,37.89,52.0,979.0,175.0,374.0,153.0,5.1675,270600.0,NEAR BAY --122.29,37.89,52.0,2269.0,380.0,1004.0,371.0,5.1696,261400.0,NEAR BAY --122.28,37.88,52.0,1844.0,332.0,769.0,334.0,4.2614,261300.0,NEAR BAY --122.29,37.89,52.0,2178.0,421.0,940.0,423.0,5.0551,232200.0,NEAR BAY --122.27,37.9,42.0,1650.0,274.0,645.0,256.0,5.6228,375400.0,NEAR BAY --122.26,37.9,52.0,1927.0,279.0,705.0,288.0,7.8864,357300.0,NEAR BAY --122.27,37.9,52.0,2079.0,273.0,684.0,275.0,7.9556,374400.0,NEAR BAY --122.27,37.9,52.0,1803.0,240.0,572.0,236.0,6.174,358800.0,NEAR BAY --122.27,37.9,52.0,2041.0,270.0,671.0,253.0,6.9414,417500.0,NEAR BAY --122.27,37.89,52.0,3046.0,373.0,975.0,365.0,8.8342,430500.0,NEAR BAY --122.28,37.9,52.0,2318.0,328.0,779.0,312.0,7.1754,362900.0,NEAR BAY --122.28,37.9,52.0,2003.0,250.0,658.0,244.0,10.0825,397000.0,NEAR BAY --122.28,37.9,52.0,2261.0,328.0,819.0,335.0,4.9083,346800.0,NEAR BAY --122.28,37.89,52.0,1225.0,169.0,412.0,168.0,5.7912,327100.0,NEAR BAY --122.28,37.89,52.0,2315.0,408.0,835.0,369.0,4.5893,290100.0,NEAR BAY --122.28,37.89,52.0,2070.0,329.0,722.0,306.0,5.4171,292000.0,NEAR BAY --122.28,37.89,52.0,2616.0,473.0,1085.0,487.0,4.125,270900.0,NEAR BAY --122.27,37.89,52.0,2640.0,366.0,973.0,355.0,7.266,371100.0,NEAR BAY --122.27,37.89,52.0,1978.0,293.0,723.0,272.0,5.3989,335600.0,NEAR BAY --122.26,37.9,37.0,2220.0,335.0,903.0,362.0,7.8336,371300.0,NEAR BAY --122.25,37.89,41.0,1125.0,195.0,356.0,181.0,6.1593,344000.0,NEAR BAY --122.26,37.89,52.0,3078.0,494.0,1005.0,462.0,6.381,342200.0,NEAR BAY --122.26,37.89,52.0,3706.0,531.0,1205.0,504.0,6.6828,370900.0,NEAR BAY --122.25,37.89,37.0,3000.0,457.0,987.0,450.0,7.5385,350000.0,NEAR BAY --122.25,37.89,42.0,2863.0,460.0,1031.0,448.0,6.7138,368600.0,NEAR BAY --122.26,37.88,52.0,2551.0,417.0,894.0,404.0,6.2425,391800.0,NEAR BAY --122.26,37.88,52.0,2255.0,410.0,823.0,377.0,5.7979,415300.0,NEAR BAY --122.27,37.88,52.0,3360.0,648.0,1232.0,621.0,4.2813,284900.0,NEAR BAY --122.27,37.88,52.0,1693.0,391.0,669.0,367.0,3.5417,287500.0,NEAR BAY --122.27,37.88,44.0,2252.0,592.0,989.0,550.0,3.0132,272900.0,NEAR BAY --122.28,37.88,52.0,2495.0,491.0,1058.0,464.0,4.1429,259600.0,NEAR BAY --122.28,37.88,52.0,1193.0,200.0,506.0,207.0,4.1912,254500.0,NEAR BAY --122.28,37.88,52.0,1172.0,215.0,489.0,218.0,3.9167,235600.0,NEAR BAY --122.29,37.88,52.0,2159.0,424.0,824.0,388.0,3.8897,218400.0,NEAR BAY --122.29,37.88,48.0,2365.0,490.0,1034.0,475.0,3.1065,229200.0,NEAR BAY --122.29,37.88,46.0,1895.0,442.0,920.0,425.0,2.9926,192100.0,NEAR BAY --122.29,37.88,52.0,1650.0,395.0,841.0,380.0,3.556,179300.0,NEAR BAY --122.3,37.88,45.0,453.0,146.0,749.0,137.0,1.475,187500.0,NEAR BAY --122.3,37.88,52.0,409.0,97.0,208.0,98.0,1.6971,138800.0,NEAR BAY --122.3,37.87,10.0,503.0,118.0,228.0,100.0,2.1705,150000.0,NEAR BAY --122.3,37.86,50.0,499.0,127.0,287.0,128.0,2.75,140600.0,NEAR BAY --122.29,37.85,52.0,477.0,119.0,218.0,106.0,2.5682,120000.0,NEAR BAY --122.3,37.88,46.0,1647.0,376.0,854.0,355.0,2.9,144800.0,NEAR BAY --122.3,37.87,52.0,3123.0,749.0,1695.0,684.0,2.2208,144800.0,NEAR BAY --122.28,37.88,52.0,957.0,188.0,403.0,172.0,3.2344,245500.0,NEAR BAY --122.28,37.87,52.0,589.0,132.0,288.0,131.0,3.5156,200000.0,NEAR BAY --122.28,37.87,49.0,2026.0,548.0,963.0,521.0,1.9805,173700.0,NEAR BAY --122.29,37.87,50.0,1829.0,536.0,1129.0,516.0,2.6684,185600.0,NEAR BAY --122.29,37.87,52.0,895.0,198.0,386.0,204.0,3.875,182600.0,NEAR BAY --122.28,37.88,52.0,1909.0,416.0,811.0,406.0,3.006,227900.0,NEAR BAY --122.28,37.87,46.0,3022.0,696.0,1293.0,675.0,2.543,220700.0,NEAR BAY --122.28,37.87,46.0,1777.0,446.0,805.0,431.0,2.8676,212000.0,NEAR BAY --122.27,37.88,52.0,2803.0,930.0,1372.0,876.0,2.1907,271400.0,NEAR BAY --122.27,37.87,30.0,1465.0,439.0,862.0,425.0,1.7778,268800.0,NEAR BAY --122.27,37.88,37.0,2619.0,682.0,1152.0,616.0,2.52,277800.0,NEAR BAY --122.26,37.88,52.0,1149.0,255.0,483.0,249.0,4.2788,332500.0,NEAR BAY --122.26,37.88,52.0,2363.0,604.0,1558.0,573.0,2.944,338900.0,NEAR BAY --122.26,37.88,52.0,2604.0,837.0,1798.0,769.0,1.725,287500.0,NEAR BAY --122.25,37.87,41.0,685.0,141.0,266.0,123.0,5.2289,384600.0,NEAR BAY --122.25,37.87,42.0,1756.0,465.0,2184.0,422.0,2.5562,371400.0,NEAR BAY --122.25,37.87,52.0,1204.0,460.0,2016.0,477.0,0.949,350000.0,NEAR BAY --122.25,37.87,52.0,609.0,236.0,1349.0,250.0,1.1696,500001.0,NEAR BAY --122.26,37.87,52.0,1087.0,371.0,3337.0,350.0,1.4012,175000.0,NEAR BAY --122.26,37.87,52.0,2773.0,998.0,1721.0,949.0,1.1859,241700.0,NEAR BAY --122.27,37.87,35.0,3218.0,1108.0,1675.0,1000.0,1.7464,216700.0,NEAR BAY --122.27,37.87,49.0,1350.0,368.0,707.0,350.0,2.8846,211300.0,NEAR BAY --122.27,37.87,52.0,3084.0,698.0,1424.0,694.0,2.7372,210200.0,NEAR BAY --122.28,37.86,52.0,938.0,195.0,393.0,189.0,3.8594,196400.0,NEAR BAY --122.28,37.87,52.0,1813.0,353.0,828.0,339.0,3.5625,191700.0,NEAR BAY --122.28,37.87,52.0,1233.0,300.0,571.0,292.0,2.2788,182300.0,NEAR BAY --122.29,37.87,44.0,2539.0,755.0,1382.0,713.0,2.537,175000.0,NEAR BAY --122.29,37.87,46.0,1267.0,324.0,792.0,321.0,2.525,165900.0,NEAR BAY --122.29,37.86,52.0,1665.0,404.0,815.0,372.0,1.9946,156900.0,NEAR BAY --122.28,37.86,52.0,1659.0,367.0,788.0,346.0,2.8214,164300.0,NEAR BAY --122.29,37.87,52.0,2225.0,460.0,1145.0,430.0,2.6165,150000.0,NEAR BAY --122.29,37.86,50.0,2485.0,607.0,1354.0,563.0,1.9483,150500.0,NEAR BAY --122.28,37.86,52.0,2031.0,450.0,958.0,445.0,1.9327,169900.0,NEAR BAY --122.28,37.86,49.0,2932.0,668.0,1361.0,608.0,1.9798,147400.0,NEAR BAY --122.28,37.85,52.0,2246.0,472.0,1005.0,449.0,2.4167,152700.0,NEAR BAY --122.27,37.86,49.0,2052.0,435.0,924.0,414.0,2.5417,182700.0,NEAR BAY --122.28,37.86,52.0,1999.0,417.0,780.0,358.0,3.3906,179300.0,NEAR BAY --122.28,37.86,52.0,3007.0,691.0,1582.0,636.0,2.5652,157700.0,NEAR BAY --122.28,37.86,41.0,2214.0,550.0,1213.0,568.0,2.2845,153100.0,NEAR BAY --122.27,37.86,52.0,1088.0,305.0,486.0,267.0,2.6071,250000.0,NEAR BAY --122.27,37.86,52.0,834.0,186.0,494.0,175.0,3.15,206300.0,NEAR BAY --122.27,37.86,52.0,1769.0,372.0,849.0,365.0,2.6914,218800.0,NEAR BAY --122.27,37.86,52.0,2307.0,583.0,1127.0,548.0,1.8447,198200.0,NEAR BAY --122.26,37.86,35.0,5161.0,1744.0,3276.0,1742.0,1.6307,253600.0,NEAR BAY --122.26,37.86,52.0,3497.0,832.0,1493.0,794.0,2.9044,257400.0,NEAR BAY --122.26,37.86,52.0,3774.0,744.0,1461.0,679.0,2.9405,289500.0,NEAR BAY --122.26,37.86,52.0,2888.0,604.0,1253.0,538.0,3.3893,241700.0,NEAR BAY --122.25,37.86,48.0,2153.0,517.0,1656.0,459.0,3.0417,489600.0,NEAR BAY --122.25,37.86,52.0,1389.0,191.0,514.0,202.0,7.0897,446200.0,NEAR BAY --122.25,37.86,52.0,1709.0,318.0,719.0,295.0,5.0463,456300.0,NEAR BAY --122.25,37.86,52.0,1587.0,444.0,878.0,449.0,1.7652,336800.0,NEAR BAY --122.24,37.86,52.0,1668.0,225.0,517.0,214.0,7.8521,500001.0,NEAR BAY --122.24,37.85,52.0,3726.0,474.0,1366.0,496.0,9.3959,500001.0,NEAR BAY --122.25,37.86,52.0,4048.0,663.0,1316.0,590.0,5.3794,376900.0,NEAR BAY --122.26,37.85,52.0,3618.0,768.0,1508.0,755.0,3.2619,309600.0,NEAR BAY --122.27,37.85,52.0,4076.0,920.0,1800.0,815.0,2.7054,182300.0,NEAR BAY --122.27,37.85,47.0,2077.0,400.0,719.0,326.0,2.2431,172700.0,NEAR BAY --122.27,37.85,50.0,1279.0,300.0,675.0,255.0,1.9028,150800.0,NEAR BAY --122.27,37.85,52.0,1974.0,426.0,875.0,363.0,1.5817,153600.0,NEAR BAY --122.27,37.85,52.0,335.0,83.0,152.0,77.0,2.2841,106300.0,NEAR BAY --122.27,37.85,47.0,1375.0,307.0,843.0,319.0,1.3785,142300.0,NEAR BAY --122.28,37.85,52.0,610.0,145.0,281.0,132.0,2.9018,119400.0,NEAR BAY --122.28,37.85,44.0,1025.0,198.0,506.0,204.0,1.73,147900.0,NEAR BAY --122.28,37.85,48.0,2063.0,484.0,1054.0,466.0,2.2625,132900.0,NEAR BAY --122.29,37.84,35.0,1872.0,419.0,1017.0,414.0,2.2106,132500.0,NEAR BAY --122.28,37.83,52.0,3108.0,813.0,1623.0,765.0,2.6997,126900.0,NEAR BAY --122.3,37.84,14.0,7355.0,2408.0,3100.0,2051.0,4.0018,143800.0,NEAR BAY --122.23,37.83,52.0,2990.0,379.0,947.0,361.0,7.8772,500001.0,NEAR BAY --122.22,37.82,39.0,2492.0,310.0,808.0,315.0,11.8603,500001.0,NEAR BAY --122.22,37.82,42.0,2991.0,335.0,1018.0,335.0,13.499,500001.0,NEAR BAY --122.23,37.82,52.0,3242.0,366.0,1001.0,352.0,12.2138,500001.0,NEAR BAY --122.23,37.82,52.0,3051.0,381.0,1005.0,369.0,8.1872,466100.0,NEAR BAY --122.23,37.82,52.0,3494.0,396.0,1192.0,383.0,12.3804,500001.0,NEAR BAY --122.24,37.83,52.0,1757.0,246.0,585.0,227.0,5.8948,457800.0,NEAR BAY --122.24,37.83,52.0,2449.0,312.0,916.0,316.0,8.1194,471600.0,NEAR BAY --122.23,37.82,52.0,1611.0,203.0,556.0,179.0,8.7477,500001.0,NEAR BAY --122.24,37.82,52.0,3665.0,517.0,1470.0,520.0,6.155,398600.0,NEAR BAY --122.25,37.82,52.0,2474.0,403.0,1104.0,398.0,5.883,340700.0,NEAR BAY --122.23,37.76,52.0,3037.0,516.0,1242.0,518.0,5.2128,289900.0,NEAR BAY --122.23,37.76,52.0,2269.0,323.0,805.0,321.0,4.7188,335300.0,NEAR BAY --122.23,37.76,52.0,1316.0,177.0,378.0,162.0,5.2915,333000.0,NEAR BAY --122.24,37.77,52.0,1153.0,235.0,481.0,223.0,2.6411,241000.0,NEAR BAY --122.23,37.77,52.0,772.0,179.0,409.0,160.0,3.3214,189600.0,NEAR BAY --122.24,37.77,52.0,1711.0,386.0,885.0,373.0,3.6417,206300.0,NEAR BAY --122.25,37.77,52.0,2650.0,566.0,1468.0,567.0,3.0161,215700.0,NEAR BAY --122.25,37.77,52.0,1038.0,220.0,482.0,215.0,3.1771,210200.0,NEAR BAY --122.25,37.77,52.0,1527.0,320.0,825.0,264.0,3.4531,208800.0,NEAR BAY --122.25,37.77,52.0,859.0,157.0,429.0,158.0,4.3098,197900.0,NEAR BAY --122.26,37.78,52.0,970.0,217.0,528.0,208.0,3.3438,201300.0,NEAR BAY --122.26,37.78,52.0,1045.0,239.0,496.0,216.0,2.9213,190800.0,NEAR BAY --122.27,37.78,52.0,1408.0,280.0,718.0,265.0,2.6806,207900.0,NEAR BAY --122.27,37.78,52.0,1222.0,264.0,630.0,265.0,3.7708,215300.0,NEAR BAY --122.27,37.78,45.0,1169.0,263.0,723.0,286.0,3.9444,212900.0,NEAR BAY --122.27,37.78,13.0,2020.0,535.0,959.0,486.0,5.2601,292700.0,NEAR BAY --122.28,37.79,30.0,4145.0,869.0,3668.0,855.0,2.5444,275000.0,NEAR BAY --122.3,37.77,42.0,2038.0,368.0,2037.0,355.0,2.6447,200000.0,NEAR BAY --122.28,37.78,29.0,5154.0,,3741.0,1273.0,2.5762,173400.0,NEAR BAY --122.29,37.78,42.0,1241.0,309.0,821.0,300.0,1.9427,102200.0,NEAR BAY --122.28,37.77,52.0,1468.0,363.0,870.0,347.0,2.9688,220800.0,NEAR BAY --122.28,37.77,27.0,3997.0,1073.0,1901.0,966.0,3.75,242800.0,NEAR BAY --122.29,37.76,18.0,2873.0,763.0,1243.0,663.0,5.1702,265400.0,NEAR BAY --122.28,37.78,50.0,1487.0,306.0,730.0,327.0,2.5139,219000.0,NEAR BAY --122.26,37.77,52.0,1670.0,350.0,793.0,299.0,2.9732,282100.0,NEAR BAY --122.27,37.77,52.0,2252.0,388.0,1033.0,434.0,5.5337,372000.0,NEAR BAY --122.27,37.77,52.0,1731.0,377.0,872.0,363.0,4.1667,225800.0,NEAR BAY --122.27,37.77,52.0,1710.0,481.0,849.0,457.0,2.7115,220800.0,NEAR BAY --122.27,37.77,52.0,2388.0,559.0,1121.0,518.0,3.3269,234500.0,NEAR BAY --122.25,37.77,52.0,2156.0,458.0,872.0,445.0,3.2685,254200.0,NEAR BAY --122.26,37.77,52.0,1565.0,315.0,637.0,297.0,4.7778,351800.0,NEAR BAY --122.26,37.77,52.0,1704.0,371.0,663.0,340.0,4.226,275000.0,NEAR BAY --122.26,37.77,52.0,1210.0,168.0,411.0,172.0,3.3571,405400.0,NEAR BAY --122.26,37.77,52.0,2097.0,444.0,915.0,413.0,2.9899,228100.0,NEAR BAY --122.26,37.77,52.0,1848.0,479.0,921.0,477.0,2.875,234000.0,NEAR BAY --122.24,37.77,43.0,955.0,284.0,585.0,266.0,2.3882,162500.0,NEAR BAY --122.25,37.77,43.0,4329.0,1110.0,2086.0,1053.0,2.975,243400.0,NEAR BAY --122.23,37.76,52.0,3011.0,542.0,1303.0,535.0,5.1039,273800.0,NEAR BAY --122.23,37.76,52.0,1049.0,185.0,374.0,176.0,4.1458,248500.0,NEAR BAY --122.24,37.76,52.0,2504.0,516.0,979.0,472.0,3.4762,244000.0,NEAR BAY --122.24,37.76,52.0,1846.0,471.0,827.0,446.0,2.6833,240900.0,NEAR BAY --122.23,37.76,52.0,1705.0,246.0,658.0,253.0,5.75,306300.0,NEAR BAY --122.23,37.75,50.0,1542.0,289.0,654.0,268.0,3.9632,240000.0,NEAR BAY --122.24,37.75,45.0,891.0,,384.0,146.0,4.9489,247100.0,NEAR BAY --122.24,37.75,27.0,4051.0,753.0,1499.0,797.0,4.8711,286600.0,NEAR BAY --122.24,37.76,52.0,2646.0,581.0,1128.0,522.0,3.0718,266700.0,NEAR BAY --122.24,37.76,49.0,2428.0,525.0,1110.0,492.0,3.6719,229800.0,NEAR BAY --122.24,37.76,52.0,2567.0,436.0,1119.0,415.0,4.6094,229300.0,NEAR BAY --122.24,37.73,21.0,7031.0,1249.0,2930.0,1235.0,4.5213,228400.0,NEAR BAY --122.25,37.74,25.0,1914.0,365.0,897.0,390.0,4.4562,206200.0,NEAR BAY --122.24,37.72,5.0,18634.0,2885.0,7427.0,2718.0,7.611,350700.0,NEAR BAY --122.27,37.73,31.0,5785.0,1379.0,2973.0,1312.0,3.2689,231000.0,NEAR BAY --122.25,37.76,52.0,2876.0,648.0,1340.0,632.0,3.567,252900.0,NEAR BAY --122.27,37.74,28.0,6909.0,1554.0,2974.0,1484.0,3.6875,353900.0,NEAR BAY --122.27,37.77,23.0,5679.0,1270.0,2690.0,1151.0,4.7695,291700.0,NEAR BAY --122.28,37.75,20.0,1156.0,365.0,583.0,326.0,3.1972,100000.0,NEAR BAY --122.06,37.77,12.0,14316.0,2045.0,5781.0,2007.0,7.2634,341600.0,NEAR BAY --122.06,37.73,5.0,3596.0,467.0,1738.0,512.0,7.0568,412500.0,NEAR BAY --122.06,37.71,36.0,3541.0,570.0,1478.0,529.0,4.635,248600.0,NEAR BAY --122.07,37.71,40.0,1808.0,302.0,746.0,270.0,5.3015,254900.0,NEAR BAY --122.07,37.71,36.0,2879.0,480.0,1235.0,455.0,4.9801,241500.0,NEAR BAY --122.07,37.72,26.0,3204.0,477.0,1411.0,484.0,5.4834,295200.0,NEAR BAY --122.08,37.72,31.0,3866.0,531.0,1368.0,521.0,6.187,340400.0,NEAR BAY --122.08,37.72,32.0,2476.0,368.0,1048.0,367.0,5.6194,274700.0,NEAR BAY --122.08,37.71,35.0,2211.0,350.0,1004.0,365.0,5.4639,238600.0,NEAR BAY --122.09,37.71,35.0,2663.0,387.0,1086.0,367.0,5.1498,266400.0,NEAR BAY --122.1,37.72,30.0,2599.0,366.0,922.0,350.0,5.8382,330200.0,NEAR BAY --122.11,37.71,36.0,4569.0,824.0,1950.0,819.0,4.65,206800.0,NEAR BAY --122.1,37.7,25.0,2973.0,622.0,1413.0,595.0,4.3819,209200.0,NEAR BAY --122.1,37.69,30.0,3115.0,625.0,1444.0,568.0,3.7222,195800.0,NEAR BAY --122.09,37.71,31.0,1843.0,282.0,749.0,269.0,5.2855,253500.0,NEAR BAY --122.09,37.7,31.0,2053.0,336.0,867.0,329.0,4.3375,241800.0,NEAR BAY --122.1,37.71,27.0,6740.0,1073.0,2723.0,1035.0,5.2131,252500.0,NEAR BAY --122.09,37.7,30.0,1751.0,269.0,731.0,263.0,6.005,263900.0,NEAR BAY --122.08,37.71,38.0,1663.0,295.0,781.0,301.0,5.0519,227000.0,NEAR BAY --122.08,37.71,38.0,3716.0,657.0,1784.0,652.0,4.8237,220900.0,NEAR BAY --122.08,37.7,32.0,2718.0,447.0,1156.0,410.0,5.2497,259300.0,NEAR BAY --122.07,37.7,39.0,1420.0,272.0,645.0,277.0,4.125,232500.0,NEAR BAY --122.06,37.7,37.0,1893.0,310.0,821.0,315.0,4.6005,231600.0,NEAR BAY --122.06,37.7,33.0,3906.0,790.0,1912.0,770.0,3.5187,209400.0,NEAR BAY --122.07,37.7,32.0,3400.0,736.0,1487.0,694.0,3.0,223200.0,NEAR BAY --122.08,37.7,25.0,3402.0,758.0,1645.0,710.0,3.4934,209900.0,NEAR BAY --122.09,37.7,33.0,4413.0,1107.0,2239.0,1051.0,2.9861,208200.0,NEAR BAY --122.07,37.69,29.0,2304.0,618.0,1021.0,552.0,2.5362,203800.0,NEAR BAY --122.08,37.69,36.0,2350.0,499.0,1105.0,467.0,3.3021,195700.0,NEAR BAY --122.07,37.69,31.0,5914.0,1309.0,2999.0,1295.0,3.0964,190500.0,NEAR BAY --122.08,37.69,43.0,1575.0,324.0,740.0,284.0,2.8512,181000.0,NEAR BAY --122.08,37.69,42.0,1414.0,274.0,629.0,244.0,3.3478,184900.0,NEAR BAY --122.08,37.68,37.0,848.0,202.0,314.0,205.0,2.3958,190800.0,NEAR BAY --122.08,37.68,15.0,3051.0,685.0,1479.0,668.0,3.5295,242200.0,NEAR BAY --122.09,37.69,20.0,4296.0,817.0,1732.0,800.0,4.8036,188300.0,NEAR BAY --122.15,37.74,52.0,2898.0,557.0,1338.0,550.0,3.851,183500.0,NEAR BAY --122.14,37.74,52.0,1071.0,201.0,440.0,192.0,4.0662,204200.0,NEAR BAY --122.14,37.73,51.0,2619.0,403.0,922.0,393.0,4.6042,251900.0,NEAR BAY --122.15,37.74,49.0,1494.0,316.0,611.0,288.0,2.2,187500.0,NEAR BAY --122.16,37.73,52.0,2260.0,416.0,994.0,412.0,4.1164,198200.0,NEAR BAY --122.15,37.74,52.0,1394.0,223.0,545.0,230.0,3.95,219000.0,NEAR BAY --122.15,37.73,52.0,1028.0,129.0,317.0,143.0,4.9135,275000.0,NEAR BAY --122.15,37.73,45.0,3758.0,819.0,1573.0,736.0,2.8355,245400.0,NEAR BAY --122.17,37.73,46.0,2163.0,470.0,925.0,435.0,3.25,177500.0,NEAR BAY --122.16,37.73,49.0,1699.0,408.0,768.0,385.0,2.8301,171600.0,NEAR BAY --122.17,37.73,52.0,1555.0,289.0,620.0,292.0,3.7159,183300.0,NEAR BAY --122.16,37.73,52.0,1114.0,206.0,425.0,207.0,2.5625,175000.0,NEAR BAY --122.18,37.72,45.0,1498.0,313.0,1003.0,305.0,3.8047,156700.0,NEAR BAY --122.18,37.71,45.0,726.0,147.0,519.0,135.0,3.375,157500.0,NEAR BAY --122.17,37.71,38.0,890.0,200.0,481.0,198.0,3.244,179800.0,NEAR BAY --122.18,37.7,36.0,2639.0,533.0,1209.0,519.0,4.0268,205500.0,NEAR BAY --122.18,37.7,35.0,2562.0,554.0,1398.0,525.0,3.3906,178900.0,NEAR BAY --122.19,37.71,36.0,361.0,69.0,158.0,58.0,5.5461,262500.0,NEAR BAY --122.17,37.72,42.0,3008.0,659.0,1817.0,664.0,3.371,165000.0,NEAR BAY --122.17,37.72,46.0,1369.0,284.0,766.0,289.0,3.5313,159700.0,NEAR BAY --122.17,37.72,5.0,1692.0,398.0,814.0,328.0,3.663,158300.0,NEAR BAY --122.16,37.72,38.0,1007.0,245.0,618.0,239.0,2.875,144800.0,NEAR BAY --122.17,37.72,43.0,3783.0,814.0,2139.0,789.0,4.0202,166300.0,NEAR BAY --122.16,37.71,37.0,1507.0,242.0,632.0,253.0,4.5553,191000.0,NEAR BAY --122.16,37.71,36.0,666.0,132.0,366.0,134.0,3.4643,175000.0,NEAR BAY --122.16,37.72,10.0,2229.0,601.0,877.0,485.0,3.3431,137500.0,NEAR BAY --122.15,37.73,28.0,2215.0,587.0,830.0,573.0,2.1898,141700.0,NEAR BAY --122.15,37.72,31.0,1616.0,372.0,739.0,379.0,2.9097,210900.0,NEAR BAY --122.15,37.72,47.0,1190.0,251.0,540.0,266.0,3.375,198300.0,NEAR BAY --122.15,37.72,29.0,4169.0,1047.0,2024.0,962.0,2.8125,157400.0,NEAR BAY --122.14,37.73,52.0,2024.0,320.0,823.0,334.0,5.0,264700.0,NEAR BAY --122.14,37.73,38.0,1723.0,394.0,711.0,353.0,3.0673,218400.0,NEAR BAY --122.14,37.73,43.0,2264.0,390.0,931.0,368.0,3.8125,235100.0,NEAR BAY --122.13,37.73,33.0,1996.0,268.0,686.0,270.0,6.9096,341800.0,NEAR BAY --122.13,37.72,26.0,2862.0,394.0,1030.0,397.0,7.912,367300.0,NEAR BAY --122.13,37.72,35.0,2183.0,383.0,976.0,392.0,3.8393,243500.0,NEAR BAY --122.12,37.71,35.0,1037.0,207.0,552.0,210.0,4.0,167900.0,NEAR BAY --122.13,37.72,25.0,1134.0,153.0,340.0,171.0,6.5095,371200.0,NEAR BAY --122.14,37.72,39.0,786.0,132.0,288.0,132.0,3.5156,218900.0,NEAR BAY --122.14,37.72,45.0,1397.0,253.0,555.0,248.0,2.983,202700.0,NEAR BAY --122.13,37.72,45.0,2315.0,451.0,1006.0,444.0,3.524,186200.0,NEAR BAY --122.13,37.71,44.0,1613.0,339.0,776.0,346.0,3.1103,188900.0,NEAR BAY --122.13,37.71,44.0,1421.0,298.0,609.0,270.0,3.5781,180000.0,NEAR BAY --122.15,37.71,18.0,5778.0,1526.0,2441.0,1352.0,3.1682,202700.0,NEAR BAY --122.14,37.71,27.0,3094.0,866.0,1364.0,789.0,2.6101,181700.0,NEAR BAY --122.14,37.71,18.0,3905.0,1007.0,2197.0,1044.0,3.6932,166800.0,NEAR BAY --122.13,37.7,43.0,3046.0,557.0,1333.0,544.0,3.4583,183700.0,NEAR BAY --122.13,37.7,19.0,3516.0,710.0,1810.0,703.0,3.9032,218000.0,NEAR BAY --122.15,37.71,36.0,998.0,178.0,531.0,183.0,4.0208,191500.0,NEAR BAY --122.15,37.7,36.0,1464.0,244.0,672.0,261.0,3.5547,194700.0,NEAR BAY --122.14,37.7,17.0,1463.0,292.0,695.0,330.0,4.5859,187200.0,NEAR BAY --122.13,37.7,21.0,4124.0,1054.0,2162.0,998.0,2.6321,223100.0,NEAR BAY --122.13,37.69,17.0,2380.0,769.0,1216.0,643.0,3.395,271300.0,NEAR BAY --122.14,37.7,36.0,1266.0,228.0,606.0,239.0,3.9702,194100.0,NEAR BAY --122.16,37.7,36.0,2239.0,391.0,1203.0,379.0,5.0043,190400.0,NEAR BAY --122.14,37.69,38.0,1571.0,317.0,874.0,301.0,4.4659,189100.0,NEAR BAY --122.15,37.69,38.0,1246.0,221.0,637.0,222.0,3.6625,184600.0,NEAR BAY --122.15,37.69,36.0,1501.0,287.0,703.0,276.0,3.8864,197300.0,NEAR BAY --122.15,37.7,36.0,1468.0,252.0,733.0,229.0,3.4583,192600.0,NEAR BAY --122.16,37.69,36.0,1118.0,219.0,625.0,228.0,3.7813,192200.0,NEAR BAY --122.16,37.7,36.0,1097.0,208.0,568.0,225.0,2.9917,194600.0,NEAR BAY --122.16,37.7,36.0,1719.0,303.0,836.0,311.0,4.4375,193500.0,NEAR BAY --122.17,37.7,24.0,1755.0,365.0,952.0,362.0,4.0,202600.0,NEAR BAY --122.16,37.68,16.0,1687.0,348.0,568.0,352.0,2.3869,83300.0,NEAR BAY --122.17,37.69,24.0,2262.0,391.0,1125.0,366.0,4.7609,212600.0,NEAR BAY --122.18,37.68,5.0,2087.0,407.0,840.0,401.0,5.4858,187800.0,NEAR BAY --122.16,37.69,36.0,1480.0,278.0,796.0,283.0,4.3971,205700.0,NEAR BAY --122.15,37.69,36.0,1545.0,273.0,863.0,267.0,4.0109,192900.0,NEAR BAY --122.15,37.68,35.0,2632.0,447.0,1349.0,486.0,4.3864,205200.0,NEAR BAY --122.15,37.68,30.0,2261.0,443.0,929.0,383.0,4.2841,213400.0,NEAR BAY --122.15,37.69,39.0,1670.0,308.0,957.0,335.0,5.1312,183600.0,NEAR BAY --122.14,37.69,37.0,2141.0,535.0,1093.0,555.0,2.9958,178400.0,NEAR BAY --122.14,37.68,27.0,3337.0,613.0,1489.0,607.0,3.6364,219200.0,NEAR BAY --122.14,37.68,31.0,3184.0,716.0,1561.0,628.0,2.7955,183100.0,NEAR BAY --122.1,37.69,44.0,2341.0,500.0,1256.0,485.0,2.9507,157100.0,NEAR BAY --122.12,37.69,30.0,1197.0,269.0,695.0,279.0,3.4375,157800.0,NEAR BAY --122.13,37.69,34.0,1131.0,278.0,560.0,237.0,2.875,161700.0,NEAR BAY --122.12,37.71,38.0,1164.0,284.0,632.0,289.0,3.0345,152100.0,NEAR BAY --122.12,37.7,41.0,3495.0,787.0,1849.0,750.0,2.679,144900.0,NEAR BAY --122.12,37.7,17.0,2488.0,617.0,1287.0,538.0,2.9922,179900.0,NEAR BAY --122.12,37.69,35.0,2681.0,508.0,1580.0,536.0,4.1042,179100.0,NEAR BAY --122.12,37.7,19.0,2495.0,635.0,1571.0,579.0,2.5833,159900.0,NEAR BAY --122.11,37.7,23.0,1689.0,461.0,828.0,443.0,2.1552,161400.0,NEAR BAY --122.11,37.7,29.0,1298.0,306.0,835.0,338.0,2.3274,170400.0,NEAR BAY --122.11,37.7,19.0,2693.0,789.0,1765.0,724.0,2.4206,137500.0,NEAR BAY --122.1,37.69,41.0,746.0,,387.0,161.0,3.9063,178400.0,NEAR BAY --122.11,37.69,37.0,2444.0,651.0,1562.0,618.0,2.6464,155200.0,NEAR BAY --122.11,37.69,42.0,1472.0,310.0,768.0,309.0,3.4643,160900.0,NEAR BAY --122.12,37.69,10.0,2227.0,560.0,1140.0,472.0,2.3973,167300.0,NEAR BAY --122.03,37.69,20.0,200.0,25.0,83.0,31.0,6.5,340000.0,NEAR BAY --121.97,37.64,32.0,1283.0,194.0,485.0,171.0,6.0574,431000.0,<1H OCEAN --122.02,37.63,6.0,2445.0,590.0,1189.0,573.0,3.8958,301100.0,NEAR BAY --122.04,37.63,21.0,1307.0,236.0,586.0,249.0,4.7813,241900.0,NEAR BAY --122.05,37.63,5.0,3785.0,936.0,2240.0,792.0,3.2829,162500.0,NEAR BAY --122.04,37.66,10.0,2031.0,357.0,867.0,352.0,5.3169,299200.0,NEAR BAY --122.04,37.65,10.0,8299.0,1326.0,3827.0,1288.0,6.2579,315500.0,NEAR BAY --122.05,37.68,23.0,7518.0,1279.0,3827.0,1294.0,5.1701,216800.0,NEAR BAY --122.07,37.68,36.0,1815.0,426.0,1280.0,431.0,3.25,218100.0,NEAR BAY --122.06,37.68,30.0,5367.0,1207.0,2667.0,1047.0,3.1796,170300.0,NEAR BAY --122.08,37.68,26.0,1167.0,370.0,253.0,137.0,2.4196,275000.0,NEAR BAY --122.08,37.68,26.0,2607.0,682.0,1401.0,607.0,2.6563,184100.0,NEAR BAY --122.08,37.67,29.0,493.0,168.0,233.0,152.0,0.9637,160000.0,NEAR BAY --122.09,37.67,48.0,1252.0,305.0,673.0,308.0,2.3357,175000.0,NEAR BAY --122.09,37.68,41.0,1382.0,353.0,704.0,314.0,3.5114,197500.0,NEAR BAY --122.09,37.69,43.0,500.0,110.0,273.0,120.0,3.3125,150000.0,NEAR BAY --122.09,37.68,29.0,2333.0,538.0,1120.0,540.0,2.4042,205600.0,NEAR BAY --122.09,37.68,41.0,1834.0,463.0,1105.0,467.0,2.8322,170300.0,NEAR BAY --122.09,37.68,43.0,1415.0,348.0,569.0,293.0,2.5156,190900.0,NEAR BAY --122.1,37.68,37.0,1352.0,342.0,691.0,324.0,3.4032,196900.0,NEAR BAY --122.1,37.68,37.0,2116.0,503.0,1109.0,448.0,2.535,174000.0,NEAR BAY --122.11,37.68,37.0,1976.0,481.0,1197.0,465.0,2.5772,170200.0,NEAR BAY --122.1,37.68,38.0,1779.0,413.0,1061.0,400.0,3.0962,180900.0,NEAR BAY --122.1,37.67,34.0,3659.0,897.0,2479.0,903.0,2.9564,150500.0,NEAR BAY --122.1,37.68,31.0,1892.0,428.0,1162.0,389.0,3.125,167100.0,NEAR BAY --122.12,37.68,35.0,1958.0,484.0,1146.0,448.0,2.95,148900.0,NEAR BAY --122.12,37.68,40.0,1553.0,253.0,724.0,267.0,4.38,196400.0,NEAR BAY --122.12,37.68,37.0,2412.0,394.0,975.0,375.0,4.0417,191100.0,NEAR BAY --122.11,37.67,36.0,2110.0,389.0,952.0,370.0,3.8,187500.0,NEAR BAY --122.12,37.68,45.0,2179.0,401.0,1159.0,399.0,3.4839,180600.0,NEAR BAY --122.13,37.68,45.0,2457.0,445.0,1129.0,422.0,4.0588,182800.0,NEAR BAY --122.13,37.68,44.0,2147.0,399.0,1175.0,401.0,4.1974,179300.0,NEAR BAY --122.13,37.68,43.0,1676.0,340.0,924.0,328.0,3.6,179400.0,NEAR BAY --122.14,37.68,35.0,2976.0,518.0,1424.0,538.0,4.267,210300.0,NEAR BAY --122.14,37.67,34.0,3036.0,533.0,1366.0,500.0,4.2386,192300.0,NEAR BAY --122.15,37.67,35.0,2472.0,398.0,1171.0,390.0,5.5797,198100.0,NEAR BAY --122.14,37.67,36.0,1487.0,249.0,641.0,243.0,4.0682,196200.0,NEAR BAY --122.13,37.67,38.0,2012.0,347.0,880.0,332.0,3.1734,181600.0,NEAR BAY --122.14,37.67,37.0,3342.0,,1635.0,557.0,4.7933,186900.0,NEAR BAY --122.14,37.67,37.0,3156.0,534.0,1495.0,543.0,4.8125,188300.0,NEAR BAY --122.13,37.67,40.0,1748.0,318.0,914.0,317.0,3.8676,184000.0,NEAR BAY --122.12,37.67,33.0,3429.0,681.0,1798.0,694.0,3.9395,184700.0,NEAR BAY --122.13,37.67,42.0,3592.0,703.0,1625.0,665.0,3.2434,179900.0,NEAR BAY --122.11,37.67,38.0,1035.0,247.0,599.0,224.0,3.0917,167200.0,NEAR BAY --122.11,37.67,32.0,3028.0,811.0,2037.0,703.0,3.0645,165400.0,NEAR BAY --122.09,37.67,33.0,2431.0,655.0,1854.0,603.0,2.7019,154000.0,NEAR BAY --122.09,37.67,39.0,2069.0,500.0,1408.0,478.0,3.1115,153500.0,NEAR BAY --122.09,37.66,40.0,1340.0,313.0,766.0,271.0,3.4722,135400.0,NEAR BAY --122.09,37.66,39.0,1160.0,259.0,725.0,274.0,2.2222,158300.0,NEAR BAY --122.05,37.68,32.0,2015.0,318.0,1019.0,340.0,6.1104,240700.0,NEAR BAY --122.06,37.67,22.0,3882.0,816.0,1830.0,743.0,4.2733,180700.0,NEAR BAY --122.07,37.67,27.0,3239.0,671.0,1469.0,616.0,3.2465,230600.0,NEAR BAY --122.07,37.67,28.0,2932.0,739.0,1198.0,624.0,3.2417,210800.0,NEAR BAY --122.07,37.67,38.0,2104.0,409.0,1039.0,394.0,3.875,165300.0,NEAR BAY --122.04,37.67,29.0,1694.0,251.0,690.0,242.0,6.0501,254200.0,NEAR BAY --122.04,37.67,18.0,3000.0,419.0,1155.0,415.0,6.8233,332600.0,NEAR BAY --122.04,37.66,23.0,2419.0,348.0,1066.0,384.0,6.3501,350000.0,NEAR BAY --122.07,37.66,28.0,2280.0,610.0,1255.0,587.0,2.6719,161200.0,NEAR BAY --122.07,37.66,21.0,5031.0,1168.0,2461.0,1042.0,3.875,179300.0,NEAR BAY --122.08,37.66,33.0,1547.0,372.0,1063.0,356.0,2.5625,154300.0,NEAR BAY --122.07,37.65,31.0,3300.0,790.0,2181.0,740.0,3.016,161800.0,NEAR BAY --122.08,37.65,17.0,5018.0,1439.0,3069.0,1299.0,2.7694,161900.0,NEAR BAY --122.08,37.65,35.0,1813.0,393.0,1093.0,374.0,3.6818,165400.0,NEAR BAY --122.08,37.66,37.0,1997.0,436.0,1349.0,437.0,2.1382,166600.0,NEAR BAY --122.1,37.66,37.0,901.0,191.0,599.0,206.0,3.7303,149700.0,NEAR BAY --122.1,37.66,35.0,686.0,142.0,480.0,149.0,3.875,162100.0,NEAR BAY --122.1,37.66,33.0,1954.0,464.0,1293.0,448.0,3.0489,152600.0,NEAR BAY --122.09,37.65,27.0,2630.0,722.0,1414.0,634.0,2.8203,195200.0,NEAR BAY --122.09,37.65,35.0,1130.0,192.0,543.0,184.0,4.3897,190600.0,NEAR BAY --122.09,37.65,35.0,1184.0,200.0,572.0,194.0,4.7143,193800.0,NEAR BAY --122.1,37.66,34.0,656.0,115.0,342.0,112.0,4.6875,200600.0,NEAR BAY --122.11,37.66,29.0,2544.0,643.0,2332.0,603.0,3.2091,150000.0,NEAR BAY --122.1,37.66,36.0,1305.0,225.0,768.0,234.0,4.275,185300.0,NEAR BAY --122.11,37.66,36.0,1755.0,316.0,913.0,299.0,4.1302,172700.0,NEAR BAY --122.11,37.66,35.0,2843.0,652.0,1726.0,643.0,3.09,174100.0,NEAR BAY --122.1,37.65,25.0,2538.0,494.0,1185.0,501.0,4.5417,194400.0,NEAR BAY --122.1,37.64,28.0,1784.0,311.0,735.0,278.0,4.6635,206700.0,NEAR BAY --122.1,37.65,31.0,1797.0,327.0,796.0,319.0,4.4427,204500.0,NEAR BAY --122.1,37.65,36.0,410.0,76.0,252.0,82.0,4.5303,175000.0,NEAR BAY --122.12,37.65,26.0,162.0,27.0,86.0,25.0,2.375,137500.0,NEAR BAY --122.1,37.63,18.0,9963.0,2031.0,5613.0,1946.0,3.8171,187200.0,NEAR BAY --122.1,37.61,35.0,2361.0,458.0,1727.0,467.0,4.5281,173600.0,NEAR BAY --122.13,37.66,19.0,862.0,167.0,407.0,183.0,4.3456,163000.0,NEAR BAY --122.11,37.65,18.0,4335.0,808.0,2041.0,734.0,3.4861,331600.0,NEAR BAY --122.11,37.64,31.0,1487.0,280.0,854.0,301.0,5.2312,197600.0,NEAR BAY --122.11,37.64,8.0,3592.0,849.0,1907.0,746.0,3.6708,197900.0,NEAR BAY --122.12,37.64,40.0,432.0,102.0,264.0,77.0,3.8875,228100.0,NEAR BAY --122.09,37.63,34.0,1457.0,242.0,735.0,249.0,3.9167,189500.0,NEAR BAY --122.09,37.64,32.0,1578.0,284.0,836.0,292.0,3.9063,184200.0,NEAR BAY --122.1,37.63,29.0,2172.0,435.0,1377.0,408.0,3.7895,180900.0,NEAR BAY --122.08,37.64,36.0,1340.0,245.0,789.0,248.0,3.8,172000.0,NEAR BAY --122.08,37.64,36.0,1116.0,199.0,662.0,226.0,5.7309,177900.0,NEAR BAY --122.09,37.64,36.0,1885.0,307.0,853.0,271.0,4.1141,173100.0,NEAR BAY --122.09,37.64,36.0,1180.0,212.0,664.0,200.0,5.2838,172600.0,NEAR BAY --122.08,37.64,30.0,5267.0,1253.0,4065.0,1113.0,3.3479,182100.0,NEAR BAY --122.08,37.64,23.0,1897.0,440.0,1109.0,418.0,3.142,179500.0,NEAR BAY --122.08,37.63,31.0,767.0,171.0,548.0,185.0,3.7614,176000.0,NEAR BAY --122.08,37.63,33.0,691.0,127.0,431.0,149.0,4.25,192600.0,NEAR BAY --122.08,37.64,36.0,786.0,133.0,463.0,160.0,3.9338,182700.0,NEAR BAY --122.07,37.64,22.0,5861.0,1516.0,5436.0,1463.0,2.5158,134900.0,NEAR BAY --122.07,37.63,27.0,2784.0,723.0,2028.0,693.0,2.4808,157600.0,NEAR BAY --122.07,37.64,25.0,4524.0,860.0,2426.0,862.0,4.7083,190900.0,NEAR BAY --122.06,37.64,37.0,1468.0,304.0,1038.0,282.0,4.1652,158200.0,NEAR BAY --122.06,37.64,20.0,1655.0,450.0,857.0,430.0,3.5541,350000.0,NEAR BAY --122.06,37.65,33.0,1227.0,286.0,848.0,291.0,3.8036,158200.0,NEAR BAY --122.06,37.64,33.0,1160.0,252.0,729.0,220.0,3.8259,146100.0,NEAR BAY --122.04,37.63,33.0,952.0,172.0,369.0,159.0,3.2331,226700.0,NEAR BAY --122.03,37.62,35.0,2072.0,352.0,1001.0,350.0,4.7109,198700.0,NEAR BAY --122.03,37.62,32.0,2964.0,547.0,1472.0,527.0,4.2468,221200.0,NEAR BAY --122.04,37.62,35.0,1032.0,173.0,453.0,176.0,6.396,208500.0,NEAR BAY --122.04,37.62,35.0,657.0,118.0,328.0,134.0,3.8125,204200.0,NEAR BAY --122.04,37.62,32.0,1540.0,324.0,793.0,302.0,3.2857,193200.0,NEAR BAY --122.03,37.62,35.0,1298.0,236.0,632.0,204.0,3.8929,209500.0,NEAR BAY --122.03,37.61,36.0,1409.0,271.0,1002.0,281.0,3.7262,164900.0,NEAR BAY --122.03,37.61,37.0,1383.0,259.0,808.0,241.0,4.0125,161400.0,NEAR BAY --122.04,37.61,36.0,1151.0,216.0,727.0,215.0,4.1719,187000.0,NEAR BAY --122.04,37.62,35.0,899.0,179.0,455.0,185.0,4.2857,190400.0,NEAR BAY --122.08,37.63,37.0,1793.0,364.0,1534.0,346.0,3.6458,156600.0,NEAR BAY --122.08,37.62,17.0,2485.0,518.0,1139.0,550.0,2.6875,157300.0,NEAR BAY --122.07,37.63,35.0,1931.0,376.0,1175.0,337.0,3.7292,168100.0,NEAR BAY --122.07,37.63,24.0,2329.0,465.0,1401.0,453.0,4.5913,177600.0,NEAR BAY --122.06,37.63,12.0,6711.0,1374.0,3388.0,1289.0,3.8625,208900.0,NEAR BAY --122.06,37.63,23.0,1939.0,356.0,841.0,364.0,3.3611,169200.0,NEAR BAY --122.05,37.61,16.0,1642.0,346.0,705.0,351.0,2.8971,163900.0,NEAR BAY --122.08,37.63,34.0,1619.0,293.0,1148.0,310.0,4.0326,164700.0,NEAR BAY --122.08,37.63,35.0,517.0,108.0,391.0,107.0,4.0682,156900.0,NEAR BAY --122.09,37.63,36.0,1570.0,274.0,992.0,249.0,5.3644,168800.0,NEAR BAY --122.09,37.63,35.0,1213.0,221.0,790.0,243.0,4.7019,174100.0,NEAR BAY --122.08,37.62,27.0,1826.0,309.0,1016.0,313.0,5.64,206500.0,NEAR BAY --122.08,37.61,26.0,2261.0,443.0,1039.0,395.0,3.7931,203900.0,NEAR BAY --121.99,37.61,9.0,3666.0,711.0,2341.0,703.0,4.6458,217000.0,<1H OCEAN --122.02,37.6,36.0,1633.0,345.0,1382.0,338.0,3.694,159600.0,NEAR BAY --122.02,37.6,31.0,2155.0,522.0,1858.0,437.0,2.652,159800.0,NEAR BAY --122.02,37.6,32.0,1295.0,280.0,1156.0,300.0,3.5,154300.0,NEAR BAY --122.02,37.6,32.0,1295.0,295.0,1097.0,328.0,3.2386,149600.0,NEAR BAY --122.03,37.61,33.0,1518.0,302.0,831.0,268.0,5.097,188600.0,NEAR BAY --122.04,37.6,17.0,3314.0,638.0,1873.0,602.0,4.3875,238500.0,NEAR BAY --122.06,37.6,22.0,3009.0,497.0,1640.0,514.0,4.625,235300.0,NEAR BAY --122.08,37.61,6.0,2605.0,474.0,1568.0,433.0,5.0406,261400.0,NEAR BAY --122.06,37.6,17.0,5159.0,832.0,3174.0,817.0,5.8704,234400.0,NEAR BAY --122.06,37.6,18.0,1726.0,276.0,1186.0,310.0,5.3226,231700.0,NEAR BAY --122.08,37.59,16.0,1816.0,365.0,1367.0,355.0,4.235,156300.0,NEAR BAY --122.07,37.59,13.0,2578.0,551.0,1680.0,528.0,4.825,222000.0,NEAR BAY --122.08,37.58,15.0,2576.0,418.0,1657.0,410.0,5.5218,254400.0,NEAR BAY --122.07,37.58,16.0,1644.0,251.0,1033.0,267.0,6.5116,244300.0,NEAR BAY --122.07,37.58,16.0,1606.0,240.0,1117.0,268.0,6.0661,247000.0,NEAR BAY --122.08,37.58,16.0,3349.0,544.0,2003.0,488.0,6.0074,236500.0,NEAR BAY --122.07,37.59,15.0,3475.0,686.0,2568.0,653.0,4.6211,151400.0,NEAR BAY --122.07,37.58,16.0,1893.0,338.0,1461.0,344.0,5.225,213700.0,NEAR BAY --122.04,37.59,14.0,1727.0,302.0,1116.0,273.0,5.3428,243600.0,NEAR BAY --122.05,37.59,15.0,6243.0,1273.0,3163.0,1274.0,3.7462,212500.0,NEAR BAY --122.03,37.6,24.0,2077.0,383.0,1488.0,389.0,4.5721,214700.0,NEAR BAY --122.02,37.59,18.0,1165.0,333.0,855.0,319.0,3.6923,213200.0,NEAR BAY --122.03,37.59,16.0,4371.0,889.0,2530.0,817.0,4.6786,256000.0,NEAR BAY --122.01,37.59,2.0,838.0,295.0,240.0,149.0,2.875,237500.0,NEAR BAY --122.02,37.58,15.0,3052.0,760.0,2097.0,728.0,3.3617,178100.0,NEAR BAY --122.01,37.58,17.0,4313.0,717.0,2629.0,721.0,5.7579,231800.0,NEAR BAY --122.09,37.6,36.0,385.0,94.0,295.0,92.0,2.9706,147900.0,NEAR BAY --122.08,37.6,10.0,3046.0,678.0,2056.0,628.0,3.9022,191700.0,NEAR BAY --121.97,37.57,21.0,4342.0,783.0,2172.0,789.0,4.6146,247600.0,<1H OCEAN --121.96,37.58,15.0,3575.0,597.0,1777.0,559.0,5.7192,283500.0,<1H OCEAN --121.98,37.58,20.0,4126.0,1031.0,2079.0,975.0,3.6832,216900.0,<1H OCEAN --121.99,37.58,31.0,2878.0,478.0,1276.0,485.0,6.2073,282500.0,<1H OCEAN --122.0,37.58,6.0,4405.0,717.0,2071.0,688.0,5.8151,295600.0,<1H OCEAN --122.01,37.57,14.0,16199.0,2993.0,8117.0,2847.0,5.8322,281800.0,NEAR BAY --122.04,37.58,14.0,14917.0,2708.0,8012.0,2606.0,5.6277,269800.0,NEAR BAY --122.04,37.57,12.0,5719.0,1064.0,3436.0,1057.0,5.2879,231200.0,NEAR BAY --122.07,37.57,8.0,8647.0,1407.0,5019.0,1379.0,6.5615,318300.0,NEAR BAY --122.06,37.58,15.0,8112.0,1376.0,4576.0,1348.0,5.6758,253400.0,NEAR BAY --122.05,37.57,7.0,10648.0,1818.0,6075.0,1797.0,6.1047,278200.0,NEAR BAY --121.93,37.49,5.0,1150.0,311.0,648.0,245.0,3.5714,300000.0,<1H OCEAN --122.07,37.52,3.0,14014.0,2861.0,7205.0,2753.0,6.0824,273500.0,NEAR BAY --122.02,37.56,23.0,4332.0,857.0,2461.0,829.0,4.3594,223400.0,NEAR BAY --122.02,37.56,35.0,1716.0,312.0,914.0,316.0,5.5737,214500.0,NEAR BAY --122.03,37.56,31.0,4981.0,964.0,2841.0,924.0,4.8962,220200.0,NEAR BAY --122.03,37.56,24.0,8444.0,1492.0,4446.0,1491.0,4.6978,240300.0,NEAR BAY --122.01,37.56,6.0,3028.0,778.0,1531.0,736.0,4.4259,158000.0,NEAR BAY --122.01,37.55,26.0,2068.0,532.0,1434.0,495.0,3.3008,224200.0,NEAR BAY --122.02,37.55,33.0,1325.0,274.0,909.0,267.0,4.5687,177200.0,NEAR BAY --122.01,37.56,24.0,2563.0,485.0,1174.0,501.0,3.8179,216100.0,NEAR BAY --121.99,37.56,18.0,5505.0,1005.0,2641.0,971.0,5.0,269700.0,<1H OCEAN --121.99,37.56,20.0,6462.0,1294.0,3288.0,1235.0,4.3393,231200.0,<1H OCEAN --121.96,37.55,4.0,3746.0,993.0,1606.0,838.0,4.1387,162500.0,<1H OCEAN --121.97,37.56,13.0,8918.0,1823.0,4518.0,1772.0,4.8052,254000.0,<1H OCEAN --121.97,37.54,31.0,1949.0,344.0,986.0,322.0,4.6349,196200.0,<1H OCEAN --121.97,37.55,17.0,4924.0,1247.0,3080.0,1182.0,3.168,189400.0,<1H OCEAN --121.98,37.54,17.0,5133.0,1375.0,3386.0,1339.0,3.1326,220800.0,<1H OCEAN --121.99,37.55,16.0,6647.0,2098.0,4649.0,1903.0,2.9074,213800.0,<1H OCEAN --121.94,37.56,15.0,5674.0,748.0,2412.0,714.0,8.3996,442900.0,<1H OCEAN --121.95,37.55,21.0,10687.0,1540.0,4552.0,1520.0,6.6478,333400.0,<1H OCEAN --121.93,37.54,25.0,1354.0,192.0,596.0,220.0,6.629,352400.0,<1H OCEAN --121.94,37.54,27.0,3715.0,526.0,1631.0,538.0,6.2179,305300.0,<1H OCEAN --121.94,37.53,33.0,2095.0,342.0,941.0,304.0,5.761,259600.0,<1H OCEAN --121.95,37.54,29.0,3517.0,645.0,1724.0,585.0,4.6641,248900.0,<1H OCEAN --121.94,37.54,31.0,2537.0,382.0,1067.0,410.0,6.7599,356000.0,<1H OCEAN --121.96,37.54,14.0,5106.0,1207.0,2738.0,1108.0,3.9909,236000.0,<1H OCEAN --121.96,37.53,23.0,2215.0,475.0,1278.0,492.0,4.2955,218800.0,<1H OCEAN --121.96,37.53,28.0,2949.0,529.0,1538.0,545.0,4.9615,228000.0,<1H OCEAN --121.96,37.53,18.0,2375.0,652.0,1252.0,586.0,2.6198,235900.0,<1H OCEAN --121.97,37.54,28.0,2312.0,496.0,1344.0,467.0,4.7135,203200.0,<1H OCEAN --121.97,37.53,35.0,2277.0,420.0,1353.0,413.0,4.75,197000.0,<1H OCEAN --121.97,37.53,26.0,2506.0,387.0,1273.0,406.0,5.4299,236400.0,<1H OCEAN --121.98,37.53,28.0,2829.0,566.0,1610.0,540.0,4.6,223200.0,<1H OCEAN --121.98,37.53,26.0,3179.0,703.0,2142.0,639.0,4.1947,222700.0,<1H OCEAN --121.99,37.54,26.0,2332.0,371.0,1285.0,404.0,5.388,225000.0,<1H OCEAN --121.99,37.54,18.0,3584.0,715.0,1673.0,661.0,3.9444,240100.0,<1H OCEAN --121.99,37.54,28.0,3046.0,507.0,1772.0,516.0,5.3283,227900.0,<1H OCEAN --121.99,37.55,28.0,2414.0,415.0,1106.0,453.0,4.8403,268600.0,<1H OCEAN --122.0,37.54,29.0,4133.0,744.0,2023.0,749.0,5.1616,275100.0,<1H OCEAN --122.01,37.55,34.0,2791.0,495.0,1276.0,468.0,4.9167,256300.0,NEAR BAY --122.0,37.55,27.0,6103.0,1249.0,3026.0,1134.0,4.1591,332400.0,<1H OCEAN --122.01,37.54,32.0,2572.0,406.0,1128.0,395.0,5.0,287600.0,NEAR BAY --122.0,37.54,26.0,1910.0,371.0,852.0,357.0,5.8325,298900.0,<1H OCEAN --122.01,37.53,27.0,1890.0,303.0,889.0,314.0,5.7057,287600.0,NEAR BAY --121.99,37.53,25.0,5405.0,939.0,2831.0,923.0,5.0423,222200.0,<1H OCEAN --121.97,37.52,26.0,3761.0,623.0,1776.0,613.0,4.5317,232600.0,<1H OCEAN --121.97,37.51,25.0,3333.0,511.0,1671.0,504.0,5.4359,258300.0,<1H OCEAN --121.97,37.52,23.0,4925.0,948.0,2530.0,894.0,5.0824,230900.0,<1H OCEAN --121.95,37.52,33.0,3994.0,764.0,2721.0,763.0,5.2308,196900.0,<1H OCEAN --121.96,37.51,22.0,5811.0,1125.0,3215.0,1086.0,4.4107,223500.0,<1H OCEAN --121.96,37.52,26.0,4211.0,741.0,2352.0,734.0,5.2396,223900.0,<1H OCEAN --121.93,37.53,27.0,5532.0,973.0,2855.0,960.0,4.7478,243500.0,<1H OCEAN --121.92,37.53,7.0,28258.0,3864.0,12203.0,3701.0,8.4045,451100.0,<1H OCEAN --121.89,37.49,9.0,4909.0,577.0,1981.0,591.0,9.7194,500001.0,<1H OCEAN --121.92,37.49,10.0,7441.0,1588.0,3571.0,1466.0,5.1643,193100.0,<1H OCEAN --121.92,37.48,23.0,4314.0,676.0,1972.0,623.0,5.3813,264400.0,<1H OCEAN --121.92,37.47,26.0,2016.0,322.0,1105.0,357.0,6.0878,246900.0,<1H OCEAN --121.91,37.47,13.0,5377.0,744.0,2759.0,760.0,6.868,337300.0,<1H OCEAN --122.03,37.55,22.0,9167.0,1373.0,4319.0,1404.0,6.992,284800.0,NEAR BAY --122.03,37.55,26.0,3087.0,532.0,1597.0,483.0,4.9118,217300.0,NEAR BAY --122.04,37.55,23.0,3170.0,532.0,1446.0,515.0,4.4357,291700.0,NEAR BAY --122.04,37.54,26.0,2145.0,369.0,1285.0,377.0,4.9464,223800.0,NEAR BAY --122.05,37.54,25.0,4209.0,731.0,2568.0,703.0,5.2882,223100.0,NEAR BAY --122.05,37.55,23.0,4247.0,835.0,2357.0,823.0,5.1321,211300.0,NEAR BAY --122.04,37.53,25.0,4458.0,922.0,2998.0,890.0,3.9667,218500.0,NEAR BAY --122.04,37.5,17.0,407.0,97.0,307.0,100.0,3.1696,156300.0,NEAR BAY --122.06,37.54,20.0,6483.0,1068.0,3526.0,1060.0,5.0838,248200.0,NEAR BAY --122.03,37.54,35.0,1867.0,343.0,1213.0,338.0,4.8214,186000.0,NEAR BAY --122.03,37.54,6.0,2918.0,672.0,1911.0,639.0,4.1406,178200.0,NEAR BAY --122.04,37.53,34.0,2316.0,478.0,1524.0,467.0,3.7364,190400.0,NEAR BAY --122.02,37.54,31.0,1240.0,264.0,719.0,236.0,3.535,210300.0,NEAR BAY --122.03,37.54,16.0,4458.0,856.0,3038.0,870.0,5.0739,208000.0,NEAR BAY --122.03,37.53,18.0,1746.0,437.0,1268.0,404.0,3.256,183300.0,NEAR BAY --122.01,37.53,19.0,4572.0,712.0,2346.0,709.0,6.0667,245700.0,NEAR BAY --122.02,37.53,21.0,4280.0,673.0,2216.0,681.0,5.7072,242200.0,NEAR BAY --122.0,37.51,7.0,6352.0,1390.0,3223.0,1316.0,4.9867,181700.0,<1H OCEAN --121.92,37.72,4.0,7477.0,1576.0,2937.0,1506.0,5.1437,299400.0,<1H OCEAN --121.92,37.72,22.0,4638.0,716.0,2302.0,687.0,5.347,219500.0,<1H OCEAN --121.91,37.71,25.0,4377.0,668.0,2038.0,671.0,5.7233,231800.0,<1H OCEAN --121.93,37.72,26.0,3816.0,637.0,1935.0,642.0,4.4697,221300.0,<1H OCEAN --121.93,37.72,26.0,2806.0,459.0,1453.0,444.0,4.9107,213800.0,<1H OCEAN --121.93,37.71,26.0,4822.0,845.0,2288.0,805.0,4.2281,206000.0,<1H OCEAN --121.94,37.71,15.0,6473.0,1027.0,2484.0,970.0,5.0143,271100.0,<1H OCEAN --121.96,37.71,6.0,8072.0,1050.0,3386.0,1062.0,7.2494,336500.0,<1H OCEAN --121.92,37.64,46.0,1280.0,209.0,512.0,208.0,5.1406,315600.0,INLAND --121.93,37.66,24.0,3166.0,424.0,1081.0,400.0,8.3337,500001.0,<1H OCEAN --121.92,37.69,13.0,3742.0,555.0,1590.0,559.0,7.316,285400.0,<1H OCEAN --121.9,37.66,18.0,7397.0,1137.0,3126.0,1115.0,6.4994,323000.0,INLAND --121.92,37.68,23.0,1655.0,223.0,706.0,219.0,7.2211,291900.0,<1H OCEAN --121.93,37.7,3.0,2456.0,582.0,793.0,456.0,4.4087,225600.0,<1H OCEAN --121.91,37.69,23.0,2179.0,308.0,926.0,299.0,5.9345,259600.0,<1H OCEAN --121.91,37.68,20.0,1804.0,254.0,831.0,260.0,6.177,262900.0,<1H OCEAN --121.91,37.68,18.0,3631.0,547.0,1700.0,520.0,5.817,257300.0,<1H OCEAN --121.91,37.69,18.0,2876.0,423.0,1395.0,427.0,6.3132,259200.0,<1H OCEAN --121.89,37.68,12.0,7490.0,1207.0,3329.0,1136.0,6.3373,339700.0,<1H OCEAN --121.88,37.68,23.0,2234.0,270.0,854.0,286.0,7.333,337200.0,INLAND --121.89,37.68,22.0,1898.0,239.0,734.0,245.0,6.2918,334100.0,<1H OCEAN --121.88,37.67,16.0,4070.0,624.0,1543.0,577.0,6.5214,311500.0,INLAND --121.88,37.67,25.0,2244.0,301.0,937.0,324.0,6.4524,296900.0,INLAND --121.89,37.67,20.0,2948.0,471.0,1181.0,474.0,6.0604,247900.0,INLAND --121.89,37.67,19.0,2034.0,288.0,852.0,295.0,6.5285,300400.0,INLAND --121.9,37.67,15.0,2130.0,273.0,876.0,285.0,7.2639,332400.0,<1H OCEAN --121.9,37.67,7.0,9540.0,1294.0,3926.0,1229.0,7.4353,389800.0,<1H OCEAN --121.88,37.66,29.0,2702.0,680.0,1360.0,642.0,3.1127,233000.0,INLAND --121.87,37.66,39.0,522.0,116.0,161.0,102.0,2.4896,238500.0,INLAND --121.87,37.66,52.0,775.0,134.0,315.0,123.0,5.0677,233300.0,INLAND --121.89,37.66,3.0,1565.0,464.0,769.0,461.0,2.1187,231300.0,INLAND --121.88,37.64,20.0,1309.0,184.0,514.0,172.0,10.9506,475800.0,INLAND --121.87,37.57,13.0,5519.0,833.0,2444.0,825.0,7.0691,393200.0,<1H OCEAN --121.87,37.67,10.0,4337.0,800.0,1813.0,743.0,5.5,247200.0,INLAND --121.87,37.67,28.0,1812.0,294.0,853.0,278.0,4.9879,229400.0,INLAND --121.85,37.68,4.0,4719.0,741.0,1895.0,742.0,6.8132,282500.0,INLAND --121.85,37.66,14.0,4236.0,701.0,1833.0,663.0,5.6399,300600.0,INLAND --121.86,37.66,22.0,3634.0,664.0,1699.0,640.0,4.1597,293200.0,INLAND --121.87,37.66,27.0,1569.0,242.0,583.0,214.0,5.7519,278500.0,INLAND --121.84,37.66,13.0,13182.0,2074.0,4847.0,1950.0,5.6417,352900.0,INLAND --121.85,37.72,43.0,228.0,40.0,83.0,42.0,10.3203,400000.0,INLAND --121.82,37.73,47.0,127.0,23.0,51.0,21.0,4.3472,375000.0,INLAND --121.86,37.7,13.0,9621.0,1344.0,4389.0,1391.0,6.6827,313700.0,INLAND --121.89,37.69,4.0,6159.0,1510.0,2649.0,1241.0,3.62,139300.0,<1H OCEAN --121.77,37.65,16.0,4290.0,554.0,1952.0,576.0,7.3588,327500.0,INLAND --121.62,37.61,26.0,1786.0,306.0,771.0,279.0,5.7239,430600.0,INLAND --121.61,37.77,32.0,404.0,74.0,144.0,58.0,4.2083,125000.0,INLAND --121.72,37.7,17.0,1671.0,352.0,729.0,252.0,6.1023,450000.0,INLAND --121.73,37.71,12.0,5608.0,1049.0,2595.0,1067.0,3.9864,200200.0,INLAND --121.75,37.71,11.0,12070.0,2220.0,5826.0,2125.0,4.8624,192400.0,INLAND --121.77,37.74,25.0,494.0,81.0,254.0,85.0,9.1531,418800.0,INLAND --121.8,37.7,22.0,5533.0,943.0,2474.0,910.0,4.7361,216800.0,INLAND --121.8,37.69,17.0,3956.0,639.0,2222.0,662.0,5.4324,215500.0,INLAND --121.82,37.69,12.0,1906.0,351.0,802.0,319.0,4.9375,227700.0,INLAND --121.76,37.69,29.0,3433.0,711.0,1919.0,709.0,3.3841,184400.0,INLAND --121.77,37.68,36.0,1687.0,372.0,950.0,372.0,3.5532,158400.0,INLAND --121.78,37.69,34.0,2358.0,498.0,1157.0,461.0,3.3618,174600.0,INLAND --121.78,37.69,35.0,2853.0,588.0,1761.0,572.0,4.3533,168400.0,INLAND --121.79,37.69,25.0,6296.0,1082.0,3200.0,1047.0,4.5357,188400.0,INLAND --121.76,37.7,9.0,3980.0,736.0,1705.0,679.0,5.7068,256700.0,INLAND --121.75,37.69,26.0,2647.0,536.0,1422.0,522.0,3.7212,183800.0,INLAND --121.75,37.68,35.0,1755.0,299.0,702.0,263.0,5.2443,183400.0,INLAND --121.76,37.68,35.0,1864.0,357.0,1189.0,349.0,4.2361,177500.0,INLAND --121.76,37.68,32.0,1078.0,207.0,555.0,197.0,3.1856,186900.0,INLAND --121.73,37.68,17.0,20354.0,3493.0,8768.0,3293.0,5.4496,238900.0,INLAND --121.78,37.68,17.0,3112.0,872.0,1392.0,680.0,3.0222,172500.0,INLAND --121.77,37.68,44.0,495.0,112.0,277.0,109.0,2.6667,179200.0,INLAND --121.76,37.68,52.0,2157.0,418.0,929.0,419.0,3.7301,204400.0,INLAND --121.77,37.68,41.0,1501.0,299.0,629.0,288.0,4.6806,209400.0,INLAND --121.77,37.67,20.0,8068.0,1217.0,3489.0,1259.0,5.7907,264200.0,INLAND --121.76,37.67,6.0,3023.0,518.0,1225.0,468.0,6.3705,350000.0,INLAND --121.78,37.67,26.0,2211.0,344.0,1024.0,321.0,5.2649,199800.0,INLAND --121.79,37.67,26.0,2163.0,339.0,947.0,346.0,6.0797,211000.0,INLAND --121.78,37.67,28.0,1773.0,278.0,804.0,269.0,4.8571,201100.0,INLAND --121.78,37.66,25.0,1947.0,418.0,900.0,354.0,3.8523,193000.0,INLAND --121.79,37.66,22.0,14701.0,2210.0,6693.0,2232.0,5.98,245000.0,INLAND --119.78,38.69,17.0,1364.0,282.0,338.0,152.0,2.45,117600.0,INLAND --119.93,38.72,15.0,2061.0,465.0,573.0,196.0,2.2417,97900.0,INLAND --120.0,38.52,16.0,3045.0,543.0,202.0,102.0,3.15,140600.0,INLAND --120.56,38.48,14.0,3545.0,702.0,946.0,411.0,3.4609,120900.0,INLAND --120.59,38.45,13.0,2944.0,558.0,1091.0,466.0,3.0,119000.0,INLAND --120.55,38.46,16.0,1443.0,249.0,435.0,181.0,3.2031,129200.0,INLAND --120.55,38.45,17.0,2277.0,474.0,767.0,356.0,2.5208,99100.0,INLAND --120.55,38.43,18.0,1564.0,357.0,618.0,277.0,2.3549,108900.0,INLAND --120.25,38.55,15.0,4403.0,891.0,1103.0,433.0,3.0125,111700.0,INLAND --120.79,38.54,34.0,1133.0,254.0,495.0,187.0,2.05,68900.0,INLAND --120.8,38.51,23.0,1001.0,195.0,369.0,157.0,3.125,96400.0,INLAND --120.65,38.5,10.0,1783.0,337.0,638.0,262.0,2.65,116700.0,INLAND --120.76,38.47,17.0,1521.0,309.0,607.0,240.0,3.5,123800.0,INLAND --120.88,38.45,25.0,1374.0,297.0,657.0,288.0,2.5476,97900.0,INLAND --120.79,38.43,40.0,1391.0,246.0,546.0,214.0,3.9107,129800.0,INLAND --120.69,38.44,13.0,1473.0,265.0,597.0,228.0,4.2917,121300.0,INLAND --120.93,38.5,15.0,1248.0,234.0,529.0,216.0,3.3393,107200.0,INLAND --120.97,38.42,16.0,1748.0,322.0,4930.0,287.0,4.3029,121900.0,INLAND --120.87,38.37,28.0,3998.0,765.0,1614.0,698.0,2.8125,113400.0,INLAND --120.98,38.34,27.0,3471.0,653.0,1793.0,600.0,3.5508,99100.0,INLAND --120.88,38.32,18.0,2791.0,492.0,1187.0,438.0,3.2589,103000.0,INLAND --120.93,38.26,13.0,2084.0,449.0,834.0,305.0,3.2937,114200.0,INLAND --120.72,38.42,17.0,5654.0,1085.0,2237.0,953.0,3.0465,144100.0,INLAND --120.77,38.38,15.0,4221.0,816.0,1737.0,743.0,2.3125,128600.0,INLAND --120.72,38.38,9.0,1787.0,347.0,806.0,306.0,2.525,157200.0,INLAND --120.66,38.4,18.0,2144.0,420.0,985.0,381.0,3.175,118500.0,INLAND --120.65,38.42,23.0,1538.0,305.0,730.0,267.0,2.6078,116700.0,INLAND --120.62,38.39,15.0,3750.0,691.0,1444.0,603.0,2.7399,134800.0,INLAND --120.69,38.36,19.0,3267.0,614.0,1252.0,566.0,2.7236,109900.0,INLAND --120.71,38.34,16.0,1257.0,231.0,559.0,213.0,4.4531,144300.0,INLAND --120.8,38.31,37.0,1341.0,256.0,533.0,242.0,3.2135,123600.0,INLAND --121.83,39.76,12.0,9831.0,1921.0,4644.0,1775.0,3.1142,112600.0,INLAND --121.82,39.76,23.0,6010.0,1116.0,2710.0,1149.0,3.0068,107300.0,INLAND --121.86,39.78,12.0,7653.0,1578.0,3628.0,1494.0,3.0905,117800.0,INLAND --121.85,39.77,17.0,5273.0,1177.0,2446.0,1199.0,1.9362,89900.0,INLAND --121.84,39.76,14.0,2351.0,620.0,1215.0,548.0,2.3155,102300.0,INLAND --121.86,39.76,19.0,7254.0,1785.0,4030.0,1667.0,2.0094,87300.0,INLAND --121.89,39.76,15.0,10265.0,1860.0,4591.0,1906.0,3.07,142600.0,INLAND --121.88,39.74,12.0,14631.0,3298.0,7517.0,3262.0,1.6785,153100.0,INLAND --121.87,39.75,22.0,1707.0,296.0,822.0,297.0,3.6625,126600.0,INLAND --121.86,39.75,18.0,1651.0,309.0,856.0,293.0,3.5046,118300.0,INLAND --121.87,39.74,7.0,1737.0,290.0,747.0,265.0,3.9,147000.0,INLAND --121.85,39.75,39.0,568.0,127.0,267.0,129.0,1.8095,78100.0,INLAND --121.85,39.74,39.0,1139.0,265.0,623.0,264.0,2.2833,85800.0,INLAND --121.85,39.74,41.0,2901.0,689.0,1426.0,632.0,1.5633,84500.0,INLAND --121.85,39.73,52.0,444.0,80.0,1107.0,98.0,3.4191,137500.0,INLAND --121.85,39.73,17.0,3425.0,827.0,2469.0,758.0,0.9393,88900.0,INLAND --121.86,39.74,13.0,3494.0,843.0,1571.0,784.0,1.1019,120200.0,INLAND --121.84,39.75,29.0,4362.0,1053.0,2053.0,1000.0,1.7284,74500.0,INLAND --121.84,39.74,43.0,2976.0,599.0,1181.0,560.0,2.2621,85100.0,INLAND --121.83,39.74,34.0,3263.0,604.0,1290.0,594.0,2.575,130300.0,INLAND --121.8,39.75,28.0,2551.0,378.0,1011.0,374.0,4.3309,125200.0,INLAND --121.82,39.75,29.0,7744.0,1375.0,3316.0,1365.0,3.0253,111400.0,INLAND --121.82,39.75,37.0,2236.0,372.0,974.0,379.0,3.2016,97000.0,INLAND --121.8,39.75,11.0,7212.0,1355.0,3264.0,1264.0,3.1125,122600.0,INLAND --121.79,39.73,8.0,5690.0,1189.0,2887.0,1077.0,3.0625,116300.0,INLAND --121.78,39.71,8.0,140.0,28.0,84.0,29.0,2.125,179200.0,INLAND --121.82,39.73,44.0,2923.0,659.0,1371.0,626.0,2.2925,85800.0,INLAND --121.84,39.73,52.0,677.0,152.0,379.0,154.0,1.6797,94800.0,INLAND --121.84,39.73,52.0,502.0,100.0,311.0,100.0,1.5481,200000.0,INLAND --121.84,39.73,52.0,857.0,232.0,520.0,198.0,0.987,112500.0,INLAND --121.84,39.72,52.0,1457.0,389.0,802.0,342.0,0.9566,69000.0,INLAND --121.84,39.73,52.0,957.0,263.0,513.0,223.0,1.3672,55000.0,INLAND --121.83,39.73,52.0,1741.0,401.0,753.0,377.0,2.0064,77900.0,INLAND --121.85,39.72,18.0,7272.0,1559.0,5022.0,1524.0,1.6911,98800.0,INLAND --121.83,39.72,52.0,1890.0,420.0,974.0,383.0,1.6827,78700.0,INLAND --121.81,39.7,21.0,5051.0,1054.0,2948.0,980.0,1.5863,81300.0,INLAND --121.82,39.73,33.0,2242.0,517.0,1160.0,449.0,1.7426,60300.0,INLAND --121.82,39.72,42.0,2978.0,694.0,1879.0,679.0,1.5064,66300.0,INLAND --121.81,39.71,18.0,1222.0,250.0,708.0,281.0,2.0288,116700.0,INLAND --121.87,39.82,11.0,5103.0,825.0,2456.0,810.0,4.5032,159700.0,INLAND --121.89,39.71,26.0,2741.0,451.0,1217.0,437.0,3.7007,139200.0,INLAND --121.97,39.79,16.0,1453.0,299.0,904.0,286.0,3.5735,89600.0,INLAND --121.84,39.68,38.0,549.0,105.0,275.0,94.0,3.5375,153100.0,INLAND --121.8,39.64,25.0,2202.0,422.0,1109.0,403.0,2.8306,87500.0,INLAND --121.77,39.66,20.0,3759.0,,1705.0,600.0,4.712,158600.0,INLAND --121.74,39.59,24.0,1535.0,279.0,726.0,272.0,2.3833,95100.0,INLAND --121.9,39.59,20.0,1465.0,278.0,745.0,250.0,3.0625,93800.0,INLAND --121.75,39.88,16.0,2867.0,559.0,1203.0,449.0,2.7143,95300.0,INLAND --121.68,39.82,15.0,3996.0,748.0,1786.0,728.0,3.5189,141300.0,INLAND --121.54,40.06,17.0,858.0,262.0,47.0,27.0,2.4028,67500.0,INLAND --121.51,39.97,22.0,1468.0,285.0,611.0,235.0,2.3036,73000.0,INLAND --121.59,39.86,14.0,1527.0,269.0,665.0,261.0,2.8657,119600.0,INLAND --121.58,39.83,16.0,4591.0,904.0,1904.0,812.0,2.2419,93200.0,INLAND --121.6,39.8,10.0,1742.0,307.0,721.0,312.0,2.4537,117900.0,INLAND --121.62,39.79,11.0,3835.0,727.0,1456.0,658.0,2.5374,97200.0,INLAND --121.59,39.82,12.0,1958.0,369.0,875.0,354.0,2.3507,97600.0,INLAND --121.6,39.83,12.0,3744.0,699.0,1532.0,660.0,2.3079,95300.0,INLAND --121.63,39.82,11.0,3974.0,727.0,1610.0,634.0,2.6147,107700.0,INLAND --121.6,39.79,18.0,2672.0,533.0,1151.0,532.0,2.567,102900.0,INLAND --121.59,39.79,20.0,743.0,171.0,395.0,168.0,1.625,88300.0,INLAND --121.59,39.78,16.0,2754.0,570.0,1063.0,543.0,1.4048,86500.0,INLAND --121.59,39.78,18.0,945.0,205.0,385.0,207.0,2.1838,58000.0,INLAND --121.6,39.77,26.0,1503.0,343.0,699.0,296.0,1.875,84000.0,INLAND --121.61,39.77,25.0,1612.0,313.0,837.0,303.0,2.963,89500.0,INLAND --121.63,39.78,28.0,1677.0,327.0,770.0,309.0,2.6823,93400.0,INLAND --121.57,39.8,23.0,790.0,137.0,365.0,152.0,2.1912,115200.0,INLAND --121.57,39.78,18.0,2221.0,459.0,952.0,440.0,2.0458,105700.0,INLAND --121.59,39.77,24.0,1535.0,276.0,664.0,273.0,2.3068,97300.0,INLAND --121.58,39.79,19.0,2636.0,523.0,1184.0,465.0,2.7863,108600.0,INLAND --121.57,39.76,20.0,1384.0,257.0,557.0,232.0,2.0882,104900.0,INLAND --121.58,39.76,19.0,2487.0,485.0,1110.0,453.0,3.1061,110200.0,INLAND --121.58,39.76,18.0,1676.0,332.0,733.0,318.0,1.7875,103800.0,INLAND --121.59,39.75,20.0,908.0,206.0,481.0,211.0,2.2,80800.0,INLAND --121.6,39.77,23.0,2263.0,497.0,1138.0,455.0,2.3403,87300.0,INLAND --121.6,39.76,22.0,2447.0,556.0,1157.0,556.0,1.8245,85500.0,INLAND --121.61,39.76,31.0,2431.0,512.0,1026.0,427.0,2.5428,85000.0,INLAND --121.62,39.77,23.0,1759.0,366.0,788.0,359.0,1.8125,93500.0,INLAND --121.65,39.76,31.0,1599.0,318.0,794.0,303.0,3.0,96700.0,INLAND --121.63,39.76,22.0,2598.0,482.0,1151.0,490.0,2.8182,109700.0,INLAND --121.62,39.76,14.0,2063.0,559.0,934.0,529.0,1.7788,85800.0,INLAND --121.62,39.75,20.0,1173.0,261.0,523.0,258.0,1.0625,92800.0,INLAND --121.63,39.75,37.0,1296.0,296.0,569.0,257.0,1.8616,70500.0,INLAND --121.64,39.74,20.0,1808.0,334.0,763.0,335.0,2.3711,121800.0,INLAND --121.71,39.71,17.0,2748.0,556.0,1174.0,514.0,3.066,102600.0,INLAND --121.66,39.66,17.0,3502.0,655.0,1763.0,613.0,2.9625,101200.0,INLAND --121.56,39.69,8.0,2836.0,522.0,1163.0,512.0,3.13,168300.0,INLAND --121.57,39.74,17.0,1619.0,292.0,705.0,285.0,2.4623,126100.0,INLAND --121.59,39.74,17.0,1646.0,330.0,750.0,344.0,2.3798,83800.0,INLAND --121.6,39.75,19.0,2888.0,591.0,984.0,499.0,1.9766,92600.0,INLAND --121.6,39.68,15.0,1677.0,345.0,844.0,330.0,2.3958,111200.0,INLAND --121.5,39.83,15.0,1896.0,408.0,893.0,334.0,1.6948,87500.0,INLAND --121.41,39.72,17.0,1583.0,331.0,730.0,306.0,2.3895,87500.0,INLAND --121.39,39.61,22.0,2828.0,610.0,986.0,391.0,2.8871,94700.0,INLAND --121.24,39.65,35.0,632.0,148.0,221.0,102.0,2.3684,62500.0,INLAND --121.19,39.55,17.0,1483.0,284.0,481.0,211.0,1.4896,83300.0,INLAND --121.36,39.52,15.0,2490.0,527.0,1229.0,497.0,2.3917,85700.0,INLAND --121.56,39.52,9.0,818.0,197.0,358.0,197.0,1.7708,79500.0,INLAND --121.56,39.52,26.0,1957.0,429.0,945.0,397.0,1.7308,53600.0,INLAND --121.56,39.53,12.0,1733.0,421.0,1861.0,415.0,1.5771,65200.0,INLAND --121.54,39.6,15.0,886.0,204.0,576.0,205.0,2.1467,84100.0,INLAND --121.46,39.54,14.0,5549.0,1000.0,1822.0,919.0,2.9562,142300.0,INLAND --121.49,39.52,25.0,848.0,153.0,436.0,155.0,3.9028,93800.0,INLAND --121.44,39.5,26.0,1652.0,325.0,790.0,292.0,3.0446,90800.0,INLAND --121.47,39.49,17.0,1554.0,242.0,553.0,230.0,3.2174,91800.0,INLAND --121.47,39.51,19.0,3720.0,636.0,1304.0,607.0,2.6921,97500.0,INLAND --121.53,39.53,35.0,1806.0,293.0,683.0,295.0,4.5156,91200.0,INLAND --121.53,39.52,30.0,1030.0,161.0,448.0,159.0,2.4821,73800.0,INLAND --121.53,39.52,24.0,1028.0,185.0,471.0,186.0,2.9688,86400.0,INLAND --121.54,39.51,33.0,3585.0,757.0,1887.0,765.0,2.502,62100.0,INLAND --121.52,39.51,30.0,3085.0,610.0,1688.0,575.0,2.334,72200.0,INLAND --121.55,39.51,39.0,1551.0,353.0,684.0,310.0,2.0357,57600.0,INLAND --121.55,39.51,48.0,827.0,198.0,396.0,161.0,0.8024,58300.0,INLAND --121.55,39.51,50.0,1050.0,288.0,485.0,260.0,1.1607,51700.0,INLAND --121.56,39.51,47.0,1064.0,245.0,603.0,190.0,1.3654,57900.0,INLAND --121.56,39.51,46.0,1885.0,385.0,871.0,347.0,1.6352,53100.0,INLAND --121.57,39.5,31.0,2023.0,469.0,1073.0,436.0,1.5714,56100.0,INLAND --121.58,39.52,25.0,2409.0,490.0,1384.0,479.0,1.9956,58000.0,INLAND --121.58,39.51,24.0,1865.0,372.0,1087.0,385.0,1.6389,56700.0,INLAND --121.58,39.5,29.0,1947.0,383.0,925.0,337.0,2.1658,57600.0,INLAND --121.62,39.5,18.0,2105.0,416.0,974.0,385.0,1.6346,63300.0,INLAND --121.61,39.52,24.0,1610.0,324.0,909.0,323.0,1.8661,59800.0,INLAND --121.65,39.53,23.0,1387.0,325.0,640.0,289.0,1.4833,65200.0,INLAND --121.57,39.48,15.0,202.0,54.0,145.0,40.0,0.8252,42500.0,INLAND --121.55,39.5,26.0,3215.0,827.0,2041.0,737.0,1.0585,45100.0,INLAND --121.54,39.5,38.0,1438.0,310.0,779.0,275.0,1.3289,39400.0,INLAND --121.53,39.49,19.0,1537.0,329.0,617.0,274.0,1.5313,50300.0,INLAND --121.54,39.48,29.0,2896.0,596.0,1809.0,617.0,1.8047,53800.0,INLAND --121.54,39.47,14.0,1724.0,315.0,939.0,302.0,2.4952,53900.0,INLAND --121.55,39.48,41.0,461.0,107.0,284.0,90.0,2.2045,41800.0,INLAND --121.49,39.49,20.0,2505.0,468.0,1174.0,429.0,2.9965,88900.0,INLAND --121.52,39.5,33.0,1462.0,241.0,569.0,231.0,3.2833,82600.0,INLAND --121.52,39.49,30.0,1217.0,238.0,677.0,233.0,2.6563,63600.0,INLAND --121.52,39.48,21.0,2628.0,494.0,1364.0,468.0,2.0455,59400.0,INLAND --121.55,39.45,18.0,2278.0,523.0,1185.0,475.0,1.3611,60600.0,INLAND --121.53,39.44,26.0,1340.0,255.0,662.0,239.0,2.6071,57100.0,INLAND --121.55,39.44,31.0,1434.0,283.0,811.0,289.0,1.7727,49000.0,INLAND --121.52,39.43,15.0,2119.0,389.0,1079.0,374.0,2.3566,80400.0,INLAND --121.46,39.4,17.0,3659.0,735.0,1970.0,667.0,2.425,96200.0,INLAND --121.39,39.39,52.0,189.0,34.0,121.0,37.0,3.0208,60000.0,INLAND --121.54,39.33,27.0,720.0,150.0,359.0,138.0,2.5313,61300.0,INLAND --121.59,39.39,22.0,2515.0,482.0,1284.0,462.0,2.1776,73800.0,INLAND --121.67,39.37,27.0,2599.0,502.0,1241.0,502.0,1.9943,86300.0,INLAND --121.65,39.35,24.0,1003.0,251.0,1098.0,227.0,1.7552,86400.0,INLAND --121.67,39.34,22.0,1217.0,224.0,537.0,187.0,2.6607,84600.0,INLAND --121.65,39.32,40.0,812.0,154.0,374.0,142.0,2.7891,73500.0,INLAND --121.69,39.36,29.0,2220.0,471.0,1170.0,428.0,2.3224,56200.0,INLAND --121.7,39.37,32.0,1852.0,373.0,911.0,365.0,1.7885,57000.0,INLAND --121.7,39.36,46.0,1210.0,243.0,523.0,242.0,1.91,63900.0,INLAND --121.7,39.36,37.0,2330.0,495.0,1505.0,470.0,2.0474,56000.0,INLAND --121.69,39.36,34.0,842.0,186.0,635.0,165.0,1.8355,63000.0,INLAND --121.74,39.38,27.0,2596.0,435.0,1100.0,409.0,2.3243,85500.0,INLAND --121.8,39.33,30.0,1019.0,192.0,501.0,185.0,2.5259,81300.0,INLAND --121.71,39.42,21.0,1432.0,284.0,862.0,275.0,2.2813,57600.0,INLAND --121.71,39.41,22.0,1814.0,342.0,941.0,323.0,2.1728,59400.0,INLAND --121.75,39.4,29.0,1687.0,327.0,864.0,334.0,2.4943,81900.0,INLAND --121.79,39.48,39.0,1105.0,180.0,408.0,166.0,3.3929,82100.0,INLAND --120.46,38.15,16.0,4221.0,781.0,1516.0,697.0,2.3816,116000.0,INLAND --120.55,38.12,10.0,1566.0,325.0,785.0,291.0,2.5,116100.0,INLAND --120.56,38.09,34.0,2745.0,559.0,1150.0,491.0,2.3654,94900.0,INLAND --120.55,38.07,27.0,1199.0,224.0,463.0,199.0,2.9063,92200.0,INLAND --120.54,38.07,37.0,736.0,148.0,339.0,140.0,2.2875,79900.0,INLAND --120.67,37.97,9.0,7450.0,1475.0,2233.0,930.0,2.6528,133000.0,INLAND --120.46,38.09,16.0,3758.0,715.0,1777.0,615.0,3.0,122600.0,INLAND --120.79,38.24,19.0,1003.0,235.0,538.0,190.0,2.9821,90400.0,INLAND --120.9,38.2,16.0,3120.0,641.0,1319.0,526.0,2.0472,93200.0,INLAND --120.88,38.16,8.0,2029.0,387.0,1000.0,364.0,4.0109,125900.0,INLAND --120.91,38.11,9.0,3585.0,680.0,1800.0,598.0,3.636,133100.0,INLAND --120.76,38.12,7.0,7188.0,1288.0,3175.0,1115.0,3.8488,130600.0,INLAND --120.65,38.28,21.0,3095.0,681.0,1341.0,546.0,2.1382,104000.0,INLAND --120.72,38.24,32.0,2685.0,543.0,1061.0,492.0,2.5473,101600.0,INLAND --120.67,38.19,17.0,2967.0,611.0,1387.0,564.0,2.0417,92600.0,INLAND --120.57,38.2,13.0,4110.0,847.0,1796.0,706.0,2.6417,122300.0,INLAND --120.43,38.25,13.0,763.0,161.0,311.0,125.0,2.4583,112500.0,INLAND --120.56,38.39,20.0,1326.0,307.0,563.0,237.0,2.6667,86600.0,INLAND --120.54,38.41,21.0,1435.0,294.0,668.0,267.0,2.5667,77400.0,INLAND --120.42,38.42,18.0,2912.0,663.0,999.0,411.0,2.7344,91900.0,INLAND --120.41,38.33,17.0,1463.0,338.0,529.0,226.0,3.024,100900.0,INLAND --120.55,38.31,18.0,1411.0,312.0,592.0,230.0,1.625,94700.0,INLAND --120.57,38.35,17.0,1504.0,358.0,661.0,250.0,2.2604,84800.0,INLAND --120.36,38.21,10.0,4300.0,845.0,1480.0,609.0,2.8208,139900.0,INLAND --120.34,38.23,10.0,3757.0,722.0,546.0,223.0,3.75,121400.0,INLAND --120.33,38.26,13.0,2962.0,546.0,252.0,103.0,4.4063,155800.0,INLAND --120.34,38.25,17.0,5497.0,1056.0,997.0,408.0,2.9821,111500.0,INLAND --120.37,38.23,13.0,4401.0,829.0,924.0,383.0,2.6942,123500.0,INLAND --120.37,38.25,13.0,4495.0,856.0,1149.0,459.0,2.5352,113700.0,INLAND --120.27,38.29,10.0,3486.0,695.0,298.0,124.0,3.3542,103800.0,INLAND --120.27,38.31,13.0,3297.0,662.0,267.0,97.0,3.075,108300.0,INLAND --120.19,38.42,11.0,1568.0,369.0,82.0,33.0,3.125,77500.0,INLAND --121.91,39.03,48.0,1096.0,218.0,657.0,199.0,2.7841,65800.0,INLAND --122.0,38.99,39.0,1548.0,323.0,815.0,286.0,2.9489,67500.0,INLAND --122.13,39.0,23.0,3832.0,774.0,2435.0,747.0,2.2754,59200.0,INLAND --121.99,39.15,17.0,6440.0,1204.0,3266.0,1142.0,2.7137,72000.0,INLAND --122.04,39.22,27.0,1446.0,295.0,670.0,281.0,3.2625,92800.0,INLAND --122.08,39.25,52.0,224.0,38.0,120.0,45.0,3.017,112500.0,INLAND --122.33,39.1,10.0,266.0,62.0,154.0,49.0,2.25,75000.0,INLAND --122.2,39.15,33.0,1064.0,174.0,434.0,147.0,3.125,108000.0,INLAND --122.09,39.13,28.0,4169.0,895.0,2587.0,810.0,2.331,65500.0,INLAND --122.05,39.34,44.0,1064.0,230.0,494.0,175.0,2.875,61500.0,INLAND --122.17,39.31,35.0,2791.0,552.0,1395.0,476.0,2.5625,62700.0,INLAND --122.51,39.3,19.0,1629.0,386.0,551.0,214.0,1.7463,68800.0,INLAND --122.01,39.21,50.0,1592.0,372.0,781.0,307.0,2.2679,69100.0,INLAND --122.01,39.21,52.0,1989.0,392.0,985.0,396.0,2.5556,75800.0,INLAND --122.01,39.21,39.0,1214.0,250.0,660.0,249.0,2.4559,75000.0,INLAND --121.96,39.3,39.0,701.0,130.0,271.0,89.0,2.1845,112500.0,INLAND --121.65,38.03,28.0,3144.0,694.0,1095.0,482.0,3.4402,192400.0,INLAND --121.63,38.03,17.0,2549.0,596.0,1169.0,500.0,3.6694,209400.0,INLAND --121.63,38.04,25.0,2019.0,411.0,888.0,326.0,3.2619,183800.0,INLAND --121.73,38.0,3.0,9217.0,1522.0,3578.0,1272.0,5.0016,189100.0,INLAND --121.72,38.0,7.0,7957.0,1314.0,4460.0,1293.0,4.9618,156500.0,INLAND --121.72,37.98,5.0,7105.0,1143.0,3523.0,1088.0,5.0468,168800.0,INLAND --121.68,37.98,19.0,3388.0,599.0,1707.0,575.0,3.6411,162800.0,INLAND --121.7,37.98,9.0,3079.0,519.0,1562.0,512.0,5.1041,172900.0,INLAND --121.71,37.99,27.0,3861.0,718.0,2085.0,707.0,3.3558,129700.0,INLAND --121.67,37.99,22.0,1046.0,195.0,527.0,164.0,4.375,213500.0,INLAND --121.68,37.93,44.0,1014.0,225.0,704.0,238.0,1.6554,119400.0,INLAND --121.7,37.94,36.0,1710.0,320.0,861.0,300.0,2.8828,131100.0,INLAND --121.69,37.95,15.0,1850.0,441.0,1348.0,403.0,3.8125,125400.0,INLAND --121.7,37.96,33.0,2396.0,452.0,1391.0,465.0,3.2813,151400.0,INLAND --121.66,37.93,19.0,2055.0,358.0,1064.0,350.0,4.7426,263100.0,INLAND --121.7,37.91,17.0,1962.0,291.0,825.0,267.0,4.8958,187100.0,INLAND --121.7,37.93,19.0,2005.0,405.0,972.0,403.0,2.2216,156700.0,INLAND --121.74,37.95,5.0,4980.0,774.0,2399.0,763.0,5.7104,186300.0,INLAND --121.7,37.93,10.0,3258.0,612.0,1779.0,558.0,4.6587,152500.0,INLAND --121.6,37.91,13.0,2479.0,394.0,1075.0,350.0,5.1017,241400.0,INLAND --121.6,37.9,5.0,14684.0,2252.0,4276.0,1722.0,6.9051,340900.0,INLAND --121.61,37.86,30.0,1428.0,287.0,989.0,287.0,3.691,154400.0,INLAND --121.64,37.85,22.0,1999.0,415.0,967.0,320.0,4.4583,253900.0,INLAND --121.8,38.01,46.0,2273.0,495.0,1088.0,447.0,2.2532,109400.0,INLAND --121.81,38.01,47.0,1942.0,430.0,1074.0,393.0,2.2361,105100.0,INLAND --121.81,38.01,52.0,1124.0,245.0,528.0,226.0,2.2639,128500.0,INLAND --121.82,38.02,46.0,176.0,43.0,101.0,40.0,2.2361,93800.0,INLAND --121.82,38.01,42.0,1017.0,253.0,798.0,266.0,2.1719,99100.0,INLAND --121.82,38.01,50.0,1120.0,281.0,625.0,239.0,1.5988,96400.0,INLAND --121.82,38.01,25.0,3018.0,606.0,1614.0,568.0,3.4722,127000.0,INLAND --121.84,38.02,46.0,66.0,22.0,37.0,21.0,0.536,87500.0,INLAND --121.78,38.01,19.0,2688.0,469.0,1216.0,422.0,4.4491,133900.0,INLAND --121.79,38.01,17.0,4032.0,814.0,1749.0,618.0,3.1728,146800.0,INLAND --121.79,38.0,34.0,3090.0,593.0,1588.0,566.0,3.6118,124700.0,INLAND --121.8,38.01,44.0,3184.0,581.0,1399.0,548.0,2.7234,110200.0,INLAND --121.8,38.01,37.0,3058.0,567.0,1351.0,523.0,3.5179,130800.0,INLAND --121.78,38.0,8.0,2371.0,375.0,1094.0,396.0,5.3245,174500.0,INLAND --121.77,38.01,13.0,2983.0,534.0,1417.0,510.0,3.9861,168100.0,INLAND --121.81,37.99,18.0,2807.0,445.0,1315.0,437.0,4.8194,170400.0,INLAND --121.81,37.99,22.0,2331.0,359.0,1086.0,340.0,5.1435,150800.0,INLAND --121.82,37.98,13.0,3995.0,605.0,1969.0,607.0,5.0164,165200.0,INLAND --121.82,38.01,47.0,1265.0,254.0,587.0,247.0,2.6364,93500.0,INLAND --121.82,38.0,29.0,2070.0,452.0,985.0,420.0,2.8466,113400.0,INLAND --121.81,38.0,37.0,2724.0,579.0,1400.0,540.0,2.905,97300.0,INLAND --121.82,38.0,30.0,3268.0,567.0,1714.0,565.0,4.4583,131000.0,INLAND --121.85,38.0,26.0,3364.0,570.0,1806.0,566.0,4.2647,133400.0,INLAND --121.85,38.0,24.0,2269.0,584.0,1239.0,542.0,2.0411,100000.0,INLAND --121.83,38.0,15.0,6365.0,1646.0,3838.0,1458.0,2.5495,103600.0,INLAND --121.83,38.0,25.0,1710.0,288.0,799.0,259.0,4.8359,145300.0,INLAND --121.83,37.99,23.0,1150.0,174.0,572.0,174.0,4.9167,152400.0,INLAND --121.83,37.99,23.0,1970.0,296.0,935.0,279.0,4.4853,145900.0,INLAND --121.83,37.99,18.0,2741.0,449.0,1507.0,460.0,4.7566,142500.0,INLAND --121.83,38.0,8.0,2572.0,738.0,1384.0,684.0,1.7161,75800.0,INLAND --121.84,37.99,13.0,4545.0,952.0,2188.0,901.0,3.3625,126100.0,INLAND --121.84,37.99,15.0,2380.0,385.0,1292.0,388.0,4.6029,142600.0,INLAND --121.83,37.99,16.0,2919.0,462.0,1456.0,453.0,5.6779,164700.0,INLAND --121.79,38.0,36.0,1141.0,234.0,562.0,213.0,2.5893,108500.0,INLAND --121.79,37.99,10.0,4156.0,609.0,1878.0,586.0,5.6506,178600.0,INLAND --121.79,37.99,18.0,3646.0,534.0,1651.0,535.0,5.7321,164700.0,INLAND --121.8,38.0,34.0,2738.0,475.0,1316.0,459.0,3.5368,122500.0,INLAND --121.8,37.99,16.0,3077.0,465.0,1575.0,446.0,5.5,179500.0,INLAND --121.77,37.99,4.0,5623.0,780.0,2429.0,716.0,5.4409,205100.0,INLAND --121.88,38.03,10.0,2769.0,619.0,1045.0,469.0,4.1111,158600.0,INLAND --121.9,38.04,36.0,1489.0,331.0,838.0,259.0,1.2024,90200.0,INLAND --121.86,38.04,52.0,242.0,59.0,188.0,54.0,1.3958,67500.0,INLAND --121.87,38.02,52.0,2264.0,439.0,1403.0,476.0,2.7083,99400.0,INLAND --121.88,38.03,52.0,1225.0,250.0,725.0,231.0,2.0,101400.0,INLAND --121.9,38.03,51.0,2982.0,689.0,1831.0,608.0,2.0034,87700.0,INLAND --121.88,38.02,46.0,2112.0,466.0,1249.0,382.0,2.5737,87000.0,INLAND --121.89,38.02,36.0,2707.0,550.0,1827.0,545.0,3.3371,94600.0,INLAND --121.9,38.02,5.0,1560.0,369.0,1037.0,372.0,3.6154,181800.0,INLAND --121.87,38.02,31.0,3644.0,746.0,2229.0,678.0,3.1389,117800.0,INLAND --121.88,38.0,16.0,2605.0,440.0,1352.0,408.0,4.1947,140300.0,INLAND --121.88,38.01,9.0,5329.0,1284.0,2827.0,1202.0,2.7374,150000.0,INLAND --121.89,38.01,30.0,4114.0,743.0,1994.0,722.0,4.2227,134400.0,INLAND --121.88,38.0,22.0,721.0,117.0,367.0,129.0,5.3098,151900.0,INLAND --121.86,38.0,4.0,4075.0,927.0,2239.0,849.0,3.5857,165200.0,INLAND --121.86,38.0,16.0,3216.0,464.0,1504.0,453.0,5.25,161700.0,INLAND --121.89,37.99,4.0,2171.0,597.0,928.0,461.0,4.1016,170500.0,INLAND --121.88,37.99,16.0,3787.0,515.0,1606.0,507.0,5.5676,174200.0,INLAND --121.87,38.0,17.0,2713.0,442.0,1475.0,415.0,4.8542,144100.0,INLAND --121.87,37.99,15.0,2203.0,312.0,1051.0,311.0,4.9783,163900.0,INLAND --121.89,38.01,28.0,3639.0,751.0,2362.0,641.0,3.0042,103900.0,INLAND --121.9,38.02,12.0,1497.0,360.0,943.0,341.0,2.1417,122200.0,INLAND --121.9,38.01,16.0,2604.0,454.0,1696.0,481.0,4.6628,136000.0,INLAND --121.92,38.02,8.0,2750.0,479.0,1526.0,484.0,5.102,156500.0,INLAND --121.89,38.01,32.0,1000.0,188.0,663.0,212.0,4.0972,99200.0,INLAND --121.9,38.01,34.0,3779.0,766.0,2356.0,722.0,3.5129,110600.0,INLAND --121.9,38.0,14.0,1930.0,363.0,990.0,322.0,4.1094,162200.0,INLAND --121.9,38.0,14.0,2677.0,368.0,1288.0,375.0,6.0497,177500.0,INLAND --121.92,38.01,7.0,1632.0,248.0,879.0,262.0,6.1237,166000.0,INLAND --121.93,38.01,9.0,2294.0,389.0,1142.0,365.0,5.3363,160800.0,INLAND --121.93,38.02,13.0,1524.0,286.0,940.0,308.0,5.1337,154800.0,INLAND --121.95,38.03,5.0,5526.0,,3207.0,1012.0,4.0767,143100.0,INLAND --121.94,38.03,27.0,1654.0,478.0,1141.0,420.0,1.4871,87100.0,INLAND --121.96,38.02,35.0,2691.0,542.0,1409.0,505.0,3.016,95300.0,INLAND --121.95,38.02,9.0,3360.0,833.0,2041.0,810.0,2.1013,100700.0,INLAND --121.94,38.02,29.0,5765.0,1170.0,3266.0,1131.0,2.7907,113900.0,INLAND --121.92,38.03,16.0,2176.0,464.0,1410.0,434.0,3.5436,100200.0,INLAND --121.92,38.02,16.0,1840.0,355.0,1288.0,338.0,4.2067,125000.0,INLAND --121.91,38.02,15.0,2966.0,558.0,1687.0,527.0,3.4817,129800.0,INLAND --121.97,38.04,38.0,2505.0,554.0,1595.0,498.0,2.5833,83500.0,INLAND --121.97,38.03,17.0,3685.0,685.0,1939.0,649.0,3.7043,139800.0,INLAND --121.98,38.05,31.0,2810.0,518.0,1640.0,503.0,3.3661,98500.0,INLAND --122.02,38.02,44.0,1465.0,247.0,817.0,237.0,4.8693,156900.0,NEAR BAY --122.0,38.03,4.0,2341.0,408.0,1235.0,431.0,6.0424,165900.0,INLAND --122.14,38.02,44.0,1625.0,432.0,825.0,385.0,2.0523,133900.0,NEAR BAY --122.14,38.03,42.0,118.0,34.0,54.0,30.0,2.5795,225000.0,NEAR BAY --122.13,38.02,52.0,2378.0,508.0,940.0,451.0,2.9583,166000.0,NEAR BAY --122.13,38.01,48.0,2123.0,494.0,859.0,474.0,1.8523,144800.0,NEAR BAY --122.14,38.01,50.0,1760.0,341.0,741.0,316.0,4.5,178300.0,NEAR BAY --122.13,38.01,51.0,1262.0,309.0,608.0,298.0,2.1974,139300.0,NEAR BAY --122.13,38.0,33.0,2821.0,652.0,1206.0,640.0,2.5481,150800.0,NEAR BAY --122.16,38.02,40.0,1800.0,290.0,761.0,277.0,5.1265,196100.0,NEAR BAY --122.11,38.01,39.0,1313.0,306.0,575.0,231.0,3.1711,116100.0,NEAR BAY --122.11,38.01,41.0,1345.0,272.0,718.0,283.0,3.3831,129400.0,NEAR BAY --122.12,38.0,20.0,6992.0,1404.0,3221.0,1334.0,4.2042,166400.0,NEAR BAY --122.12,38.01,50.0,1300.0,263.0,691.0,239.0,3.9519,126500.0,NEAR BAY --122.12,38.01,50.0,1738.0,355.0,837.0,363.0,3.609,135700.0,NEAR BAY --122.12,38.01,42.0,2225.0,367.0,864.0,381.0,4.1189,172400.0,NEAR BAY --122.09,38.02,37.0,1742.0,339.0,1128.0,345.0,3.8824,113700.0,NEAR BAY --122.1,38.02,28.0,4308.0,824.0,2086.0,776.0,3.6523,159700.0,NEAR BAY --122.07,38.0,37.0,978.0,202.0,462.0,184.0,3.625,156300.0,NEAR BAY --122.09,38.0,6.0,10191.0,1882.0,4377.0,1789.0,5.2015,204200.0,NEAR BAY --122.11,38.0,9.0,3424.0,583.0,1460.0,543.0,5.76,212600.0,NEAR BAY --122.08,37.99,19.0,4657.0,739.0,1914.0,732.0,5.0509,199900.0,NEAR BAY --122.09,37.99,19.0,3073.0,506.0,1773.0,493.0,5.4496,205400.0,NEAR BAY --122.11,37.99,16.0,3913.0,710.0,1782.0,676.0,5.1297,206700.0,NEAR BAY --122.11,37.99,10.0,2864.0,514.0,1300.0,507.0,4.3875,287700.0,NEAR BAY --122.08,37.97,9.0,2643.0,439.0,1105.0,467.0,6.6579,245200.0,NEAR BAY --122.09,37.97,5.0,5303.0,779.0,2017.0,727.0,6.9961,294100.0,NEAR BAY --122.11,37.98,11.0,4371.0,679.0,1790.0,660.0,6.135,297300.0,NEAR BAY --122.09,37.98,14.0,5381.0,871.0,2296.0,872.0,5.6875,211000.0,NEAR BAY --122.12,37.99,33.0,1660.0,277.0,741.0,261.0,4.675,225400.0,NEAR BAY --122.1,37.97,18.0,4326.0,655.0,1753.0,646.0,5.6931,269600.0,NEAR BAY --122.1,37.96,20.0,3796.0,650.0,1679.0,611.0,4.3571,228200.0,NEAR BAY --122.1,37.96,25.0,1374.0,206.0,569.0,235.0,6.3699,235500.0,NEAR BAY --122.07,37.99,28.0,3310.0,574.0,1811.0,597.0,4.5401,166900.0,NEAR BAY --122.07,37.98,12.0,6915.0,1639.0,2940.0,1468.0,4.0154,186100.0,NEAR BAY --122.07,37.97,20.0,1705.0,353.0,856.0,341.0,3.7262,211800.0,NEAR BAY --122.07,37.96,34.0,1692.0,290.0,836.0,289.0,5.0172,197100.0,NEAR BAY --122.06,37.96,37.0,1784.0,313.0,788.0,304.0,4.2917,189600.0,NEAR BAY --122.08,37.96,21.0,9135.0,1534.0,3748.0,1502.0,6.0859,266000.0,NEAR BAY --122.06,37.95,36.0,2213.0,386.0,950.0,370.0,4.7386,186400.0,NEAR BAY --122.07,37.95,39.0,2199.0,388.0,1025.0,385.0,4.5893,190000.0,NEAR BAY --122.08,37.95,24.0,3173.0,548.0,1351.0,536.0,5.0672,243000.0,NEAR BAY --122.08,37.95,33.0,1043.0,157.0,425.0,148.0,4.8702,235600.0,NEAR BAY --122.07,37.96,37.0,1217.0,199.0,552.0,194.0,5.0445,196200.0,NEAR BAY --122.06,37.96,10.0,7136.0,1691.0,2959.0,1507.0,3.9816,182000.0,NEAR BAY --122.05,37.95,34.0,1408.0,277.0,738.0,269.0,4.175,169400.0,NEAR BAY --122.05,37.94,22.0,4162.0,1194.0,1804.0,1185.0,2.5459,179300.0,NEAR BAY --122.06,37.94,19.0,4005.0,972.0,1896.0,893.0,2.5268,235700.0,NEAR BAY --122.07,37.94,36.0,2639.0,488.0,1111.0,476.0,3.5057,205100.0,NEAR BAY --122.07,37.94,30.0,1260.0,276.0,707.0,221.0,2.892,220800.0,NEAR BAY --122.08,37.93,35.0,4043.0,689.0,1832.0,662.0,5.0761,233200.0,NEAR BAY --122.08,37.94,44.0,2185.0,357.0,943.0,366.0,4.725,232100.0,NEAR BAY --122.07,37.94,43.0,1454.0,234.0,683.0,258.0,4.475,265700.0,NEAR BAY --122.09,37.95,32.0,1339.0,209.0,601.0,209.0,6.0265,247900.0,NEAR BAY --122.09,37.94,29.0,6895.0,1022.0,2634.0,1022.0,6.1922,273200.0,NEAR BAY --122.04,38.0,16.0,3077.0,733.0,1447.0,709.0,3.2484,91100.0,NEAR BAY --122.04,37.99,32.0,1504.0,279.0,749.0,267.0,3.2,134500.0,NEAR BAY --122.04,37.99,36.0,2765.0,495.0,1478.0,441.0,4.125,136200.0,NEAR BAY --122.05,37.97,16.0,60.0,10.0,65.0,19.0,6.1359,250000.0,NEAR BAY --122.06,37.99,16.0,2445.0,469.0,721.0,474.0,2.8043,87500.0,NEAR BAY --122.06,37.99,17.0,1319.0,316.0,384.0,269.0,1.8229,137500.0,NEAR BAY --122.05,38.0,36.0,2476.0,472.0,1213.0,393.0,3.7333,136400.0,NEAR BAY --122.05,38.0,16.0,1085.0,217.0,356.0,232.0,2.3462,75000.0,NEAR BAY --122.03,37.98,16.0,1209.0,477.0,627.0,482.0,1.3894,156300.0,NEAR BAY --122.04,37.97,10.0,974.0,316.0,631.0,286.0,2.3152,140600.0,NEAR BAY --122.03,38.0,25.0,3577.0,581.0,1753.0,593.0,5.7295,178300.0,NEAR BAY --122.03,38.01,27.0,3228.0,562.0,1666.0,588.0,4.5707,175900.0,NEAR BAY --122.04,37.99,38.0,2675.0,541.0,1378.0,480.0,3.8897,139900.0,NEAR BAY --122.03,37.98,45.0,2842.0,567.0,1261.0,535.0,3.6042,138200.0,NEAR BAY --122.02,38.0,28.0,2965.0,533.0,1591.0,472.0,4.6375,178200.0,NEAR BAY --122.03,37.99,35.0,3103.0,537.0,1614.0,566.0,4.9022,169300.0,NEAR BAY --122.02,37.99,37.0,2247.0,416.0,1237.0,397.0,4.45,161900.0,NEAR BAY --122.03,37.99,37.0,1755.0,327.0,882.0,350.0,4.59,166600.0,NEAR BAY --122.03,37.98,44.0,1254.0,252.0,498.0,217.0,3.4531,148900.0,NEAR BAY --122.01,37.98,25.0,1476.0,336.0,777.0,297.0,3.5179,165500.0,NEAR BAY --122.01,37.98,29.0,2001.0,373.0,956.0,370.0,4.317,194000.0,NEAR BAY --122.0,37.98,32.0,1013.0,169.0,436.0,173.0,5.1118,226900.0,INLAND --122.0,37.97,27.0,2491.0,428.0,1171.0,431.0,5.1021,202800.0,INLAND --122.01,37.97,32.0,3012.0,527.0,1288.0,512.0,3.6449,211500.0,NEAR BAY --122.02,37.98,40.0,1797.0,401.0,756.0,369.0,2.8456,165500.0,NEAR BAY --122.02,37.98,37.0,1474.0,343.0,782.0,331.0,3.4187,161700.0,NEAR BAY --122.0,37.99,28.0,4035.0,641.0,1881.0,659.0,5.4607,192300.0,INLAND --122.0,37.98,31.0,2030.0,337.0,867.0,341.0,5.0915,193200.0,INLAND --121.99,37.98,23.0,2293.0,411.0,969.0,399.0,4.4536,184000.0,INLAND --121.99,37.97,28.0,2839.0,428.0,1372.0,443.0,6.2135,217200.0,INLAND --122.0,37.98,35.0,1192.0,201.0,535.0,172.0,4.9219,182000.0,INLAND --122.0,37.98,36.0,404.0,77.0,237.0,88.0,4.525,161300.0,INLAND --122.01,37.98,34.0,1256.0,267.0,638.0,252.0,4.0507,161000.0,NEAR BAY --122.01,37.99,28.0,1900.0,401.0,918.0,351.0,3.7841,144900.0,NEAR BAY --121.95,37.96,18.0,2739.0,393.0,1072.0,374.0,6.1436,259500.0,INLAND --121.97,37.97,27.0,1691.0,289.0,807.0,296.0,6.1168,210500.0,INLAND --121.97,37.97,24.0,1330.0,183.0,656.0,205.0,5.0092,244100.0,INLAND --121.97,37.96,28.0,1433.0,290.0,877.0,313.0,4.7891,184800.0,INLAND --121.96,37.96,28.0,1838.0,273.0,899.0,270.0,5.2145,229200.0,INLAND --121.96,37.95,7.0,3418.0,740.0,1583.0,676.0,3.6133,196100.0,INLAND --121.98,37.96,22.0,2987.0,,1420.0,540.0,3.65,204100.0,INLAND --121.97,37.97,26.0,1977.0,264.0,817.0,273.0,5.7512,240200.0,INLAND --121.98,37.97,26.0,2714.0,390.0,1232.0,409.0,5.9617,231100.0,INLAND --121.98,37.97,26.0,2738.0,428.0,1316.0,430.0,5.2442,213200.0,INLAND --121.99,37.97,22.0,2823.0,509.0,1271.0,474.0,5.1333,207200.0,INLAND --121.99,37.97,30.0,3320.0,589.0,1470.0,543.0,4.6071,184100.0,INLAND --122.0,37.96,32.0,3364.0,666.0,1980.0,678.0,3.7,179000.0,INLAND --122.0,37.96,28.0,4071.0,713.0,2033.0,647.0,4.5833,190700.0,INLAND --121.96,37.95,13.0,3216.0,765.0,1627.0,715.0,3.0859,167800.0,INLAND --121.97,37.95,8.0,4253.0,709.0,1883.0,662.0,5.431,246700.0,INLAND --121.98,37.96,12.0,5048.0,1122.0,2209.0,1014.0,3.1573,126700.0,INLAND --121.99,37.96,16.0,3324.0,479.0,1470.0,461.0,7.6166,260400.0,INLAND --121.99,37.96,17.0,2756.0,423.0,1228.0,426.0,5.5872,200600.0,INLAND --121.98,37.95,14.0,6290.0,854.0,2724.0,820.0,6.7371,267400.0,INLAND --121.98,37.95,16.0,2984.0,406.0,1317.0,397.0,6.7821,265900.0,INLAND --122.01,37.97,34.0,3259.0,498.0,1250.0,478.0,5.3794,206200.0,NEAR BAY --122.02,37.97,36.0,2342.0,436.0,1191.0,416.0,4.0,171000.0,NEAR BAY --122.03,37.97,45.0,1613.0,338.0,865.0,336.0,3.25,151100.0,NEAR BAY --122.04,37.97,26.0,2470.0,626.0,1174.0,573.0,2.9861,160900.0,NEAR BAY --122.03,37.97,20.0,3968.0,931.0,2629.0,903.0,2.9915,166700.0,NEAR BAY --122.04,37.96,16.0,2913.0,723.0,1705.0,693.0,2.9097,106300.0,NEAR BAY --122.04,37.97,21.0,6445.0,1839.0,3621.0,1735.0,2.5841,112500.0,NEAR BAY --122.04,37.97,39.0,1323.0,245.0,705.0,261.0,3.1968,151000.0,NEAR BAY --122.04,37.96,20.0,1143.0,346.0,578.0,298.0,2.2411,151800.0,NEAR BAY --122.05,37.96,35.0,2190.0,384.0,1154.0,401.0,3.8456,159800.0,NEAR BAY --122.04,37.96,28.0,1207.0,252.0,724.0,252.0,3.6964,165700.0,NEAR BAY --122.04,37.96,27.0,2587.0,729.0,1500.0,623.0,1.837,175000.0,NEAR BAY --122.05,37.95,27.0,3513.0,791.0,1875.0,694.0,3.1838,182000.0,NEAR BAY --122.05,37.95,20.0,563.0,107.0,246.0,123.0,5.4482,190800.0,NEAR BAY --122.01,37.95,8.0,3866.0,539.0,1555.0,513.0,6.0901,298200.0,NEAR BAY --122.02,37.96,25.0,2615.0,368.0,935.0,366.0,6.6727,305100.0,NEAR BAY --122.03,37.96,20.0,2636.0,691.0,1142.0,627.0,2.1083,162500.0,NEAR BAY --122.03,37.95,14.0,3287.0,793.0,1601.0,716.0,3.1719,220500.0,NEAR BAY --122.02,37.95,25.0,1205.0,260.0,608.0,272.0,2.4519,208300.0,NEAR BAY --122.03,37.95,32.0,1955.0,313.0,804.0,317.0,4.9485,202300.0,NEAR BAY --122.02,37.95,22.0,3526.0,510.0,1660.0,508.0,5.6642,237000.0,NEAR BAY --122.02,37.94,23.0,3516.0,661.0,1465.0,623.0,4.2569,213100.0,NEAR BAY --122.01,37.94,23.0,3741.0,,1339.0,499.0,6.7061,322300.0,NEAR BAY --122.02,37.94,19.0,3192.0,612.0,1317.0,594.0,4.125,267100.0,NEAR BAY --122.01,37.94,26.0,1619.0,224.0,706.0,220.0,6.0704,268000.0,NEAR BAY --122.01,37.94,18.0,2077.0,298.0,937.0,292.0,6.3809,273600.0,NEAR BAY --122.0,37.95,9.0,2214.0,256.0,848.0,239.0,6.8145,339200.0,INLAND --122.01,37.93,25.0,2652.0,335.0,1062.0,334.0,7.5898,330200.0,NEAR BAY --122.04,37.95,33.0,1653.0,334.0,814.0,328.0,3.1406,163100.0,NEAR BAY --122.04,37.94,24.0,5732.0,873.0,2444.0,888.0,5.6292,231400.0,NEAR BAY --122.05,37.94,22.0,2105.0,354.0,993.0,365.0,4.6602,227800.0,NEAR BAY --122.04,37.95,29.0,866.0,138.0,341.0,133.0,4.7188,197100.0,NEAR BAY --122.05,37.95,22.0,5175.0,1213.0,2804.0,1091.0,2.85,144600.0,NEAR BAY --122.03,37.94,21.0,5541.0,776.0,2214.0,737.0,5.5777,279300.0,NEAR BAY --122.03,37.93,21.0,4712.0,624.0,1773.0,615.0,6.0918,344800.0,NEAR BAY --122.05,37.93,5.0,4274.0,1153.0,1503.0,881.0,4.0473,266500.0,NEAR BAY --122.05,37.93,15.0,7803.0,1603.0,2957.0,1546.0,4.45,184900.0,NEAR BAY --122.05,37.92,14.0,12713.0,2558.0,4741.0,2412.0,4.7094,234700.0,NEAR BAY --122.02,37.92,26.0,5077.0,640.0,1872.0,636.0,7.4713,351200.0,NEAR BAY --122.03,37.92,23.0,3318.0,408.0,1124.0,393.0,6.5847,358800.0,NEAR BAY --122.01,37.91,21.0,10093.0,1269.0,3645.0,1219.0,7.6877,367700.0,NEAR BAY --122.03,37.91,29.0,5438.0,871.0,2310.0,890.0,5.0362,275300.0,NEAR BAY --122.06,37.91,15.0,5393.0,1422.0,2133.0,1288.0,4.1612,232800.0,NEAR BAY --122.06,37.9,25.0,5869.0,1685.0,2669.0,1554.0,2.6998,216100.0,NEAR BAY --122.06,37.89,21.0,4985.0,1590.0,2575.0,1458.0,3.1002,114300.0,NEAR BAY --122.07,37.93,45.0,1544.0,244.0,614.0,238.0,5.0255,226000.0,NEAR BAY --122.07,37.93,25.0,7201.0,1521.0,3264.0,1433.0,3.7433,252100.0,NEAR BAY --122.07,37.92,26.0,3872.0,739.0,1629.0,684.0,4.4312,225000.0,NEAR BAY --122.08,37.92,28.0,2377.0,469.0,1068.0,435.0,4.4561,250000.0,NEAR BAY --122.08,37.92,26.0,1733.0,265.0,796.0,274.0,6.195,264900.0,NEAR BAY --122.07,37.91,28.0,1731.0,295.0,810.0,295.0,5.0391,259800.0,NEAR BAY --122.07,37.91,33.0,1550.0,277.0,638.0,254.0,3.6833,292500.0,NEAR BAY --122.08,37.9,32.0,1075.0,170.0,486.0,173.0,5.0499,306800.0,NEAR BAY --122.09,37.91,18.0,9576.0,1455.0,3486.0,1380.0,7.0895,306900.0,NEAR BAY --122.07,37.89,28.0,3410.0,746.0,1428.0,670.0,4.3864,266800.0,NEAR BAY --122.08,37.89,39.0,3018.0,501.0,1223.0,489.0,6.2924,283900.0,NEAR BAY --122.08,37.9,29.0,4133.0,770.0,1691.0,744.0,5.1097,288000.0,NEAR BAY --122.07,37.89,38.0,2139.0,343.0,809.0,340.0,5.5636,268800.0,NEAR BAY --122.07,37.89,38.0,757.0,124.0,319.0,123.0,5.6558,263300.0,NEAR BAY --122.06,37.88,34.0,4781.0,703.0,1879.0,714.0,6.5378,340900.0,NEAR BAY --122.05,37.87,30.0,2296.0,329.0,847.0,322.0,6.7192,397500.0,NEAR BAY --122.05,37.9,24.0,4125.0,1020.0,1699.0,873.0,2.9526,271000.0,NEAR BAY --122.05,37.9,32.0,2676.0,484.0,986.0,473.0,4.6528,335700.0,NEAR BAY --122.05,37.89,37.0,1677.0,269.0,689.0,283.0,4.2625,310600.0,NEAR BAY --122.04,37.89,33.0,2423.0,322.0,998.0,346.0,7.5349,349100.0,NEAR BAY --122.05,37.9,32.0,4498.0,862.0,1818.0,851.0,4.8088,321200.0,NEAR BAY --122.04,37.9,20.0,5467.0,1044.0,2310.0,963.0,5.6986,275800.0,NEAR BAY --122.02,37.89,29.0,6349.0,858.0,2450.0,778.0,7.5,356200.0,NEAR BAY --122.04,37.88,32.0,3250.0,550.0,1230.0,557.0,4.6424,312700.0,NEAR BAY --122.03,37.86,29.0,3025.0,477.0,1035.0,452.0,6.112,390600.0,NEAR BAY --122.04,37.85,27.0,6039.0,780.0,2181.0,761.0,9.5862,469400.0,NEAR BAY --121.94,37.73,22.0,1980.0,291.0,861.0,290.0,6.2726,258200.0,<1H OCEAN --121.94,37.73,22.0,6719.0,1068.0,2843.0,994.0,6.1265,260300.0,<1H OCEAN --121.93,37.73,23.0,2564.0,347.0,1043.0,351.0,6.2048,275000.0,<1H OCEAN --121.93,37.73,8.0,831.0,231.0,404.0,224.0,3.375,350000.0,<1H OCEAN --121.95,37.74,19.0,1127.0,170.0,518.0,167.0,6.3325,250000.0,<1H OCEAN --121.95,37.74,19.0,5721.0,837.0,2653.0,813.0,6.2631,266000.0,<1H OCEAN --121.94,37.75,17.0,2559.0,370.0,1238.0,377.0,6.2781,269800.0,<1H OCEAN --121.92,37.73,24.0,1407.0,327.0,501.0,295.0,2.4821,157200.0,<1H OCEAN --121.93,37.74,16.0,3326.0,419.0,1272.0,402.0,6.8806,343500.0,<1H OCEAN --121.94,37.75,16.0,5121.0,735.0,2464.0,761.0,6.6204,296100.0,<1H OCEAN --121.97,37.79,17.0,5688.0,824.0,2111.0,773.0,6.6131,312500.0,<1H OCEAN --121.98,37.8,17.0,3354.0,422.0,1457.0,425.0,7.6473,345800.0,<1H OCEAN --121.98,37.8,16.0,2498.0,330.0,1027.0,343.0,8.155,343700.0,<1H OCEAN --121.98,37.81,18.0,2903.0,387.0,1127.0,372.0,5.5921,359100.0,<1H OCEAN --121.96,37.81,12.0,6488.0,778.0,2404.0,765.0,8.3188,403400.0,<1H OCEAN --121.97,37.8,17.0,3279.0,418.0,1222.0,381.0,7.9168,356000.0,<1H OCEAN --121.94,37.8,8.0,11336.0,1657.0,4089.0,1555.0,7.8287,369200.0,<1H OCEAN --121.97,37.79,16.0,3873.0,484.0,1451.0,501.0,6.7857,341300.0,<1H OCEAN --121.95,37.78,4.0,14652.0,2826.0,5613.0,2579.0,6.3942,356700.0,<1H OCEAN --121.96,37.76,8.0,3865.0,463.0,1548.0,432.0,9.7037,425100.0,<1H OCEAN --121.94,37.76,4.0,6875.0,1439.0,2889.0,1307.0,4.6932,356100.0,<1H OCEAN --121.93,37.76,5.0,2255.0,269.0,876.0,258.0,10.3345,461400.0,<1H OCEAN --121.92,37.74,8.0,452.0,51.0,140.0,43.0,12.5915,432400.0,<1H OCEAN --121.93,37.78,2.0,227.0,35.0,114.0,49.0,3.1591,434700.0,<1H OCEAN --121.96,37.74,2.0,200.0,20.0,25.0,9.0,15.0001,350000.0,<1H OCEAN --121.97,37.76,8.0,3743.0,581.0,1633.0,567.0,6.7027,381900.0,<1H OCEAN --121.97,37.77,13.0,7241.0,1007.0,3221.0,947.0,7.2216,324600.0,<1H OCEAN --121.98,37.74,8.0,2865.0,389.0,1376.0,417.0,7.9393,399300.0,<1H OCEAN --122.02,37.84,34.0,1879.0,265.0,729.0,263.0,7.7072,443800.0,NEAR BAY --122.01,37.83,30.0,3917.0,549.0,1330.0,544.0,6.5617,386600.0,NEAR BAY --122.0,37.82,20.0,2206.0,458.0,926.0,432.0,4.6042,256400.0,<1H OCEAN --121.99,37.82,22.0,1248.0,271.0,579.0,269.0,3.375,200000.0,<1H OCEAN --122.03,37.83,24.0,5948.0,738.0,1997.0,710.0,9.8708,500001.0,NEAR BAY --121.99,37.77,14.0,8213.0,1364.0,3283.0,1286.0,5.1755,294800.0,<1H OCEAN --121.99,37.81,17.0,465.0,83.0,146.0,75.0,4.9018,188500.0,<1H OCEAN --122.02,37.8,11.0,6200.0,907.0,2286.0,896.0,7.6518,359300.0,NEAR BAY --122.03,37.87,21.0,3521.0,447.0,1396.0,467.0,8.2673,358700.0,NEAR BAY --122.02,37.88,16.0,3031.0,438.0,1087.0,421.0,7.3732,287300.0,NEAR BAY --122.02,37.87,14.0,3056.0,369.0,1209.0,377.0,8.4352,441400.0,NEAR BAY --122.03,37.86,25.0,3004.0,393.0,1145.0,376.0,7.2655,494000.0,NEAR BAY --122.0,37.86,18.0,8953.0,1074.0,3011.0,993.0,10.7372,500001.0,<1H OCEAN --121.97,37.87,4.0,1029.0,126.0,416.0,122.0,13.4883,500001.0,INLAND --121.96,37.84,29.0,7479.0,977.0,2744.0,943.0,7.5139,398200.0,INLAND --122.0,37.84,16.0,7681.0,946.0,2777.0,908.0,9.5271,500001.0,<1H OCEAN --121.96,37.85,10.0,3209.0,379.0,1199.0,392.0,12.2478,500001.0,INLAND --121.99,37.83,16.0,2939.0,380.0,1177.0,396.0,8.0839,372000.0,<1H OCEAN --121.98,37.82,18.0,9117.0,1248.0,3280.0,1167.0,8.003,351300.0,<1H OCEAN --121.95,37.81,5.0,7178.0,898.0,2823.0,907.0,9.0776,450400.0,<1H OCEAN --122.1,37.93,20.0,10212.0,1424.0,4083.0,1374.0,8.039,382200.0,NEAR BAY --122.12,37.94,22.0,4949.0,626.0,1850.0,590.0,10.4549,500001.0,NEAR BAY --122.1,37.9,38.0,827.0,144.0,368.0,136.0,6.5095,294400.0,NEAR BAY --122.14,37.9,32.0,5738.0,746.0,2099.0,732.0,10.3224,500001.0,NEAR BAY --122.12,37.91,34.0,5683.0,755.0,1962.0,723.0,8.3678,455300.0,NEAR BAY --122.09,37.89,35.0,880.0,139.0,352.0,132.0,6.8686,406500.0,NEAR BAY --122.1,37.89,21.0,3282.0,653.0,1398.0,601.0,5.2079,310300.0,NEAR BAY --122.11,37.89,32.0,2372.0,516.0,1067.0,492.0,4.3235,279500.0,NEAR BAY --122.11,37.88,37.0,4005.0,614.0,1602.0,606.0,6.4666,348200.0,NEAR BAY --122.12,37.88,35.0,2785.0,362.0,1001.0,363.0,8.0448,433300.0,NEAR BAY --122.12,37.89,30.0,3227.0,733.0,1260.0,684.0,4.125,257100.0,NEAR BAY --122.13,37.89,27.0,744.0,214.0,295.0,169.0,2.7411,350000.0,NEAR BAY --122.13,37.87,18.0,1820.0,220.0,728.0,229.0,10.3713,426100.0,NEAR BAY --122.14,37.88,34.0,6986.0,1096.0,2865.0,1124.0,6.2275,394400.0,NEAR BAY --122.07,37.88,11.0,1077.0,318.0,590.0,264.0,3.5536,387200.0,NEAR BAY --122.08,37.88,24.0,2059.0,462.0,410.0,294.0,2.3971,99400.0,NEAR BAY --122.08,37.88,26.0,2947.0,,825.0,626.0,2.933,85000.0,NEAR BAY --122.08,37.87,24.0,6130.0,1359.0,1750.0,1286.0,2.9167,102700.0,NEAR BAY --122.06,37.85,17.0,7475.0,1556.0,2092.0,1449.0,3.6437,186500.0,NEAR BAY --122.07,37.86,23.0,1025.0,205.0,263.0,191.0,3.12,155000.0,NEAR BAY --122.06,37.86,16.0,5187.0,1014.0,1512.0,986.0,4.4551,252400.0,NEAR BAY --122.07,37.86,17.0,1102.0,224.0,317.0,208.0,3.5893,206300.0,NEAR BAY --122.08,37.87,26.0,2405.0,564.0,680.0,531.0,2.4896,73400.0,NEAR BAY --122.1,37.88,35.0,3701.0,528.0,1511.0,517.0,7.2315,367100.0,NEAR BAY --122.09,37.86,27.0,5484.0,760.0,2212.0,770.0,7.6202,402600.0,NEAR BAY --122.11,37.87,33.0,3398.0,500.0,1351.0,457.0,6.5814,314200.0,NEAR BAY --122.12,37.85,18.0,5252.0,686.0,1870.0,657.0,8.0074,454100.0,NEAR BAY --122.08,37.84,17.0,1320.0,159.0,1722.0,141.0,11.7064,500001.0,NEAR BAY --122.12,37.81,26.0,4048.0,513.0,1486.0,498.0,7.6717,416500.0,NEAR BAY --122.12,37.82,26.0,2269.0,317.0,918.0,313.0,6.6657,364500.0,NEAR BAY --122.11,37.83,19.0,5130.0,741.0,1887.0,712.0,7.203,369900.0,NEAR BAY --122.08,37.82,4.0,2045.0,237.0,830.0,252.0,11.3421,500001.0,NEAR BAY --122.14,37.86,20.0,6201.0,1182.0,2415.0,1141.0,4.5744,314000.0,NEAR BAY --122.14,37.85,27.0,9147.0,1276.0,3371.0,1269.0,7.3267,389900.0,NEAR BAY --122.14,37.84,24.0,2131.0,343.0,874.0,373.0,5.6349,355600.0,NEAR BAY --122.16,37.83,16.0,4596.0,705.0,1480.0,650.0,7.52,370200.0,NEAR BAY --122.16,37.86,36.0,3359.0,493.0,1298.0,483.0,8.1586,404300.0,NEAR BAY --122.18,37.88,36.0,542.0,119.0,231.0,121.0,4.9,354200.0,NEAR BAY --122.18,37.86,33.0,4449.0,636.0,1684.0,617.0,8.9571,399700.0,NEAR BAY --122.16,37.89,32.0,1779.0,241.0,721.0,258.0,8.7589,434500.0,NEAR BAY --122.17,37.88,32.0,3633.0,508.0,1393.0,506.0,7.6917,401800.0,NEAR BAY --122.17,37.88,33.0,3626.0,502.0,1348.0,480.0,7.6107,423200.0,NEAR BAY --122.17,37.87,38.0,1261.0,177.0,472.0,183.0,6.917,438000.0,NEAR BAY --122.22,37.88,20.0,95.0,13.0,31.0,15.0,2.4444,475000.0,NEAR BAY --122.2,37.89,37.0,3881.0,560.0,1315.0,517.0,7.3195,367500.0,NEAR BAY --122.2,37.88,36.0,1065.0,160.0,398.0,155.0,7.7736,378100.0,NEAR BAY --122.18,37.91,31.0,7200.0,876.0,2428.0,843.0,10.9405,500001.0,NEAR BAY --122.2,37.9,36.0,2107.0,287.0,740.0,280.0,10.3416,500001.0,NEAR BAY --122.18,37.9,36.0,4760.0,610.0,1511.0,572.0,9.0064,500001.0,NEAR BAY --122.18,37.89,18.0,4845.0,735.0,1634.0,734.0,8.1489,499000.0,NEAR BAY --121.84,37.98,8.0,7505.0,1089.0,3325.0,1016.0,5.2699,204200.0,INLAND --121.81,37.97,8.0,1584.0,236.0,615.0,202.0,6.4753,166800.0,INLAND --121.78,37.97,4.0,17032.0,2546.0,7653.0,2359.0,5.5601,213700.0,INLAND --121.83,37.95,17.0,1133.0,244.0,716.0,235.0,2.875,162500.0,INLAND --121.94,37.83,11.0,2836.0,373.0,959.0,335.0,10.5815,500001.0,INLAND --121.89,37.82,4.0,11444.0,1355.0,3898.0,1257.0,13.2949,500001.0,INLAND --121.91,37.81,7.0,3477.0,416.0,1216.0,395.0,13.1499,500001.0,INLAND --121.82,37.81,12.0,4711.0,659.0,2089.0,621.0,8.3209,485400.0,INLAND --121.96,37.99,2.0,3129.0,707.0,1606.0,698.0,2.9591,210100.0,INLAND --121.96,37.94,26.0,3084.0,505.0,1557.0,501.0,5.1582,194700.0,INLAND --121.96,37.95,25.0,4026.0,791.0,1850.0,709.0,4.1483,181200.0,INLAND --121.95,37.94,21.0,3153.0,411.0,1318.0,431.0,6.8642,285400.0,INLAND --121.97,37.93,4.0,3241.0,464.0,1552.0,494.0,6.6134,307000.0,INLAND --122.01,37.92,18.0,2808.0,337.0,1038.0,337.0,8.3956,353600.0,NEAR BAY --122.01,37.92,16.0,2638.0,345.0,1055.0,334.0,8.1163,365800.0,NEAR BAY --121.99,37.92,14.0,1780.0,224.0,764.0,226.0,9.0243,427700.0,INLAND --121.93,37.89,13.0,2085.0,292.0,852.0,264.0,7.3445,366700.0,INLAND --121.92,37.96,14.0,5332.0,884.0,2093.0,839.0,5.2798,237400.0,INLAND --121.94,37.95,18.0,2541.0,355.0,986.0,346.0,7.1978,288000.0,INLAND --121.91,37.93,13.0,1610.0,198.0,703.0,217.0,8.7059,329400.0,INLAND --121.94,37.94,26.0,1299.0,174.0,533.0,180.0,6.2296,291700.0,INLAND --121.94,37.93,16.0,3421.0,427.0,1341.0,428.0,7.5695,320400.0,INLAND --121.93,37.93,16.0,2876.0,391.0,1089.0,377.0,6.299,286900.0,INLAND --121.93,37.93,16.0,2169.0,262.0,877.0,245.0,6.6049,312600.0,INLAND --121.95,37.94,27.0,1469.0,216.0,578.0,219.0,5.9346,253600.0,INLAND --122.25,38.02,16.0,1803.0,267.0,946.0,266.0,5.7001,205100.0,NEAR BAY --122.25,38.03,15.0,3338.0,532.0,1834.0,520.0,5.6293,197600.0,NEAR BAY --122.21,38.02,15.0,2150.0,327.0,1094.0,324.0,6.0224,198500.0,NEAR BAY --122.2,37.96,9.0,6306.0,962.0,2581.0,911.0,6.7741,310700.0,NEAR BAY --122.23,38.06,52.0,1350.0,266.0,490.0,257.0,3.125,171100.0,NEAR BAY --122.23,38.05,52.0,1736.0,358.0,638.0,297.0,2.5517,147100.0,NEAR BAY --122.21,38.06,52.0,2735.0,559.0,1076.0,487.0,3.6154,155700.0,NEAR BAY --122.2,38.04,31.0,3029.0,500.0,1236.0,487.0,5.6022,197000.0,NEAR BAY --122.26,38.03,25.0,2239.0,361.0,928.0,353.0,4.4474,203700.0,NEAR BAY --122.27,38.04,47.0,1685.0,405.0,835.0,372.0,2.3103,134500.0,NEAR BAY --122.26,38.03,41.0,1631.0,282.0,752.0,288.0,3.9345,150200.0,NEAR BAY --122.26,38.04,41.0,2512.0,539.0,1179.0,480.0,2.694,123000.0,NEAR BAY --122.25,38.05,30.0,1255.0,297.0,779.0,307.0,1.6767,147700.0,NEAR BAY --122.32,38.06,4.0,7999.0,1611.0,3596.0,1396.0,5.0969,174200.0,NEAR BAY --122.28,38.0,26.0,2335.0,413.0,980.0,417.0,3.4471,178900.0,NEAR BAY --122.29,38.0,16.0,4986.0,1081.0,2805.0,1016.0,4.025,173200.0,NEAR BAY --122.36,38.03,32.0,2159.0,393.0,981.0,369.0,4.3173,175400.0,NEAR BAY --122.3,38.0,34.0,1712.0,317.0,956.0,341.0,4.4394,162000.0,NEAR BAY --122.31,38.0,26.0,3735.0,641.0,1708.0,633.0,4.621,191100.0,NEAR BAY --122.31,38.01,18.0,4123.0,874.0,1895.0,772.0,3.2759,195000.0,NEAR BAY --122.28,37.99,28.0,3801.0,622.0,1654.0,571.0,4.375,193300.0,NEAR BAY --122.26,37.98,28.0,2038.0,329.0,947.0,349.0,5.1178,198000.0,NEAR BAY --122.27,37.99,16.0,4921.0,737.0,2312.0,725.0,5.8899,243200.0,NEAR BAY --122.27,37.98,23.0,3455.0,479.0,1375.0,474.0,6.0289,218600.0,NEAR BAY --122.26,38.02,5.0,3846.0,786.0,2053.0,716.0,5.0473,184800.0,NEAR BAY --122.24,38.01,11.0,3751.0,565.0,1949.0,555.0,5.7862,269400.0,NEAR BAY --122.24,38.01,16.0,2084.0,315.0,1154.0,307.0,6.0102,235600.0,NEAR BAY --122.25,38.0,16.0,2978.0,411.0,1531.0,400.0,6.5006,237700.0,NEAR BAY --122.26,38.0,14.0,2338.0,391.0,1003.0,398.0,4.2269,170500.0,NEAR BAY --122.26,38.0,6.0,678.0,104.0,318.0,91.0,5.2375,246400.0,NEAR BAY --122.27,38.0,15.0,1216.0,166.0,572.0,178.0,5.8418,240300.0,NEAR BAY --122.27,38.0,12.0,1592.0,242.0,969.0,233.0,6.1576,248700.0,NEAR BAY --122.26,38.0,5.0,6265.0,908.0,3326.0,872.0,6.2073,272900.0,NEAR BAY --122.29,37.98,27.0,2133.0,347.0,850.0,350.0,5.1046,209800.0,NEAR BAY --122.28,37.96,35.0,1579.0,243.0,734.0,264.0,5.5,201000.0,NEAR BAY --122.27,37.97,10.0,15259.0,2275.0,7266.0,2338.0,6.0666,272400.0,NEAR BAY --122.3,37.97,30.0,4030.0,772.0,1777.0,718.0,3.6393,184000.0,NEAR BAY --122.3,37.97,34.0,2854.0,528.0,1211.0,452.0,3.5353,164700.0,NEAR BAY --122.29,37.97,20.0,3426.0,632.0,1512.0,580.0,4.4911,227400.0,NEAR BAY --122.3,37.97,35.0,1811.0,377.0,911.0,340.0,3.375,149700.0,NEAR BAY --122.29,37.94,20.0,7578.0,1426.0,3637.0,1362.0,4.4387,190000.0,NEAR BAY --122.32,37.95,37.0,1887.0,353.0,895.0,359.0,4.45,196600.0,NEAR BAY --122.31,37.94,38.0,1794.0,349.0,810.0,335.0,3.8343,191400.0,NEAR BAY --122.31,37.94,38.0,2172.0,403.0,945.0,384.0,4.3958,194200.0,NEAR BAY --122.32,37.95,36.0,1425.0,245.0,573.0,239.0,4.35,185000.0,NEAR BAY --122.31,37.99,25.0,6508.0,1137.0,3259.0,1081.0,4.2348,157800.0,NEAR BAY --122.3,37.98,25.0,3807.0,806.0,1821.0,792.0,3.6518,164300.0,NEAR BAY --122.32,37.97,29.0,2347.0,464.0,1135.0,490.0,3.9722,161000.0,NEAR BAY --122.32,38.01,26.0,3054.0,492.0,1495.0,496.0,4.6944,171100.0,NEAR BAY --122.33,38.0,35.0,3779.0,711.0,2493.0,679.0,2.9781,109000.0,NEAR BAY --122.31,38.0,29.0,3108.0,534.0,1687.0,516.0,4.3333,170800.0,NEAR BAY --122.32,37.99,24.0,4865.0,968.0,2315.0,893.0,4.2852,173500.0,NEAR BAY --122.32,38.0,32.0,2275.0,397.0,1233.0,418.0,4.0437,162800.0,NEAR BAY --122.34,37.99,42.0,1531.0,326.0,1271.0,377.0,2.6167,85100.0,NEAR BAY --122.33,37.98,3.0,2850.0,544.0,1024.0,515.0,6.0115,175000.0,NEAR BAY --122.33,37.99,4.0,3999.0,1079.0,1591.0,887.0,3.911,112500.0,NEAR BAY --122.39,38.0,33.0,44.0,6.0,23.0,11.0,4.125,212500.0,NEAR BAY --122.36,37.96,39.0,246.0,57.0,316.0,52.0,0.716,104200.0,NEAR BAY --122.36,37.96,31.0,1157.0,276.0,956.0,232.0,1.5347,80400.0,NEAR BAY --122.36,37.95,40.0,408.0,102.0,302.0,81.0,1.8333,69800.0,NEAR BAY --122.37,37.95,35.0,215.0,45.0,100.0,34.0,1.6023,81300.0,NEAR BAY --122.37,37.95,32.0,1298.0,363.0,716.0,268.0,0.9797,76400.0,NEAR BAY --122.37,37.96,37.0,1572.0,402.0,1046.0,350.0,0.7403,68600.0,NEAR BAY --122.41,37.98,36.0,60.0,15.0,42.0,25.0,1.4583,67500.0,NEAR BAY --122.34,37.98,33.0,2014.0,410.0,1354.0,427.0,3.9773,131300.0,NEAR BAY --122.35,37.98,34.0,3756.0,726.0,2237.0,686.0,3.7562,132900.0,NEAR BAY --122.34,37.97,19.0,392.0,109.0,287.0,81.0,6.0426,110000.0,NEAR BAY --122.35,37.96,32.0,1991.0,504.0,1139.0,423.0,2.0353,113600.0,NEAR BAY --122.35,37.97,43.0,2178.0,482.0,1545.0,471.0,2.5863,112200.0,NEAR BAY --122.35,37.97,31.0,2892.0,685.0,2104.0,641.0,3.2188,113800.0,NEAR BAY --122.32,37.97,33.0,1595.0,292.0,991.0,300.0,4.6937,134100.0,NEAR BAY --122.32,37.97,33.0,1156.0,190.0,643.0,209.0,4.5,156600.0,NEAR BAY --122.33,37.97,19.0,5151.0,1335.0,2548.0,1165.0,3.3125,158800.0,NEAR BAY --122.33,37.98,32.0,1967.0,348.0,1144.0,364.0,4.4135,150100.0,NEAR BAY --122.33,37.97,45.0,1982.0,376.0,1179.0,398.0,3.5463,130800.0,NEAR BAY --122.34,37.97,19.0,2237.0,580.0,1438.0,551.0,2.3382,120700.0,NEAR BAY --122.33,37.96,46.0,1222.0,236.0,819.0,251.0,3.9118,129400.0,NEAR BAY --122.35,37.96,36.0,2191.0,531.0,1563.0,524.0,2.5164,114200.0,NEAR BAY --122.35,37.96,29.0,1899.0,524.0,1357.0,443.0,1.875,97200.0,NEAR BAY --122.35,37.96,35.0,1326.0,346.0,1023.0,295.0,2.0724,97700.0,NEAR BAY --122.35,37.95,31.0,2449.0,595.0,1801.0,548.0,2.6328,110300.0,NEAR BAY --122.35,37.96,34.0,1428.0,335.0,1272.0,319.0,2.5461,93900.0,NEAR BAY --122.36,37.96,30.0,950.0,317.0,1073.0,280.0,1.8664,107800.0,NEAR BAY --122.32,37.96,25.0,1728.0,403.0,934.0,412.0,3.375,133700.0,NEAR BAY --122.32,37.96,34.0,2070.0,357.0,784.0,294.0,4.0417,182800.0,NEAR BAY --122.32,37.95,35.0,1612.0,354.0,887.0,331.0,2.5769,146100.0,NEAR BAY --122.33,37.95,22.0,2099.0,569.0,1135.0,509.0,2.1915,120800.0,NEAR BAY --122.34,37.96,15.0,6487.0,1717.0,3408.0,1560.0,2.1991,133300.0,NEAR BAY --122.34,37.96,33.0,1817.0,441.0,1220.0,389.0,2.5382,103600.0,NEAR BAY --122.32,37.94,38.0,2751.0,522.0,1390.0,489.0,3.7277,165100.0,NEAR BAY --122.32,37.94,46.0,1901.0,295.0,833.0,352.0,5.5196,210800.0,NEAR BAY --122.32,37.93,40.0,1141.0,213.0,434.0,196.0,3.9464,186900.0,NEAR BAY --122.33,37.95,42.0,1627.0,336.0,848.0,316.0,3.7708,144600.0,NEAR BAY --122.33,37.94,45.0,1226.0,279.0,590.0,260.0,2.8833,140400.0,NEAR BAY --122.33,37.94,47.0,1882.0,361.0,797.0,342.0,3.5848,140800.0,NEAR BAY --122.33,37.94,43.0,1876.0,389.0,807.0,377.0,3.1571,141600.0,NEAR BAY --122.33,37.94,42.0,1695.0,345.0,719.0,334.0,3.9417,139100.0,NEAR BAY --122.33,37.94,44.0,1769.0,332.0,828.0,309.0,4.0526,150800.0,NEAR BAY --122.34,37.95,45.0,1128.0,240.0,702.0,270.0,3.6719,134100.0,NEAR BAY --122.33,37.95,45.0,1585.0,329.0,981.0,373.0,3.0313,135800.0,NEAR BAY --122.33,37.95,46.0,1543.0,339.0,777.0,322.0,4.0927,142600.0,NEAR BAY --122.34,37.95,44.0,1675.0,317.0,806.0,311.0,3.0694,135300.0,NEAR BAY --122.34,37.95,44.0,1788.0,368.0,933.0,329.0,2.875,133400.0,NEAR BAY --122.34,37.95,39.0,1986.0,427.0,1041.0,385.0,3.2333,135100.0,NEAR BAY --122.34,37.95,38.0,1340.0,298.0,766.0,241.0,3.2833,111700.0,NEAR BAY --122.35,37.95,45.0,2142.0,431.0,1318.0,431.0,3.0737,111600.0,NEAR BAY --122.35,37.95,42.0,1485.0,290.0,971.0,303.0,3.6094,114600.0,NEAR BAY --122.36,37.95,38.0,1042.0,289.0,773.0,248.0,2.7714,104700.0,NEAR BAY --122.34,37.94,47.0,2313.0,433.0,947.0,430.0,3.942,143300.0,NEAR BAY --122.34,37.94,44.0,1917.0,444.0,936.0,435.0,2.7391,140300.0,NEAR BAY --122.34,37.94,31.0,1611.0,455.0,786.0,411.0,1.681,145500.0,NEAR BAY --122.34,37.94,42.0,2206.0,451.0,989.0,444.0,3.125,143900.0,NEAR BAY --122.35,37.94,45.0,2112.0,493.0,1406.0,452.0,2.3456,105200.0,NEAR BAY --122.35,37.94,34.0,1880.0,459.0,1358.0,422.0,1.6571,105200.0,NEAR BAY --122.35,37.94,47.0,1275.0,275.0,844.0,273.0,2.8967,95600.0,NEAR BAY --122.36,37.95,38.0,1066.0,248.0,729.0,286.0,1.5139,81700.0,NEAR BAY --122.36,37.94,45.0,907.0,188.0,479.0,161.0,3.0862,79000.0,NEAR BAY --122.36,37.94,27.0,844.0,249.0,583.0,265.0,0.9687,105800.0,NEAR BAY --122.36,37.94,26.0,1540.0,343.0,1007.0,338.0,1.3365,72900.0,NEAR BAY --122.36,37.94,41.0,2591.0,585.0,1638.0,462.0,1.822,79700.0,NEAR BAY --122.37,37.94,49.0,969.0,229.0,599.0,195.0,1.3167,71600.0,NEAR BAY --122.35,37.93,19.0,1334.0,366.0,1048.0,316.0,1.7865,88000.0,NEAR BAY --122.35,37.93,28.0,1995.0,488.0,1182.0,439.0,2.3352,84300.0,NEAR BAY --122.36,37.94,43.0,369.0,107.0,371.0,111.0,1.6,79400.0,NEAR BAY --122.36,37.93,17.0,1258.0,254.0,885.0,229.0,3.05,121600.0,NEAR BAY --122.37,37.94,40.0,1064.0,266.0,912.0,239.0,1.0521,69100.0,NEAR BAY --122.37,37.93,45.0,3150.0,756.0,1798.0,749.0,1.75,37900.0,NEAR BAY --122.38,37.91,18.0,3507.0,711.0,1224.0,676.0,5.0524,269800.0,NEAR BAY --122.42,37.93,47.0,3453.0,779.0,1353.0,728.0,4.016,274500.0,NEAR BAY --122.41,37.94,52.0,154.0,33.0,89.0,38.0,3.2875,275000.0,NEAR BAY --122.34,37.93,30.0,2515.0,481.0,1327.0,428.0,2.1287,95000.0,NEAR BAY --122.35,37.93,39.0,2002.0,416.0,1166.0,395.0,1.7257,91500.0,NEAR BAY --122.36,37.93,44.0,1891.0,449.0,1047.0,432.0,1.7727,86100.0,NEAR BAY --122.36,37.93,42.0,1796.0,389.0,1107.0,372.0,1.9375,87000.0,NEAR BAY --122.37,37.93,37.0,709.0,190.0,644.0,174.0,0.8641,84200.0,NEAR BAY --122.33,37.91,36.0,1954.0,513.0,1437.0,440.0,1.125,93800.0,NEAR BAY --122.35,37.92,36.0,921.0,200.0,585.0,236.0,1.9224,94000.0,NEAR BAY --122.36,37.92,52.0,215.0,41.0,126.0,43.0,1.3929,104200.0,NEAR BAY --122.35,37.91,4.0,2851.0,798.0,1285.0,712.0,4.2895,186800.0,NEAR BAY --122.33,37.93,34.0,2326.0,471.0,1356.0,441.0,2.3475,90300.0,NEAR BAY --122.33,37.93,27.0,2158.0,424.0,1220.0,442.0,3.0156,111500.0,NEAR BAY --122.34,37.93,32.0,2389.0,652.0,1672.0,584.0,1.4423,88300.0,NEAR BAY --122.34,37.93,45.0,2225.0,486.0,1304.0,459.0,2.64,112100.0,NEAR BAY --122.35,37.93,41.0,268.0,75.0,198.0,82.0,3.2222,156300.0,NEAR BAY --122.32,37.92,29.0,2304.0,399.0,1377.0,454.0,5.0187,140600.0,NEAR BAY --122.33,37.92,26.0,3887.0,779.0,2512.0,740.0,2.2301,122400.0,NEAR BAY --122.32,37.92,28.0,4649.0,977.0,2606.0,953.0,3.2674,129100.0,NEAR BAY --122.32,37.91,34.0,2669.0,647.0,1341.0,555.0,2.6399,119600.0,NEAR BAY --122.31,37.91,39.0,2955.0,696.0,1417.0,682.0,2.7628,167800.0,NEAR BAY --122.31,37.91,43.0,2549.0,511.0,1060.0,528.0,3.6417,178400.0,NEAR BAY --122.31,37.91,45.0,3924.0,834.0,1992.0,773.0,4.1146,177800.0,NEAR BAY --122.31,37.93,39.0,2505.0,371.0,872.0,345.0,5.3433,286500.0,NEAR BAY --122.31,37.93,36.0,2403.0,408.0,917.0,404.0,5.0399,253400.0,NEAR BAY --122.32,37.93,40.0,3056.0,489.0,1103.0,481.0,5.1067,247300.0,NEAR BAY --122.32,37.94,47.0,1911.0,283.0,697.0,275.0,6.2712,267700.0,NEAR BAY --122.3,37.92,32.0,3943.0,605.0,1524.0,614.0,6.0677,321600.0,NEAR BAY --122.29,37.92,35.0,583.0,88.0,235.0,84.0,5.943,288200.0,NEAR BAY --122.29,37.92,32.0,1736.0,234.0,602.0,231.0,6.516,401000.0,NEAR BAY --122.3,37.93,34.0,2254.0,357.0,715.0,306.0,4.5,304000.0,NEAR BAY --122.31,37.93,36.0,1526.0,256.0,696.0,263.0,3.5089,261900.0,NEAR BAY --122.32,37.93,33.0,296.0,73.0,216.0,63.0,2.675,22500.0,NEAR BAY --122.31,37.92,30.0,1014.0,236.0,537.0,204.0,2.8456,183300.0,NEAR BAY --122.31,37.92,38.0,1250.0,236.0,631.0,279.0,3.724,220100.0,NEAR BAY --122.31,37.92,12.0,1895.0,600.0,983.0,519.0,2.5,195800.0,NEAR BAY --122.32,37.92,22.0,1119.0,220.0,565.0,199.0,3.3594,186900.0,NEAR BAY --122.31,37.92,43.0,2116.0,407.0,900.0,361.0,4.1587,212200.0,NEAR BAY --122.3,37.92,33.0,1615.0,271.0,710.0,285.0,4.0804,239000.0,NEAR BAY --122.31,37.91,31.0,1432.0,348.0,681.0,348.0,2.7243,218100.0,NEAR BAY --122.3,37.91,39.0,2686.0,569.0,1159.0,559.0,2.9441,200400.0,NEAR BAY --122.3,37.91,40.0,2866.0,617.0,1305.0,589.0,3.6321,209100.0,NEAR BAY --122.3,37.9,37.0,2125.0,489.0,912.0,462.0,2.9219,217200.0,NEAR BAY --122.3,37.9,41.0,2053.0,435.0,873.0,415.0,3.4091,223000.0,NEAR BAY --122.3,37.9,35.0,1102.0,308.0,688.0,303.0,2.3946,141700.0,NEAR BAY --122.3,37.9,30.0,1772.0,471.0,880.0,437.0,2.2672,162500.0,NEAR BAY --122.29,37.92,36.0,1450.0,235.0,568.0,234.0,6.0,311400.0,NEAR BAY --122.29,37.91,38.0,2591.0,424.0,905.0,378.0,5.1691,263200.0,NEAR BAY --122.29,37.91,46.0,2085.0,346.0,748.0,354.0,4.0536,262000.0,NEAR BAY --122.29,37.91,40.0,2085.0,329.0,796.0,339.0,5.5357,273700.0,NEAR BAY --122.29,37.9,52.0,2657.0,500.0,1131.0,489.0,4.4286,234900.0,NEAR BAY --122.28,37.91,38.0,2501.0,348.0,805.0,329.0,6.5576,358500.0,NEAR BAY --122.28,37.9,49.0,3191.0,516.0,1148.0,507.0,6.3538,333700.0,NEAR BAY --122.28,37.9,52.0,1369.0,249.0,490.0,248.0,4.1212,287500.0,NEAR BAY --122.28,37.91,41.0,3009.0,482.0,1053.0,490.0,5.828,324400.0,NEAR BAY --122.27,37.91,47.0,1930.0,315.0,692.0,296.0,6.3669,315500.0,NEAR BAY --122.28,37.91,48.0,2083.0,298.0,685.0,286.0,7.3089,331200.0,NEAR BAY --124.17,41.8,16.0,2739.0,480.0,1259.0,436.0,3.7557,109400.0,NEAR OCEAN --124.3,41.8,19.0,2672.0,552.0,1298.0,478.0,1.9797,85800.0,NEAR OCEAN --124.23,41.75,11.0,3159.0,616.0,1343.0,479.0,2.4805,73200.0,NEAR OCEAN --124.21,41.77,17.0,3461.0,722.0,1947.0,647.0,2.5795,68400.0,NEAR OCEAN --124.19,41.78,15.0,3140.0,714.0,1645.0,640.0,1.6654,74600.0,NEAR OCEAN --124.22,41.73,28.0,3003.0,699.0,1530.0,653.0,1.7038,78300.0,NEAR OCEAN --124.21,41.75,20.0,3810.0,787.0,1993.0,721.0,2.0074,66900.0,NEAR OCEAN --124.17,41.76,20.0,2673.0,538.0,1282.0,514.0,2.4605,105900.0,NEAR OCEAN --124.16,41.74,15.0,2715.0,569.0,1532.0,530.0,2.1829,69500.0,NEAR OCEAN --124.14,41.95,21.0,2696.0,578.0,1208.0,494.0,2.275,122400.0,NEAR OCEAN --124.16,41.92,19.0,1668.0,324.0,841.0,283.0,2.1336,75000.0,NEAR OCEAN --124.3,41.84,17.0,2677.0,531.0,1244.0,456.0,3.0313,103600.0,NEAR OCEAN --124.15,41.81,17.0,3276.0,628.0,3546.0,585.0,2.2868,103100.0,NEAR OCEAN --123.91,41.68,22.0,1880.0,360.0,743.0,314.0,2.9688,152700.0,<1H OCEAN --123.83,41.88,18.0,1504.0,357.0,660.0,258.0,3.13,116700.0,<1H OCEAN --123.92,41.54,22.0,2920.0,636.0,1382.0,499.0,2.0202,71100.0,NEAR OCEAN --119.94,38.96,20.0,1451.0,386.0,467.0,255.0,1.5536,212500.0,INLAND --119.95,38.95,8.0,430.0,107.0,36.0,18.0,2.625,187500.0,INLAND --119.95,38.95,22.0,1058.0,352.0,851.0,269.0,2.02,87500.0,INLAND --119.95,38.95,21.0,2046.0,580.0,952.0,353.0,1.7245,92200.0,INLAND --119.94,38.95,25.0,1789.0,536.0,1134.0,396.0,2.32,91300.0,INLAND --119.95,38.94,24.0,2180.0,517.0,755.0,223.0,2.5875,173400.0,INLAND --119.93,38.94,27.0,1709.0,408.0,97.0,44.0,2.4917,200000.0,INLAND --119.97,38.94,26.0,1485.0,334.0,406.0,180.0,1.9667,84600.0,INLAND --119.97,38.93,24.0,856.0,185.0,388.0,108.0,3.1806,107200.0,INLAND --119.98,38.96,25.0,2443.0,444.0,868.0,342.0,3.5417,114800.0,INLAND --119.96,38.94,19.0,1429.0,292.0,585.0,188.0,2.2589,131600.0,INLAND --119.96,38.94,27.0,1492.0,393.0,717.0,254.0,1.8906,104200.0,INLAND --119.96,38.93,22.0,2731.0,632.0,1215.0,483.0,2.83,110500.0,INLAND --119.94,38.92,24.0,1258.0,216.0,235.0,96.0,4.6,136800.0,INLAND --119.98,38.94,25.0,1339.0,328.0,503.0,219.0,1.9018,109700.0,INLAND --119.98,38.94,23.0,1564.0,298.0,339.0,147.0,4.0417,99300.0,INLAND --119.99,38.94,24.0,1216.0,289.0,421.0,185.0,3.1625,103600.0,INLAND --119.99,38.94,22.0,3119.0,640.0,786.0,351.0,3.0806,118500.0,INLAND --119.99,38.93,23.0,1882.0,414.0,673.0,277.0,2.9091,141900.0,INLAND --119.98,38.93,28.0,1194.0,272.0,494.0,203.0,2.3281,85800.0,INLAND --119.98,38.93,25.0,1262.0,293.0,534.0,226.0,2.6607,90400.0,INLAND --119.98,38.92,27.0,2682.0,606.0,1010.0,399.0,3.15,86900.0,INLAND --119.98,38.92,28.0,1408.0,312.0,522.0,221.0,2.0708,89600.0,INLAND --120.0,38.93,17.0,8005.0,1382.0,999.0,383.0,3.9722,313400.0,INLAND --120.01,38.93,22.0,3080.0,610.0,1045.0,425.0,2.996,126100.0,INLAND --120.0,38.92,17.0,1106.0,207.0,466.0,180.0,3.3295,126600.0,INLAND --120.0,38.92,26.0,529.0,116.0,191.0,83.0,3.5,103600.0,INLAND --120.01,38.92,23.0,964.0,246.0,485.0,198.0,1.7188,96100.0,INLAND --120.01,38.92,25.0,1758.0,357.0,689.0,278.0,2.675,104200.0,INLAND --120.02,38.91,22.0,2138.0,493.0,829.0,330.0,2.2056,107200.0,INLAND --120.02,38.92,24.0,1194.0,246.0,414.0,151.0,3.2396,101900.0,INLAND --120.01,38.91,27.0,968.0,191.0,283.0,143.0,2.0938,94400.0,INLAND --120.01,38.91,17.0,2732.0,609.0,1005.0,499.0,1.9851,86700.0,INLAND --120.01,38.89,24.0,1669.0,422.0,589.0,281.0,3.0089,100800.0,INLAND --120.0,38.9,21.0,1653.0,419.0,737.0,308.0,1.9727,114100.0,INLAND --119.99,38.88,17.0,2807.0,529.0,675.0,251.0,2.7457,107800.0,INLAND --119.98,38.9,16.0,3109.0,572.0,885.0,334.0,3.5,134700.0,INLAND --119.92,38.91,15.0,3831.0,625.0,984.0,328.0,5.0718,162500.0,INLAND --120.0,38.87,12.0,1437.0,268.0,395.0,144.0,4.225,127600.0,INLAND --119.96,38.84,17.0,2722.0,512.0,828.0,289.0,3.5714,109700.0,INLAND --120.02,38.76,15.0,3142.0,618.0,725.0,285.0,4.3333,121400.0,INLAND --120.04,38.86,16.0,2708.0,481.0,712.0,261.0,3.7891,117700.0,INLAND --120.03,38.89,15.0,3042.0,588.0,918.0,336.0,3.8333,118800.0,INLAND --120.02,38.86,19.0,2429.0,459.0,883.0,300.0,3.017,97600.0,INLAND --120.13,39.06,22.0,2465.0,539.0,381.0,146.0,2.875,87500.0,INLAND --120.16,39.04,18.0,2040.0,402.0,350.0,129.0,4.0313,126000.0,INLAND --120.16,39.01,16.0,1463.0,264.0,54.0,26.0,4.975,206300.0,INLAND --120.06,39.01,19.0,2967.0,528.0,112.0,48.0,4.0714,437500.0,INLAND --120.1,38.91,33.0,1561.0,282.0,30.0,11.0,1.875,500001.0,INLAND --120.97,38.91,7.0,4341.0,716.0,1978.0,682.0,4.8311,172200.0,INLAND --121.04,38.81,11.0,3522.0,623.0,1456.0,544.0,3.93,163400.0,INLAND --120.72,38.94,10.0,1604.0,352.0,540.0,190.0,3.7625,113200.0,INLAND --120.88,38.91,15.0,3876.0,778.0,1960.0,691.0,2.902,127300.0,INLAND --120.92,38.86,11.0,1720.0,345.0,850.0,326.0,3.2027,128600.0,INLAND --120.87,38.83,12.0,2180.0,423.0,1070.0,377.0,2.8562,128200.0,INLAND --120.84,38.81,11.0,1280.0,286.0,609.0,248.0,3.1635,132600.0,INLAND --120.81,38.89,17.0,1438.0,324.0,675.0,268.0,2.9444,119300.0,INLAND --120.79,38.83,15.0,1374.0,291.0,709.0,239.0,1.7222,118500.0,INLAND --120.71,38.85,8.0,1877.0,479.0,884.0,323.0,3.4688,120100.0,INLAND --120.5,38.87,10.0,81.0,41.0,55.0,16.0,4.9583,87500.0,INLAND --120.3,38.9,11.0,1961.0,435.0,113.0,53.0,0.9227,95500.0,INLAND --121.09,38.68,15.0,5218.0,711.0,1949.0,659.0,4.7083,213300.0,INLAND --121.08,38.67,10.0,2499.0,331.0,1040.0,333.0,6.844,239600.0,INLAND --121.07,38.66,22.0,1831.0,274.0,813.0,269.0,4.6394,173400.0,INLAND --121.06,38.7,9.0,13255.0,1739.0,5001.0,1627.0,6.314,228900.0,INLAND --121.0,38.58,12.0,3425.0,549.0,1357.0,451.0,5.3344,217500.0,INLAND --121.01,38.73,7.0,6322.0,1046.0,2957.0,1024.0,4.7276,197500.0,INLAND --120.99,38.69,5.0,5743.0,1074.0,2651.0,962.0,4.1163,172500.0,INLAND --121.02,38.66,4.0,7392.0,1155.0,3096.0,1065.0,4.5246,198900.0,INLAND --120.99,38.67,8.0,4913.0,744.0,2005.0,723.0,5.4413,187900.0,INLAND --120.98,38.67,13.0,3432.0,516.0,1286.0,470.0,5.584,186600.0,INLAND --120.98,38.66,9.0,2073.0,404.0,916.0,373.0,3.225,163300.0,INLAND --120.98,38.68,5.0,4810.0,909.0,2242.0,900.0,3.2964,176900.0,INLAND --120.95,38.69,10.0,3421.0,563.0,1689.0,545.0,5.2032,217100.0,INLAND --120.96,38.66,11.0,2339.0,436.0,1062.0,380.0,3.9036,180800.0,INLAND --120.97,38.65,9.0,3707.0,602.0,1601.0,555.0,4.0714,300600.0,INLAND --120.93,38.65,12.0,2213.0,384.0,1097.0,351.0,4.5568,170100.0,INLAND --120.91,38.62,12.0,4545.0,748.0,2033.0,718.0,4.1843,207600.0,INLAND --120.95,38.79,12.0,3247.0,579.0,1459.0,517.0,4.3981,202800.0,INLAND --120.93,38.77,9.0,2229.0,355.0,788.0,341.0,5.5111,196300.0,INLAND --120.91,38.73,11.0,5460.0,859.0,2645.0,838.0,4.835,230600.0,INLAND --120.87,38.71,13.0,2692.0,470.0,1302.0,420.0,4.0,167400.0,INLAND --120.84,38.77,11.0,1013.0,188.0,410.0,158.0,4.825,184600.0,INLAND --120.86,38.75,15.0,1533.0,300.0,674.0,287.0,2.5625,146100.0,INLAND --120.83,38.74,17.0,3685.0,775.0,1714.0,734.0,2.2269,128300.0,INLAND --120.84,38.73,17.0,2616.0,492.0,1158.0,457.0,2.8807,142600.0,INLAND --120.81,38.73,38.0,2005.0,385.0,882.0,353.0,2.5104,120500.0,INLAND --120.78,38.74,28.0,4236.0,877.0,2008.0,881.0,2.1603,111300.0,INLAND --120.81,38.74,29.0,2259.0,482.0,1099.0,463.0,2.3314,121600.0,INLAND --120.76,38.76,21.0,3509.0,606.0,1576.0,564.0,2.6392,148500.0,INLAND --120.76,38.73,17.0,512.0,129.0,314.0,140.0,1.5625,108300.0,INLAND --120.78,38.73,31.0,3117.0,616.0,1606.0,588.0,2.9844,127900.0,INLAND --120.81,38.73,42.0,1276.0,260.0,799.0,259.0,2.7273,128600.0,INLAND --120.78,38.72,19.0,4414.0,767.0,1865.0,699.0,3.6406,150900.0,INLAND --120.67,38.76,35.0,2104.0,403.0,1060.0,400.0,2.1682,138100.0,INLAND --120.7,38.75,19.0,2325.0,430.0,967.0,376.0,2.9,158700.0,INLAND --120.71,38.73,17.0,2146.0,396.0,862.0,351.0,2.9219,141300.0,INLAND --120.58,38.77,15.0,2155.0,394.0,857.0,356.0,4.03,141200.0,INLAND --120.58,38.77,21.0,1661.0,406.0,789.0,319.0,2.3583,108700.0,INLAND --120.6,38.76,22.0,1236.0,273.0,615.0,248.0,3.0217,106900.0,INLAND --120.59,38.76,21.0,1728.0,417.0,731.0,334.0,1.7266,94700.0,INLAND --120.63,38.75,17.0,3145.0,621.0,1432.0,559.0,2.7201,117500.0,INLAND --120.7,38.69,13.0,4492.0,821.0,2093.0,734.0,4.0709,151700.0,INLAND --120.63,38.73,11.0,4577.0,836.0,1944.0,700.0,4.0675,140200.0,INLAND --120.62,38.71,10.0,6305.0,1150.0,2597.0,921.0,4.0197,132200.0,INLAND --120.63,38.68,14.0,1821.0,316.0,769.0,266.0,3.0789,131700.0,INLAND --120.54,38.75,9.0,3006.0,540.0,1102.0,418.0,3.9812,136600.0,INLAND --120.76,38.6,14.0,2925.0,625.0,1226.0,437.0,2.5865,133800.0,INLAND --120.66,38.61,19.0,2715.0,596.0,1301.0,473.0,2.5042,126400.0,INLAND --120.72,38.57,8.0,892.0,185.0,427.0,164.0,2.6833,118800.0,INLAND --120.59,38.53,15.0,432.0,87.0,208.0,73.0,3.6125,100000.0,INLAND --120.44,38.61,9.0,2598.0,548.0,796.0,297.0,3.5192,98000.0,INLAND --120.32,38.71,13.0,1115.0,255.0,86.0,32.0,3.5667,115600.0,INLAND --120.08,38.8,34.0,1988.0,511.0,36.0,15.0,4.625,162500.0,INLAND --120.88,38.58,8.0,3417.0,604.0,1703.0,623.0,4.0827,170700.0,INLAND --120.84,38.63,12.0,1313.0,231.0,731.0,232.0,5.7373,208300.0,INLAND --120.81,38.67,14.0,8396.0,1578.0,3952.0,1474.0,3.0565,118800.0,INLAND --120.76,38.65,17.0,2319.0,430.0,1126.0,372.0,3.5511,155900.0,INLAND --120.85,38.69,18.0,5928.0,1097.0,2697.0,1096.0,3.4872,141400.0,INLAND --120.79,38.7,13.0,5036.0,1034.0,2243.0,923.0,2.3319,138500.0,INLAND --119.81,36.73,51.0,956.0,196.0,662.0,180.0,2.101,56700.0,INLAND --119.81,36.73,47.0,1314.0,416.0,1155.0,326.0,1.372,49600.0,INLAND --119.81,36.74,36.0,607.0,155.0,483.0,146.0,1.5625,47500.0,INLAND --119.79,36.73,52.0,112.0,28.0,193.0,40.0,1.975,47500.0,INLAND --119.8,36.73,45.0,925.0,231.0,797.0,228.0,1.7011,44800.0,INLAND --119.8,36.72,43.0,1286.0,360.0,972.0,345.0,0.9513,50400.0,INLAND --119.81,36.72,46.0,1414.0,268.0,902.0,243.0,1.5833,56700.0,INLAND --119.81,36.73,50.0,772.0,194.0,606.0,167.0,2.2206,59200.0,INLAND --119.77,36.73,44.0,1960.0,393.0,1286.0,381.0,2.1518,53000.0,INLAND --119.77,36.72,43.0,1763.0,389.0,1623.0,390.0,1.4427,47700.0,INLAND --119.78,36.73,52.0,1377.0,319.0,1280.0,259.0,1.2344,43300.0,INLAND --119.77,36.73,45.0,1081.0,241.0,821.0,230.0,1.7829,52600.0,INLAND --119.77,36.75,39.0,1287.0,332.0,1386.0,306.0,1.5227,46900.0,INLAND --119.77,36.74,20.0,1855.0,519.0,1091.0,443.0,1.5547,93900.0,INLAND --119.78,36.74,15.0,1461.0,415.0,924.0,356.0,2.5045,90300.0,INLAND --119.78,36.75,35.0,2114.0,506.0,2050.0,474.0,1.2375,50000.0,INLAND --119.78,36.75,31.0,1404.0,379.0,1515.0,387.0,1.2813,56400.0,INLAND --119.79,36.74,35.0,853.0,296.0,1228.0,289.0,1.0513,39600.0,INLAND --119.79,36.74,52.0,173.0,87.0,401.0,84.0,2.1094,75000.0,INLAND --119.8,36.74,25.0,1717.0,542.0,1343.0,471.0,0.799,51800.0,INLAND --119.8,36.75,41.0,1659.0,466.0,1391.0,447.0,1.3527,61200.0,INLAND --119.79,36.75,33.0,3161.0,934.0,3530.0,846.0,1.123,46700.0,INLAND --119.82,36.74,52.0,610.0,128.0,406.0,122.0,1.8967,43800.0,INLAND --119.82,36.72,25.0,2581.0,528.0,1642.0,509.0,1.6435,52600.0,INLAND --119.82,36.72,17.0,1276.0,242.0,927.0,238.0,2.6176,54100.0,INLAND --119.83,36.73,21.0,1702.0,358.0,1347.0,316.0,2.4137,62100.0,INLAND --119.83,36.72,28.0,60.0,10.0,46.0,13.0,4.35,67500.0,INLAND --119.83,36.71,43.0,355.0,81.0,233.0,75.0,2.4167,73900.0,INLAND --119.79,36.72,19.0,1719.0,391.0,1369.0,368.0,1.25,53000.0,INLAND --119.8,36.71,29.0,1541.0,291.0,1007.0,313.0,2.0043,53500.0,INLAND --119.81,36.71,25.0,1026.0,221.0,789.0,183.0,1.5625,52800.0,INLAND --119.8,36.72,19.0,1334.0,336.0,1171.0,319.0,1.0481,48500.0,INLAND --119.8,36.72,15.0,1908.0,417.0,1383.0,375.0,1.0472,57800.0,INLAND --119.79,36.7,23.0,1731.0,363.0,1210.0,341.0,1.3922,49500.0,INLAND --119.8,36.7,28.0,1592.0,304.0,962.0,282.0,1.3304,51300.0,INLAND --119.81,36.7,52.0,314.0,57.0,178.0,66.0,1.2404,52500.0,INLAND --119.78,36.72,22.0,354.0,121.0,530.0,115.0,2.1458,34400.0,INLAND --119.79,36.72,41.0,1562.0,322.0,927.0,277.0,1.3047,44100.0,INLAND --119.78,36.71,35.0,1987.0,394.0,1233.0,383.0,1.3587,45300.0,INLAND --119.74,36.71,17.0,5872.0,1250.0,5034.0,1224.0,2.1905,61800.0,INLAND --119.76,36.71,29.0,1745.0,441.0,1530.0,391.0,1.5611,44400.0,INLAND --119.76,36.72,24.0,1240.0,265.0,1035.0,232.0,2.875,60600.0,INLAND --119.75,36.71,38.0,1481.0,,1543.0,372.0,1.4577,49800.0,INLAND --119.74,36.73,34.0,1254.0,272.0,1056.0,279.0,2.3269,50800.0,INLAND --119.74,36.72,25.0,3972.0,842.0,2863.0,729.0,2.1304,58500.0,INLAND --119.75,36.72,22.0,3247.0,859.0,4179.0,881.0,1.3343,60800.0,INLAND --119.76,36.73,46.0,1347.0,282.0,854.0,267.0,1.8723,52600.0,INLAND --119.76,36.73,39.0,1553.0,363.0,1449.0,341.0,1.4419,45500.0,INLAND --119.75,36.73,39.0,2290.0,539.0,1685.0,536.0,1.6325,52100.0,INLAND --119.74,36.73,42.0,1236.0,272.0,946.0,261.0,2.0536,50000.0,INLAND --119.69,36.75,6.0,1926.0,303.0,965.0,316.0,4.7463,93100.0,INLAND --119.67,36.74,19.0,2788.0,614.0,1365.0,525.0,2.7813,120300.0,INLAND --119.69,36.74,17.0,2438.0,598.0,1563.0,538.0,1.5449,62500.0,INLAND --119.69,36.75,13.0,2343.0,409.0,1347.0,405.0,4.0027,93100.0,INLAND --119.67,36.73,27.0,2845.0,417.0,1219.0,460.0,4.9196,117900.0,INLAND --119.69,36.73,30.0,2437.0,349.0,1005.0,380.0,7.2211,171700.0,INLAND --119.69,36.74,23.0,2097.0,385.0,911.0,405.0,3.5128,121600.0,INLAND --119.69,36.71,25.0,556.0,79.0,249.0,71.0,4.4583,108300.0,INLAND --119.67,36.72,31.0,843.0,140.0,453.0,149.0,2.6875,153800.0,INLAND --119.73,36.73,7.0,2461.0,647.0,1587.0,551.0,1.4007,225000.0,INLAND --119.72,36.73,9.0,1914.0,491.0,1116.0,424.0,1.4646,65900.0,INLAND --119.72,36.72,15.0,1713.0,246.0,766.0,232.0,6.8162,127200.0,INLAND --119.73,36.72,26.0,2645.0,1005.0,1660.0,991.0,0.6991,89500.0,INLAND --119.73,36.73,9.0,1621.0,428.0,678.0,394.0,2.2437,54200.0,INLAND --119.71,36.73,19.0,3972.0,585.0,1586.0,560.0,5.2608,151400.0,INLAND --119.72,36.71,7.0,2456.0,463.0,1350.0,424.0,3.0179,91600.0,INLAND --119.73,36.72,15.0,2246.0,456.0,1190.0,403.0,2.0294,70400.0,INLAND --119.73,36.68,32.0,755.0,205.0,681.0,207.0,1.7986,49300.0,INLAND --119.69,36.69,36.0,1432.0,269.0,836.0,237.0,2.1563,88300.0,INLAND --119.76,36.68,29.0,1243.0,312.0,836.0,277.0,1.8355,74200.0,INLAND --119.67,36.65,20.0,2512.0,449.0,1464.0,450.0,3.9211,92300.0,INLAND --119.63,36.64,33.0,1036.0,181.0,620.0,174.0,3.4107,110400.0,INLAND --119.65,36.62,6.0,1931.0,422.0,1344.0,414.0,1.6607,58000.0,INLAND --119.68,36.63,39.0,1237.0,256.0,638.0,239.0,3.0139,65300.0,INLAND --119.74,36.65,19.0,2546.0,463.0,1257.0,418.0,2.9013,89500.0,INLAND --119.68,36.62,31.0,834.0,229.0,616.0,211.0,1.6602,61200.0,INLAND --119.73,36.62,35.0,2080.0,365.0,1026.0,333.0,3.5781,92800.0,INLAND --119.73,36.59,31.0,1551.0,296.0,1058.0,287.0,3.3438,92600.0,INLAND --119.8,36.68,31.0,2214.0,432.0,1326.0,416.0,2.1691,66700.0,INLAND --119.78,36.65,27.0,1226.0,240.0,706.0,211.0,2.77,68400.0,INLAND --119.82,36.64,30.0,1694.0,312.0,1008.0,321.0,2.2466,96000.0,INLAND --119.8,36.65,34.0,2263.0,423.0,1184.0,407.0,1.7692,74200.0,INLAND --119.89,36.73,43.0,524.0,93.0,302.0,93.0,2.6146,81300.0,INLAND --119.87,36.72,30.0,1584.0,316.0,984.0,300.0,2.0658,67900.0,INLAND --119.89,36.7,32.0,1485.0,269.0,867.0,271.0,2.5809,78300.0,INLAND --119.85,36.74,35.0,1191.0,190.0,537.0,182.0,3.5375,96700.0,INLAND --119.84,36.77,6.0,1853.0,473.0,1397.0,417.0,1.4817,72000.0,INLAND --119.83,36.76,15.0,3291.0,772.0,1738.0,634.0,1.976,67300.0,INLAND --119.82,36.75,41.0,1022.0,209.0,741.0,213.0,2.0781,48800.0,INLAND --119.84,36.75,34.0,1186.0,300.0,774.0,271.0,1.575,57100.0,INLAND --119.83,36.75,33.0,662.0,183.0,607.0,181.0,1.3929,55600.0,INLAND --119.81,36.76,48.0,2059.0,388.0,834.0,405.0,2.9306,67900.0,INLAND --119.81,36.76,51.0,2419.0,486.0,1284.0,426.0,2.2029,54200.0,INLAND --119.81,36.75,52.0,1827.0,356.0,855.0,353.0,1.7636,55100.0,INLAND --119.82,36.76,41.0,1973.0,399.0,1107.0,375.0,1.8971,66900.0,INLAND --119.82,36.76,46.0,2194.0,563.0,924.0,542.0,1.4028,68500.0,INLAND --119.8,36.76,52.0,1853.0,437.0,764.0,390.0,1.6429,69200.0,INLAND --119.8,36.75,52.0,1788.0,449.0,1156.0,418.0,1.7298,58400.0,INLAND --119.81,36.76,52.0,1792.0,352.0,1049.0,357.0,2.4375,57100.0,INLAND --119.8,36.76,52.0,2224.0,418.0,832.0,406.0,2.3952,78400.0,INLAND --119.79,36.76,52.0,1185.0,260.0,635.0,239.0,1.175,56100.0,INLAND --119.79,36.75,52.0,377.0,97.0,530.0,96.0,1.0,45000.0,INLAND --119.8,36.75,46.0,2625.0,593.0,1368.0,551.0,1.5273,59000.0,INLAND --119.79,36.76,52.0,2408.0,498.0,1361.0,465.0,2.1055,61300.0,INLAND --119.78,36.76,47.0,1425.0,323.0,949.0,325.0,1.7344,51300.0,INLAND --119.78,36.75,49.0,1175.0,307.0,982.0,278.0,1.2937,52000.0,INLAND --119.78,36.75,43.0,2070.0,512.0,1925.0,444.0,1.4635,46600.0,INLAND --119.78,36.76,50.0,1343.0,322.0,1063.0,342.0,1.75,49800.0,INLAND --119.76,36.76,23.0,3800.0,1003.0,3786.0,917.0,1.4766,50600.0,INLAND --119.76,36.75,35.0,1607.0,383.0,1407.0,382.0,2.19,53400.0,INLAND --119.76,36.75,41.0,1576.0,417.0,1567.0,366.0,1.2545,45500.0,INLAND --119.77,36.76,40.0,2009.0,519.0,2219.0,505.0,1.2101,49100.0,INLAND --119.77,36.76,43.0,1623.0,294.0,781.0,272.0,1.869,56000.0,INLAND --119.77,36.76,43.0,1945.0,413.0,1492.0,422.0,1.5174,54600.0,INLAND --119.76,36.75,35.0,2347.0,526.0,1676.0,481.0,1.6548,49400.0,INLAND --119.76,36.74,52.0,2137.0,448.0,1194.0,444.0,1.3029,69100.0,INLAND --119.77,36.74,50.0,1325.0,280.0,811.0,281.0,1.8667,62800.0,INLAND --119.77,36.74,51.0,1454.0,235.0,729.0,252.0,3.3125,70100.0,INLAND --119.77,36.75,44.0,1818.0,412.0,1680.0,418.0,1.7083,48300.0,INLAND --119.76,36.75,39.0,2233.0,563.0,2031.0,491.0,1.8641,50800.0,INLAND --119.74,36.75,47.0,2236.0,418.0,1042.0,397.0,2.9545,59600.0,INLAND --119.74,36.74,39.0,4893.0,1210.0,4749.0,1067.0,1.2065,55600.0,INLAND --119.75,36.74,39.0,1740.0,351.0,1098.0,347.0,1.8958,51300.0,INLAND --119.75,36.75,50.0,1515.0,294.0,852.0,297.0,1.9955,54200.0,INLAND --119.75,36.75,49.0,2331.0,460.0,1290.0,477.0,2.5111,55400.0,INLAND --119.74,36.76,42.0,2093.0,470.0,1621.0,438.0,1.7994,58700.0,INLAND --119.74,36.76,36.0,912.0,216.0,842.0,219.0,1.4766,52800.0,INLAND --119.75,36.76,29.0,2077.0,524.0,1887.0,489.0,1.4107,59800.0,INLAND --119.75,36.76,32.0,2072.0,497.0,2002.0,470.0,1.3278,44500.0,INLAND --119.72,36.76,23.0,6403.0,,3573.0,1260.0,2.3006,69000.0,INLAND --119.72,36.75,11.0,4832.0,993.0,2190.0,888.0,2.6611,74700.0,INLAND --119.73,36.76,30.0,1548.0,282.0,886.0,311.0,3.1,71300.0,INLAND --119.72,36.75,27.0,1691.0,282.0,869.0,337.0,3.9514,86900.0,INLAND --119.73,36.74,14.0,6202.0,1551.0,5561.0,1435.0,1.6073,64700.0,INLAND --119.73,36.75,39.0,1745.0,321.0,901.0,303.0,3.1719,67900.0,INLAND --119.7,36.75,11.0,3626.0,779.0,1819.0,731.0,2.4956,87500.0,INLAND --119.71,36.74,18.0,8099.0,1670.0,4476.0,1514.0,2.4728,88300.0,INLAND --119.71,36.76,28.0,2675.0,527.0,1392.0,521.0,2.3108,72000.0,INLAND --119.7,36.8,34.0,1768.0,303.0,888.0,314.0,3.8088,87700.0,INLAND --119.71,36.79,34.0,1891.0,323.0,966.0,355.0,3.6681,82000.0,INLAND --119.71,36.77,11.0,5112.0,1384.0,2487.0,1243.0,2.1461,75900.0,INLAND --119.73,36.8,15.0,2376.0,538.0,1197.0,510.0,3.1417,74600.0,INLAND --119.72,36.8,16.0,2396.0,526.0,1338.0,518.0,2.1653,78800.0,INLAND --119.72,36.8,15.0,3045.0,689.0,1340.0,588.0,3.1953,85700.0,INLAND --119.71,36.8,17.0,2056.0,366.0,1259.0,367.0,3.9338,84700.0,INLAND --119.71,36.8,17.0,1415.0,267.0,861.0,293.0,3.25,81400.0,INLAND --119.71,36.81,9.0,1122.0,290.0,662.0,284.0,2.0536,55000.0,INLAND --119.7,36.8,31.0,1746.0,321.0,1186.0,360.0,2.6932,66400.0,INLAND --119.71,36.8,25.0,875.0,156.0,646.0,166.0,3.0,72800.0,INLAND --119.72,36.8,23.0,2128.0,442.0,1047.0,450.0,2.625,71500.0,INLAND --119.73,36.8,24.0,1316.0,249.0,781.0,260.0,3.7578,69200.0,INLAND --119.72,36.81,15.0,2175.0,564.0,1194.0,482.0,2.6767,87500.0,INLAND --119.73,36.77,24.0,4410.0,939.0,2362.0,862.0,2.9406,73000.0,INLAND --119.74,36.77,30.0,2427.0,482.0,1375.0,518.0,2.5737,76900.0,INLAND --119.75,36.77,32.0,1962.0,399.0,1005.0,392.0,2.6726,70400.0,INLAND --119.75,36.78,35.0,1129.0,220.0,474.0,242.0,2.4405,74300.0,INLAND --119.75,36.78,33.0,1145.0,197.0,508.0,198.0,2.3333,81300.0,INLAND --119.74,36.78,27.0,4049.0,947.0,2254.0,882.0,2.2467,70700.0,INLAND --119.76,36.77,36.0,2507.0,466.0,1227.0,474.0,2.785,72300.0,INLAND --119.76,36.77,38.0,3804.0,814.0,2142.0,816.0,2.1439,60200.0,INLAND --119.77,36.77,38.0,3065.0,658.0,1441.0,625.0,2.0564,64700.0,INLAND --119.77,36.78,36.0,3616.0,779.0,1994.0,786.0,2.5434,67300.0,INLAND --119.77,36.78,40.0,1411.0,284.0,609.0,296.0,1.9375,67700.0,INLAND --119.77,36.77,29.0,2554.0,705.0,2669.0,655.0,1.2176,61900.0,INLAND --119.78,36.77,45.0,1315.0,256.0,666.0,240.0,2.3562,58100.0,INLAND --119.78,36.78,37.0,2185.0,455.0,1143.0,438.0,1.9784,70700.0,INLAND --119.79,36.77,30.0,1610.0,410.0,1000.0,397.0,2.0357,60200.0,INLAND --119.8,36.77,52.0,2964.0,512.0,1114.0,486.0,3.8105,87600.0,INLAND --119.8,36.78,50.0,1818.0,374.0,737.0,338.0,2.2614,73000.0,INLAND --119.79,36.78,41.0,2227.0,462.0,1129.0,415.0,2.319,59100.0,INLAND --119.79,36.77,43.0,2323.0,502.0,1144.0,471.0,2.3967,58700.0,INLAND --119.81,36.78,52.0,2281.0,371.0,839.0,367.0,3.5972,89900.0,INLAND --119.81,36.77,49.0,1749.0,314.0,705.0,300.0,3.15,72200.0,INLAND --119.81,36.77,48.0,1805.0,329.0,741.0,331.0,2.5804,78900.0,INLAND --119.81,36.77,43.0,2341.0,395.0,890.0,375.0,3.4265,85000.0,INLAND --119.81,36.78,37.0,1965.0,364.0,796.0,335.0,3.625,83400.0,INLAND --119.82,36.78,36.0,1370.0,289.0,812.0,282.0,2.6127,69600.0,INLAND --119.82,36.77,41.0,1441.0,274.0,646.0,296.0,3.0568,71300.0,INLAND --119.82,36.77,36.0,2252.0,468.0,1117.0,442.0,2.9081,65600.0,INLAND --119.83,36.77,32.0,2867.0,615.0,1705.0,570.0,2.4286,68100.0,INLAND --119.83,36.77,23.0,2168.0,503.0,1190.0,425.0,2.625,71600.0,INLAND --119.83,36.78,30.0,3162.0,640.0,1660.0,639.0,2.8359,80300.0,INLAND --119.87,36.79,8.0,2875.0,548.0,1718.0,551.0,3.6522,80200.0,INLAND --119.87,36.79,7.0,1932.0,419.0,1014.0,389.0,3.0938,76700.0,INLAND --119.89,36.79,5.0,3821.0,705.0,2179.0,694.0,3.7821,80400.0,INLAND --119.87,36.78,4.0,6102.0,1114.0,3406.0,1115.0,3.4213,84500.0,INLAND --119.85,36.78,8.0,3096.0,684.0,1454.0,545.0,2.7857,79700.0,INLAND --119.86,36.78,7.0,2232.0,490.0,1274.0,499.0,2.9853,74700.0,INLAND --119.85,36.77,9.0,1142.0,314.0,620.0,283.0,2.0446,81300.0,INLAND --119.85,36.77,27.0,1510.0,344.0,847.0,295.0,2.9315,83200.0,INLAND --119.85,36.76,10.0,2067.0,450.0,845.0,354.0,1.8214,80100.0,INLAND --119.85,36.75,24.0,1143.0,245.0,608.0,240.0,2.8194,81100.0,INLAND --119.87,36.76,34.0,1649.0,323.0,919.0,316.0,2.875,74500.0,INLAND --119.9,36.79,22.0,1970.0,332.0,1066.0,319.0,3.3125,106100.0,INLAND --119.89,36.76,17.0,1987.0,335.0,1152.0,313.0,4.1719,126400.0,INLAND --119.92,36.77,18.0,1422.0,243.0,702.0,230.0,3.6204,119800.0,INLAND --120.08,36.79,38.0,1446.0,285.0,928.0,255.0,2.9808,89600.0,INLAND --120.21,36.77,20.0,1745.0,348.0,1093.0,302.0,2.3194,90600.0,INLAND --120.1,36.66,19.0,2020.0,416.0,1341.0,360.0,1.7,69000.0,INLAND --119.98,36.74,26.0,1453.0,251.0,896.0,260.0,3.4861,112500.0,INLAND --120.0,36.7,33.0,1902.0,370.0,1168.0,358.0,2.6852,70800.0,INLAND --120.04,36.74,14.0,3182.0,730.0,2298.0,721.0,1.6168,71800.0,INLAND --120.05,36.72,24.0,1961.0,422.0,1559.0,374.0,1.8299,57800.0,INLAND --120.08,36.72,22.0,1339.0,251.0,820.0,276.0,3.6,83200.0,INLAND --120.06,36.72,32.0,981.0,237.0,736.0,249.0,1.8,60400.0,INLAND --120.07,36.74,19.0,2627.0,502.0,1295.0,441.0,3.087,88200.0,INLAND --119.95,36.8,30.0,1233.0,214.0,620.0,199.0,3.4297,112500.0,INLAND --119.99,36.8,45.0,1270.0,242.0,598.0,214.0,3.2813,105400.0,INLAND --120.02,36.8,25.0,1270.0,255.0,1050.0,245.0,2.1618,55300.0,INLAND --120.04,36.79,48.0,1341.0,239.0,671.0,208.0,2.7917,82800.0,INLAND --119.91,36.83,29.0,2205.0,366.0,1072.0,345.0,3.8056,165400.0,INLAND --119.88,36.81,30.0,2288.0,474.0,1435.0,425.0,1.3221,61200.0,INLAND --119.88,36.85,8.0,2580.0,372.0,1111.0,393.0,7.5,256200.0,INLAND --119.87,36.83,4.0,4833.0,784.0,2088.0,789.0,5.1781,122500.0,INLAND --119.85,36.83,15.0,2563.0,335.0,1080.0,356.0,6.7181,160300.0,INLAND --119.85,36.83,11.0,2497.0,427.0,1101.0,405.0,4.8036,141600.0,INLAND --119.86,36.82,12.0,1488.0,253.0,675.0,223.0,4.7622,89300.0,INLAND --119.85,36.82,9.0,3995.0,778.0,1691.0,712.0,3.3239,91300.0,INLAND --119.85,36.82,15.0,1387.0,236.0,638.0,195.0,5.5842,88900.0,INLAND --119.85,36.82,16.0,1852.0,274.0,887.0,286.0,5.5405,119300.0,INLAND --119.88,36.83,2.0,4055.0,735.0,1730.0,654.0,4.2132,96500.0,INLAND --119.86,36.81,4.0,4530.0,1070.0,1804.0,837.0,3.3942,72100.0,INLAND --119.87,36.81,6.0,1891.0,341.0,969.0,330.0,4.6726,107800.0,INLAND --119.85,36.81,15.0,1743.0,310.0,1011.0,325.0,3.755,68000.0,INLAND --119.85,36.8,14.0,1876.0,324.0,1031.0,311.0,3.6563,88800.0,INLAND --119.85,36.8,14.0,4177.0,914.0,2300.0,867.0,2.9565,73000.0,INLAND --119.86,36.8,18.0,2536.0,516.0,1196.0,466.0,2.5595,67900.0,INLAND --119.84,36.85,8.0,3791.0,487.0,1424.0,475.0,10.5144,345900.0,INLAND --119.85,36.84,12.0,2272.0,304.0,840.0,305.0,8.9669,213900.0,INLAND --119.84,36.84,12.0,2396.0,290.0,863.0,258.0,8.7716,229200.0,INLAND --119.84,36.83,17.0,2273.0,298.0,700.0,263.0,6.8645,195900.0,INLAND --119.83,36.83,14.0,2351.0,341.0,1128.0,363.0,6.9903,141200.0,INLAND --119.82,36.83,14.0,2982.0,412.0,1408.0,423.0,5.3241,123000.0,INLAND --119.84,36.83,17.0,3012.0,408.0,987.0,362.0,7.4201,229700.0,INLAND --119.82,36.83,16.0,2868.0,376.0,1016.0,379.0,6.1175,144700.0,INLAND --119.84,36.82,17.0,2807.0,376.0,996.0,353.0,5.5357,167700.0,INLAND --119.83,36.82,14.0,1087.0,165.0,365.0,176.0,7.2909,155600.0,INLAND --119.82,36.82,28.0,2268.0,336.0,752.0,330.0,5.2809,151500.0,INLAND --119.82,36.81,25.0,3305.0,551.0,1149.0,500.0,5.0698,150900.0,INLAND --119.84,36.81,18.0,2789.0,378.0,937.0,364.0,7.7062,188300.0,INLAND --119.78,36.86,10.0,2902.0,363.0,1200.0,363.0,8.3608,187300.0,INLAND --119.77,36.86,7.0,4139.0,544.0,1843.0,562.0,8.2737,193500.0,INLAND --119.77,36.85,8.0,1519.0,234.0,711.0,248.0,5.9897,123600.0,INLAND --119.77,36.84,15.0,1924.0,262.0,848.0,277.0,5.3886,125300.0,INLAND --119.77,36.84,15.0,2058.0,412.0,891.0,378.0,3.2569,124400.0,INLAND --119.78,36.84,7.0,4907.0,1075.0,2014.0,909.0,3.2147,111900.0,INLAND --119.78,36.85,12.0,782.0,166.0,292.0,164.0,2.8274,79500.0,INLAND --119.78,36.86,8.0,3468.0,675.0,1604.0,626.0,4.2071,128300.0,INLAND --119.79,36.85,11.0,2596.0,619.0,1765.0,539.0,1.9511,54000.0,INLAND --119.79,36.84,22.0,1529.0,375.0,1543.0,395.0,1.7926,51700.0,INLAND --119.8,36.86,7.0,6434.0,1201.0,2733.0,1045.0,3.7656,145000.0,INLAND --119.81,36.85,17.0,2340.0,370.0,1174.0,396.0,4.2304,94400.0,INLAND --119.82,36.84,7.0,2289.0,342.0,1077.0,354.0,5.4868,158800.0,INLAND --119.82,36.84,9.0,2340.0,544.0,860.0,520.0,3.3229,119300.0,INLAND --119.81,36.83,19.0,6789.0,1200.0,2325.0,1109.0,4.049,126000.0,INLAND --119.81,36.83,10.0,5780.0,922.0,2712.0,883.0,5.6445,135500.0,INLAND --119.78,36.83,11.0,2754.0,663.0,1328.0,604.0,2.3667,69300.0,INLAND --119.79,36.82,25.0,2330.0,462.0,1215.0,467.0,3.2143,93000.0,INLAND --119.8,36.83,17.0,1560.0,261.0,709.0,258.0,4.3315,95800.0,INLAND --119.79,36.83,15.0,3356.0,694.0,1232.0,627.0,2.2215,72200.0,INLAND --119.79,36.82,23.0,4358.0,819.0,1852.0,802.0,3.4167,105200.0,INLAND --119.78,36.82,22.0,4241.0,1147.0,1929.0,971.0,1.7708,53500.0,INLAND --119.8,36.82,24.0,5377.0,1005.0,2010.0,982.0,3.4542,121200.0,INLAND --119.81,36.81,33.0,3972.0,594.0,1324.0,561.0,5.4513,143300.0,INLAND --119.8,36.8,43.0,1951.0,288.0,725.0,308.0,6.3359,169300.0,INLAND --119.81,36.8,38.0,2252.0,325.0,777.0,314.0,6.1575,160100.0,INLAND --119.83,36.8,24.0,3756.0,681.0,1586.0,739.0,3.8571,90100.0,INLAND --119.82,36.8,33.0,1670.0,256.0,528.0,250.0,2.9471,99500.0,INLAND --119.81,36.8,29.0,2806.0,552.0,1242.0,540.0,3.5958,88800.0,INLAND --119.83,36.8,16.0,6101.0,1200.0,3407.0,1134.0,3.125,80800.0,INLAND --119.84,36.8,16.0,2849.0,506.0,1508.0,478.0,3.4074,72700.0,INLAND --119.84,36.8,19.0,3244.0,776.0,1463.0,710.0,2.0469,66900.0,INLAND --119.83,36.79,35.0,1872.0,363.0,1054.0,369.0,3.3272,65600.0,INLAND --119.83,36.78,35.0,1789.0,357.0,933.0,357.0,2.5223,66200.0,INLAND --119.84,36.78,24.0,3242.0,795.0,2764.0,773.0,1.3385,58800.0,INLAND --119.84,36.79,21.0,3235.0,648.0,1820.0,614.0,3.3447,71400.0,INLAND --119.83,36.79,24.0,3505.0,819.0,2098.0,774.0,1.9575,67000.0,INLAND --119.81,36.78,35.0,1012.0,245.0,633.0,240.0,2.0324,55500.0,INLAND --119.81,36.78,36.0,1650.0,313.0,660.0,298.0,3.0,79700.0,INLAND --119.82,36.78,36.0,1582.0,313.0,761.0,318.0,2.6055,69200.0,INLAND --119.82,36.79,35.0,1474.0,291.0,709.0,294.0,2.6522,65900.0,INLAND --119.82,36.79,18.0,5822.0,1439.0,3415.0,1224.0,1.6854,64700.0,INLAND --119.81,36.79,35.0,2314.0,443.0,954.0,457.0,2.9506,73800.0,INLAND --119.79,36.79,33.0,3433.0,785.0,1806.0,783.0,1.9386,67500.0,INLAND --119.79,36.78,38.0,1912.0,456.0,1131.0,408.0,2.03,58800.0,INLAND --119.8,36.78,43.0,2382.0,431.0,874.0,380.0,3.5542,96500.0,INLAND --119.81,36.79,39.0,2471.0,460.0,1118.0,431.0,2.4167,71900.0,INLAND --119.8,36.79,45.0,1337.0,187.0,471.0,187.0,5.187,153800.0,INLAND --119.79,36.81,35.0,1877.0,328.0,1155.0,353.0,3.069,69600.0,INLAND --119.78,36.8,34.0,2200.0,493.0,1243.0,431.0,1.8514,66500.0,INLAND --119.79,36.8,27.0,2462.0,484.0,852.0,449.0,3.32,124700.0,INLAND --119.79,36.81,33.0,1461.0,261.0,494.0,254.0,4.25,132200.0,INLAND --119.77,36.79,34.0,2679.0,460.0,1141.0,470.0,3.2642,89600.0,INLAND --119.78,36.78,31.0,2164.0,456.0,959.0,463.0,2.3293,73400.0,INLAND --119.79,36.79,26.0,1700.0,423.0,909.0,386.0,2.256,64500.0,INLAND --119.79,36.79,19.0,1524.0,448.0,960.0,386.0,1.5122,47500.0,INLAND --119.78,36.79,33.0,2260.0,440.0,966.0,413.0,2.9301,68300.0,INLAND --119.76,36.79,26.0,3654.0,837.0,1976.0,830.0,2.1544,72800.0,INLAND --119.76,36.78,30.0,6117.0,1330.0,2768.0,1224.0,2.1383,78800.0,INLAND --119.77,36.79,27.0,2258.0,427.0,1076.0,423.0,2.9937,81100.0,INLAND --119.76,36.79,32.0,2463.0,468.0,1261.0,486.0,3.3281,75100.0,INLAND --119.74,36.79,28.0,2857.0,619.0,1614.0,592.0,2.1573,71400.0,INLAND --119.75,36.78,28.0,3257.0,752.0,1981.0,712.0,2.293,71700.0,INLAND --119.76,36.8,29.0,3494.0,662.0,1781.0,616.0,2.5893,70900.0,INLAND --119.77,36.8,32.0,3461.0,665.0,1507.0,649.0,2.9244,84600.0,INLAND --119.78,36.8,34.0,3426.0,623.0,1938.0,647.0,2.8994,66000.0,INLAND --119.76,36.8,20.0,6257.0,1346.0,2795.0,1267.0,2.2094,83700.0,INLAND --119.77,36.8,24.0,3748.0,770.0,1827.0,719.0,2.7222,83100.0,INLAND --119.74,36.8,18.0,10862.0,2401.0,5466.0,2209.0,2.4678,74300.0,INLAND --119.75,36.8,25.0,2718.0,504.0,1257.0,465.0,2.3333,90600.0,INLAND --119.75,36.8,30.0,3308.0,662.0,1894.0,648.0,2.197,74500.0,INLAND --119.76,36.81,19.0,4643.0,1429.0,4638.0,1335.0,1.2716,69400.0,INLAND --119.77,36.81,25.0,1565.0,271.0,661.0,275.0,3.4279,84700.0,INLAND --119.76,36.82,17.0,6932.0,1486.0,3056.0,1453.0,2.3375,99300.0,INLAND --119.77,36.81,28.0,1713.0,302.0,663.0,282.0,3.567,85500.0,INLAND --119.78,36.82,25.0,5016.0,,2133.0,928.0,3.625,89500.0,INLAND --119.78,36.83,18.0,4164.0,741.0,1817.0,681.0,4.2153,95200.0,INLAND --119.76,36.83,22.0,2803.0,438.0,1234.0,457.0,4.5179,99600.0,INLAND --119.76,36.83,20.0,3214.0,446.0,1360.0,463.0,5.2595,110900.0,INLAND --119.77,36.83,19.0,3237.0,507.0,1378.0,510.0,4.7804,101100.0,INLAND --119.77,36.83,16.0,2360.0,355.0,1034.0,359.0,5.0635,108500.0,INLAND --119.76,36.83,17.0,3690.0,628.0,1888.0,601.0,4.0196,84200.0,INLAND --119.75,36.83,15.0,2793.0,436.0,1411.0,441.0,4.9292,109400.0,INLAND --119.74,36.83,14.0,4675.0,829.0,2235.0,787.0,4.1098,108200.0,INLAND --119.77,36.91,3.0,7520.0,1143.0,2878.0,1077.0,5.3272,174200.0,INLAND --119.75,36.87,3.0,13802.0,2244.0,5226.0,1972.0,5.0941,143700.0,INLAND --119.74,36.85,3.0,10425.0,2121.0,4432.0,1778.0,3.9032,140800.0,INLAND --119.7,36.94,15.0,1449.0,277.0,649.0,265.0,2.4861,86300.0,INLAND --119.71,36.88,17.0,2236.0,315.0,992.0,312.0,6.9405,165200.0,INLAND --119.69,36.86,20.0,1676.0,263.0,786.0,240.0,4.0,164600.0,INLAND --119.69,36.85,20.0,2655.0,432.0,1081.0,379.0,4.5398,143100.0,INLAND --119.67,36.89,15.0,2373.0,364.0,1280.0,386.0,5.308,167500.0,INLAND --119.7,36.83,23.0,3532.0,756.0,1885.0,758.0,2.5904,71400.0,INLAND --119.7,36.82,25.0,2379.0,540.0,1482.0,484.0,2.3173,68200.0,INLAND --119.7,36.81,32.0,2623.0,528.0,1570.0,492.0,2.7159,68000.0,INLAND --119.71,36.83,5.0,1087.0,338.0,623.0,362.0,1.8061,113400.0,INLAND --119.71,36.83,15.0,2727.0,500.0,1228.0,436.0,3.5078,109000.0,INLAND --119.73,36.83,8.0,3602.0,,1959.0,580.0,5.3478,138800.0,INLAND --119.73,36.83,14.0,3348.0,491.0,1584.0,493.0,5.0828,111400.0,INLAND --119.71,36.82,12.0,2144.0,568.0,1320.0,566.0,2.3381,112500.0,INLAND --119.71,36.81,19.0,2282.0,550.0,1034.0,500.0,1.6618,69700.0,INLAND --119.71,36.81,19.0,1648.0,368.0,557.0,354.0,1.7969,72800.0,INLAND --119.72,36.81,28.0,1651.0,305.0,780.0,309.0,2.9453,72200.0,INLAND --119.73,36.81,19.0,1699.0,356.0,994.0,368.0,2.7778,79700.0,INLAND --119.72,36.82,16.0,2627.0,613.0,1054.0,623.0,1.9483,112500.0,INLAND --119.72,36.82,15.0,946.0,239.0,550.0,246.0,2.2639,52500.0,INLAND --119.69,36.83,7.0,2075.0,353.0,1040.0,362.0,3.9943,100200.0,INLAND --119.69,36.83,8.0,943.0,189.0,475.0,155.0,4.9327,89500.0,INLAND --119.69,36.83,32.0,1098.0,,726.0,224.0,1.4913,54600.0,INLAND --119.69,36.83,28.0,1868.0,350.0,898.0,329.0,3.1814,78900.0,INLAND --119.67,36.83,3.0,2029.0,336.0,1003.0,340.0,4.4356,111300.0,INLAND --119.67,36.83,4.0,2145.0,334.0,1024.0,308.0,5.0864,113700.0,INLAND --119.68,36.83,11.0,2455.0,344.0,1110.0,339.0,6.1133,120000.0,INLAND --119.67,36.82,2.0,2579.0,376.0,1133.0,342.0,4.5577,123300.0,INLAND --119.67,36.81,4.0,1262.0,216.0,622.0,199.0,4.9432,114400.0,INLAND --119.68,36.81,13.0,2589.0,413.0,1356.0,435.0,5.0253,106200.0,INLAND --119.69,36.82,17.0,1897.0,433.0,1207.0,384.0,1.8021,55900.0,INLAND --119.69,36.82,15.0,3303.0,512.0,1687.0,505.0,4.81,93600.0,INLAND --119.68,36.81,16.0,2668.0,454.0,1536.0,457.0,3.9792,88900.0,INLAND --119.69,36.81,13.0,1524.0,366.0,994.0,370.0,2.5446,93800.0,INLAND --119.69,36.81,15.0,2892.0,496.0,1634.0,501.0,4.4934,88000.0,INLAND --119.68,36.8,7.0,2855.0,518.0,1748.0,498.0,4.2066,88400.0,INLAND --119.69,36.8,31.0,2576.0,458.0,1306.0,418.0,3.2813,68700.0,INLAND --119.67,36.8,9.0,3712.0,508.0,1632.0,474.0,6.011,163100.0,INLAND --119.69,36.79,13.0,1736.0,313.0,993.0,314.0,3.7697,83600.0,INLAND --119.68,36.79,16.0,1551.0,,1010.0,292.0,3.5417,71300.0,INLAND --119.69,36.79,15.0,2524.0,451.0,1207.0,424.0,2.7404,76300.0,INLAND --119.69,36.77,22.0,2456.0,496.0,1720.0,417.0,2.6875,60600.0,INLAND --119.69,36.79,5.0,2613.0,476.0,1490.0,481.0,4.0993,83000.0,INLAND --119.68,36.77,21.0,1260.0,182.0,583.0,205.0,6.0132,150800.0,INLAND --119.64,36.85,15.0,2397.0,353.0,1258.0,347.0,4.9904,157300.0,INLAND --119.64,36.82,14.0,4872.0,656.0,2085.0,617.0,5.6739,173800.0,INLAND --119.63,36.79,19.0,1317.0,189.0,517.0,187.0,4.526,148700.0,INLAND --119.63,36.76,22.0,4126.0,614.0,1795.0,613.0,4.925,154700.0,INLAND --119.63,36.7,42.0,1338.0,215.0,617.0,222.0,3.0833,133300.0,INLAND --119.53,36.78,20.0,2822.0,479.0,1372.0,455.0,4.5625,136900.0,INLAND --119.58,36.83,13.0,6135.0,863.0,2473.0,774.0,5.4895,156700.0,INLAND --119.58,36.77,19.0,3225.0,548.0,1760.0,542.0,4.0227,126500.0,INLAND --119.59,36.72,18.0,1284.0,193.0,621.0,190.0,4.5375,130600.0,INLAND --119.5,36.74,20.0,1089.0,208.0,531.0,212.0,4.5938,106900.0,INLAND --119.57,36.72,11.0,2510.0,460.0,1248.0,445.0,3.6161,99500.0,INLAND --119.56,36.71,29.0,1963.0,392.0,1208.0,398.0,2.5741,73000.0,INLAND --119.56,36.71,37.0,1609.0,374.0,1173.0,344.0,2.181,59900.0,INLAND --119.57,36.71,10.0,1657.0,359.0,958.0,380.0,2.6458,84800.0,INLAND --119.57,36.7,34.0,1759.0,354.0,899.0,337.0,2.6823,72900.0,INLAND --119.56,36.7,40.0,1195.0,326.0,1135.0,315.0,2.1182,58900.0,INLAND --119.55,36.7,31.0,1671.0,372.0,1371.0,347.0,2.3687,63900.0,INLAND --119.57,36.7,30.0,2370.0,412.0,1248.0,410.0,3.1442,72300.0,INLAND --119.57,36.7,7.0,1761.0,309.0,974.0,308.0,3.7261,83900.0,INLAND --119.58,36.69,42.0,1032.0,215.0,812.0,225.0,1.9766,58100.0,INLAND --119.55,36.69,21.0,1551.0,423.0,1519.0,406.0,1.7132,55900.0,INLAND --119.54,36.7,20.0,1815.0,375.0,1665.0,357.0,2.2448,58900.0,INLAND --119.55,36.71,32.0,1963.0,508.0,2052.0,518.0,1.9076,55800.0,INLAND --119.55,36.72,6.0,1186.0,234.0,1135.0,218.0,2.1515,63900.0,INLAND --119.52,36.71,21.0,1834.0,321.0,1120.0,314.0,2.59,69300.0,INLAND --119.47,36.69,19.0,3351.0,589.0,1578.0,542.0,3.2917,160100.0,INLAND --119.41,36.68,18.0,1802.0,332.0,945.0,292.0,3.4044,115300.0,INLAND --119.43,36.63,25.0,1784.0,312.0,904.0,303.0,3.625,107600.0,INLAND --119.39,36.64,38.0,949.0,190.0,578.0,187.0,2.3618,80000.0,INLAND --119.4,36.59,37.0,1486.0,296.0,977.0,290.0,3.5074,93800.0,INLAND --119.49,37.1,24.0,2532.0,555.0,1564.0,507.0,2.3359,92400.0,INLAND --119.61,36.94,14.0,863.0,151.0,315.0,135.0,4.2679,151800.0,INLAND --119.57,37.02,16.0,4199.0,794.0,2140.0,722.0,3.332,111800.0,INLAND --119.48,37.0,16.0,2904.0,551.0,1467.0,509.0,3.1736,111800.0,INLAND --119.46,36.91,12.0,2980.0,495.0,1184.0,429.0,3.9141,123900.0,INLAND --119.33,36.89,15.0,1879.0,411.0,755.0,294.0,2.0,83300.0,INLAND --119.21,37.25,44.0,3042.0,697.0,335.0,115.0,4.1838,85600.0,INLAND --118.94,37.13,12.0,2255.0,472.0,1006.0,334.0,4.1563,94000.0,INLAND --119.4,37.09,22.0,2211.0,477.0,773.0,288.0,3.3269,102700.0,INLAND --119.34,37.12,23.0,1881.0,380.0,64.0,37.0,3.875,125000.0,INLAND --119.28,37.11,34.0,1901.0,394.0,171.0,73.0,3.0729,144600.0,INLAND --119.32,37.06,15.0,3111.0,651.0,276.0,107.0,5.1314,179200.0,INLAND --118.91,36.79,19.0,1616.0,324.0,187.0,80.0,3.7857,78600.0,INLAND --119.24,36.8,17.0,2052.0,405.0,975.0,340.0,2.6902,94400.0,INLAND --119.25,36.71,13.0,2813.0,579.0,1385.0,512.0,2.2202,100000.0,INLAND --119.12,36.69,13.0,3963.0,812.0,1905.0,671.0,2.2278,90500.0,INLAND --119.34,36.62,26.0,1922.0,339.0,1148.0,332.0,2.6058,92200.0,INLAND --119.31,36.63,26.0,1874.0,416.0,1834.0,432.0,1.6486,55200.0,INLAND --119.31,36.62,33.0,1485.0,374.0,1544.0,329.0,1.7292,52000.0,INLAND --119.32,36.62,15.0,1070.0,256.0,1070.0,243.0,1.5642,51500.0,INLAND --119.31,36.62,25.0,831.0,230.0,947.0,244.0,1.4481,51700.0,INLAND --119.43,36.61,19.0,1484.0,296.0,1296.0,298.0,2.4219,65800.0,INLAND --119.44,36.6,5.0,2353.0,608.0,2505.0,573.0,2.2863,69200.0,INLAND --119.44,36.6,34.0,864.0,184.0,579.0,171.0,2.0417,72500.0,INLAND --119.45,36.6,42.0,510.0,88.0,247.0,99.0,2.5,73000.0,INLAND --119.46,36.61,13.0,1348.0,258.0,719.0,246.0,3.625,108300.0,INLAND --119.45,36.61,24.0,1302.0,,693.0,243.0,3.7917,90500.0,INLAND --119.44,36.61,17.0,1531.0,280.0,775.0,246.0,3.9073,91600.0,INLAND --119.43,36.59,15.0,1371.0,306.0,1266.0,309.0,1.767,63300.0,INLAND --119.44,36.59,32.0,1153.0,236.0,761.0,241.0,2.825,67600.0,INLAND --119.45,36.6,36.0,2294.0,489.0,1430.0,454.0,1.8975,60900.0,INLAND --119.44,36.59,28.0,1343.0,330.0,1331.0,305.0,1.516,56700.0,INLAND --119.46,36.6,18.0,1404.0,226.0,754.0,229.0,3.9844,118100.0,INLAND --119.45,36.59,41.0,1749.0,342.0,1171.0,314.0,1.6875,66100.0,INLAND --119.44,36.58,37.0,1054.0,,879.0,257.0,2.5234,63500.0,INLAND --119.45,36.58,18.0,1425.0,280.0,753.0,266.0,3.7813,87300.0,INLAND --119.45,36.59,28.0,1274.0,215.0,572.0,202.0,3.825,84200.0,INLAND --119.55,36.6,18.0,2379.0,448.0,1638.0,436.0,2.309,57100.0,INLAND --119.54,36.61,20.0,1490.0,318.0,1474.0,326.0,1.4937,54700.0,INLAND --119.55,36.61,14.0,3004.0,793.0,3535.0,735.0,1.586,56900.0,INLAND --119.5,36.62,34.0,1440.0,267.0,1018.0,265.0,2.2206,63400.0,INLAND --119.49,36.58,21.0,2106.0,410.0,867.0,380.0,1.9913,95300.0,INLAND --119.52,36.61,33.0,1225.0,275.0,1065.0,248.0,1.8958,55100.0,INLAND --119.53,36.61,33.0,587.0,170.0,730.0,162.0,1.5625,55800.0,INLAND --119.6,36.66,27.0,1388.0,296.0,1056.0,284.0,1.6094,55200.0,INLAND --119.59,36.64,27.0,823.0,171.0,798.0,200.0,3.0521,113800.0,INLAND --119.53,36.65,43.0,1676.0,320.0,1056.0,276.0,2.5562,93200.0,INLAND --119.63,36.6,33.0,1589.0,294.0,1102.0,307.0,1.9676,62400.0,INLAND --119.62,36.58,13.0,1788.0,405.0,1652.0,411.0,2.6858,62400.0,INLAND --119.59,36.57,19.0,1733.0,303.0,911.0,281.0,3.5987,131700.0,INLAND --119.6,36.58,28.0,1452.0,300.0,919.0,308.0,2.8287,73100.0,INLAND --119.61,36.58,29.0,1312.0,280.0,788.0,271.0,2.6974,73000.0,INLAND --119.62,36.59,17.0,2287.0,390.0,1330.0,393.0,4.0197,88000.0,INLAND --119.61,36.59,10.0,2842.0,620.0,1443.0,576.0,2.2727,92700.0,INLAND --119.6,36.57,42.0,2311.0,439.0,1347.0,436.0,2.5556,69700.0,INLAND --119.6,36.57,33.0,1923.0,403.0,1205.0,389.0,1.8333,68300.0,INLAND --119.61,36.57,42.0,2242.0,521.0,1359.0,483.0,1.5833,65100.0,INLAND --119.63,36.58,22.0,1794.0,435.0,1127.0,359.0,1.2647,55300.0,INLAND --119.6,36.56,36.0,738.0,168.0,737.0,186.0,1.4415,54400.0,INLAND --119.64,36.56,34.0,576.0,117.0,363.0,97.0,2.0658,92500.0,INLAND --119.61,36.56,34.0,1911.0,497.0,1886.0,481.0,1.625,53000.0,INLAND --119.62,36.56,30.0,1722.0,372.0,1467.0,403.0,1.8878,51600.0,INLAND --119.53,36.55,34.0,2065.0,343.0,1041.0,313.0,3.2917,111500.0,INLAND --119.54,36.52,16.0,2703.0,415.0,1106.0,372.0,4.2045,120900.0,INLAND --119.55,36.51,46.0,1889.0,390.0,971.0,403.0,2.2132,76600.0,INLAND --119.56,36.51,37.0,1018.0,213.0,663.0,204.0,1.6635,67000.0,INLAND --119.56,36.51,9.0,3860.0,809.0,2157.0,770.0,2.5033,70100.0,INLAND --119.55,36.52,31.0,1986.0,417.0,1042.0,422.0,3.0294,70200.0,INLAND --119.56,36.53,19.0,2746.0,495.0,1670.0,518.0,3.2019,95700.0,INLAND --119.73,36.56,32.0,1513.0,272.0,1038.0,272.0,3.0469,82700.0,INLAND --119.67,36.57,32.0,1604.0,292.0,868.0,276.0,2.1908,110000.0,INLAND --119.65,36.51,30.0,1671.0,319.0,966.0,282.0,3.1333,100000.0,INLAND --119.59,36.52,35.0,990.0,192.0,674.0,178.0,3.3214,101600.0,INLAND --119.73,36.52,20.0,1741.0,331.0,1466.0,289.0,2.5921,94200.0,INLAND --119.77,36.44,26.0,1727.0,289.0,802.0,259.0,3.2083,75000.0,INLAND --119.69,36.46,29.0,1702.0,301.0,914.0,280.0,2.8125,79200.0,INLAND --119.69,36.43,29.0,1799.0,356.0,1278.0,387.0,1.7813,57900.0,INLAND --119.87,36.54,34.0,1370.0,287.0,818.0,269.0,2.4044,72500.0,INLAND --119.79,36.55,32.0,1393.0,276.0,999.0,245.0,2.0216,76800.0,INLAND --119.81,36.51,31.0,1241.0,254.0,767.0,226.0,2.7321,83600.0,INLAND --119.84,36.54,19.0,1310.0,241.0,702.0,217.0,2.4375,78200.0,INLAND --119.83,36.54,31.0,1732.0,332.0,979.0,294.0,2.5208,60000.0,INLAND --119.89,36.64,34.0,1422.0,237.0,716.0,222.0,2.975,90000.0,INLAND --119.97,36.57,17.0,1497.0,308.0,1425.0,247.0,2.0313,69400.0,INLAND --119.9,36.58,20.0,1935.0,363.0,1319.0,359.0,2.4814,74600.0,INLAND --119.81,36.6,24.0,2246.0,462.0,1291.0,394.0,2.4006,76400.0,INLAND --119.86,36.45,19.0,2439.0,462.0,1416.0,469.0,2.4474,75600.0,INLAND --119.86,36.43,34.0,1175.0,251.0,683.0,261.0,1.7176,58400.0,INLAND --119.85,36.43,23.0,1824.0,354.0,1146.0,362.0,2.8913,60900.0,INLAND --119.97,36.44,18.0,1128.0,237.0,772.0,220.0,2.1771,39200.0,INLAND --120.08,36.34,18.0,1524.0,414.0,2030.0,356.0,2.1153,112500.0,INLAND --120.1,36.16,17.0,598.0,160.0,715.0,146.0,2.3295,55000.0,INLAND --120.1,36.21,12.0,1462.0,356.0,1708.0,367.0,1.5086,64700.0,INLAND --120.09,36.19,12.0,1923.0,559.0,2809.0,535.0,1.4191,55100.0,INLAND --120.27,36.29,11.0,1337.0,412.0,1376.0,318.0,2.4398,87500.0,INLAND --120.43,36.18,29.0,579.0,116.0,218.0,99.0,2.1458,104200.0,INLAND --120.37,36.16,36.0,613.0,124.0,310.0,124.0,3.0658,65000.0,INLAND --120.36,36.14,18.0,1206.0,274.0,622.0,217.0,1.8264,62000.0,INLAND --120.38,36.15,17.0,2279.0,448.0,1200.0,420.0,2.7461,70000.0,INLAND --120.37,36.13,10.0,2522.0,533.0,1335.0,493.0,3.2639,86400.0,INLAND --120.37,36.15,34.0,2084.0,339.0,868.0,347.0,4.381,86300.0,INLAND --120.35,36.16,18.0,1519.0,296.0,846.0,272.0,2.7792,85300.0,INLAND --120.35,36.14,9.0,2671.0,647.0,1484.0,541.0,1.7075,60400.0,INLAND --120.36,36.13,29.0,1938.0,434.0,1306.0,415.0,3.0134,55500.0,INLAND --120.31,36.65,24.0,943.0,209.0,514.0,156.0,2.25,76600.0,INLAND --120.25,36.65,31.0,1177.0,221.0,744.0,223.0,2.4937,66000.0,INLAND --120.18,36.59,25.0,948.0,198.0,613.0,171.0,2.3026,90600.0,INLAND --120.19,36.61,29.0,1479.0,338.0,1408.0,322.0,2.293,57200.0,INLAND --120.19,36.6,25.0,875.0,214.0,931.0,214.0,1.5536,58300.0,INLAND --120.22,36.49,14.0,1508.0,347.0,1679.0,345.0,2.4786,56000.0,INLAND --120.41,36.77,24.0,1335.0,312.0,1180.0,267.0,1.947,68900.0,INLAND --120.67,36.72,18.0,819.0,198.0,996.0,198.0,2.5,112500.0,INLAND --120.51,36.55,20.0,1193.0,263.0,1274.0,241.0,1.9417,38800.0,INLAND --120.39,36.78,11.0,1947.0,488.0,2104.0,486.0,1.7184,55200.0,INLAND --120.38,36.75,25.0,1689.0,495.0,1745.0,457.0,1.9056,60000.0,INLAND --120.38,36.76,25.0,991.0,272.0,941.0,262.0,1.8125,58000.0,INLAND --120.38,36.76,12.0,932.0,244.0,1043.0,243.0,1.4038,54300.0,INLAND --120.46,36.87,20.0,1287.0,310.0,954.0,269.0,1.3386,63000.0,INLAND --120.45,36.86,34.0,673.0,173.0,539.0,182.0,2.3523,66000.0,INLAND --120.44,36.84,29.0,1563.0,293.0,883.0,288.0,2.8182,90500.0,INLAND --120.45,36.85,20.0,1519.0,376.0,1681.0,370.0,2.1759,58100.0,INLAND --120.51,36.86,21.0,1779.0,399.0,1446.0,371.0,2.4414,71900.0,INLAND --120.55,36.97,42.0,1766.0,344.0,1084.0,323.0,2.3295,74400.0,INLAND --120.69,36.84,18.0,902.0,195.0,771.0,174.0,2.2083,55000.0,INLAND --119.55,36.51,46.0,55.0,11.0,26.0,5.0,4.125,67500.0,INLAND --119.54,36.51,36.0,49.0,7.0,28.0,2.0,4.625,162500.0,INLAND --122.2,39.75,18.0,2603.0,576.0,1616.0,588.0,2.0192,63700.0,INLAND --122.18,39.75,30.0,4157.0,834.0,1885.0,774.0,1.6948,67500.0,INLAND --122.16,39.74,20.0,707.0,126.0,337.0,125.0,3.0469,85000.0,INLAND --122.19,39.74,39.0,4179.0,814.0,2111.0,809.0,2.3507,65600.0,INLAND --122.25,39.79,16.0,2127.0,412.0,1104.0,369.0,3.0469,72200.0,INLAND --122.16,39.78,32.0,1288.0,221.0,562.0,203.0,2.325,69600.0,INLAND --122.13,39.74,20.0,1401.0,280.0,668.0,250.0,2.2569,94300.0,INLAND --122.18,39.7,23.0,1658.0,307.0,836.0,297.0,3.35,85400.0,INLAND --122.23,39.75,16.0,2026.0,396.0,1031.0,382.0,1.9375,73100.0,INLAND --122.74,39.71,16.0,255.0,73.0,85.0,38.0,1.6607,14999.0,INLAND --122.38,39.68,21.0,1155.0,210.0,510.0,175.0,2.3851,67500.0,INLAND --122.14,39.65,33.0,419.0,77.0,190.0,67.0,3.6429,87500.0,INLAND --122.18,39.55,28.0,1471.0,259.0,673.0,246.0,3.25,81600.0,INLAND --122.53,39.5,25.0,1231.0,240.0,658.0,211.0,2.4861,71900.0,INLAND --122.19,39.53,34.0,2679.0,533.0,1287.0,505.0,2.165,58700.0,INLAND --122.2,39.53,22.0,3265.0,658.0,1647.0,594.0,2.3566,71000.0,INLAND --122.23,39.53,8.0,1268.0,336.0,1237.0,326.0,1.3708,125000.0,INLAND --122.22,39.51,17.0,1201.0,268.0,555.0,277.0,2.1,66900.0,INLAND --122.2,39.52,39.0,2551.0,482.0,1181.0,437.0,2.0625,63400.0,INLAND --122.2,39.51,37.0,2358.0,413.0,1060.0,424.0,2.8333,69700.0,INLAND --122.19,39.5,23.0,462.0,97.0,261.0,90.0,2.1705,53000.0,INLAND --122.04,39.72,23.0,2502.0,481.0,1443.0,455.0,2.5625,70000.0,INLAND --122.05,39.6,34.0,2051.0,342.0,958.0,322.0,2.8466,95300.0,INLAND --122.1,39.47,43.0,1320.0,215.0,512.0,197.0,2.4917,77100.0,INLAND --121.94,39.45,39.0,844.0,161.0,535.0,165.0,1.832,70500.0,INLAND --122.01,39.74,20.0,2332.0,518.0,1856.0,495.0,2.1746,58700.0,INLAND --124.17,40.8,52.0,661.0,316.0,392.0,244.0,0.957,60000.0,NEAR OCEAN --124.16,40.8,52.0,2416.0,618.0,1150.0,571.0,1.7308,80500.0,NEAR OCEAN --124.16,40.79,52.0,1264.0,277.0,591.0,284.0,1.7778,76900.0,NEAR OCEAN --124.17,40.8,52.0,1606.0,419.0,891.0,367.0,1.585,75500.0,NEAR OCEAN --124.17,40.8,52.0,1557.0,344.0,758.0,319.0,1.8529,62500.0,NEAR OCEAN --124.16,40.79,52.0,2148.0,421.0,975.0,430.0,2.2566,92700.0,NEAR OCEAN --124.16,40.78,50.0,2285.0,403.0,837.0,353.0,2.5417,85400.0,NEAR OCEAN --124.17,40.78,39.0,1606.0,330.0,731.0,327.0,1.6369,68300.0,NEAR OCEAN --124.19,40.78,37.0,1371.0,319.0,640.0,260.0,1.8242,70000.0,NEAR OCEAN --124.18,40.79,39.0,1836.0,352.0,883.0,337.0,1.745,70500.0,NEAR OCEAN --124.18,40.79,40.0,1398.0,311.0,788.0,279.0,1.4668,64600.0,NEAR OCEAN --124.17,40.79,43.0,2285.0,479.0,1169.0,482.0,1.9688,70500.0,NEAR OCEAN --124.16,40.78,43.0,2241.0,446.0,932.0,395.0,2.9038,82000.0,NEAR OCEAN --124.16,40.77,35.0,2141.0,438.0,1053.0,434.0,2.8529,85600.0,NEAR OCEAN --124.17,40.77,30.0,1895.0,366.0,990.0,359.0,2.2227,81300.0,NEAR OCEAN --124.18,40.78,37.0,1453.0,293.0,867.0,310.0,2.5536,70200.0,NEAR OCEAN --124.18,40.78,33.0,1076.0,222.0,656.0,236.0,2.5096,72200.0,NEAR OCEAN --124.18,40.78,34.0,1592.0,364.0,950.0,317.0,2.1607,67000.0,NEAR OCEAN --124.17,40.75,13.0,2171.0,339.0,951.0,353.0,4.8516,116100.0,NEAR OCEAN --124.17,40.76,26.0,1776.0,361.0,992.0,380.0,2.8056,82800.0,NEAR OCEAN --124.19,40.77,30.0,2975.0,634.0,1367.0,583.0,2.442,69000.0,NEAR OCEAN --124.15,40.81,50.0,340.0,74.0,235.0,83.0,1.75,67500.0,NEAR OCEAN --124.14,40.8,32.0,1373.0,312.0,872.0,306.0,2.5,72600.0,NEAR OCEAN --124.15,40.8,47.0,1486.0,335.0,765.0,329.0,1.755,74100.0,NEAR OCEAN --124.16,40.8,52.0,2167.0,480.0,908.0,451.0,1.6111,74700.0,NEAR OCEAN --124.16,40.8,52.0,1703.0,500.0,952.0,435.0,1.1386,74100.0,NEAR OCEAN --124.14,40.79,38.0,1552.0,290.0,873.0,291.0,2.4896,81000.0,NEAR OCEAN --124.15,40.78,41.0,2127.0,358.0,911.0,349.0,3.1711,104200.0,NEAR OCEAN --124.16,40.78,46.0,1975.0,346.0,791.0,349.0,3.8,81800.0,NEAR OCEAN --124.16,40.79,46.0,3042.0,597.0,1206.0,541.0,2.1135,90600.0,NEAR OCEAN --124.15,40.79,37.0,2692.0,488.0,1263.0,486.0,3.0216,86400.0,NEAR OCEAN --124.14,40.78,35.0,2426.0,423.0,982.0,432.0,3.4219,92800.0,NEAR OCEAN --124.14,40.77,27.0,3046.0,605.0,1407.0,571.0,2.9143,99600.0,NEAR OCEAN --124.15,40.76,24.0,2858.0,511.0,1388.0,512.0,3.375,100600.0,NEAR OCEAN --124.15,40.78,36.0,2112.0,374.0,829.0,368.0,3.3984,90000.0,NEAR OCEAN --124.11,40.81,23.0,959.0,212.0,425.0,175.0,2.5536,96100.0,NEAR OCEAN --124.13,40.78,34.0,2142.0,420.0,1056.0,382.0,2.1101,86900.0,NEAR OCEAN --124.13,40.8,31.0,2152.0,462.0,1259.0,420.0,2.2478,81100.0,NEAR OCEAN --124.13,40.79,29.0,2474.0,453.0,1130.0,427.0,2.8833,83000.0,NEAR OCEAN --124.13,40.79,32.0,2017.0,359.0,855.0,346.0,3.5833,92800.0,NEAR OCEAN --124.06,40.86,34.0,4183.0,,1891.0,669.0,3.2216,98100.0,NEAR OCEAN --124.05,40.85,31.0,2414.0,428.0,1005.0,401.0,3.5156,143000.0,NEAR OCEAN --124.02,40.8,22.0,2588.0,435.0,1198.0,442.0,3.9792,133900.0,<1H OCEAN --124.08,40.86,18.0,1287.0,484.0,805.0,502.0,1.1157,150000.0,NEAR OCEAN --124.09,40.86,25.0,1322.0,387.0,794.0,379.0,1.1742,75000.0,NEAR OCEAN --124.09,40.87,44.0,692.0,206.0,398.0,211.0,1.1576,87500.0,NEAR OCEAN --124.07,40.87,47.0,1765.0,326.0,796.0,333.0,2.2138,99200.0,NEAR OCEAN --124.08,40.87,29.0,1710.0,469.0,990.0,425.0,1.1479,101100.0,NEAR OCEAN --124.09,40.88,50.0,921.0,187.0,420.0,187.0,2.2188,105800.0,NEAR OCEAN --124.07,40.87,31.0,334.0,134.0,780.0,130.0,0.7684,153100.0,NEAR OCEAN --124.15,40.88,33.0,2235.0,506.0,1165.0,441.0,1.725,57500.0,NEAR OCEAN --124.1,40.88,35.0,2987.0,578.0,1581.0,585.0,2.0657,81100.0,NEAR OCEAN --124.09,40.88,31.0,1982.0,495.0,1052.0,467.0,1.5326,74100.0,NEAR OCEAN --124.09,40.88,26.0,2683.0,555.0,1353.0,526.0,2.4321,82100.0,NEAR OCEAN --124.1,40.9,18.0,4032.0,798.0,1948.0,775.0,2.7321,92600.0,NEAR OCEAN --124.23,40.81,52.0,1112.0,209.0,544.0,172.0,3.3462,50800.0,NEAR OCEAN --124.06,40.88,12.0,2087.0,424.0,1603.0,438.0,2.5667,139500.0,NEAR OCEAN --123.74,40.66,25.0,2395.0,431.0,983.0,375.0,3.0469,136000.0,<1H OCEAN --124.08,40.91,13.0,2522.0,719.0,1381.0,628.0,1.6667,78800.0,NEAR OCEAN --123.76,41.03,24.0,2386.0,565.0,1058.0,414.0,2.0644,79800.0,<1H OCEAN --123.85,41.32,31.0,938.0,238.0,425.0,157.0,1.0486,36700.0,<1H OCEAN --123.72,41.09,19.0,1970.0,431.0,1166.0,363.0,1.8208,50000.0,<1H OCEAN --123.63,41.11,19.0,1797.0,384.0,1033.0,327.0,1.4911,59200.0,<1H OCEAN --123.66,41.3,22.0,1580.0,372.0,686.0,264.0,1.8065,62700.0,<1H OCEAN --123.52,41.01,17.0,1564.0,345.0,517.0,222.0,2.1542,83800.0,INLAND --124.08,41.36,29.0,1029.0,239.0,509.0,196.0,2.0156,62800.0,NEAR OCEAN --124.06,41.13,22.0,3263.0,799.0,1384.0,578.0,2.4708,119400.0,NEAR OCEAN --124.14,41.06,32.0,1020.0,215.0,421.0,198.0,3.0208,143400.0,NEAR OCEAN --124.1,41.04,26.0,1633.0,380.0,890.0,370.0,1.9741,97900.0,NEAR OCEAN --124.01,40.97,21.0,1513.0,319.0,943.0,301.0,3.538,102700.0,<1H OCEAN --124.0,40.92,29.0,1429.0,,672.0,266.0,2.9485,98800.0,<1H OCEAN --124.01,40.89,28.0,1470.0,336.0,811.0,314.0,2.4559,75600.0,<1H OCEAN --123.98,40.88,41.0,1719.0,372.0,844.0,336.0,2.6923,84200.0,<1H OCEAN --123.88,40.93,28.0,1272.0,259.0,519.0,220.0,3.2891,106300.0,<1H OCEAN --124.16,41.02,23.0,1672.0,385.0,1060.0,390.0,2.1726,75500.0,NEAR OCEAN --124.08,40.99,18.0,3297.0,662.0,1554.0,578.0,2.6847,111300.0,NEAR OCEAN --124.16,40.95,20.0,1075.0,214.0,529.0,196.0,3.1406,96000.0,NEAR OCEAN --124.11,40.95,19.0,1734.0,365.0,866.0,342.0,2.96,81700.0,NEAR OCEAN --124.09,40.95,18.0,2250.0,484.0,1248.0,472.0,2.5893,99600.0,NEAR OCEAN --124.11,40.93,25.0,2392.0,474.0,1298.0,461.0,3.5076,73600.0,NEAR OCEAN --124.11,40.93,17.0,1661.0,329.0,948.0,357.0,2.7639,90200.0,NEAR OCEAN --124.08,40.94,18.0,1550.0,345.0,941.0,335.0,2.3147,70100.0,NEAR OCEAN --124.09,40.92,12.0,2497.0,491.0,1153.0,462.0,2.8182,126900.0,NEAR OCEAN --124.05,40.94,14.0,1452.0,217.0,516.0,181.0,5.0329,165600.0,NEAR OCEAN --124.1,40.95,17.0,1485.0,345.0,823.0,316.0,1.8993,78400.0,NEAR OCEAN --124.07,40.81,23.0,2103.0,411.0,1019.0,387.0,2.9911,119700.0,NEAR OCEAN --124.02,40.72,28.0,3513.0,634.0,1658.0,598.0,3.8095,119900.0,<1H OCEAN --124.1,40.73,33.0,644.0,129.0,334.0,121.0,3.9659,111800.0,NEAR OCEAN --124.17,40.74,17.0,2026.0,338.0,873.0,313.0,4.0357,128900.0,NEAR OCEAN --124.14,40.72,18.0,2581.0,499.0,1375.0,503.0,2.8446,100500.0,NEAR OCEAN --124.14,40.67,23.0,580.0,117.0,320.0,109.0,4.2054,130600.0,NEAR OCEAN --124.19,40.73,21.0,5694.0,1056.0,2907.0,972.0,3.5363,90100.0,NEAR OCEAN --124.21,40.75,32.0,1218.0,331.0,620.0,268.0,1.6528,58100.0,NEAR OCEAN --124.27,40.69,36.0,2349.0,528.0,1194.0,465.0,2.5179,79000.0,NEAR OCEAN --124.18,40.62,35.0,952.0,178.0,480.0,179.0,3.0536,107000.0,NEAR OCEAN --124.17,40.62,32.0,1595.0,309.0,706.0,277.0,2.8958,86400.0,NEAR OCEAN --124.13,40.62,43.0,2131.0,399.0,910.0,389.0,2.5804,92100.0,NEAR OCEAN --124.16,40.6,39.0,1322.0,283.0,642.0,292.0,2.4519,85100.0,NEAR OCEAN --124.15,40.59,39.0,1186.0,238.0,539.0,212.0,2.0938,79600.0,NEAR OCEAN --124.14,40.6,27.0,1148.0,206.0,521.0,219.0,4.025,128100.0,NEAR OCEAN --124.14,40.59,22.0,1665.0,405.0,826.0,382.0,1.5625,66800.0,NEAR OCEAN --124.14,40.59,17.0,2985.0,610.0,1544.0,584.0,2.178,76800.0,NEAR OCEAN --124.05,40.59,32.0,1878.0,340.0,937.0,353.0,3.4408,95200.0,<1H OCEAN --124.09,40.55,24.0,2978.0,553.0,1370.0,480.0,2.7644,97300.0,<1H OCEAN --123.96,40.57,31.0,1854.0,365.0,883.0,310.0,2.3167,92600.0,<1H OCEAN --123.73,40.48,25.0,2015.0,524.0,746.0,251.0,1.7153,77100.0,INLAND --124.14,40.58,25.0,1899.0,357.0,891.0,355.0,2.6987,92500.0,<1H OCEAN --124.14,40.57,29.0,2864.0,600.0,1314.0,562.0,2.1354,75100.0,<1H OCEAN --124.11,40.57,33.0,1348.0,234.0,573.0,236.0,2.4896,74100.0,<1H OCEAN --124.13,40.55,38.0,544.0,,240.0,91.0,3.25,94800.0,<1H OCEAN --124.1,40.5,30.0,1927.0,393.0,996.0,374.0,2.2357,72300.0,<1H OCEAN --124.1,40.5,42.0,2380.0,553.0,1300.0,504.0,1.7574,57500.0,<1H OCEAN --124.09,40.44,38.0,2220.0,426.0,1041.0,401.0,2.3947,70500.0,<1H OCEAN --124.1,40.47,52.0,1196.0,236.0,965.0,265.0,3.5345,55000.0,<1H OCEAN --124.03,40.45,34.0,1006.0,213.0,443.0,158.0,2.6094,71300.0,<1H OCEAN --124.26,40.58,52.0,2217.0,394.0,907.0,369.0,2.3571,111400.0,NEAR OCEAN --124.23,40.54,52.0,2694.0,453.0,1152.0,435.0,3.0806,106700.0,NEAR OCEAN --124.35,40.54,52.0,1820.0,300.0,806.0,270.0,3.0147,94600.0,NEAR OCEAN --124.25,40.28,32.0,1430.0,419.0,434.0,187.0,1.9417,76100.0,NEAR OCEAN --124.08,40.06,17.0,1319.0,267.0,393.0,163.0,2.625,135600.0,NEAR OCEAN --124.0,40.22,16.0,2088.0,535.0,816.0,326.0,1.319,70700.0,<1H OCEAN --123.84,40.28,28.0,2809.0,605.0,1093.0,438.0,2.0962,74000.0,<1H OCEAN --123.68,40.24,31.0,1852.0,452.0,917.0,359.0,1.725,54300.0,<1H OCEAN --123.82,40.16,19.0,2283.0,634.0,1184.0,453.0,1.2227,76800.0,<1H OCEAN --123.82,40.12,33.0,2985.0,591.0,1221.0,486.0,2.087,82400.0,<1H OCEAN --123.75,40.11,35.0,2052.0,477.0,900.0,402.0,1.9625,101500.0,<1H OCEAN --123.78,40.05,17.0,2019.0,496.0,899.0,347.0,2.1864,101900.0,<1H OCEAN --115.52,33.12,38.0,1327.0,262.0,784.0,231.0,1.8793,60800.0,INLAND --115.52,33.13,18.0,1109.0,283.0,1006.0,253.0,2.163,53400.0,INLAND --115.51,33.12,21.0,1024.0,218.0,890.0,232.0,2.101,46700.0,INLAND --115.46,33.19,33.0,1234.0,373.0,777.0,298.0,1.0,40000.0,INLAND --115.51,33.24,32.0,1995.0,523.0,1069.0,410.0,1.6552,43300.0,INLAND --115.6,33.2,37.0,709.0,187.0,390.0,142.0,2.4511,72500.0,INLAND --115.73,33.09,27.0,452.0,103.0,258.0,61.0,2.9,87500.0,INLAND --115.62,33.04,17.0,1009.0,231.0,745.0,217.0,2.0463,61200.0,INLAND --115.62,33.04,20.0,1121.0,244.0,766.0,230.0,2.2969,62000.0,INLAND --115.6,33.04,31.0,314.0,61.0,152.0,56.0,3.3472,91700.0,INLAND --115.41,32.99,29.0,1141.0,220.0,684.0,194.0,3.4038,107800.0,INLAND --115.59,32.96,17.0,841.0,146.0,473.0,154.0,3.1979,113500.0,INLAND --115.52,32.98,32.0,1615.0,382.0,1307.0,345.0,1.4583,58600.0,INLAND --115.52,32.98,21.0,1302.0,327.0,1244.0,316.0,2.2054,66400.0,INLAND --115.53,32.99,25.0,2578.0,634.0,2082.0,565.0,1.7159,62200.0,INLAND --115.51,32.99,20.0,1402.0,287.0,1104.0,317.0,1.9088,63700.0,INLAND --115.54,32.99,23.0,1459.0,373.0,1148.0,388.0,1.5372,69400.0,INLAND --115.54,32.98,27.0,1513.0,395.0,1121.0,381.0,1.9464,60600.0,INLAND --115.54,32.99,17.0,1697.0,268.0,911.0,254.0,4.3523,96000.0,INLAND --115.55,32.98,24.0,2565.0,530.0,1447.0,473.0,3.2593,80800.0,INLAND --115.54,32.97,41.0,2429.0,454.0,1188.0,430.0,3.0091,70800.0,INLAND --115.53,32.97,35.0,1583.0,340.0,933.0,318.0,2.4063,70700.0,INLAND --115.55,32.98,33.0,2266.0,365.0,952.0,360.0,5.4349,143000.0,INLAND --115.56,32.96,21.0,2164.0,480.0,1164.0,421.0,3.8177,107200.0,INLAND --115.53,32.97,34.0,2231.0,545.0,1568.0,510.0,1.5217,60300.0,INLAND --115.52,32.97,24.0,1617.0,366.0,1416.0,401.0,1.975,66400.0,INLAND --115.52,32.97,10.0,1879.0,387.0,1376.0,337.0,1.9911,67500.0,INLAND --115.32,32.82,34.0,591.0,139.0,327.0,89.0,3.6528,100000.0,INLAND --115.39,32.76,16.0,1136.0,196.0,481.0,185.0,6.2558,146300.0,INLAND --115.4,32.86,19.0,1087.0,171.0,649.0,173.0,3.3182,113800.0,INLAND --115.37,32.81,23.0,1458.0,294.0,866.0,275.0,2.3594,74300.0,INLAND --115.37,32.82,14.0,1276.0,270.0,867.0,261.0,1.9375,80900.0,INLAND --115.37,32.82,30.0,1602.0,322.0,1130.0,335.0,3.5735,71100.0,INLAND --115.38,32.82,38.0,1892.0,394.0,1175.0,374.0,1.9939,65800.0,INLAND --115.38,32.81,35.0,1263.0,262.0,950.0,241.0,1.8958,67500.0,INLAND --115.37,32.81,32.0,741.0,191.0,623.0,169.0,1.7604,68600.0,INLAND --115.57,32.85,33.0,1365.0,269.0,825.0,250.0,3.2396,62300.0,INLAND --115.57,32.85,17.0,1039.0,256.0,728.0,246.0,1.7411,63500.0,INLAND --115.57,32.84,29.0,1207.0,301.0,804.0,288.0,1.9531,61100.0,INLAND --115.57,32.83,31.0,1494.0,289.0,959.0,284.0,3.5282,67500.0,INLAND --115.59,32.85,20.0,1608.0,274.0,862.0,248.0,4.875,90800.0,INLAND --115.6,32.87,3.0,1629.0,317.0,1005.0,312.0,4.1293,83200.0,INLAND --115.49,32.87,19.0,541.0,104.0,457.0,106.0,3.3583,102800.0,INLAND --115.64,32.8,23.0,1228.0,235.0,569.0,235.0,3.1667,125000.0,INLAND --115.69,32.79,18.0,1564.0,340.0,1161.0,343.0,2.1792,55200.0,INLAND --115.73,32.8,44.0,472.0,81.0,206.0,57.0,2.2083,93800.0,INLAND --115.72,32.75,16.0,348.0,99.0,123.0,54.0,2.0938,87500.0,INLAND --115.64,32.75,19.0,377.0,69.0,198.0,55.0,1.625,112500.0,INLAND --115.58,32.81,5.0,805.0,143.0,458.0,143.0,4.475,96300.0,INLAND --115.55,32.82,34.0,1540.0,316.0,1013.0,274.0,2.5664,67500.0,INLAND --115.58,32.81,10.0,1088.0,203.0,533.0,201.0,3.6597,87500.0,INLAND --115.57,32.8,17.0,1492.0,426.0,1595.0,428.0,1.7188,69900.0,INLAND --115.57,32.8,16.0,1307.0,359.0,961.0,327.0,1.1853,72600.0,INLAND --115.57,32.8,16.0,2276.0,594.0,1184.0,513.0,1.875,93800.0,INLAND --115.48,32.8,21.0,1260.0,246.0,805.0,239.0,2.6172,88500.0,INLAND --115.52,32.77,18.0,1715.0,337.0,1166.0,333.0,2.2417,79200.0,INLAND --115.53,32.73,14.0,1527.0,325.0,1453.0,332.0,1.735,61200.0,INLAND --115.52,32.73,17.0,1190.0,275.0,1113.0,258.0,2.3571,63100.0,INLAND --115.5,32.75,13.0,330.0,72.0,822.0,64.0,3.4107,142500.0,INLAND --115.55,32.8,23.0,666.0,142.0,580.0,160.0,2.1136,61000.0,INLAND --115.55,32.79,22.0,565.0,162.0,692.0,141.0,1.2083,53600.0,INLAND --115.54,32.79,30.0,752.0,194.0,733.0,186.0,1.6607,56100.0,INLAND --115.54,32.79,23.0,1712.0,403.0,1370.0,377.0,1.275,60400.0,INLAND --115.55,32.79,23.0,1004.0,221.0,697.0,201.0,1.6351,59600.0,INLAND --115.57,32.8,33.0,1192.0,213.0,1066.0,211.0,4.5714,68600.0,INLAND --115.56,32.8,25.0,1311.0,375.0,1193.0,351.0,2.1979,63900.0,INLAND --115.56,32.8,28.0,1672.0,416.0,1335.0,397.0,1.5987,59400.0,INLAND --115.56,32.8,15.0,1171.0,328.0,1024.0,298.0,1.3882,69400.0,INLAND --115.56,32.79,18.0,1178.0,438.0,1377.0,429.0,1.3373,58300.0,INLAND --115.56,32.78,34.0,2856.0,555.0,1627.0,522.0,3.2083,76200.0,INLAND --115.56,32.79,20.0,2372.0,835.0,2283.0,767.0,1.1707,62500.0,INLAND --115.57,32.79,50.0,1291.0,277.0,864.0,274.0,1.6667,68100.0,INLAND --115.56,32.78,46.0,2511.0,490.0,1583.0,469.0,3.0603,70800.0,INLAND --115.56,32.78,35.0,1185.0,202.0,615.0,191.0,4.6154,86200.0,INLAND --115.57,32.78,25.0,2007.0,301.0,1135.0,332.0,5.128,99600.0,INLAND --115.56,32.78,29.0,1568.0,283.0,848.0,245.0,3.1597,76200.0,INLAND --115.55,32.78,5.0,2652.0,606.0,1767.0,536.0,2.8025,84300.0,INLAND --115.58,32.78,5.0,2494.0,414.0,1416.0,421.0,5.7843,110100.0,INLAND --115.59,32.79,8.0,2183.0,307.0,1000.0,287.0,6.3814,159900.0,INLAND --115.58,32.79,14.0,1687.0,507.0,762.0,451.0,1.6635,64400.0,INLAND --115.57,32.79,34.0,1152.0,208.0,621.0,208.0,3.6042,73600.0,INLAND --115.57,32.78,29.0,2321.0,367.0,1173.0,360.0,4.0375,86400.0,INLAND --115.57,32.78,20.0,1534.0,235.0,871.0,222.0,6.2715,97200.0,INLAND --115.57,32.78,15.0,1413.0,279.0,803.0,277.0,4.3021,87500.0,INLAND --115.56,32.76,15.0,1278.0,217.0,653.0,185.0,4.4821,140300.0,INLAND --115.59,32.69,30.0,935.0,177.0,649.0,148.0,2.5769,94400.0,INLAND --115.49,32.69,17.0,1960.0,389.0,1691.0,356.0,1.899,64000.0,INLAND --115.4,32.7,19.0,583.0,113.0,531.0,134.0,1.6838,95800.0,INLAND --115.49,32.67,25.0,2322.0,573.0,2185.0,602.0,1.375,70100.0,INLAND --115.49,32.67,24.0,1266.0,275.0,1083.0,298.0,1.4828,73100.0,INLAND --115.48,32.68,15.0,3414.0,666.0,2097.0,622.0,2.3319,91200.0,INLAND --115.5,32.68,18.0,3631.0,913.0,3565.0,924.0,1.5931,88400.0,INLAND --115.5,32.67,35.0,2159.0,492.0,1694.0,475.0,2.1776,75500.0,INLAND --115.49,32.67,29.0,1523.0,440.0,1302.0,393.0,1.1311,84700.0,INLAND --115.51,32.68,11.0,2872.0,610.0,2644.0,581.0,2.625,72700.0,INLAND --115.52,32.67,6.0,2804.0,581.0,2807.0,594.0,2.0625,67700.0,INLAND --116.05,33.33,17.0,290.0,94.0,135.0,57.0,1.7292,81300.0,INLAND --116.0,33.19,16.0,245.0,57.0,81.0,33.0,1.2639,51300.0,INLAND --115.88,32.93,15.0,208.0,49.0,51.0,20.0,4.0208,32500.0,INLAND --116.0,32.74,26.0,1134.0,280.0,329.0,158.0,1.4338,43900.0,INLAND --115.9,32.69,18.0,414.0,86.0,98.0,54.0,1.5417,57500.0,INLAND --116.01,33.41,20.0,1996.0,515.0,659.0,295.0,2.8684,62800.0,INLAND --115.99,33.4,15.0,1945.0,536.0,515.0,273.0,2.0109,54300.0,INLAND --115.94,33.38,5.0,186.0,43.0,41.0,21.0,2.7,58800.0,INLAND --115.98,33.32,8.0,240.0,46.0,63.0,24.0,1.4688,53800.0,INLAND --115.91,33.36,15.0,459.0,95.0,160.0,73.0,0.922,67500.0,INLAND --115.9,33.34,19.0,1210.0,248.0,329.0,155.0,1.7857,62800.0,INLAND --115.96,33.3,27.0,322.0,81.0,112.0,57.0,1.125,54400.0,INLAND --115.95,33.28,12.0,99.0,25.0,37.0,17.0,1.8958,53800.0,INLAND --115.8,33.26,2.0,96.0,18.0,30.0,16.0,5.3374,47500.0,INLAND --114.73,33.43,24.0,796.0,243.0,227.0,139.0,0.8964,59200.0,INLAND --114.98,33.07,18.0,1183.0,363.0,374.0,127.0,3.1607,57500.0,INLAND --115.73,33.36,19.0,749.0,238.0,476.0,169.0,1.7727,50000.0,INLAND --115.73,33.35,23.0,1586.0,448.0,338.0,182.0,1.2132,30000.0,INLAND --114.65,32.79,21.0,44.0,33.0,64.0,27.0,0.8571,25000.0,INLAND --114.55,32.8,19.0,2570.0,820.0,1431.0,608.0,1.275,56100.0,INLAND --114.63,32.76,15.0,1448.0,378.0,949.0,300.0,0.8585,45000.0,INLAND --114.66,32.74,17.0,1388.0,386.0,775.0,320.0,1.2049,44000.0,INLAND --118.18,37.35,16.0,3806.0,794.0,1501.0,714.0,2.1212,108300.0,INLAND --118.43,37.4,19.0,2460.0,405.0,1225.0,425.0,4.1576,141500.0,INLAND --118.6,37.39,19.0,2682.0,518.0,1134.0,399.0,3.2132,166000.0,INLAND --118.45,37.25,20.0,1468.0,283.0,721.0,270.0,3.0817,118800.0,INLAND --118.45,37.37,26.0,3135.0,524.0,1385.0,523.0,4.337,139700.0,INLAND --118.42,37.35,21.0,3302.0,557.0,1413.0,520.0,4.375,180400.0,INLAND --118.42,37.36,18.0,2281.0,520.0,1425.0,465.0,1.7388,54400.0,INLAND --118.4,37.36,34.0,2465.0,619.0,1172.0,575.0,1.9722,116100.0,INLAND --118.39,37.37,25.0,3295.0,824.0,1477.0,770.0,1.8325,105800.0,INLAND --118.39,37.36,38.0,1813.0,410.0,902.0,396.0,2.3261,98400.0,INLAND --118.3,37.17,22.0,3480.0,673.0,1541.0,636.0,2.75,94500.0,INLAND --117.9,36.95,19.0,99.0,26.0,51.0,22.0,1.7292,137500.0,INLAND --118.31,36.94,35.0,2563.0,530.0,861.0,371.0,2.325,80600.0,INLAND --118.05,36.64,34.0,2090.0,478.0,896.0,426.0,2.0357,74200.0,INLAND --118.18,36.63,23.0,2311.0,487.0,1019.0,384.0,2.2574,104700.0,INLAND --117.69,36.13,25.0,1709.0,439.0,632.0,292.0,1.7868,45500.0,INLAND --117.02,36.4,19.0,619.0,239.0,490.0,164.0,2.1,14999.0,INLAND --116.22,36.0,14.0,1372.0,386.0,436.0,213.0,1.1471,32900.0,INLAND --119.02,35.42,42.0,2271.0,458.0,1124.0,447.0,2.7583,64900.0,INLAND --119.03,35.42,45.0,1628.0,352.0,754.0,334.0,2.5703,62400.0,INLAND --119.03,35.42,38.0,2952.0,598.0,1491.0,568.0,2.6094,67900.0,INLAND --119.03,35.45,14.0,3520.0,604.0,1748.0,582.0,4.3162,87100.0,INLAND --119.05,35.44,5.0,2133.0,487.0,1182.0,438.0,3.0268,77000.0,INLAND --119.02,35.44,29.0,3415.0,631.0,1527.0,597.0,4.0125,84400.0,INLAND --119.02,35.43,39.0,2033.0,370.0,956.0,379.0,3.1736,70700.0,INLAND --119.02,35.42,40.0,1089.0,226.0,520.0,218.0,2.2727,67200.0,INLAND --119.02,35.42,36.0,2044.0,447.0,1021.0,374.0,1.8472,57400.0,INLAND --119.02,35.42,40.0,1912.0,439.0,1015.0,413.0,1.4598,52600.0,INLAND --119.03,35.42,42.0,1705.0,418.0,905.0,393.0,1.6286,54600.0,INLAND --119.03,35.41,41.0,1808.0,435.0,1005.0,373.0,1.7857,54300.0,INLAND --119.04,35.42,47.0,1691.0,402.0,913.0,358.0,1.8403,54700.0,INLAND --119.05,35.42,41.0,1992.0,421.0,1006.0,419.0,2.8393,57000.0,INLAND --119.05,35.42,35.0,2353.0,483.0,1368.0,455.0,2.325,63200.0,INLAND --119.02,35.41,21.0,2534.0,554.0,1297.0,517.0,2.0575,67000.0,INLAND --119.02,35.41,41.0,2221.0,516.0,1106.0,473.0,1.97,51900.0,INLAND --119.03,35.41,37.0,1761.0,443.0,911.0,365.0,2.0331,53200.0,INLAND --119.04,35.41,25.0,1577.0,310.0,844.0,309.0,3.0625,69400.0,INLAND --119.02,35.41,31.0,2348.0,701.0,1413.0,611.0,1.3222,51400.0,INLAND --119.03,35.4,35.0,2608.0,620.0,1566.0,583.0,2.1818,63500.0,INLAND --119.04,35.41,20.0,3268.0,833.0,1622.0,758.0,1.3587,67500.0,INLAND --119.08,35.42,10.0,4159.0,608.0,2089.0,591.0,5.5261,132000.0,INLAND --119.07,35.42,19.0,3889.0,832.0,1872.0,731.0,2.6812,107600.0,INLAND --119.09,35.41,12.0,3449.0,522.0,1754.0,551.0,5.6235,130600.0,INLAND --119.11,35.42,52.0,154.0,,37.0,16.0,10.0263,200000.0,INLAND --119.09,35.43,28.0,254.0,35.0,118.0,37.0,4.8571,237500.0,INLAND --119.05,35.4,18.0,1894.0,319.0,846.0,317.0,3.8611,126400.0,INLAND --119.08,35.39,10.0,6435.0,1040.0,3242.0,1030.0,5.575,132200.0,INLAND --119.01,35.4,11.0,8739.0,2190.0,4781.0,1919.0,1.7109,44600.0,INLAND --119.01,35.39,29.0,1820.0,459.0,1134.0,419.0,1.8289,59400.0,INLAND --119.01,35.38,36.0,790.0,224.0,426.0,208.0,1.4427,50600.0,INLAND --119.02,35.39,30.0,227.0,75.0,169.0,101.0,1.3527,60000.0,INLAND --118.99,35.4,43.0,2225.0,392.0,890.0,374.0,4.0208,90400.0,INLAND --118.99,35.4,48.0,1908.0,331.0,789.0,321.0,3.5714,84600.0,INLAND --119.0,35.4,44.0,2250.0,378.0,928.0,379.0,4.3906,93900.0,INLAND --119.0,35.39,42.0,2839.0,516.0,1203.0,487.0,3.7708,79400.0,INLAND --119.0,35.39,51.0,1373.0,284.0,648.0,300.0,2.8295,72100.0,INLAND --118.97,35.41,36.0,1896.0,315.0,937.0,303.0,3.996,85500.0,INLAND --118.97,35.4,34.0,1859.0,323.0,854.0,309.0,3.1906,76200.0,INLAND --118.98,35.4,34.0,813.0,171.0,440.0,170.0,2.8393,69800.0,INLAND --118.98,35.4,36.0,1443.0,273.0,680.0,259.0,2.9821,73100.0,INLAND --118.98,35.4,36.0,1864.0,331.0,1052.0,325.0,3.4205,76600.0,INLAND --118.98,35.41,36.0,1482.0,266.0,640.0,274.0,3.875,94500.0,INLAND --118.96,35.4,28.0,4667.0,875.0,2404.0,841.0,3.2325,89000.0,INLAND --118.96,35.41,29.0,3548.0,729.0,1542.0,659.0,2.947,87100.0,INLAND --118.95,35.4,23.0,4483.0,894.0,2136.0,883.0,3.6875,101700.0,INLAND --118.96,35.4,27.0,2473.0,400.0,1271.0,427.0,3.5524,89100.0,INLAND --118.96,35.39,23.0,5624.0,1148.0,2842.0,1042.0,3.1297,79000.0,INLAND --118.96,35.38,34.0,2047.0,347.0,888.0,352.0,3.6734,92900.0,INLAND --118.95,35.38,35.0,2220.0,388.0,906.0,373.0,3.5938,95200.0,INLAND --118.96,35.38,41.0,2417.0,435.0,973.0,406.0,3.0568,85600.0,INLAND --118.94,35.38,26.0,4800.0,831.0,2365.0,743.0,3.7533,87000.0,INLAND --118.95,35.38,30.0,2594.0,478.0,1419.0,480.0,3.725,83100.0,INLAND --118.92,35.38,33.0,3122.0,579.0,1733.0,545.0,3.8307,70600.0,INLAND --118.95,35.41,21.0,3999.0,727.0,1889.0,688.0,3.875,99500.0,INLAND --118.94,35.4,14.0,5548.0,941.0,2815.0,935.0,4.2214,104600.0,INLAND --118.94,35.39,27.0,3074.0,452.0,1223.0,452.0,5.4592,139100.0,INLAND --118.94,35.39,13.0,3137.0,417.0,1318.0,397.0,7.7751,194100.0,INLAND --118.9,35.41,6.0,4656.0,971.0,2320.0,935.0,3.0938,100800.0,INLAND --118.94,35.41,10.0,3216.0,526.0,1539.0,483.0,6.3639,143000.0,INLAND --118.91,35.4,10.0,3587.0,774.0,1398.0,763.0,2.569,113000.0,INLAND --118.87,35.37,14.0,2458.0,433.0,1352.0,411.0,3.5441,87000.0,INLAND --118.91,35.37,32.0,4121.0,755.0,2590.0,721.0,3.3462,67600.0,INLAND --118.88,35.34,20.0,1351.0,255.0,762.0,253.0,2.1111,105300.0,INLAND --118.92,35.37,17.0,3589.0,701.0,1746.0,640.0,2.4919,75700.0,INLAND --118.93,35.37,34.0,2412.0,446.0,1558.0,421.0,2.6903,62800.0,INLAND --118.94,35.37,33.0,3372.0,741.0,2352.0,704.0,2.0643,57600.0,INLAND --118.94,35.37,23.0,1106.0,252.0,790.0,230.0,1.8523,59700.0,INLAND --118.95,35.37,34.0,1672.0,359.0,1059.0,349.0,2.1588,61300.0,INLAND --118.94,35.37,37.0,1667.0,362.0,971.0,335.0,2.875,57400.0,INLAND --118.95,35.37,37.0,1475.0,327.0,946.0,295.0,1.6728,55400.0,INLAND --118.96,35.37,41.0,1463.0,339.0,1066.0,318.0,1.7467,52400.0,INLAND --118.96,35.37,40.0,1603.0,374.0,1026.0,337.0,1.365,54300.0,INLAND --118.97,35.39,38.0,2121.0,433.0,1547.0,441.0,2.774,59500.0,INLAND --118.97,35.38,32.0,1361.0,363.0,1483.0,297.0,1.625,46800.0,INLAND --118.98,35.38,39.0,1497.0,383.0,1182.0,355.0,1.0648,50000.0,INLAND --118.97,35.38,42.0,1185.0,358.0,1038.0,299.0,0.9951,48000.0,INLAND --118.97,35.37,41.0,2396.0,602.0,1781.0,543.0,1.8819,58000.0,INLAND --118.97,35.38,35.0,1673.0,426.0,1041.0,413.0,1.375,57500.0,INLAND --118.99,35.38,26.0,1317.0,374.0,1025.0,304.0,1.4024,51000.0,INLAND --118.99,35.38,30.0,1390.0,361.0,1116.0,298.0,1.3451,57500.0,INLAND --118.98,35.39,22.0,1812.0,457.0,1592.0,420.0,1.4146,49100.0,INLAND --118.98,35.38,24.0,1807.0,465.0,1460.0,410.0,1.4786,54800.0,INLAND --118.98,35.38,34.0,1020.0,247.0,795.0,228.0,1.625,50800.0,INLAND --118.98,35.38,28.0,1171.0,299.0,1193.0,273.0,0.8639,49400.0,INLAND --118.99,35.39,39.0,2228.0,542.0,1516.0,435.0,1.6009,48800.0,INLAND --118.99,35.39,36.0,1438.0,348.0,1054.0,341.0,1.8319,55400.0,INLAND --118.99,35.39,52.0,2805.0,573.0,1325.0,522.0,2.5083,70100.0,INLAND --118.98,35.39,29.0,607.0,177.0,476.0,143.0,1.1875,50700.0,INLAND --118.98,35.39,32.0,2620.0,682.0,2375.0,684.0,1.2618,46900.0,INLAND --119.0,35.37,41.0,303.0,78.0,216.0,80.0,2.2212,55500.0,INLAND --118.99,35.37,36.0,832.0,198.0,814.0,174.0,1.4773,57400.0,INLAND --118.99,35.37,38.0,918.0,220.0,743.0,222.0,1.7292,58100.0,INLAND --118.98,35.37,35.0,825.0,179.0,670.0,181.0,1.1638,57900.0,INLAND --118.97,35.37,52.0,425.0,119.0,380.0,97.0,1.4125,42500.0,INLAND --119.01,35.38,44.0,434.0,110.0,274.0,86.0,1.1944,57500.0,INLAND --119.01,35.38,52.0,114.0,26.0,158.0,26.0,1.075,67500.0,INLAND --119.01,35.37,35.0,120.0,35.0,477.0,41.0,1.9125,47500.0,INLAND --119.01,35.37,44.0,593.0,136.0,364.0,121.0,1.4779,66000.0,INLAND --119.02,35.38,52.0,90.0,35.0,36.0,31.0,0.8054,60000.0,INLAND --119.02,35.38,48.0,346.0,92.0,129.0,63.0,1.1875,63800.0,INLAND --119.02,35.39,52.0,191.0,52.0,106.0,49.0,2.0455,72500.0,INLAND --119.01,35.37,45.0,629.0,143.0,568.0,139.0,1.7321,84400.0,INLAND --119.03,35.38,38.0,2122.0,394.0,843.0,410.0,3.0,91800.0,INLAND --119.03,35.38,52.0,1695.0,290.0,540.0,260.0,2.7312,147100.0,INLAND --119.03,35.37,52.0,1503.0,367.0,554.0,277.0,1.6786,126600.0,INLAND --119.04,35.37,44.0,1618.0,310.0,667.0,300.0,2.875,82700.0,INLAND --119.03,35.39,28.0,4513.0,764.0,1593.0,763.0,2.9821,118700.0,INLAND --119.04,35.36,36.0,1942.0,414.0,1051.0,411.0,1.8362,66900.0,INLAND --119.05,35.36,30.0,4635.0,800.0,2307.0,754.0,3.6548,84700.0,INLAND --119.05,35.36,16.0,4507.0,1049.0,2261.0,959.0,3.3261,118400.0,INLAND --119.07,35.36,19.0,5254.0,894.0,2155.0,831.0,4.6705,110700.0,INLAND --119.08,35.36,12.0,6442.0,1116.0,2966.0,1092.0,4.5791,123400.0,INLAND --119.06,35.36,9.0,1228.0,234.0,409.0,212.0,4.3482,95200.0,INLAND --119.03,35.37,42.0,2508.0,483.0,1035.0,442.0,2.6513,72300.0,INLAND --119.03,35.36,41.0,1944.0,363.0,977.0,388.0,3.9097,81300.0,INLAND --119.04,35.36,40.0,1533.0,312.0,771.0,306.0,3.0435,69500.0,INLAND --119.04,35.37,46.0,1637.0,338.0,714.0,297.0,2.1818,75300.0,INLAND --119.02,35.37,44.0,2687.0,620.0,1521.0,549.0,1.7213,61600.0,INLAND --119.02,35.36,48.0,1833.0,396.0,947.0,363.0,2.2827,70000.0,INLAND --119.02,35.36,47.0,1631.0,340.0,847.0,315.0,2.5062,73700.0,INLAND --119.03,35.36,41.0,2551.0,594.0,1342.0,595.0,1.9671,76800.0,INLAND --119.01,35.37,38.0,1702.0,380.0,1191.0,366.0,1.8801,57800.0,INLAND --119.01,35.36,38.0,1838.0,388.0,1203.0,373.0,1.6797,60700.0,INLAND --119.01,35.36,36.0,2658.0,626.0,1490.0,529.0,1.2157,57000.0,INLAND --119.01,35.36,24.0,1941.0,484.0,1277.0,435.0,1.056,51600.0,INLAND --119.01,35.37,33.0,821.0,181.0,579.0,172.0,1.2469,46700.0,INLAND --119.0,35.36,40.0,850.0,227.0,764.0,186.0,0.9407,43600.0,INLAND --119.0,35.36,39.0,896.0,217.0,805.0,197.0,1.25,42500.0,INLAND --119.0,35.35,35.0,1164.0,277.0,992.0,284.0,1.4015,48700.0,INLAND --119.0,35.36,35.0,1021.0,280.0,1258.0,239.0,1.7375,48600.0,INLAND --118.98,35.37,36.0,1562.0,398.0,1223.0,329.0,0.9675,47100.0,INLAND --118.98,35.36,29.0,1244.0,266.0,933.0,227.0,1.6981,49400.0,INLAND --118.98,35.36,15.0,1482.0,338.0,1059.0,279.0,1.2617,42700.0,INLAND --118.99,35.36,18.0,1524.0,354.0,1210.0,344.0,1.1136,47800.0,INLAND --118.99,35.36,31.0,1498.0,359.0,1168.0,340.0,1.2232,49300.0,INLAND --118.94,35.36,19.0,2714.0,512.0,1823.0,500.0,3.1281,76200.0,INLAND --118.95,35.36,30.0,2294.0,508.0,1753.0,482.0,2.1078,54700.0,INLAND --118.96,35.37,32.0,1025.0,259.0,874.0,236.0,1.9612,53400.0,INLAND --118.96,35.36,35.0,2285.0,497.0,1738.0,480.0,2.4848,54000.0,INLAND --118.97,35.37,34.0,1379.0,333.0,1156.0,315.0,1.7197,48900.0,INLAND --118.97,35.36,31.0,1418.0,306.0,1219.0,312.0,1.5743,46700.0,INLAND --118.95,35.32,29.0,3480.0,608.0,2007.0,541.0,3.2738,78700.0,INLAND --118.98,35.35,21.0,496.0,131.0,511.0,124.0,1.7614,33200.0,INLAND --118.99,35.35,27.0,1615.0,355.0,1380.0,332.0,1.6632,49800.0,INLAND --118.99,35.33,36.0,1590.0,367.0,1311.0,390.0,1.6786,52900.0,INLAND --118.99,35.32,26.0,875.0,199.0,567.0,204.0,0.9288,36600.0,INLAND --119.0,35.35,31.0,2931.0,716.0,1969.0,588.0,2.2155,62100.0,INLAND --118.99,35.35,32.0,1293.0,317.0,1109.0,286.0,1.1786,45600.0,INLAND --119.01,35.35,34.0,1354.0,325.0,922.0,304.0,2.1875,58000.0,INLAND --119.01,35.34,44.0,1730.0,343.0,782.0,278.0,3.0208,63700.0,INLAND --119.02,35.35,42.0,1239.0,251.0,776.0,272.0,1.983,63300.0,INLAND --119.01,35.35,39.0,598.0,149.0,366.0,132.0,1.9125,57900.0,INLAND --119.02,35.35,38.0,1472.0,305.0,670.0,282.0,2.2407,76000.0,INLAND --119.02,35.34,38.0,1463.0,294.0,692.0,295.0,2.3125,65800.0,INLAND --119.03,35.34,36.0,3474.0,645.0,1679.0,616.0,2.7256,71900.0,INLAND --119.03,35.35,34.0,1441.0,294.0,695.0,275.0,2.6875,73700.0,INLAND --119.04,35.35,31.0,1607.0,336.0,817.0,307.0,2.5644,73000.0,INLAND --119.04,35.35,27.0,4590.0,897.0,2212.0,894.0,3.1753,85000.0,INLAND --119.06,35.35,20.0,9351.0,2139.0,4584.0,1953.0,2.575,69900.0,INLAND --119.05,35.34,14.0,3580.0,984.0,1933.0,912.0,2.6637,175000.0,INLAND --119.05,35.33,18.0,12707.0,2685.0,7009.0,2552.0,2.9438,87200.0,INLAND --119.05,35.34,17.0,2387.0,437.0,1204.0,423.0,4.0529,106200.0,INLAND --119.07,35.35,24.0,4119.0,865.0,1294.0,879.0,2.4123,86200.0,INLAND --119.07,35.34,16.0,4201.0,786.0,1667.0,724.0,4.8839,134100.0,INLAND --119.12,35.33,4.0,8574.0,1489.0,4250.0,1444.0,5.1036,103400.0,INLAND --119.1,35.35,5.0,4597.0,1071.0,1916.0,870.0,4.0327,131000.0,INLAND --119.08,35.34,18.0,4070.0,512.0,1580.0,540.0,10.5941,245800.0,INLAND --119.08,35.35,20.0,892.0,129.0,331.0,135.0,7.1837,176300.0,INLAND --119.09,35.35,14.0,2113.0,256.0,842.0,265.0,8.5325,224100.0,INLAND --119.08,35.34,16.0,1535.0,238.0,768.0,236.0,5.4449,118500.0,INLAND --119.08,35.34,15.0,1474.0,235.0,768.0,238.0,4.1528,130100.0,INLAND --119.1,35.33,4.0,6640.0,898.0,3121.0,902.0,6.759,170300.0,INLAND --119.08,35.32,8.0,11609.0,2141.0,5696.0,2100.0,5.0012,106300.0,INLAND --119.09,35.33,9.0,7085.0,1148.0,3084.0,1052.0,4.997,142900.0,INLAND --119.06,35.32,15.0,3944.0,746.0,2355.0,757.0,3.569,70700.0,INLAND --119.07,35.33,13.0,9027.0,1901.0,4870.0,1797.0,3.406,100700.0,INLAND --119.06,35.33,14.0,5264.0,1064.0,3278.0,1049.0,3.8117,82800.0,INLAND --119.02,35.34,34.0,2861.0,510.0,1375.0,486.0,3.4286,71400.0,INLAND --119.02,35.33,26.0,3691.0,826.0,2072.0,827.0,2.1553,84700.0,INLAND --119.03,35.33,21.0,3057.0,698.0,1627.0,680.0,2.7083,84700.0,INLAND --119.03,35.34,34.0,2221.0,436.0,1131.0,408.0,3.0486,68500.0,INLAND --119.01,35.34,36.0,973.0,219.0,613.0,187.0,1.5625,46700.0,INLAND --119.01,35.33,42.0,1120.0,255.0,677.0,213.0,1.5429,39400.0,INLAND --119.0,35.33,35.0,991.0,221.0,620.0,207.0,1.9417,53800.0,INLAND --119.01,35.33,32.0,3068.0,628.0,1897.0,607.0,2.4234,63700.0,INLAND --119.02,35.33,35.0,2053.0,412.0,1193.0,387.0,2.75,65800.0,INLAND --119.02,35.34,35.0,1650.0,390.0,1145.0,343.0,1.5357,56500.0,INLAND --118.99,35.32,35.0,1576.0,405.0,870.0,282.0,1.6575,59500.0,INLAND --118.99,35.3,33.0,2248.0,434.0,1461.0,405.0,2.9402,56200.0,INLAND --119.0,35.31,37.0,1337.0,275.0,767.0,273.0,1.6522,53300.0,INLAND --119.09,35.3,3.0,2821.0,519.0,1353.0,495.0,3.6852,109800.0,INLAND --119.04,35.32,20.0,37.0,11.0,34.0,8.0,1.2,50000.0,INLAND --119.05,35.32,11.0,7035.0,1455.0,3525.0,1387.0,3.4827,93600.0,INLAND --119.04,35.31,11.0,2161.0,371.0,1267.0,388.0,4.1957,92700.0,INLAND --119.03,35.32,12.0,2721.0,549.0,1294.0,523.0,2.5575,100200.0,INLAND --119.02,35.32,14.0,2927.0,588.0,1821.0,561.0,3.3529,82600.0,INLAND --119.05,35.3,9.0,10822.0,1994.0,6241.0,1906.0,4.0631,88200.0,INLAND --119.03,35.3,10.0,829.0,146.0,447.0,173.0,4.1484,102900.0,INLAND --119.02,35.3,10.0,7397.0,1369.0,4611.0,1310.0,3.6369,81600.0,INLAND --119.01,35.32,23.0,4870.0,965.0,2717.0,928.0,2.596,70000.0,INLAND --119.01,35.31,19.0,7092.0,1517.0,4101.0,1436.0,2.1006,74800.0,INLAND --119.01,35.3,7.0,8596.0,1597.0,4893.0,1520.0,3.9054,80900.0,INLAND --119.07,35.27,25.0,3081.0,635.0,1830.0,591.0,2.5804,97900.0,INLAND --119.13,35.22,5.0,6268.0,1003.0,3269.0,980.0,5.1457,118200.0,INLAND --119.01,35.24,6.0,80.0,16.0,66.0,21.0,3.125,65000.0,INLAND --119.01,35.28,10.0,7011.0,1453.0,4163.0,1307.0,2.7659,77500.0,INLAND --118.99,35.24,40.0,282.0,59.0,213.0,71.0,2.35,91700.0,INLAND --118.99,35.27,32.0,444.0,102.0,242.0,87.0,1.1528,150000.0,INLAND --118.93,34.82,24.0,806.0,168.0,323.0,136.0,3.5,113900.0,INLAND --118.95,34.83,18.0,3278.0,762.0,1338.0,550.0,2.9891,116500.0,INLAND --118.95,34.81,30.0,2817.0,604.0,1089.0,412.0,3.1364,123500.0,INLAND --119.15,34.83,6.0,8733.0,1600.0,2006.0,736.0,4.5724,168400.0,INLAND --119.16,34.95,14.0,4054.0,787.0,1581.0,579.0,3.0882,148200.0,INLAND --118.93,34.82,8.0,508.0,111.0,229.0,84.0,4.0332,128300.0,INLAND --119.4,35.06,21.0,2213.0,458.0,1250.0,440.0,2.9187,52100.0,INLAND --119.45,35.07,45.0,973.0,183.0,500.0,177.0,2.6389,30000.0,INLAND --119.42,35.19,26.0,890.0,172.0,483.0,170.0,4.15,68200.0,INLAND --119.5,35.27,23.0,3827.0,696.0,1993.0,617.0,3.0742,57900.0,INLAND --119.48,35.17,36.0,116.0,20.0,39.0,18.0,3.125,37500.0,INLAND --119.45,35.16,34.0,3437.0,696.0,1783.0,608.0,2.3912,52900.0,INLAND --119.46,35.17,40.0,4164.0,812.0,1998.0,773.0,2.8323,50800.0,INLAND --119.46,35.14,30.0,2943.0,,1565.0,584.0,2.5313,45800.0,INLAND --119.47,35.14,19.0,4190.0,690.0,1973.0,702.0,3.9929,88300.0,INLAND --119.45,35.15,33.0,5050.0,964.0,2293.0,919.0,3.1592,75400.0,INLAND --119.45,35.13,34.0,1440.0,309.0,808.0,294.0,2.3013,26600.0,INLAND --119.46,35.13,46.0,2745.0,543.0,1423.0,482.0,2.1955,26900.0,INLAND --119.47,35.13,44.0,4599.0,877.0,2140.0,831.0,2.9952,63800.0,INLAND --119.47,35.4,32.0,2167.0,421.0,1301.0,394.0,1.9718,69800.0,INLAND --119.42,35.4,24.0,2585.0,480.0,1442.0,424.0,2.8452,104700.0,INLAND --119.12,35.41,12.0,5589.0,941.0,3018.0,917.0,4.4561,96900.0,INLAND --119.11,35.39,22.0,984.0,176.0,451.0,170.0,3.25,88900.0,INLAND --119.12,35.39,13.0,1264.0,202.0,552.0,187.0,4.5903,94300.0,INLAND --119.19,35.41,12.0,2835.0,471.0,1399.0,413.0,4.4125,149000.0,INLAND --119.2,35.37,6.0,7383.0,1095.0,3415.0,1059.0,5.3119,157300.0,INLAND --119.12,35.38,18.0,1521.0,269.0,706.0,279.0,4.4196,121000.0,INLAND --119.11,35.38,37.0,2044.0,394.0,894.0,359.0,2.9453,82800.0,INLAND --119.12,35.37,13.0,4527.0,713.0,2170.0,671.0,4.8266,146200.0,INLAND --119.18,35.5,36.0,1253.0,259.0,932.0,249.0,2.1635,110400.0,INLAND --119.28,35.52,36.0,786.0,194.0,573.0,134.0,2.2321,37500.0,INLAND --119.27,35.49,39.0,2649.0,572.0,1815.0,547.0,2.3533,65400.0,INLAND --119.26,35.5,38.0,2536.0,409.0,1133.0,430.0,4.2375,78600.0,INLAND --119.27,35.5,34.0,1367.0,329.0,796.0,319.0,2.8269,61100.0,INLAND --119.27,35.51,28.0,1089.0,179.0,544.0,190.0,3.2279,95800.0,INLAND --119.28,35.5,34.0,1923.0,379.0,1101.0,351.0,2.4044,65800.0,INLAND --119.28,35.5,28.0,3107.0,782.0,3260.0,738.0,1.6944,58600.0,INLAND --119.27,35.5,21.0,2171.0,483.0,1315.0,450.0,1.7105,52100.0,INLAND --119.38,35.49,34.0,2304.0,437.0,1506.0,403.0,2.2071,64600.0,INLAND --119.34,35.6,16.0,1584.0,309.0,1011.0,268.0,2.4961,58800.0,INLAND --119.36,35.55,29.0,510.0,84.0,236.0,73.0,2.7,125000.0,INLAND --119.35,35.58,13.0,1657.0,362.0,1186.0,376.0,1.1903,63200.0,INLAND --119.34,35.59,33.0,3240.0,654.0,1809.0,616.0,2.3934,71900.0,INLAND --119.34,35.6,33.0,2143.0,488.0,1732.0,509.0,1.9362,59000.0,INLAND --119.33,35.6,32.0,2703.0,683.0,2682.0,675.0,1.4619,60500.0,INLAND --119.35,35.59,14.0,2719.0,502.0,1497.0,457.0,3.176,71800.0,INLAND --119.33,35.59,20.0,3085.0,691.0,2645.0,676.0,1.7868,54100.0,INLAND --119.69,35.62,18.0,820.0,239.0,1345.0,207.0,2.1186,47500.0,INLAND --119.77,35.65,21.0,2403.0,483.0,1647.0,415.0,2.6066,80000.0,INLAND --119.14,35.76,30.0,735.0,137.0,421.0,113.0,2.5625,156300.0,INLAND --119.29,35.76,15.0,3938.0,789.0,3500.0,768.0,2.1295,59800.0,INLAND --119.19,35.64,29.0,1476.0,220.0,902.0,205.0,2.6726,83300.0,INLAND --119.24,35.68,21.0,1885.0,398.0,1539.0,388.0,2.5208,58500.0,INLAND --119.22,35.68,16.0,2874.0,677.0,3078.0,651.0,1.8843,55200.0,INLAND --119.24,35.67,32.0,3216.0,750.0,2639.0,709.0,2.0025,54700.0,INLAND --119.25,35.78,27.0,1513.0,342.0,1346.0,323.0,2.7411,59800.0,INLAND --119.25,35.77,35.0,1618.0,378.0,1449.0,398.0,1.6786,56500.0,INLAND --119.25,35.76,36.0,2332.0,656.0,2175.0,610.0,1.6045,57300.0,INLAND --119.25,35.75,36.0,1598.0,443.0,1658.0,417.0,1.517,52100.0,INLAND --119.25,35.79,8.0,3271.0,797.0,2700.0,688.0,1.7418,62200.0,INLAND --119.25,35.78,35.0,1927.0,386.0,1371.0,414.0,2.2981,69900.0,INLAND --119.23,35.78,8.0,1612.0,343.0,1230.0,330.0,2.1806,67200.0,INLAND --119.23,35.79,31.0,2862.0,606.0,2467.0,600.0,2.3125,62100.0,INLAND --119.24,35.77,28.0,1737.0,521.0,1764.0,514.0,1.7813,67800.0,INLAND --119.23,35.77,36.0,3225.0,635.0,2034.0,593.0,2.4044,72500.0,INLAND --119.23,35.74,16.0,2275.0,659.0,1914.0,614.0,2.033,68400.0,INLAND --119.23,35.77,26.0,2636.0,468.0,1416.0,485.0,4.1917,84000.0,INLAND --118.92,35.47,6.0,1755.0,280.0,664.0,254.0,6.2885,216400.0,INLAND --119.01,35.44,20.0,3458.0,651.0,1465.0,621.0,2.5806,82500.0,INLAND --118.93,35.44,13.0,1439.0,237.0,557.0,227.0,6.1563,204200.0,INLAND --118.31,35.74,18.0,2327.0,642.0,799.0,335.0,1.8419,92300.0,INLAND --118.06,35.68,15.0,1962.0,403.0,730.0,321.0,2.25,67500.0,INLAND --118.44,35.75,23.0,3166.0,700.0,1097.0,493.0,2.6288,96000.0,INLAND --118.47,35.72,18.0,4754.0,1075.0,1366.0,690.0,2.0694,81200.0,INLAND --118.5,35.7,18.0,3303.0,814.0,986.0,522.0,1.5957,101400.0,INLAND --118.59,35.72,28.0,1491.0,408.0,98.0,48.0,1.4205,90000.0,INLAND --118.87,35.65,33.0,1504.0,325.0,584.0,223.0,3.4792,94600.0,INLAND --118.23,35.48,17.0,2354.0,514.0,775.0,380.0,1.8369,59400.0,INLAND --118.33,35.64,15.0,2966.0,669.0,1007.0,465.0,1.5667,72500.0,INLAND --118.41,35.63,15.0,5907.0,1257.0,2310.0,1001.0,2.3125,96900.0,INLAND --118.45,35.62,18.0,2304.0,527.0,782.0,390.0,1.4141,75800.0,INLAND --118.47,35.64,17.0,2248.0,535.0,927.0,427.0,1.3023,68500.0,INLAND --118.48,35.61,17.0,4002.0,930.0,1614.0,731.0,1.6236,67300.0,INLAND --118.45,35.58,16.0,5396.0,1182.0,1802.0,807.0,1.8819,69700.0,INLAND --118.61,35.47,13.0,2267.0,601.0,756.0,276.0,2.5474,78400.0,INLAND --117.73,35.73,35.0,2916.0,594.0,1870.0,432.0,3.625,55000.0,INLAND --117.66,35.63,33.0,2579.0,564.0,1155.0,431.0,2.0441,42100.0,INLAND --117.67,35.65,18.0,2737.0,589.0,1128.0,533.0,2.8,72000.0,INLAND --117.68,35.65,15.0,2701.0,576.0,1245.0,513.0,3.3269,81900.0,INLAND --117.69,35.65,5.0,1131.0,276.0,520.0,232.0,4.0167,87500.0,INLAND --117.7,35.64,8.0,2683.0,416.0,1154.0,399.0,5.8625,109400.0,INLAND --117.68,35.64,15.0,3253.0,573.0,1408.0,586.0,5.2043,95700.0,INLAND --117.67,35.64,6.0,2115.0,342.0,927.0,337.0,6.1935,115700.0,INLAND --117.67,35.63,32.0,3661.0,787.0,1613.0,706.0,3.0687,63500.0,INLAND --117.68,35.63,18.0,4334.0,641.0,1777.0,661.0,6.0653,105300.0,INLAND --117.69,35.63,5.0,3151.0,482.0,1335.0,428.0,5.5773,109000.0,INLAND --117.7,35.62,18.0,2657.0,496.0,1426.0,483.0,3.5931,71900.0,INLAND --117.68,35.61,9.0,4241.0,832.0,1929.0,742.0,3.5988,84500.0,INLAND --117.68,35.6,12.0,1678.0,241.0,765.0,281.0,6.0532,102800.0,INLAND --117.7,35.6,16.0,2678.0,483.0,1473.0,487.0,3.858,70200.0,INLAND --117.68,35.62,30.0,2994.0,741.0,1481.0,581.0,2.1458,52400.0,INLAND --117.64,35.61,10.0,2656.0,506.0,1349.0,501.0,4.25,83200.0,INLAND --117.66,35.62,11.0,5897.0,1138.0,2728.0,1072.0,4.15,85700.0,INLAND --117.66,35.61,5.0,5735.0,932.0,2623.0,862.0,4.8494,87200.0,INLAND --117.66,35.6,14.0,1740.0,391.0,850.0,317.0,2.5812,91700.0,INLAND --117.76,35.63,12.0,2014.0,372.0,1027.0,356.0,3.9261,101300.0,INLAND --117.68,35.55,9.0,3811.0,605.0,1518.0,568.0,5.5551,142500.0,INLAND --117.81,35.65,19.0,1124.0,290.0,598.0,261.0,1.8984,54300.0,INLAND --117.87,35.73,13.0,2566.0,449.0,1181.0,414.0,4.1518,91800.0,INLAND --117.84,35.54,11.0,1751.0,316.0,765.0,296.0,5.0762,98000.0,INLAND --117.74,35.65,15.0,2357.0,484.0,1110.0,442.0,3.1755,81700.0,INLAND --117.84,35.35,28.0,1913.0,486.0,858.0,371.0,1.9962,50800.0,INLAND --118.0,35.05,21.0,1739.0,425.0,945.0,362.0,3.4015,86500.0,INLAND --117.82,35.03,30.0,2555.0,510.0,1347.0,467.0,3.3693,71800.0,INLAND --117.76,35.22,4.0,18.0,3.0,8.0,6.0,1.625,275000.0,INLAND --117.79,35.21,4.0,2.0,2.0,6.0,2.0,2.375,137500.0,INLAND --118.01,35.12,15.0,1926.0,361.0,917.0,316.0,3.3889,68500.0,INLAND --117.98,35.13,5.0,4849.0,920.0,2504.0,847.0,3.5391,81900.0,INLAND --117.95,35.13,4.0,2630.0,502.0,1150.0,422.0,4.25,104400.0,INLAND --117.95,35.08,1.0,83.0,15.0,32.0,15.0,4.875,141700.0,INLAND --117.98,35.1,4.0,923.0,166.0,352.0,135.0,4.5724,84500.0,INLAND --117.99,35.16,15.0,2180.0,416.0,960.0,370.0,2.875,87800.0,INLAND --118.27,34.92,20.0,873.0,175.0,422.0,159.0,2.9583,91700.0,INLAND --118.34,34.86,11.0,7353.0,1482.0,3571.0,1308.0,2.8097,130000.0,INLAND --117.68,35.03,28.0,2969.0,648.0,1644.0,570.0,3.4338,54900.0,INLAND --117.68,34.99,33.0,1589.0,307.0,853.0,272.0,4.2292,64400.0,INLAND --117.65,35.0,36.0,1184.0,316.0,672.0,241.0,1.9107,39800.0,INLAND --118.15,34.86,10.0,4597.0,1009.0,2227.0,821.0,2.6149,83500.0,INLAND --118.17,34.87,9.0,1507.0,293.0,761.0,278.0,3.0184,87900.0,INLAND --118.19,34.87,2.0,2103.0,389.0,923.0,338.0,5.0553,111100.0,INLAND --118.17,34.86,21.0,2370.0,540.0,1488.0,554.0,2.7361,83300.0,INLAND --118.15,35.06,15.0,1069.0,296.0,569.0,263.0,2.0441,73300.0,INLAND --118.16,35.05,44.0,1297.0,307.0,776.0,278.0,2.5875,68900.0,INLAND --118.19,35.05,14.0,2992.0,573.0,1631.0,526.0,3.7452,83200.0,INLAND --118.15,35.04,29.0,1671.0,368.0,821.0,337.0,2.16,56800.0,INLAND --118.51,35.16,7.0,4371.0,727.0,1932.0,654.0,4.625,136800.0,INLAND --118.66,35.2,7.0,9664.0,1692.0,3617.0,1370.0,4.0581,162900.0,INLAND --118.34,35.27,10.0,2939.0,605.0,1167.0,446.0,2.3917,79000.0,INLAND --118.48,35.14,4.0,8417.0,1657.0,4631.0,1468.0,3.6949,115800.0,INLAND --118.61,35.08,6.0,3660.0,646.0,1243.0,482.0,3.4911,137200.0,INLAND --118.61,34.99,11.0,4031.0,766.0,1539.0,564.0,3.8917,120800.0,INLAND --118.46,35.13,19.0,3109.0,640.0,1457.0,620.0,2.6417,94900.0,INLAND --118.46,35.12,16.0,4084.0,812.0,2033.0,668.0,3.2405,85500.0,INLAND --118.43,35.12,8.0,1968.0,376.0,930.0,360.0,3.2632,99800.0,INLAND --118.44,35.13,34.0,1170.0,290.0,602.0,266.0,1.7917,80000.0,INLAND --118.44,35.13,21.0,1899.0,447.0,1133.0,391.0,1.8636,67900.0,INLAND --118.91,35.3,28.0,1793.0,358.0,1233.0,351.0,2.7845,82200.0,INLAND --118.95,35.26,24.0,1341.0,214.0,667.0,184.0,4.0,94500.0,INLAND --118.83,35.27,33.0,1190.0,217.0,717.0,196.0,2.6302,81300.0,INLAND --118.92,35.13,29.0,1297.0,262.0,909.0,253.0,1.9236,106300.0,INLAND --118.85,35.23,26.0,1639.0,352.0,1222.0,395.0,1.7656,68000.0,INLAND --118.82,35.23,31.0,2358.0,580.0,2302.0,574.0,1.9688,53900.0,INLAND --118.83,35.2,17.0,1959.0,484.0,1763.0,453.0,2.1357,53500.0,INLAND --118.82,35.2,34.0,2185.0,469.0,1910.0,455.0,2.1136,57300.0,INLAND --118.85,35.2,17.0,2783.0,678.0,2566.0,641.0,1.9907,51200.0,INLAND --118.91,35.27,29.0,1401.0,317.0,1344.0,306.0,2.0921,61400.0,INLAND --118.9,35.26,31.0,6145.0,1492.0,5666.0,1457.0,1.9066,54600.0,INLAND --118.92,35.26,20.0,3815.0,924.0,3450.0,920.0,2.0174,63700.0,INLAND --118.91,35.24,29.0,2888.0,753.0,2949.0,699.0,1.7716,45500.0,INLAND --119.69,36.41,38.0,1016.0,202.0,540.0,187.0,2.2885,75000.0,INLAND --119.57,36.44,30.0,1860.0,337.0,1123.0,347.0,3.4926,94200.0,INLAND --119.55,36.37,26.0,1912.0,339.0,1002.0,311.0,3.0375,126300.0,INLAND --119.69,36.38,25.0,1688.0,302.0,879.0,277.0,3.3214,103100.0,INLAND --119.78,36.37,41.0,831.0,149.0,443.0,146.0,3.1406,100000.0,INLAND --119.83,36.37,25.0,1549.0,269.0,819.0,272.0,2.7159,101400.0,INLAND --119.87,36.34,26.0,1414.0,265.0,779.0,249.0,2.9167,83900.0,INLAND --119.93,36.32,25.0,8363.0,1636.0,7679.0,1580.0,2.0285,106300.0,INLAND --119.79,36.32,19.0,3252.0,614.0,1971.0,607.0,3.0667,75800.0,INLAND --119.77,36.32,14.0,3400.0,618.0,1867.0,612.0,3.9926,92500.0,INLAND --119.78,36.31,14.0,1287.0,291.0,737.0,269.0,3.1667,126400.0,INLAND --119.77,36.31,14.0,3677.0,863.0,2191.0,785.0,2.6218,69100.0,INLAND --119.79,36.31,25.0,4984.0,1029.0,2414.0,961.0,2.2937,72300.0,INLAND --119.77,36.3,24.0,2202.0,471.0,1052.0,439.0,2.1038,62000.0,INLAND --119.78,36.3,30.0,1846.0,391.0,1255.0,352.0,2.1681,66600.0,INLAND --119.79,36.3,16.0,1717.0,277.0,903.0,289.0,4.3438,93100.0,INLAND --119.79,36.29,6.0,1265.0,227.0,764.0,246.0,4.2917,104200.0,INLAND --119.82,36.32,18.0,942.0,193.0,424.0,174.0,2.0673,87500.0,INLAND --119.78,36.33,16.0,1006.0,212.0,515.0,200.0,3.2386,112500.0,INLAND --119.78,36.27,29.0,1871.0,315.0,1066.0,309.0,4.5714,100800.0,INLAND --119.8,36.29,7.0,479.0,84.0,327.0,103.0,5.1728,107500.0,INLAND --119.81,36.28,24.0,544.0,112.0,442.0,106.0,3.1071,56100.0,INLAND --119.72,36.34,33.0,1287.0,214.0,580.0,210.0,3.2019,112500.0,INLAND --119.72,36.32,40.0,1185.0,221.0,676.0,256.0,2.2721,52600.0,INLAND --119.7,36.32,40.0,1178.0,244.0,586.0,187.0,2.6477,43500.0,INLAND --119.73,36.31,20.0,2440.0,433.0,1579.0,400.0,2.8281,60200.0,INLAND --119.7,36.3,10.0,956.0,201.0,693.0,220.0,2.2895,62000.0,INLAND --119.67,36.35,10.0,1090.0,164.0,470.0,158.0,4.9432,118800.0,INLAND --119.65,36.37,4.0,3725.0,783.0,1478.0,600.0,3.5486,148000.0,INLAND --119.65,36.35,21.0,1745.0,266.0,837.0,292.0,4.3911,107900.0,INLAND --119.65,36.35,38.0,3148.0,568.0,1378.0,537.0,2.8788,85500.0,INLAND --119.66,36.35,15.0,1724.0,374.0,947.0,391.0,3.1094,91900.0,INLAND --119.64,36.36,13.0,2360.0,340.0,1055.0,312.0,5.2134,97400.0,INLAND --119.64,36.35,23.0,3182.0,563.0,1525.0,585.0,3.8108,90400.0,INLAND --119.63,36.35,4.0,1684.0,343.0,920.0,324.0,4.2396,90600.0,INLAND --119.62,36.35,10.0,3674.0,734.0,1864.0,718.0,2.6145,80300.0,INLAND --119.64,36.35,30.0,1765.0,310.0,746.0,298.0,2.8125,70200.0,INLAND --119.63,36.34,26.0,1463.0,261.0,699.0,219.0,3.5536,71400.0,INLAND --119.63,36.33,14.0,2928.0,600.0,1633.0,559.0,1.8385,67500.0,INLAND --119.61,36.33,32.0,1492.0,284.0,926.0,264.0,3.0139,61500.0,INLAND --119.63,36.32,36.0,1518.0,287.0,749.0,255.0,2.2333,61000.0,INLAND --119.66,36.34,32.0,1338.0,276.0,859.0,286.0,2.6397,59700.0,INLAND --119.65,36.34,46.0,1730.0,337.0,752.0,323.0,1.8529,67200.0,INLAND --119.65,36.34,47.0,1869.0,357.0,832.0,315.0,3.0846,76100.0,INLAND --119.64,36.34,32.0,2958.0,670.0,1504.0,627.0,1.8606,56700.0,INLAND --119.64,36.33,41.0,3095.0,766.0,1852.0,721.0,1.4524,51700.0,INLAND --119.65,36.33,52.0,1257.0,257.0,624.0,243.0,2.3523,59100.0,INLAND --119.65,36.33,47.0,1059.0,268.0,693.0,241.0,1.3882,53800.0,INLAND --119.68,36.32,26.0,592.0,121.0,268.0,116.0,1.7596,120800.0,INLAND --119.67,36.33,19.0,1241.0,244.0,850.0,237.0,2.9375,81700.0,INLAND --119.66,36.33,16.0,2048.0,373.0,1052.0,388.0,4.0909,92800.0,INLAND --119.66,36.33,10.0,1623.0,409.0,988.0,395.0,1.4194,58100.0,INLAND --119.66,36.32,24.0,2652.0,568.0,1532.0,445.0,2.3256,56800.0,INLAND --119.68,36.32,28.0,1325.0,276.0,873.0,240.0,2.5833,54400.0,INLAND --119.68,36.31,12.0,2739.0,535.0,1859.0,498.0,2.9936,60600.0,INLAND --119.66,36.3,18.0,1147.0,202.0,717.0,212.0,3.3681,70500.0,INLAND --119.65,36.32,11.0,1294.0,314.0,713.0,290.0,1.5433,50400.0,INLAND --119.64,36.32,32.0,2205.0,523.0,1772.0,479.0,1.3569,43100.0,INLAND --119.65,36.3,28.0,941.0,175.0,588.0,180.0,2.3466,53400.0,INLAND --119.64,36.31,27.0,1513.0,314.0,1071.0,284.0,1.5909,50100.0,INLAND --119.61,36.31,25.0,1847.0,371.0,1460.0,353.0,1.8839,46300.0,INLAND --119.57,36.27,20.0,2673.0,452.0,1394.0,449.0,2.625,97400.0,INLAND --119.69,36.25,35.0,2011.0,349.0,970.0,300.0,2.395,94100.0,INLAND --119.63,36.18,23.0,207.0,45.0,171.0,50.0,2.4286,100000.0,INLAND --119.59,36.11,32.0,752.0,159.0,524.0,155.0,2.25,50000.0,INLAND --119.57,36.09,6.0,2015.0,413.0,992.0,319.0,2.3889,53200.0,INLAND --119.58,36.1,21.0,1382.0,327.0,1469.0,355.0,1.3967,46500.0,INLAND --119.56,36.1,29.0,424.0,78.0,284.0,73.0,1.5313,43800.0,INLAND --119.56,36.1,25.0,1093.0,262.0,893.0,252.0,2.13,50800.0,INLAND --119.56,36.09,35.0,1648.0,285.0,792.0,265.0,3.2847,64700.0,INLAND --119.56,36.09,14.0,1267.0,290.0,1077.0,279.0,1.85,52300.0,INLAND --119.56,36.08,37.0,766.0,189.0,639.0,190.0,1.6607,42100.0,INLAND --119.58,36.11,21.0,2004.0,385.0,1397.0,398.0,2.2169,61600.0,INLAND --119.57,36.1,16.0,1461.0,400.0,1201.0,384.0,1.5727,54800.0,INLAND --119.57,36.1,36.0,1729.0,317.0,737.0,278.0,3.5313,68800.0,INLAND --119.57,36.1,37.0,1676.0,316.0,707.0,274.0,2.0595,60700.0,INLAND --119.74,36.15,21.0,1548.0,308.0,1137.0,306.0,2.4688,61300.0,INLAND --119.9,36.2,43.0,187.0,38.0,106.0,40.0,1.875,137500.0,INLAND --119.82,36.19,33.0,1293.0,272.0,694.0,229.0,2.0221,52200.0,INLAND --119.99,36.09,23.0,333.0,92.0,198.0,55.0,0.4999,100000.0,INLAND --119.96,35.99,25.0,1047.0,270.0,1505.0,286.0,2.0976,47700.0,INLAND --119.8,36.02,20.0,156.0,39.0,171.0,37.0,3.05,225000.0,INLAND --120.14,36.04,27.0,2533.0,518.0,1371.0,461.0,2.9708,60900.0,INLAND --120.12,36.01,18.0,1165.0,334.0,1119.0,308.0,2.2167,48500.0,INLAND --120.14,36.0,33.0,1726.0,420.0,1371.0,388.0,2.0335,43900.0,INLAND --120.12,35.99,7.0,2049.0,482.0,1387.0,422.0,2.25,56200.0,INLAND --120.13,35.87,26.0,48.0,8.0,13.0,8.0,2.375,71300.0,INLAND --120.0,35.91,16.0,259.0,53.0,131.0,38.0,3.125,62500.0,INLAND --122.89,39.42,16.0,411.0,114.0,26.0,19.0,0.4999,73500.0,INLAND --122.9,39.23,39.0,1295.0,240.0,534.0,179.0,3.9519,98900.0,INLAND --122.91,39.18,43.0,89.0,18.0,86.0,27.0,2.0208,72500.0,INLAND --122.91,39.17,44.0,202.0,42.0,142.0,39.0,4.35,68300.0,INLAND --122.9,39.17,45.0,1314.0,277.0,649.0,232.0,2.575,73600.0,INLAND --122.88,39.14,20.0,1125.0,231.0,521.0,196.0,2.2188,106300.0,INLAND --123.07,39.12,24.0,1098.0,193.0,353.0,145.0,3.8333,92600.0,<1H OCEAN --122.95,39.13,17.0,380.0,69.0,225.0,72.0,3.25,137500.0,INLAND --122.89,39.11,10.0,1588.0,333.0,585.0,254.0,2.2551,71100.0,INLAND --122.9,39.09,15.0,2483.0,544.0,835.0,380.0,1.9141,143200.0,INLAND --122.92,39.08,24.0,341.0,64.0,146.0,57.0,4.0,166300.0,INLAND --122.94,39.1,18.0,681.0,120.0,272.0,105.0,2.8906,140600.0,INLAND --122.99,39.02,14.0,1582.0,301.0,851.0,273.0,3.45,164100.0,<1H OCEAN --122.91,39.07,21.0,2202.0,484.0,1000.0,381.0,2.4423,102300.0,INLAND --122.91,39.06,21.0,1236.0,238.0,601.0,261.0,1.939,100300.0,INLAND --122.92,39.05,16.0,1548.0,295.0,605.0,250.0,3.5652,119000.0,INLAND --122.91,39.05,20.0,1128.0,229.0,621.0,210.0,3.2216,93500.0,INLAND --122.92,39.05,38.0,3131.0,624.0,1591.0,568.0,2.5457,80700.0,INLAND --122.91,39.05,27.0,789.0,208.0,295.0,108.0,3.7667,95000.0,INLAND --122.91,39.03,14.0,2374.0,557.0,723.0,427.0,1.3532,95800.0,INLAND --122.7,39.14,13.0,532.0,111.0,214.0,62.0,3.3929,108300.0,INLAND --122.87,39.13,15.0,1927.0,427.0,810.0,321.0,1.6369,86500.0,INLAND --122.86,39.08,24.0,3127.0,674.0,1015.0,448.0,2.0417,78800.0,INLAND --122.83,39.09,26.0,2191.0,495.0,679.0,371.0,1.4679,94700.0,INLAND --122.79,39.09,20.0,1798.0,395.0,685.0,331.0,1.625,66800.0,INLAND --122.8,39.08,17.0,1880.0,467.0,798.0,342.0,1.4676,65000.0,INLAND --122.79,39.08,23.0,952.0,200.0,321.0,128.0,1.5208,89000.0,INLAND --122.78,39.05,15.0,1601.0,323.0,661.0,269.0,2.6181,108900.0,INLAND --122.53,39.09,11.0,1264.0,271.0,370.0,177.0,1.3,69700.0,INLAND --122.69,39.04,9.0,254.0,50.0,66.0,29.0,2.7639,112500.0,INLAND --122.73,39.04,23.0,1618.0,395.0,425.0,244.0,1.9833,111500.0,INLAND --122.69,39.02,27.0,2199.0,527.0,744.0,316.0,2.1094,72400.0,INLAND --122.66,39.03,27.0,1446.0,329.0,594.0,255.0,1.165,53300.0,INLAND --122.66,39.02,16.0,3715.0,810.0,943.0,510.0,1.7446,109400.0,INLAND --122.7,39.0,18.0,793.0,148.0,186.0,59.0,2.3125,162500.0,INLAND --122.7,38.99,18.0,1177.0,224.0,181.0,105.0,2.3558,134700.0,INLAND --122.65,38.99,16.0,4279.0,951.0,1596.0,666.0,1.8571,75900.0,INLAND --122.52,38.99,16.0,975.0,219.0,337.0,155.0,1.6607,77800.0,INLAND --122.68,38.98,27.0,2300.0,508.0,526.0,254.0,2.1838,109700.0,INLAND --122.65,38.97,32.0,1856.0,472.0,703.0,292.0,1.1912,60000.0,INLAND --122.63,38.96,17.0,1708.0,459.0,633.0,312.0,1.75,64000.0,INLAND --122.62,38.95,19.0,2230.0,538.0,832.0,359.0,1.6865,58800.0,INLAND --122.62,38.94,14.0,1731.0,400.0,638.0,282.0,2.3179,57500.0,INLAND --122.61,38.93,14.0,231.0,36.0,108.0,31.0,4.3897,71300.0,INLAND --122.6,38.93,16.0,1657.0,390.0,572.0,301.0,1.4767,62000.0,INLAND --122.62,38.96,16.0,1914.0,446.0,828.0,332.0,2.0577,69000.0,INLAND --122.63,38.96,20.0,2507.0,577.0,1072.0,457.0,2.3083,60200.0,INLAND --122.65,38.96,27.0,2143.0,580.0,898.0,367.0,1.6769,63200.0,INLAND --122.64,38.96,29.0,883.0,187.0,326.0,136.0,1.7273,58200.0,INLAND --122.64,38.95,28.0,1503.0,370.0,522.0,268.0,1.2029,68900.0,INLAND --122.63,38.95,11.0,686.0,127.0,246.0,86.0,1.7083,77300.0,INLAND --122.63,38.94,25.0,661.0,144.0,192.0,93.0,1.7566,49000.0,INLAND --122.63,38.94,18.0,3844.0,969.0,1832.0,845.0,1.125,81800.0,INLAND --122.62,38.94,13.0,524.0,129.0,215.0,90.0,1.5455,55000.0,INLAND --122.7,38.97,17.0,2554.0,540.0,723.0,319.0,3.2375,114200.0,INLAND --122.75,39.01,17.0,4162.0,967.0,889.0,414.0,3.4187,200500.0,INLAND --122.79,39.02,23.0,642.0,203.0,265.0,84.0,1.8833,96900.0,INLAND --122.78,38.97,11.0,5175.0,971.0,2144.0,792.0,3.0466,97300.0,INLAND --122.69,38.94,9.0,1245.0,234.0,517.0,187.0,3.125,93400.0,INLAND --122.71,38.91,20.0,41.0,18.0,94.0,10.0,1.375,55000.0,INLAND --122.86,39.05,20.0,1592.0,327.0,647.0,253.0,2.5326,136800.0,INLAND --122.85,39.0,20.0,1580.0,318.0,753.0,252.0,1.8704,88500.0,INLAND --122.83,38.99,15.0,289.0,49.0,191.0,54.0,1.6833,113900.0,INLAND --122.83,38.98,17.0,1383.0,347.0,719.0,296.0,1.6164,77800.0,INLAND --122.84,38.98,21.0,939.0,176.0,556.0,178.0,1.7196,75000.0,INLAND --122.92,38.97,20.0,2067.0,384.0,904.0,333.0,2.9934,134200.0,<1H OCEAN --122.89,38.93,20.0,1214.0,247.0,504.0,223.0,2.7188,105700.0,<1H OCEAN --122.83,38.96,15.0,1318.0,296.0,567.0,276.0,1.8692,93800.0,INLAND --122.77,38.92,26.0,712.0,140.0,293.0,100.0,4.0119,119400.0,INLAND --122.83,38.89,11.0,640.0,134.0,268.0,90.0,3.4514,100000.0,<1H OCEAN --122.72,38.88,29.0,2781.0,,890.0,310.0,1.9906,96600.0,INLAND --122.74,38.83,12.0,4515.0,909.0,1554.0,528.0,3.3531,90800.0,<1H OCEAN --122.48,38.9,10.0,304.0,63.0,161.0,61.0,2.1964,112500.0,INLAND --122.59,38.92,15.0,1410.0,329.0,599.0,273.0,2.1953,75000.0,INLAND --122.6,38.9,23.0,292.0,56.0,92.0,41.0,2.9583,91700.0,INLAND --122.62,38.92,13.0,520.0,115.0,249.0,109.0,1.8417,84700.0,INLAND --122.65,38.92,30.0,70.0,38.0,20.0,13.0,4.125,112500.0,INLAND --122.64,38.87,16.0,1177.0,240.0,519.0,199.0,1.5739,73500.0,INLAND --122.5,38.82,12.0,2394.0,443.0,877.0,341.0,2.5625,109200.0,INLAND --122.51,38.76,9.0,2589.0,482.0,1050.0,374.0,4.0435,132600.0,INLAND --122.55,38.81,7.0,3639.0,637.0,1027.0,421.0,3.8831,132100.0,INLAND --122.59,38.78,15.0,764.0,145.0,366.0,143.0,3.375,103100.0,INLAND --122.66,38.81,22.0,852.0,176.0,461.0,142.0,3.4375,83300.0,INLAND --122.68,38.76,29.0,994.0,226.0,302.0,117.0,2.3125,67900.0,INLAND --122.62,38.73,21.0,1425.0,323.0,727.0,287.0,2.1474,85300.0,INLAND --122.64,38.71,20.0,531.0,126.0,231.0,96.0,2.625,89600.0,INLAND --122.52,38.7,26.0,102.0,17.0,43.0,13.0,0.536,87500.0,INLAND --121.11,41.07,26.0,1707.0,308.0,761.0,250.0,2.7188,48100.0,INLAND --120.96,41.12,29.0,779.0,136.0,364.0,123.0,2.5,59200.0,INLAND --121.07,40.85,17.0,976.0,202.0,511.0,175.0,3.6641,80800.0,INLAND --120.38,40.98,27.0,777.0,185.0,318.0,115.0,1.6833,40000.0,INLAND --120.35,40.63,33.0,240.0,49.0,63.0,22.0,3.625,200000.0,INLAND --120.77,40.65,11.0,2635.0,667.0,280.0,132.0,1.7214,118300.0,INLAND --121.02,40.51,17.0,890.0,167.0,406.0,154.0,3.3036,78300.0,INLAND --120.96,40.28,19.0,683.0,139.0,302.0,111.0,2.5,64100.0,INLAND --121.03,40.35,52.0,5486.0,1044.0,1977.0,754.0,2.1833,49500.0,INLAND --120.67,40.5,15.0,5343.0,,2503.0,902.0,3.5962,85900.0,INLAND --120.57,40.43,15.0,2045.0,461.0,1121.0,402.0,2.6902,71500.0,INLAND --120.66,40.42,35.0,1450.0,325.0,717.0,297.0,2.5074,66400.0,INLAND --120.65,40.42,39.0,3240.0,652.0,1467.0,621.0,2.1875,64300.0,INLAND --120.66,40.41,52.0,2081.0,478.0,1051.0,419.0,2.2992,70200.0,INLAND --120.64,40.41,50.0,1741.0,424.0,987.0,383.0,1.5066,59300.0,INLAND --120.71,40.36,19.0,4462.0,828.0,2229.0,777.0,3.5536,105700.0,INLAND --120.58,40.37,16.0,3412.0,667.0,1873.0,590.0,2.2661,61800.0,INLAND --120.42,40.38,26.0,1652.0,313.0,762.0,280.0,2.4757,85600.0,INLAND --120.36,40.45,19.0,689.0,143.0,355.0,127.0,1.7333,70000.0,INLAND --120.51,40.41,36.0,36.0,8.0,4198.0,7.0,5.5179,67500.0,INLAND --120.54,40.29,17.0,3391.0,623.0,1529.0,571.0,3.4028,91000.0,INLAND --120.49,40.31,16.0,1821.0,360.0,969.0,359.0,3.4643,85100.0,INLAND --120.37,40.17,21.0,789.0,141.0,406.0,146.0,2.1198,73500.0,INLAND --120.2,40.26,26.0,2399.0,518.0,1037.0,443.0,2.6765,47600.0,INLAND --120.09,39.92,19.0,2335.0,518.0,1028.0,383.0,1.7267,60700.0,INLAND --118.27,34.27,27.0,5205.0,859.0,2363.0,888.0,6.1946,276100.0,<1H OCEAN --118.28,34.26,32.0,1079.0,207.0,486.0,167.0,4.9833,213000.0,<1H OCEAN --118.29,34.26,33.0,3177.0,713.0,1845.0,612.0,4.008,191100.0,<1H OCEAN --118.3,34.26,37.0,2824.0,633.0,1619.0,573.0,3.5568,184500.0,<1H OCEAN --118.3,34.26,42.0,2186.0,423.0,1145.0,439.0,4.81,191900.0,<1H OCEAN --118.28,34.25,35.0,2045.0,450.0,1166.0,407.0,3.5214,197600.0,<1H OCEAN --118.28,34.25,29.0,2559.0,,1886.0,769.0,2.6036,162100.0,<1H OCEAN --118.29,34.25,19.0,1988.0,594.0,1399.0,527.0,2.4727,175000.0,<1H OCEAN --118.29,34.25,8.0,5568.0,1514.0,3565.0,1374.0,3.0795,161500.0,<1H OCEAN --118.27,34.25,37.0,2489.0,454.0,1215.0,431.0,5.0234,257600.0,<1H OCEAN --118.27,34.25,35.0,2091.0,360.0,879.0,326.0,4.4485,261900.0,<1H OCEAN --118.27,34.24,30.0,2180.0,369.0,1050.0,390.0,6.3688,277600.0,<1H OCEAN --118.27,34.25,35.0,779.0,143.0,371.0,150.0,4.6635,230100.0,<1H OCEAN --118.27,34.25,39.0,699.0,150.0,358.0,143.0,4.4375,195800.0,<1H OCEAN --118.28,34.24,32.0,2542.0,526.0,1278.0,493.0,4.45,263600.0,<1H OCEAN --118.28,34.24,29.0,3390.0,580.0,1543.0,576.0,5.6184,316900.0,<1H OCEAN --118.3,34.25,36.0,1300.0,304.0,688.0,261.0,3.1523,176700.0,<1H OCEAN --118.33,34.24,31.0,6434.0,1188.0,3540.0,1131.0,4.2639,293300.0,<1H OCEAN --118.35,34.22,19.0,9259.0,1653.0,3963.0,1595.0,5.997,228700.0,<1H OCEAN --118.35,34.22,30.0,1260.0,222.0,638.0,229.0,4.1302,258300.0,<1H OCEAN --118.35,34.21,39.0,1470.0,312.0,1047.0,284.0,3.275,181400.0,<1H OCEAN --118.35,34.21,42.0,1073.0,220.0,804.0,226.0,3.75,172600.0,<1H OCEAN --118.31,34.28,34.0,3258.0,610.0,1810.0,633.0,5.1145,219900.0,<1H OCEAN --118.31,34.27,35.0,1446.0,274.0,759.0,291.0,6.0808,215600.0,<1H OCEAN --118.3,34.26,43.0,1510.0,310.0,809.0,277.0,3.599,176500.0,<1H OCEAN --118.3,34.26,40.0,1065.0,214.0,605.0,183.0,4.1964,185900.0,<1H OCEAN --118.31,34.26,38.0,2264.0,460.0,1124.0,388.0,4.2685,189600.0,<1H OCEAN --118.31,34.26,41.0,1297.0,327.0,733.0,315.0,3.0583,160300.0,<1H OCEAN --118.31,34.26,34.0,1797.0,363.0,948.0,363.0,4.1339,187300.0,<1H OCEAN --118.32,34.26,32.0,3690.0,791.0,1804.0,715.0,4.4875,222700.0,<1H OCEAN --118.35,34.28,30.0,3214.0,513.0,1700.0,533.0,4.6944,248200.0,<1H OCEAN --118.33,34.27,29.0,3034.0,732.0,1776.0,702.0,3.1349,230200.0,<1H OCEAN --118.35,34.27,32.0,604.0,108.0,314.0,113.0,6.2037,205400.0,<1H OCEAN --118.34,34.26,37.0,1776.0,301.0,702.0,265.0,5.2661,314900.0,<1H OCEAN --118.35,34.25,34.0,2795.0,460.0,1267.0,443.0,6.1464,354400.0,<1H OCEAN --118.36,34.26,34.0,3677.0,573.0,1598.0,568.0,6.838,378000.0,<1H OCEAN --118.3,34.26,28.0,1643.0,489.0,1142.0,458.0,3.1607,200600.0,<1H OCEAN --118.3,34.25,44.0,1442.0,285.0,859.0,292.0,4.5833,197300.0,<1H OCEAN --118.31,34.26,37.0,1444.0,246.0,624.0,239.0,5.76,239400.0,<1H OCEAN --118.31,34.26,36.0,1882.0,453.0,1005.0,409.0,3.8,217100.0,<1H OCEAN --118.32,34.26,24.0,5106.0,1010.0,2310.0,957.0,4.4375,191500.0,<1H OCEAN --118.39,34.28,24.0,4694.0,820.0,3566.0,777.0,4.4818,166200.0,<1H OCEAN --118.38,34.28,22.0,4428.0,825.0,3152.0,836.0,4.7932,166300.0,<1H OCEAN --118.4,34.28,16.0,6573.0,1480.0,6161.0,1473.0,3.3304,154900.0,<1H OCEAN --118.38,34.27,8.0,3248.0,847.0,2608.0,731.0,2.8214,158300.0,<1H OCEAN --118.41,34.29,35.0,1008.0,204.0,1162.0,215.0,3.35,147600.0,<1H OCEAN --118.41,34.29,32.0,1591.0,320.0,1818.0,306.0,4.2969,145800.0,<1H OCEAN --118.42,34.28,29.0,1271.0,272.0,1338.0,266.0,4.125,150000.0,<1H OCEAN --118.41,34.28,32.0,2574.0,531.0,2609.0,472.0,3.7566,146700.0,<1H OCEAN --118.4,34.28,22.0,3517.0,810.0,3134.0,847.0,2.6652,164800.0,<1H OCEAN --118.42,34.28,35.0,822.0,200.0,1197.0,203.0,3.2865,133300.0,<1H OCEAN --118.42,34.28,34.0,1999.0,427.0,2391.0,439.0,2.8,144300.0,<1H OCEAN --118.42,34.27,33.0,1209.0,341.0,1097.0,283.0,1.6295,134300.0,<1H OCEAN --118.42,34.27,33.0,937.0,216.0,1216.0,212.0,3.3214,131300.0,<1H OCEAN --118.42,34.27,35.0,674.0,153.0,808.0,173.0,2.6667,147800.0,<1H OCEAN --118.43,34.28,30.0,1384.0,308.0,2054.0,301.0,3.0132,142600.0,<1H OCEAN --118.43,34.27,31.0,1130.0,276.0,1533.0,269.0,4.2353,156800.0,<1H OCEAN --118.43,34.27,36.0,1002.0,250.0,1312.0,249.0,3.024,148000.0,<1H OCEAN --118.42,34.27,37.0,1024.0,246.0,1371.0,239.0,3.225,147500.0,<1H OCEAN --118.43,34.26,30.0,1246.0,373.0,1990.0,369.0,3.5104,140900.0,<1H OCEAN --118.43,34.26,37.0,1269.0,348.0,1835.0,335.0,3.2583,147200.0,<1H OCEAN --118.44,34.27,35.0,777.0,187.0,1022.0,186.0,3.4,139600.0,<1H OCEAN --118.43,34.26,43.0,729.0,172.0,935.0,174.0,2.9519,140900.0,<1H OCEAN --118.42,34.25,37.0,1545.0,341.0,1909.0,352.0,3.6791,148100.0,<1H OCEAN --118.43,34.25,35.0,1447.0,335.0,1630.0,306.0,2.9205,143100.0,<1H OCEAN --118.42,34.26,26.0,1788.0,521.0,2582.0,484.0,2.1062,136400.0,<1H OCEAN --118.41,34.26,38.0,870.0,205.0,1065.0,222.0,2.5313,136100.0,<1H OCEAN --118.42,34.26,36.0,973.0,221.0,1086.0,218.0,3.4519,143300.0,<1H OCEAN --118.42,34.26,37.0,1789.0,424.0,2279.0,411.0,3.9,138600.0,<1H OCEAN --118.41,34.27,38.0,858.0,203.0,1250.0,204.0,2.9219,137900.0,<1H OCEAN --118.42,34.27,35.0,2700.0,702.0,3444.0,679.0,1.4867,124000.0,<1H OCEAN --118.4,34.26,13.0,4379.0,872.0,2560.0,853.0,4.2538,154300.0,<1H OCEAN --118.4,34.25,13.0,1872.0,497.0,1927.0,432.0,2.2019,134200.0,<1H OCEAN --118.41,34.25,19.0,280.0,84.0,483.0,87.0,1.95,137500.0,<1H OCEAN --118.41,34.25,33.0,827.0,192.0,981.0,184.0,2.6429,143100.0,<1H OCEAN --118.41,34.25,36.0,1146.0,259.0,1173.0,272.0,3.6016,153800.0,<1H OCEAN --118.41,34.25,18.0,3447.0,857.0,3663.0,817.0,3.2284,157100.0,<1H OCEAN --118.42,34.24,17.0,2049.0,548.0,2243.0,541.0,2.525,163700.0,<1H OCEAN --118.42,34.25,36.0,1430.0,331.0,1502.0,312.0,3.6292,145200.0,<1H OCEAN --118.43,34.32,34.0,2657.0,515.0,1948.0,532.0,4.233,157400.0,<1H OCEAN --118.43,34.33,18.0,5891.0,920.0,2882.0,911.0,5.901,235600.0,<1H OCEAN --118.44,34.32,14.0,6235.0,1286.0,3568.0,1190.0,4.1724,211600.0,<1H OCEAN --118.42,34.31,19.0,6755.0,1443.0,4205.0,1395.0,3.9583,163200.0,<1H OCEAN --118.42,34.3,29.0,3334.0,712.0,2919.0,718.0,3.6548,180300.0,<1H OCEAN --118.41,34.32,18.0,6572.0,1105.0,3473.0,1067.0,5.2987,203400.0,<1H OCEAN --118.41,34.3,28.0,3187.0,569.0,2205.0,559.0,5.1668,187400.0,<1H OCEAN --118.42,34.32,30.0,3027.0,604.0,1970.0,590.0,4.3409,156000.0,<1H OCEAN --118.44,34.31,14.0,4151.0,941.0,3163.0,915.0,4.0301,154300.0,<1H OCEAN --118.44,34.31,22.0,3182.0,822.0,2661.0,746.0,2.7472,160100.0,<1H OCEAN --118.44,34.3,38.0,1595.0,314.0,1181.0,327.0,3.4,155500.0,<1H OCEAN --118.45,34.31,9.0,1739.0,358.0,820.0,323.0,4.0556,182500.0,<1H OCEAN --118.45,34.32,23.0,3481.0,641.0,1952.0,682.0,4.26,189400.0,<1H OCEAN --118.46,34.32,10.0,5777.0,1112.0,2917.0,1056.0,4.1514,194100.0,<1H OCEAN --118.45,34.31,28.0,1532.0,287.0,977.0,275.0,4.4773,173100.0,<1H OCEAN --118.46,34.3,32.0,2424.0,476.0,2291.0,419.0,4.0337,158500.0,<1H OCEAN --118.46,34.31,24.0,2920.0,601.0,1460.0,598.0,4.2708,218200.0,<1H OCEAN --118.47,34.32,13.0,2664.0,518.0,1468.0,521.0,4.8988,325200.0,<1H OCEAN --118.48,34.33,9.0,2384.0,395.0,1697.0,402.0,6.0891,270100.0,<1H OCEAN --118.48,34.31,31.0,1091.0,256.0,892.0,238.0,3.0,172400.0,<1H OCEAN --118.47,34.3,16.0,2495.0,551.0,2314.0,567.0,3.6736,192200.0,<1H OCEAN --118.46,34.29,24.0,3668.0,890.0,3151.0,810.0,3.0526,183300.0,<1H OCEAN --118.47,34.29,18.0,4256.0,987.0,3401.0,955.0,4.2935,190000.0,<1H OCEAN --118.49,34.29,26.0,4516.0,611.0,1714.0,581.0,9.2873,431800.0,<1H OCEAN --118.49,34.28,27.0,2535.0,389.0,1071.0,386.0,6.8695,319400.0,<1H OCEAN --118.49,34.28,31.0,3508.0,585.0,1957.0,588.0,6.6458,285500.0,<1H OCEAN --118.49,34.31,25.0,1024.0,145.0,357.0,147.0,7.0598,356300.0,<1H OCEAN --118.52,34.32,18.0,7498.0,976.0,3189.0,955.0,8.1248,374000.0,<1H OCEAN --118.51,34.3,24.0,6145.0,868.0,2710.0,875.0,7.5078,344000.0,<1H OCEAN --118.51,34.28,29.0,4239.0,653.0,1890.0,631.0,6.3911,301700.0,<1H OCEAN --118.51,34.29,29.0,1287.0,194.0,525.0,187.0,6.4171,319300.0,<1H OCEAN --118.52,34.29,28.0,2272.0,320.0,868.0,312.0,7.7464,474600.0,<1H OCEAN --118.52,34.3,17.0,4542.0,621.0,2144.0,597.0,8.8467,450700.0,<1H OCEAN --118.45,34.3,27.0,2676.0,,2661.0,623.0,4.3047,152100.0,<1H OCEAN --118.45,34.3,35.0,4085.0,919.0,3988.0,906.0,3.4812,160200.0,<1H OCEAN --118.54,34.28,18.0,5481.0,780.0,2477.0,764.0,6.7248,377200.0,<1H OCEAN --118.55,34.28,16.0,8879.0,,3468.0,1200.0,8.1125,428600.0,<1H OCEAN --118.54,34.28,10.0,7665.0,999.0,3517.0,998.0,10.8805,500001.0,<1H OCEAN --118.54,34.3,22.0,4423.0,622.0,1995.0,582.0,8.2159,376200.0,<1H OCEAN --118.57,34.29,4.0,6995.0,1151.0,2907.0,1089.0,7.0808,341200.0,<1H OCEAN --118.45,34.28,38.0,1527.0,332.0,1303.0,340.0,3.5714,152000.0,<1H OCEAN --118.46,34.28,23.0,1663.0,302.0,1242.0,283.0,5.5931,217600.0,<1H OCEAN --118.47,34.27,33.0,1549.0,264.0,881.0,289.0,5.1408,222900.0,<1H OCEAN --118.48,34.28,35.0,2132.0,368.0,1128.0,341.0,5.3107,227100.0,<1H OCEAN --118.48,34.28,35.0,1511.0,274.0,873.0,254.0,5.5608,226700.0,<1H OCEAN --118.47,34.27,17.0,1444.0,282.0,523.0,270.0,2.7353,192400.0,<1H OCEAN --118.47,34.27,35.0,1150.0,185.0,741.0,178.0,5.741,220600.0,<1H OCEAN --118.48,34.27,34.0,1231.0,222.0,702.0,222.0,4.9323,223700.0,<1H OCEAN --118.48,34.27,33.0,2649.0,449.0,1303.0,437.0,4.9955,216800.0,<1H OCEAN --118.45,34.27,33.0,1194.0,229.0,839.0,230.0,3.705,185800.0,<1H OCEAN --118.45,34.27,35.0,1579.0,300.0,1012.0,265.0,5.1296,195900.0,<1H OCEAN --118.46,34.27,30.0,1576.0,282.0,1004.0,284.0,4.8015,179700.0,<1H OCEAN --118.46,34.27,28.0,1865.0,463.0,1182.0,440.0,2.6193,172300.0,<1H OCEAN --118.44,34.27,36.0,1111.0,275.0,1333.0,266.0,3.5347,158100.0,<1H OCEAN --118.44,34.27,29.0,1701.0,419.0,1616.0,371.0,3.3603,142400.0,<1H OCEAN --118.45,34.26,35.0,1724.0,311.0,992.0,315.0,4.8359,195600.0,<1H OCEAN --118.45,34.25,36.0,1453.0,270.0,808.0,275.0,4.3839,204600.0,<1H OCEAN --118.45,34.26,35.0,1637.0,300.0,894.0,302.0,4.175,209600.0,<1H OCEAN --118.46,34.26,33.0,1358.0,247.0,738.0,235.0,5.0947,210300.0,<1H OCEAN --118.46,34.26,36.0,1394.0,254.0,761.0,262.0,4.9485,217100.0,<1H OCEAN --118.46,34.25,33.0,2202.0,433.0,1135.0,407.0,4.2143,224200.0,<1H OCEAN --118.46,34.25,32.0,2217.0,422.0,1064.0,427.0,3.6989,208600.0,<1H OCEAN --118.47,34.26,34.0,1300.0,289.0,650.0,291.0,3.8875,199200.0,<1H OCEAN --118.47,34.26,35.0,1898.0,344.0,1123.0,347.0,5.5792,218400.0,<1H OCEAN --118.48,34.26,36.0,1770.0,296.0,938.0,304.0,5.749,238000.0,<1H OCEAN --118.49,34.26,27.0,2722.0,468.0,1164.0,419.0,4.6591,239900.0,<1H OCEAN --118.47,34.25,34.0,1732.0,399.0,1120.0,401.0,4.1492,195700.0,<1H OCEAN --118.48,34.25,36.0,1951.0,395.0,1040.0,375.0,5.1619,195300.0,<1H OCEAN --118.48,34.25,35.0,1442.0,276.0,795.0,268.0,4.9688,216900.0,<1H OCEAN --118.48,34.25,35.0,1865.0,335.0,1074.0,337.0,5.1068,223300.0,<1H OCEAN --118.49,34.25,33.0,2088.0,383.0,960.0,362.0,4.3333,232900.0,<1H OCEAN --118.49,34.27,34.0,4877.0,815.0,2521.0,781.0,5.5714,225900.0,<1H OCEAN --118.49,34.27,33.0,3047.0,527.0,1578.0,507.0,4.58,236200.0,<1H OCEAN --118.5,34.27,35.0,2235.0,390.0,1148.0,416.0,4.869,221600.0,<1H OCEAN --118.51,34.28,34.0,3580.0,565.0,1694.0,524.0,5.4065,243800.0,<1H OCEAN --118.52,34.28,33.0,1975.0,271.0,801.0,287.0,7.8193,379600.0,<1H OCEAN --118.51,34.27,34.0,3787.0,771.0,1966.0,738.0,4.055,222500.0,<1H OCEAN --118.51,34.27,36.0,2276.0,429.0,1001.0,419.0,4.1042,252100.0,<1H OCEAN --118.52,34.27,36.0,3204.0,538.0,1499.0,499.0,5.5649,271200.0,<1H OCEAN --118.53,34.27,32.0,1931.0,298.0,948.0,314.0,5.3847,329200.0,<1H OCEAN --118.53,34.26,18.0,3674.0,,1590.0,550.0,8.176,308400.0,<1H OCEAN --118.54,34.26,22.0,5303.0,838.0,2372.0,807.0,5.6912,311800.0,<1H OCEAN --118.54,34.27,28.0,2309.0,300.0,931.0,302.0,6.7415,348200.0,<1H OCEAN --118.53,34.27,33.0,1927.0,305.0,896.0,293.0,5.634,320500.0,<1H OCEAN --118.54,34.26,23.0,4960.0,592.0,1929.0,586.0,10.9052,500001.0,<1H OCEAN --118.55,34.26,21.0,4018.0,536.0,1508.0,529.0,8.203,445400.0,<1H OCEAN --118.55,34.27,25.0,4919.0,661.0,2183.0,625.0,8.1356,352800.0,<1H OCEAN --118.5,34.26,33.0,2831.0,510.0,1340.0,504.0,4.8316,237300.0,<1H OCEAN --118.52,34.26,21.0,8850.0,2139.0,4717.0,1979.0,3.7816,254200.0,<1H OCEAN --118.51,34.26,29.0,2472.0,354.0,1109.0,397.0,5.5433,332500.0,<1H OCEAN --118.52,34.25,11.0,7849.0,1664.0,3561.0,1500.0,4.6625,290900.0,<1H OCEAN --118.49,34.26,25.0,8389.0,1872.0,4483.0,1747.0,3.5497,261300.0,<1H OCEAN --118.49,34.25,28.0,4054.0,712.0,2164.0,746.0,5.0,258000.0,<1H OCEAN --118.57,34.27,20.0,7384.0,845.0,2795.0,872.0,9.6047,500001.0,<1H OCEAN --118.59,34.26,20.0,8146.0,1131.0,3562.0,1054.0,7.167,357100.0,<1H OCEAN --118.61,34.24,17.0,5406.0,895.0,2337.0,882.0,6.0137,375900.0,<1H OCEAN --118.63,34.24,9.0,4759.0,924.0,1884.0,915.0,4.8333,277200.0,<1H OCEAN --118.62,34.26,15.0,10860.0,1653.0,4178.0,1581.0,6.3249,262100.0,<1H OCEAN --118.6,34.26,18.0,6154.0,1070.0,3010.0,1034.0,5.6392,271500.0,<1H OCEAN --118.61,34.25,16.0,8295.0,1506.0,3903.0,1451.0,5.5111,276600.0,<1H OCEAN --118.63,34.22,18.0,1376.0,225.0,670.0,205.0,6.5146,277600.0,<1H OCEAN --118.64,34.22,25.0,2762.0,410.0,1166.0,439.0,6.8643,333700.0,<1H OCEAN --118.66,34.23,18.0,897.0,142.0,263.0,110.0,6.1288,350000.0,<1H OCEAN --118.61,34.23,26.0,3727.0,572.0,1724.0,530.0,6.1419,327300.0,<1H OCEAN --118.61,34.22,24.0,5256.0,758.0,2474.0,780.0,7.3252,333700.0,<1H OCEAN --118.6,34.23,19.0,8866.0,2355.0,5005.0,2194.0,3.2564,230300.0,<1H OCEAN --118.59,34.23,17.0,6592.0,1525.0,4459.0,1463.0,3.0347,254500.0,<1H OCEAN --118.56,34.25,31.0,1962.0,243.0,697.0,242.0,8.565,500001.0,<1H OCEAN --118.56,34.24,23.0,2980.0,362.0,1208.0,378.0,8.1714,500001.0,<1H OCEAN --118.57,34.25,34.0,5098.0,778.0,2239.0,778.0,5.6149,273100.0,<1H OCEAN --118.58,34.24,26.0,3239.0,647.0,1529.0,590.0,3.2426,236900.0,<1H OCEAN --118.59,34.25,15.0,9716.0,2387.0,4992.0,2225.0,3.6231,193300.0,<1H OCEAN --118.57,34.25,20.0,4679.0,609.0,1945.0,609.0,8.7471,419900.0,<1H OCEAN --118.58,34.25,23.0,4883.0,769.0,2119.0,725.0,5.521,280800.0,<1H OCEAN --118.56,34.23,36.0,3215.0,529.0,1710.0,539.0,5.5126,248400.0,<1H OCEAN --118.56,34.23,36.0,2406.0,432.0,1242.0,454.0,4.6944,221800.0,<1H OCEAN --118.57,34.23,22.0,3275.0,648.0,1746.0,585.0,4.9676,221900.0,<1H OCEAN --118.58,34.23,29.0,3907.0,773.0,2037.0,727.0,4.1023,230200.0,<1H OCEAN --118.59,34.23,14.0,4407.0,1209.0,2676.0,1128.0,3.4091,168800.0,<1H OCEAN --118.58,34.23,35.0,1917.0,314.0,1019.0,340.0,4.8929,234900.0,<1H OCEAN --118.58,34.22,35.0,1969.0,339.0,950.0,340.0,4.875,230400.0,<1H OCEAN --118.59,34.22,17.0,6015.0,1464.0,3056.0,1347.0,4.0077,229000.0,<1H OCEAN --118.51,34.25,24.0,4338.0,558.0,1514.0,549.0,8.8612,500001.0,<1H OCEAN --118.51,34.24,31.0,5297.0,664.0,1986.0,657.0,8.6454,483500.0,<1H OCEAN --118.51,34.23,36.0,3324.0,448.0,1190.0,423.0,7.2772,477200.0,<1H OCEAN --118.52,34.24,6.0,3218.0,949.0,2295.0,876.0,3.0926,418500.0,<1H OCEAN --118.52,34.23,35.0,1471.0,210.0,735.0,219.0,8.3841,472200.0,<1H OCEAN --118.53,34.25,20.0,6331.0,1537.0,2957.0,1509.0,3.3892,323100.0,<1H OCEAN --118.54,34.24,24.0,4631.0,1164.0,2360.0,1083.0,3.0977,264000.0,<1H OCEAN --118.53,34.24,24.0,2718.0,719.0,3018.0,644.0,2.9076,275300.0,<1H OCEAN --118.54,34.23,35.0,3422.0,601.0,1690.0,574.0,4.375,232900.0,<1H OCEAN --118.53,34.23,27.0,2131.0,543.0,1065.0,528.0,3.2404,230400.0,<1H OCEAN --118.54,34.25,26.0,2639.0,378.0,1191.0,401.0,6.2788,322200.0,<1H OCEAN --118.55,34.24,21.0,5751.0,1082.0,2230.0,1016.0,4.3458,407500.0,<1H OCEAN --118.55,34.23,25.0,4409.0,1018.0,4579.0,1010.0,2.8727,245100.0,<1H OCEAN --118.51,34.23,27.0,4580.0,918.0,2252.0,850.0,4.7926,454400.0,<1H OCEAN --118.52,34.22,21.0,4617.0,1101.0,2891.0,1031.0,3.2289,318100.0,<1H OCEAN --118.53,34.23,32.0,4039.0,984.0,2675.0,941.0,3.0321,240000.0,<1H OCEAN --118.54,34.22,34.0,2193.0,513.0,1299.0,497.0,3.6187,211600.0,<1H OCEAN --118.54,34.23,29.0,1753.0,342.0,1318.0,333.0,4.125,241400.0,<1H OCEAN --118.45,34.25,34.0,2094.0,380.0,1207.0,380.0,5.2801,212300.0,<1H OCEAN --118.46,34.24,11.0,5363.0,1160.0,2783.0,1034.0,3.8583,170700.0,<1H OCEAN --118.47,34.25,21.0,2692.0,477.0,1330.0,456.0,4.5417,238900.0,<1H OCEAN --118.47,34.24,19.0,2405.0,661.0,1855.0,621.0,2.3111,255400.0,<1H OCEAN --118.48,34.24,32.0,2621.0,412.0,1285.0,414.0,6.6537,267600.0,<1H OCEAN --118.49,34.25,30.0,2871.0,470.0,1335.0,458.0,5.0232,253900.0,<1H OCEAN --118.49,34.24,35.0,2707.0,446.0,1224.0,445.0,5.2939,244200.0,<1H OCEAN --118.49,34.24,34.0,1971.0,316.0,917.0,307.0,6.0965,262300.0,<1H OCEAN --118.5,34.25,32.0,2333.0,389.0,969.0,331.0,4.8164,241100.0,<1H OCEAN --118.5,34.25,32.0,2411.0,380.0,1040.0,344.0,6.155,257300.0,<1H OCEAN --118.5,34.24,34.0,2634.0,412.0,1114.0,423.0,5.9401,315300.0,<1H OCEAN --118.5,34.23,26.0,3082.0,573.0,1590.0,586.0,4.5167,319000.0,<1H OCEAN --118.49,34.23,32.0,4373.0,683.0,2040.0,693.0,5.2668,242300.0,<1H OCEAN --118.49,34.22,30.0,1756.0,314.0,899.0,288.0,5.0325,238200.0,<1H OCEAN --118.47,34.23,22.0,8350.0,2717.0,9135.0,2452.0,2.5008,160000.0,<1H OCEAN --118.48,34.23,35.0,1963.0,310.0,919.0,297.0,4.7583,258600.0,<1H OCEAN --118.48,34.23,30.0,1762.0,263.0,761.0,292.0,6.5268,273100.0,<1H OCEAN --118.48,34.23,29.0,3354.0,707.0,1752.0,650.0,4.5484,239900.0,<1H OCEAN --118.46,34.23,20.0,4609.0,1499.0,5349.0,1377.0,2.7121,169400.0,<1H OCEAN --118.46,34.23,16.0,6338.0,1768.0,4718.0,1632.0,3.0187,154600.0,<1H OCEAN --118.43,34.25,38.0,921.0,239.0,1023.0,241.0,3.4514,151900.0,<1H OCEAN --118.42,34.24,36.0,1181.0,220.0,775.0,218.0,4.7228,183800.0,<1H OCEAN --118.43,34.24,36.0,1488.0,313.0,1221.0,296.0,4.0208,171400.0,<1H OCEAN --118.42,34.24,35.0,1507.0,281.0,1025.0,286.0,4.5833,177200.0,<1H OCEAN --118.41,34.23,35.0,1026.0,195.0,753.0,185.0,4.5909,179200.0,<1H OCEAN --118.41,34.24,38.0,490.0,101.0,402.0,100.0,3.125,175900.0,<1H OCEAN --118.44,34.26,34.0,1102.0,212.0,949.0,212.0,4.0792,165100.0,<1H OCEAN --118.44,34.26,28.0,1077.0,288.0,1377.0,293.0,3.9167,153900.0,<1H OCEAN --118.43,34.25,32.0,2433.0,553.0,2318.0,532.0,3.6384,159300.0,<1H OCEAN --118.44,34.26,34.0,325.0,60.0,433.0,83.0,5.5124,174300.0,<1H OCEAN --118.44,34.25,35.0,1583.0,324.0,1481.0,351.0,3.7,176000.0,<1H OCEAN --118.45,34.25,21.0,2143.0,565.0,1803.0,497.0,3.9833,162500.0,<1H OCEAN --118.45,34.24,11.0,9053.0,2193.0,7096.0,2038.0,3.5082,136500.0,<1H OCEAN --118.45,34.23,15.0,5738.0,1767.0,4620.0,1581.0,2.3584,157600.0,<1H OCEAN --118.45,34.24,7.0,3299.0,794.0,2343.0,647.0,3.0865,205900.0,<1H OCEAN --118.44,34.25,33.0,1121.0,231.0,1038.0,236.0,4.8958,173700.0,<1H OCEAN --118.43,34.24,35.0,1416.0,261.0,995.0,272.0,3.7143,178700.0,<1H OCEAN --118.43,34.24,35.0,1488.0,293.0,1112.0,288.0,4.4688,182500.0,<1H OCEAN --118.44,34.24,36.0,1660.0,301.0,1225.0,307.0,4.095,184000.0,<1H OCEAN --118.44,34.24,35.0,2344.0,435.0,1531.0,399.0,3.725,178200.0,<1H OCEAN --118.42,34.23,33.0,2478.0,457.0,1567.0,446.0,5.6629,186700.0,<1H OCEAN --118.42,34.22,29.0,1807.0,323.0,1234.0,310.0,5.3767,233000.0,<1H OCEAN --118.43,34.23,35.0,2049.0,390.0,1286.0,385.0,4.4432,181500.0,<1H OCEAN --118.43,34.24,36.0,1379.0,265.0,896.0,246.0,4.6827,183800.0,<1H OCEAN --118.42,34.23,34.0,1550.0,279.0,1011.0,288.0,4.5375,189000.0,<1H OCEAN --118.43,34.23,35.0,1225.0,228.0,720.0,231.0,3.4013,176500.0,<1H OCEAN --118.43,34.23,37.0,1737.0,369.0,1061.0,356.0,3.9615,173700.0,<1H OCEAN --118.43,34.24,37.0,1279.0,241.0,987.0,233.0,4.0057,172700.0,<1H OCEAN --118.44,34.23,36.0,1730.0,387.0,1099.0,353.0,4.0368,183100.0,<1H OCEAN --118.43,34.22,34.0,1588.0,360.0,1080.0,340.0,3.66,184600.0,<1H OCEAN --118.44,34.22,41.0,1030.0,214.0,664.0,223.0,3.8083,183800.0,<1H OCEAN --118.44,34.22,39.0,1529.0,344.0,913.0,314.0,3.325,178200.0,<1H OCEAN --118.44,34.23,43.0,2257.0,429.0,1418.0,442.0,4.5278,181800.0,<1H OCEAN --118.46,34.22,35.0,2288.0,617.0,2222.0,566.0,2.6299,170700.0,<1H OCEAN --118.46,34.22,39.0,1500.0,333.0,998.0,309.0,3.9625,168200.0,<1H OCEAN --118.46,34.22,31.0,2057.0,601.0,2397.0,579.0,2.871,184400.0,<1H OCEAN --118.45,34.22,24.0,3442.0,1168.0,4625.0,1097.0,2.0699,183000.0,<1H OCEAN --118.45,34.23,25.0,4393.0,1369.0,3781.0,1267.0,2.5833,183700.0,<1H OCEAN --118.45,34.22,8.0,2609.0,786.0,1803.0,695.0,2.7714,185700.0,<1H OCEAN --118.46,34.23,19.0,9902.0,2814.0,7307.0,2660.0,2.585,145400.0,<1H OCEAN --118.44,34.22,36.0,1191.0,266.0,718.0,248.0,3.4612,178800.0,<1H OCEAN --118.44,34.21,37.0,1665.0,335.0,1011.0,343.0,4.8703,185100.0,<1H OCEAN --118.44,34.21,41.0,1440.0,325.0,1014.0,322.0,2.875,168600.0,<1H OCEAN --118.44,34.22,41.0,1582.0,399.0,1159.0,378.0,2.825,168600.0,<1H OCEAN --118.43,34.22,34.0,2300.0,429.0,1447.0,455.0,4.2656,233700.0,<1H OCEAN --118.43,34.21,17.0,3667.0,1209.0,2636.0,1054.0,2.425,175500.0,<1H OCEAN --118.43,34.22,36.0,1372.0,295.0,774.0,306.0,3.6618,187300.0,<1H OCEAN --118.4,34.22,43.0,1220.0,222.0,729.0,230.0,3.6442,186300.0,<1H OCEAN --118.4,34.21,30.0,2453.0,544.0,1753.0,506.0,2.9803,191500.0,<1H OCEAN --118.41,34.21,35.0,2215.0,459.0,1594.0,446.0,4.0167,193200.0,<1H OCEAN --118.4,34.21,45.0,972.0,181.0,554.0,187.0,4.8194,181300.0,<1H OCEAN --118.4,34.22,36.0,2557.0,540.0,1556.0,491.0,3.6591,183800.0,<1H OCEAN --118.4,34.23,37.0,1404.0,266.0,889.0,274.0,4.0049,190000.0,<1H OCEAN --118.38,34.25,38.0,983.0,185.0,513.0,170.0,4.8816,231500.0,<1H OCEAN --118.37,34.24,40.0,1283.0,246.0,594.0,236.0,4.1121,229200.0,<1H OCEAN --118.37,34.23,32.0,1444.0,317.0,1177.0,311.0,3.6,164600.0,<1H OCEAN --118.37,34.22,17.0,1787.0,463.0,1671.0,448.0,3.5521,151500.0,<1H OCEAN --118.38,34.24,38.0,125.0,42.0,63.0,29.0,1.3594,158300.0,<1H OCEAN --118.4,34.24,35.0,2552.0,545.0,1850.0,503.0,4.775,179500.0,<1H OCEAN --118.39,34.23,18.0,3405.0,831.0,3001.0,795.0,3.0083,181900.0,<1H OCEAN --118.39,34.23,43.0,1193.0,299.0,1184.0,320.0,2.1518,161600.0,<1H OCEAN --118.4,34.23,36.0,1643.0,349.0,1414.0,337.0,4.1181,172700.0,<1H OCEAN --118.41,34.21,35.0,2830.0,518.0,1577.0,524.0,5.35,210500.0,<1H OCEAN --118.41,34.21,35.0,1789.0,292.0,897.0,267.0,5.592,239900.0,<1H OCEAN --118.39,34.22,40.0,712.0,149.0,533.0,155.0,3.695,165200.0,<1H OCEAN --118.39,34.22,35.0,1790.0,334.0,1277.0,345.0,5.0818,186800.0,<1H OCEAN --118.39,34.21,32.0,1869.0,441.0,1516.0,432.0,3.6845,178500.0,<1H OCEAN --118.39,34.21,14.0,2807.0,868.0,2729.0,803.0,2.6667,172400.0,<1H OCEAN --118.38,34.22,20.0,1176.0,344.0,864.0,318.0,2.375,177700.0,<1H OCEAN --118.38,34.21,35.0,1468.0,303.0,1295.0,300.0,3.7708,170600.0,<1H OCEAN --118.38,34.21,33.0,1981.0,484.0,1665.0,466.0,3.0833,179100.0,<1H OCEAN --118.42,34.22,34.0,3004.0,589.0,1938.0,568.0,4.1857,198600.0,<1H OCEAN --118.42,34.21,29.0,2893.0,543.0,1636.0,540.0,5.1586,237400.0,<1H OCEAN --118.42,34.2,34.0,161.0,48.0,66.0,33.0,1.0,187500.0,<1H OCEAN --118.42,34.23,34.0,1531.0,278.0,1064.0,274.0,5.6687,207300.0,<1H OCEAN --118.37,34.21,36.0,1392.0,326.0,1181.0,303.0,3.1563,176400.0,<1H OCEAN --118.37,34.21,36.0,2080.0,455.0,1939.0,484.0,4.2875,176600.0,<1H OCEAN --118.37,34.21,34.0,2272.0,558.0,2164.0,484.0,3.7143,175700.0,<1H OCEAN --118.37,34.22,11.0,2127.0,581.0,1989.0,530.0,2.9028,174100.0,<1H OCEAN --118.38,34.22,32.0,362.0,100.0,348.0,102.0,2.2679,150000.0,<1H OCEAN --118.36,34.23,15.0,2485.0,742.0,1994.0,670.0,2.8333,183200.0,<1H OCEAN --118.36,34.22,37.0,1512.0,348.0,1545.0,351.0,3.7663,160300.0,<1H OCEAN --118.35,34.22,41.0,1560.0,374.0,1668.0,389.0,3.025,154300.0,<1H OCEAN --118.36,34.21,41.0,337.0,65.0,198.0,50.0,1.8929,152900.0,<1H OCEAN --118.38,34.21,42.0,715.0,145.0,730.0,158.0,3.8,169500.0,<1H OCEAN --118.38,34.2,23.0,4138.0,1171.0,3911.0,1068.0,3.0125,181700.0,<1H OCEAN --118.39,34.2,17.0,2594.0,1028.0,3950.0,973.0,2.0348,177200.0,<1H OCEAN --118.37,34.21,33.0,2034.0,470.0,1990.0,423.0,3.7455,159600.0,<1H OCEAN --118.37,34.2,34.0,2199.0,609.0,2488.0,597.0,2.9861,171800.0,<1H OCEAN --118.38,34.21,38.0,1363.0,395.0,1798.0,405.0,2.3182,171200.0,<1H OCEAN --118.37,34.2,33.0,1438.0,309.0,1378.0,306.0,2.8917,170400.0,<1H OCEAN --118.36,34.19,11.0,2921.0,685.0,1512.0,664.0,4.1445,176400.0,<1H OCEAN --118.36,34.18,34.0,1471.0,423.0,995.0,386.0,2.9583,188700.0,<1H OCEAN --118.36,34.18,36.0,2233.0,605.0,1934.0,599.0,2.8784,194900.0,<1H OCEAN --118.37,34.18,33.0,1829.0,512.0,1345.0,500.0,3.1629,198900.0,<1H OCEAN --118.37,34.19,19.0,2890.0,821.0,2203.0,705.0,2.6696,185100.0,<1H OCEAN --118.39,34.19,41.0,2000.0,485.0,1439.0,461.0,3.0491,192000.0,<1H OCEAN --118.39,34.19,23.0,1875.0,710.0,2555.0,657.0,2.0968,162500.0,<1H OCEAN --118.39,34.2,19.0,2012.0,732.0,3483.0,731.0,2.2234,181300.0,<1H OCEAN --118.37,34.19,41.0,2924.0,867.0,2751.0,836.0,2.1,171600.0,<1H OCEAN --118.38,34.19,37.0,1434.0,394.0,1667.0,404.0,2.4375,176300.0,<1H OCEAN --118.38,34.2,32.0,993.0,285.0,1044.0,248.0,2.4306,187500.0,<1H OCEAN --118.4,34.2,13.0,4859.0,1293.0,3351.0,1200.0,3.6875,211900.0,<1H OCEAN --118.4,34.19,37.0,934.0,231.0,587.0,230.0,3.625,181300.0,<1H OCEAN --118.4,34.2,30.0,2392.0,655.0,1987.0,609.0,2.8424,226400.0,<1H OCEAN --118.4,34.19,35.0,2180.0,599.0,1483.0,574.0,3.0395,191300.0,<1H OCEAN --118.41,34.19,39.0,1169.0,242.0,612.0,247.0,4.1429,200000.0,<1H OCEAN --118.41,34.2,32.0,2734.0,654.0,2209.0,610.0,3.5164,217200.0,<1H OCEAN --118.42,34.2,24.0,3148.0,908.0,2850.0,839.0,1.9549,221500.0,<1H OCEAN --118.41,34.19,42.0,779.0,145.0,450.0,148.0,3.9792,193800.0,<1H OCEAN --118.42,34.19,34.0,2622.0,572.0,1997.0,573.0,3.338,222500.0,<1H OCEAN --118.42,34.2,27.0,3201.0,970.0,3403.0,948.0,2.2377,231700.0,<1H OCEAN --118.43,34.2,28.0,3386.0,,2240.0,737.0,3.0221,290100.0,<1H OCEAN --118.42,34.19,33.0,3353.0,790.0,2318.0,775.0,2.2589,269700.0,<1H OCEAN --118.42,34.19,33.0,3285.0,830.0,2281.0,786.0,2.6165,230800.0,<1H OCEAN --118.42,34.18,27.0,3760.0,880.0,2022.0,812.0,3.1551,225600.0,<1H OCEAN --118.42,34.18,31.0,2887.0,646.0,1626.0,637.0,3.6745,335500.0,<1H OCEAN --118.42,34.18,30.0,1323.0,353.0,856.0,333.0,3.3594,202200.0,<1H OCEAN --118.43,34.18,33.0,2717.0,662.0,1546.0,597.0,3.9099,267500.0,<1H OCEAN --118.43,34.18,31.0,2417.0,510.0,1102.0,507.0,3.8906,282200.0,<1H OCEAN --118.42,34.18,40.0,1013.0,150.0,449.0,166.0,5.7143,382400.0,<1H OCEAN --118.41,34.19,45.0,1106.0,225.0,595.0,228.0,3.6625,190700.0,<1H OCEAN --118.41,34.18,43.0,1840.0,356.0,966.0,323.0,4.7171,237900.0,<1H OCEAN --118.41,34.18,30.0,2008.0,513.0,1052.0,496.0,3.0119,262200.0,<1H OCEAN --118.41,34.19,37.0,1993.0,425.0,939.0,400.0,2.8021,224600.0,<1H OCEAN --118.4,34.19,30.0,521.0,126.0,306.0,129.0,4.1125,216700.0,<1H OCEAN --118.4,34.19,35.0,1631.0,356.0,862.0,368.0,3.6007,261800.0,<1H OCEAN --118.4,34.18,32.0,3724.0,899.0,1912.0,791.0,3.5711,312700.0,<1H OCEAN --118.4,34.17,27.0,3588.0,911.0,1891.0,871.0,3.4013,286000.0,<1H OCEAN --118.39,34.19,25.0,3794.0,989.0,2454.0,876.0,2.9982,204200.0,<1H OCEAN --118.39,34.18,42.0,1957.0,389.0,985.0,414.0,2.9327,240200.0,<1H OCEAN --118.39,34.17,26.0,3345.0,818.0,1599.0,773.0,3.3516,241500.0,<1H OCEAN --118.39,34.18,44.0,477.0,91.0,220.0,112.0,3.3906,223800.0,<1H OCEAN --118.39,34.19,36.0,904.0,191.0,627.0,191.0,2.4167,192900.0,<1H OCEAN --118.4,34.16,45.0,1176.0,250.0,471.0,228.0,2.3333,364700.0,<1H OCEAN --118.4,34.16,35.0,1354.0,284.0,501.0,262.0,3.8056,384700.0,<1H OCEAN --118.4,34.16,34.0,2638.0,580.0,1150.0,551.0,4.2989,364700.0,<1H OCEAN --118.41,34.16,32.0,3060.0,505.0,1159.0,510.0,6.3703,465800.0,<1H OCEAN --118.41,34.17,35.0,2027.0,428.0,879.0,402.0,4.692,330900.0,<1H OCEAN --118.38,34.19,42.0,1308.0,289.0,950.0,302.0,2.7379,181500.0,<1H OCEAN --118.38,34.18,40.0,2079.0,568.0,1396.0,526.0,3.0061,190800.0,<1H OCEAN --118.38,34.18,27.0,4834.0,1527.0,3847.0,1432.0,2.1449,165300.0,<1H OCEAN --118.38,34.18,24.0,1983.0,651.0,2251.0,574.0,2.4792,200000.0,<1H OCEAN --118.38,34.17,33.0,1588.0,454.0,739.0,392.0,2.8208,238500.0,<1H OCEAN --118.39,34.17,40.0,1696.0,372.0,835.0,385.0,3.6563,222400.0,<1H OCEAN --118.37,34.18,36.0,1608.0,373.0,1217.0,374.0,2.9728,190200.0,<1H OCEAN --118.37,34.18,42.0,1140.0,300.0,643.0,252.0,3.3958,178400.0,<1H OCEAN --118.38,34.18,44.0,901.0,179.0,473.0,179.0,3.3125,186400.0,<1H OCEAN --118.38,34.19,30.0,977.0,264.0,736.0,258.0,1.9866,177400.0,<1H OCEAN --118.37,34.18,35.0,2949.0,794.0,2106.0,746.0,2.9228,177300.0,<1H OCEAN --118.38,34.18,32.0,3553.0,1060.0,3129.0,1010.0,2.5603,174200.0,<1H OCEAN --118.36,34.18,31.0,1109.0,354.0,1119.0,334.0,2.3056,200000.0,<1H OCEAN --118.36,34.17,31.0,1939.0,505.0,1584.0,466.0,2.5234,199500.0,<1H OCEAN --118.37,34.17,42.0,1713.0,416.0,1349.0,427.0,3.2596,191800.0,<1H OCEAN --118.41,34.18,35.0,2785.0,663.0,1631.0,614.0,3.9038,276100.0,<1H OCEAN --118.41,34.17,27.0,3277.0,648.0,1382.0,615.0,3.875,366100.0,<1H OCEAN --118.41,34.18,35.0,1975.0,384.0,882.0,406.0,4.375,291700.0,<1H OCEAN --118.43,34.17,32.0,3202.0,696.0,1573.0,621.0,3.4449,292900.0,<1H OCEAN --118.43,34.17,35.0,2922.0,507.0,1130.0,485.0,5.451,341800.0,<1H OCEAN --118.43,34.17,37.0,1982.0,331.0,794.0,340.0,5.9275,336900.0,<1H OCEAN --118.43,34.16,34.0,2459.0,489.0,1139.0,463.0,4.0347,353600.0,<1H OCEAN --118.43,34.16,41.0,2050.0,478.0,850.0,490.0,3.4208,343400.0,<1H OCEAN --118.43,34.16,40.0,1134.0,184.0,452.0,187.0,4.569,333900.0,<1H OCEAN --118.42,34.15,27.0,2795.0,602.0,1073.0,535.0,5.1496,365000.0,<1H OCEAN --118.42,34.17,31.0,2235.0,363.0,914.0,370.0,6.1359,359700.0,<1H OCEAN --118.42,34.16,28.0,4664.0,1040.0,1963.0,961.0,3.9028,367900.0,<1H OCEAN --118.41,34.16,14.0,577.0,150.0,372.0,130.0,4.1875,275000.0,<1H OCEAN --118.42,34.16,25.0,2769.0,566.0,1201.0,545.0,3.6641,386100.0,<1H OCEAN --118.4,34.17,24.0,4443.0,1283.0,2421.0,1180.0,2.2652,269200.0,<1H OCEAN --118.4,34.17,24.0,6347.0,,2945.0,1492.0,3.3545,221500.0,<1H OCEAN --118.39,34.17,28.0,2790.0,748.0,1351.0,697.0,3.2052,283600.0,<1H OCEAN --118.39,34.17,26.0,6429.0,1611.0,2806.0,1491.0,3.1929,265200.0,<1H OCEAN --118.39,34.16,46.0,1582.0,279.0,603.0,283.0,5.1169,414300.0,<1H OCEAN --118.39,34.16,37.0,1388.0,286.0,547.0,258.0,5.1584,444700.0,<1H OCEAN --118.38,34.17,30.0,2016.0,622.0,1359.0,557.0,2.7708,192300.0,<1H OCEAN --118.38,34.16,46.0,2609.0,593.0,1055.0,585.0,3.3177,309400.0,<1H OCEAN --118.38,34.16,31.0,2197.0,501.0,944.0,474.0,3.7312,319400.0,<1H OCEAN --118.36,34.17,44.0,2295.0,560.0,1543.0,528.0,2.3851,194100.0,<1H OCEAN --118.37,34.17,15.0,3327.0,1011.0,2683.0,857.0,2.3784,185400.0,<1H OCEAN --118.37,34.17,42.0,600.0,171.0,377.0,181.0,2.4107,184400.0,<1H OCEAN --118.37,34.17,10.0,1431.0,473.0,1438.0,429.0,2.2756,221400.0,<1H OCEAN --118.37,34.17,6.0,854.0,350.0,542.0,321.0,0.8198,325000.0,<1H OCEAN --118.37,34.16,6.0,6526.0,2007.0,3298.0,1790.0,2.7231,250000.0,<1H OCEAN --118.37,34.16,10.0,2606.0,748.0,1373.0,680.0,3.6128,225000.0,<1H OCEAN --118.37,34.16,25.0,2450.0,618.0,1054.0,578.0,3.6375,262500.0,<1H OCEAN --118.37,34.16,40.0,1973.0,382.0,774.0,352.0,4.4122,282300.0,<1H OCEAN --118.36,34.16,43.0,2850.0,709.0,1510.0,670.0,2.4835,274300.0,<1H OCEAN --118.36,34.16,32.0,2455.0,556.0,989.0,493.0,4.0764,325000.0,<1H OCEAN --118.37,34.16,17.0,4150.0,1148.0,1808.0,1041.0,3.5051,232400.0,<1H OCEAN --118.37,34.16,11.0,2901.0,871.0,1659.0,789.0,3.1106,209400.0,<1H OCEAN --118.36,34.16,45.0,1755.0,335.0,822.0,342.0,5.1423,322900.0,<1H OCEAN --118.36,34.16,42.0,2304.0,442.0,862.0,429.0,4.3542,417900.0,<1H OCEAN --118.35,34.15,35.0,2245.0,393.0,783.0,402.0,4.1544,500001.0,<1H OCEAN --118.43,34.2,20.0,4090.0,1271.0,2824.0,1053.0,2.773,140500.0,<1H OCEAN --118.43,34.21,26.0,2867.0,671.0,1955.0,640.0,4.125,226500.0,<1H OCEAN --118.44,34.2,28.0,1732.0,435.0,1198.0,417.0,2.9219,241300.0,<1H OCEAN --118.44,34.21,20.0,5756.0,1477.0,4031.0,1369.0,3.2448,221200.0,<1H OCEAN --118.45,34.21,30.0,2331.0,733.0,2172.0,707.0,2.1888,195600.0,<1H OCEAN --118.45,34.2,19.0,3666.0,1150.0,2657.0,1090.0,2.9688,202100.0,<1H OCEAN --118.46,34.2,13.0,2926.0,816.0,1867.0,802.0,3.5255,202700.0,<1H OCEAN --118.46,34.21,7.0,2081.0,657.0,1456.0,535.0,3.5,186900.0,<1H OCEAN --118.47,34.21,34.0,2512.0,603.0,1805.0,584.0,2.9735,220000.0,<1H OCEAN --118.47,34.2,20.0,3939.0,1143.0,2475.0,1002.0,2.9025,229100.0,<1H OCEAN --118.48,34.21,25.0,2879.0,723.0,2077.0,649.0,3.3864,197400.0,<1H OCEAN --118.48,34.2,26.0,2027.0,559.0,1545.0,513.0,2.8974,189900.0,<1H OCEAN --118.48,34.22,22.0,3430.0,1214.0,3618.0,1092.0,2.1974,93800.0,<1H OCEAN --118.49,34.21,25.0,1131.0,449.0,746.0,420.0,1.3565,225000.0,<1H OCEAN --118.49,34.19,23.0,2087.0,571.0,1809.0,553.0,3.1667,202000.0,<1H OCEAN --118.49,34.2,35.0,1109.0,206.0,515.0,202.0,5.2118,215800.0,<1H OCEAN --118.5,34.2,34.0,1617.0,344.0,938.0,305.0,3.915,217700.0,<1H OCEAN --118.48,34.2,12.0,3831.0,1083.0,2258.0,967.0,2.4375,255400.0,<1H OCEAN --118.48,34.2,23.0,2850.0,864.0,2249.0,777.0,2.6957,191700.0,<1H OCEAN --118.48,34.19,20.0,5699.0,1594.0,3809.0,1381.0,2.8646,221100.0,<1H OCEAN --118.48,34.19,36.0,2058.0,423.0,1132.0,423.0,3.8833,210400.0,<1H OCEAN --118.47,34.2,25.0,4590.0,1477.0,2723.0,1195.0,2.7118,281700.0,<1H OCEAN --118.47,34.19,33.0,3879.0,943.0,2113.0,843.0,3.892,292900.0,<1H OCEAN --118.45,34.2,27.0,1572.0,450.0,1039.0,455.0,2.5562,190500.0,<1H OCEAN --118.45,34.2,18.0,2729.0,800.0,2099.0,742.0,2.5842,230800.0,<1H OCEAN --118.46,34.2,22.0,4855.0,1350.0,2519.0,1258.0,3.0893,205600.0,<1H OCEAN --118.45,34.19,37.0,1073.0,254.0,739.0,253.0,2.4667,192200.0,<1H OCEAN --118.46,34.19,20.0,5992.0,1820.0,4826.0,1632.0,2.7237,233500.0,<1H OCEAN --118.46,34.19,35.0,1491.0,295.0,779.0,309.0,6.1142,256300.0,<1H OCEAN --118.43,34.2,29.0,3051.0,694.0,1942.0,679.0,3.1118,238100.0,<1H OCEAN --118.44,34.2,36.0,2698.0,623.0,1544.0,554.0,2.7375,234900.0,<1H OCEAN --118.44,34.2,35.0,1717.0,478.0,1628.0,495.0,2.5197,225600.0,<1H OCEAN --118.44,34.2,17.0,2934.0,950.0,2517.0,889.0,2.936,232500.0,<1H OCEAN --118.43,34.19,27.0,3440.0,739.0,1827.0,712.0,4.125,245500.0,<1H OCEAN --118.44,34.19,37.0,1516.0,344.0,983.0,347.0,5.0,243600.0,<1H OCEAN --118.44,34.19,19.0,3487.0,959.0,2278.0,835.0,2.6709,215500.0,<1H OCEAN --118.44,34.19,29.0,1599.0,459.0,1143.0,438.0,2.4583,199100.0,<1H OCEAN --118.43,34.18,22.0,2052.0,568.0,1254.0,572.0,2.6364,271100.0,<1H OCEAN --118.44,34.18,36.0,2077.0,496.0,1206.0,528.0,2.2326,221000.0,<1H OCEAN --118.44,34.19,11.0,2891.0,951.0,2166.0,768.0,2.891,178100.0,<1H OCEAN --118.44,34.18,17.0,1546.0,592.0,2423.0,556.0,2.1977,154200.0,<1H OCEAN --118.45,34.19,11.0,2479.0,900.0,2466.0,855.0,2.2264,181300.0,<1H OCEAN --118.45,34.18,22.0,2516.0,826.0,3350.0,713.0,2.0192,158300.0,<1H OCEAN --118.46,34.18,27.0,2582.0,719.0,2038.0,718.0,3.0877,174200.0,<1H OCEAN --118.47,34.19,41.0,1104.0,196.0,495.0,196.0,5.0929,225000.0,<1H OCEAN --118.45,34.18,39.0,1810.0,388.0,839.0,380.0,3.7171,228800.0,<1H OCEAN --118.45,34.18,34.0,1843.0,442.0,861.0,417.0,3.6875,246400.0,<1H OCEAN --118.46,34.18,33.0,1791.0,386.0,844.0,397.0,4.5081,251400.0,<1H OCEAN --118.46,34.18,35.0,1819.0,465.0,1336.0,419.0,3.4583,253200.0,<1H OCEAN --118.44,34.18,35.0,972.0,270.0,550.0,256.0,2.2461,215000.0,<1H OCEAN --118.44,34.17,25.0,4966.0,1134.0,1941.0,958.0,3.8081,286700.0,<1H OCEAN --118.45,34.18,33.0,2077.0,486.0,1021.0,450.0,3.6019,225000.0,<1H OCEAN --118.43,34.18,25.0,3830.0,1105.0,2328.0,1017.0,2.6238,210000.0,<1H OCEAN --118.44,34.18,33.0,2127.0,414.0,1056.0,391.0,4.375,286100.0,<1H OCEAN --118.43,34.17,33.0,1679.0,404.0,933.0,412.0,2.6979,266000.0,<1H OCEAN --118.43,34.17,34.0,2180.0,424.0,906.0,429.0,4.4464,353100.0,<1H OCEAN --118.43,34.17,42.0,777.0,102.0,284.0,113.0,11.2093,500001.0,<1H OCEAN --118.44,34.17,29.0,2685.0,642.0,1085.0,599.0,3.2763,279400.0,<1H OCEAN --118.43,34.16,34.0,2622.0,467.0,1233.0,476.0,4.0474,379700.0,<1H OCEAN --118.44,34.16,35.0,3080.0,642.0,1362.0,623.0,4.1218,328500.0,<1H OCEAN --118.44,34.16,33.0,1616.0,322.0,580.0,311.0,4.0391,337500.0,<1H OCEAN --118.45,34.16,22.0,4982.0,1358.0,2237.0,1220.0,3.7105,272600.0,<1H OCEAN --118.45,34.17,21.0,2152.0,527.0,996.0,470.0,3.2386,277300.0,<1H OCEAN --118.45,34.17,33.0,3100.0,687.0,1388.0,658.0,4.3333,261300.0,<1H OCEAN --118.46,34.17,24.0,2814.0,675.0,1463.0,620.0,4.1875,309300.0,<1H OCEAN --118.46,34.17,22.0,6707.0,1737.0,2620.0,1610.0,3.1478,273700.0,<1H OCEAN --118.45,34.16,33.0,2544.0,500.0,1035.0,492.0,4.475,314800.0,<1H OCEAN --118.46,34.16,28.0,2795.0,622.0,1173.0,545.0,4.4423,280400.0,<1H OCEAN --118.46,34.16,26.0,2548.0,647.0,1098.0,540.0,4.3839,299100.0,<1H OCEAN --118.54,34.21,22.0,6064.0,1826.0,4876.0,1697.0,2.875,227100.0,<1H OCEAN --118.54,34.21,32.0,2593.0,566.0,1596.0,547.0,3.9886,199200.0,<1H OCEAN --118.54,34.22,35.0,1664.0,300.0,1000.0,309.0,4.6731,224100.0,<1H OCEAN --118.54,34.2,37.0,1600.0,349.0,1012.0,366.0,4.1597,201600.0,<1H OCEAN --118.54,34.19,33.0,2205.0,453.0,1242.0,419.0,4.1319,203700.0,<1H OCEAN --118.51,34.22,36.0,2794.0,523.0,1334.0,472.0,4.3462,222100.0,<1H OCEAN --118.5,34.21,36.0,1254.0,229.0,629.0,245.0,4.9643,236100.0,<1H OCEAN --118.5,34.21,36.0,1656.0,310.0,817.0,308.0,5.5675,215900.0,<1H OCEAN --118.51,34.22,36.0,1952.0,387.0,1156.0,392.0,4.185,209200.0,<1H OCEAN --118.51,34.21,36.0,2396.0,421.0,1064.0,398.0,4.7,223600.0,<1H OCEAN --118.51,34.22,36.0,1493.0,285.0,766.0,272.0,4.8646,213200.0,<1H OCEAN --118.52,34.22,35.0,1275.0,222.0,959.0,226.0,5.0282,195400.0,<1H OCEAN --118.52,34.22,35.0,1620.0,272.0,1052.0,248.0,5.5209,203300.0,<1H OCEAN --118.52,34.21,36.0,2394.0,424.0,1490.0,427.0,4.3261,206700.0,<1H OCEAN --118.52,34.21,34.0,1663.0,299.0,762.0,282.0,5.1265,211000.0,<1H OCEAN --118.53,34.22,29.0,4101.0,849.0,2630.0,867.0,4.6607,199800.0,<1H OCEAN --118.53,34.21,18.0,3124.0,796.0,1855.0,725.0,2.9389,213200.0,<1H OCEAN --118.55,34.21,35.0,2592.0,490.0,1427.0,434.0,5.0623,246400.0,<1H OCEAN --118.56,34.22,35.0,1843.0,329.0,1041.0,317.0,4.4271,205100.0,<1H OCEAN --118.56,34.21,36.0,1286.0,242.0,788.0,248.0,3.5333,196800.0,<1H OCEAN --118.56,34.22,34.0,1599.0,294.0,819.0,306.0,4.3194,197000.0,<1H OCEAN --118.55,34.21,33.0,3910.0,838.0,2097.0,810.0,3.8247,208700.0,<1H OCEAN --118.56,34.21,13.0,8327.0,1849.0,4126.0,1773.0,3.7313,189800.0,<1H OCEAN --118.52,34.2,35.0,2891.0,594.0,1757.0,581.0,4.3571,199800.0,<1H OCEAN --118.53,34.2,33.0,3270.0,818.0,2118.0,763.0,3.225,205300.0,<1H OCEAN --118.5,34.21,35.0,1668.0,332.0,807.0,311.0,4.5125,200300.0,<1H OCEAN --118.51,34.2,35.0,1614.0,308.0,850.0,330.0,4.1806,209000.0,<1H OCEAN --118.51,34.2,37.0,2066.0,434.0,1031.0,414.0,4.0924,188400.0,<1H OCEAN --118.52,34.21,36.0,1328.0,287.0,823.0,273.0,4.5648,193700.0,<1H OCEAN --118.5,34.2,42.0,1558.0,322.0,884.0,334.0,2.2304,203800.0,<1H OCEAN --118.51,34.2,33.0,2327.0,479.0,1166.0,472.0,4.2344,262500.0,<1H OCEAN --118.51,34.2,34.0,2871.0,581.0,1350.0,535.0,3.7049,227500.0,<1H OCEAN --118.51,34.19,35.0,2537.0,418.0,1161.0,421.0,5.3028,229200.0,<1H OCEAN --118.51,34.19,38.0,2182.0,409.0,1141.0,379.0,4.2865,221100.0,<1H OCEAN --118.5,34.2,18.0,4249.0,933.0,2047.0,909.0,4.1304,229100.0,<1H OCEAN --118.5,34.19,35.0,2720.0,490.0,1158.0,445.0,5.0796,228300.0,<1H OCEAN --118.5,34.19,26.0,2156.0,509.0,1142.0,470.0,4.0,224700.0,<1H OCEAN --118.52,34.2,19.0,4315.0,1304.0,2490.0,1222.0,2.6437,195000.0,<1H OCEAN --118.52,34.2,37.0,1795.0,346.0,1082.0,354.0,4.9102,207200.0,<1H OCEAN --118.53,34.2,26.0,2221.0,662.0,1998.0,603.0,2.8701,191100.0,<1H OCEAN --118.55,34.2,21.0,2549.0,651.0,1624.0,628.0,3.6905,179800.0,<1H OCEAN --118.55,34.19,18.0,5862.0,,3161.0,1280.0,3.1106,170600.0,<1H OCEAN --118.55,34.2,31.0,1963.0,420.0,1494.0,415.0,3.5313,211800.0,<1H OCEAN --118.52,34.19,42.0,881.0,170.0,464.0,163.0,2.9511,203900.0,<1H OCEAN --118.52,34.19,37.0,1560.0,275.0,763.0,284.0,3.8516,206900.0,<1H OCEAN --118.52,34.19,37.0,1892.0,347.0,1039.0,343.0,4.8295,212100.0,<1H OCEAN --118.53,34.19,32.0,2618.0,692.0,1961.0,633.0,2.625,192300.0,<1H OCEAN --118.52,34.18,34.0,2307.0,388.0,1168.0,427.0,4.2143,245400.0,<1H OCEAN --118.53,34.18,26.0,4175.0,885.0,2118.0,778.0,4.2083,240300.0,<1H OCEAN --118.56,34.2,36.0,1544.0,308.0,891.0,286.0,4.175,190900.0,<1H OCEAN --118.56,34.2,35.0,2273.0,,1431.0,403.0,4.0789,196700.0,<1H OCEAN --118.56,34.19,35.0,782.0,144.0,425.0,140.0,5.4548,201400.0,<1H OCEAN --118.56,34.19,34.0,1237.0,242.0,671.0,221.0,3.9615,183600.0,<1H OCEAN --118.56,34.19,34.0,2579.0,561.0,1237.0,517.0,4.433,235100.0,<1H OCEAN --118.56,34.18,36.0,1366.0,224.0,719.0,270.0,4.8264,251000.0,<1H OCEAN --118.54,34.19,22.0,3380.0,790.0,2199.0,737.0,2.5739,239200.0,<1H OCEAN --118.54,34.18,25.0,1938.0,457.0,1280.0,425.0,3.9632,240300.0,<1H OCEAN --118.55,34.19,36.0,978.0,170.0,475.0,192.0,4.675,222500.0,<1H OCEAN --118.55,34.19,31.0,1856.0,370.0,990.0,360.0,4.3654,223800.0,<1H OCEAN --118.58,34.21,24.0,2642.0,696.0,1649.0,633.0,3.0187,217700.0,<1H OCEAN --118.59,34.21,26.0,2335.0,669.0,1986.0,645.0,2.9974,178800.0,<1H OCEAN --118.59,34.2,18.0,847.0,185.0,733.0,178.0,5.2149,201900.0,<1H OCEAN --118.58,34.2,37.0,1389.0,252.0,826.0,249.0,5.015,220900.0,<1H OCEAN --118.57,34.22,27.0,2795.0,606.0,1702.0,586.0,3.7798,258400.0,<1H OCEAN --118.57,34.21,23.0,4891.0,793.0,2447.0,765.0,5.8798,270500.0,<1H OCEAN --118.57,34.22,17.0,3262.0,753.0,1879.0,708.0,4.1359,255200.0,<1H OCEAN --118.58,34.21,13.0,6227.0,1317.0,3739.0,1226.0,4.0313,299300.0,<1H OCEAN --118.58,34.22,35.0,2560.0,441.0,1428.0,468.0,5.6345,228200.0,<1H OCEAN --118.58,34.21,27.0,2209.0,353.0,1034.0,344.0,4.7125,250900.0,<1H OCEAN --118.59,34.21,34.0,1943.0,320.0,895.0,305.0,5.0462,227700.0,<1H OCEAN --118.59,34.21,34.0,2389.0,521.0,1560.0,514.0,4.8333,225400.0,<1H OCEAN --118.6,34.21,21.0,9512.0,2560.0,7282.0,2387.0,2.8039,227500.0,<1H OCEAN --118.61,34.21,34.0,3494.0,557.0,1861.0,576.0,5.6407,251500.0,<1H OCEAN --118.62,34.22,33.0,1636.0,275.0,866.0,289.0,5.6356,241300.0,<1H OCEAN --118.62,34.21,26.0,3234.0,517.0,1597.0,513.0,6.1074,258600.0,<1H OCEAN --118.62,34.22,34.0,2633.0,471.0,1313.0,428.0,4.0909,232900.0,<1H OCEAN --118.61,34.21,41.0,1058.0,228.0,778.0,245.0,3.3534,180500.0,<1H OCEAN --118.61,34.2,16.0,1718.0,467.0,896.0,475.0,3.6296,160900.0,<1H OCEAN --118.61,34.21,33.0,2609.0,431.0,1208.0,406.0,5.4527,227100.0,<1H OCEAN --118.62,34.2,23.0,3098.0,542.0,1486.0,492.0,5.7613,235800.0,<1H OCEAN --118.63,34.21,31.0,3952.0,647.0,1762.0,588.0,5.5709,244800.0,<1H OCEAN --118.64,34.22,16.0,4312.0,574.0,1902.0,574.0,8.4438,390000.0,<1H OCEAN --118.65,34.21,5.0,5429.0,665.0,2315.0,687.0,9.6465,500001.0,<1H OCEAN --118.65,34.2,23.0,7480.0,1084.0,3037.0,1058.0,6.9223,338400.0,<1H OCEAN --118.62,34.2,32.0,3233.0,553.0,1678.0,545.0,5.0025,234900.0,<1H OCEAN --118.63,34.2,19.0,7411.0,1045.0,2814.0,950.0,6.7785,336100.0,<1H OCEAN --118.59,34.21,17.0,2737.0,868.0,2924.0,785.0,2.5797,183500.0,<1H OCEAN --118.59,34.2,21.0,1789.0,,2300.0,677.0,2.754,179800.0,<1H OCEAN --118.6,34.2,10.0,2869.0,941.0,2162.0,829.0,3.2297,150000.0,<1H OCEAN --118.6,34.21,19.0,2581.0,857.0,2004.0,784.0,2.6159,182300.0,<1H OCEAN --118.56,34.2,35.0,1770.0,362.0,1083.0,355.0,5.0483,221000.0,<1H OCEAN --118.57,34.21,36.0,878.0,167.0,499.0,179.0,4.1181,190400.0,<1H OCEAN --118.57,34.2,18.0,7157.0,1869.0,4642.0,1699.0,3.1818,208000.0,<1H OCEAN --118.58,34.2,21.0,2979.0,744.0,1824.0,692.0,3.5,223700.0,<1H OCEAN --118.56,34.19,36.0,2600.0,441.0,1246.0,426.0,4.1111,215600.0,<1H OCEAN --118.57,34.2,36.0,2559.0,469.0,1358.0,445.0,4.5568,201500.0,<1H OCEAN --118.57,34.2,33.0,1759.0,311.0,943.0,315.0,5.223,209200.0,<1H OCEAN --118.58,34.2,35.0,1558.0,267.0,793.0,249.0,5.1463,220200.0,<1H OCEAN --118.58,34.2,35.0,1323.0,228.0,756.0,216.0,4.233,221300.0,<1H OCEAN --118.56,34.19,34.0,2185.0,372.0,986.0,347.0,4.8125,266700.0,<1H OCEAN --118.58,34.19,35.0,2329.0,399.0,966.0,336.0,3.8839,224900.0,<1H OCEAN --118.58,34.19,27.0,4286.0,1071.0,2863.0,1033.0,3.3125,222800.0,<1H OCEAN --118.58,34.19,15.0,3061.0,1079.0,2173.0,1078.0,2.85,187500.0,<1H OCEAN --118.58,34.18,28.0,908.0,142.0,368.0,143.0,5.6159,340500.0,<1H OCEAN --118.62,34.2,29.0,2421.0,402.0,1120.0,388.0,5.0309,244800.0,<1H OCEAN --118.62,34.18,25.0,3124.0,468.0,1241.0,439.0,6.4044,333100.0,<1H OCEAN --118.62,34.19,35.0,1934.0,307.0,905.0,315.0,5.5101,267400.0,<1H OCEAN --118.61,34.2,29.0,1673.0,284.0,794.0,270.0,5.5191,245800.0,<1H OCEAN --118.61,34.19,28.0,3824.0,749.0,1790.0,701.0,4.1154,246400.0,<1H OCEAN --118.61,34.19,34.0,703.0,127.0,369.0,127.0,4.3125,210100.0,<1H OCEAN --118.6,34.19,16.0,14912.0,4183.0,5105.0,3302.0,2.8312,213900.0,<1H OCEAN --118.63,34.19,32.0,3568.0,591.0,1741.0,563.0,5.1529,259600.0,<1H OCEAN --118.63,34.18,32.0,1646.0,242.0,697.0,233.0,6.6689,433000.0,<1H OCEAN --118.64,34.19,30.0,2399.0,373.0,1062.0,377.0,6.0094,245600.0,<1H OCEAN --118.64,34.19,33.0,3017.0,494.0,1423.0,470.0,5.6163,248400.0,<1H OCEAN --118.64,34.18,33.0,3808.0,623.0,1784.0,615.0,5.1641,263400.0,<1H OCEAN --118.64,34.19,28.0,3274.0,571.0,1424.0,521.0,4.4167,247300.0,<1H OCEAN --118.65,34.18,27.0,1793.0,339.0,1016.0,326.0,4.925,240300.0,<1H OCEAN --118.65,34.19,27.0,2772.0,511.0,1346.0,497.0,5.2016,243000.0,<1H OCEAN --118.66,34.19,23.0,7544.0,1031.0,3221.0,1043.0,7.642,374900.0,<1H OCEAN --118.63,34.17,33.0,4769.0,787.0,2019.0,743.0,5.5798,338200.0,<1H OCEAN --118.64,34.17,26.0,6767.0,903.0,2574.0,883.0,7.7846,409000.0,<1H OCEAN --118.57,34.18,36.0,2981.0,441.0,1243.0,413.0,6.5304,439800.0,<1H OCEAN --118.57,34.17,35.0,2072.0,318.0,908.0,342.0,6.0928,327300.0,<1H OCEAN --118.58,34.17,29.0,3393.0,574.0,1471.0,587.0,6.2064,334900.0,<1H OCEAN --118.59,34.18,7.0,11853.0,2691.0,4404.0,2447.0,4.2009,271300.0,<1H OCEAN --118.61,34.17,19.0,5944.0,1345.0,2372.0,1250.0,3.8819,328900.0,<1H OCEAN --118.62,34.17,32.0,1491.0,355.0,756.0,296.0,3.0404,262800.0,<1H OCEAN --118.62,34.17,34.0,3268.0,538.0,1463.0,519.0,6.8482,308300.0,<1H OCEAN --118.63,34.18,33.0,5252.0,760.0,2041.0,730.0,6.7977,389700.0,<1H OCEAN --118.65,34.18,26.0,4607.0,656.0,1769.0,643.0,7.4918,367600.0,<1H OCEAN --118.66,34.18,25.0,6612.0,857.0,2519.0,843.0,8.3912,419000.0,<1H OCEAN --118.61,34.17,31.0,1689.0,362.0,705.0,360.0,4.0,278500.0,<1H OCEAN --118.61,34.15,32.0,4491.0,815.0,1696.0,749.0,4.9102,319100.0,<1H OCEAN --118.61,34.16,29.0,4364.0,647.0,1550.0,624.0,6.8107,367400.0,<1H OCEAN --118.63,34.16,33.0,2896.0,455.0,1116.0,411.0,6.0192,347700.0,<1H OCEAN --118.63,34.16,30.0,3346.0,487.0,1296.0,495.0,7.457,392700.0,<1H OCEAN --118.62,34.15,26.0,5661.0,791.0,2493.0,780.0,7.9814,409900.0,<1H OCEAN --118.57,34.17,31.0,1950.0,383.0,870.0,357.0,3.1875,500001.0,<1H OCEAN --118.58,34.17,18.0,6476.0,1082.0,2413.0,958.0,5.6327,500001.0,<1H OCEAN --118.59,34.17,36.0,1887.0,359.0,761.0,329.0,5.4847,296000.0,<1H OCEAN --118.6,34.16,37.0,3441.0,584.0,1283.0,544.0,4.1656,313100.0,<1H OCEAN --118.6,34.16,32.0,3999.0,667.0,1628.0,631.0,6.0794,338500.0,<1H OCEAN --118.57,34.15,22.0,5791.0,706.0,2059.0,673.0,10.9201,500001.0,<1H OCEAN --118.58,34.15,21.0,3856.0,547.0,1422.0,535.0,8.4196,450700.0,<1H OCEAN --118.59,34.15,29.0,2023.0,330.0,747.0,304.0,6.7694,369700.0,<1H OCEAN --118.6,34.15,28.0,4570.0,744.0,1693.0,695.0,6.14,361900.0,<1H OCEAN --118.59,34.14,19.0,1303.0,155.0,450.0,145.0,10.5511,483100.0,<1H OCEAN --118.49,34.18,31.0,3073.0,674.0,1486.0,684.0,4.8984,311700.0,<1H OCEAN --118.51,34.18,37.0,1893.0,365.0,911.0,324.0,4.8036,295300.0,<1H OCEAN --118.51,34.17,31.0,3252.0,834.0,1411.0,760.0,3.1885,219000.0,<1H OCEAN --118.52,34.18,43.0,1700.0,380.0,930.0,349.0,3.675,213100.0,<1H OCEAN --118.52,34.18,46.0,2082.0,438.0,1047.0,393.0,3.6534,216000.0,<1H OCEAN --118.52,34.18,42.0,1611.0,410.0,879.0,386.0,3.1923,221800.0,<1H OCEAN --118.53,34.17,18.0,6430.0,1412.0,2897.0,1348.0,3.855,243800.0,<1H OCEAN --118.54,34.17,11.0,1080.0,174.0,386.0,160.0,6.1274,315900.0,<1H OCEAN --118.55,34.18,32.0,3011.0,529.0,1287.0,525.0,5.0605,311000.0,<1H OCEAN --118.56,34.18,39.0,1819.0,291.0,770.0,278.0,5.4088,457300.0,<1H OCEAN --118.54,34.18,17.0,7214.0,1994.0,4100.0,1823.0,3.0943,174500.0,<1H OCEAN --118.53,34.18,16.0,7194.0,1976.0,3687.0,1894.0,3.1887,189300.0,<1H OCEAN --118.54,34.17,34.0,2458.0,433.0,1034.0,373.0,5.6738,443600.0,<1H OCEAN --118.54,34.17,25.0,3352.0,891.0,1815.0,860.0,2.8528,425000.0,<1H OCEAN --118.55,34.17,36.0,2127.0,297.0,761.0,274.0,7.8392,500001.0,<1H OCEAN --118.56,34.17,35.0,2987.0,391.0,1244.0,387.0,7.1322,500001.0,<1H OCEAN --118.52,34.17,20.0,17377.0,4457.0,7450.0,4204.0,3.2154,259600.0,<1H OCEAN --118.52,34.16,39.0,2693.0,478.0,1219.0,435.0,5.17,335400.0,<1H OCEAN --118.53,34.16,32.0,3554.0,762.0,1623.0,750.0,3.6141,290600.0,<1H OCEAN --118.51,34.16,23.0,11154.0,1995.0,4076.0,1809.0,5.4609,500001.0,<1H OCEAN --118.48,34.16,32.0,2108.0,309.0,769.0,274.0,8.7172,500001.0,<1H OCEAN --118.49,34.16,37.0,3333.0,488.0,1171.0,485.0,6.4958,500001.0,<1H OCEAN --118.5,34.16,34.0,3547.0,523.0,1187.0,500.0,7.139,424000.0,<1H OCEAN --118.5,34.15,33.0,3104.0,387.0,1111.0,376.0,13.4196,500001.0,<1H OCEAN --118.5,34.17,37.0,880.0,,369.0,155.0,4.1429,303600.0,<1H OCEAN --118.49,34.15,33.0,2829.0,360.0,1010.0,363.0,10.3587,500001.0,<1H OCEAN --118.49,34.14,28.0,3539.0,441.0,1190.0,421.0,10.6796,500001.0,<1H OCEAN --118.49,34.13,24.0,4394.0,,1443.0,528.0,11.2979,500001.0,<1H OCEAN --118.51,34.14,28.0,6748.0,904.0,2431.0,876.0,12.8879,500001.0,<1H OCEAN --118.53,34.14,28.0,6920.0,906.0,2515.0,860.0,9.2189,500001.0,<1H OCEAN --118.54,34.15,26.0,10111.0,1295.0,3599.0,1257.0,10.2292,500001.0,<1H OCEAN --118.56,34.14,23.0,9657.0,1189.0,3585.0,1162.0,10.4399,500001.0,<1H OCEAN --118.43,34.15,28.0,6270.0,1706.0,2549.0,1497.0,3.2241,295800.0,<1H OCEAN --118.43,34.15,42.0,1293.0,214.0,459.0,217.0,7.672,467600.0,<1H OCEAN --118.43,34.15,26.0,2900.0,667.0,1090.0,590.0,3.7125,447400.0,<1H OCEAN --118.43,34.15,31.0,1856.0,425.0,795.0,426.0,2.8448,360600.0,<1H OCEAN --118.44,34.15,29.0,5474.0,1457.0,2352.0,1326.0,3.415,382500.0,<1H OCEAN --118.44,34.15,44.0,1778.0,251.0,641.0,251.0,10.0549,500001.0,<1H OCEAN --118.44,34.15,15.0,4420.0,1076.0,1669.0,1016.0,4.6375,359100.0,<1H OCEAN --118.44,34.15,37.0,1335.0,286.0,539.0,279.0,3.2813,301700.0,<1H OCEAN --118.44,34.15,38.0,1387.0,337.0,713.0,343.0,2.9352,304500.0,<1H OCEAN --118.45,34.16,22.0,7828.0,2038.0,3303.0,1922.0,3.6171,318300.0,<1H OCEAN --118.45,34.15,10.0,1091.0,260.0,517.0,266.0,4.1727,332600.0,<1H OCEAN --118.45,34.15,20.0,3876.0,799.0,1334.0,753.0,4.5656,478400.0,<1H OCEAN --118.46,34.16,38.0,1495.0,300.0,598.0,280.0,3.4698,265400.0,<1H OCEAN --118.46,34.16,16.0,4590.0,1200.0,2195.0,1139.0,3.8273,334900.0,<1H OCEAN --118.47,34.15,7.0,6306.0,1473.0,2381.0,1299.0,4.642,457300.0,<1H OCEAN --118.47,34.16,30.0,3823.0,740.0,1449.0,612.0,4.6,392500.0,<1H OCEAN --118.47,34.15,43.0,804.0,117.0,267.0,110.0,8.2269,500001.0,<1H OCEAN --118.48,34.15,31.0,2536.0,429.0,990.0,424.0,5.4591,495500.0,<1H OCEAN --118.48,34.16,30.0,3507.0,536.0,1427.0,525.0,6.7082,500001.0,<1H OCEAN --118.48,34.14,31.0,9320.0,1143.0,2980.0,1109.0,10.3599,500001.0,<1H OCEAN --118.46,34.14,34.0,5264.0,771.0,1738.0,753.0,8.8115,500001.0,<1H OCEAN --118.47,34.14,36.0,2873.0,420.0,850.0,379.0,8.153,500001.0,<1H OCEAN --118.47,34.14,34.0,3646.0,610.0,1390.0,607.0,7.629,500001.0,<1H OCEAN --118.43,34.14,44.0,1693.0,239.0,498.0,216.0,10.9237,500001.0,<1H OCEAN --118.43,34.13,37.0,4400.0,695.0,1521.0,666.0,8.2954,500001.0,<1H OCEAN --118.45,34.14,33.0,1741.0,274.0,588.0,267.0,7.9625,490800.0,<1H OCEAN --118.35,34.15,52.0,1680.0,238.0,493.0,211.0,9.042,500001.0,<1H OCEAN --118.36,34.15,41.0,3545.0,698.0,1221.0,651.0,4.3,500001.0,<1H OCEAN --118.36,34.15,34.0,3659.0,921.0,1338.0,835.0,3.6202,366100.0,<1H OCEAN --118.37,34.15,23.0,4604.0,1319.0,2391.0,1227.0,3.1373,263100.0,<1H OCEAN --118.37,34.15,29.0,2630.0,617.0,1071.0,573.0,3.3669,376100.0,<1H OCEAN --118.38,34.16,42.0,2358.0,546.0,1065.0,523.0,3.1289,320600.0,<1H OCEAN --118.38,34.15,36.0,2933.0,619.0,1115.0,579.0,4.3036,365900.0,<1H OCEAN --118.39,34.15,29.0,3110.0,650.0,1212.0,642.0,4.2031,394400.0,<1H OCEAN --118.39,34.15,29.0,917.0,181.0,379.0,183.0,3.4612,425000.0,<1H OCEAN --118.39,34.16,20.0,4084.0,1062.0,1637.0,987.0,3.2388,256300.0,<1H OCEAN --118.4,34.15,31.0,3881.0,909.0,1535.0,846.0,3.0398,369100.0,<1H OCEAN --118.41,34.15,33.0,4032.0,868.0,1695.0,869.0,4.3468,425900.0,<1H OCEAN --118.42,34.15,48.0,680.0,131.0,268.0,126.0,4.615,371400.0,<1H OCEAN --118.42,34.15,18.0,1880.0,420.0,681.0,333.0,4.3214,372300.0,<1H OCEAN --118.42,34.15,31.0,1861.0,430.0,736.0,360.0,5.2853,355900.0,<1H OCEAN --118.42,34.16,17.0,277.0,70.0,119.0,59.0,4.0208,341700.0,<1H OCEAN --118.42,34.16,46.0,54.0,9.0,20.0,6.0,0.536,375000.0,<1H OCEAN --118.4,34.15,41.0,2394.0,500.0,837.0,417.0,4.3889,380400.0,<1H OCEAN --118.4,34.15,44.0,2515.0,510.0,967.0,484.0,5.0754,374500.0,<1H OCEAN --118.41,34.15,24.0,3891.0,866.0,1568.0,830.0,4.1656,364700.0,<1H OCEAN --118.41,34.15,46.0,1628.0,259.0,500.0,258.0,6.083,424000.0,<1H OCEAN --118.36,34.14,30.0,1376.0,317.0,629.0,320.0,3.6823,295200.0,<1H OCEAN --118.37,34.14,8.0,4382.0,1560.0,2138.0,1411.0,3.5714,197900.0,<1H OCEAN --118.37,34.14,21.0,4670.0,1161.0,1914.0,1094.0,3.7986,367700.0,<1H OCEAN --118.38,34.14,42.0,1253.0,225.0,492.0,224.0,7.7112,386700.0,<1H OCEAN --118.39,34.14,19.0,5076.0,1034.0,2021.0,960.0,5.5683,309200.0,<1H OCEAN --118.39,34.15,36.0,2696.0,713.0,905.0,659.0,3.1146,373500.0,<1H OCEAN --118.35,34.13,39.0,1610.0,278.0,511.0,278.0,4.3333,385900.0,<1H OCEAN --118.34,34.12,41.0,3257.0,679.0,1237.0,638.0,4.2415,409600.0,<1H OCEAN --118.36,34.13,36.0,6871.0,1180.0,2216.0,1130.0,8.0499,495600.0,<1H OCEAN --118.37,34.14,23.0,1883.0,512.0,774.0,478.0,3.5096,396400.0,<1H OCEAN --118.37,34.13,28.0,4287.0,627.0,1498.0,615.0,8.5677,500001.0,<1H OCEAN --118.39,34.14,34.0,4624.0,781.0,1572.0,719.0,6.5533,500001.0,<1H OCEAN --118.38,34.14,40.0,1965.0,354.0,666.0,357.0,6.0876,483800.0,<1H OCEAN --118.4,34.13,32.0,8262.0,1156.0,2712.0,1125.0,10.5575,500001.0,<1H OCEAN --118.4,34.14,52.0,1695.0,281.0,595.0,264.0,6.0678,399300.0,<1H OCEAN --118.4,34.14,45.0,417.0,89.0,187.0,88.0,5.1377,360700.0,<1H OCEAN --118.41,34.14,33.0,778.0,143.0,258.0,130.0,5.738,497600.0,<1H OCEAN --118.42,34.14,27.0,3990.0,892.0,1417.0,800.0,4.0439,500001.0,<1H OCEAN --118.42,34.13,38.0,3830.0,518.0,1292.0,516.0,12.7823,500001.0,<1H OCEAN --118.22,34.14,52.0,2298.0,406.0,1203.0,387.0,5.5291,274600.0,<1H OCEAN --118.22,34.14,52.0,1388.0,271.0,735.0,239.0,3.7404,247700.0,<1H OCEAN --118.2,34.14,52.0,3800.0,646.0,1842.0,620.0,5.5524,293900.0,<1H OCEAN --118.19,34.14,46.0,2387.0,488.0,1181.0,456.0,3.6058,257900.0,<1H OCEAN --118.19,34.14,38.0,1826.0,300.0,793.0,297.0,5.2962,291500.0,<1H OCEAN --118.23,34.14,39.0,277.0,89.0,182.0,91.0,2.3958,175000.0,<1H OCEAN --118.22,34.14,50.0,3657.0,708.0,1725.0,644.0,5.5456,258100.0,<1H OCEAN --118.22,34.13,35.0,2983.0,526.0,1614.0,543.0,5.7794,272400.0,<1H OCEAN --118.2,34.14,52.0,2090.0,466.0,1219.0,390.0,4.0909,204200.0,<1H OCEAN --118.21,34.14,44.0,1681.0,407.0,1105.0,387.0,3.2222,186500.0,<1H OCEAN --118.21,34.14,25.0,1908.0,628.0,1412.0,588.0,2.2267,189800.0,<1H OCEAN --118.2,34.14,51.0,1941.0,378.0,1012.0,371.0,3.9375,217000.0,<1H OCEAN --118.19,34.14,47.0,2525.0,523.0,1514.0,498.0,4.3359,209200.0,<1H OCEAN --118.19,34.13,52.0,2012.0,458.0,1314.0,434.0,3.925,180400.0,<1H OCEAN --118.2,34.13,52.0,2035.0,459.0,2589.0,438.0,3.5349,193600.0,<1H OCEAN --118.21,34.13,52.0,2465.0,611.0,1433.0,570.0,3.25,214200.0,<1H OCEAN --118.22,34.13,47.0,1585.0,420.0,949.0,366.0,2.7098,173800.0,<1H OCEAN --118.22,34.13,52.0,791.0,174.0,501.0,162.0,3.3542,178100.0,<1H OCEAN --118.18,34.13,52.0,2228.0,475.0,1311.0,452.0,3.5341,182100.0,<1H OCEAN --118.18,34.12,52.0,1081.0,311.0,904.0,283.0,1.9219,165100.0,<1H OCEAN --118.18,34.12,45.0,2397.0,488.0,1569.0,471.0,4.21,167900.0,<1H OCEAN --118.17,34.12,35.0,2568.0,672.0,1696.0,605.0,2.9154,169200.0,<1H OCEAN --118.18,34.12,29.0,2640.0,737.0,1795.0,655.0,2.369,173400.0,<1H OCEAN --118.17,34.12,30.0,3376.0,720.0,1990.0,725.0,3.7813,232000.0,<1H OCEAN --118.19,34.13,50.0,1309.0,302.0,883.0,293.0,3.1287,198000.0,<1H OCEAN --118.19,34.12,52.0,679.0,132.0,483.0,163.0,4.2344,162500.0,<1H OCEAN --118.19,34.12,41.0,2591.0,682.0,2366.0,583.0,2.3071,146400.0,<1H OCEAN --118.19,34.12,44.0,1219.0,324.0,1036.0,282.0,4.0417,170600.0,<1H OCEAN --118.19,34.12,36.0,2833.0,720.0,2148.0,709.0,2.7012,172100.0,<1H OCEAN --118.2,34.13,30.0,3369.0,824.0,2032.0,795.0,4.0052,196400.0,<1H OCEAN --118.2,34.13,50.0,2929.0,588.0,1931.0,574.0,3.3438,173600.0,<1H OCEAN --118.2,34.12,52.0,1580.0,426.0,1462.0,406.0,3.3326,167600.0,<1H OCEAN --118.2,34.12,41.0,1908.0,503.0,1557.0,453.0,2.9194,162000.0,<1H OCEAN --118.21,34.12,52.0,1590.0,360.0,1127.0,321.0,3.4625,173900.0,<1H OCEAN --118.21,34.12,41.0,1904.0,514.0,1666.0,498.0,3.6845,175800.0,<1H OCEAN --118.21,34.12,52.0,1301.0,389.0,1189.0,361.0,2.5139,190000.0,<1H OCEAN --118.2,34.11,52.0,678.0,173.0,791.0,186.0,4.0625,171300.0,<1H OCEAN --118.2,34.11,46.0,3659.0,1068.0,4153.0,993.0,2.5211,162900.0,<1H OCEAN --118.2,34.11,52.0,1901.0,525.0,1856.0,480.0,3.0,156400.0,<1H OCEAN --118.2,34.12,44.0,1565.0,398.0,1500.0,407.0,2.8125,155600.0,<1H OCEAN --118.19,34.12,46.0,3387.0,820.0,2833.0,813.0,2.987,176900.0,<1H OCEAN --118.19,34.11,40.0,1266.0,348.0,1032.0,315.0,2.1667,150000.0,<1H OCEAN --118.19,34.12,35.0,2524.0,749.0,2487.0,679.0,2.4932,167700.0,<1H OCEAN --118.18,34.11,33.0,1523.0,391.0,753.0,298.0,2.6591,183800.0,<1H OCEAN --118.18,34.11,44.0,1346.0,398.0,1204.0,344.0,2.3984,152200.0,<1H OCEAN --118.19,34.11,38.0,1158.0,309.0,1051.0,322.0,2.286,169300.0,<1H OCEAN --118.19,34.11,26.0,1638.0,457.0,1155.0,437.0,3.4227,143800.0,<1H OCEAN --118.19,34.1,42.0,1577.0,379.0,1317.0,378.0,3.2121,153900.0,<1H OCEAN --118.2,34.11,36.0,1441.0,534.0,1809.0,500.0,2.1793,185700.0,<1H OCEAN --118.2,34.11,37.0,2040.0,611.0,1698.0,545.0,1.9355,166300.0,<1H OCEAN --118.2,34.1,30.0,3643.0,1197.0,4336.0,1163.0,2.07,154500.0,<1H OCEAN --118.21,34.11,32.0,2759.0,499.0,1661.0,533.0,4.3812,228200.0,<1H OCEAN --118.21,34.1,40.0,1684.0,316.0,795.0,330.0,5.2723,218300.0,<1H OCEAN --118.21,34.1,47.0,5077.0,1271.0,3348.0,1106.0,3.0377,186800.0,<1H OCEAN --118.22,34.1,35.0,4003.0,788.0,2785.0,764.0,4.1213,252100.0,<1H OCEAN --118.23,34.1,38.0,1051.0,249.0,799.0,229.0,2.712,143800.0,<1H OCEAN --118.23,34.1,46.0,2483.0,587.0,2121.0,553.0,2.2788,152900.0,<1H OCEAN --118.21,34.1,36.0,2000.0,533.0,1234.0,535.0,3.7437,241700.0,<1H OCEAN --118.21,34.09,34.0,1660.0,412.0,1678.0,382.0,2.7708,148200.0,<1H OCEAN --118.22,34.1,33.0,1903.0,386.0,1187.0,340.0,4.0469,196600.0,<1H OCEAN --118.23,34.1,41.0,1353.0,379.0,1536.0,416.0,2.1687,157000.0,<1H OCEAN --118.22,34.09,42.0,1706.0,488.0,1941.0,447.0,2.5213,149700.0,<1H OCEAN --118.22,34.09,36.0,1427.0,415.0,1835.0,410.0,2.48,138900.0,<1H OCEAN --118.22,34.09,45.0,1072.0,275.0,996.0,243.0,2.8194,165000.0,<1H OCEAN --118.23,34.09,41.0,438.0,201.0,690.0,161.0,2.0476,181300.0,<1H OCEAN --118.23,34.13,47.0,1162.0,235.0,781.0,268.0,4.6528,244400.0,<1H OCEAN --118.23,34.13,48.0,737.0,166.0,462.0,131.0,3.5893,212500.0,<1H OCEAN --118.22,34.13,40.0,2749.0,580.0,1375.0,511.0,4.825,205800.0,<1H OCEAN --118.23,34.13,34.0,609.0,149.0,407.0,145.0,4.5766,185800.0,<1H OCEAN --118.23,34.13,48.0,1308.0,,835.0,294.0,4.2891,214800.0,<1H OCEAN --118.23,34.13,37.0,1799.0,426.0,1088.0,417.0,2.975,244500.0,<1H OCEAN --118.22,34.12,28.0,3306.0,1025.0,2670.0,942.0,3.0919,185400.0,<1H OCEAN --118.21,34.12,35.0,1937.0,439.0,1523.0,412.0,3.5638,170500.0,<1H OCEAN --118.22,34.11,36.0,2870.0,529.0,1371.0,565.0,5.2083,220900.0,<1H OCEAN --118.22,34.12,37.0,1298.0,242.0,750.0,255.0,5.2049,240800.0,<1H OCEAN --118.23,34.12,28.0,1546.0,465.0,974.0,408.0,2.2843,183800.0,<1H OCEAN --118.24,34.12,41.0,1213.0,301.0,801.0,300.0,3.1806,204200.0,<1H OCEAN --118.23,34.12,32.0,2094.0,491.0,1413.0,479.0,4.5089,221100.0,<1H OCEAN --118.23,34.11,31.0,1021.0,191.0,495.0,191.0,5.5051,223500.0,<1H OCEAN --118.23,34.11,35.0,4148.0,971.0,3220.0,892.0,3.3389,187100.0,<1H OCEAN --118.25,34.12,11.0,1281.0,418.0,1584.0,330.0,2.8889,153100.0,<1H OCEAN --118.24,34.12,29.0,2904.0,892.0,3320.0,765.0,2.6111,168800.0,<1H OCEAN --118.24,34.12,34.0,80.0,26.0,125.0,35.0,0.8907,154200.0,<1H OCEAN --118.24,34.11,50.0,2141.0,451.0,1777.0,426.0,2.7679,178800.0,<1H OCEAN --118.24,34.11,39.0,1148.0,348.0,1161.0,333.0,2.2167,176700.0,<1H OCEAN --118.23,34.11,33.0,2612.0,646.0,2496.0,606.0,3.133,156000.0,<1H OCEAN --118.26,34.12,45.0,2839.0,698.0,1768.0,653.0,3.1306,214000.0,<1H OCEAN --118.26,34.11,47.0,2183.0,510.0,1445.0,503.0,3.6667,210900.0,<1H OCEAN --118.25,34.11,43.0,2230.0,583.0,1667.0,543.0,2.8667,217800.0,<1H OCEAN --118.25,34.11,43.0,2222.0,635.0,1817.0,606.0,2.7466,208900.0,<1H OCEAN --118.25,34.11,39.0,1415.0,369.0,1467.0,351.0,3.015,156300.0,<1H OCEAN --118.24,34.1,42.0,1525.0,456.0,1688.0,432.0,3.1691,141300.0,<1H OCEAN --118.25,34.11,52.0,125.0,42.0,99.0,40.0,3.4375,170000.0,<1H OCEAN --118.25,34.1,42.0,598.0,147.0,312.0,144.0,2.625,164300.0,<1H OCEAN --118.25,34.1,42.0,4198.0,956.0,1935.0,878.0,3.7184,277300.0,<1H OCEAN --118.26,34.11,52.0,1740.0,402.0,749.0,335.0,3.5673,270700.0,<1H OCEAN --118.27,34.14,29.0,3768.0,1211.0,2320.0,1030.0,2.7685,204500.0,<1H OCEAN --118.27,34.13,47.0,1375.0,359.0,1512.0,418.0,2.1071,208900.0,<1H OCEAN --118.27,34.13,46.0,1613.0,396.0,966.0,416.0,2.9392,230300.0,<1H OCEAN --118.27,34.11,36.0,1832.0,539.0,934.0,486.0,3.0521,276600.0,<1H OCEAN --118.27,34.11,39.0,3825.0,916.0,1378.0,746.0,4.4094,352600.0,<1H OCEAN --118.28,34.11,38.0,4453.0,1156.0,1830.0,1099.0,3.6181,495600.0,<1H OCEAN --118.28,34.11,45.0,1607.0,331.0,633.0,332.0,3.1445,438300.0,<1H OCEAN --118.28,34.12,50.0,2384.0,312.0,836.0,337.0,12.8763,500001.0,<1H OCEAN --118.26,34.12,52.0,1942.0,476.0,1375.0,477.0,2.7348,209100.0,<1H OCEAN --118.26,34.12,52.0,2290.0,520.0,1278.0,485.0,3.8393,238200.0,<1H OCEAN --118.27,34.12,50.0,2037.0,440.0,1089.0,417.0,3.575,230600.0,<1H OCEAN --118.29,34.11,30.0,2774.0,570.0,1076.0,580.0,5.296,500001.0,<1H OCEAN --118.29,34.11,40.0,2681.0,737.0,1144.0,669.0,3.0461,264300.0,<1H OCEAN --118.29,34.1,39.0,2196.0,582.0,1165.0,538.0,2.9417,254200.0,<1H OCEAN --118.29,34.1,43.0,1711.0,443.0,1190.0,429.0,3.5172,265500.0,<1H OCEAN --118.29,34.11,24.0,3696.0,1125.0,1685.0,1031.0,2.3789,266700.0,<1H OCEAN --118.29,34.11,49.0,2850.0,379.0,1113.0,380.0,12.9591,500001.0,<1H OCEAN --118.29,34.11,48.0,1448.0,295.0,681.0,287.0,3.2333,436400.0,<1H OCEAN --118.3,34.11,52.0,3136.0,675.0,1213.0,606.0,3.5806,391900.0,<1H OCEAN --118.3,34.1,37.0,5305.0,1980.0,3895.0,1874.0,2.0672,283300.0,<1H OCEAN --118.3,34.11,25.0,1590.0,218.0,568.0,206.0,8.4389,500001.0,<1H OCEAN --118.3,34.11,52.0,1954.0,245.0,645.0,237.0,6.9391,500001.0,<1H OCEAN --118.31,34.11,52.0,1875.0,303.0,735.0,293.0,5.8659,433300.0,<1H OCEAN --118.31,34.12,39.0,3895.0,561.0,1271.0,536.0,8.0073,500001.0,<1H OCEAN --118.31,34.13,40.0,2822.0,443.0,907.0,414.0,7.2692,498700.0,<1H OCEAN --118.32,34.12,52.0,3410.0,800.0,1218.0,783.0,4.15,393500.0,<1H OCEAN --118.32,34.11,42.0,2462.0,543.0,857.0,482.0,4.0833,434400.0,<1H OCEAN --118.32,34.11,33.0,5135.0,1450.0,2404.0,1292.0,3.2462,435700.0,<1H OCEAN --118.32,34.11,48.0,4472.0,1579.0,2796.0,1397.0,2.3974,410700.0,<1H OCEAN --118.33,34.11,38.0,3495.0,1100.0,1939.0,994.0,2.2148,438300.0,<1H OCEAN --118.33,34.11,48.0,1601.0,464.0,784.0,461.0,3.0642,342900.0,<1H OCEAN --118.33,34.11,37.0,2330.0,434.0,846.0,457.0,8.2335,430200.0,<1H OCEAN --118.32,34.13,34.0,1856.0,273.0,540.0,264.0,4.0833,500001.0,<1H OCEAN --118.33,34.12,23.0,1894.0,416.0,769.0,392.0,6.0352,500001.0,<1H OCEAN --118.34,34.13,45.0,2375.0,417.0,751.0,410.0,6.6739,500001.0,<1H OCEAN --118.32,34.14,23.0,4574.0,1423.0,1624.0,995.0,4.0965,500001.0,<1H OCEAN --118.34,34.11,40.0,5485.0,1242.0,2034.0,1133.0,3.6974,500001.0,<1H OCEAN --118.35,34.1,26.0,3977.0,1050.0,1720.0,935.0,3.358,364500.0,<1H OCEAN --118.36,34.1,52.0,1295.0,281.0,578.0,273.0,2.976,405100.0,<1H OCEAN --118.36,34.1,52.0,1096.0,247.0,423.0,230.0,3.0179,500001.0,<1H OCEAN --118.35,34.1,18.0,7432.0,2793.0,3596.0,2270.0,2.8036,225000.0,<1H OCEAN --118.35,34.1,16.0,2930.0,1038.0,1648.0,980.0,2.6458,372200.0,<1H OCEAN --118.35,34.1,20.0,2745.0,782.0,1161.0,739.0,3.9044,436400.0,<1H OCEAN --118.35,34.1,18.0,4109.0,1301.0,2103.0,1116.0,2.325,250000.0,<1H OCEAN --118.35,34.1,24.0,5477.0,1803.0,2863.0,1755.0,1.845,237500.0,<1H OCEAN --118.34,34.11,51.0,937.0,348.0,527.0,333.0,4.3571,468800.0,<1H OCEAN --118.34,34.1,29.0,3193.0,1452.0,2039.0,1265.0,1.8209,500001.0,<1H OCEAN --118.34,34.1,24.0,1996.0,791.0,1215.0,672.0,1.5429,325000.0,<1H OCEAN --118.34,34.1,28.0,2223.0,752.0,1271.0,684.0,2.5434,232100.0,<1H OCEAN --118.33,34.1,30.0,5293.0,2446.0,4123.0,2127.0,1.51,187500.0,<1H OCEAN --118.33,34.1,43.0,2732.0,1646.0,3049.0,1429.0,1.3157,333300.0,<1H OCEAN --118.31,34.1,40.0,4984.0,2158.0,4828.0,2028.0,1.6903,350000.0,<1H OCEAN --118.32,34.1,28.0,1759.0,716.0,1463.0,620.0,1.7306,450000.0,<1H OCEAN --118.3,34.1,35.0,7517.0,2961.0,5899.0,2769.0,1.9354,340000.0,<1H OCEAN --118.3,34.1,25.0,3926.0,1715.0,4865.0,1612.0,1.6112,262500.0,<1H OCEAN --118.31,34.1,36.0,2288.0,1033.0,3030.0,890.0,1.5328,250000.0,<1H OCEAN --118.31,34.1,33.0,766.0,347.0,918.0,305.0,1.705,350000.0,<1H OCEAN --118.33,34.1,48.0,1116.0,524.0,1610.0,483.0,1.625,237500.0,<1H OCEAN --118.33,34.1,45.0,1913.0,696.0,1552.0,611.0,2.0888,237500.0,<1H OCEAN --118.32,34.1,43.0,1615.0,734.0,1460.0,644.0,1.4005,193800.0,<1H OCEAN --118.32,34.09,34.0,2473.0,1171.0,2655.0,1083.0,1.6331,162500.0,<1H OCEAN --118.33,34.09,30.0,1679.0,682.0,1445.0,579.0,2.1403,200000.0,<1H OCEAN --118.33,34.1,29.0,732.0,288.0,691.0,278.0,2.1866,250000.0,<1H OCEAN --118.31,34.1,34.0,399.0,141.0,482.0,134.0,1.625,67500.0,<1H OCEAN --118.31,34.09,34.0,2065.0,839.0,2626.0,775.0,1.8214,211100.0,<1H OCEAN --118.31,34.09,28.0,720.0,267.0,891.0,265.0,1.8977,100000.0,<1H OCEAN --118.31,34.09,37.0,773.0,,835.0,312.0,1.8576,193800.0,<1H OCEAN --118.32,34.09,32.0,563.0,191.0,626.0,185.0,2.0341,250000.0,<1H OCEAN --118.32,34.09,27.0,210.0,98.0,332.0,112.0,2.5556,175000.0,<1H OCEAN --118.32,34.1,36.0,1655.0,690.0,1957.0,633.0,1.7325,221900.0,<1H OCEAN --118.32,34.09,34.0,1478.0,675.0,1976.0,653.0,2.0557,225000.0,<1H OCEAN --118.32,34.1,31.0,622.0,229.0,597.0,227.0,1.5284,200000.0,<1H OCEAN --118.32,34.1,30.0,2193.0,965.0,2197.0,836.0,1.8277,137500.0,<1H OCEAN --118.32,34.1,52.0,786.0,270.0,756.0,273.0,2.2311,206300.0,<1H OCEAN --118.3,34.1,29.0,3403.0,1367.0,3432.0,1174.0,1.7083,166700.0,<1H OCEAN --118.3,34.09,40.0,3058.0,1215.0,3953.0,1223.0,1.8156,218800.0,<1H OCEAN --118.31,34.09,36.0,787.0,420.0,1506.0,360.0,1.2412,216700.0,<1H OCEAN --118.3,34.1,38.0,2067.0,914.0,2717.0,853.0,1.7641,250000.0,<1H OCEAN --118.3,34.1,36.0,2284.0,899.0,1964.0,839.0,1.9297,203300.0,<1H OCEAN --118.29,34.09,34.0,2716.0,1114.0,2991.0,1021.0,1.7514,187500.0,<1H OCEAN --118.3,34.09,36.0,2332.0,993.0,3155.0,927.0,2.2612,230400.0,<1H OCEAN --118.29,34.1,39.0,631.0,298.0,744.0,274.0,2.7054,162500.0,<1H OCEAN --118.29,34.09,29.0,2240.0,792.0,2254.0,739.0,2.3317,172500.0,<1H OCEAN --118.28,34.09,38.0,790.0,275.0,664.0,194.0,3.0357,175000.0,<1H OCEAN --118.29,34.09,43.0,1583.0,658.0,1941.0,614.0,1.9835,225000.0,<1H OCEAN --118.29,34.09,28.0,1562.0,648.0,1974.0,597.0,1.9766,112500.0,<1H OCEAN --118.29,34.09,35.0,2198.0,998.0,3441.0,912.0,2.0467,158300.0,<1H OCEAN --118.29,34.09,35.0,2624.0,1116.0,3548.0,1008.0,2.0132,198400.0,<1H OCEAN --118.29,34.09,39.0,336.0,173.0,586.0,151.0,1.8056,262500.0,<1H OCEAN --118.29,34.09,52.0,1272.0,322.0,984.0,353.0,1.9063,261600.0,<1H OCEAN --118.3,34.09,29.0,3245.0,1190.0,3906.0,1102.0,2.1927,253300.0,<1H OCEAN --118.3,34.09,25.0,2345.0,852.0,2860.0,862.0,1.4497,205600.0,<1H OCEAN --118.3,34.09,32.0,2202.0,674.0,2178.0,635.0,2.0307,226700.0,<1H OCEAN --118.31,34.09,36.0,2517.0,842.0,2446.0,689.0,2.1524,187500.0,<1H OCEAN --118.31,34.09,30.0,3165.0,1263.0,3678.0,1141.0,2.0,240600.0,<1H OCEAN --118.31,34.09,42.0,1951.0,846.0,2500.0,813.0,1.5195,218200.0,<1H OCEAN --118.32,34.09,44.0,2666.0,,2297.0,726.0,1.676,208800.0,<1H OCEAN --118.32,34.09,30.0,1871.0,766.0,2595.0,819.0,2.0044,212500.0,<1H OCEAN --118.32,34.09,28.0,2173.0,819.0,2548.0,763.0,1.879,218800.0,<1H OCEAN --118.33,34.09,36.0,654.0,186.0,416.0,138.0,3.6953,200000.0,<1H OCEAN --118.33,34.09,36.0,561.0,180.0,340.0,127.0,1.4375,165000.0,<1H OCEAN --118.33,34.09,40.0,2004.0,687.0,1514.0,542.0,1.9911,220000.0,<1H OCEAN --118.34,34.09,5.0,2665.0,954.0,1733.0,766.0,2.3568,204700.0,<1H OCEAN --118.34,34.09,14.0,3032.0,999.0,1691.0,841.0,2.2,210000.0,<1H OCEAN --118.34,34.08,50.0,3457.0,854.0,1584.0,841.0,3.1078,346700.0,<1H OCEAN --118.34,34.09,52.0,1731.0,502.0,849.0,466.0,3.2946,321600.0,<1H OCEAN --118.34,34.08,52.0,1430.0,186.0,547.0,178.0,10.3661,500001.0,<1H OCEAN --118.35,34.09,47.0,1800.0,546.0,921.0,478.0,2.8021,280600.0,<1H OCEAN --118.35,34.08,52.0,1003.0,200.0,514.0,204.0,3.8472,395700.0,<1H OCEAN --118.35,34.08,52.0,2088.0,388.0,908.0,375.0,3.8141,342000.0,<1H OCEAN --118.35,34.09,42.0,2210.0,643.0,1228.0,605.0,2.5982,315800.0,<1H OCEAN --118.35,34.08,52.0,1710.0,350.0,727.0,355.0,4.5833,333900.0,<1H OCEAN --118.36,34.08,52.0,1965.0,480.0,794.0,451.0,3.2824,304800.0,<1H OCEAN --118.32,34.08,52.0,1164.0,257.0,575.0,251.0,3.125,380400.0,<1H OCEAN --118.33,34.08,52.0,1777.0,454.0,671.0,439.0,3.5083,500001.0,<1H OCEAN --118.33,34.08,50.0,2989.0,832.0,1345.0,775.0,3.2426,442900.0,<1H OCEAN --118.31,34.08,30.0,1390.0,457.0,1460.0,423.0,2.2422,254500.0,<1H OCEAN --118.31,34.08,31.0,2275.0,823.0,2189.0,720.0,1.7542,287500.0,<1H OCEAN --118.32,34.08,46.0,2038.0,534.0,1250.0,525.0,2.4196,358100.0,<1H OCEAN --118.31,34.08,23.0,1443.0,521.0,1264.0,450.0,2.7543,220000.0,<1H OCEAN --118.32,34.08,52.0,1137.0,304.0,754.0,297.0,3.37,330300.0,<1H OCEAN --118.32,34.08,52.0,2370.0,473.0,1053.0,434.0,4.1429,380300.0,<1H OCEAN --118.3,34.08,34.0,2501.0,1047.0,3326.0,970.0,1.8771,247500.0,<1H OCEAN --118.3,34.08,36.0,1276.0,503.0,1502.0,450.0,2.1766,205600.0,<1H OCEAN --118.31,34.08,27.0,1514.0,510.0,1603.0,518.0,2.8971,251100.0,<1H OCEAN --118.31,34.08,26.0,1609.0,534.0,1868.0,497.0,2.7038,227100.0,<1H OCEAN --118.29,34.08,34.0,479.0,182.0,557.0,170.0,1.525,210000.0,<1H OCEAN --118.29,34.08,23.0,1864.0,937.0,2795.0,858.0,1.8495,212500.0,<1H OCEAN --118.3,34.08,34.0,1562.0,651.0,1774.0,559.0,1.5685,225000.0,<1H OCEAN --118.3,34.08,32.0,2880.0,1063.0,3646.0,1028.0,2.3846,258300.0,<1H OCEAN --118.29,34.08,25.0,2459.0,823.0,2635.0,763.0,2.4,173900.0,<1H OCEAN --118.29,34.08,38.0,380.0,130.0,445.0,140.0,1.9286,137500.0,<1H OCEAN --118.37,34.12,34.0,2821.0,399.0,843.0,391.0,11.615,500001.0,<1H OCEAN --118.36,34.12,26.0,3902.0,610.0,1468.0,632.0,8.5136,500001.0,<1H OCEAN --118.35,34.11,33.0,7478.0,1678.0,2701.0,1500.0,4.1717,500001.0,<1H OCEAN --118.36,34.11,35.0,3946.0,695.0,1361.0,620.0,6.5195,500001.0,<1H OCEAN --118.38,34.11,38.0,2601.0,523.0,870.0,474.0,7.1134,416700.0,<1H OCEAN --118.37,34.11,42.0,5518.0,979.0,1863.0,957.0,8.5842,500001.0,<1H OCEAN --118.36,34.1,36.0,2963.0,838.0,1129.0,745.0,2.5588,500001.0,<1H OCEAN --118.37,34.1,37.0,407.0,67.0,100.0,47.0,15.0001,500001.0,<1H OCEAN --118.38,34.1,39.0,3798.0,586.0,975.0,525.0,9.3092,500001.0,<1H OCEAN --118.39,34.1,30.0,6310.0,957.0,1776.0,880.0,8.944,500001.0,<1H OCEAN --118.39,34.09,41.0,730.0,126.0,230.0,125.0,4.3214,500001.0,<1H OCEAN --118.36,34.09,38.0,2158.0,582.0,1061.0,577.0,2.9643,355300.0,<1H OCEAN --118.36,34.08,40.0,3110.0,764.0,1557.0,763.0,1.9937,367100.0,<1H OCEAN --118.37,34.08,52.0,2946.0,695.0,1258.0,650.0,3.9783,374100.0,<1H OCEAN --118.37,34.08,22.0,3008.0,938.0,1224.0,816.0,3.2149,300000.0,<1H OCEAN --118.37,34.09,31.0,2697.0,706.0,1059.0,689.0,2.8942,500001.0,<1H OCEAN --118.36,34.08,45.0,2195.0,483.0,1265.0,455.0,3.3864,397900.0,<1H OCEAN --118.37,34.08,52.0,1466.0,254.0,600.0,253.0,5.7524,393600.0,<1H OCEAN --118.37,34.08,52.0,1234.0,223.0,543.0,213.0,6.0338,423700.0,<1H OCEAN --118.26,34.1,48.0,2566.0,571.0,1421.0,563.0,3.6579,318600.0,<1H OCEAN --118.26,34.1,52.0,1310.0,263.0,689.0,208.0,4.0721,350000.0,<1H OCEAN --118.27,34.1,51.0,3149.0,519.0,1082.0,510.0,6.4459,421600.0,<1H OCEAN --118.27,34.1,41.0,3729.0,740.0,1364.0,707.0,5.7778,412700.0,<1H OCEAN --118.27,34.11,41.0,4138.0,1130.0,1859.0,1030.0,2.978,306800.0,<1H OCEAN --118.28,34.11,46.0,1156.0,203.0,514.0,213.0,4.2019,352100.0,<1H OCEAN --118.28,34.11,52.0,2036.0,348.0,775.0,332.0,5.4122,397500.0,<1H OCEAN --118.28,34.11,52.0,1803.0,437.0,787.0,388.0,4.5781,360500.0,<1H OCEAN --118.28,34.1,44.0,2728.0,585.0,1227.0,567.0,4.0602,324000.0,<1H OCEAN --118.27,34.1,50.0,2113.0,398.0,793.0,418.0,4.7132,304600.0,<1H OCEAN --118.28,34.1,49.0,1767.0,467.0,1066.0,438.0,3.0958,210900.0,<1H OCEAN --118.28,34.1,48.0,805.0,246.0,633.0,235.0,2.3421,200000.0,<1H OCEAN --118.28,34.1,49.0,2843.0,880.0,2004.0,796.0,2.7875,217300.0,<1H OCEAN --118.27,34.09,48.0,1527.0,295.0,589.0,286.0,4.1667,344800.0,<1H OCEAN --118.27,34.09,52.0,3225.0,763.0,1559.0,710.0,3.9674,268800.0,<1H OCEAN --118.28,34.09,52.0,2273.0,663.0,1480.0,597.0,2.3333,196500.0,<1H OCEAN --118.27,34.09,52.0,2327.0,555.0,1048.0,491.0,3.7847,252300.0,<1H OCEAN --118.26,34.09,51.0,1532.0,366.0,669.0,333.0,3.6434,278800.0,<1H OCEAN --118.26,34.09,36.0,3503.0,833.0,2652.0,788.0,3.8448,241400.0,<1H OCEAN --118.27,34.09,52.0,1079.0,222.0,439.0,201.0,4.625,230800.0,<1H OCEAN --118.27,34.09,44.0,3646.0,912.0,1783.0,861.0,2.9709,225000.0,<1H OCEAN --118.26,34.08,52.0,984.0,276.0,994.0,260.0,2.3816,166700.0,<1H OCEAN --118.26,34.08,41.0,1396.0,360.0,1069.0,363.0,2.4375,203300.0,<1H OCEAN --118.26,34.08,46.0,945.0,250.0,910.0,252.0,3.5039,187500.0,<1H OCEAN --118.27,34.08,35.0,1147.0,365.0,1016.0,296.0,2.3913,198800.0,<1H OCEAN --118.26,34.07,36.0,2306.0,813.0,2823.0,765.0,2.0214,170500.0,<1H OCEAN --118.26,34.07,28.0,579.0,184.0,673.0,202.0,2.625,187500.0,<1H OCEAN --118.27,34.07,27.0,1190.0,,1795.0,422.0,1.7016,160000.0,<1H OCEAN --118.27,34.08,38.0,2265.0,801.0,2899.0,792.0,2.5521,157500.0,<1H OCEAN --118.27,34.08,46.0,3007.0,854.0,2587.0,814.0,2.7179,184300.0,<1H OCEAN --118.28,34.08,42.0,997.0,374.0,982.0,372.0,2.9423,200000.0,<1H OCEAN --118.28,34.08,52.0,2465.0,773.0,2328.0,746.0,2.6178,203100.0,<1H OCEAN --118.27,34.08,43.0,962.0,253.0,658.0,244.0,3.2386,185000.0,<1H OCEAN --118.27,34.07,38.0,1270.0,556.0,1692.0,450.0,1.87,170800.0,<1H OCEAN --118.28,34.08,42.0,1618.0,522.0,1454.0,440.0,3.1607,182000.0,<1H OCEAN --118.28,34.09,52.0,1739.0,464.0,938.0,482.0,2.4429,228800.0,<1H OCEAN --118.28,34.08,39.0,3162.0,896.0,1934.0,818.0,2.875,213500.0,<1H OCEAN --118.28,34.08,40.0,1630.0,543.0,1568.0,510.0,2.7366,169100.0,<1H OCEAN --118.28,34.09,49.0,3828.0,1197.0,2862.0,1009.0,2.4677,219200.0,<1H OCEAN --118.23,34.07,35.0,1335.0,440.0,1586.0,445.0,1.9722,156300.0,<1H OCEAN --118.23,34.07,40.0,506.0,119.0,397.0,114.0,3.1944,143800.0,<1H OCEAN --118.24,34.08,52.0,109.0,20.0,86.0,24.0,4.9844,187500.0,<1H OCEAN --118.24,34.08,52.0,137.0,26.0,65.0,24.0,4.025,137500.0,<1H OCEAN --118.23,34.09,47.0,859.0,239.0,913.0,234.0,2.6442,136100.0,<1H OCEAN --118.23,34.09,49.0,1638.0,456.0,1500.0,430.0,2.6923,150000.0,<1H OCEAN --118.23,34.09,45.0,1747.0,484.0,1680.0,441.0,2.6051,155500.0,<1H OCEAN --118.25,34.09,52.0,2050.0,429.0,957.0,418.0,3.5603,210000.0,<1H OCEAN --118.25,34.09,52.0,104.0,20.0,32.0,17.0,3.75,241700.0,<1H OCEAN --118.25,34.08,44.0,1425.0,438.0,1121.0,374.0,2.1108,200000.0,<1H OCEAN --118.25,34.08,47.0,2133.0,689.0,2104.0,662.0,2.6136,169200.0,<1H OCEAN --118.25,34.09,43.0,1903.0,635.0,1919.0,613.0,2.6336,174300.0,<1H OCEAN --118.25,34.09,52.0,1866.0,470.0,1211.0,417.0,2.935,189400.0,<1H OCEAN --118.26,34.08,50.0,1791.0,660.0,2183.0,675.0,1.7945,166700.0,<1H OCEAN --118.26,34.08,45.0,2174.0,627.0,1992.0,557.0,2.5428,167800.0,<1H OCEAN --118.25,34.09,52.0,3142.0,765.0,1728.0,682.0,3.1864,189800.0,<1H OCEAN --118.26,34.08,45.0,2225.0,827.0,2699.0,792.0,1.9209,179200.0,<1H OCEAN --118.26,34.07,46.0,2341.0,703.0,2371.0,648.0,2.4038,181700.0,<1H OCEAN --118.26,34.07,52.0,830.0,200.0,701.0,189.0,2.7625,232100.0,<1H OCEAN --118.25,34.07,47.0,2059.0,618.0,2033.0,544.0,1.9028,217900.0,<1H OCEAN --118.25,34.07,43.0,764.0,322.0,1275.0,306.0,2.0,175000.0,<1H OCEAN --118.25,34.06,20.0,41.0,17.0,87.0,25.0,1.5491,225000.0,<1H OCEAN --118.24,34.07,27.0,223.0,80.0,249.0,82.0,1.6136,137500.0,<1H OCEAN --118.25,34.07,18.0,4297.0,1420.0,4332.0,1286.0,2.2545,192500.0,<1H OCEAN --118.25,34.07,16.0,719.0,225.0,801.0,218.0,2.3942,133300.0,<1H OCEAN --118.22,34.09,40.0,1081.0,282.0,970.0,263.0,1.875,150000.0,<1H OCEAN --118.22,34.08,31.0,394.0,117.0,573.0,131.0,1.8173,154200.0,<1H OCEAN --118.22,34.08,34.0,1709.0,562.0,2105.0,503.0,1.9704,152100.0,<1H OCEAN --118.19,34.08,38.0,1241.0,298.0,1055.0,263.0,2.3409,115500.0,<1H OCEAN --118.2,34.08,49.0,1320.0,309.0,1405.0,328.0,2.4375,114000.0,<1H OCEAN --118.2,34.07,21.0,1353.0,380.0,1688.0,367.0,1.9937,139600.0,<1H OCEAN --118.2,34.07,34.0,1765.0,551.0,2203.0,500.0,2.2708,159600.0,<1H OCEAN --118.21,34.08,39.0,986.0,361.0,1347.0,299.0,2.2907,133900.0,<1H OCEAN --118.21,34.08,26.0,2574.0,807.0,3163.0,802.0,1.9495,173200.0,<1H OCEAN --118.2,34.09,39.0,1594.0,430.0,1668.0,378.0,2.5343,138200.0,<1H OCEAN --118.2,34.08,41.0,1807.0,429.0,1699.0,424.0,2.2222,126000.0,<1H OCEAN --118.19,34.1,39.0,2054.0,423.0,1205.0,403.0,4.239,213000.0,<1H OCEAN --118.21,34.08,52.0,3672.0,808.0,3062.0,764.0,2.6806,153000.0,<1H OCEAN --118.21,34.09,39.0,1287.0,353.0,1171.0,345.0,1.6118,138500.0,<1H OCEAN --118.21,34.09,39.0,1561.0,445.0,1780.0,391.0,2.4632,144200.0,<1H OCEAN --118.21,34.09,37.0,1822.0,498.0,1961.0,506.0,1.9881,159200.0,<1H OCEAN --118.22,34.07,35.0,1504.0,477.0,2059.0,498.0,2.0133,145800.0,<1H OCEAN --118.22,34.07,36.0,839.0,250.0,1079.0,245.0,1.7463,158300.0,<1H OCEAN --118.21,34.07,31.0,1077.0,300.0,1198.0,274.0,2.1333,160200.0,<1H OCEAN --118.21,34.07,52.0,1770.0,,1848.0,439.0,2.4135,167200.0,<1H OCEAN --118.21,34.07,47.0,1346.0,383.0,1452.0,371.0,1.7292,191700.0,<1H OCEAN --118.21,34.07,31.0,1453.0,404.0,1486.0,389.0,2.3859,153100.0,<1H OCEAN --118.21,34.07,42.0,902.0,318.0,1312.0,323.0,1.9375,168800.0,<1H OCEAN --118.21,34.06,29.0,1478.0,413.0,1580.0,394.0,1.8781,147500.0,<1H OCEAN --118.16,34.09,36.0,3334.0,920.0,2881.0,800.0,2.1696,170800.0,<1H OCEAN --118.17,34.1,48.0,2514.0,595.0,2484.0,601.0,3.1146,142500.0,<1H OCEAN --118.17,34.1,37.0,299.0,89.0,318.0,92.0,1.3125,145800.0,<1H OCEAN --118.17,34.09,45.0,1327.0,271.0,1069.0,284.0,3.3977,153800.0,<1H OCEAN --118.18,34.09,40.0,2744.0,708.0,2747.0,674.0,2.6226,148800.0,<1H OCEAN --118.18,34.09,44.0,1688.0,426.0,1605.0,384.0,3.3785,184900.0,<1H OCEAN --118.19,34.09,41.0,2090.0,530.0,2043.0,537.0,1.9706,144200.0,<1H OCEAN --118.18,34.1,10.0,1907.0,398.0,921.0,369.0,4.875,200400.0,<1H OCEAN --118.18,34.1,10.0,1940.0,445.0,763.0,412.0,4.975,166700.0,<1H OCEAN --118.18,34.1,7.0,2529.0,689.0,1215.0,577.0,4.7853,153100.0,<1H OCEAN --118.18,34.1,8.0,1116.0,267.0,435.0,235.0,4.9231,230900.0,<1H OCEAN --118.18,34.08,35.0,2226.0,602.0,2230.0,549.0,2.9167,129300.0,<1H OCEAN --118.19,34.08,35.0,1554.0,381.0,1487.0,374.0,1.9038,139500.0,<1H OCEAN --118.19,34.07,38.0,2965.0,665.0,2128.0,650.0,3.0241,166300.0,<1H OCEAN --118.19,34.07,42.0,1555.0,337.0,1152.0,348.0,3.375,169600.0,<1H OCEAN --118.19,34.06,44.0,1734.0,364.0,1133.0,351.0,2.5132,163100.0,<1H OCEAN --118.16,34.09,33.0,1515.0,415.0,1345.0,346.0,2.375,175000.0,<1H OCEAN --118.16,34.09,50.0,1568.0,302.0,1093.0,333.0,3.1442,162100.0,<1H OCEAN --118.17,34.09,36.0,3066.0,797.0,3097.0,780.0,2.5523,156500.0,<1H OCEAN --118.17,34.09,33.0,2907.0,797.0,3212.0,793.0,2.2348,146600.0,<1H OCEAN --118.18,34.08,31.0,1318.0,311.0,1164.0,289.0,2.9939,135500.0,<1H OCEAN --118.18,34.08,33.0,1369.0,408.0,1475.0,377.0,2.3281,151900.0,<1H OCEAN --118.16,34.08,43.0,1523.0,378.0,1338.0,352.0,3.2031,144600.0,<1H OCEAN --118.17,34.08,39.0,787.0,181.0,731.0,179.0,3.2279,158500.0,<1H OCEAN --118.17,34.08,33.0,851.0,231.0,936.0,228.0,3.375,147500.0,<1H OCEAN --118.18,34.07,28.0,2616.0,630.0,2218.0,621.0,2.6842,156000.0,<1H OCEAN --118.17,34.07,19.0,2150.0,544.0,1510.0,467.0,3.4952,150000.0,<1H OCEAN --118.16,34.07,41.0,247.0,55.0,925.0,50.0,3.5769,135700.0,<1H OCEAN --118.17,34.07,37.0,1155.0,225.0,814.0,241.0,3.875,148500.0,<1H OCEAN --118.18,34.06,27.0,2025.0,565.0,2189.0,577.0,2.6083,148600.0,<1H OCEAN --118.19,34.06,32.0,555.0,159.0,748.0,163.0,1.9762,137500.0,<1H OCEAN --118.19,34.06,47.0,2324.0,658.0,3020.0,594.0,1.1868,93800.0,<1H OCEAN --118.2,34.06,46.0,453.0,119.0,533.0,132.0,2.2961,112500.0,<1H OCEAN --118.2,34.06,40.0,1181.0,335.0,1441.0,337.0,2.1136,111800.0,<1H OCEAN --118.2,34.05,8.0,762.0,204.0,728.0,174.0,2.4886,137500.0,<1H OCEAN --118.19,34.05,46.0,1051.0,302.0,1435.0,305.0,1.6667,133600.0,<1H OCEAN --118.2,34.05,36.0,2672.0,675.0,2883.0,674.0,2.0885,142800.0,<1H OCEAN --118.19,34.05,37.0,349.0,79.0,276.0,64.0,3.2125,125000.0,<1H OCEAN --118.2,34.06,46.0,321.0,101.0,401.0,86.0,2.1029,109400.0,<1H OCEAN --118.21,34.06,30.0,511.0,153.0,1152.0,149.0,2.3611,156800.0,<1H OCEAN --118.22,34.06,52.0,48.0,6.0,41.0,10.0,10.2264,112500.0,<1H OCEAN --118.22,34.05,36.0,1243.0,470.0,1668.0,444.0,1.0714,137500.0,<1H OCEAN --118.21,34.06,52.0,470.0,115.0,434.0,123.0,2.095,109100.0,<1H OCEAN --118.22,34.06,34.0,1083.0,364.0,1132.0,338.0,2.2344,153100.0,<1H OCEAN --118.22,34.05,34.0,1113.0,,928.0,290.0,3.1654,155000.0,<1H OCEAN --118.22,34.05,41.0,1422.0,478.0,1640.0,434.0,1.6122,157100.0,<1H OCEAN --118.21,34.05,26.0,745.0,258.0,694.0,236.0,1.3846,129200.0,<1H OCEAN --118.21,34.05,28.0,1079.0,306.0,1358.0,285.0,2.52,131900.0,<1H OCEAN --118.21,34.05,28.0,950.0,357.0,1485.0,345.0,1.9271,136400.0,<1H OCEAN --118.21,34.05,45.0,2146.0,607.0,2868.0,625.0,2.121,144000.0,<1H OCEAN --118.2,34.05,43.0,1165.0,317.0,1279.0,303.0,1.9615,141700.0,<1H OCEAN --118.2,34.05,40.0,1146.0,323.0,1354.0,321.0,1.9205,121900.0,<1H OCEAN --118.2,34.05,40.0,1082.0,318.0,1085.0,273.0,1.7054,117200.0,<1H OCEAN --118.2,34.05,42.0,1703.0,586.0,2490.0,581.0,2.02,147200.0,<1H OCEAN --118.2,34.05,41.0,1268.0,398.0,1887.0,407.0,2.625,150000.0,<1H OCEAN --118.19,34.05,43.0,977.0,266.0,1084.0,259.0,2.7708,127900.0,<1H OCEAN --118.19,34.05,41.0,1098.0,264.0,1178.0,245.0,2.1058,124300.0,<1H OCEAN --118.2,34.05,50.0,1407.0,401.0,1526.0,385.0,2.29,121800.0,<1H OCEAN --118.19,34.04,45.0,963.0,234.0,1194.0,239.0,2.1806,134900.0,<1H OCEAN --118.19,34.04,40.0,1095.0,305.0,1322.0,281.0,1.9688,150000.0,<1H OCEAN --118.19,34.03,52.0,1053.0,246.0,1036.0,249.0,2.1071,136700.0,<1H OCEAN --118.19,34.03,50.0,1183.0,246.0,851.0,231.0,3.2639,142600.0,<1H OCEAN --118.2,34.04,52.0,1249.0,307.0,1223.0,297.0,2.07,136300.0,<1H OCEAN --118.2,34.04,47.0,1894.0,408.0,1629.0,379.0,3.7619,127600.0,<1H OCEAN --118.2,34.03,52.0,1754.0,452.0,1849.0,445.0,2.3716,122800.0,<1H OCEAN --118.2,34.04,44.0,1399.0,386.0,1419.0,373.0,1.8224,143800.0,<1H OCEAN --118.2,34.04,36.0,1625.0,490.0,2003.0,478.0,2.181,147200.0,<1H OCEAN --118.2,34.04,44.0,1582.0,544.0,1998.0,515.0,1.6888,125000.0,<1H OCEAN --118.2,34.04,18.0,796.0,227.0,547.0,218.0,1.0333,135400.0,<1H OCEAN --118.21,34.04,36.0,1825.0,479.0,2097.0,480.0,2.1862,135300.0,<1H OCEAN --118.21,34.04,37.0,845.0,249.0,881.0,252.0,2.2454,165000.0,<1H OCEAN --118.21,34.04,47.0,1325.0,393.0,1557.0,352.0,2.8,148400.0,<1H OCEAN --118.21,34.05,28.0,1841.0,809.0,3199.0,727.0,1.6319,151600.0,<1H OCEAN --118.21,34.04,52.0,846.0,271.0,1153.0,281.0,2.1923,155000.0,<1H OCEAN --118.22,34.05,43.0,1153.0,411.0,1667.0,409.0,1.9402,139300.0,<1H OCEAN --118.21,34.05,47.0,722.0,235.0,930.0,226.0,2.5455,114300.0,<1H OCEAN --118.22,34.04,43.0,798.0,308.0,1417.0,325.0,1.4189,141700.0,<1H OCEAN --118.22,34.05,44.0,1105.0,346.0,1598.0,372.0,1.2,115600.0,<1H OCEAN --118.22,34.04,43.0,2343.0,803.0,2468.0,707.0,1.5163,115000.0,<1H OCEAN --118.21,34.04,43.0,1502.0,477.0,1844.0,477.0,1.9405,152500.0,<1H OCEAN --118.21,34.04,47.0,1306.0,391.0,1499.0,346.0,2.2788,139600.0,<1H OCEAN --118.22,34.03,45.0,554.0,214.0,888.0,218.0,1.8125,139600.0,<1H OCEAN --118.21,34.03,45.0,1860.0,472.0,1893.0,456.0,2.6573,141800.0,<1H OCEAN --118.21,34.03,44.0,1550.0,407.0,1718.0,403.0,2.5268,141100.0,<1H OCEAN --118.21,34.03,52.0,497.0,132.0,547.0,121.0,2.2083,146300.0,<1H OCEAN --118.21,34.03,47.0,876.0,228.0,872.0,231.0,2.2656,145000.0,<1H OCEAN --118.2,34.03,41.0,1292.0,334.0,1150.0,322.0,1.925,135200.0,<1H OCEAN --118.2,34.02,49.0,1098.0,317.0,1411.0,301.0,2.75,146000.0,<1H OCEAN --118.2,34.03,52.0,774.0,209.0,813.0,203.0,2.3472,135200.0,<1H OCEAN --118.2,34.03,37.0,1583.0,392.0,1776.0,377.0,2.7266,140800.0,<1H OCEAN --118.2,34.03,52.0,583.0,157.0,730.0,174.0,1.4115,140600.0,<1H OCEAN --118.21,34.02,45.0,792.0,203.0,872.0,188.0,2.6875,129700.0,<1H OCEAN --118.19,34.02,44.0,2702.0,770.0,3260.0,721.0,2.3575,144800.0,<1H OCEAN --118.2,34.02,48.0,2230.0,593.0,2419.0,598.0,2.3944,130700.0,<1H OCEAN --118.2,34.02,26.0,36.0,9.0,35.0,9.0,1.625,175000.0,<1H OCEAN --118.2,34.02,42.0,498.0,120.0,548.0,119.0,3.7543,126600.0,<1H OCEAN --118.21,34.02,52.0,22.0,7.0,55.0,7.0,7.5752,67500.0,<1H OCEAN --118.21,34.02,43.0,1811.0,513.0,2123.0,487.0,1.3615,133300.0,<1H OCEAN --118.23,34.05,52.0,346.0,270.0,346.0,251.0,2.5313,225000.0,<1H OCEAN --118.24,34.05,13.0,1703.0,697.0,1823.0,669.0,0.8288,181300.0,<1H OCEAN --118.24,34.04,52.0,116.0,107.0,171.0,92.0,1.0769,112500.0,<1H OCEAN --118.24,34.06,33.0,390.0,199.0,435.0,193.0,1.1979,350000.0,<1H OCEAN --118.24,34.06,8.0,1204.0,552.0,1074.0,517.0,1.0227,87500.0,<1H OCEAN --118.24,34.06,19.0,2870.0,1021.0,3325.0,978.0,1.7395,162500.0,<1H OCEAN --118.25,34.05,52.0,2806.0,1944.0,2232.0,1605.0,0.6775,350000.0,<1H OCEAN --118.25,34.05,8.0,3105.0,1256.0,1086.0,997.0,0.8131,275000.0,<1H OCEAN --118.25,34.06,12.0,4011.0,1438.0,1673.0,1088.0,5.3081,287500.0,<1H OCEAN --118.26,34.05,52.0,58.0,52.0,41.0,27.0,4.0972,500001.0,<1H OCEAN --118.26,34.04,6.0,1529.0,566.0,1051.0,473.0,2.462,162500.0,<1H OCEAN --118.25,34.06,52.0,174.0,66.0,249.0,57.0,1.7763,312500.0,<1H OCEAN --118.26,34.06,15.0,326.0,123.0,490.0,105.0,1.4886,175000.0,<1H OCEAN --118.26,34.06,40.0,637.0,273.0,1150.0,263.0,1.8625,131300.0,<1H OCEAN --118.26,34.07,52.0,1802.0,613.0,2382.0,587.0,1.8438,185900.0,<1H OCEAN --118.26,34.07,40.0,680.0,273.0,995.0,249.0,2.2607,165600.0,<1H OCEAN --118.26,34.07,30.0,929.0,238.0,763.0,214.0,2.5227,187500.0,<1H OCEAN --118.26,34.06,38.0,715.0,282.0,1174.0,300.0,2.345,225000.0,<1H OCEAN --118.26,34.06,42.0,2541.0,1282.0,3974.0,1189.0,1.5854,87500.0,<1H OCEAN --118.27,34.07,42.0,1175.0,428.0,1593.0,407.0,2.3438,213300.0,<1H OCEAN --118.27,34.06,30.0,1771.0,788.0,2188.0,764.0,1.5885,154200.0,<1H OCEAN --118.27,34.07,34.0,786.0,341.0,1239.0,320.0,2.3438,152100.0,<1H OCEAN --118.27,34.07,32.0,1657.0,579.0,2071.0,598.0,2.1135,152500.0,<1H OCEAN --118.27,34.06,33.0,1416.0,686.0,2013.0,614.0,1.9818,208300.0,<1H OCEAN --118.27,34.07,33.0,1177.0,468.0,1533.0,430.0,2.3981,183300.0,<1H OCEAN --118.28,34.07,41.0,1072.0,331.0,1111.0,314.0,1.9233,207100.0,<1H OCEAN --118.28,34.07,24.0,3247.0,1281.0,2642.0,1182.0,2.4632,216700.0,<1H OCEAN --118.28,34.07,14.0,1924.0,926.0,2226.0,792.0,2.2552,265900.0,<1H OCEAN --118.28,34.07,32.0,1777.0,536.0,1684.0,489.0,2.3636,190000.0,<1H OCEAN --118.28,34.07,25.0,7522.0,3179.0,7221.0,2902.0,2.0173,177500.0,<1H OCEAN --118.28,34.06,14.0,1787.0,853.0,2251.0,763.0,1.1642,400000.0,<1H OCEAN --118.28,34.06,17.0,2518.0,1196.0,3051.0,1000.0,1.7199,175000.0,<1H OCEAN --118.27,34.06,17.0,2124.0,1168.0,3915.0,1137.0,1.1346,137500.0,<1H OCEAN --118.27,34.06,25.0,1714.0,1176.0,3723.0,1036.0,1.3241,112500.0,<1H OCEAN --118.27,34.06,45.0,564.0,353.0,1172.0,319.0,1.494,187500.0,<1H OCEAN --118.27,34.06,26.0,513.0,338.0,1204.0,321.0,1.4904,275000.0,<1H OCEAN --118.26,34.06,33.0,1950.0,1047.0,3707.0,1012.0,1.7238,110000.0,<1H OCEAN --118.27,34.05,37.0,350.0,245.0,1122.0,248.0,2.7634,137500.0,<1H OCEAN --118.27,34.05,52.0,1292.0,864.0,2081.0,724.0,0.9563,275000.0,<1H OCEAN --118.28,34.06,52.0,1261.0,616.0,2309.0,581.0,1.6184,225000.0,<1H OCEAN --118.28,34.06,52.0,936.0,454.0,990.0,354.0,1.1122,187500.0,<1H OCEAN --118.28,34.06,42.0,2472.0,,3795.0,1179.0,1.2254,162500.0,<1H OCEAN --118.27,34.05,25.0,1316.0,836.0,2796.0,784.0,1.7866,325000.0,<1H OCEAN --118.27,34.05,26.0,1164.0,674.0,1685.0,541.0,1.5727,225000.0,<1H OCEAN --118.28,34.05,28.0,1306.0,637.0,2079.0,598.0,1.4615,275000.0,<1H OCEAN --118.28,34.05,31.0,1525.0,730.0,2510.0,652.0,1.6355,162500.0,<1H OCEAN --118.28,34.05,41.0,1788.0,774.0,2931.0,702.0,1.4413,158900.0,<1H OCEAN --118.28,34.05,41.0,1075.0,597.0,2260.0,614.0,1.3,162500.0,<1H OCEAN --118.28,34.05,44.0,968.0,384.0,1805.0,375.0,1.4801,212500.0,<1H OCEAN --118.27,34.05,47.0,661.0,359.0,1406.0,307.0,1.3169,112500.0,<1H OCEAN --118.27,34.04,13.0,1784.0,,2158.0,682.0,1.7038,118100.0,<1H OCEAN --118.27,34.05,24.0,323.0,214.0,751.0,189.0,1.8304,225000.0,<1H OCEAN --118.27,34.05,12.0,535.0,328.0,1194.0,365.0,1.2012,275000.0,<1H OCEAN --118.32,34.07,52.0,2156.0,306.0,861.0,311.0,8.8062,500001.0,<1H OCEAN --118.33,34.06,52.0,1841.0,240.0,693.0,218.0,15.0001,500001.0,<1H OCEAN --118.33,34.07,52.0,2248.0,255.0,813.0,265.0,15.0001,500001.0,<1H OCEAN --118.33,34.07,52.0,1482.0,171.0,531.0,161.0,15.0001,500001.0,<1H OCEAN --118.34,34.06,52.0,2089.0,309.0,883.0,281.0,7.4574,500001.0,<1H OCEAN --118.34,34.06,52.0,1311.0,310.0,707.0,290.0,3.4812,432800.0,<1H OCEAN --118.29,34.08,49.0,649.0,315.0,987.0,329.0,1.6806,316700.0,<1H OCEAN --118.29,34.07,19.0,3013.0,1118.0,2465.0,1008.0,2.5386,290600.0,<1H OCEAN --118.29,34.06,9.0,1554.0,815.0,1704.0,761.0,2.0185,141700.0,<1H OCEAN --118.29,34.07,22.0,492.0,269.0,634.0,261.0,1.6406,300000.0,<1H OCEAN --118.29,34.07,26.0,2302.0,1124.0,2660.0,1004.0,2.3567,253100.0,<1H OCEAN --118.29,34.08,43.0,3056.0,1345.0,3920.0,1304.0,1.925,300000.0,<1H OCEAN --118.3,34.07,31.0,1489.0,664.0,1793.0,556.0,2.4348,230600.0,<1H OCEAN --118.3,34.07,46.0,5677.0,2610.0,7443.0,2406.0,1.8238,237500.0,<1H OCEAN --118.3,34.07,26.0,2107.0,757.0,2660.0,740.0,2.3375,282300.0,<1H OCEAN --118.3,34.07,36.0,2657.0,738.0,2274.0,723.0,3.425,281700.0,<1H OCEAN --118.31,34.07,28.0,2362.0,949.0,2759.0,894.0,2.2364,305600.0,<1H OCEAN --118.31,34.08,49.0,2549.0,630.0,1539.0,594.0,2.6218,350900.0,<1H OCEAN --118.31,34.07,40.0,2657.0,794.0,2149.0,749.0,2.2653,445000.0,<1H OCEAN --118.32,34.07,52.0,2980.0,366.0,967.0,359.0,11.2185,500001.0,<1H OCEAN --118.31,34.06,36.0,369.0,147.0,145.0,136.0,0.8804,450000.0,<1H OCEAN --118.32,34.06,52.0,983.0,246.0,578.0,204.0,5.7393,500001.0,<1H OCEAN --118.32,34.07,25.0,2740.0,707.0,1420.0,664.0,3.5909,404500.0,<1H OCEAN --118.32,34.06,52.0,955.0,100.0,457.0,120.0,15.0001,500001.0,<1H OCEAN --118.31,34.07,26.0,5062.0,2055.0,4533.0,1822.0,2.3105,166700.0,<1H OCEAN --118.31,34.06,30.0,3110.0,1269.0,2535.0,1218.0,1.6987,412500.0,<1H OCEAN --118.3,34.07,18.0,3759.0,,3296.0,1462.0,2.2708,175000.0,<1H OCEAN --118.31,34.07,20.0,3264.0,1248.0,2919.0,1191.0,2.3674,500001.0,<1H OCEAN --118.3,34.06,20.0,1782.0,896.0,1749.0,823.0,2.2094,75000.0,<1H OCEAN --118.31,34.06,34.0,2470.0,1197.0,2326.0,1055.0,1.9038,325000.0,<1H OCEAN --118.29,34.07,24.0,4021.0,1707.0,3727.0,1529.0,1.7365,112500.0,<1H OCEAN --118.3,34.07,28.0,5221.0,2530.0,5840.0,2374.0,1.8829,300000.0,<1H OCEAN --118.3,34.06,43.0,1366.0,740.0,942.0,672.0,1.6953,150000.0,<1H OCEAN --118.29,34.06,42.0,3894.0,2293.0,6846.0,2156.0,1.5553,70000.0,<1H OCEAN --118.29,34.06,27.0,2456.0,1111.0,4137.0,1104.0,1.5954,187500.0,<1H OCEAN --118.29,34.06,46.0,1759.0,1012.0,2716.0,877.0,2.1637,350000.0,<1H OCEAN --118.3,34.06,47.0,1390.0,872.0,2860.0,827.0,1.468,137500.0,<1H OCEAN --118.29,34.06,23.0,2040.0,778.0,2235.0,697.0,1.9309,233300.0,<1H OCEAN --118.3,34.06,33.0,2437.0,1283.0,3906.0,1084.0,2.0332,270000.0,<1H OCEAN --118.3,34.06,21.0,3960.0,1490.0,3468.0,1335.0,1.8214,475000.0,<1H OCEAN --118.3,34.06,23.0,2512.0,1203.0,3720.0,1118.0,1.7896,322200.0,<1H OCEAN --118.31,34.06,24.0,1336.0,453.0,1268.0,426.0,2.8202,500001.0,<1H OCEAN --118.31,34.06,47.0,3038.0,1533.0,4225.0,1472.0,1.6725,187500.0,<1H OCEAN --118.31,34.06,34.0,1848.0,667.0,1351.0,589.0,2.0547,410000.0,<1H OCEAN --118.31,34.06,52.0,2124.0,756.0,1920.0,756.0,2.1435,328900.0,<1H OCEAN --118.31,34.06,31.0,2827.0,1084.0,3107.0,993.0,2.0278,360000.0,<1H OCEAN --118.31,34.06,14.0,1559.0,646.0,1639.0,567.0,1.9949,380000.0,<1H OCEAN --118.32,34.05,42.0,3292.0,713.0,2224.0,674.0,3.5517,291500.0,<1H OCEAN --118.32,34.06,43.0,2808.0,584.0,1654.0,569.0,4.125,436800.0,<1H OCEAN --118.32,34.06,36.0,3239.0,722.0,1383.0,612.0,4.5918,337000.0,<1H OCEAN --118.33,34.06,52.0,1368.0,231.0,737.0,248.0,8.3617,433800.0,<1H OCEAN --118.33,34.05,48.0,2405.0,527.0,1868.0,502.0,3.375,257800.0,<1H OCEAN --118.33,34.05,44.0,1574.0,390.0,1323.0,404.0,2.5284,226300.0,<1H OCEAN --118.33,34.05,45.0,1707.0,519.0,1446.0,466.0,2.1736,171300.0,<1H OCEAN --118.32,34.05,50.0,1389.0,364.0,976.0,302.0,1.5882,327300.0,<1H OCEAN --118.32,34.05,42.0,3343.0,1183.0,3480.0,1146.0,1.9923,250000.0,<1H OCEAN --118.31,34.05,35.0,1692.0,423.0,1578.0,406.0,2.5313,305800.0,<1H OCEAN --118.31,34.05,40.0,1667.0,365.0,1161.0,384.0,3.1406,417600.0,<1H OCEAN --118.3,34.05,44.0,1612.0,650.0,2028.0,593.0,1.9152,115600.0,<1H OCEAN --118.3,34.05,42.0,1476.0,610.0,1605.0,545.0,1.721,214300.0,<1H OCEAN --118.31,34.05,42.0,443.0,223.0,582.0,223.0,2.2937,350000.0,<1H OCEAN --118.3,34.05,46.0,1386.0,457.0,1845.0,485.0,2.1414,157700.0,<1H OCEAN --118.3,34.05,31.0,1744.0,720.0,2034.0,633.0,2.2684,193800.0,<1H OCEAN --118.29,34.05,30.0,1417.0,589.0,1615.0,540.0,1.3867,193800.0,<1H OCEAN --118.29,34.05,34.0,1102.0,,1325.0,439.0,1.5972,168800.0,<1H OCEAN --118.3,34.05,36.0,1723.0,569.0,1664.0,501.0,1.9323,161100.0,<1H OCEAN --118.3,34.05,34.0,1453.0,588.0,1987.0,589.0,2.096,187500.0,<1H OCEAN --118.29,34.05,18.0,3585.0,1661.0,5229.0,1534.0,1.847,250000.0,<1H OCEAN --118.29,34.05,11.0,677.0,370.0,1143.0,341.0,2.3864,350000.0,<1H OCEAN --118.29,34.05,31.0,2818.0,1252.0,4126.0,1200.0,2.053,229200.0,<1H OCEAN --118.35,34.08,52.0,1801.0,313.0,714.0,293.0,4.6838,479000.0,<1H OCEAN --118.35,34.07,52.0,2497.0,406.0,1030.0,412.0,4.89,500001.0,<1H OCEAN --118.35,34.07,52.0,2315.0,356.0,894.0,345.0,4.1328,500001.0,<1H OCEAN --118.34,34.07,52.0,2066.0,319.0,981.0,297.0,5.8632,450000.0,<1H OCEAN --118.34,34.08,52.0,1421.0,163.0,495.0,167.0,10.586,500001.0,<1H OCEAN --118.34,34.08,52.0,1721.0,195.0,688.0,196.0,15.0001,500001.0,<1H OCEAN --118.34,34.07,52.0,1621.0,284.0,588.0,272.0,6.2223,500001.0,<1H OCEAN --118.34,34.07,52.0,3421.0,598.0,1203.0,564.0,4.1618,500001.0,<1H OCEAN --118.34,34.08,52.0,2756.0,542.0,971.0,510.0,5.5871,500001.0,<1H OCEAN --118.35,34.08,52.0,2877.0,721.0,1186.0,704.0,3.2645,175000.0,<1H OCEAN --118.36,34.08,52.0,2373.0,601.0,1135.0,576.0,3.1765,225000.0,<1H OCEAN --118.36,34.08,52.0,1902.0,488.0,848.0,478.0,2.9621,175000.0,<1H OCEAN --118.35,34.07,48.0,890.0,255.0,434.0,232.0,3.6111,450000.0,<1H OCEAN --118.35,34.07,45.0,7803.0,2154.0,3359.0,2041.0,3.3594,287500.0,<1H OCEAN --118.35,34.07,46.0,1651.0,410.0,512.0,397.0,4.0179,350000.0,<1H OCEAN --118.35,34.07,45.0,3312.0,880.0,1157.0,809.0,3.5719,500001.0,<1H OCEAN --118.36,34.07,40.0,1821.0,447.0,777.0,441.0,2.3375,355200.0,<1H OCEAN --118.36,34.07,48.0,1740.0,360.0,748.0,357.0,4.7019,411100.0,<1H OCEAN --118.37,34.07,50.0,2519.0,,1117.0,516.0,4.3667,405600.0,<1H OCEAN --118.36,34.07,52.0,2046.0,451.0,944.0,435.0,3.4265,456900.0,<1H OCEAN --118.37,34.07,52.0,2203.0,437.0,899.0,384.0,4.25,486900.0,<1H OCEAN --118.37,34.07,52.0,2195.0,435.0,884.0,432.0,5.24,486400.0,<1H OCEAN --118.37,34.07,44.0,2703.0,663.0,1045.0,619.0,3.201,287500.0,<1H OCEAN --118.37,34.07,39.0,2309.0,526.0,870.0,546.0,3.1677,453400.0,<1H OCEAN --118.37,34.07,52.0,1084.0,247.0,468.0,255.0,3.4286,474300.0,<1H OCEAN --118.38,34.08,25.0,4625.0,1307.0,1739.0,1191.0,3.3989,485000.0,<1H OCEAN --118.38,34.07,16.0,4814.0,1381.0,1897.0,1209.0,3.3725,375000.0,<1H OCEAN --118.38,34.07,21.0,3653.0,956.0,1510.0,890.0,3.5573,500001.0,<1H OCEAN --118.34,34.07,52.0,3175.0,1057.0,1594.0,997.0,3.1766,225000.0,<1H OCEAN --118.35,34.06,52.0,3446.0,1360.0,1768.0,1245.0,2.4722,500001.0,<1H OCEAN --118.34,34.06,52.0,1314.0,170.0,629.0,214.0,7.1669,500001.0,<1H OCEAN --118.34,34.05,52.0,2530.0,458.0,1122.0,449.0,3.9167,321600.0,<1H OCEAN --118.34,34.06,52.0,2069.0,417.0,826.0,377.0,3.5481,396000.0,<1H OCEAN --118.34,34.06,52.0,1482.0,336.0,768.0,300.0,3.7167,327300.0,<1H OCEAN --118.35,34.06,52.0,2837.0,602.0,1164.0,551.0,3.2411,250000.0,<1H OCEAN --118.35,34.06,48.0,1354.0,279.0,716.0,309.0,3.7167,385000.0,<1H OCEAN --118.35,34.06,52.0,1368.0,322.0,617.0,303.0,5.3819,440900.0,<1H OCEAN --118.35,34.05,33.0,2880.0,836.0,1416.0,736.0,2.6781,328800.0,<1H OCEAN --118.35,34.06,48.0,3551.0,826.0,1601.0,827.0,3.2279,400000.0,<1H OCEAN --118.36,34.06,39.0,2810.0,670.0,1109.0,624.0,3.25,355000.0,<1H OCEAN --118.36,34.06,52.0,2130.0,455.0,921.0,395.0,2.9605,500001.0,<1H OCEAN --118.37,34.06,52.0,843.0,160.0,333.0,151.0,4.5192,446000.0,<1H OCEAN --118.37,34.06,52.0,1608.0,289.0,630.0,252.0,5.5596,500001.0,<1H OCEAN --118.38,34.06,28.0,2522.0,616.0,991.0,574.0,3.1475,362500.0,<1H OCEAN --118.38,34.06,29.0,3946.0,1008.0,1676.0,876.0,2.7824,450000.0,<1H OCEAN --118.38,34.06,31.0,4345.0,1158.0,1987.0,1070.0,2.8233,310000.0,<1H OCEAN --118.38,34.06,25.0,2558.0,661.0,1183.0,636.0,3.5556,500000.0,<1H OCEAN --118.37,34.05,35.0,2457.0,552.0,1159.0,523.0,3.0862,345300.0,<1H OCEAN --118.37,34.04,52.0,1197.0,231.0,671.0,219.0,3.825,278500.0,<1H OCEAN --118.37,34.05,48.0,1266.0,234.0,539.0,222.0,4.005,275000.0,<1H OCEAN --118.37,34.05,41.0,2369.0,544.0,1252.0,522.0,2.9883,296100.0,<1H OCEAN --118.37,34.06,52.0,2239.0,423.0,832.0,411.0,5.0858,470000.0,<1H OCEAN --118.37,34.05,52.0,2346.0,437.0,1121.0,400.0,4.0583,444300.0,<1H OCEAN --118.37,34.05,52.0,1563.0,306.0,776.0,308.0,3.625,440900.0,<1H OCEAN --118.37,34.06,52.0,2402.0,506.0,878.0,464.0,4.0217,500001.0,<1H OCEAN --118.36,34.05,48.0,1825.0,404.0,728.0,363.0,3.3824,322600.0,<1H OCEAN --118.36,34.05,47.0,1424.0,300.0,632.0,278.0,4.0625,295200.0,<1H OCEAN --118.36,34.05,48.0,1835.0,380.0,956.0,370.0,3.2813,243600.0,<1H OCEAN --118.36,34.04,49.0,995.0,184.0,462.0,194.0,2.7917,242000.0,<1H OCEAN --118.36,34.05,45.0,1879.0,395.0,946.0,409.0,3.3333,254700.0,<1H OCEAN --118.36,34.05,50.0,3518.0,812.0,1724.0,758.0,3.0833,338100.0,<1H OCEAN --118.38,34.05,52.0,2053.0,480.0,900.0,417.0,3.0707,417900.0,<1H OCEAN --118.39,34.05,47.0,1621.0,314.0,724.0,311.0,5.7509,474100.0,<1H OCEAN --118.38,34.05,52.0,1004.0,231.0,590.0,226.0,4.2404,351000.0,<1H OCEAN --118.38,34.05,52.0,1241.0,210.0,526.0,214.0,4.4191,334100.0,<1H OCEAN --118.38,34.05,49.0,702.0,,458.0,187.0,4.8958,333600.0,<1H OCEAN --118.38,34.05,40.0,2352.0,598.0,1133.0,563.0,3.238,287500.0,<1H OCEAN --118.38,34.05,35.0,3517.0,879.0,1632.0,784.0,3.0956,500001.0,<1H OCEAN --118.35,34.05,47.0,2815.0,679.0,1533.0,594.0,2.5806,234100.0,<1H OCEAN --118.35,34.05,44.0,1856.0,493.0,1374.0,469.0,2.0984,158000.0,<1H OCEAN --118.36,34.05,42.0,1372.0,,674.0,271.0,2.8793,202100.0,<1H OCEAN --118.36,34.05,45.0,2283.0,,1093.0,475.0,2.5658,252000.0,<1H OCEAN --118.35,34.05,46.0,2149.0,451.0,905.0,443.0,2.8841,290800.0,<1H OCEAN --118.34,34.05,50.0,2009.0,419.0,1130.0,402.0,3.1944,213500.0,<1H OCEAN --118.34,34.05,39.0,975.0,292.0,723.0,285.0,2.2725,140600.0,<1H OCEAN --118.35,34.05,52.0,1971.0,414.0,1065.0,409.0,3.6435,195800.0,<1H OCEAN --118.34,34.05,52.0,2194.0,504.0,997.0,438.0,2.6654,259400.0,<1H OCEAN --118.32,34.04,39.0,2965.0,812.0,2638.0,794.0,2.532,172700.0,<1H OCEAN --118.32,34.04,39.0,1294.0,330.0,1140.0,313.0,2.2554,165000.0,<1H OCEAN --118.32,34.04,48.0,1184.0,328.0,953.0,311.0,2.3526,156300.0,<1H OCEAN --118.33,34.04,31.0,1090.0,251.0,955.0,239.0,2.913,192500.0,<1H OCEAN --118.33,34.05,46.0,3015.0,795.0,2300.0,725.0,2.0706,268500.0,<1H OCEAN --118.33,34.04,52.0,2545.0,401.0,1004.0,372.0,3.6373,420000.0,<1H OCEAN --118.34,34.05,41.0,2099.0,472.0,1369.0,465.0,2.7409,167100.0,<1H OCEAN --118.34,34.04,35.0,2345.0,607.0,2042.0,565.0,2.5955,139700.0,<1H OCEAN --118.34,34.04,40.0,2064.0,662.0,2140.0,617.0,2.2254,127100.0,<1H OCEAN --118.34,34.04,37.0,1466.0,529.0,1835.0,500.0,1.7014,123200.0,<1H OCEAN --118.35,34.04,36.0,1956.0,601.0,1672.0,546.0,1.8685,150700.0,<1H OCEAN --118.35,34.04,49.0,1104.0,266.0,668.0,297.0,3.0856,151600.0,<1H OCEAN --118.35,34.04,45.0,1579.0,357.0,713.0,335.0,2.1711,179200.0,<1H OCEAN --118.36,34.04,48.0,1769.0,429.0,993.0,405.0,2.3214,139400.0,<1H OCEAN --118.36,34.04,45.0,1767.0,417.0,1052.0,379.0,3.5161,157000.0,<1H OCEAN --118.35,34.04,38.0,1626.0,375.0,1019.0,372.0,2.3687,146800.0,<1H OCEAN --118.36,34.03,43.0,1690.0,379.0,1017.0,359.0,2.1078,133500.0,<1H OCEAN --118.37,34.03,37.0,1236.0,,966.0,292.0,3.0694,122200.0,<1H OCEAN --118.36,34.04,34.0,3239.0,806.0,2331.0,765.0,2.0538,125800.0,<1H OCEAN --118.35,34.04,41.0,1617.0,423.0,1110.0,375.0,2.4635,169400.0,<1H OCEAN --118.35,34.03,44.0,865.0,208.0,537.0,183.0,1.9,110900.0,<1H OCEAN --118.35,34.04,45.0,1839.0,459.0,1312.0,460.0,2.5625,138000.0,<1H OCEAN --118.34,34.04,42.0,1681.0,360.0,987.0,337.0,2.6,171400.0,<1H OCEAN --118.34,34.03,48.0,1426.0,331.0,784.0,356.0,1.6581,118800.0,<1H OCEAN --118.34,34.04,42.0,2010.0,494.0,1203.0,427.0,1.9408,134600.0,<1H OCEAN --118.35,34.03,35.0,1438.0,333.0,794.0,306.0,1.975,138100.0,<1H OCEAN --118.33,34.04,33.0,1806.0,444.0,1161.0,393.0,2.5927,161500.0,<1H OCEAN --118.33,34.03,33.0,2314.0,624.0,1714.0,582.0,1.7377,183900.0,<1H OCEAN --118.33,34.04,48.0,2437.0,443.0,1400.0,426.0,2.628,251100.0,<1H OCEAN --118.32,34.04,47.0,1989.0,532.0,1430.0,519.0,1.8333,151100.0,<1H OCEAN --118.32,34.04,42.0,1766.0,404.0,1117.0,367.0,2.0259,168800.0,<1H OCEAN --118.32,34.04,44.0,1008.0,223.0,544.0,223.0,2.8654,176800.0,<1H OCEAN --118.32,34.03,35.0,3189.0,935.0,2221.0,801.0,2.1046,114000.0,<1H OCEAN --118.33,34.03,39.0,2840.0,826.0,1911.0,688.0,1.9018,137500.0,<1H OCEAN --118.32,34.03,47.0,1082.0,198.0,455.0,193.0,3.0132,223200.0,<1H OCEAN --118.32,34.03,50.0,1845.0,349.0,1109.0,335.0,2.8971,127800.0,<1H OCEAN --118.32,34.03,47.0,1734.0,453.0,1272.0,438.0,3.1731,121500.0,<1H OCEAN --118.32,34.02,52.0,2511.0,587.0,1660.0,546.0,2.6098,127100.0,<1H OCEAN --118.32,34.02,51.0,2010.0,460.0,1355.0,433.0,2.0304,133400.0,<1H OCEAN --118.32,34.02,47.0,1648.0,346.0,1120.0,338.0,2.0042,114200.0,<1H OCEAN --118.33,34.02,45.0,1667.0,399.0,928.0,375.0,1.8783,118200.0,<1H OCEAN --118.33,34.02,46.0,1528.0,391.0,933.0,366.0,2.1979,125700.0,<1H OCEAN --118.33,34.03,46.0,2312.0,625.0,1552.0,603.0,1.6429,125000.0,<1H OCEAN --118.34,34.02,48.0,1614.0,320.0,684.0,318.0,4.2218,181000.0,<1H OCEAN --118.34,34.02,44.0,2067.0,385.0,1046.0,441.0,3.5357,156900.0,<1H OCEAN --118.35,34.03,49.0,2334.0,530.0,1334.0,447.0,1.89,124000.0,<1H OCEAN --118.35,34.03,43.0,2122.0,524.0,1510.0,436.0,2.2273,123300.0,<1H OCEAN --118.35,34.02,52.0,427.0,92.0,233.0,116.0,3.25,134700.0,<1H OCEAN --118.35,34.03,42.0,2043.0,512.0,1634.0,501.0,1.9928,125400.0,<1H OCEAN --118.36,34.03,36.0,1083.0,342.0,1023.0,295.0,2.1324,143800.0,<1H OCEAN --118.36,34.03,40.0,2323.0,661.0,1847.0,614.0,1.8316,113500.0,<1H OCEAN --118.36,34.03,38.0,1400.0,376.0,1139.0,315.0,2.2368,120000.0,<1H OCEAN --118.36,34.03,35.0,1819.0,499.0,1666.0,482.0,1.6452,125900.0,<1H OCEAN --118.36,34.03,38.0,2365.0,638.0,2259.0,607.0,2.0879,120700.0,<1H OCEAN --118.37,34.03,43.0,1350.0,287.0,811.0,307.0,3.3636,140900.0,<1H OCEAN --118.34,34.03,46.0,2437.0,502.0,1151.0,477.0,2.4444,134100.0,<1H OCEAN --118.34,34.02,49.0,1609.0,371.0,896.0,389.0,2.5156,136600.0,<1H OCEAN --118.34,34.02,50.0,1172.0,261.0,685.0,260.0,3.1442,130300.0,<1H OCEAN --118.34,34.03,49.0,1295.0,276.0,765.0,265.0,3.4306,130200.0,<1H OCEAN --118.34,34.03,47.0,1927.0,561.0,1349.0,508.0,1.3444,125000.0,<1H OCEAN --118.36,34.02,43.0,1356.0,333.0,796.0,329.0,1.7159,189700.0,<1H OCEAN --118.37,34.03,41.0,1425.0,285.0,838.0,296.0,3.9732,188400.0,<1H OCEAN --118.37,34.02,44.0,1944.0,458.0,981.0,377.0,2.6154,193200.0,<1H OCEAN --118.28,34.05,35.0,1627.0,838.0,3013.0,791.0,1.5565,152500.0,<1H OCEAN --118.28,34.04,39.0,1155.0,433.0,1857.0,424.0,2.1696,153400.0,<1H OCEAN --118.29,34.04,41.0,659.0,291.0,1224.0,290.0,2.0817,132500.0,<1H OCEAN --118.29,34.05,40.0,907.0,349.0,1426.0,323.0,1.8571,143800.0,<1H OCEAN --118.29,34.04,48.0,1353.0,488.0,1945.0,487.0,2.4359,123700.0,<1H OCEAN --118.3,34.04,50.0,1757.0,522.0,2080.0,488.0,1.7225,180000.0,<1H OCEAN --118.3,34.05,51.0,1005.0,314.0,1227.0,306.0,2.4297,162500.0,<1H OCEAN --118.3,34.05,39.0,993.0,506.0,1765.0,464.0,1.2786,121900.0,<1H OCEAN --118.31,34.05,38.0,1864.0,515.0,1768.0,439.0,1.9336,190600.0,<1H OCEAN --118.31,34.05,35.0,2007.0,571.0,1513.0,554.0,2.1162,229200.0,<1H OCEAN --118.31,34.05,26.0,1809.0,640.0,2543.0,640.0,2.3536,500000.0,<1H OCEAN --118.31,34.04,33.0,2691.0,726.0,2390.0,681.0,2.4048,208300.0,<1H OCEAN --118.31,34.04,29.0,2038.0,578.0,2070.0,570.0,2.0658,214600.0,<1H OCEAN --118.31,34.03,29.0,2438.0,867.0,2114.0,753.0,0.8351,150000.0,<1H OCEAN --118.32,34.03,31.0,2206.0,501.0,1194.0,435.0,1.9531,227800.0,<1H OCEAN --118.31,34.04,52.0,1277.0,285.0,954.0,334.0,2.5833,234600.0,<1H OCEAN --118.3,34.04,24.0,2092.0,585.0,1757.0,538.0,1.7109,175000.0,<1H OCEAN --118.3,34.04,37.0,1470.0,399.0,1579.0,390.0,2.006,150000.0,<1H OCEAN --118.31,34.04,37.0,2338.0,686.0,2376.0,630.0,1.767,170300.0,<1H OCEAN --118.29,34.04,44.0,1941.0,579.0,2049.0,535.0,2.0405,143000.0,<1H OCEAN --118.3,34.03,41.0,1653.0,426.0,1868.0,393.0,1.78,162500.0,<1H OCEAN --118.3,34.04,35.0,1090.0,345.0,1605.0,330.0,2.1518,152800.0,<1H OCEAN --118.29,34.04,31.0,700.0,299.0,1272.0,298.0,2.1542,128100.0,<1H OCEAN --118.29,34.04,32.0,432.0,182.0,702.0,186.0,2.1471,125000.0,<1H OCEAN --118.29,34.03,42.0,1680.0,557.0,2099.0,526.0,1.9167,136400.0,<1H OCEAN --118.28,34.03,45.0,943.0,289.0,953.0,238.0,2.0673,151600.0,<1H OCEAN --118.29,34.03,42.0,907.0,378.0,822.0,288.0,1.2875,179200.0,<1H OCEAN --118.29,34.03,29.0,3544.0,1384.0,3323.0,1213.0,1.0219,258300.0,<1H OCEAN --118.29,34.03,38.0,1501.0,437.0,1777.0,441.0,2.0848,135200.0,<1H OCEAN --118.29,34.03,22.0,3313.0,1235.0,2381.0,1063.0,0.7473,168800.0,<1H OCEAN --118.29,34.03,27.0,1084.0,287.0,1085.0,279.0,2.135,119600.0,<1H OCEAN --118.31,34.03,46.0,2173.0,510.0,1343.0,476.0,2.025,135500.0,<1H OCEAN --118.31,34.03,52.0,1902.0,406.0,1233.0,385.0,2.8295,132200.0,<1H OCEAN --118.31,34.02,52.0,1173.0,284.0,814.0,295.0,2.45,111400.0,<1H OCEAN --118.31,34.02,44.0,1555.0,324.0,931.0,265.0,1.4712,105800.0,<1H OCEAN --118.31,34.02,45.0,1423.0,278.0,822.0,276.0,2.4519,98100.0,<1H OCEAN --118.31,34.02,52.0,1832.0,441.0,1186.0,420.0,1.2434,98400.0,<1H OCEAN --118.3,34.03,47.0,2241.0,559.0,1775.0,504.0,2.1571,147900.0,<1H OCEAN --118.3,34.03,40.0,1695.0,374.0,1138.0,357.0,2.7125,150000.0,<1H OCEAN --118.31,34.03,47.0,1315.0,,785.0,245.0,1.23,138400.0,<1H OCEAN --118.3,34.03,37.0,2781.0,766.0,2586.0,729.0,1.8564,187500.0,<1H OCEAN --118.31,34.03,34.0,2041.0,517.0,1479.0,495.0,2.1173,156600.0,<1H OCEAN --118.31,34.02,23.0,1703.0,397.0,1333.0,361.0,1.3187,127100.0,<1H OCEAN --118.31,34.02,46.0,1976.0,469.0,1409.0,431.0,2.2981,112100.0,<1H OCEAN --118.3,34.02,49.0,2120.0,483.0,1522.0,416.0,1.85,116800.0,<1H OCEAN --118.29,34.02,21.0,1641.0,491.0,1526.0,453.0,2.087,141300.0,<1H OCEAN --118.3,34.02,34.0,3184.0,772.0,2474.0,705.0,1.631,137500.0,<1H OCEAN --118.3,34.02,31.0,1933.0,478.0,1522.0,423.0,1.5781,119300.0,<1H OCEAN --118.28,34.02,29.0,515.0,229.0,2690.0,217.0,0.4999,500001.0,<1H OCEAN --118.27,34.03,50.0,395.0,232.0,948.0,243.0,1.7546,175000.0,<1H OCEAN --118.27,34.03,51.0,1280.0,422.0,1560.0,381.0,1.7115,125000.0,<1H OCEAN --118.28,34.04,19.0,460.0,241.0,890.0,229.0,1.6089,162500.0,<1H OCEAN --118.28,34.04,24.0,1283.0,545.0,1932.0,516.0,1.2969,160200.0,<1H OCEAN --118.28,34.04,25.0,1582.0,780.0,2390.0,719.0,1.4167,200000.0,<1H OCEAN --118.28,34.04,20.0,1193.0,454.0,1880.0,453.0,2.1806,180000.0,<1H OCEAN --118.28,34.05,44.0,1273.0,474.0,1754.0,460.0,1.6037,275000.0,<1H OCEAN --118.28,34.03,41.0,1933.0,791.0,3121.0,719.0,1.8539,147500.0,<1H OCEAN --118.28,34.03,40.0,2118.0,796.0,2195.0,658.0,1.7976,164600.0,<1H OCEAN --118.28,34.04,48.0,1521.0,513.0,1772.0,458.0,2.2232,162500.0,<1H OCEAN --118.27,34.02,39.0,2004.0,633.0,3050.0,621.0,1.875,127300.0,<1H OCEAN --118.28,34.02,52.0,281.0,103.0,470.0,96.0,1.9375,38800.0,<1H OCEAN --118.27,34.02,40.0,561.0,284.0,662.0,205.0,0.9234,187500.0,<1H OCEAN --118.28,34.03,26.0,2107.0,809.0,2821.0,572.0,0.844,350000.0,<1H OCEAN --118.28,34.03,25.0,1407.0,550.0,1193.0,472.0,1.2989,225000.0,<1H OCEAN --118.25,34.02,50.0,180.0,89.0,356.0,76.0,2.1944,158300.0,<1H OCEAN --118.24,34.03,52.0,142.0,47.0,137.0,45.0,1.8333,312500.0,<1H OCEAN --118.26,34.03,49.0,299.0,90.0,287.0,68.0,1.2096,100000.0,<1H OCEAN --118.25,34.03,52.0,1274.0,418.0,1655.0,368.0,2.1905,124000.0,<1H OCEAN --118.25,34.02,32.0,1375.0,448.0,1698.0,432.0,1.6302,130700.0,<1H OCEAN --118.26,34.02,38.0,980.0,285.0,1308.0,310.0,1.5652,123100.0,<1H OCEAN --118.26,34.02,38.0,1091.0,349.0,1786.0,340.0,2.131,136500.0,<1H OCEAN --118.26,34.02,40.0,1259.0,362.0,1499.0,327.0,1.8382,126400.0,<1H OCEAN --118.26,34.02,37.0,1551.0,501.0,2173.0,474.0,2.1667,117700.0,<1H OCEAN --118.26,34.02,48.0,1465.0,440.0,1859.0,400.0,1.3134,96200.0,<1H OCEAN --118.26,34.02,46.0,1249.0,357.0,1607.0,331.0,2.0703,114800.0,<1H OCEAN --118.26,34.02,41.0,848.0,323.0,1428.0,313.0,1.5603,109600.0,<1H OCEAN --118.26,34.02,39.0,698.0,232.0,1046.0,228.0,2.2356,119500.0,<1H OCEAN --118.25,34.02,35.0,1368.0,486.0,2239.0,461.0,1.913,114300.0,<1H OCEAN --118.25,34.02,33.0,1676.0,525.0,2564.0,515.0,2.1957,100800.0,<1H OCEAN --118.25,34.01,28.0,481.0,136.0,596.0,128.0,1.2396,90300.0,<1H OCEAN --118.25,34.02,32.0,1311.0,410.0,1792.0,396.0,2.3304,119900.0,<1H OCEAN --118.24,34.02,48.0,542.0,150.0,571.0,114.0,1.8485,90600.0,<1H OCEAN --118.24,34.01,48.0,396.0,99.0,485.0,110.0,2.375,107500.0,<1H OCEAN --118.24,34.01,43.0,1456.0,444.0,2098.0,433.0,1.8929,99200.0,<1H OCEAN --118.25,34.01,31.0,1301.0,403.0,1952.0,377.0,2.1466,100800.0,<1H OCEAN --118.24,34.01,30.0,405.0,86.0,376.0,68.0,1.7813,127500.0,<1H OCEAN --118.25,34.01,45.0,782.0,270.0,1030.0,235.0,1.0898,93400.0,<1H OCEAN --118.25,34.01,36.0,879.0,262.0,1034.0,236.0,1.2857,99300.0,<1H OCEAN --118.25,34.01,43.0,1429.0,386.0,1412.0,354.0,1.3287,107200.0,<1H OCEAN --118.25,34.01,43.0,1575.0,475.0,1980.0,469.0,1.7425,100500.0,<1H OCEAN --118.25,34.01,30.0,962.0,291.0,1280.0,263.0,1.4464,110200.0,<1H OCEAN --118.26,34.01,38.0,697.0,208.0,749.0,206.0,1.4653,118800.0,<1H OCEAN --118.26,34.01,47.0,1269.0,323.0,1628.0,325.0,1.5089,115800.0,<1H OCEAN --118.26,34.01,37.0,2451.0,668.0,2824.0,598.0,1.9074,99600.0,<1H OCEAN --118.27,34.01,42.0,990.0,289.0,1167.0,281.0,1.4524,126800.0,<1H OCEAN --118.26,34.01,46.0,879.0,253.0,1010.0,221.0,2.1776,118300.0,<1H OCEAN --118.27,34.02,21.0,1314.0,375.0,1505.0,366.0,2.319,97200.0,<1H OCEAN --118.27,34.01,35.0,1193.0,355.0,1784.0,341.0,1.8652,116100.0,<1H OCEAN --118.27,34.01,35.0,1672.0,556.0,2106.0,519.0,1.2206,129200.0,<1H OCEAN --118.27,34.01,47.0,921.0,264.0,881.0,221.0,1.4327,114100.0,<1H OCEAN --118.27,34.01,43.0,1235.0,385.0,1745.0,372.0,2.0817,113300.0,<1H OCEAN --118.27,34.0,46.0,1748.0,428.0,1707.0,409.0,2.148,103800.0,<1H OCEAN --118.27,34.0,48.0,1869.0,461.0,1834.0,441.0,1.7052,107400.0,<1H OCEAN --118.27,34.0,47.0,780.0,237.0,888.0,215.0,1.75,95800.0,<1H OCEAN --118.26,34.01,43.0,2179.0,682.0,2624.0,609.0,1.8641,108200.0,<1H OCEAN --118.26,34.0,41.0,1733.0,492.0,1776.0,453.0,1.6221,104200.0,<1H OCEAN --118.25,34.0,36.0,1033.0,267.0,1112.0,229.0,1.7237,105800.0,<1H OCEAN --118.25,34.0,36.0,1176.0,309.0,1267.0,292.0,1.6382,105000.0,<1H OCEAN --118.25,34.0,32.0,1218.0,342.0,1292.0,304.0,1.5781,102900.0,<1H OCEAN --118.25,34.0,41.0,1768.0,475.0,1721.0,474.0,1.303,90400.0,<1H OCEAN --118.25,34.0,34.0,1905.0,552.0,2194.0,521.0,1.4792,95800.0,<1H OCEAN --118.24,34.0,23.0,588.0,157.0,716.0,173.0,1.2056,87500.0,<1H OCEAN --118.24,34.0,43.0,863.0,206.0,788.0,187.0,0.9463,95000.0,<1H OCEAN --118.25,34.0,29.0,1419.0,363.0,1696.0,317.0,2.2813,101300.0,<1H OCEAN --118.24,34.0,38.0,1715.0,414.0,1714.0,389.0,1.7132,108200.0,<1H OCEAN --118.24,33.99,44.0,448.0,116.0,504.0,96.0,1.875,98600.0,<1H OCEAN --118.24,33.99,41.0,1425.0,372.0,1803.0,353.0,1.6731,88200.0,<1H OCEAN --118.25,33.99,42.0,2261.0,574.0,2496.0,527.0,1.5556,98500.0,<1H OCEAN --118.25,33.99,39.0,1274.0,319.0,1362.0,324.0,2.1793,107900.0,<1H OCEAN --118.26,34.0,27.0,1611.0,479.0,1457.0,458.0,0.8941,91900.0,<1H OCEAN --118.26,34.0,37.0,2615.0,697.0,2484.0,630.0,1.9208,103400.0,<1H OCEAN --118.27,34.0,40.0,2099.0,599.0,2311.0,529.0,1.852,101500.0,<1H OCEAN --118.27,34.0,43.0,1638.0,434.0,1213.0,390.0,1.3403,110800.0,<1H OCEAN --118.27,34.0,43.0,1258.0,381.0,1276.0,358.0,1.8917,106900.0,<1H OCEAN --118.26,33.99,47.0,1865.0,465.0,1916.0,438.0,1.8242,95000.0,<1H OCEAN --118.26,33.99,36.0,2016.0,505.0,1807.0,464.0,1.6901,103500.0,<1H OCEAN --118.27,33.99,30.0,504.0,140.0,529.0,123.0,1.9531,100000.0,<1H OCEAN --118.27,33.99,35.0,932.0,294.0,1153.0,282.0,1.4886,100000.0,<1H OCEAN --118.27,33.99,38.0,1407.0,447.0,1783.0,402.0,1.8086,97100.0,<1H OCEAN --118.28,34.01,46.0,441.0,167.0,621.0,144.0,1.8824,162500.0,<1H OCEAN --118.28,34.02,46.0,1098.0,426.0,1510.0,374.0,2.1382,156300.0,<1H OCEAN --118.29,34.01,40.0,885.0,312.0,799.0,221.0,1.1667,143800.0,<1H OCEAN --118.3,34.01,48.0,4217.0,1095.0,3298.0,949.0,1.9152,122300.0,<1H OCEAN --118.3,34.02,27.0,2190.0,626.0,1768.0,528.0,1.2446,103800.0,<1H OCEAN --118.29,34.02,26.0,2001.0,582.0,2044.0,557.0,1.1563,118800.0,<1H OCEAN --118.3,34.02,42.0,2386.0,670.0,2327.0,661.0,1.6699,108000.0,<1H OCEAN --118.3,34.01,35.0,1147.0,290.0,818.0,281.0,1.7961,111700.0,<1H OCEAN --118.31,34.01,50.0,1463.0,354.0,912.0,293.0,1.7386,109400.0,<1H OCEAN --118.31,34.02,41.0,1046.0,216.0,727.0,201.0,1.6667,116900.0,<1H OCEAN --118.31,34.02,43.0,2255.0,533.0,1568.0,470.0,1.6955,115200.0,<1H OCEAN --118.31,34.01,39.0,2073.0,566.0,1246.0,547.0,2.0417,117100.0,<1H OCEAN --118.31,34.02,46.0,2217.0,489.0,1227.0,448.0,1.6851,108800.0,<1H OCEAN --118.31,34.01,48.0,2544.0,532.0,1357.0,498.0,2.5263,121000.0,<1H OCEAN --118.31,34.01,52.0,2547.0,475.0,1417.0,444.0,1.8214,123200.0,<1H OCEAN --118.31,34.01,52.0,1793.0,350.0,1303.0,366.0,3.0759,123700.0,<1H OCEAN --118.29,34.01,42.0,814.0,223.0,511.0,188.0,2.3942,123200.0,<1H OCEAN --118.29,34.01,50.0,2238.0,673.0,2247.0,583.0,1.6505,125000.0,<1H OCEAN --118.3,34.0,52.0,1743.0,421.0,1206.0,384.0,1.6875,116000.0,<1H OCEAN --118.3,34.01,52.0,1908.0,428.0,1271.0,394.0,2.5885,136200.0,<1H OCEAN --118.3,34.01,52.0,1444.0,343.0,1154.0,334.0,2.0625,134400.0,<1H OCEAN --118.28,34.01,34.0,2305.0,775.0,2450.0,740.0,1.7143,132000.0,<1H OCEAN --118.28,34.0,46.0,1650.0,463.0,1992.0,458.0,2.3403,114100.0,<1H OCEAN --118.29,34.0,6.0,1487.0,468.0,1509.0,403.0,1.4639,112500.0,<1H OCEAN --118.29,34.01,39.0,751.0,207.0,1010.0,231.0,1.6036,137500.0,<1H OCEAN --118.29,34.01,30.0,1385.0,518.0,1730.0,472.0,1.0539,142500.0,<1H OCEAN --118.28,34.01,50.0,2601.0,794.0,3080.0,770.0,1.8656,122900.0,<1H OCEAN --118.28,34.0,43.0,713.0,245.0,880.0,237.0,1.2065,103600.0,<1H OCEAN --118.28,34.01,52.0,795.0,308.0,1118.0,275.0,1.2175,131300.0,<1H OCEAN --118.28,34.01,48.0,483.0,190.0,775.0,188.0,2.3309,126600.0,<1H OCEAN --118.28,34.0,38.0,3335.0,921.0,3612.0,887.0,2.125,118800.0,<1H OCEAN --118.28,34.0,42.0,1534.0,417.0,1295.0,380.0,2.0938,119200.0,<1H OCEAN --118.28,34.0,42.0,855.0,284.0,890.0,247.0,1.2778,112500.0,<1H OCEAN --118.28,34.0,44.0,2636.0,725.0,2182.0,651.0,1.432,124000.0,<1H OCEAN --118.28,34.0,48.0,1514.0,376.0,1353.0,344.0,2.1607,96100.0,<1H OCEAN --118.29,34.0,44.0,1753.0,387.0,1165.0,380.0,2.1354,105800.0,<1H OCEAN --118.29,34.0,41.0,1807.0,493.0,1731.0,471.0,1.2347,111700.0,<1H OCEAN --118.29,34.0,52.0,1319.0,295.0,898.0,271.0,2.7727,128600.0,<1H OCEAN --118.3,34.0,40.0,1131.0,281.0,859.0,230.0,1.1806,134600.0,<1H OCEAN --118.3,34.0,52.0,1420.0,355.0,1080.0,353.0,1.5179,116100.0,<1H OCEAN --118.29,34.0,52.0,2579.0,494.0,1558.0,458.0,2.0809,109600.0,<1H OCEAN --118.3,34.0,52.0,1686.0,377.0,982.0,356.0,2.0958,116400.0,<1H OCEAN --118.3,34.0,52.0,1296.0,246.0,853.0,238.0,3.05,111600.0,<1H OCEAN --118.31,34.0,52.0,1542.0,309.0,939.0,276.0,1.6892,129100.0,<1H OCEAN --118.3,34.0,52.0,1718.0,354.0,1026.0,312.0,2.0,128000.0,<1H OCEAN --118.31,34.0,52.0,1630.0,379.0,1413.0,405.0,1.933,120000.0,<1H OCEAN --118.31,34.0,52.0,2709.0,642.0,1751.0,613.0,2.1116,122500.0,<1H OCEAN --118.31,34.0,47.0,1551.0,362.0,1329.0,322.0,1.9792,116400.0,<1H OCEAN --118.31,33.99,48.0,2235.0,433.0,1363.0,433.0,1.6559,101400.0,<1H OCEAN --118.31,33.99,47.0,1525.0,359.0,982.0,333.0,2.0915,126600.0,<1H OCEAN --118.31,33.99,45.0,1489.0,339.0,791.0,316.0,2.2339,104800.0,<1H OCEAN --118.31,33.99,44.0,1703.0,358.0,789.0,249.0,1.7083,100000.0,<1H OCEAN --118.29,33.99,46.0,2608.0,636.0,1766.0,596.0,1.5846,114800.0,<1H OCEAN --118.3,33.99,47.0,2637.0,588.0,1903.0,521.0,1.8317,96500.0,<1H OCEAN --118.3,33.99,47.0,2212.0,533.0,1903.0,554.0,1.9853,101100.0,<1H OCEAN --118.28,33.99,46.0,2577.0,703.0,2446.0,687.0,1.275,98300.0,<1H OCEAN --118.29,33.99,46.0,2198.0,530.0,2067.0,497.0,2.0542,103400.0,<1H OCEAN --118.28,33.99,52.0,1283.0,342.0,1363.0,329.0,2.5848,101900.0,<1H OCEAN --118.28,33.99,49.0,2174.0,481.0,1861.0,484.0,1.7159,95000.0,<1H OCEAN --118.28,33.99,46.0,1211.0,321.0,1153.0,282.0,1.7849,99300.0,<1H OCEAN --118.32,34.01,52.0,3104.0,645.0,1498.0,581.0,2.6667,128000.0,<1H OCEAN --118.32,34.02,50.0,1655.0,256.0,672.0,260.0,4.2554,194300.0,<1H OCEAN --118.32,34.02,48.0,1949.0,308.0,823.0,340.0,3.3906,189700.0,<1H OCEAN --118.32,34.01,50.0,1842.0,377.0,817.0,341.0,3.1548,157700.0,<1H OCEAN --118.32,34.01,47.0,1745.0,371.0,1079.0,368.0,2.4022,123400.0,<1H OCEAN --118.33,34.02,46.0,2223.0,361.0,968.0,373.0,4.26,182600.0,<1H OCEAN --118.33,34.01,47.0,1320.0,259.0,653.0,291.0,3.7727,193000.0,<1H OCEAN --118.33,34.02,42.0,2043.0,378.0,869.0,416.0,3.5,181100.0,<1H OCEAN --118.32,34.01,44.0,4032.0,913.0,1622.0,848.0,2.4934,165800.0,<1H OCEAN --118.33,34.01,43.0,2227.0,564.0,956.0,472.0,2.0217,187500.0,<1H OCEAN --118.33,34.01,44.0,1762.0,463.0,786.0,445.0,1.9231,188500.0,<1H OCEAN --118.33,34.01,44.0,2182.0,492.0,878.0,493.0,1.9631,181300.0,<1H OCEAN --118.32,34.0,50.0,3250.0,693.0,2300.0,675.0,1.95,112600.0,<1H OCEAN --118.32,34.0,50.0,2189.0,460.0,1097.0,469.0,2.4583,120900.0,<1H OCEAN --118.33,34.0,47.0,1671.0,388.0,895.0,317.0,2.2054,121500.0,<1H OCEAN --118.33,34.0,47.0,825.0,187.0,416.0,173.0,2.3333,133300.0,<1H OCEAN --118.33,34.0,24.0,873.0,320.0,529.0,308.0,0.9304,151600.0,<1H OCEAN --118.32,33.99,43.0,2028.0,479.0,1074.0,394.0,2.5909,98700.0,<1H OCEAN --118.32,33.99,49.0,1407.0,269.0,889.0,283.0,1.9779,114200.0,<1H OCEAN --118.33,33.99,44.0,1918.0,387.0,1041.0,364.0,2.8542,126500.0,<1H OCEAN --118.33,33.99,46.0,1582.0,315.0,777.0,286.0,3.2083,149600.0,<1H OCEAN --118.34,33.99,48.0,2009.0,335.0,919.0,297.0,4.8125,170500.0,<1H OCEAN --118.32,33.99,48.0,1260.0,284.0,791.0,280.0,2.1875,115200.0,<1H OCEAN --118.32,33.99,43.0,1257.0,232.0,735.0,232.0,3.7167,108900.0,<1H OCEAN --118.33,33.99,43.0,2224.0,550.0,1598.0,545.0,2.8274,122500.0,<1H OCEAN --118.34,33.99,46.0,1217.0,322.0,662.0,305.0,3.1731,140300.0,<1H OCEAN --118.32,33.98,47.0,949.0,210.0,574.0,217.0,2.175,114700.0,<1H OCEAN --118.32,33.98,40.0,1298.0,277.0,791.0,255.0,3.2344,104300.0,<1H OCEAN --118.32,33.98,47.0,1528.0,331.0,864.0,308.0,1.9732,101000.0,<1H OCEAN --118.32,33.98,46.0,1611.0,339.0,921.0,314.0,3.0833,103300.0,<1H OCEAN --118.33,33.98,28.0,3889.0,1199.0,3121.0,1046.0,1.8806,113900.0,<1H OCEAN --118.33,33.98,32.0,1784.0,489.0,1472.0,476.0,1.6477,108900.0,<1H OCEAN --118.33,33.98,38.0,3063.0,796.0,2153.0,721.0,1.8472,149100.0,<1H OCEAN --118.34,33.99,48.0,2225.0,433.0,1170.0,401.0,2.9643,140400.0,<1H OCEAN --118.34,33.98,46.0,2126.0,409.0,1292.0,414.0,2.9315,149000.0,<1H OCEAN --118.35,33.99,47.0,2183.0,380.0,927.0,371.0,4.9531,180100.0,<1H OCEAN --118.35,33.98,47.0,2512.0,461.0,1082.0,426.0,3.8235,207600.0,<1H OCEAN --118.34,33.99,34.0,397.0,132.0,250.0,121.0,1.675,166700.0,<1H OCEAN --118.32,33.98,44.0,1448.0,314.0,861.0,310.0,2.2396,108600.0,<1H OCEAN --118.32,33.97,52.0,1778.0,320.0,795.0,279.0,3.5114,138800.0,<1H OCEAN --118.32,33.98,49.0,1412.0,333.0,901.0,328.0,1.7067,118600.0,<1H OCEAN --118.33,33.98,30.0,3112.0,931.0,2739.0,841.0,1.6531,118500.0,<1H OCEAN --118.33,33.97,44.0,2526.0,579.0,1423.0,573.0,2.5363,158800.0,<1H OCEAN --118.33,33.97,47.0,1830.0,369.0,922.0,377.0,4.1635,156400.0,<1H OCEAN --118.36,34.02,46.0,3745.0,798.0,1502.0,808.0,3.8643,195800.0,<1H OCEAN --118.36,34.01,33.0,3140.0,466.0,1214.0,464.0,6.5044,350400.0,<1H OCEAN --118.37,34.02,33.0,2263.0,430.0,900.0,382.0,4.4028,246800.0,<1H OCEAN --118.38,34.02,31.0,1893.0,450.0,819.0,426.0,4.3077,140600.0,<1H OCEAN --118.33,34.02,11.0,1249.0,313.0,625.0,336.0,0.8702,170500.0,<1H OCEAN --118.34,34.01,35.0,1359.0,359.0,655.0,341.0,2.5568,312500.0,<1H OCEAN --118.34,34.01,37.0,4291.0,1102.0,1941.0,953.0,1.7945,106300.0,<1H OCEAN --118.34,34.01,38.0,2318.0,735.0,1407.0,702.0,1.6187,266700.0,<1H OCEAN --118.34,34.02,44.0,1527.0,246.0,608.0,245.0,4.0357,187800.0,<1H OCEAN --118.35,34.02,34.0,3978.0,1073.0,2725.0,1035.0,1.7622,167900.0,<1H OCEAN --118.35,34.02,34.0,5218.0,1576.0,3538.0,1371.0,1.5143,118800.0,<1H OCEAN --118.35,34.02,27.0,3358.0,1069.0,2415.0,956.0,1.4589,87500.0,<1H OCEAN --118.35,34.01,33.0,3246.0,601.0,1585.0,603.0,3.6629,353200.0,<1H OCEAN --118.35,34.01,35.0,3776.0,,1583.0,749.0,3.5486,332100.0,<1H OCEAN --118.35,34.0,28.0,3085.0,621.0,1162.0,558.0,3.25,301000.0,<1H OCEAN --118.28,33.99,35.0,1138.0,304.0,1128.0,311.0,1.8818,100000.0,<1H OCEAN --118.28,33.99,37.0,1971.0,513.0,1673.0,464.0,1.4625,103000.0,<1H OCEAN --118.29,33.99,39.0,979.0,235.0,857.0,236.0,2.5547,108900.0,<1H OCEAN --118.29,33.98,41.0,1582.0,416.0,1422.0,370.0,1.0516,108300.0,<1H OCEAN --118.29,33.99,43.0,1902.0,398.0,1153.0,363.0,1.9375,112900.0,<1H OCEAN --118.3,33.99,44.0,1458.0,326.0,1159.0,283.0,1.1645,98200.0,<1H OCEAN --118.3,33.99,43.0,1534.0,384.0,1231.0,329.0,2.5437,94500.0,<1H OCEAN --118.3,33.98,44.0,1597.0,388.0,902.0,321.0,1.9556,93300.0,<1H OCEAN --118.3,33.99,45.0,1701.0,452.0,1484.0,427.0,1.84,91400.0,<1H OCEAN --118.31,33.98,44.0,222.0,54.0,234.0,77.0,5.1136,111700.0,<1H OCEAN --118.31,33.99,49.0,857.0,196.0,694.0,228.0,2.895,108000.0,<1H OCEAN --118.31,33.98,52.0,1837.0,426.0,1062.0,343.0,2.0,96500.0,<1H OCEAN --118.31,33.98,52.0,1607.0,331.0,900.0,295.0,3.5982,96600.0,<1H OCEAN --118.31,33.98,50.0,1985.0,454.0,1090.0,410.0,1.825,106600.0,<1H OCEAN --118.31,33.98,52.0,1975.0,379.0,1043.0,371.0,2.3977,112200.0,<1H OCEAN --118.32,33.98,49.0,1993.0,446.0,1052.0,394.0,2.2138,119800.0,<1H OCEAN --118.29,33.98,44.0,2261.0,555.0,1348.0,455.0,1.9125,97200.0,<1H OCEAN --118.29,33.98,48.0,1124.0,231.0,783.0,223.0,3.4444,93100.0,<1H OCEAN --118.3,33.98,52.0,1371.0,315.0,986.0,277.0,2.9432,94000.0,<1H OCEAN --118.3,33.98,48.0,2010.0,445.0,1208.0,404.0,1.6611,95800.0,<1H OCEAN --118.3,33.98,48.0,1998.0,410.0,1176.0,382.0,3.0455,102400.0,<1H OCEAN --118.3,33.98,44.0,1242.0,270.0,811.0,274.0,2.9375,95200.0,<1H OCEAN --118.29,33.98,42.0,2833.0,768.0,2542.0,725.0,1.3479,100000.0,<1H OCEAN --118.29,33.98,46.0,1118.0,300.0,786.0,254.0,1.4042,110000.0,<1H OCEAN --118.28,33.98,39.0,1306.0,345.0,1332.0,331.0,1.9564,92200.0,<1H OCEAN --118.28,33.98,47.0,865.0,193.0,782.0,217.0,2.2411,93000.0,<1H OCEAN --118.28,33.98,45.0,1720.0,416.0,1382.0,365.0,0.9337,92300.0,<1H OCEAN --118.28,33.98,19.0,883.0,313.0,726.0,277.0,0.9809,121400.0,<1H OCEAN --118.29,33.98,30.0,1162.0,318.0,1207.0,289.0,1.223,100000.0,<1H OCEAN --118.28,33.97,31.0,1068.0,271.0,1091.0,281.0,1.689,102600.0,<1H OCEAN --118.28,33.97,31.0,2017.0,566.0,2063.0,521.0,1.9219,107000.0,<1H OCEAN --118.28,33.97,35.0,2305.0,634.0,1978.0,568.0,1.375,100000.0,<1H OCEAN --118.29,33.97,43.0,2660.0,672.0,2133.0,588.0,1.7734,107300.0,<1H OCEAN --118.3,33.97,46.0,1425.0,317.0,1140.0,304.0,3.375,98500.0,<1H OCEAN --118.3,33.97,44.0,1521.0,289.0,1074.0,285.0,2.0673,99800.0,<1H OCEAN --118.3,33.97,42.0,944.0,200.0,567.0,190.0,2.6311,124100.0,<1H OCEAN --118.3,33.97,50.0,2270.0,451.0,1000.0,412.0,2.1221,119400.0,<1H OCEAN --118.31,33.97,52.0,1595.0,325.0,823.0,302.0,3.2188,124200.0,<1H OCEAN --118.31,33.97,47.0,2066.0,422.0,1156.0,380.0,2.7917,125800.0,<1H OCEAN --118.31,33.97,52.0,1629.0,277.0,819.0,288.0,3.725,142600.0,<1H OCEAN --118.31,33.97,48.0,1541.0,314.0,819.0,312.0,3.0917,136100.0,<1H OCEAN --118.31,33.94,41.0,1353.0,286.0,751.0,250.0,2.7401,131700.0,<1H OCEAN --118.3,33.95,50.0,1843.0,326.0,892.0,314.0,3.1346,120000.0,<1H OCEAN --118.31,33.95,43.0,1823.0,358.0,1065.0,342.0,3.2708,131000.0,<1H OCEAN --118.31,33.95,44.0,1558.0,333.0,1095.0,316.0,4.0043,133500.0,<1H OCEAN --118.31,33.95,44.0,2490.0,430.0,1305.0,411.0,4.8295,149600.0,<1H OCEAN --118.31,33.94,43.0,2104.0,393.0,1132.0,394.0,3.0682,142000.0,<1H OCEAN --118.31,33.96,43.0,2118.0,569.0,1266.0,500.0,1.747,121000.0,<1H OCEAN --118.31,33.96,43.0,2149.0,493.0,1316.0,462.0,1.528,131800.0,<1H OCEAN --118.31,33.96,46.0,1686.0,303.0,870.0,320.0,3.4643,136300.0,<1H OCEAN --118.31,33.96,48.0,2015.0,356.0,1020.0,338.0,4.0625,138700.0,<1H OCEAN --118.29,33.97,48.0,3139.0,587.0,1319.0,506.0,3.5208,134200.0,<1H OCEAN --118.29,33.96,36.0,1717.0,417.0,902.0,368.0,1.4868,113200.0,<1H OCEAN --118.3,33.96,43.0,2009.0,442.0,1095.0,439.0,2.8299,109500.0,<1H OCEAN --118.3,33.96,39.0,2802.0,618.0,1524.0,529.0,2.6518,136300.0,<1H OCEAN --118.28,33.96,41.0,1175.0,340.0,1241.0,352.0,1.2273,98400.0,<1H OCEAN --118.28,33.96,34.0,2074.0,562.0,1913.0,514.0,1.6156,102100.0,<1H OCEAN --118.28,33.97,34.0,2771.0,802.0,2782.0,715.0,1.6652,99000.0,<1H OCEAN --118.29,33.96,31.0,4022.0,1208.0,3707.0,1007.0,1.3096,116300.0,<1H OCEAN --118.3,33.96,47.0,2112.0,417.0,1161.0,368.0,3.9722,117400.0,<1H OCEAN --118.31,33.96,52.0,2523.0,460.0,1167.0,413.0,3.0625,127400.0,<1H OCEAN --118.31,33.96,47.0,1586.0,322.0,1077.0,339.0,4.4861,140400.0,<1H OCEAN --118.31,33.96,47.0,2005.0,392.0,1134.0,415.0,3.7143,140300.0,<1H OCEAN --118.26,33.99,30.0,1702.0,443.0,1966.0,442.0,1.5521,97500.0,<1H OCEAN --118.27,33.98,30.0,1966.0,584.0,2028.0,535.0,1.625,101500.0,<1H OCEAN --118.28,33.99,38.0,1454.0,323.0,1098.0,297.0,1.5109,104000.0,<1H OCEAN --118.27,33.99,41.0,656.0,162.0,730.0,170.0,1.8047,101800.0,<1H OCEAN --118.28,33.98,43.0,1240.0,312.0,1100.0,311.0,1.575,97500.0,<1H OCEAN --118.27,33.98,45.0,1696.0,424.0,1502.0,429.0,1.3042,99200.0,<1H OCEAN --118.27,33.98,39.0,2062.0,588.0,1933.0,570.0,1.3801,97000.0,<1H OCEAN --118.27,33.98,44.0,1722.0,457.0,2177.0,401.0,2.125,92500.0,<1H OCEAN --118.26,33.98,43.0,762.0,206.0,854.0,188.0,1.2315,98200.0,<1H OCEAN --118.26,33.97,46.0,1295.0,351.0,1120.0,323.0,1.7121,98200.0,<1H OCEAN --118.26,33.97,44.0,1246.0,308.0,1031.0,295.0,1.9556,96300.0,<1H OCEAN --118.26,33.97,46.0,1521.0,352.0,1100.0,334.0,1.55,100600.0,<1H OCEAN --118.26,33.97,46.0,1086.0,249.0,880.0,250.0,1.5962,95700.0,<1H OCEAN --118.27,33.97,45.0,1546.0,371.0,1186.0,366.0,1.64,96800.0,<1H OCEAN --118.28,33.97,40.0,2180.0,642.0,2464.0,631.0,1.5521,90100.0,<1H OCEAN --118.27,33.97,39.0,2569.0,688.0,2601.0,630.0,2.0754,101400.0,<1H OCEAN --118.28,33.97,38.0,1819.0,497.0,2110.0,499.0,1.6027,97300.0,<1H OCEAN --118.27,33.96,38.0,977.0,295.0,1073.0,292.0,1.0208,86400.0,<1H OCEAN --118.27,33.96,42.0,796.0,203.0,697.0,177.0,2.037,92600.0,<1H OCEAN --118.28,33.96,37.0,1812.0,500.0,1640.0,447.0,1.9348,99100.0,<1H OCEAN --118.26,33.97,47.0,1504.0,374.0,1168.0,358.0,1.4625,94200.0,<1H OCEAN --118.26,33.96,40.0,1475.0,347.0,1222.0,298.0,1.5303,95300.0,<1H OCEAN --118.26,33.96,39.0,1255.0,323.0,902.0,327.0,1.5812,94000.0,<1H OCEAN --118.26,33.97,52.0,1331.0,346.0,1144.0,362.0,1.5326,90600.0,<1H OCEAN --118.27,33.97,34.0,1462.0,394.0,1310.0,351.0,1.1557,90100.0,<1H OCEAN --118.27,33.96,38.0,1126.0,270.0,999.0,265.0,0.5495,91700.0,<1H OCEAN --118.27,33.96,34.0,1040.0,276.0,1083.0,255.0,1.6467,90900.0,<1H OCEAN --118.27,33.95,39.0,1529.0,358.0,1154.0,357.0,1.2091,97900.0,<1H OCEAN --118.26,33.95,38.0,1387.0,346.0,1240.0,355.0,1.6898,95100.0,<1H OCEAN --118.26,33.95,44.0,1513.0,369.0,1088.0,344.0,1.2969,94400.0,<1H OCEAN --118.26,33.96,39.0,1542.0,375.0,1256.0,361.0,1.7167,100000.0,<1H OCEAN --118.26,33.96,37.0,1625.0,383.0,1243.0,350.0,1.3971,89800.0,<1H OCEAN --118.28,33.96,42.0,1604.0,399.0,1581.0,387.0,1.7656,96700.0,<1H OCEAN --118.28,33.95,40.0,2044.0,538.0,2150.0,524.0,2.1437,94800.0,<1H OCEAN --118.28,33.96,42.0,1206.0,304.0,1167.0,250.0,1.615,101300.0,<1H OCEAN --118.28,33.96,39.0,882.0,221.0,697.0,189.0,1.8472,99100.0,<1H OCEAN --118.28,33.96,23.0,1983.0,611.0,2048.0,600.0,1.5313,91400.0,<1H OCEAN --118.29,33.95,35.0,1401.0,362.0,1357.0,327.0,2.0917,99300.0,<1H OCEAN --118.29,33.95,32.0,721.0,205.0,842.0,208.0,1.6029,89700.0,<1H OCEAN --118.29,33.96,39.0,1340.0,409.0,1463.0,367.0,1.5294,111400.0,<1H OCEAN --118.29,33.95,40.0,2808.0,695.0,2357.0,627.0,1.9655,102300.0,<1H OCEAN --118.29,33.95,39.0,1701.0,428.0,1468.0,411.0,1.9702,93200.0,<1H OCEAN --118.28,33.94,43.0,1201.0,292.0,840.0,252.0,2.7917,105600.0,<1H OCEAN --118.29,33.94,34.0,1089.0,278.0,995.0,315.0,2.3352,107700.0,<1H OCEAN --118.27,33.95,35.0,2073.0,494.0,1753.0,490.0,1.5,93600.0,<1H OCEAN --118.27,33.95,43.0,1156.0,291.0,1074.0,299.0,1.8814,94900.0,<1H OCEAN --118.27,33.94,30.0,1041.0,275.0,877.0,270.0,1.5268,91600.0,<1H OCEAN --118.28,33.94,38.0,637.0,204.0,679.0,162.0,1.5714,89700.0,<1H OCEAN --118.28,33.95,41.0,835.0,208.0,707.0,192.0,1.4103,86200.0,<1H OCEAN --118.27,33.95,40.0,935.0,226.0,818.0,236.0,1.8798,101300.0,<1H OCEAN --118.27,33.95,34.0,987.0,248.0,902.0,221.0,2.3365,98000.0,<1H OCEAN --118.27,33.95,34.0,1261.0,315.0,1027.0,303.0,2.2946,88800.0,<1H OCEAN --118.27,33.95,29.0,1579.0,351.0,1056.0,322.0,2.3056,98500.0,<1H OCEAN --118.25,33.95,35.0,1405.0,326.0,1086.0,273.0,1.0375,89800.0,<1H OCEAN --118.26,33.94,45.0,1080.0,218.0,850.0,237.0,2.25,93400.0,<1H OCEAN --118.26,33.95,44.0,1771.0,378.0,1296.0,399.0,1.6389,96700.0,<1H OCEAN --118.26,33.95,44.0,1481.0,329.0,999.0,315.0,1.5147,94600.0,<1H OCEAN --118.26,33.94,44.0,1103.0,265.0,760.0,247.0,1.6887,99600.0,<1H OCEAN --118.25,33.94,37.0,1002.0,270.0,1092.0,273.0,1.6333,94500.0,<1H OCEAN --118.26,33.94,41.0,1510.0,410.0,1408.0,389.0,1.65,94200.0,<1H OCEAN --118.27,33.94,38.0,1314.0,318.0,1080.0,285.0,1.5872,89800.0,<1H OCEAN --118.26,33.94,44.0,795.0,181.0,716.0,167.0,2.0,90300.0,<1H OCEAN --118.26,33.93,35.0,1562.0,403.0,1587.0,406.0,1.4917,93200.0,<1H OCEAN --118.27,33.93,41.0,570.0,135.0,466.0,121.0,2.6458,91300.0,<1H OCEAN --118.27,33.94,34.0,721.0,165.0,661.0,171.0,2.0789,92400.0,<1H OCEAN --118.27,33.94,37.0,973.0,221.0,842.0,178.0,1.6645,94900.0,<1H OCEAN --118.27,33.93,36.0,1467.0,369.0,1247.0,347.0,1.8191,92700.0,<1H OCEAN --118.26,33.93,36.0,1102.0,247.0,702.0,225.0,1.5256,95400.0,<1H OCEAN --118.26,33.93,42.0,1433.0,295.0,775.0,293.0,1.1326,104800.0,<1H OCEAN --118.25,33.93,42.0,657.0,147.0,526.0,132.0,2.5,110200.0,<1H OCEAN --118.26,33.92,40.0,1076.0,244.0,705.0,255.0,1.7986,98900.0,<1H OCEAN --118.27,33.92,36.0,1465.0,346.0,1147.0,324.0,1.7262,88800.0,<1H OCEAN --118.27,33.94,43.0,1309.0,344.0,1182.0,340.0,1.6625,88700.0,<1H OCEAN --118.27,33.94,30.0,1764.0,397.0,1406.0,362.0,1.449,93100.0,<1H OCEAN --118.27,33.94,39.0,2078.0,561.0,1901.0,504.0,1.1468,96900.0,<1H OCEAN --118.28,33.93,21.0,847.0,278.0,1283.0,277.0,1.4329,94100.0,<1H OCEAN --118.28,33.94,32.0,1381.0,375.0,1268.0,354.0,1.1051,94200.0,<1H OCEAN --118.28,33.94,9.0,456.0,130.0,438.0,114.0,0.8952,81300.0,<1H OCEAN --118.28,33.94,44.0,1631.0,338.0,1197.0,355.0,3.0788,100000.0,<1H OCEAN --118.28,33.93,42.0,1898.0,460.0,1503.0,429.0,2.5179,97400.0,<1H OCEAN --118.29,33.93,43.0,2021.0,379.0,1051.0,352.0,3.3836,129900.0,<1H OCEAN --118.29,33.94,47.0,1782.0,338.0,1003.0,329.0,2.5398,105700.0,<1H OCEAN --118.28,33.93,41.0,936.0,257.0,913.0,226.0,2.0313,122600.0,<1H OCEAN --118.29,33.92,40.0,1935.0,461.0,1616.0,433.0,2.875,120200.0,<1H OCEAN --118.29,33.93,41.0,896.0,198.0,605.0,168.0,2.2778,128100.0,<1H OCEAN --118.27,33.93,38.0,2073.0,500.0,1657.0,470.0,1.2098,88400.0,<1H OCEAN --118.28,33.92,39.0,1274.0,282.0,975.0,277.0,1.5114,90400.0,<1H OCEAN --118.28,33.93,43.0,269.0,74.0,295.0,79.0,2.2969,90600.0,<1H OCEAN --118.28,33.93,45.0,529.0,112.0,448.0,120.0,3.5833,90600.0,<1H OCEAN --118.28,33.93,52.0,117.0,33.0,74.0,45.0,0.4999,90600.0,<1H OCEAN --118.25,33.94,44.0,1463.0,312.0,940.0,312.0,2.3333,99800.0,<1H OCEAN --118.25,33.94,43.0,1113.0,378.0,1305.0,334.0,1.1434,91300.0,<1H OCEAN --118.25,33.94,43.0,793.0,,736.0,231.0,0.8527,90400.0,<1H OCEAN --118.23,33.95,37.0,2667.0,671.0,2865.0,683.0,0.6831,87500.0,<1H OCEAN --118.24,33.95,40.0,1193.0,280.0,1210.0,286.0,1.35,89500.0,<1H OCEAN --118.24,33.95,37.0,649.0,147.0,653.0,147.0,1.4792,97500.0,<1H OCEAN --118.24,33.95,36.0,2316.0,543.0,1938.0,507.0,1.25,97400.0,<1H OCEAN --118.24,33.95,21.0,1260.0,342.0,1167.0,310.0,0.9708,107600.0,<1H OCEAN --118.25,33.95,28.0,2136.0,,1799.0,476.0,1.5427,95700.0,<1H OCEAN --118.24,33.95,37.0,441.0,125.0,390.0,98.0,1.6513,90200.0,<1H OCEAN --118.25,33.95,25.0,764.0,200.0,801.0,220.0,1.1384,100000.0,<1H OCEAN --118.25,33.93,40.0,975.0,270.0,1068.0,270.0,0.9889,87500.0,<1H OCEAN --118.25,33.93,36.0,2452.0,734.0,2664.0,667.0,0.9298,100000.0,<1H OCEAN --118.25,33.93,42.0,819.0,233.0,899.0,228.0,1.1346,85400.0,<1H OCEAN --118.24,33.94,37.0,869.0,241.0,1040.0,233.0,2.0,84200.0,<1H OCEAN --118.24,33.94,34.0,796.0,180.0,673.0,144.0,2.0769,88300.0,<1H OCEAN --118.24,33.93,37.0,1027.0,258.0,824.0,248.0,1.5132,86300.0,<1H OCEAN --118.24,33.93,32.0,779.0,201.0,861.0,219.0,1.0625,89800.0,<1H OCEAN --118.24,33.94,42.0,380.0,106.0,411.0,100.0,0.9705,90000.0,<1H OCEAN --118.24,33.94,39.0,1215.0,273.0,1211.0,265.0,1.7212,95500.0,<1H OCEAN --118.23,33.94,39.0,1141.0,258.0,1313.0,234.0,2.0187,90100.0,<1H OCEAN --118.23,33.94,35.0,1090.0,267.0,1339.0,263.0,2.1607,97600.0,<1H OCEAN --118.23,33.94,36.0,1110.0,,1417.0,302.0,2.3333,92100.0,<1H OCEAN --118.24,33.94,30.0,940.0,211.0,1071.0,204.0,1.2679,92000.0,<1H OCEAN --118.23,33.93,36.0,501.0,123.0,487.0,118.0,1.3,87000.0,<1H OCEAN --118.23,33.93,39.0,2065.0,532.0,2015.0,535.0,0.8478,104900.0,<1H OCEAN --118.24,33.93,32.0,1063.0,282.0,992.0,253.0,0.8984,88700.0,<1H OCEAN --118.39,34.12,29.0,6447.0,1012.0,2184.0,960.0,8.2816,500001.0,<1H OCEAN --118.4,34.11,32.0,5578.0,753.0,1567.0,697.0,15.0001,500001.0,<1H OCEAN --118.42,34.12,27.0,2089.0,303.0,654.0,270.0,12.3767,500001.0,<1H OCEAN --118.43,34.11,27.0,10806.0,1440.0,3511.0,1352.0,12.7296,500001.0,<1H OCEAN --118.43,34.09,27.0,1613.0,200.0,497.0,197.0,7.9835,500001.0,<1H OCEAN --118.45,34.12,20.0,10722.0,1617.0,3731.0,1511.0,9.7449,500001.0,<1H OCEAN --118.44,34.09,36.0,3129.0,392.0,862.0,334.0,15.0001,500001.0,<1H OCEAN --118.43,34.08,46.0,778.0,90.0,238.0,93.0,15.0001,500001.0,<1H OCEAN --118.45,34.08,52.0,1500.0,176.0,384.0,145.0,7.1576,500001.0,<1H OCEAN --118.45,34.1,31.0,6675.0,842.0,2092.0,796.0,11.8442,500001.0,<1H OCEAN --118.46,34.08,35.0,3247.0,525.0,1065.0,484.0,7.8426,500001.0,<1H OCEAN --118.47,34.1,32.0,8041.0,1141.0,2768.0,1106.0,11.1978,500001.0,<1H OCEAN --118.49,34.11,27.0,6603.0,879.0,2336.0,868.0,13.2935,500001.0,<1H OCEAN --118.48,34.07,29.0,4767.0,777.0,1500.0,638.0,10.7937,500001.0,<1H OCEAN --118.48,34.07,40.0,3351.0,484.0,1564.0,523.0,8.5153,500001.0,<1H OCEAN --118.48,34.07,37.0,4042.0,549.0,1318.0,542.0,12.8665,500001.0,<1H OCEAN --118.49,34.06,42.0,2861.0,360.0,829.0,310.0,15.0001,500001.0,<1H OCEAN --118.49,34.07,36.0,2929.0,366.0,1054.0,352.0,13.5728,500001.0,<1H OCEAN --118.51,34.11,29.0,9013.0,1117.0,2919.0,1061.0,13.947,500001.0,<1H OCEAN --118.5,34.05,39.0,1487.0,163.0,414.0,160.0,15.0,500001.0,<1H OCEAN --118.53,34.09,37.0,5477.0,833.0,1925.0,757.0,8.1888,500001.0,<1H OCEAN --118.52,34.05,45.0,1814.0,325.0,709.0,311.0,4.825,500001.0,<1H OCEAN --118.52,34.04,47.0,1985.0,315.0,819.0,340.0,6.5147,500001.0,<1H OCEAN --118.57,34.09,14.0,7970.0,1142.0,2926.0,1096.0,11.2866,500001.0,<1H OCEAN --118.54,34.05,33.0,6778.0,1092.0,2540.0,1052.0,8.565,500001.0,<1H OCEAN --118.55,34.04,41.0,1482.0,239.0,617.0,242.0,8.8619,500001.0,<1H OCEAN --118.56,34.03,34.0,2095.0,343.0,662.0,299.0,8.2934,500001.0,<1H OCEAN --118.56,34.06,24.0,2332.0,349.0,761.0,325.0,7.3031,500001.0,<1H OCEAN --118.54,34.06,21.0,3755.0,525.0,1493.0,526.0,11.4233,500001.0,<1H OCEAN --118.55,34.03,35.0,9075.0,1858.0,3646.0,1724.0,6.0307,500001.0,<1H OCEAN --118.52,34.04,42.0,993.0,130.0,368.0,134.0,10.8082,500001.0,<1H OCEAN --118.52,34.04,43.0,2167.0,254.0,761.0,256.0,13.6842,500001.0,<1H OCEAN --118.53,34.04,45.0,1711.0,264.0,735.0,261.0,9.1078,500001.0,<1H OCEAN --118.53,34.03,40.0,4350.0,763.0,1551.0,665.0,7.0318,500001.0,<1H OCEAN --118.5,34.05,36.0,4152.0,542.0,1461.0,550.0,15.0001,500001.0,<1H OCEAN --118.55,33.99,39.0,2603.0,456.0,928.0,410.0,7.9096,500001.0,NEAR OCEAN --118.51,34.04,38.0,4715.0,691.0,1660.0,637.0,10.1882,500001.0,<1H OCEAN --118.47,34.06,45.0,1271.0,190.0,419.0,171.0,7.6447,500001.0,<1H OCEAN --118.47,34.06,45.0,3030.0,433.0,916.0,399.0,9.4664,500001.0,<1H OCEAN --118.48,34.05,48.0,3623.0,528.0,1282.0,516.0,9.5221,500001.0,<1H OCEAN --118.49,34.05,42.0,1918.0,216.0,632.0,224.0,15.0001,500001.0,<1H OCEAN --118.47,34.06,26.0,6577.0,1789.0,2937.0,1652.0,4.801,500001.0,<1H OCEAN --118.46,34.06,20.0,5448.0,1532.0,2202.0,1442.0,4.2554,500001.0,<1H OCEAN --118.47,34.05,25.0,2689.0,719.0,1229.0,663.0,3.5909,500001.0,<1H OCEAN --118.46,34.05,25.0,4077.0,1151.0,1719.0,1017.0,3.7721,337500.0,<1H OCEAN --118.46,34.05,21.0,3639.0,1002.0,1489.0,983.0,4.6197,387500.0,<1H OCEAN --118.47,34.05,22.0,5215.0,1193.0,2048.0,1121.0,4.7009,500001.0,<1H OCEAN --118.47,34.05,27.0,4401.0,1033.0,1725.0,962.0,4.175,500001.0,<1H OCEAN --118.48,34.05,36.0,2143.0,434.0,751.0,396.0,6.7496,500001.0,<1H OCEAN --118.49,34.05,45.0,1346.0,214.0,415.0,209.0,7.0285,500001.0,<1H OCEAN --118.42,34.08,46.0,1399.0,148.0,410.0,152.0,15.0001,500001.0,<1H OCEAN --118.43,34.07,34.0,3203.0,483.0,949.0,439.0,10.3467,500001.0,<1H OCEAN --118.43,34.07,38.0,3251.0,656.0,1251.0,593.0,7.7382,500001.0,<1H OCEAN --118.44,34.07,26.0,3535.0,748.0,1322.0,666.0,7.1674,500001.0,<1H OCEAN --118.44,34.07,35.0,1973.0,332.0,1257.0,296.0,8.9565,500001.0,<1H OCEAN --118.44,34.06,28.0,3910.0,959.0,1763.0,867.0,5.5,500001.0,<1H OCEAN --118.44,34.07,21.0,730.0,263.0,965.0,224.0,2.0511,350000.0,<1H OCEAN --118.44,34.06,14.0,520.0,292.0,282.0,213.0,2.2857,500001.0,<1H OCEAN --118.45,34.07,13.0,4284.0,1452.0,3806.0,1252.0,1.3125,350000.0,<1H OCEAN --118.45,34.07,19.0,4845.0,1609.0,3751.0,1539.0,1.583,350000.0,<1H OCEAN --118.45,34.06,20.0,3367.0,1264.0,2667.0,1131.0,2.2444,500000.0,<1H OCEAN --118.46,34.06,46.0,1302.0,215.0,482.0,226.0,7.0674,500001.0,<1H OCEAN --118.46,34.07,43.0,2511.0,456.0,808.0,407.0,6.7703,500001.0,<1H OCEAN --118.46,34.07,49.0,2418.0,301.0,850.0,318.0,14.2867,500001.0,<1H OCEAN --118.46,34.07,42.0,2564.0,460.0,913.0,414.0,9.2225,500001.0,<1H OCEAN --118.44,34.06,9.0,5102.0,1695.0,2609.0,1450.0,3.2545,500001.0,<1H OCEAN --118.44,34.05,18.0,4780.0,1192.0,1886.0,1036.0,4.4674,500001.0,<1H OCEAN --118.44,34.05,32.0,1880.0,435.0,798.0,417.0,4.7109,500000.0,<1H OCEAN --118.44,34.05,15.0,5368.0,1312.0,2269.0,1232.0,5.7097,316700.0,<1H OCEAN --118.43,34.06,11.0,3184.0,641.0,911.0,463.0,7.2675,500001.0,<1H OCEAN --118.43,34.06,41.0,1463.0,267.0,601.0,267.0,5.3777,500001.0,<1H OCEAN --118.43,34.05,22.0,4251.0,1073.0,1581.0,881.0,5.2555,500001.0,<1H OCEAN --118.44,34.06,13.0,4833.0,1119.0,1649.0,807.0,6.2389,500001.0,<1H OCEAN --118.42,34.06,40.0,2933.0,565.0,1077.0,536.0,6.1527,500001.0,<1H OCEAN --118.43,34.06,31.0,1317.0,284.0,523.0,274.0,7.4219,500001.0,<1H OCEAN --118.43,34.06,38.0,2982.0,664.0,1122.0,572.0,4.1908,500001.0,<1H OCEAN --118.43,34.06,20.0,4600.0,1018.0,1675.0,932.0,5.1999,500001.0,<1H OCEAN --118.42,34.06,44.0,533.0,90.0,291.0,97.0,10.8045,500001.0,<1H OCEAN --118.42,34.06,52.0,1881.0,334.0,640.0,321.0,6.871,500001.0,<1H OCEAN --118.42,34.05,38.0,4888.0,1126.0,1698.0,937.0,4.8304,500001.0,<1H OCEAN --118.43,34.05,52.0,1693.0,290.0,727.0,305.0,6.7115,500001.0,<1H OCEAN --118.43,34.05,24.0,3832.0,949.0,1613.0,893.0,3.9673,477300.0,<1H OCEAN --118.44,34.05,20.0,5943.0,1538.0,2492.0,1429.0,4.1141,305000.0,<1H OCEAN --118.44,34.05,22.0,3970.0,871.0,1588.0,791.0,4.8618,500001.0,<1H OCEAN --118.43,34.04,52.0,2425.0,435.0,962.0,412.0,5.8587,494700.0,<1H OCEAN --118.45,34.05,28.0,801.0,399.0,936.0,406.0,2.1875,181300.0,<1H OCEAN --118.45,34.04,22.0,3319.0,1045.0,1848.0,940.0,3.6673,283300.0,<1H OCEAN --118.45,34.04,23.0,3771.0,1321.0,2031.0,1241.0,2.7679,277500.0,<1H OCEAN --118.46,34.05,25.0,6902.0,2138.0,3136.0,1844.0,2.6509,410000.0,<1H OCEAN --118.45,34.05,23.0,4099.0,1287.0,2103.0,1217.0,3.7549,275000.0,<1H OCEAN --118.46,34.04,19.0,3522.0,1036.0,1820.0,977.0,3.2663,337500.0,<1H OCEAN --118.47,34.04,21.0,5041.0,1491.0,2719.0,1420.0,3.5335,268800.0,<1H OCEAN --118.45,34.04,19.0,3330.0,1010.0,1837.0,915.0,3.0173,393800.0,<1H OCEAN --118.46,34.04,25.0,2142.0,718.0,1390.0,699.0,3.0069,325000.0,<1H OCEAN --118.46,34.04,25.0,2768.0,850.0,1558.0,784.0,3.6976,360000.0,<1H OCEAN --118.46,34.04,17.0,2729.0,897.0,1404.0,758.0,3.1235,420800.0,<1H OCEAN --118.46,34.04,31.0,2621.0,707.0,1632.0,673.0,3.287,348100.0,<1H OCEAN --118.45,34.04,21.0,2819.0,648.0,1435.0,593.0,3.9489,360200.0,<1H OCEAN --118.45,34.03,45.0,727.0,168.0,520.0,175.0,2.6528,300000.0,<1H OCEAN --118.45,34.03,39.0,1657.0,402.0,931.0,363.0,3.7813,336300.0,<1H OCEAN --118.44,34.04,49.0,32.0,7.0,14.0,7.0,2.1875,225000.0,<1H OCEAN --118.44,34.04,16.0,18.0,6.0,3.0,4.0,0.536,350000.0,<1H OCEAN --118.44,34.04,31.0,2670.0,662.0,1535.0,631.0,3.0714,347800.0,<1H OCEAN --118.43,34.04,52.0,1782.0,308.0,735.0,307.0,5.2954,485100.0,<1H OCEAN --118.42,34.04,46.0,1508.0,276.0,639.0,273.0,4.925,409800.0,<1H OCEAN --118.43,34.04,42.0,2725.0,569.0,1115.0,516.0,4.5833,427500.0,<1H OCEAN --118.41,34.05,16.0,9728.0,2211.0,3026.0,1899.0,5.8758,500001.0,<1H OCEAN --118.42,34.05,33.0,2921.0,652.0,1124.0,608.0,5.0151,500001.0,<1H OCEAN --118.42,34.05,52.0,2533.0,402.0,981.0,386.0,7.8164,500001.0,<1H OCEAN --118.4,34.05,26.0,4473.0,923.0,1518.0,805.0,5.0762,500001.0,<1H OCEAN --118.4,34.04,40.0,2079.0,268.0,720.0,282.0,9.272,500001.0,<1H OCEAN --118.4,34.04,42.0,1298.0,174.0,420.0,190.0,12.8483,500001.0,<1H OCEAN --118.4,34.03,36.0,1831.0,296.0,871.0,269.0,8.1484,500001.0,<1H OCEAN --118.41,34.03,33.0,1730.0,386.0,994.0,363.0,3.7277,500001.0,<1H OCEAN --118.41,34.04,49.0,601.0,95.0,228.0,106.0,8.0239,500001.0,<1H OCEAN --118.39,34.05,35.0,2458.0,576.0,1047.0,554.0,4.0283,412500.0,<1H OCEAN --118.39,34.05,42.0,3105.0,559.0,1253.0,531.0,5.222,500001.0,<1H OCEAN --118.4,34.05,34.0,2113.0,459.0,859.0,432.0,3.6953,500001.0,<1H OCEAN --118.39,34.05,25.0,2814.0,701.0,1139.0,658.0,4.0153,460000.0,<1H OCEAN --118.41,34.04,52.0,1907.0,261.0,681.0,249.0,10.9805,500001.0,<1H OCEAN --118.41,34.04,52.0,2113.0,332.0,800.0,327.0,11.1768,500001.0,<1H OCEAN --118.41,34.03,36.0,3053.0,635.0,1234.0,577.0,5.1637,500001.0,<1H OCEAN --118.42,34.04,51.0,1975.0,348.0,771.0,357.0,6.626,500001.0,<1H OCEAN --118.42,34.04,52.0,1358.0,272.0,574.0,267.0,5.6454,500001.0,<1H OCEAN --118.39,34.04,45.0,2089.0,312.0,834.0,305.0,7.3028,500001.0,<1H OCEAN --118.39,34.04,44.0,1873.0,286.0,635.0,283.0,5.5951,461300.0,<1H OCEAN --118.4,34.04,43.0,3863.0,537.0,1398.0,511.0,8.5938,500001.0,<1H OCEAN --118.4,34.05,43.0,1028.0,145.0,394.0,149.0,10.4519,500001.0,<1H OCEAN --118.39,34.05,42.0,1467.0,203.0,577.0,204.0,6.6368,500001.0,<1H OCEAN --118.38,34.04,35.0,2237.0,592.0,1794.0,543.0,2.2961,207700.0,<1H OCEAN --118.38,34.04,31.0,2846.0,727.0,2120.0,672.0,2.7226,254200.0,<1H OCEAN --118.38,34.04,45.0,767.0,130.0,254.0,118.0,6.2895,340400.0,<1H OCEAN --118.38,34.04,36.0,3005.0,771.0,2054.0,758.0,2.0437,309100.0,<1H OCEAN --118.38,34.04,39.0,2614.0,569.0,1665.0,553.0,3.4063,271600.0,<1H OCEAN --118.39,34.04,41.0,101.0,23.0,85.0,30.0,4.125,237500.0,<1H OCEAN --118.39,34.04,52.0,1492.0,277.0,666.0,289.0,4.7386,340400.0,<1H OCEAN --118.39,34.04,49.0,1230.0,279.0,669.0,269.0,3.9038,308300.0,<1H OCEAN --118.39,34.03,28.0,1722.0,536.0,1161.0,481.0,3.2228,232500.0,<1H OCEAN --118.39,34.03,25.0,3442.0,1050.0,1890.0,914.0,3.0574,319400.0,<1H OCEAN --118.4,34.03,24.0,1101.0,318.0,491.0,287.0,3.2222,319400.0,<1H OCEAN --118.4,34.03,43.0,1006.0,201.0,520.0,199.0,6.5669,372800.0,<1H OCEAN --118.41,34.03,26.0,4376.0,1394.0,2435.0,1250.0,2.8418,327300.0,<1H OCEAN --118.4,34.02,19.0,7297.0,2331.0,3870.0,2144.0,3.116,300000.0,<1H OCEAN --118.4,34.02,27.0,515.0,201.0,397.0,228.0,2.4135,184400.0,<1H OCEAN --118.41,34.03,24.0,3711.0,1192.0,1764.0,1147.0,3.1642,366700.0,<1H OCEAN --118.41,34.02,24.0,2610.0,756.0,1322.0,692.0,3.5022,281300.0,<1H OCEAN --118.41,34.02,16.0,5825.0,1866.0,3390.0,1752.0,3.0965,320000.0,<1H OCEAN --118.39,34.03,19.0,1450.0,509.0,746.0,437.0,3.1415,55000.0,<1H OCEAN --118.4,34.03,13.0,6152.0,1978.0,3397.0,1845.0,3.4058,275000.0,<1H OCEAN --118.38,34.03,36.0,2101.0,569.0,1756.0,527.0,2.9344,222100.0,<1H OCEAN --118.39,34.03,39.0,1366.0,375.0,1237.0,370.0,3.7206,230900.0,<1H OCEAN --118.37,34.04,43.0,888.0,170.0,514.0,161.0,3.1827,202800.0,<1H OCEAN --118.37,34.04,42.0,1809.0,424.0,1094.0,382.0,2.767,143000.0,<1H OCEAN --118.38,34.03,43.0,912.0,255.0,705.0,246.0,2.6402,185700.0,<1H OCEAN --118.37,34.04,25.0,542.0,161.0,442.0,131.0,2.25,333300.0,<1H OCEAN --118.37,34.04,43.0,1465.0,278.0,727.0,290.0,4.0781,289400.0,<1H OCEAN --118.42,34.03,45.0,1262.0,223.0,637.0,221.0,5.0866,427300.0,<1H OCEAN --118.43,34.03,45.0,1740.0,311.0,788.0,306.0,5.2099,373600.0,<1H OCEAN --118.43,34.03,39.0,1733.0,429.0,855.0,387.0,3.2308,340800.0,<1H OCEAN --118.43,34.03,26.0,1706.0,516.0,894.0,435.0,3.1875,372700.0,<1H OCEAN --118.42,34.03,44.0,904.0,176.0,358.0,158.0,3.3542,344200.0,<1H OCEAN --118.44,34.03,25.0,2059.0,659.0,1349.0,588.0,3.2396,352400.0,<1H OCEAN --118.43,34.03,36.0,1552.0,388.0,867.0,352.0,3.6467,346700.0,<1H OCEAN --118.44,34.03,37.0,1193.0,205.0,488.0,224.0,3.625,357600.0,<1H OCEAN --118.44,34.03,37.0,975.0,189.0,489.0,202.0,4.2434,331000.0,<1H OCEAN --118.44,34.03,30.0,1039.0,303.0,606.0,274.0,3.125,343800.0,<1H OCEAN --118.45,34.03,41.0,1240.0,320.0,711.0,304.0,3.3482,318100.0,<1H OCEAN --118.45,34.03,41.0,2083.0,528.0,993.0,481.0,4.0231,353900.0,<1H OCEAN --118.44,34.03,41.0,1164.0,265.0,561.0,251.0,4.2411,350900.0,<1H OCEAN --118.44,34.02,37.0,1592.0,308.0,783.0,321.0,6.2583,386000.0,<1H OCEAN --118.44,34.01,43.0,1408.0,246.0,651.0,240.0,4.5795,400000.0,<1H OCEAN --118.44,34.01,41.0,1309.0,221.0,534.0,228.0,5.1708,418800.0,<1H OCEAN --118.45,34.01,37.0,1328.0,250.0,626.0,228.0,5.8666,440100.0,<1H OCEAN --118.45,34.01,40.0,1361.0,240.0,559.0,229.0,6.3516,354300.0,<1H OCEAN --118.45,34.01,36.0,2424.0,418.0,1123.0,417.0,6.4755,405800.0,<1H OCEAN --118.44,34.02,32.0,2242.0,490.0,921.0,461.0,4.0429,500001.0,<1H OCEAN --118.43,34.01,43.0,1487.0,242.0,675.0,247.0,5.3403,489800.0,<1H OCEAN --118.44,34.02,39.0,3278.0,632.0,1321.0,617.0,6.2917,465700.0,<1H OCEAN --118.43,34.02,38.0,2172.0,437.0,830.0,368.0,3.9091,500001.0,<1H OCEAN --118.43,34.02,42.0,1528.0,244.0,634.0,242.0,8.1631,500001.0,<1H OCEAN --118.43,34.02,41.0,2403.0,516.0,1001.0,514.0,4.3906,500001.0,<1H OCEAN --118.42,34.03,44.0,629.0,131.0,326.0,156.0,4.5278,374300.0,<1H OCEAN --118.41,34.03,20.0,4374.0,1311.0,2165.0,1185.0,3.6019,463600.0,<1H OCEAN --118.42,34.02,21.0,3244.0,815.0,1423.0,781.0,3.6488,340800.0,<1H OCEAN --118.42,34.02,34.0,2243.0,444.0,973.0,413.0,4.9676,414100.0,<1H OCEAN --118.42,34.02,28.0,3167.0,737.0,1248.0,665.0,3.1941,394700.0,<1H OCEAN --118.42,34.02,34.0,2995.0,942.0,2626.0,947.0,2.2402,450000.0,<1H OCEAN --118.41,34.02,34.0,1430.0,357.0,805.0,362.0,3.3462,307000.0,<1H OCEAN --118.42,34.02,22.0,3292.0,1134.0,1655.0,898.0,3.1746,348800.0,<1H OCEAN --118.42,34.02,26.0,2664.0,842.0,1745.0,789.0,3.4269,301900.0,<1H OCEAN --118.41,34.02,35.0,1728.0,442.0,1161.0,420.0,3.725,310000.0,<1H OCEAN --118.41,34.02,19.0,4702.0,1472.0,2636.0,1334.0,3.3955,225000.0,<1H OCEAN --118.41,34.02,27.0,2224.0,618.0,1594.0,625.0,3.0833,315500.0,<1H OCEAN --118.42,34.01,33.0,2731.0,535.0,1280.0,510.0,4.7083,420100.0,<1H OCEAN --118.42,34.01,32.0,1300.0,356.0,703.0,311.0,3.5667,394000.0,<1H OCEAN --118.43,34.01,27.0,3133.0,1021.0,2242.0,1002.0,2.697,412500.0,<1H OCEAN --118.43,34.01,41.0,1527.0,279.0,746.0,285.0,6.4232,446600.0,<1H OCEAN --118.43,34.01,31.0,2526.0,528.0,1046.0,504.0,4.7009,500001.0,<1H OCEAN --118.44,34.01,42.0,2061.0,396.0,907.0,393.0,6.0804,420000.0,<1H OCEAN --118.44,34.0,44.0,1462.0,338.0,821.0,341.0,2.599,362200.0,<1H OCEAN --118.44,34.0,44.0,1798.0,353.0,835.0,314.0,4.75,355800.0,<1H OCEAN --118.45,34.0,39.0,1909.0,359.0,867.0,345.0,4.7,334700.0,<1H OCEAN --118.44,34.0,40.0,1287.0,346.0,806.0,311.0,3.875,321300.0,<1H OCEAN --118.43,34.0,30.0,2148.0,597.0,1341.0,559.0,3.3995,324000.0,<1H OCEAN --118.44,34.0,22.0,5822.0,1707.0,3335.0,1585.0,3.1579,243100.0,<1H OCEAN --118.44,34.0,41.0,1562.0,377.0,874.0,368.0,4.1083,324300.0,<1H OCEAN --118.42,34.01,42.0,1594.0,369.0,952.0,362.0,3.099,335400.0,<1H OCEAN --118.42,34.01,29.0,1996.0,489.0,960.0,449.0,3.6611,344200.0,<1H OCEAN --118.42,34.0,31.0,1930.0,456.0,1002.0,410.0,3.9798,458600.0,<1H OCEAN --118.43,34.0,28.0,6128.0,1963.0,3586.0,1815.0,2.7058,310900.0,<1H OCEAN --118.46,34.01,43.0,513.0,98.0,266.0,103.0,5.6428,343100.0,<1H OCEAN --118.46,34.0,39.0,4098.0,1100.0,2054.0,1053.0,2.918,345600.0,<1H OCEAN --118.46,34.0,37.0,388.0,83.0,248.0,84.0,5.1664,326700.0,<1H OCEAN --118.46,34.0,36.0,1392.0,260.0,679.0,247.0,4.7344,346900.0,<1H OCEAN --118.46,34.01,39.0,711.0,148.0,347.0,153.0,4.2813,297200.0,<1H OCEAN --118.47,34.0,38.0,1235.0,390.0,891.0,376.0,2.7143,287500.0,<1H OCEAN --118.47,34.0,41.0,2331.0,636.0,1839.0,537.0,2.288,263500.0,<1H OCEAN --118.46,34.0,39.0,614.0,174.0,538.0,159.0,2.3542,235700.0,<1H OCEAN --118.47,33.99,34.0,1875.0,501.0,1491.0,526.0,2.8417,321400.0,<1H OCEAN --118.47,34.0,37.0,2586.0,765.0,1801.0,737.0,2.6042,305800.0,<1H OCEAN --118.47,33.99,31.0,1312.0,376.0,1178.0,330.0,2.0714,300000.0,<1H OCEAN --118.47,33.99,41.0,1146.0,310.0,833.0,270.0,2.5938,285000.0,<1H OCEAN --118.47,33.99,33.0,854.0,235.0,645.0,198.0,2.1471,239300.0,<1H OCEAN --118.51,33.98,40.0,1901.0,679.0,865.0,587.0,2.3417,425000.0,<1H OCEAN --118.48,33.99,46.0,2219.0,686.0,1107.0,590.0,2.5523,387500.0,<1H OCEAN --118.47,33.99,50.0,1568.0,501.0,764.0,478.0,3.015,414300.0,<1H OCEAN --118.47,33.99,52.0,1523.0,447.0,636.0,408.0,3.0682,412500.0,<1H OCEAN --118.47,33.99,52.0,2167.0,622.0,1095.0,570.0,2.8514,358700.0,<1H OCEAN --118.47,33.99,37.0,2155.0,721.0,1082.0,637.0,3.4071,267500.0,<1H OCEAN --118.47,33.99,24.0,1438.0,454.0,665.0,416.0,2.975,500001.0,<1H OCEAN --118.5,33.97,52.0,709.0,329.0,388.0,313.0,2.2643,350000.0,<1H OCEAN --118.45,33.99,52.0,1010.0,244.0,573.0,242.0,4.1861,363200.0,<1H OCEAN --118.46,33.99,52.0,1158.0,253.0,528.0,253.0,3.5234,334700.0,<1H OCEAN --118.46,33.99,44.0,1122.0,287.0,531.0,256.0,4.0598,335900.0,<1H OCEAN --118.46,34.0,44.0,941.0,230.0,493.0,206.0,3.6458,325800.0,<1H OCEAN --118.46,34.0,52.0,888.0,206.0,376.0,194.0,3.875,372000.0,<1H OCEAN --118.45,34.0,46.0,1777.0,362.0,896.0,334.0,4.45,348300.0,<1H OCEAN --118.45,34.0,43.0,1606.0,408.0,862.0,354.0,3.962,345800.0,<1H OCEAN --118.45,34.0,48.0,1923.0,408.0,1142.0,433.0,4.575,326700.0,<1H OCEAN --118.45,33.99,33.0,3125.0,785.0,1720.0,713.0,2.9722,325000.0,<1H OCEAN --118.45,33.99,52.0,1829.0,472.0,779.0,424.0,3.1607,339000.0,<1H OCEAN --118.46,33.99,41.0,885.0,285.0,562.0,268.0,3.1992,303800.0,<1H OCEAN --118.46,33.99,37.0,1828.0,460.0,1075.0,453.0,4.337,360600.0,<1H OCEAN --118.46,33.98,32.0,2388.0,591.0,1009.0,556.0,5.2121,466700.0,<1H OCEAN --118.46,33.99,35.0,1214.0,300.0,478.0,265.0,4.0156,500001.0,<1H OCEAN --118.46,33.98,27.0,2217.0,520.0,806.0,458.0,3.8935,500001.0,<1H OCEAN --118.5,33.97,29.0,2737.0,808.0,1157.0,696.0,5.128,500001.0,<1H OCEAN --118.45,33.99,45.0,1132.0,269.0,654.0,264.0,4.5673,343100.0,<1H OCEAN --118.45,33.99,26.0,1919.0,405.0,953.0,371.0,6.0672,420800.0,<1H OCEAN --118.46,33.98,19.0,2520.0,726.0,964.0,663.0,3.8068,500001.0,<1H OCEAN --118.46,33.97,19.0,1658.0,427.0,648.0,378.0,3.8698,500001.0,<1H OCEAN --118.46,33.97,18.0,9430.0,2473.0,3408.0,2003.0,6.1726,500001.0,<1H OCEAN --118.46,33.97,19.0,2461.0,521.0,777.0,447.0,10.0,500001.0,<1H OCEAN --118.48,33.96,16.0,895.0,181.0,237.0,149.0,12.0088,500001.0,<1H OCEAN --118.4,34.0,10.0,1526.0,339.0,705.0,268.0,5.8083,321800.0,<1H OCEAN --118.41,34.0,35.0,684.0,161.0,381.0,159.0,2.8393,272000.0,<1H OCEAN --118.41,34.0,30.0,3550.0,934.0,3738.0,880.0,3.191,271200.0,<1H OCEAN --118.41,34.0,18.0,1307.0,441.0,884.0,456.0,2.9338,276300.0,<1H OCEAN --118.42,34.0,14.0,3771.0,1180.0,2355.0,978.0,3.1603,287500.0,<1H OCEAN --118.42,33.99,35.0,1701.0,482.0,1428.0,494.0,3.725,284600.0,<1H OCEAN --118.43,33.99,35.0,2243.0,495.0,1135.0,465.0,4.3281,324000.0,<1H OCEAN --118.43,33.98,19.0,8324.0,1590.0,2927.0,1538.0,7.5426,351700.0,<1H OCEAN --118.43,33.99,45.0,1899.0,461.0,1260.0,415.0,2.6667,320000.0,<1H OCEAN --118.43,33.99,43.0,2483.0,548.0,1212.0,493.0,4.0189,302900.0,<1H OCEAN --118.42,33.99,23.0,5548.0,1245.0,2847.0,1229.0,4.4228,366900.0,<1H OCEAN --118.42,33.98,3.0,475.0,155.0,236.0,153.0,3.6667,450000.0,<1H OCEAN --118.43,33.99,42.0,2558.0,558.0,1328.0,541.0,4.875,301300.0,<1H OCEAN --118.44,33.99,43.0,1432.0,308.0,782.0,303.0,4.3333,303900.0,<1H OCEAN --118.41,33.99,39.0,3014.0,822.0,3212.0,777.0,1.1985,215000.0,<1H OCEAN --118.42,33.99,38.0,740.0,171.0,599.0,194.0,4.0893,248900.0,<1H OCEAN --118.42,33.99,35.0,1724.0,419.0,1079.0,394.0,4.5521,263800.0,<1H OCEAN --118.41,34.0,35.0,1062.0,305.0,1026.0,307.0,2.7153,265500.0,<1H OCEAN --118.41,33.99,36.0,1089.0,234.0,632.0,215.0,3.6538,276100.0,<1H OCEAN --118.4,33.99,39.0,1613.0,380.0,1113.0,356.0,2.825,276700.0,<1H OCEAN --118.41,33.98,33.0,3331.0,777.0,1695.0,735.0,3.9727,307200.0,<1H OCEAN --118.39,33.97,38.0,993.0,175.0,374.0,180.0,6.2673,357200.0,<1H OCEAN --118.38,33.97,43.0,2715.0,458.0,1151.0,434.0,7.4897,362600.0,<1H OCEAN --118.39,33.97,44.0,1097.0,186.0,513.0,185.0,6.235,361400.0,<1H OCEAN --118.39,33.97,43.0,2700.0,510.0,1146.0,506.0,5.1333,345900.0,<1H OCEAN --118.39,33.97,46.0,2198.0,352.0,839.0,335.0,6.5778,350800.0,<1H OCEAN --118.39,33.96,45.0,1361.0,252.0,581.0,263.0,5.8143,340700.0,<1H OCEAN --118.39,33.96,45.0,1436.0,374.0,662.0,292.0,3.625,329400.0,<1H OCEAN --118.36,33.98,40.0,1113.0,234.0,584.0,231.0,3.0927,316000.0,<1H OCEAN --118.37,33.98,39.0,303.0,69.0,131.0,73.0,4.3438,331800.0,<1H OCEAN --118.37,33.97,32.0,6699.0,1781.0,2725.0,1544.0,3.3889,285700.0,<1H OCEAN --118.41,33.97,37.0,1629.0,275.0,668.0,266.0,6.1333,387200.0,<1H OCEAN --118.41,33.97,44.0,2298.0,388.0,849.0,360.0,5.5941,363500.0,<1H OCEAN --118.4,33.96,44.0,1877.0,314.0,877.0,320.0,6.8197,363600.0,<1H OCEAN --118.41,33.96,44.0,1802.0,306.0,753.0,282.0,6.0286,356000.0,<1H OCEAN --118.41,33.97,43.0,1464.0,224.0,581.0,232.0,6.2022,365900.0,<1H OCEAN --118.41,33.97,44.0,2789.0,503.0,3732.0,474.0,4.6176,352300.0,<1H OCEAN --118.42,33.97,44.0,1462.0,240.0,562.0,237.0,4.9375,365200.0,<1H OCEAN --118.42,33.96,44.0,1282.0,216.0,494.0,209.0,5.618,365900.0,<1H OCEAN --118.43,33.96,38.0,1104.0,216.0,415.0,163.0,6.1985,422000.0,<1H OCEAN --118.43,33.96,13.0,1860.0,345.0,800.0,355.0,5.8864,500001.0,<1H OCEAN --118.44,33.96,33.0,2799.0,491.0,978.0,447.0,5.6435,500001.0,<1H OCEAN --118.43,33.96,20.0,1901.0,270.0,704.0,254.0,8.7819,500001.0,<1H OCEAN --118.43,33.97,16.0,70.0,7.0,17.0,4.0,7.7197,500001.0,<1H OCEAN --118.42,33.96,24.0,4393.0,966.0,1257.0,579.0,5.0714,356100.0,<1H OCEAN --118.43,33.96,16.0,14891.0,3984.0,6270.0,3595.0,5.1064,283200.0,<1H OCEAN --118.4,33.97,35.0,913.0,161.0,451.0,172.0,5.6169,411200.0,<1H OCEAN --118.4,33.98,39.0,714.0,118.0,314.0,117.0,5.9856,432100.0,<1H OCEAN --118.4,33.98,36.0,2526.0,452.0,996.0,441.0,5.611,456600.0,<1H OCEAN --118.4,33.97,38.0,1089.0,174.0,502.0,180.0,7.5953,434800.0,<1H OCEAN --118.4,33.97,37.0,1364.0,248.0,494.0,242.0,4.6364,456300.0,<1H OCEAN --118.4,33.97,44.0,2825.0,453.0,1221.0,461.0,5.9544,377200.0,<1H OCEAN --118.4,33.96,43.0,2416.0,454.0,1028.0,409.0,5.6732,330700.0,<1H OCEAN --118.37,33.97,41.0,1833.0,355.0,847.0,348.0,5.726,287800.0,<1H OCEAN --118.38,33.97,42.0,1859.0,337.0,813.0,326.0,6.019,294500.0,<1H OCEAN --118.38,33.96,44.0,2395.0,458.0,1287.0,450.0,4.6923,299000.0,<1H OCEAN --118.38,33.95,35.0,3259.0,967.0,2003.0,920.0,3.2708,400000.0,<1H OCEAN --118.38,33.95,29.0,1821.0,588.0,1397.0,523.0,2.5833,187500.0,<1H OCEAN --118.37,33.95,5.0,6955.0,2062.0,3591.0,1566.0,3.111,247600.0,<1H OCEAN --118.4,33.96,44.0,1138.0,228.0,497.0,228.0,4.1852,303300.0,<1H OCEAN --118.41,33.96,15.0,412.0,128.0,310.0,137.0,3.9792,266700.0,<1H OCEAN --118.41,33.96,32.0,1044.0,219.0,567.0,222.0,4.1471,284400.0,<1H OCEAN --118.41,33.94,45.0,2038.0,394.0,1086.0,387.0,4.7375,289600.0,<1H OCEAN --118.45,33.96,24.0,3097.0,791.0,1075.0,639.0,5.723,500001.0,<1H OCEAN --118.45,33.96,36.0,2723.0,547.0,1090.0,519.0,6.3267,500001.0,<1H OCEAN --118.44,33.95,37.0,2076.0,332.0,771.0,327.0,6.2551,500001.0,<1H OCEAN --118.28,33.92,37.0,1761.0,409.0,1309.0,357.0,2.1875,175900.0,<1H OCEAN --118.28,33.91,41.0,620.0,133.0,642.0,162.0,2.6546,159600.0,<1H OCEAN --118.29,33.9,42.0,1273.0,309.0,1203.0,348.0,4.4636,162000.0,<1H OCEAN --118.29,33.91,41.0,2475.0,532.0,1416.0,470.0,3.8372,156400.0,<1H OCEAN --118.29,33.91,31.0,2025.0,618.0,2231.0,593.0,2.4741,151200.0,<1H OCEAN --118.29,33.92,23.0,2503.0,532.0,1735.0,505.0,2.7368,162800.0,<1H OCEAN --118.28,33.88,19.0,2758.0,675.0,2047.0,591.0,2.6618,179700.0,<1H OCEAN --118.29,33.88,32.0,2307.0,493.0,1754.0,528.0,4.317,232800.0,<1H OCEAN --118.29,33.88,27.0,2082.0,612.0,2009.0,548.0,2.9063,184100.0,<1H OCEAN --118.29,33.89,35.0,2810.0,614.0,1578.0,601.0,3.59,200600.0,<1H OCEAN --118.29,33.87,32.0,1700.0,340.0,864.0,317.0,4.381,238700.0,<1H OCEAN --118.3,33.86,35.0,2016.0,365.0,1083.0,369.0,5.1727,230200.0,<1H OCEAN --118.3,33.86,35.0,1511.0,274.0,853.0,308.0,4.9792,251300.0,<1H OCEAN --118.29,33.85,10.0,1391.0,420.0,1378.0,377.0,1.9049,222200.0,<1H OCEAN --118.31,33.84,5.0,3559.0,869.0,2965.0,794.0,2.6491,216700.0,<1H OCEAN --118.3,33.84,36.0,1428.0,268.0,825.0,250.0,4.7222,239600.0,<1H OCEAN --118.3,33.84,37.0,1241.0,226.0,621.0,255.0,4.9196,232400.0,<1H OCEAN --118.3,33.85,38.0,123.0,36.0,142.0,40.0,2.3942,200000.0,<1H OCEAN --118.3,33.83,31.0,2693.0,661.0,1598.0,618.0,3.1851,240200.0,<1H OCEAN --118.3,33.83,33.0,2716.0,660.0,1807.0,661.0,3.5473,226300.0,<1H OCEAN --118.31,33.83,27.0,2880.0,802.0,2083.0,727.0,2.9619,223400.0,<1H OCEAN --118.3,33.82,35.0,1499.0,340.0,1141.0,326.0,2.6136,213600.0,<1H OCEAN --118.3,33.82,26.0,2080.0,560.0,2096.0,506.0,2.8106,184400.0,<1H OCEAN --118.3,33.82,25.0,2659.0,765.0,2629.0,726.0,2.6368,175900.0,<1H OCEAN --118.3,33.81,17.0,5544.0,1068.0,3008.0,1038.0,5.322,282700.0,<1H OCEAN --118.3,33.8,27.0,2790.0,513.0,1498.0,519.0,5.3106,268300.0,<1H OCEAN --118.31,33.8,30.0,3096.0,757.0,2048.0,704.0,3.125,233300.0,<1H OCEAN --118.3,33.79,35.0,2793.0,686.0,2255.0,682.0,3.0057,235300.0,<1H OCEAN --118.3,33.79,9.0,2782.0,884.0,1790.0,748.0,2.9154,203300.0,<1H OCEAN --118.3,33.79,13.0,3569.0,924.0,2159.0,880.0,3.163,224200.0,<1H OCEAN --118.3,33.78,35.0,2572.0,504.0,1172.0,519.0,4.6207,304100.0,<1H OCEAN --118.26,33.8,41.0,2004.0,481.0,1658.0,456.0,3.1779,171100.0,<1H OCEAN --118.25,33.8,36.0,1697.0,394.0,1274.0,396.0,3.35,163100.0,<1H OCEAN --118.26,33.79,30.0,1291.0,230.0,835.0,215.0,5.5,181500.0,<1H OCEAN --118.25,33.79,32.0,1205.0,340.0,1799.0,370.0,2.375,128000.0,NEAR OCEAN --118.24,33.8,28.0,636.0,169.0,788.0,143.0,3.6161,131300.0,NEAR OCEAN --118.23,33.8,26.0,239.0,135.0,165.0,112.0,1.3333,187500.0,NEAR OCEAN --118.27,33.8,38.0,1446.0,327.0,980.0,319.0,3.35,177700.0,<1H OCEAN --118.27,33.79,36.0,2218.0,561.0,1789.0,527.0,3.1613,182300.0,<1H OCEAN --118.27,33.79,39.0,1513.0,365.0,1227.0,354.0,3.3929,184600.0,<1H OCEAN --118.28,33.8,38.0,1471.0,329.0,1207.0,335.0,4.0,165500.0,<1H OCEAN --118.28,33.79,28.0,1895.0,420.0,1422.0,389.0,4.3816,191300.0,<1H OCEAN --118.28,33.79,36.0,1989.0,458.0,1668.0,455.0,3.3009,168000.0,<1H OCEAN --118.28,33.78,20.0,2233.0,591.0,1915.0,558.0,3.2011,169100.0,<1H OCEAN --118.29,33.79,10.0,3708.0,1016.0,2855.0,948.0,2.0,165400.0,<1H OCEAN --118.29,33.79,16.0,1867.0,571.0,951.0,498.0,3.3427,154200.0,<1H OCEAN --118.3,33.79,21.0,1068.0,283.0,1180.0,274.0,2.5,157500.0,<1H OCEAN --118.3,33.8,8.0,1115.0,412.0,1472.0,396.0,3.1392,146200.0,<1H OCEAN --118.27,33.79,31.0,1535.0,369.0,1291.0,340.0,2.9375,174000.0,<1H OCEAN --118.26,33.78,27.0,1672.0,491.0,1723.0,462.0,2.0458,174500.0,NEAR OCEAN --118.27,33.79,26.0,2109.0,651.0,2120.0,605.0,2.1447,158700.0,<1H OCEAN --118.27,33.79,39.0,1417.0,359.0,1450.0,367.0,2.8462,172000.0,<1H OCEAN --118.25,33.79,34.0,1349.0,371.0,1716.0,380.0,2.7143,138100.0,NEAR OCEAN --118.25,33.79,38.0,1730.0,460.0,1724.0,424.0,2.7308,150400.0,NEAR OCEAN --118.25,33.79,39.0,981.0,286.0,1183.0,298.0,1.9208,139800.0,NEAR OCEAN --118.26,33.78,21.0,2188.0,706.0,2265.0,652.0,1.9923,164700.0,NEAR OCEAN --118.26,33.79,42.0,1162.0,264.0,1044.0,241.0,3.5488,205600.0,<1H OCEAN --118.23,33.78,20.0,59.0,24.0,69.0,23.0,2.5588,350000.0,NEAR OCEAN --118.26,33.78,35.0,1239.0,473.0,1524.0,387.0,2.0956,154700.0,NEAR OCEAN --118.25,33.78,32.0,296.0,139.0,511.0,133.0,1.4444,182100.0,NEAR OCEAN --118.24,33.78,24.0,574.0,173.0,784.0,162.0,2.25,152300.0,NEAR OCEAN --118.26,33.78,36.0,2191.0,739.0,2931.0,692.0,2.1311,163100.0,NEAR OCEAN --118.26,33.77,36.0,886.0,253.0,809.0,219.0,2.4545,164200.0,NEAR OCEAN --118.27,33.77,26.0,2272.0,694.0,2567.0,595.0,1.9964,150600.0,NEAR OCEAN --118.27,33.78,21.0,3354.0,1174.0,4426.0,1110.0,2.5262,167300.0,<1H OCEAN --118.28,33.78,37.0,1212.0,304.0,1076.0,293.0,3.2115,160100.0,<1H OCEAN --118.27,33.77,39.0,1731.0,485.0,2115.0,478.0,1.5369,141300.0,NEAR OCEAN --118.27,33.76,46.0,22.0,11.0,32.0,7.0,3.125,112500.0,NEAR OCEAN --118.3,33.77,18.0,3821.0,795.0,2831.0,769.0,2.9571,346200.0,<1H OCEAN --118.3,33.76,18.0,9659.0,1716.0,4336.0,1674.0,5.7764,290500.0,<1H OCEAN --118.28,33.77,47.0,307.0,69.0,374.0,65.0,2.9063,146900.0,<1H OCEAN --118.28,33.75,41.0,1305.0,381.0,1384.0,369.0,2.45,186800.0,NEAR OCEAN --118.28,33.75,18.0,393.0,189.0,429.0,188.0,1.8393,187500.0,NEAR OCEAN --118.28,33.74,40.0,1751.0,512.0,1939.0,503.0,1.5394,200000.0,NEAR OCEAN --118.28,33.75,21.0,2442.0,719.0,1916.0,646.0,1.2276,208300.0,NEAR OCEAN --118.28,33.74,16.0,855.0,271.0,486.0,250.0,0.7591,350000.0,NEAR OCEAN --118.3,33.75,19.0,2356.0,440.0,1291.0,418.0,4.2308,416100.0,<1H OCEAN --118.3,33.76,6.0,6097.0,1270.0,2678.0,1226.0,5.1269,285200.0,<1H OCEAN --118.3,33.75,42.0,967.0,175.0,481.0,163.0,5.6611,265600.0,<1H OCEAN --118.3,33.75,48.0,1958.0,386.0,1098.0,380.0,4.625,273400.0,<1H OCEAN --118.3,33.74,47.0,2223.0,410.0,1163.0,413.0,4.4671,270800.0,NEAR OCEAN --118.31,33.74,36.0,2464.0,472.0,1111.0,457.0,4.5074,350000.0,NEAR OCEAN --118.31,33.74,22.0,5042.0,974.0,2260.0,935.0,4.3472,351200.0,NEAR OCEAN --118.29,33.75,27.0,1650.0,443.0,1359.0,386.0,2.5795,192400.0,NEAR OCEAN --118.3,33.75,23.0,1957.0,517.0,1454.0,526.0,3.5056,203100.0,<1H OCEAN --118.29,33.75,37.0,1319.0,292.0,766.0,285.0,2.7031,218900.0,NEAR OCEAN --118.29,33.74,29.0,1503.0,411.0,1368.0,390.0,2.1473,195300.0,NEAR OCEAN --118.29,33.74,52.0,1438.0,472.0,1018.0,399.0,2.2188,306700.0,NEAR OCEAN --118.29,33.74,41.0,1382.0,361.0,905.0,344.0,2.75,238300.0,NEAR OCEAN --118.29,33.74,30.0,2074.0,533.0,1311.0,531.0,2.0329,225800.0,NEAR OCEAN --118.29,33.73,43.0,1854.0,519.0,1151.0,486.0,2.5759,225000.0,NEAR OCEAN --118.29,33.73,21.0,2492.0,711.0,1699.0,672.0,2.1382,242300.0,NEAR OCEAN --118.29,33.73,30.0,2835.0,711.0,1669.0,652.0,3.3616,268500.0,NEAR OCEAN --118.3,33.73,42.0,1731.0,,866.0,403.0,2.7451,255400.0,NEAR OCEAN --118.3,33.74,23.0,3075.0,860.0,1584.0,806.0,2.9386,260500.0,NEAR OCEAN --118.31,33.73,36.0,1725.0,295.0,799.0,306.0,5.0874,368500.0,NEAR OCEAN --118.31,33.73,52.0,1665.0,280.0,656.0,282.0,5.249,351900.0,NEAR OCEAN --118.3,33.74,20.0,2625.0,673.0,1184.0,606.0,3.9167,285200.0,NEAR OCEAN --118.3,33.73,47.0,2852.0,603.0,1130.0,560.0,4.194,293900.0,NEAR OCEAN --118.31,33.73,52.0,2025.0,361.0,957.0,363.0,4.2059,350000.0,NEAR OCEAN --118.28,33.74,44.0,1853.0,556.0,2090.0,539.0,1.8584,248100.0,NEAR OCEAN --118.28,33.73,39.0,2602.0,802.0,2178.0,737.0,2.0469,234500.0,NEAR OCEAN --118.28,33.73,52.0,2085.0,588.0,1767.0,516.0,2.1935,243200.0,NEAR OCEAN --118.28,33.73,45.0,2137.0,559.0,1550.0,529.0,1.9167,227200.0,NEAR OCEAN --118.29,33.73,30.0,3161.0,,1865.0,771.0,2.7139,231700.0,NEAR OCEAN --118.29,33.72,25.0,2469.0,584.0,1253.0,535.0,3.1932,257500.0,NEAR OCEAN --118.3,33.72,28.0,2647.0,658.0,1459.0,595.0,3.4474,253400.0,NEAR OCEAN --118.3,33.72,28.0,2510.0,583.0,1388.0,554.0,3.3397,267800.0,NEAR OCEAN --118.3,33.73,40.0,2582.0,606.0,1304.0,588.0,3.5694,276400.0,NEAR OCEAN --118.31,33.73,52.0,1642.0,287.0,692.0,288.0,4.1812,321500.0,NEAR OCEAN --118.31,33.72,26.0,2711.0,508.0,1372.0,459.0,4.1451,326700.0,NEAR OCEAN --118.33,33.69,41.0,2168.0,357.0,1171.0,374.0,4.7216,311900.0,NEAR OCEAN --118.31,33.73,33.0,2265.0,366.0,986.0,388.0,5.4533,409800.0,NEAR OCEAN --118.32,33.73,25.0,1099.0,168.0,407.0,159.0,7.6886,500001.0,NEAR OCEAN --118.33,33.72,25.0,6191.0,1081.0,2297.0,1023.0,6.4246,446700.0,NEAR OCEAN --118.29,33.71,36.0,3135.0,746.0,1815.0,697.0,3.7596,300000.0,NEAR OCEAN --118.31,33.67,42.0,1297.0,246.0,611.0,242.0,5.3074,401900.0,NEAR OCEAN --118.3,33.72,35.0,2790.0,,1167.0,441.0,6.2028,361500.0,NEAR OCEAN --118.29,33.71,40.0,1644.0,471.0,780.0,416.0,3.1071,464300.0,NEAR OCEAN --118.29,33.71,40.0,1933.0,475.0,902.0,412.0,4.25,332800.0,NEAR OCEAN --118.29,33.71,31.0,2809.0,666.0,1316.0,633.0,4.5606,303800.0,NEAR OCEAN --118.29,33.72,39.0,2651.0,590.0,1103.0,508.0,3.274,254300.0,NEAR OCEAN --118.29,33.72,21.0,1568.0,452.0,801.0,422.0,3.5109,225000.0,NEAR OCEAN --118.28,33.68,8.0,2842.0,522.0,1624.0,510.0,3.7282,287500.0,NEAR OCEAN --118.23,34.24,31.0,3857.0,607.0,1695.0,572.0,7.642,396400.0,<1H OCEAN --118.23,34.23,34.0,2377.0,362.0,1055.0,362.0,6.0,367100.0,<1H OCEAN --118.24,34.24,31.0,3019.0,469.0,1349.0,462.0,7.1463,394100.0,<1H OCEAN --118.24,34.24,31.0,3812.0,595.0,1645.0,591.0,7.585,380100.0,<1H OCEAN --118.23,34.22,36.0,2288.0,439.0,1079.0,434.0,4.5486,361000.0,<1H OCEAN --118.24,34.23,41.0,1912.0,308.0,896.0,314.0,5.3473,352700.0,<1H OCEAN --118.24,34.23,43.0,1061.0,208.0,514.0,208.0,6.01,254200.0,<1H OCEAN --118.24,34.23,42.0,1541.0,280.0,753.0,264.0,5.1028,292100.0,<1H OCEAN --118.25,34.23,35.0,2839.0,592.0,1413.0,538.0,4.1667,271200.0,<1H OCEAN --118.25,34.25,34.0,3150.0,518.0,1392.0,480.0,4.9355,336900.0,<1H OCEAN --118.25,34.23,34.0,2421.0,475.0,1232.0,454.0,4.6852,296200.0,<1H OCEAN --118.26,34.24,35.0,1535.0,283.0,816.0,287.0,6.1873,312100.0,<1H OCEAN --118.26,34.24,35.0,1666.0,280.0,788.0,273.0,6.6277,344400.0,<1H OCEAN --118.26,34.24,35.0,2485.0,418.0,1226.0,406.0,5.7083,329500.0,<1H OCEAN --118.26,34.24,42.0,890.0,179.0,555.0,200.0,4.4821,271900.0,<1H OCEAN --118.25,34.23,41.0,1979.0,496.0,1157.0,459.0,4.4083,217700.0,<1H OCEAN --118.25,34.22,30.0,2062.0,396.0,1089.0,375.0,5.5362,301200.0,<1H OCEAN --118.25,34.23,37.0,1954.0,368.0,967.0,370.0,5.0862,261300.0,<1H OCEAN --118.26,34.23,43.0,1428.0,325.0,836.0,302.0,4.5759,209200.0,<1H OCEAN --118.26,34.23,38.0,1107.0,194.0,518.0,195.0,7.5582,263700.0,<1H OCEAN --118.26,34.23,33.0,1805.0,303.0,838.0,301.0,5.4306,326600.0,<1H OCEAN --118.22,34.21,29.0,2174.0,418.0,1030.0,395.0,3.5707,341700.0,<1H OCEAN --118.23,34.21,36.0,2988.0,719.0,1357.0,657.0,3.5174,268000.0,<1H OCEAN --118.23,34.21,29.0,2584.0,608.0,1217.0,568.0,3.3287,273400.0,<1H OCEAN --118.23,34.21,32.0,1464.0,406.0,693.0,380.0,2.5463,200000.0,<1H OCEAN --118.23,34.21,38.0,1399.0,390.0,859.0,386.0,3.4148,234800.0,<1H OCEAN --118.24,34.22,41.0,2476.0,506.0,1271.0,485.0,3.4531,263900.0,<1H OCEAN --118.24,34.22,34.0,1722.0,406.0,926.0,371.0,4.1523,252000.0,<1H OCEAN --118.25,34.22,34.0,2510.0,535.0,1516.0,542.0,3.8068,267000.0,<1H OCEAN --118.23,34.21,50.0,309.0,47.0,121.0,45.0,6.213,285000.0,<1H OCEAN --118.23,34.2,51.0,1477.0,280.0,750.0,295.0,5.3925,317900.0,<1H OCEAN --118.23,34.2,48.0,1473.0,294.0,807.0,296.0,3.399,306300.0,<1H OCEAN --118.24,34.2,41.0,2067.0,452.0,1282.0,455.0,5.5756,309900.0,<1H OCEAN --118.24,34.21,32.0,3817.0,886.0,1888.0,829.0,3.5777,245600.0,<1H OCEAN --118.24,34.22,36.0,2507.0,517.0,1232.0,470.0,5.529,241300.0,<1H OCEAN --118.27,34.22,34.0,8206.0,1186.0,3141.0,1150.0,7.2812,462200.0,<1H OCEAN --118.23,34.18,47.0,1853.0,345.0,757.0,310.0,3.6875,422000.0,<1H OCEAN --118.23,34.18,43.0,1708.0,280.0,768.0,276.0,6.207,457400.0,<1H OCEAN --118.23,34.18,45.0,2332.0,,943.0,339.0,8.1132,446600.0,<1H OCEAN --118.26,34.18,32.0,14556.0,2077.0,5459.0,2017.0,8.1657,500001.0,<1H OCEAN --118.22,34.19,36.0,959.0,204.0,446.0,210.0,3.215,331300.0,<1H OCEAN --118.22,34.19,31.0,4704.0,920.0,1895.0,886.0,4.9297,400000.0,<1H OCEAN --118.22,34.19,36.0,2443.0,492.0,1115.0,493.0,3.9777,409800.0,<1H OCEAN --118.21,34.18,14.0,2672.0,335.0,1113.0,318.0,12.1579,500001.0,<1H OCEAN --118.23,34.17,37.0,4524.0,1005.0,2099.0,937.0,3.5781,366700.0,<1H OCEAN --118.21,34.17,24.0,8590.0,1231.0,3401.0,1178.0,8.1325,472700.0,<1H OCEAN --118.21,34.16,25.0,434.0,74.0,199.0,75.0,5.9199,420500.0,<1H OCEAN --118.19,34.16,49.0,1788.0,267.0,735.0,266.0,6.6009,375700.0,<1H OCEAN --118.2,34.16,31.0,5550.0,881.0,2465.0,862.0,6.8317,446100.0,<1H OCEAN --118.23,34.16,31.0,3105.0,582.0,1359.0,547.0,5.1718,429100.0,<1H OCEAN --118.23,34.15,26.0,1649.0,522.0,1332.0,483.0,3.1004,257100.0,<1H OCEAN --118.23,34.15,40.0,2124.0,370.0,998.0,372.0,5.3369,370400.0,<1H OCEAN --118.24,34.16,40.0,2549.0,591.0,1156.0,546.0,3.3333,374300.0,<1H OCEAN --118.24,34.16,52.0,2187.0,284.0,733.0,274.0,9.5823,406200.0,<1H OCEAN --118.24,34.16,52.0,1904.0,297.0,797.0,286.0,6.6603,380400.0,<1H OCEAN --118.25,34.16,52.0,2477.0,385.0,993.0,371.0,4.9135,368100.0,<1H OCEAN --118.25,34.17,52.0,1532.0,292.0,631.0,275.0,5.1242,372900.0,<1H OCEAN --118.25,34.16,24.0,5131.0,1436.0,2690.0,1371.0,2.5668,280000.0,<1H OCEAN --118.26,34.17,20.0,5949.0,1417.0,2593.0,1337.0,3.8576,318600.0,<1H OCEAN --118.26,34.16,17.0,2943.0,769.0,1312.0,656.0,3.1484,187500.0,<1H OCEAN --118.26,34.16,19.0,2919.0,857.0,1866.0,811.0,3.1733,206300.0,<1H OCEAN --118.26,34.16,20.0,3407.0,885.0,1883.0,870.0,3.7321,351100.0,<1H OCEAN --118.27,34.17,48.0,1560.0,280.0,825.0,269.0,5.5118,354700.0,<1H OCEAN --118.27,34.16,15.0,5036.0,1299.0,3164.0,1175.0,2.9148,238700.0,<1H OCEAN --118.27,34.16,45.0,1865.0,360.0,973.0,349.0,3.6587,321200.0,<1H OCEAN --118.28,34.17,52.0,2332.0,433.0,1135.0,440.0,5.5658,331200.0,<1H OCEAN --118.27,34.17,52.0,2010.0,,908.0,326.0,6.9135,374000.0,<1H OCEAN --118.27,34.17,52.0,2287.0,295.0,829.0,296.0,7.8383,500001.0,<1H OCEAN --118.27,34.18,52.0,3034.0,406.0,1158.0,399.0,6.2976,498400.0,<1H OCEAN --118.28,34.18,47.0,2243.0,339.0,911.0,319.0,7.4046,446800.0,<1H OCEAN --118.28,34.18,52.0,2602.0,418.0,1137.0,419.0,5.3185,358000.0,<1H OCEAN --118.29,34.18,52.0,1602.0,265.0,667.0,251.0,5.049,323500.0,<1H OCEAN --118.28,34.18,50.0,2195.0,336.0,878.0,309.0,6.884,365600.0,<1H OCEAN --118.28,34.17,22.0,2664.0,651.0,1553.0,629.0,3.6354,256300.0,<1H OCEAN --118.29,34.17,17.0,3852.0,1066.0,2986.0,993.0,2.3482,255400.0,<1H OCEAN --118.29,34.17,52.0,1732.0,305.0,875.0,311.0,4.325,292600.0,<1H OCEAN --118.29,34.18,10.0,4292.0,1075.0,2719.0,987.0,3.6974,286600.0,<1H OCEAN --118.29,34.16,31.0,1262.0,338.0,1019.0,332.0,3.7083,241900.0,<1H OCEAN --118.29,34.16,42.0,413.0,107.0,349.0,107.0,4.3438,189800.0,<1H OCEAN --118.29,34.17,12.0,2238.0,682.0,1882.0,611.0,2.9,208300.0,<1H OCEAN --118.3,34.17,17.0,4041.0,1169.0,3309.0,1117.0,2.6016,222400.0,<1H OCEAN --118.3,34.17,30.0,48.0,14.0,74.0,16.0,5.0056,162500.0,<1H OCEAN --118.29,34.16,35.0,1257.0,318.0,764.0,319.0,3.2083,238000.0,<1H OCEAN --118.3,34.16,40.0,1875.0,460.0,869.0,438.0,3.2321,243600.0,<1H OCEAN --118.3,34.16,35.0,3213.0,874.0,2401.0,819.0,2.8342,256800.0,<1H OCEAN --118.27,34.16,47.0,1453.0,356.0,787.0,345.0,3.0114,255500.0,<1H OCEAN --118.27,34.15,22.0,2265.0,637.0,1684.0,561.0,2.6729,217100.0,<1H OCEAN --118.27,34.15,25.0,3018.0,806.0,2205.0,742.0,3.0199,220200.0,<1H OCEAN --118.27,34.15,14.0,1744.0,536.0,1494.0,531.0,3.2171,230800.0,<1H OCEAN --118.27,34.16,52.0,830.0,183.0,479.0,179.0,3.1397,253700.0,<1H OCEAN --118.27,34.16,48.0,1301.0,253.0,637.0,260.0,4.3438,252700.0,<1H OCEAN --118.28,34.16,49.0,1393.0,290.0,605.0,282.0,2.9491,257400.0,<1H OCEAN --118.26,34.16,18.0,1775.0,525.0,950.0,522.0,3.5417,177100.0,<1H OCEAN --118.26,34.15,14.0,2981.0,894.0,1941.0,863.0,3.0,178600.0,<1H OCEAN --118.26,34.15,6.0,3340.0,945.0,2315.0,846.0,2.8884,252300.0,<1H OCEAN --118.26,34.15,18.0,2481.0,756.0,1763.0,675.0,2.8088,247500.0,<1H OCEAN --118.24,34.16,52.0,850.0,162.0,493.0,160.0,6.9408,298800.0,<1H OCEAN --118.24,34.15,20.0,2734.0,658.0,1562.0,607.0,3.3906,284100.0,<1H OCEAN --118.24,34.15,45.0,1235.0,271.0,499.0,263.0,3.1435,282600.0,<1H OCEAN --118.25,34.15,15.0,3712.0,1005.0,1888.0,890.0,3.6875,209600.0,<1H OCEAN --118.25,34.16,14.0,3700.0,945.0,1681.0,905.0,3.9054,200000.0,<1H OCEAN --118.24,34.15,17.0,5282.0,1605.0,4116.0,1574.0,3.052,209800.0,<1H OCEAN --118.24,34.15,19.0,4852.0,1465.0,3171.0,1332.0,2.5924,192900.0,<1H OCEAN --118.25,34.15,31.0,1238.0,338.0,605.0,331.0,2.8478,228100.0,<1H OCEAN --118.25,34.15,32.0,1377.0,444.0,768.0,422.0,2.2621,187500.0,<1H OCEAN --118.25,34.15,20.0,3960.0,1027.0,1729.0,978.0,3.0441,193800.0,<1H OCEAN --118.23,34.14,33.0,2865.0,864.0,2061.0,790.0,2.6268,201300.0,<1H OCEAN --118.24,34.14,20.0,3196.0,994.0,2929.0,983.0,3.0206,219500.0,<1H OCEAN --118.24,34.14,27.0,2909.0,1021.0,2614.0,935.0,2.1444,229000.0,<1H OCEAN --118.23,34.15,19.0,2294.0,716.0,1686.0,680.0,3.0288,258300.0,<1H OCEAN --118.23,34.14,25.0,2864.0,844.0,1745.0,803.0,2.9167,224300.0,<1H OCEAN --118.24,34.14,28.0,1843.0,554.0,1402.0,512.0,2.462,254000.0,<1H OCEAN --118.24,34.14,36.0,1813.0,560.0,1501.0,544.0,1.9125,238000.0,<1H OCEAN --118.24,34.13,37.0,1644.0,395.0,959.0,383.0,3.3636,257700.0,<1H OCEAN --118.24,34.13,45.0,2170.0,401.0,1043.0,394.0,5.6921,269000.0,<1H OCEAN --118.24,34.15,7.0,2063.0,670.0,1892.0,643.0,1.7301,202300.0,<1H OCEAN --118.24,34.14,9.0,4877.0,1488.0,4486.0,1458.0,2.4421,222100.0,<1H OCEAN --118.25,34.14,30.0,1615.0,570.0,1245.0,544.0,1.8929,196900.0,<1H OCEAN --118.25,34.14,37.0,584.0,260.0,552.0,235.0,1.8235,275000.0,<1H OCEAN --118.25,34.15,13.0,1107.0,479.0,616.0,443.0,0.8185,187500.0,<1H OCEAN --118.26,34.14,51.0,902.0,320.0,650.0,334.0,1.5417,268800.0,<1H OCEAN --118.26,34.14,29.0,3431.0,1222.0,4094.0,1205.0,2.2614,248100.0,<1H OCEAN --118.27,34.14,10.0,1060.0,332.0,1025.0,288.0,3.0074,175000.0,<1H OCEAN --118.26,34.14,6.0,1727.0,506.0,1200.0,439.0,4.1083,210700.0,<1H OCEAN --118.27,34.15,7.0,2837.0,776.0,2287.0,736.0,3.008,229000.0,<1H OCEAN --118.26,34.13,25.0,3208.0,1111.0,2843.0,1005.0,2.6673,218100.0,<1H OCEAN --118.26,34.13,37.0,1383.0,470.0,1185.0,451.0,2.5,207100.0,<1H OCEAN --118.26,34.13,37.0,196.0,74.0,194.0,68.0,1.2188,218800.0,<1H OCEAN --118.26,34.14,23.0,1336.0,396.0,1255.0,359.0,2.5388,205000.0,<1H OCEAN --118.25,34.14,13.0,3487.0,1131.0,3749.0,1072.0,2.1602,221900.0,<1H OCEAN --118.25,34.14,25.0,5980.0,1856.0,5217.0,1772.0,2.506,184500.0,<1H OCEAN --118.25,34.13,22.0,2340.0,773.0,2226.0,754.0,2.5417,217500.0,<1H OCEAN --118.24,34.13,45.0,1971.0,439.0,1245.0,430.0,4.0272,260500.0,<1H OCEAN --118.25,34.13,52.0,322.0,88.0,229.0,89.0,2.125,243800.0,<1H OCEAN --118.25,34.13,36.0,2946.0,1025.0,2542.0,912.0,2.2244,255900.0,<1H OCEAN --118.25,34.12,21.0,739.0,265.0,861.0,246.0,2.4856,181300.0,<1H OCEAN --118.31,34.22,27.0,7714.0,1132.0,3199.0,1100.0,7.1262,446200.0,<1H OCEAN --118.33,34.21,31.0,3190.0,489.0,1362.0,480.0,6.981,402900.0,<1H OCEAN --118.34,34.21,36.0,1834.0,316.0,864.0,309.0,4.7885,302200.0,<1H OCEAN --118.29,34.18,36.0,3120.0,620.0,1441.0,612.0,3.9041,320400.0,<1H OCEAN --118.3,34.19,14.0,3615.0,913.0,1924.0,852.0,3.5083,280900.0,<1H OCEAN --118.3,34.19,52.0,1704.0,277.0,746.0,262.0,4.7986,326100.0,<1H OCEAN --118.3,34.19,51.0,1502.0,243.0,586.0,231.0,4.375,332400.0,<1H OCEAN --118.31,34.19,27.0,4713.0,1169.0,2372.0,1077.0,3.7015,287900.0,<1H OCEAN --118.3,34.19,52.0,2962.0,468.0,1364.0,466.0,4.9042,343500.0,<1H OCEAN --118.31,34.2,36.0,1692.0,263.0,778.0,278.0,5.0865,349600.0,<1H OCEAN --118.32,34.2,36.0,2110.0,346.0,984.0,342.0,6.9909,345300.0,<1H OCEAN --118.32,34.2,36.0,759.0,136.0,372.0,135.0,4.9886,328900.0,<1H OCEAN --118.32,34.2,36.0,1978.0,337.0,834.0,311.0,3.9866,294400.0,<1H OCEAN --118.33,34.2,43.0,1325.0,254.0,613.0,248.0,3.6071,289000.0,<1H OCEAN --118.33,34.2,43.0,2322.0,418.0,1106.0,433.0,4.3631,284600.0,<1H OCEAN --118.34,34.2,41.0,2860.0,682.0,1516.0,621.0,3.0431,262900.0,<1H OCEAN --118.34,34.19,41.0,1524.0,393.0,1176.0,375.0,2.875,192400.0,<1H OCEAN --118.36,34.2,14.0,1878.0,614.0,1874.0,559.0,2.5267,231800.0,<1H OCEAN --118.32,34.2,29.0,2209.0,444.0,952.0,403.0,4.375,341200.0,<1H OCEAN --118.32,34.19,37.0,1335.0,249.0,485.0,240.0,4.1731,352100.0,<1H OCEAN --118.32,34.19,37.0,1519.0,331.0,613.0,315.0,3.0179,272500.0,<1H OCEAN --118.31,34.19,42.0,724.0,149.0,420.0,150.0,3.0625,361700.0,<1H OCEAN --118.32,34.19,37.0,589.0,119.0,375.0,122.0,3.3897,222700.0,<1H OCEAN --118.33,34.2,23.0,7179.0,1985.0,4757.0,1924.0,3.1051,206500.0,<1H OCEAN --118.3,34.18,13.0,7174.0,1997.0,4293.0,1872.0,3.0973,251900.0,<1H OCEAN --118.3,34.17,37.0,350.0,115.0,342.0,111.0,3.0687,200000.0,<1H OCEAN --118.3,34.18,5.0,5492.0,1549.0,2997.0,1405.0,3.3205,172100.0,<1H OCEAN --118.31,34.18,11.0,3112.0,890.0,1700.0,851.0,3.1587,181300.0,<1H OCEAN --118.31,34.19,13.0,3801.0,1116.0,1986.0,1078.0,2.0875,222700.0,<1H OCEAN --118.32,34.18,49.0,192.0,41.0,83.0,38.0,3.0179,118800.0,<1H OCEAN --118.32,34.18,44.0,1594.0,389.0,832.0,340.0,3.4,212100.0,<1H OCEAN --118.32,34.17,39.0,1995.0,564.0,1202.0,544.0,3.5875,250000.0,<1H OCEAN --118.32,34.17,47.0,2589.0,465.0,1284.0,485.0,5.1008,247100.0,<1H OCEAN --118.33,34.17,48.0,2584.0,483.0,1118.0,459.0,4.2396,245100.0,<1H OCEAN --118.33,34.19,46.0,2115.0,463.0,1133.0,439.0,3.7344,222000.0,<1H OCEAN --118.33,34.18,45.0,2570.0,517.0,1256.0,510.0,4.6898,226000.0,<1H OCEAN --118.33,34.19,45.0,1505.0,347.0,799.0,319.0,3.138,217000.0,<1H OCEAN --118.34,34.19,48.0,814.0,165.0,490.0,176.0,3.1406,223100.0,<1H OCEAN --118.33,34.18,45.0,1552.0,315.0,785.0,316.0,3.7411,235500.0,<1H OCEAN --118.33,34.18,49.0,1969.0,377.0,977.0,367.0,3.8462,231300.0,<1H OCEAN --118.33,34.18,48.0,2122.0,385.0,926.0,362.0,5.6975,231400.0,<1H OCEAN --118.34,34.19,43.0,1029.0,252.0,613.0,255.0,2.6827,219900.0,<1H OCEAN --118.34,34.19,47.0,1721.0,343.0,834.0,334.0,4.1923,231200.0,<1H OCEAN --118.34,34.18,45.0,3046.0,633.0,1448.0,599.0,3.24,226900.0,<1H OCEAN --118.34,34.18,46.0,1393.0,301.0,714.0,295.0,2.8125,229900.0,<1H OCEAN --118.35,34.19,45.0,903.0,190.0,557.0,204.0,4.0313,209100.0,<1H OCEAN --118.36,34.19,46.0,1676.0,322.0,846.0,295.0,5.1814,209500.0,<1H OCEAN --118.35,34.18,46.0,2711.0,491.0,1277.0,490.0,4.282,224700.0,<1H OCEAN --118.35,34.18,46.0,1840.0,379.0,866.0,360.0,3.3056,230400.0,<1H OCEAN --118.35,34.17,44.0,2572.0,613.0,1280.0,570.0,3.5583,232000.0,<1H OCEAN --118.35,34.17,47.0,858.0,170.0,365.0,171.0,2.0385,225000.0,<1H OCEAN --118.35,34.17,42.0,1604.0,326.0,814.0,329.0,4.4408,216000.0,<1H OCEAN --118.36,34.17,46.0,1268.0,240.0,661.0,239.0,4.0742,229100.0,<1H OCEAN --118.34,34.18,45.0,1328.0,290.0,720.0,289.0,3.875,226900.0,<1H OCEAN --118.34,34.18,45.0,3566.0,701.0,1601.0,653.0,3.8668,232000.0,<1H OCEAN --118.34,34.17,49.0,3033.0,580.0,1284.0,561.0,4.1161,232500.0,<1H OCEAN --118.35,34.16,42.0,2267.0,478.0,1083.0,458.0,3.2015,250000.0,<1H OCEAN --118.35,34.16,45.0,1390.0,281.0,538.0,270.0,4.2212,293800.0,<1H OCEAN --118.35,34.16,49.0,1305.0,228.0,584.0,255.0,5.636,267900.0,<1H OCEAN --118.33,34.17,44.0,1934.0,375.0,750.0,365.0,2.473,251800.0,<1H OCEAN --118.33,34.16,37.0,2381.0,575.0,1235.0,499.0,3.7941,247800.0,<1H OCEAN --118.34,34.17,46.0,1718.0,344.0,756.0,343.0,3.2125,247000.0,<1H OCEAN --118.34,34.17,52.0,1133.0,212.0,545.0,222.0,4.875,249500.0,<1H OCEAN --118.34,34.16,44.0,1717.0,391.0,848.0,353.0,3.6111,254500.0,<1H OCEAN --118.34,34.16,46.0,1396.0,294.0,608.0,246.0,3.692,244500.0,<1H OCEAN --118.33,34.16,44.0,2705.0,649.0,1676.0,654.0,3.4286,247900.0,<1H OCEAN --118.33,34.15,39.0,493.0,168.0,259.0,138.0,2.3667,17500.0,<1H OCEAN --118.33,34.15,44.0,1321.0,303.0,471.0,301.0,4.2679,331800.0,<1H OCEAN --118.34,34.15,40.0,3068.0,756.0,1190.0,695.0,3.5637,497400.0,<1H OCEAN --118.34,34.15,16.0,1586.0,377.0,625.0,344.0,4.0893,450000.0,<1H OCEAN --118.34,34.16,25.0,6082.0,1763.0,2616.0,1644.0,3.6486,246900.0,<1H OCEAN --118.32,34.17,45.0,3448.0,690.0,1562.0,643.0,4.0648,258800.0,<1H OCEAN --118.31,34.16,38.0,2347.0,665.0,1317.0,547.0,3.2112,349300.0,<1H OCEAN --118.32,34.16,49.0,1074.0,170.0,403.0,208.0,6.2547,366700.0,<1H OCEAN --118.32,34.17,40.0,1868.0,356.0,799.0,403.0,2.9306,279300.0,<1H OCEAN --118.33,34.16,23.0,1359.0,428.0,770.0,380.0,3.4016,234600.0,<1H OCEAN --118.32,34.16,46.0,2345.0,453.0,1031.0,427.0,4.3173,278300.0,<1H OCEAN --118.3,34.17,16.0,1353.0,398.0,1211.0,357.0,3.1551,205000.0,<1H OCEAN --118.31,34.16,37.0,2144.0,446.0,860.0,435.0,3.9464,315000.0,<1H OCEAN --118.31,34.17,12.0,3188.0,931.0,2118.0,850.0,3.1823,218300.0,<1H OCEAN --118.31,34.17,24.0,2910.0,917.0,2522.0,873.0,2.4074,219400.0,<1H OCEAN --118.43,34.3,33.0,2443.0,498.0,1601.0,484.0,4.0223,146000.0,<1H OCEAN --118.43,34.3,37.0,1394.0,313.0,1111.0,327.0,3.6023,161800.0,<1H OCEAN --118.43,34.29,39.0,1769.0,410.0,1499.0,390.0,3.1212,153500.0,<1H OCEAN --118.42,34.29,34.0,1489.0,326.0,1389.0,313.0,3.4821,160300.0,<1H OCEAN --118.43,34.3,28.0,271.0,61.0,246.0,62.0,1.7062,164600.0,<1H OCEAN --118.44,34.29,35.0,2606.0,447.0,1555.0,404.0,4.6864,193800.0,<1H OCEAN --118.43,34.29,38.0,1704.0,347.0,1384.0,374.0,2.865,155500.0,<1H OCEAN --118.43,34.29,38.0,1237.0,298.0,1073.0,293.0,3.6726,154600.0,<1H OCEAN --118.43,34.29,50.0,1181.0,265.0,1196.0,269.0,3.2095,167000.0,<1H OCEAN --118.43,34.28,27.0,862.0,280.0,1243.0,267.0,2.3724,154200.0,<1H OCEAN --118.44,34.29,32.0,1260.0,382.0,1434.0,342.0,2.0286,122900.0,<1H OCEAN --118.44,34.29,30.0,1632.0,401.0,1357.0,401.0,3.1588,160100.0,<1H OCEAN --118.45,34.29,30.0,762.0,228.0,840.0,226.0,2.3375,154200.0,<1H OCEAN --118.44,34.28,32.0,527.0,146.0,582.0,143.0,1.7708,138800.0,<1H OCEAN --118.44,34.28,46.0,11.0,11.0,24.0,13.0,2.875,162500.0,<1H OCEAN --118.44,34.28,37.0,944.0,244.0,1107.0,235.0,1.9688,144100.0,<1H OCEAN --118.44,34.28,47.0,843.0,194.0,800.0,180.0,3.3687,151700.0,<1H OCEAN --118.44,34.28,38.0,1156.0,305.0,1359.0,289.0,2.5147,137100.0,<1H OCEAN --118.45,34.28,36.0,2602.0,638.0,2780.0,620.0,2.7155,149800.0,<1H OCEAN --117.71,34.15,17.0,17715.0,2370.0,7665.0,2312.0,7.9068,349100.0,INLAND --117.73,34.12,26.0,1279.0,163.0,412.0,157.0,6.1731,293800.0,INLAND --117.78,34.13,18.0,7798.0,1161.0,3710.0,1227.0,5.8819,260500.0,INLAND --117.76,34.13,8.0,16759.0,2274.0,7249.0,2156.0,7.4837,358700.0,INLAND --117.8,34.15,14.0,7876.0,1253.0,3699.0,1162.0,5.5423,248700.0,INLAND --117.8,34.11,25.0,5039.0,821.0,2654.0,802.0,4.7969,211700.0,INLAND --117.8,34.1,17.0,5153.0,1164.0,2949.0,1083.0,3.5603,174600.0,INLAND --117.8,34.1,13.0,2996.0,495.0,1187.0,464.0,6.2456,161700.0,INLAND --117.79,34.12,16.0,2426.0,426.0,1319.0,446.0,4.8125,224500.0,INLAND --117.79,34.11,18.0,3814.0,721.0,1881.0,692.0,4.4722,215600.0,INLAND --117.83,34.14,26.0,8254.0,1153.0,3460.0,1131.0,6.5253,349900.0,INLAND --117.83,34.15,20.0,2421.0,306.0,1023.0,298.0,8.0683,451500.0,INLAND --117.82,34.13,27.0,3770.0,573.0,1606.0,562.0,6.1321,309700.0,INLAND --117.84,34.13,26.0,3773.0,694.0,2103.0,688.0,4.6937,198000.0,INLAND --117.87,34.15,24.0,5745.0,735.0,2061.0,679.0,8.2827,451400.0,INLAND --117.93,34.15,14.0,9610.0,2005.0,4723.0,1907.0,4.0393,156800.0,INLAND --117.9,34.15,21.0,2056.0,461.0,1332.0,429.0,3.3942,212800.0,INLAND --117.9,34.14,29.0,2240.0,457.0,1187.0,407.0,3.8365,184200.0,<1H OCEAN --117.9,34.14,35.0,2259.0,505.0,1561.0,509.0,3.3043,155500.0,<1H OCEAN --117.91,34.14,42.0,2225.0,485.0,1544.0,464.0,2.2442,166700.0,INLAND --117.89,34.14,15.0,4644.0,967.0,2855.0,867.0,3.3654,222100.0,<1H OCEAN --117.88,34.14,23.0,2308.0,322.0,1001.0,317.0,7.5112,355500.0,INLAND --117.88,34.14,32.0,1764.0,365.0,924.0,329.0,3.875,186700.0,INLAND --117.88,34.13,33.0,3713.0,718.0,2106.0,720.0,4.0023,185500.0,<1H OCEAN --117.85,34.14,35.0,2899.0,429.0,1251.0,429.0,6.1049,297200.0,INLAND --117.85,34.14,35.0,1582.0,248.0,654.0,221.0,4.9091,275000.0,INLAND --117.86,34.14,33.0,2344.0,363.0,1098.0,359.0,6.2089,283400.0,INLAND --117.87,34.15,37.0,2655.0,415.0,1056.0,401.0,5.4224,269500.0,INLAND --117.86,34.14,36.0,3097.0,667.0,1484.0,634.0,3.1905,235300.0,INLAND --117.87,34.14,30.0,2495.0,586.0,1139.0,559.0,2.9375,209200.0,INLAND --117.85,34.13,31.0,1959.0,318.0,1021.0,303.0,4.3145,233000.0,INLAND --117.85,34.12,30.0,4367.0,1033.0,2524.0,954.0,3.0448,192100.0,INLAND --117.86,34.13,33.0,2383.0,428.0,1269.0,421.0,4.636,245500.0,INLAND --117.86,34.13,40.0,1304.0,280.0,607.0,256.0,2.588,209500.0,INLAND --117.86,34.13,29.0,630.0,145.0,378.0,148.0,3.4107,170800.0,INLAND --117.87,34.13,32.0,1741.0,373.0,872.0,333.0,3.4219,194500.0,<1H OCEAN --117.87,34.13,29.0,1677.0,413.0,873.0,400.0,3.12,194300.0,<1H OCEAN --117.82,34.12,26.0,3118.0,528.0,1546.0,545.0,5.27,209400.0,INLAND --117.84,34.12,25.0,3465.0,566.0,1722.0,536.0,4.8304,228900.0,INLAND --117.83,34.11,29.0,2671.0,437.0,1484.0,445.0,4.9844,203000.0,INLAND --117.84,34.11,17.0,3499.0,621.0,1911.0,621.0,4.8894,191700.0,INLAND --117.84,34.12,34.0,2026.0,345.0,1142.0,332.0,4.392,187600.0,INLAND --117.85,34.11,25.0,9255.0,1659.0,4944.0,1627.0,4.5708,223000.0,INLAND --117.81,34.08,13.0,18448.0,2474.0,7775.0,2397.0,7.7876,348900.0,INLAND --117.81,34.12,23.0,7063.0,1176.0,3100.0,1112.0,4.8229,192600.0,INLAND --117.81,34.11,21.0,3481.0,808.0,1866.0,746.0,3.6201,150400.0,INLAND --117.81,34.1,19.0,1935.0,399.0,1126.0,389.0,3.8929,144600.0,INLAND --117.83,34.1,18.0,11026.0,1978.0,5407.0,1923.0,4.075,231100.0,INLAND --117.76,34.1,28.0,4086.0,871.0,1973.0,853.0,2.621,202200.0,INLAND --117.78,34.09,32.0,2643.0,516.0,1862.0,478.0,3.7177,177200.0,INLAND --117.79,34.1,26.0,1664.0,344.0,1024.0,339.0,3.5192,190500.0,INLAND --117.76,34.12,16.0,9020.0,1509.0,3575.0,1486.0,4.2415,275700.0,INLAND --117.77,34.12,15.0,4260.0,770.0,2007.0,695.0,4.4609,230000.0,INLAND --117.76,34.11,22.0,4935.0,954.0,2874.0,938.0,3.9825,180500.0,INLAND --117.77,34.1,50.0,2388.0,494.0,1241.0,459.0,2.8818,167200.0,INLAND --117.77,34.11,28.0,1998.0,414.0,1124.0,389.0,3.75,180900.0,INLAND --117.78,34.11,23.0,7079.0,1381.0,3205.0,1327.0,3.0735,212300.0,INLAND --117.74,34.11,28.0,3494.0,566.0,1391.0,522.0,5.3637,214700.0,INLAND --117.75,34.12,25.0,5411.0,998.0,2243.0,1019.0,4.3148,240700.0,INLAND --117.74,34.1,26.0,2723.0,604.0,1847.0,498.0,2.6779,136000.0,INLAND --117.74,34.1,29.0,2742.0,488.0,2477.0,532.0,3.5072,121900.0,INLAND --117.75,34.1,21.0,8069.0,2174.0,4369.0,2036.0,3.2756,156800.0,INLAND --117.71,34.12,20.0,11250.0,1893.0,4952.0,1859.0,5.6785,239500.0,INLAND --117.73,34.12,26.0,6459.0,894.0,2487.0,885.0,6.2089,261800.0,INLAND --117.71,34.1,41.0,555.0,130.0,1492.0,123.0,2.2813,125000.0,INLAND --117.71,34.1,52.0,567.0,152.0,2688.0,126.0,1.875,212500.0,INLAND --117.72,34.1,52.0,2867.0,496.0,978.0,513.0,3.1477,291200.0,INLAND --117.72,34.1,32.0,3241.0,895.0,1592.0,810.0,2.4952,181800.0,INLAND --117.72,34.1,46.0,2477.0,458.0,1034.0,455.0,5.5,289700.0,INLAND --117.73,34.1,37.0,3457.0,,1344.0,530.0,5.8891,226000.0,INLAND --117.71,34.09,36.0,2637.0,476.0,1385.0,483.0,4.1739,158700.0,INLAND --117.71,34.08,26.0,2744.0,494.0,1411.0,465.0,4.2639,154200.0,INLAND --117.72,34.09,36.0,1473.0,328.0,785.0,299.0,3.2566,151800.0,INLAND --117.72,34.09,33.0,4979.0,934.0,2575.0,874.0,3.7958,152500.0,INLAND --117.73,34.09,30.0,2345.0,496.0,1897.0,454.0,2.4375,112100.0,INLAND --117.73,34.09,36.0,1543.0,297.0,1355.0,303.0,3.5313,117800.0,INLAND --117.73,34.08,33.0,1350.0,265.0,1251.0,257.0,2.9063,115200.0,INLAND --117.74,34.09,30.0,3199.0,591.0,2192.0,563.0,3.4871,136400.0,INLAND --117.75,34.08,33.0,2824.0,523.0,1797.0,493.0,3.6359,135100.0,INLAND --117.75,34.08,33.0,1067.0,194.0,600.0,201.0,4.0368,139100.0,INLAND --117.75,34.09,36.0,3094.0,556.0,1672.0,545.0,4.2143,146900.0,INLAND --117.76,34.08,37.0,2263.0,502.0,1677.0,522.0,2.9388,139200.0,INLAND --117.77,34.08,27.0,5929.0,932.0,2817.0,828.0,6.0434,214800.0,INLAND --117.77,34.07,36.0,2922.0,652.0,2392.0,629.0,2.8661,124000.0,INLAND --117.77,34.07,29.0,2976.0,662.0,2452.0,633.0,3.0638,113600.0,INLAND --117.75,34.07,52.0,1548.0,348.0,1131.0,343.0,2.63,127300.0,INLAND --117.76,34.07,51.0,1538.0,394.0,1173.0,388.0,2.3156,109800.0,INLAND --117.76,34.07,48.0,1157.0,247.0,677.0,218.0,2.8594,127200.0,INLAND --117.76,34.06,33.0,1831.0,486.0,1625.0,472.0,1.9937,103600.0,INLAND --117.76,34.06,47.0,508.0,108.0,384.0,86.0,1.9583,92600.0,INLAND --117.77,34.06,27.0,2178.0,629.0,2379.0,591.0,1.9766,108000.0,INLAND --117.78,34.07,18.0,3610.0,772.0,2899.0,765.0,3.9784,113500.0,INLAND --117.78,34.06,25.0,1712.0,491.0,1807.0,478.0,2.2258,114800.0,INLAND --117.79,34.07,33.0,1694.0,333.0,1689.0,301.0,3.7583,116300.0,INLAND --117.79,34.07,34.0,975.0,192.0,870.0,183.0,3.7933,116100.0,INLAND --117.78,34.06,33.0,1056.0,272.0,964.0,300.0,2.4464,128700.0,INLAND --117.78,34.05,39.0,2933.0,590.0,1886.0,550.0,3.9224,131300.0,INLAND --117.8,34.05,5.0,4536.0,1178.0,2485.0,909.0,4.1118,125900.0,<1H OCEAN --117.8,34.06,34.0,1081.0,205.0,1325.0,252.0,3.6298,108500.0,INLAND --117.82,34.05,21.0,4031.0,923.0,2558.0,834.0,3.1641,117300.0,<1H OCEAN --117.76,34.06,30.0,1700.0,504.0,1719.0,459.0,2.227,91900.0,INLAND --117.76,34.05,36.0,2910.0,819.0,3055.0,782.0,1.9029,98000.0,INLAND --117.75,34.05,35.0,1293.0,339.0,1494.0,312.0,1.6645,93300.0,INLAND --117.76,34.05,36.0,3839.0,1004.0,4711.0,942.0,2.3859,116200.0,INLAND --117.74,34.08,35.0,1613.0,298.0,911.0,293.0,3.4398,134300.0,INLAND --117.74,34.07,42.0,2504.0,553.0,1550.0,509.0,3.0294,135700.0,INLAND --117.74,34.06,48.0,2438.0,599.0,1508.0,548.0,2.8983,129200.0,INLAND --117.74,34.07,52.0,1868.0,316.0,947.0,328.0,4.2415,140100.0,INLAND --117.75,34.07,52.0,1279.0,213.0,444.0,204.0,5.2269,161000.0,INLAND --117.75,34.07,52.0,2550.0,586.0,1246.0,576.0,1.6006,146200.0,INLAND --117.72,34.08,34.0,2742.0,491.0,1761.0,496.0,3.2481,128800.0,INLAND --117.72,34.07,33.0,4100.0,740.0,2580.0,730.0,3.7321,134200.0,INLAND --117.73,34.08,28.0,5173.0,1069.0,3502.0,954.0,3.8438,130800.0,INLAND --117.73,34.07,34.0,4038.0,725.0,2716.0,759.0,4.1339,135000.0,INLAND --117.72,34.06,32.0,2209.0,654.0,1718.0,569.0,1.9643,113200.0,INLAND --117.73,34.06,34.0,344.0,108.0,315.0,119.0,3.1786,117800.0,INLAND --117.73,34.06,51.0,498.0,115.0,368.0,112.0,1.4063,98800.0,INLAND --117.73,34.07,33.0,1921.0,489.0,1430.0,467.0,2.3406,122600.0,INLAND --117.73,34.07,33.0,1025.0,261.0,854.0,269.0,2.2596,119400.0,INLAND --117.73,34.05,36.0,975.0,243.0,809.0,233.0,2.8929,118100.0,INLAND --117.73,34.05,28.0,2758.0,771.0,2877.0,694.0,2.0734,113300.0,INLAND --117.74,34.05,30.0,1185.0,317.0,1466.0,302.0,2.625,94300.0,INLAND --117.74,34.05,29.0,2452.0,700.0,3029.0,665.0,2.1354,110700.0,INLAND --117.74,34.05,27.0,852.0,237.0,1024.0,221.0,2.1141,110900.0,INLAND --117.75,34.05,46.0,1480.0,358.0,1511.0,348.0,1.9718,110600.0,INLAND --117.73,34.04,26.0,3827.0,814.0,3367.0,810.0,3.15,129700.0,INLAND --117.73,34.03,42.0,1967.0,378.0,1459.0,348.0,3.0375,118100.0,INLAND --117.74,34.02,33.0,2318.0,464.0,1904.0,451.0,3.7454,116400.0,INLAND --117.74,34.04,27.0,2215.0,440.0,1987.0,449.0,3.0429,129600.0,INLAND --117.74,34.03,27.0,3623.0,809.0,3712.0,754.0,3.4609,123300.0,INLAND --117.75,34.04,22.0,2948.0,636.0,2600.0,602.0,3.125,113600.0,INLAND --117.76,34.04,34.0,1914.0,,1564.0,328.0,2.8347,115800.0,INLAND --117.76,34.04,36.0,2242.0,448.0,2052.0,447.0,3.4464,113000.0,INLAND --117.85,34.0,26.0,2712.0,402.0,1389.0,377.0,5.6513,227900.0,<1H OCEAN --117.86,33.99,10.0,17820.0,2812.0,8686.0,2666.0,6.3875,310700.0,<1H OCEAN --117.8,34.03,25.0,4240.0,643.0,1885.0,637.0,6.2384,247600.0,<1H OCEAN --117.78,34.03,8.0,32054.0,5290.0,15507.0,5050.0,6.0191,253900.0,<1H OCEAN --117.83,34.01,16.0,9446.0,1650.0,4911.0,1534.0,5.0111,212900.0,<1H OCEAN --117.8,34.02,23.0,3351.0,591.0,1535.0,522.0,5.0869,230600.0,<1H OCEAN --117.81,34.01,12.0,9197.0,1642.0,4332.0,1554.0,4.9589,282100.0,<1H OCEAN --117.79,34.02,5.0,18690.0,2862.0,9427.0,2777.0,6.4266,315600.0,<1H OCEAN --117.84,34.0,26.0,797.0,117.0,383.0,114.0,6.8758,253800.0,<1H OCEAN --117.83,33.99,14.0,17527.0,2751.0,8380.0,2676.0,6.2734,267000.0,<1H OCEAN --117.84,33.98,26.0,3638.0,557.0,1993.0,593.0,6.1076,221200.0,<1H OCEAN --117.83,33.97,11.0,21533.0,3078.0,9671.0,2890.0,7.0329,368300.0,<1H OCEAN --117.87,34.04,7.0,27700.0,4179.0,15037.0,4072.0,6.6288,339700.0,<1H OCEAN --117.86,34.02,19.0,6300.0,937.0,3671.0,943.0,5.9716,262100.0,<1H OCEAN --117.86,34.01,16.0,4632.0,,3038.0,727.0,5.1762,264400.0,<1H OCEAN --117.87,34.02,16.0,3552.0,575.0,2120.0,573.0,6.4333,271500.0,<1H OCEAN --117.84,34.04,4.0,9959.0,1544.0,4904.0,1429.0,6.9754,402500.0,<1H OCEAN --117.85,34.06,24.0,3128.0,497.0,1406.0,472.0,7.5286,462700.0,<1H OCEAN --117.85,34.08,23.0,1160.0,166.0,467.0,178.0,8.105,386200.0,<1H OCEAN --117.85,34.07,32.0,761.0,101.0,295.0,95.0,11.1077,500001.0,<1H OCEAN --117.86,34.08,31.0,2524.0,349.0,1003.0,343.0,7.5196,380900.0,<1H OCEAN --117.87,34.08,33.0,4518.0,716.0,2037.0,764.0,5.6015,267200.0,<1H OCEAN --117.87,34.07,21.0,4723.0,882.0,2210.0,768.0,3.8167,258700.0,<1H OCEAN --117.85,34.1,22.0,5179.0,944.0,2315.0,884.0,4.51,189900.0,<1H OCEAN --117.86,34.09,29.0,3855.0,585.0,2205.0,609.0,5.5496,218200.0,<1H OCEAN --117.85,34.09,16.0,4556.0,639.0,2066.0,651.0,6.4667,263900.0,<1H OCEAN --117.86,34.09,26.0,3408.0,542.0,1664.0,543.0,6.1498,239100.0,<1H OCEAN --117.87,34.1,25.0,2208.0,477.0,1084.0,424.0,3.775,191700.0,<1H OCEAN --117.87,34.09,31.0,1484.0,327.0,927.0,317.0,3.6484,189600.0,<1H OCEAN --117.88,34.1,32.0,3357.0,621.0,1696.0,604.0,4.2685,216600.0,<1H OCEAN --117.89,34.09,36.0,1811.0,320.0,1005.0,332.0,5.5629,188300.0,<1H OCEAN --117.87,34.09,36.0,1267.0,191.0,640.0,200.0,5.2405,220000.0,<1H OCEAN --117.87,34.08,33.0,3630.0,800.0,2257.0,796.0,3.2469,206900.0,<1H OCEAN --117.88,34.09,29.0,3416.0,790.0,2223.0,728.0,3.5109,186000.0,<1H OCEAN --117.86,34.1,23.0,2535.0,490.0,1327.0,466.0,3.5977,180600.0,<1H OCEAN --117.86,34.1,29.0,1185.0,197.0,588.0,196.0,5.0832,196900.0,<1H OCEAN --117.87,34.1,15.0,6409.0,1363.0,3359.0,1267.0,3.875,173300.0,<1H OCEAN --117.84,34.1,17.0,7836.0,1624.0,4419.0,1526.0,3.8465,180700.0,<1H OCEAN --117.85,34.11,27.0,1748.0,403.0,985.0,416.0,3.1133,180600.0,INLAND --117.87,34.12,33.0,2059.0,361.0,1073.0,339.0,4.2454,183800.0,<1H OCEAN --117.88,34.12,33.0,1485.0,274.0,1006.0,258.0,5.1708,158500.0,<1H OCEAN --117.88,34.12,34.0,912.0,165.0,522.0,150.0,4.0417,178000.0,<1H OCEAN --117.87,34.12,34.0,1004.0,220.0,772.0,217.0,3.8571,174500.0,<1H OCEAN --117.87,34.11,23.0,4066.0,819.0,2105.0,737.0,4.6556,199600.0,<1H OCEAN --117.87,34.11,34.0,1324.0,211.0,799.0,228.0,4.5234,192200.0,<1H OCEAN --117.88,34.11,30.0,3082.0,602.0,2008.0,619.0,4.1411,182700.0,<1H OCEAN --117.89,34.12,35.0,1470.0,241.0,885.0,246.0,4.9239,168800.0,<1H OCEAN --117.88,34.12,35.0,1574.0,276.0,1088.0,289.0,4.0938,165300.0,<1H OCEAN --117.89,34.11,36.0,806.0,147.0,446.0,153.0,4.5221,151300.0,<1H OCEAN --117.88,34.11,18.0,2923.0,670.0,1751.0,656.0,3.2383,157000.0,<1H OCEAN --117.89,34.12,35.0,1447.0,272.0,1224.0,268.0,3.9934,141900.0,<1H OCEAN --117.89,34.12,35.0,1566.0,321.0,1396.0,317.0,4.05,141300.0,<1H OCEAN --117.89,34.11,27.0,2434.0,535.0,1623.0,498.0,3.6875,140200.0,<1H OCEAN --117.9,34.11,37.0,1286.0,255.0,1047.0,249.0,4.2019,140100.0,<1H OCEAN --117.88,34.13,25.0,2559.0,654.0,1674.0,623.0,2.8547,155600.0,<1H OCEAN --117.88,34.12,36.0,2029.0,351.0,1327.0,364.0,4.1836,164300.0,<1H OCEAN --117.89,34.13,34.0,2159.0,386.0,1443.0,385.0,4.1995,147400.0,<1H OCEAN --117.9,34.13,25.0,3076.0,856.0,2868.0,752.0,2.6619,117600.0,<1H OCEAN --117.9,34.13,32.0,1640.0,391.0,1312.0,358.0,2.6292,136100.0,<1H OCEAN --117.9,34.13,5.0,1126.0,316.0,819.0,311.0,1.5,139800.0,<1H OCEAN --117.9,34.13,37.0,1801.0,422.0,1564.0,425.0,3.1597,133000.0,<1H OCEAN --117.9,34.12,33.0,1788.0,456.0,1787.0,361.0,2.6629,124100.0,<1H OCEAN --117.9,34.12,33.0,1555.0,361.0,1571.0,386.0,4.0529,138200.0,<1H OCEAN --117.9,34.12,35.0,957.0,194.0,804.0,221.0,3.3322,151400.0,<1H OCEAN --117.91,34.13,34.0,1540.0,328.0,1037.0,317.0,2.2132,138500.0,<1H OCEAN --117.92,34.13,42.0,1762.0,398.0,1526.0,365.0,2.8643,132600.0,INLAND --117.91,34.12,41.0,2673.0,578.0,2259.0,592.0,3.7846,145500.0,<1H OCEAN --117.91,34.12,33.0,1391.0,309.0,1038.0,298.0,4.1944,149500.0,<1H OCEAN --117.92,34.12,32.0,2552.0,576.0,2161.0,548.0,2.9459,144400.0,<1H OCEAN --117.93,34.12,36.0,294.0,67.0,266.0,80.0,3.5385,134400.0,INLAND --117.9,34.11,23.0,4776.0,1316.0,4797.0,1187.0,2.1667,142600.0,<1H OCEAN --117.91,34.11,20.0,3158.0,684.0,2396.0,713.0,3.525,153000.0,<1H OCEAN --117.92,34.11,24.0,2838.0,695.0,2151.0,645.0,3.2202,126200.0,<1H OCEAN --117.94,34.1,31.0,1239.0,254.0,929.0,244.0,3.3625,153400.0,<1H OCEAN --117.97,34.11,18.0,123.0,28.0,121.0,26.0,3.0417,137500.0,INLAND --117.99,34.08,11.0,2399.0,527.0,2307.0,531.0,3.5625,141000.0,INLAND --117.99,34.07,31.0,1507.0,369.0,1548.0,347.0,3.4327,147200.0,INLAND --117.98,34.07,15.0,3543.0,888.0,3131.0,823.0,3.0184,139400.0,INLAND --117.98,34.07,28.0,441.0,106.0,504.0,108.0,2.9107,152500.0,INLAND --117.99,34.06,32.0,2491.0,616.0,2660.0,595.0,2.564,145800.0,INLAND --118.0,34.07,34.0,1696.0,456.0,1609.0,426.0,2.25,138500.0,INLAND --117.99,34.07,35.0,1681.0,360.0,1648.0,373.0,2.4911,145900.0,INLAND --117.99,34.08,35.0,1032.0,207.0,954.0,191.0,2.8906,134800.0,INLAND --117.97,34.08,8.0,2027.0,480.0,1781.0,447.0,3.0806,142400.0,INLAND --117.97,34.08,30.0,2227.0,474.0,1961.0,481.0,3.3261,164100.0,INLAND --117.96,34.07,32.0,2910.0,709.0,2583.0,670.0,3.7736,158400.0,<1H OCEAN --117.97,34.07,20.0,2063.0,496.0,1573.0,468.0,3.2,157100.0,<1H OCEAN --117.97,34.07,22.0,1438.0,364.0,1325.0,335.0,2.7802,162500.0,<1H OCEAN --117.98,34.08,17.0,3640.0,830.0,3537.0,807.0,3.4784,152200.0,INLAND --117.98,34.1,22.0,5661.0,1209.0,5389.0,1178.0,3.7727,159700.0,INLAND --117.98,34.09,31.0,3073.0,617.0,2640.0,594.0,3.5,161300.0,INLAND --117.97,34.09,27.0,3569.0,761.0,3339.0,762.0,4.1304,160500.0,INLAND --117.95,34.11,29.0,1986.0,448.0,2013.0,432.0,3.1034,140800.0,INLAND --117.96,34.1,35.0,4036.0,904.0,3878.0,846.0,3.2957,141600.0,INLAND --117.97,34.1,33.0,1558.0,316.0,1600.0,338.0,2.9712,143900.0,INLAND --117.97,34.1,26.0,1399.0,277.0,1285.0,276.0,4.0,160100.0,INLAND --117.96,34.09,30.0,2686.0,613.0,2477.0,573.0,3.4427,160800.0,INLAND --117.96,34.09,6.0,1954.0,534.0,1584.0,496.0,3.1621,131000.0,INLAND --117.96,34.1,30.0,2775.0,657.0,2847.0,642.0,3.2266,141800.0,INLAND --117.97,34.09,31.0,2779.0,639.0,2259.0,670.0,3.4032,143400.0,INLAND --117.95,34.09,21.0,2215.0,484.0,1792.0,419.0,2.8375,166500.0,<1H OCEAN --117.95,34.08,34.0,2278.0,476.0,1728.0,448.0,3.125,154100.0,<1H OCEAN --117.95,34.09,18.0,1179.0,324.0,1296.0,331.0,2.851,140600.0,<1H OCEAN --117.96,34.08,39.0,1076.0,338.0,1242.0,332.0,2.2679,151800.0,<1H OCEAN --117.96,34.08,33.0,4151.0,850.0,3563.0,848.0,3.1912,159900.0,<1H OCEAN --117.96,34.08,28.0,2831.0,552.0,2330.0,557.0,3.9741,173100.0,<1H OCEAN --117.94,34.09,21.0,2707.0,675.0,1742.0,626.0,2.1062,176700.0,<1H OCEAN --117.94,34.08,32.0,2704.0,514.0,1669.0,497.0,4.4653,195400.0,<1H OCEAN --117.94,34.08,34.0,1970.0,476.0,1269.0,406.0,4.064,201200.0,<1H OCEAN --117.94,34.08,35.0,2393.0,417.0,1336.0,418.0,4.87,187700.0,<1H OCEAN --117.95,34.08,37.0,1137.0,203.0,672.0,226.0,3.2969,189000.0,<1H OCEAN --117.95,34.07,37.0,1987.0,399.0,1279.0,378.0,4.1172,176500.0,<1H OCEAN --117.93,34.09,34.0,2192.0,431.0,1376.0,428.0,3.9861,163900.0,<1H OCEAN --117.93,34.09,35.0,782.0,153.0,499.0,163.0,4.2062,161300.0,<1H OCEAN --117.93,34.09,35.0,1891.0,353.0,1093.0,382.0,4.0167,165500.0,<1H OCEAN --117.93,34.09,37.0,1185.0,225.0,769.0,235.0,4.4625,154200.0,<1H OCEAN --117.92,34.08,36.0,1285.0,228.0,679.0,231.0,3.8705,191900.0,<1H OCEAN --117.92,34.08,35.0,2108.0,408.0,1257.0,414.0,4.1312,185200.0,<1H OCEAN --117.93,34.07,34.0,1409.0,305.0,819.0,273.0,3.3977,188800.0,<1H OCEAN --117.93,34.08,36.0,1371.0,246.0,806.0,241.0,4.5078,187100.0,<1H OCEAN --117.93,34.08,35.0,689.0,128.0,379.0,128.0,3.9583,206000.0,<1H OCEAN --117.93,34.08,36.0,1597.0,285.0,901.0,272.0,4.3947,197000.0,<1H OCEAN --117.93,34.08,36.0,1788.0,317.0,1139.0,320.0,4.125,185800.0,<1H OCEAN --117.91,34.08,33.0,2325.0,452.0,1170.0,445.0,3.6625,217100.0,<1H OCEAN --117.91,34.08,35.0,1443.0,266.0,861.0,262.0,3.5795,186900.0,<1H OCEAN --117.92,34.08,36.0,1479.0,251.0,741.0,245.0,4.2986,189600.0,<1H OCEAN --117.92,34.08,35.0,1860.0,323.0,1011.0,305.0,3.5536,207000.0,<1H OCEAN --117.92,34.08,35.0,1897.0,311.0,965.0,323.0,5.7039,199400.0,<1H OCEAN --117.91,34.1,28.0,3694.0,722.0,1999.0,718.0,3.2813,181100.0,<1H OCEAN --117.91,34.09,20.0,4327.0,1037.0,2296.0,963.0,3.0441,185400.0,<1H OCEAN --117.92,34.09,35.0,1810.0,318.0,1164.0,332.0,5.0123,165700.0,<1H OCEAN --117.92,34.1,33.0,1921.0,397.0,1492.0,393.0,4.375,150500.0,<1H OCEAN --117.9,34.1,31.0,3007.0,653.0,1766.0,616.0,3.7083,166000.0,<1H OCEAN --117.91,34.1,35.0,2746.0,478.0,1779.0,501.0,4.25,166700.0,<1H OCEAN --117.92,34.1,35.0,2994.0,603.0,1933.0,561.0,4.0052,160700.0,<1H OCEAN --117.89,34.1,27.0,3341.0,728.0,1762.0,679.0,2.9437,180400.0,<1H OCEAN --117.89,34.1,35.0,3185.0,544.0,1858.0,564.0,3.8304,175900.0,<1H OCEAN --117.89,34.1,34.0,2048.0,411.0,1456.0,416.0,3.125,168600.0,<1H OCEAN --117.9,34.1,35.0,2739.0,475.0,1481.0,483.0,4.5655,176600.0,<1H OCEAN --117.9,34.09,34.0,1562.0,272.0,825.0,266.0,4.125,220800.0,<1H OCEAN --117.9,34.08,32.0,2068.0,356.0,976.0,370.0,5.212,201200.0,<1H OCEAN --117.89,34.09,37.0,1055.0,280.0,538.0,206.0,2.4167,181300.0,<1H OCEAN --117.89,34.09,35.0,1205.0,330.0,583.0,319.0,2.3971,188900.0,<1H OCEAN --117.89,34.09,37.0,1813.0,394.0,1100.0,375.0,3.4453,176700.0,<1H OCEAN --117.9,34.09,39.0,1726.0,333.0,892.0,335.0,4.3409,191800.0,<1H OCEAN --117.88,34.08,30.0,6132.0,1538.0,3147.0,1449.0,2.7763,187800.0,<1H OCEAN --117.89,34.08,35.0,1711.0,335.0,825.0,356.0,3.5,215600.0,<1H OCEAN --117.89,34.08,25.0,2115.0,489.0,1107.0,477.0,3.1949,207400.0,<1H OCEAN --117.89,34.07,32.0,2374.0,450.0,1580.0,427.0,3.8837,200300.0,<1H OCEAN --117.9,34.08,32.0,5482.0,1251.0,3426.0,1117.0,3.2943,204400.0,<1H OCEAN --117.87,34.06,25.0,3652.0,470.0,1525.0,484.0,10.1248,428500.0,<1H OCEAN --117.88,34.06,23.0,6689.0,1124.0,3081.0,1047.0,5.9254,491200.0,<1H OCEAN --117.9,34.06,35.0,1313.0,194.0,599.0,209.0,7.5,287200.0,<1H OCEAN --117.9,34.06,33.0,1701.0,290.0,831.0,275.0,5.4469,274700.0,<1H OCEAN --117.9,34.06,33.0,1330.0,209.0,578.0,192.0,5.6406,266200.0,<1H OCEAN --117.89,34.07,35.0,1439.0,261.0,804.0,271.0,3.9808,188600.0,<1H OCEAN --117.9,34.07,35.0,1646.0,294.0,1056.0,280.0,3.055,172000.0,<1H OCEAN --117.89,34.07,35.0,834.0,137.0,392.0,123.0,4.5179,218800.0,<1H OCEAN --117.9,34.06,34.0,2956.0,469.0,1488.0,464.0,5.3664,268300.0,<1H OCEAN --117.9,34.07,36.0,1009.0,164.0,466.0,149.0,5.8519,249400.0,<1H OCEAN --117.91,34.07,36.0,1390.0,270.0,887.0,266.0,5.0897,189000.0,<1H OCEAN --117.91,34.07,33.0,2938.0,561.0,1519.0,549.0,4.5594,204200.0,<1H OCEAN --117.92,34.06,34.0,2819.0,609.0,1718.0,558.0,3.5547,197600.0,<1H OCEAN --117.92,34.07,36.0,1057.0,207.0,658.0,207.0,4.7708,191700.0,<1H OCEAN --117.92,34.07,29.0,1699.0,399.0,1052.0,411.0,3.2122,195500.0,<1H OCEAN --117.91,34.06,29.0,3250.0,521.0,1382.0,513.0,5.112,218300.0,<1H OCEAN --117.91,34.05,35.0,3189.0,,1727.0,500.0,5.0758,211100.0,<1H OCEAN --117.92,34.06,35.0,2894.0,467.0,1420.0,479.0,5.184,224900.0,<1H OCEAN --117.93,34.06,37.0,1505.0,262.0,798.0,259.0,5.4635,202100.0,<1H OCEAN --117.93,34.06,35.0,1022.0,183.0,628.0,187.0,3.9375,187500.0,<1H OCEAN --117.93,34.05,36.0,1340.0,221.0,848.0,244.0,4.1731,205100.0,<1H OCEAN --117.93,34.05,32.0,3055.0,623.0,1902.0,565.0,4.2926,190700.0,<1H OCEAN --117.92,34.07,38.0,175.0,22.0,129.0,20.0,9.7066,182500.0,<1H OCEAN --117.93,34.06,28.0,3342.0,688.0,2210.0,647.0,3.4596,202800.0,<1H OCEAN --117.95,34.05,34.0,1428.0,227.0,890.0,249.0,5.8722,204800.0,<1H OCEAN --117.94,34.06,32.0,3418.0,662.0,2003.0,622.0,4.0333,210200.0,<1H OCEAN --117.94,34.06,34.0,1921.0,422.0,1230.0,447.0,3.6648,193900.0,<1H OCEAN --117.93,34.07,36.0,1207.0,209.0,683.0,213.0,5.3559,207300.0,<1H OCEAN --117.94,34.07,25.0,1814.0,404.0,1187.0,363.0,3.3523,170800.0,<1H OCEAN --117.95,34.07,37.0,1375.0,260.0,951.0,272.0,3.2083,195200.0,<1H OCEAN --117.95,34.06,32.0,2252.0,415.0,1370.0,411.0,4.6312,184800.0,<1H OCEAN --117.96,34.07,35.0,2819.0,529.0,1508.0,485.0,4.6118,191700.0,<1H OCEAN --117.96,34.06,34.0,2226.0,381.0,1464.0,365.0,4.4102,183200.0,<1H OCEAN --117.96,34.06,31.0,2017.0,462.0,1462.0,457.0,2.067,167300.0,<1H OCEAN --117.97,34.05,33.0,1452.0,268.0,1274.0,278.0,3.6563,162700.0,<1H OCEAN --117.97,34.06,34.0,3580.0,684.0,2786.0,636.0,4.0469,166800.0,<1H OCEAN --117.98,34.06,33.0,1353.0,228.0,1079.0,237.0,4.5417,160300.0,<1H OCEAN --117.97,34.06,31.0,2516.0,,2194.0,497.0,3.2413,155500.0,<1H OCEAN --117.98,34.06,36.0,2391.0,407.0,1967.0,398.0,4.0274,160700.0,<1H OCEAN --117.98,34.05,35.0,2342.0,426.0,2176.0,416.0,3.7454,156900.0,<1H OCEAN --117.99,34.05,35.0,1792.0,317.0,1441.0,306.0,3.7917,151100.0,<1H OCEAN --117.97,34.05,33.0,2028.0,422.0,1727.0,371.0,2.8438,157600.0,<1H OCEAN --117.97,34.05,36.0,931.0,160.0,746.0,201.0,3.1667,158000.0,<1H OCEAN --117.97,34.05,36.0,1299.0,206.0,763.0,216.0,3.5179,161400.0,<1H OCEAN --117.97,34.05,34.0,2050.0,495.0,1832.0,465.0,2.8333,155700.0,<1H OCEAN --117.98,34.05,33.0,1560.0,315.0,1467.0,313.0,4.1429,159800.0,<1H OCEAN --117.98,34.04,34.0,2547.0,537.0,2108.0,498.0,3.4722,154600.0,<1H OCEAN --117.97,34.04,32.0,1507.0,295.0,1326.0,324.0,4.119,163300.0,<1H OCEAN --117.97,34.04,28.0,1686.0,417.0,1355.0,388.0,2.5192,157300.0,<1H OCEAN --117.96,34.03,35.0,2093.0,,1755.0,403.0,3.4115,150400.0,<1H OCEAN --117.96,34.03,35.0,1623.0,331.0,1462.0,312.0,3.9803,152600.0,<1H OCEAN --117.95,34.03,33.0,1453.0,326.0,1609.0,319.0,3.7578,155800.0,<1H OCEAN --117.95,34.03,35.0,804.0,159.0,727.0,179.0,2.7361,145700.0,<1H OCEAN --117.96,34.05,35.0,1254.0,263.0,1092.0,268.0,4.6364,163100.0,<1H OCEAN --117.96,34.05,36.0,1475.0,270.0,1149.0,284.0,3.0904,158600.0,<1H OCEAN --117.95,34.05,35.0,1309.0,276.0,1113.0,253.0,4.375,156500.0,<1H OCEAN --117.95,34.04,36.0,1044.0,200.0,982.0,205.0,4.7679,153900.0,<1H OCEAN --117.96,34.04,35.0,1141.0,212.0,924.0,212.0,3.1591,148300.0,<1H OCEAN --117.96,34.04,33.0,1458.0,268.0,1115.0,257.0,4.7955,158100.0,<1H OCEAN --117.96,34.04,34.0,1381.0,265.0,1020.0,268.0,4.025,146900.0,<1H OCEAN --117.96,34.05,32.0,1993.0,388.0,1385.0,380.0,3.7258,181900.0,<1H OCEAN --117.94,34.05,34.0,1729.0,324.0,1341.0,324.0,3.7708,163500.0,<1H OCEAN --117.94,34.04,36.0,1431.0,354.0,1367.0,334.0,3.5592,160200.0,<1H OCEAN --117.94,34.04,34.0,1403.0,274.0,977.0,257.0,3.8409,163000.0,<1H OCEAN --117.94,34.05,34.0,1519.0,304.0,1262.0,300.0,3.3409,161200.0,<1H OCEAN --117.95,34.05,31.0,2349.0,539.0,2028.0,521.0,3.494,154500.0,<1H OCEAN --117.94,34.04,33.0,1493.0,331.0,1571.0,354.0,3.8864,158900.0,<1H OCEAN --117.95,34.04,27.0,2610.0,846.0,2296.0,750.0,2.274,150800.0,<1H OCEAN --117.94,34.03,35.0,1499.0,289.0,1112.0,268.0,3.83,149000.0,<1H OCEAN --117.94,34.03,35.0,1375.0,249.0,1015.0,239.0,4.0521,151800.0,<1H OCEAN --117.95,34.03,33.0,1782.0,394.0,1517.0,376.0,3.3389,157900.0,<1H OCEAN --117.93,34.01,23.0,3188.0,836.0,3883.0,840.0,2.1863,157600.0,<1H OCEAN --117.93,34.01,33.0,1733.0,361.0,1757.0,375.0,4.2266,153800.0,<1H OCEAN --117.94,34.02,27.0,5026.0,955.0,3899.0,930.0,3.871,162900.0,<1H OCEAN --117.95,34.02,19.0,1129.0,258.0,900.0,228.0,3.875,135600.0,<1H OCEAN --117.95,34.02,22.0,1919.0,411.0,1203.0,363.0,4.2578,144100.0,<1H OCEAN --117.92,34.03,35.0,1341.0,233.0,898.0,216.0,4.1118,157300.0,<1H OCEAN --117.92,34.03,32.0,1819.0,375.0,1728.0,375.0,3.975,162400.0,<1H OCEAN --117.92,34.03,35.0,1469.0,306.0,1285.0,308.0,3.9219,159500.0,<1H OCEAN --117.93,34.03,35.0,2160.0,399.0,1694.0,403.0,3.8581,163100.0,<1H OCEAN --117.93,34.03,30.0,2246.0,446.0,1837.0,431.0,4.7917,164500.0,<1H OCEAN --117.93,34.04,23.0,6361.0,1168.0,4580.0,1109.0,4.9342,181000.0,<1H OCEAN --117.93,34.04,30.0,1336.0,239.0,905.0,253.0,4.8854,178100.0,<1H OCEAN --117.9,34.04,15.0,11989.0,2185.0,6652.0,2081.0,4.5554,278300.0,<1H OCEAN --117.9,34.05,33.0,629.0,76.0,253.0,75.0,7.6286,330400.0,<1H OCEAN --117.91,34.04,15.0,8749.0,1761.0,5278.0,1691.0,4.6324,168800.0,<1H OCEAN --117.92,34.05,36.0,2241.0,419.0,1743.0,448.0,4.6587,161900.0,<1H OCEAN --117.88,34.01,16.0,6756.0,1332.0,4429.0,1299.0,4.7589,178200.0,<1H OCEAN --117.88,34.0,21.0,5459.0,1086.0,3394.0,1087.0,3.6308,192100.0,<1H OCEAN --117.89,34.01,23.0,4535.0,955.0,3881.0,930.0,3.6275,154100.0,<1H OCEAN --117.9,34.01,27.0,1702.0,381.0,2091.0,352.0,3.7917,131100.0,<1H OCEAN --117.9,34.01,27.0,2383.0,472.0,2079.0,494.0,3.9702,141400.0,<1H OCEAN --117.91,34.02,17.0,5973.0,1384.0,4349.0,1229.0,3.2799,199300.0,<1H OCEAN --117.9,34.02,15.0,14058.0,2486.0,8997.0,2497.0,5.0704,226200.0,<1H OCEAN --117.91,34.02,22.0,6269.0,,5587.0,1251.0,3.8201,136200.0,<1H OCEAN --117.92,34.01,35.0,3055.0,634.0,3738.0,615.0,3.375,127200.0,<1H OCEAN --117.98,34.04,29.0,1468.0,310.0,1390.0,276.0,3.75,190600.0,<1H OCEAN --117.96,34.02,33.0,349.0,124.0,460.0,83.0,2.375,133300.0,<1H OCEAN --117.98,34.03,21.0,797.0,162.0,484.0,166.0,2.625,191100.0,<1H OCEAN --117.9,33.99,18.0,8076.0,1789.0,5325.0,1707.0,3.443,171900.0,<1H OCEAN --117.92,34.0,36.0,116.0,30.0,193.0,35.0,3.8125,136300.0,<1H OCEAN --117.88,34.0,32.0,265.0,51.0,170.0,50.0,3.9375,187500.0,<1H OCEAN --117.89,33.99,22.0,3272.0,618.0,1784.0,591.0,4.0324,211300.0,<1H OCEAN --117.87,33.99,21.0,2837.0,515.0,2031.0,555.0,4.9271,209700.0,<1H OCEAN --118.01,34.05,37.0,682.0,172.0,813.0,173.0,3.8125,138000.0,<1H OCEAN --117.99,34.04,30.0,4468.0,959.0,4027.0,938.0,3.185,168300.0,<1H OCEAN --118.02,34.04,27.0,5640.0,1001.0,3538.0,978.0,5.065,215400.0,<1H OCEAN --118.0,34.03,25.0,6909.0,1154.0,3912.0,1121.0,5.257,226100.0,<1H OCEAN --117.98,34.02,32.0,2945.0,651.0,2044.0,652.0,3.1979,183900.0,<1H OCEAN --117.98,34.02,33.0,3512.0,632.0,1971.0,598.0,4.4653,193200.0,<1H OCEAN --117.98,34.01,27.0,2643.0,418.0,1344.0,381.0,5.7057,262100.0,<1H OCEAN --117.99,34.0,26.0,2988.0,397.0,1371.0,415.0,6.6988,382500.0,<1H OCEAN --118.02,34.02,21.0,5992.0,986.0,2647.0,969.0,5.2405,302400.0,<1H OCEAN --117.97,34.01,33.0,3530.0,700.0,2959.0,679.0,3.7459,152900.0,<1H OCEAN --117.97,34.01,33.0,2006.0,381.0,1410.0,346.0,3.7083,165500.0,<1H OCEAN --117.97,34.0,28.0,1983.0,375.0,1407.0,367.0,3.8319,179000.0,<1H OCEAN --117.97,33.99,22.0,5284.0,982.0,2613.0,932.0,4.7332,289900.0,<1H OCEAN --117.98,34.0,22.0,3632.0,538.0,1968.0,566.0,6.019,324900.0,<1H OCEAN --117.98,33.99,26.0,3343.0,455.0,1429.0,457.0,7.0778,334300.0,<1H OCEAN --117.98,33.98,27.0,2275.0,346.0,1039.0,333.0,6.2217,333500.0,<1H OCEAN --117.99,33.98,18.0,8399.0,1144.0,3727.0,1107.0,6.9695,360400.0,<1H OCEAN --117.95,34.0,34.0,2376.0,468.0,1858.0,449.0,4.1328,176300.0,<1H OCEAN --117.96,34.0,33.0,5462.0,952.0,3527.0,914.0,4.4038,186700.0,<1H OCEAN --117.96,34.0,34.0,2777.0,540.0,1954.0,522.0,4.5163,183800.0,<1H OCEAN --117.92,33.98,10.0,16414.0,2919.0,8907.0,2714.0,6.1552,362500.0,<1H OCEAN --117.95,33.98,15.0,16042.0,2602.0,7732.0,2552.0,5.6716,330400.0,<1H OCEAN --117.94,33.99,18.0,6100.0,1018.0,3112.0,982.0,4.9932,284000.0,<1H OCEAN --117.95,33.99,15.0,3978.0,692.0,2418.0,665.0,5.0142,269900.0,<1H OCEAN --117.95,33.99,24.0,1219.0,177.0,610.0,185.0,6.7978,325000.0,<1H OCEAN --117.95,33.99,25.0,1075.0,138.0,451.0,132.0,6.8492,332200.0,<1H OCEAN --117.96,33.99,25.0,1348.0,210.0,660.0,200.0,5.2852,297600.0,<1H OCEAN --117.96,33.99,25.0,2799.0,388.0,1348.0,389.0,6.2517,311100.0,<1H OCEAN --117.97,33.99,23.0,3335.0,570.0,1560.0,555.0,5.7268,300300.0,<1H OCEAN --117.96,33.98,25.0,1259.0,184.0,599.0,170.0,5.7407,302200.0,<1H OCEAN --117.88,33.96,16.0,19059.0,3079.0,10988.0,3061.0,5.5469,265200.0,<1H OCEAN --117.89,33.98,5.0,3088.0,711.0,1415.0,641.0,2.5125,184500.0,<1H OCEAN --117.9,33.98,20.0,9893.0,2283.0,7228.0,2159.0,3.253,186700.0,<1H OCEAN --117.9,33.97,23.0,7353.0,1255.0,4014.0,1124.0,5.4155,213200.0,<1H OCEAN --117.75,34.06,52.0,1171.0,318.0,1126.0,276.0,1.9762,105800.0,INLAND --117.75,34.06,52.0,62.0,9.0,44.0,16.0,0.4999,112500.0,INLAND --117.74,34.06,4.0,1391.0,506.0,727.0,369.0,1.4722,137500.0,INLAND --117.75,34.05,27.0,437.0,108.0,469.0,97.0,1.7206,107500.0,INLAND --117.75,34.05,37.0,378.0,92.0,503.0,103.0,2.1908,94600.0,INLAND --117.75,34.06,44.0,477.0,135.0,502.0,117.0,2.0156,112500.0,INLAND --117.75,34.06,52.0,24.0,6.0,46.0,7.0,1.625,67500.0,INLAND --117.94,34.15,33.0,859.0,144.0,421.0,138.0,4.4821,220100.0,INLAND --117.95,34.16,17.0,7116.0,1089.0,3538.0,1083.0,6.2654,273800.0,INLAND --117.94,34.14,33.0,1620.0,283.0,868.0,275.0,5.411,219400.0,INLAND --117.95,34.14,13.0,3859.0,710.0,2283.0,759.0,4.5594,184500.0,INLAND --117.95,34.14,33.0,1943.0,440.0,1526.0,353.0,3.038,137500.0,INLAND --117.96,34.14,27.0,2221.0,542.0,1328.0,523.0,2.5275,151700.0,INLAND --117.96,34.14,33.0,1994.0,405.0,993.0,403.0,3.766,163900.0,INLAND --117.96,34.14,9.0,907.0,207.0,619.0,194.0,3.9464,179600.0,INLAND --117.97,34.14,15.0,3595.0,964.0,1839.0,877.0,2.6014,150300.0,INLAND --117.97,34.14,33.0,1328.0,348.0,903.0,329.0,3.1094,136000.0,INLAND --117.97,34.13,42.0,683.0,127.0,541.0,138.0,3.4375,151700.0,INLAND --117.98,34.14,24.0,1596.0,388.0,1329.0,352.0,3.0417,148000.0,INLAND --117.97,34.13,33.0,2038.0,473.0,1546.0,469.0,3.4777,144500.0,INLAND --117.98,34.13,37.0,1447.0,309.0,1279.0,290.0,4.0083,142900.0,INLAND --117.98,34.13,29.0,2110.0,460.0,1890.0,448.0,3.6806,130500.0,INLAND --117.97,34.15,33.0,2474.0,472.0,1268.0,437.0,6.4576,500001.0,INLAND --117.97,34.17,35.0,5005.0,848.0,2112.0,813.0,4.9968,295000.0,INLAND --118.0,34.16,42.0,1020.0,156.0,398.0,157.0,6.101,311800.0,INLAND --118.01,34.16,47.0,1745.0,270.0,753.0,275.0,5.532,318500.0,INLAND --117.99,34.18,38.0,2981.0,432.0,1063.0,437.0,6.5254,365000.0,INLAND --117.99,34.16,40.0,3838.0,696.0,1851.0,674.0,4.2407,262000.0,INLAND --118.0,34.16,52.0,1354.0,227.0,531.0,206.0,4.8059,270600.0,INLAND --118.0,34.15,48.0,3436.0,673.0,1540.0,648.0,4.275,256800.0,INLAND --118.01,34.15,52.0,2234.0,472.0,986.0,439.0,3.9125,265500.0,INLAND --118.02,34.15,44.0,2419.0,437.0,1045.0,432.0,3.875,280800.0,INLAND --118.02,34.17,32.0,3868.0,548.0,1558.0,528.0,9.4667,500001.0,INLAND --118.03,34.16,36.0,1640.0,239.0,693.0,253.0,6.6888,500001.0,INLAND --118.03,34.15,43.0,1694.0,283.0,674.0,267.0,4.1797,486800.0,INLAND --118.02,34.15,44.0,2267.0,426.0,980.0,372.0,3.6,307400.0,INLAND --118.06,34.17,38.0,2726.0,398.0,1059.0,380.0,7.2419,410400.0,INLAND --118.05,34.17,45.0,2535.0,455.0,1036.0,437.0,5.0482,388900.0,INLAND --118.04,34.17,52.0,1885.0,401.0,764.0,373.0,4.0385,265700.0,INLAND --118.04,34.18,37.0,3134.0,532.0,1220.0,508.0,5.2865,455400.0,INLAND --118.04,34.16,38.0,1594.0,249.0,633.0,247.0,5.9582,350700.0,INLAND --118.05,34.16,36.0,3908.0,732.0,1688.0,725.0,4.5625,376800.0,INLAND --118.05,34.16,41.0,3320.0,713.0,1236.0,659.0,3.5694,278600.0,INLAND --118.06,34.16,46.0,1467.0,298.0,816.0,267.0,3.6705,286500.0,INLAND --118.06,34.16,34.0,2297.0,419.0,909.0,412.0,4.8214,362500.0,INLAND --118.07,34.16,35.0,3585.0,671.0,1401.0,623.0,4.125,330000.0,INLAND --118.03,34.16,36.0,1401.0,218.0,667.0,225.0,7.1615,484700.0,INLAND --118.03,34.16,39.0,2731.0,366.0,1034.0,338.0,9.8098,500001.0,INLAND --118.05,34.15,32.0,5131.0,665.0,1877.0,622.0,8.2004,500001.0,INLAND --118.06,34.15,37.0,1980.0,226.0,697.0,226.0,15.0001,500001.0,INLAND --118.05,34.14,39.0,2125.0,295.0,862.0,303.0,8.9728,500001.0,INLAND --118.06,34.13,40.0,4307.0,918.0,1769.0,845.0,3.6341,391500.0,INLAND --118.06,34.14,42.0,2461.0,379.0,1179.0,360.0,7.0315,437300.0,INLAND --118.06,34.14,40.0,2662.0,379.0,1151.0,387.0,8.4889,500001.0,INLAND --118.03,34.14,44.0,1446.0,250.0,721.0,243.0,4.7308,352200.0,INLAND --118.04,34.13,22.0,3359.0,643.0,1227.0,588.0,4.645,276200.0,INLAND --118.04,34.15,34.0,1523.0,311.0,676.0,295.0,3.3621,377200.0,INLAND --118.04,34.13,35.0,249.0,31.0,268.0,29.0,15.0001,500001.0,INLAND --118.05,34.13,23.0,3264.0,729.0,1475.0,668.0,3.735,218300.0,INLAND --118.06,34.13,28.0,12139.0,2873.0,5359.0,2731.0,3.292,227300.0,INLAND --118.02,34.14,34.0,1077.0,257.0,478.0,199.0,2.6316,252800.0,INLAND --118.02,34.13,32.0,3308.0,718.0,1803.0,667.0,3.9464,273600.0,INLAND --118.03,34.14,31.0,4353.0,1117.0,2338.0,1037.0,3.0727,242600.0,INLAND --118.01,34.13,36.0,1332.0,217.0,648.0,203.0,4.7159,365900.0,INLAND --118.02,34.13,33.0,2874.0,458.0,1239.0,431.0,5.2329,430900.0,INLAND --118.02,34.13,34.0,1966.0,319.0,980.0,297.0,7.7307,429000.0,INLAND --118.03,34.13,33.0,2352.0,373.0,995.0,359.0,4.9583,445700.0,INLAND --118.02,34.12,37.0,2250.0,360.0,989.0,329.0,6.1536,366000.0,INLAND --118.02,34.11,35.0,2454.0,458.0,1110.0,435.0,3.8029,414800.0,INLAND --118.02,34.12,36.0,1471.0,246.0,751.0,230.0,5.4555,395100.0,INLAND --118.02,34.12,38.0,1778.0,288.0,870.0,281.0,6.5784,408500.0,INLAND --118.03,34.11,34.0,2837.0,460.0,1344.0,458.0,6.5722,437400.0,INLAND --118.01,34.14,20.0,3350.0,831.0,1816.0,744.0,2.8352,161700.0,INLAND --118.01,34.14,23.0,3425.0,754.0,2202.0,729.0,3.52,187300.0,INLAND --118.02,34.14,31.0,6854.0,1578.0,4131.0,1524.0,3.5878,222800.0,INLAND --117.99,34.15,44.0,2492.0,611.0,1951.0,596.0,3.1304,185600.0,INLAND --118.0,34.15,43.0,2583.0,633.0,1544.0,617.0,2.5417,178300.0,INLAND --118.01,34.15,32.0,6597.0,1579.0,3689.0,1459.0,3.2377,184100.0,INLAND --117.98,34.14,27.0,6341.0,1289.0,2899.0,1192.0,3.6336,235200.0,INLAND --117.99,34.14,30.0,2346.0,,1988.0,474.0,2.5625,153000.0,INLAND --118.0,34.13,24.0,2584.0,520.0,1869.0,503.0,3.2841,167000.0,INLAND --118.0,34.14,31.0,1298.0,431.0,1131.0,425.0,1.0548,178100.0,INLAND --118.0,34.14,39.0,1302.0,303.0,800.0,291.0,3.2723,166900.0,INLAND --118.0,34.13,35.0,1005.0,224.0,742.0,221.0,3.5481,158100.0,INLAND --117.99,34.13,37.0,1568.0,371.0,1618.0,350.0,2.9605,129400.0,INLAND --117.99,34.12,37.0,1527.0,331.0,1504.0,324.0,3.2857,130100.0,INLAND --117.99,34.12,35.0,1040.0,231.0,1040.0,242.0,2.5395,139200.0,INLAND --118.0,34.12,37.0,1340.0,325.0,928.0,333.0,3.9219,175000.0,INLAND --118.0,34.12,42.0,870.0,170.0,546.0,164.0,4.625,173800.0,INLAND --118.01,34.13,38.0,3374.0,671.0,1906.0,640.0,4.0729,212300.0,INLAND --118.01,34.12,43.0,1185.0,207.0,657.0,198.0,4.5491,214800.0,INLAND --118.01,34.12,32.0,1937.0,332.0,922.0,340.0,3.94,278400.0,INLAND --118.01,34.11,32.0,1978.0,536.0,826.0,470.0,2.5114,212200.0,INLAND --118.01,34.11,43.0,1858.0,345.0,1054.0,329.0,3.5625,211600.0,INLAND --118.01,34.11,36.0,1722.0,320.0,794.0,322.0,4.2132,212200.0,INLAND --118.02,34.1,36.0,1928.0,361.0,1008.0,368.0,4.733,233700.0,INLAND --118.02,34.1,36.0,452.0,80.0,248.0,83.0,1.9688,226000.0,INLAND --118.02,34.11,39.0,1504.0,280.0,718.0,261.0,4.625,219000.0,INLAND --118.03,34.1,38.0,2301.0,416.0,1079.0,398.0,4.4236,233600.0,INLAND --118.03,34.1,30.0,2773.0,634.0,1376.0,540.0,2.7857,201700.0,INLAND --118.03,34.1,31.0,2647.0,539.0,1473.0,520.0,3.94,223900.0,INLAND --118.03,34.1,32.0,2668.0,609.0,1512.0,541.0,2.9422,233100.0,INLAND --118.03,34.11,38.0,2076.0,361.0,988.0,332.0,5.9175,416900.0,INLAND --118.04,34.11,44.0,773.0,120.0,405.0,121.0,5.0,447100.0,INLAND --118.04,34.11,37.0,1275.0,177.0,598.0,174.0,7.1885,500001.0,INLAND --118.05,34.11,42.0,3677.0,627.0,1779.0,622.0,5.1509,426500.0,INLAND --118.04,34.13,39.0,2485.0,382.0,1072.0,342.0,6.0878,430200.0,INLAND --118.04,34.12,39.0,2522.0,380.0,1113.0,357.0,5.2249,445200.0,INLAND --118.04,34.12,44.0,2007.0,288.0,921.0,307.0,6.5989,500001.0,INLAND --118.04,34.12,30.0,2170.0,318.0,984.0,309.0,5.6916,500001.0,INLAND --118.05,34.12,20.0,5218.0,959.0,2302.0,850.0,3.55,476700.0,INLAND --118.06,34.12,25.0,3891.0,848.0,1848.0,759.0,3.6639,248100.0,INLAND --118.06,34.12,34.0,2941.0,558.0,1660.0,576.0,4.5667,271500.0,INLAND --118.06,34.12,35.0,2053.0,369.0,1044.0,375.0,4.1875,275400.0,INLAND --118.05,34.11,48.0,1410.0,304.0,677.0,274.0,3.2596,272400.0,INLAND --118.06,34.11,36.0,2178.0,485.0,914.0,412.0,2.7656,239500.0,INLAND --118.06,34.11,39.0,2603.0,547.0,1196.0,487.0,3.0854,248700.0,INLAND --118.04,34.1,39.0,2302.0,412.0,1590.0,406.0,4.8017,273800.0,INLAND --118.05,34.1,36.0,1606.0,318.0,889.0,294.0,4.7931,272600.0,INLAND --118.06,34.1,38.0,3229.0,636.0,1599.0,609.0,3.8646,257100.0,<1H OCEAN --118.06,34.1,42.0,1576.0,313.0,697.0,282.0,4.3523,283600.0,<1H OCEAN --118.06,34.1,43.0,1833.0,355.0,786.0,334.0,3.5761,256700.0,<1H OCEAN --118.06,34.1,38.0,2438.0,442.0,1308.0,461.0,3.6995,260100.0,<1H OCEAN --118.04,34.1,38.0,2317.0,451.0,1155.0,426.0,4.1488,235300.0,INLAND --118.04,34.09,34.0,2597.0,461.0,1542.0,470.0,4.6211,248900.0,INLAND --118.05,34.1,30.0,2143.0,427.0,1107.0,416.0,4.2321,252200.0,INLAND --118.05,34.1,42.0,2065.0,404.0,1313.0,402.0,4.0179,274300.0,INLAND --118.06,34.09,38.0,2036.0,388.0,1096.0,371.0,4.0625,262500.0,<1H OCEAN --118.06,34.1,38.0,1960.0,330.0,874.0,308.0,4.8594,265900.0,<1H OCEAN --118.06,34.09,36.0,1239.0,238.0,717.0,237.0,3.244,258100.0,<1H OCEAN --118.06,34.09,40.0,1975.0,389.0,1116.0,378.0,4.2898,251600.0,<1H OCEAN --118.07,34.09,40.0,1745.0,370.0,1293.0,357.0,2.5474,198100.0,<1H OCEAN --118.07,34.09,35.0,1224.0,267.0,887.0,276.0,4.0987,202400.0,<1H OCEAN --118.08,34.09,33.0,2557.0,578.0,1715.0,530.0,2.9196,208800.0,<1H OCEAN --118.08,34.09,34.0,1823.0,457.0,1485.0,401.0,3.7222,207200.0,<1H OCEAN --118.08,34.09,32.0,3214.0,718.0,2316.0,751.0,3.7066,206800.0,<1H OCEAN --118.04,34.09,34.0,2001.0,388.0,1461.0,397.0,3.8304,183000.0,INLAND --118.04,34.08,35.0,1148.0,258.0,975.0,253.0,4.037,173300.0,<1H OCEAN --118.04,34.09,32.0,1339.0,334.0,817.0,349.0,2.8333,186000.0,INLAND --118.05,34.09,23.0,602.0,135.0,409.0,123.0,3.5268,146400.0,<1H OCEAN --118.02,34.09,32.0,1747.0,399.0,1199.0,402.0,3.4286,191800.0,INLAND --118.02,34.08,29.0,2741.0,667.0,2449.0,677.0,3.6944,175200.0,INLAND --118.02,34.09,24.0,2080.0,514.0,1976.0,478.0,2.6917,170000.0,INLAND --118.03,34.09,29.0,1219.0,338.0,1152.0,323.0,2.8029,180900.0,INLAND --118.03,34.08,32.0,1780.0,484.0,1732.0,454.0,2.4464,169600.0,INLAND --118.0,34.1,34.0,2249.0,460.0,1544.0,441.0,3.4005,176300.0,INLAND --118.01,34.09,29.0,3402.0,747.0,2331.0,690.0,3.6094,179200.0,INLAND --118.01,34.1,27.0,2424.0,542.0,1713.0,557.0,3.8085,181400.0,INLAND --118.01,34.1,35.0,2120.0,412.0,1375.0,405.0,3.4609,166300.0,INLAND --118.0,34.08,29.0,2003.0,401.0,1520.0,364.0,3.994,195300.0,INLAND --118.01,34.08,30.0,2281.0,522.0,1969.0,500.0,3.6531,166300.0,INLAND --118.02,34.08,28.0,2769.0,631.0,2452.0,581.0,2.6071,175900.0,INLAND --118.01,34.08,35.0,1852.0,358.0,1414.0,347.0,4.275,173600.0,INLAND --118.01,34.09,32.0,1613.0,361.0,1283.0,404.0,3.1944,181700.0,INLAND --118.0,34.08,23.0,1627.0,318.0,1279.0,289.0,4.6467,185100.0,INLAND --118.02,34.08,31.0,2402.0,632.0,2830.0,603.0,2.3333,164200.0,INLAND --118.03,34.08,37.0,775.0,179.0,726.0,183.0,3.25,159200.0,INLAND --118.03,34.08,42.0,1597.0,373.0,1311.0,352.0,2.9688,162800.0,INLAND --118.04,34.07,52.0,177.0,59.0,269.0,75.0,2.3611,131300.0,<1H OCEAN --118.05,34.08,34.0,572.0,154.0,752.0,182.0,2.0433,138800.0,<1H OCEAN --118.05,34.08,25.0,4909.0,1422.0,4983.0,1293.0,2.7254,143500.0,<1H OCEAN --118.05,34.08,30.0,1572.0,427.0,1857.0,428.0,2.4914,159200.0,<1H OCEAN --118.06,34.08,37.0,778.0,205.0,850.0,198.0,2.5119,180500.0,<1H OCEAN --118.06,34.08,34.0,1197.0,260.0,942.0,245.0,3.4202,189100.0,<1H OCEAN --118.06,34.08,42.0,1988.0,402.0,1239.0,402.0,3.2569,201500.0,<1H OCEAN --118.07,34.08,38.0,2462.0,553.0,1843.0,538.0,3.2312,211900.0,<1H OCEAN --118.07,34.07,19.0,1554.0,393.0,1427.0,370.0,3.125,207100.0,<1H OCEAN --118.07,34.08,37.0,1210.0,252.0,733.0,243.0,2.806,214600.0,<1H OCEAN --118.05,34.07,32.0,4492.0,1075.0,4119.0,1035.0,3.2373,183100.0,<1H OCEAN --118.06,34.07,30.0,2308.0,674.0,3034.0,691.0,2.3929,184400.0,<1H OCEAN --118.03,34.07,37.0,1091.0,269.0,905.0,242.0,3.1042,152000.0,<1H OCEAN --118.03,34.06,36.0,1018.0,305.0,1307.0,292.0,2.1453,162100.0,<1H OCEAN --118.04,34.07,39.0,1382.0,315.0,1090.0,308.0,3.8125,174000.0,<1H OCEAN --118.04,34.07,39.0,2451.0,649.0,2536.0,648.0,2.3098,173100.0,<1H OCEAN --118.01,34.07,22.0,6311.0,1572.0,6666.0,1456.0,2.9334,182600.0,INLAND --118.01,34.06,26.0,557.0,153.0,455.0,196.0,2.7721,155400.0,INLAND --118.01,34.07,24.0,5684.0,1485.0,6626.0,1481.0,2.2559,166800.0,INLAND --118.02,34.07,21.0,3245.0,959.0,3528.0,887.0,2.3236,156300.0,INLAND --118.03,34.06,31.0,1513.0,389.0,1396.0,364.0,2.4706,170600.0,<1H OCEAN --118.03,34.06,24.0,2343.0,834.0,3537.0,824.0,2.1094,135200.0,<1H OCEAN --118.03,34.06,27.0,2510.0,783.0,3481.0,726.0,2.4875,157800.0,<1H OCEAN --118.04,34.06,31.0,957.0,295.0,1300.0,287.0,2.1383,153400.0,<1H OCEAN --118.04,34.06,30.0,2019.0,551.0,2481.0,484.0,3.1875,154200.0,<1H OCEAN --118.04,34.06,39.0,1258.0,245.0,988.0,228.0,3.2132,176100.0,<1H OCEAN --118.05,34.06,32.0,2286.0,654.0,2991.0,655.0,2.1781,174500.0,<1H OCEAN --118.05,34.06,45.0,531.0,164.0,722.0,166.0,2.1406,162500.0,<1H OCEAN --118.05,34.06,25.0,1022.0,291.0,1570.0,297.0,3.023,142000.0,<1H OCEAN --118.06,34.06,28.0,2127.0,625.0,3160.0,620.0,2.5763,173900.0,<1H OCEAN --118.06,34.06,28.0,1778.0,605.0,2184.0,574.0,1.9189,165900.0,<1H OCEAN --118.07,34.07,31.0,1370.0,284.0,1062.0,277.0,3.5156,199300.0,<1H OCEAN --118.08,34.07,32.0,4089.0,975.0,3775.0,955.0,3.29,205500.0,<1H OCEAN --118.07,34.06,34.0,2873.0,718.0,2758.0,699.0,2.5985,168600.0,<1H OCEAN --118.04,34.05,32.0,1252.0,273.0,1337.0,263.0,2.6579,156800.0,<1H OCEAN --118.05,34.05,36.0,1084.0,202.0,920.0,199.0,3.7279,162200.0,<1H OCEAN --118.06,34.04,28.0,1516.0,363.0,1011.0,344.0,2.6288,160300.0,<1H OCEAN --118.03,34.06,24.0,2469.0,731.0,3818.0,712.0,2.5445,151400.0,<1H OCEAN --118.04,34.05,34.0,1058.0,230.0,1043.0,229.0,3.0536,137500.0,<1H OCEAN --118.04,34.04,35.0,1734.0,363.0,1527.0,344.0,3.0,160600.0,<1H OCEAN --118.04,34.04,32.0,1619.0,323.0,1492.0,342.0,3.5,165100.0,<1H OCEAN --118.05,34.04,33.0,1348.0,,1098.0,257.0,4.2917,161200.0,<1H OCEAN --118.06,34.03,36.0,21.0,7.0,21.0,9.0,2.375,175000.0,<1H OCEAN --118.02,34.06,26.0,2929.0,970.0,3792.0,817.0,2.2577,173800.0,<1H OCEAN --118.02,34.05,34.0,1610.0,513.0,2050.0,508.0,2.5562,156300.0,<1H OCEAN --118.03,34.05,36.0,1359.0,317.0,1557.0,370.0,2.7955,157500.0,<1H OCEAN --118.03,34.05,36.0,1345.0,331.0,1511.0,309.0,3.5129,142300.0,<1H OCEAN --118.01,34.05,31.0,1135.0,355.0,1717.0,368.0,2.1602,161700.0,<1H OCEAN --118.02,34.05,28.0,991.0,255.0,1145.0,265.0,2.3611,167000.0,<1H OCEAN --118.02,34.05,33.0,2464.0,627.0,2932.0,568.0,3.0625,165800.0,<1H OCEAN --118.02,34.04,28.0,6175.0,1449.0,5041.0,1408.0,2.8821,158100.0,<1H OCEAN --118.09,34.18,34.0,3113.0,409.0,1139.0,418.0,10.2289,500001.0,INLAND --118.07,34.17,34.0,4062.0,597.0,1525.0,566.0,7.8588,454800.0,INLAND --118.07,34.17,36.0,2415.0,394.0,1215.0,413.0,5.5418,326100.0,INLAND --118.07,34.17,35.0,2142.0,373.0,986.0,374.0,5.7051,326000.0,INLAND --118.1,34.18,39.0,2321.0,336.0,880.0,339.0,7.7108,450000.0,INLAND --118.11,34.19,50.0,1430.0,186.0,620.0,201.0,9.532,483300.0,INLAND --118.12,34.19,52.0,2405.0,299.0,970.0,319.0,8.7835,444100.0,INLAND --118.11,34.2,36.0,4915.0,725.0,1897.0,700.0,6.827,359400.0,INLAND --118.13,34.2,46.0,2676.0,427.0,1022.0,395.0,6.4288,295500.0,INLAND --118.13,34.19,48.0,2539.0,425.0,930.0,364.0,4.7269,303900.0,INLAND --118.13,34.21,36.0,1449.0,235.0,621.0,210.0,6.1824,274100.0,INLAND --118.13,34.2,45.0,1213.0,206.0,529.0,231.0,5.6629,234000.0,INLAND --118.13,34.2,46.0,1271.0,236.0,573.0,210.0,4.9312,240200.0,INLAND --118.13,34.19,43.0,1621.0,365.0,1015.0,329.0,2.92,242200.0,INLAND --118.14,34.19,45.0,3595.0,619.0,1686.0,607.0,4.73,201000.0,INLAND --118.14,34.2,39.0,2569.0,426.0,1282.0,432.0,5.0953,207400.0,INLAND --118.15,34.2,37.0,1997.0,361.0,1037.0,363.0,3.7932,210300.0,INLAND --118.15,34.2,52.0,1786.0,306.0,1018.0,322.0,4.1518,182100.0,INLAND --118.15,34.2,46.0,1505.0,261.0,857.0,269.0,4.5,184200.0,INLAND --118.15,34.21,34.0,2765.0,515.0,1422.0,438.0,5.4727,238900.0,INLAND --118.15,34.19,48.0,1854.0,360.0,1126.0,382.0,3.2216,161600.0,<1H OCEAN --118.15,34.19,47.0,1717.0,314.0,868.0,295.0,3.6094,160700.0,<1H OCEAN --118.16,34.19,40.0,1840.0,358.0,1218.0,347.0,4.25,177900.0,<1H OCEAN --118.16,34.2,43.0,1810.0,343.0,988.0,307.0,3.8203,176000.0,<1H OCEAN --118.18,34.22,40.0,1983.0,298.0,853.0,271.0,5.9845,241700.0,<1H OCEAN --118.19,34.22,32.0,10626.0,1504.0,4353.0,1482.0,9.8413,500001.0,<1H OCEAN --118.21,34.22,37.0,2260.0,322.0,941.0,303.0,8.3695,500001.0,<1H OCEAN --118.18,34.2,44.0,1473.0,250.0,668.0,239.0,8.72,415900.0,<1H OCEAN --118.19,34.2,41.0,2031.0,294.0,859.0,302.0,7.419,483700.0,<1H OCEAN --118.19,34.21,41.0,1602.0,228.0,680.0,225.0,6.553,500001.0,<1H OCEAN --118.2,34.21,40.0,1477.0,228.0,609.0,224.0,7.8375,500001.0,<1H OCEAN --118.2,34.21,42.0,1493.0,237.0,665.0,224.0,6.7571,443900.0,<1H OCEAN --118.21,34.21,41.0,1676.0,263.0,757.0,255.0,4.7734,450800.0,<1H OCEAN --118.22,34.23,34.0,3296.0,483.0,1268.0,478.0,8.4802,500001.0,<1H OCEAN --118.21,34.22,39.0,3008.0,386.0,1240.0,370.0,9.2463,500001.0,<1H OCEAN --118.22,34.22,39.0,2686.0,417.0,1094.0,402.0,7.0059,500001.0,<1H OCEAN --118.23,34.22,37.0,1376.0,237.0,618.0,226.0,5.9771,431800.0,<1H OCEAN --118.21,34.2,35.0,3646.0,552.0,1409.0,534.0,6.3794,500001.0,<1H OCEAN --118.2,34.2,44.0,2890.0,438.0,1219.0,429.0,6.987,500001.0,<1H OCEAN --118.18,34.19,48.0,1371.0,,528.0,155.0,15.0001,500001.0,<1H OCEAN --118.19,34.19,34.0,2061.0,260.0,825.0,254.0,15.0001,500001.0,<1H OCEAN --118.2,34.19,38.0,2176.0,266.0,798.0,243.0,15.0001,500001.0,<1H OCEAN --118.18,34.17,43.0,4269.0,591.0,1467.0,582.0,9.0702,500001.0,<1H OCEAN --118.18,34.16,34.0,5012.0,746.0,1699.0,715.0,9.4987,500001.0,<1H OCEAN --118.15,34.18,46.0,2230.0,488.0,1985.0,456.0,2.2328,142100.0,<1H OCEAN --118.15,34.17,46.0,2553.0,558.0,1740.0,492.0,2.0278,127500.0,<1H OCEAN --118.16,34.18,44.0,1870.0,389.0,1345.0,391.0,1.8932,136100.0,<1H OCEAN --118.16,34.18,48.0,568.0,145.0,559.0,135.0,2.4135,135700.0,<1H OCEAN --118.16,34.17,52.0,1193.0,228.0,703.0,221.0,3.1741,163800.0,<1H OCEAN --118.17,34.18,44.0,1401.0,246.0,607.0,271.0,2.8472,218800.0,<1H OCEAN --118.15,34.18,42.0,1521.0,320.0,1118.0,311.0,3.3125,154900.0,<1H OCEAN --118.16,34.19,42.0,2076.0,462.0,1641.0,436.0,2.2326,149200.0,<1H OCEAN --118.16,34.19,44.0,2195.0,449.0,1377.0,417.0,3.5887,153500.0,<1H OCEAN --118.17,34.18,38.0,1280.0,231.0,828.0,237.0,4.375,166700.0,<1H OCEAN --118.17,34.19,45.0,1790.0,316.0,1035.0,312.0,4.0985,173100.0,<1H OCEAN --118.13,34.19,42.0,2203.0,412.0,1012.0,377.0,4.0714,234000.0,INLAND --118.14,34.18,47.0,3457.0,622.0,1700.0,579.0,3.5164,226500.0,<1H OCEAN --118.14,34.19,49.0,1678.0,277.0,737.0,287.0,3.7222,237000.0,INLAND --118.15,34.19,38.0,1750.0,411.0,1398.0,409.0,2.3967,163100.0,<1H OCEAN --118.1,34.18,47.0,2168.0,352.0,902.0,361.0,5.894,300900.0,INLAND --118.11,34.18,52.0,3571.0,510.0,1434.0,490.0,5.9009,376000.0,INLAND --118.12,34.18,44.0,2357.0,342.0,891.0,337.0,6.3467,352700.0,INLAND --118.13,34.18,52.0,3094.0,519.0,1309.0,488.0,6.4223,310900.0,INLAND --118.1,34.17,46.0,1774.0,315.0,753.0,330.0,4.7241,279600.0,INLAND --118.1,34.17,48.0,1111.0,229.0,421.0,202.0,3.2813,268100.0,INLAND --118.11,34.17,50.0,3374.0,598.0,1484.0,569.0,4.99,261600.0,INLAND --118.11,34.17,46.0,2837.0,592.0,1453.0,549.0,3.1115,234600.0,INLAND --118.12,34.18,47.0,2344.0,513.0,1537.0,481.0,3.4777,230600.0,INLAND --118.13,34.18,52.0,1464.0,211.0,603.0,226.0,5.8309,309100.0,INLAND --118.12,34.17,37.0,2705.0,676.0,1551.0,608.0,2.2692,225000.0,INLAND --118.12,34.17,52.0,1835.0,330.0,777.0,317.0,3.7159,315400.0,INLAND --118.13,34.17,52.0,1784.0,368.0,966.0,345.0,3.6094,261500.0,<1H OCEAN --118.14,34.18,52.0,1700.0,317.0,996.0,329.0,3.9688,175000.0,<1H OCEAN --118.14,34.17,52.0,2667.0,486.0,1681.0,504.0,4.0524,173100.0,<1H OCEAN --118.14,34.17,42.0,2757.0,713.0,2112.0,653.0,2.7148,166800.0,<1H OCEAN --118.14,34.18,50.0,1493.0,326.0,1000.0,323.0,3.3068,154400.0,<1H OCEAN --118.14,34.17,40.0,1054.0,251.0,1056.0,276.0,2.3,146700.0,<1H OCEAN --118.15,34.18,45.0,2612.0,664.0,3117.0,584.0,2.3029,148800.0,<1H OCEAN --118.15,34.16,18.0,1711.0,383.0,1474.0,415.0,1.2891,181300.0,<1H OCEAN --118.15,34.16,38.0,2471.0,529.0,1661.0,441.0,2.2765,146600.0,<1H OCEAN --118.16,34.16,44.0,1284.0,278.0,925.0,261.0,1.7321,178400.0,<1H OCEAN --118.16,34.17,46.0,1508.0,261.0,674.0,255.0,3.5909,155400.0,<1H OCEAN --118.16,34.16,43.0,1276.0,226.0,545.0,209.0,4.1518,230700.0,<1H OCEAN --118.16,34.16,52.0,1576.0,239.0,696.0,249.0,6.07,261800.0,<1H OCEAN --118.16,34.15,19.0,1721.0,290.0,571.0,278.0,6.6031,500001.0,<1H OCEAN --118.16,34.15,17.0,821.0,163.0,229.0,164.0,7.3715,263000.0,<1H OCEAN --118.14,34.16,39.0,2776.0,840.0,2546.0,773.0,2.575,153500.0,<1H OCEAN --118.14,34.15,52.0,407.0,160.0,227.0,148.0,1.5156,187500.0,<1H OCEAN --118.15,34.15,52.0,275.0,123.0,273.0,111.0,1.1667,500001.0,<1H OCEAN --118.15,34.16,52.0,1925.0,597.0,2258.0,594.0,1.6921,162500.0,<1H OCEAN --118.15,34.15,49.0,806.0,199.0,698.0,172.0,2.3654,137500.0,<1H OCEAN --118.14,34.17,34.0,2384.0,604.0,2073.0,540.0,2.3062,158000.0,<1H OCEAN --118.14,34.16,30.0,2598.0,757.0,2869.0,769.0,2.1377,142300.0,<1H OCEAN --118.15,34.16,20.0,2410.0,632.0,2135.0,578.0,1.6887,148600.0,<1H OCEAN --118.15,34.17,36.0,930.0,280.0,1024.0,300.0,1.0846,146400.0,<1H OCEAN --118.13,34.17,49.0,1962.0,435.0,1329.0,457.0,3.2898,200000.0,<1H OCEAN --118.14,34.16,36.0,2973.0,807.0,2846.0,784.0,2.6217,156300.0,<1H OCEAN --118.14,34.17,52.0,2687.0,600.0,1716.0,544.0,2.7201,205700.0,<1H OCEAN --118.13,34.16,36.0,2162.0,658.0,1337.0,590.0,2.2095,176700.0,<1H OCEAN --118.13,34.15,24.0,1125.0,341.0,579.0,321.0,2.8125,141700.0,<1H OCEAN --118.14,34.15,41.0,1256.0,407.0,855.0,383.0,1.9923,500001.0,<1H OCEAN --118.14,34.15,17.0,1896.0,674.0,971.0,652.0,0.8438,175000.0,<1H OCEAN --118.14,34.16,38.0,1843.0,565.0,1449.0,524.0,2.2174,215400.0,<1H OCEAN --118.12,34.16,30.0,1762.0,416.0,940.0,398.0,2.8631,188600.0,<1H OCEAN --118.13,34.16,33.0,2682.0,716.0,2050.0,692.0,2.4817,169500.0,<1H OCEAN --118.13,34.15,18.0,1665.0,477.0,1095.0,390.0,2.6038,155600.0,<1H OCEAN --118.12,34.15,19.0,557.0,216.0,673.0,212.0,2.1763,168800.0,<1H OCEAN --118.12,34.15,22.0,1671.0,480.0,1005.0,443.0,3.0119,171400.0,<1H OCEAN --118.13,34.15,9.0,2099.0,625.0,1252.0,554.0,3.1875,173100.0,<1H OCEAN --118.13,34.15,28.0,1119.0,334.0,739.0,323.0,2.5903,125000.0,<1H OCEAN --118.12,34.17,52.0,2948.0,542.0,1363.0,495.0,4.7098,287900.0,INLAND --118.13,34.16,52.0,1872.0,357.0,984.0,364.0,4.0,250400.0,<1H OCEAN --118.13,34.16,52.0,1596.0,314.0,1024.0,292.0,3.6719,227900.0,<1H OCEAN --118.13,34.16,52.0,1787.0,427.0,1107.0,410.0,2.5664,215000.0,<1H OCEAN --118.09,34.17,36.0,2875.0,552.0,1131.0,458.0,4.3083,269300.0,INLAND --118.1,34.16,44.0,2795.0,496.0,1235.0,469.0,4.2386,283700.0,INLAND --118.1,34.17,44.0,4505.0,894.0,2296.0,899.0,3.4811,300500.0,INLAND --118.12,34.17,52.0,2166.0,483.0,1308.0,467.0,3.0417,222600.0,INLAND --118.11,34.16,52.0,3158.0,459.0,1229.0,444.0,5.4223,325600.0,INLAND --118.11,34.16,52.0,2489.0,437.0,1101.0,438.0,4.2065,320300.0,INLAND --118.11,34.16,52.0,1353.0,274.0,852.0,306.0,3.4583,239900.0,INLAND --118.11,34.15,40.0,1950.0,509.0,1038.0,438.0,2.6172,196100.0,<1H OCEAN --118.11,34.15,26.0,2193.0,558.0,1186.0,559.0,3.6474,184100.0,<1H OCEAN --118.12,34.15,35.0,1760.0,447.0,984.0,384.0,3.4167,198200.0,<1H OCEAN --118.12,34.16,52.0,2218.0,437.0,1211.0,422.0,5.0237,241900.0,<1H OCEAN --118.1,34.16,46.0,2863.0,513.0,1412.0,498.0,5.3272,330200.0,INLAND --118.1,34.15,32.0,978.0,227.0,543.0,211.0,3.0096,199000.0,INLAND --118.1,34.15,14.0,1442.0,369.0,782.0,343.0,2.7431,177500.0,INLAND --118.08,34.16,42.0,3490.0,665.0,1713.0,620.0,4.5461,242400.0,INLAND --118.09,34.15,46.0,271.0,74.0,150.0,55.0,2.2321,237500.0,INLAND --118.09,34.15,52.0,670.0,141.0,268.0,110.0,3.5568,205000.0,INLAND --118.09,34.15,49.0,1467.0,259.0,688.0,260.0,4.3452,260100.0,INLAND --118.09,34.16,45.0,2199.0,358.0,942.0,353.0,5.0393,321100.0,INLAND --118.07,34.16,39.0,1804.0,265.0,730.0,276.0,6.4761,397500.0,INLAND --118.07,34.16,35.0,2459.0,438.0,970.0,437.0,4.2143,369400.0,INLAND --118.07,34.15,45.0,1095.0,237.0,672.0,234.0,3.4087,209200.0,INLAND --118.07,34.14,42.0,3200.0,685.0,1668.0,628.0,3.375,260400.0,INLAND --118.08,34.15,28.0,238.0,58.0,142.0,31.0,0.4999,500001.0,INLAND --118.08,34.14,45.0,2923.0,604.0,1903.0,560.0,3.1729,218700.0,INLAND --118.08,34.14,52.0,1282.0,189.0,431.0,187.0,6.1159,470800.0,INLAND --118.08,34.13,46.0,1238.0,147.0,377.0,145.0,8.4546,500001.0,INLAND --118.08,34.13,35.0,1897.0,279.0,733.0,291.0,7.4185,500001.0,INLAND --118.08,34.14,42.0,2690.0,589.0,1149.0,535.0,3.88,281100.0,INLAND --118.09,34.14,40.0,3092.0,549.0,1457.0,536.0,5.3377,373800.0,INLAND --118.09,34.15,45.0,1345.0,356.0,749.0,327.0,2.8007,210900.0,INLAND --118.1,34.14,45.0,3066.0,659.0,1287.0,625.0,3.5804,324400.0,<1H OCEAN --118.11,34.14,52.0,2401.0,332.0,810.0,308.0,6.0948,358700.0,<1H OCEAN --118.1,34.14,26.0,6262.0,1645.0,3001.0,1505.0,3.6572,213200.0,<1H OCEAN --118.11,34.14,44.0,3298.0,615.0,1417.0,643.0,4.1324,434800.0,<1H OCEAN --118.12,34.14,52.0,2337.0,352.0,981.0,328.0,5.8692,490400.0,<1H OCEAN --118.12,34.14,25.0,3420.0,977.0,1718.0,947.0,3.1033,217900.0,<1H OCEAN --118.13,34.13,39.0,2099.0,397.0,1500.0,380.0,4.8304,493200.0,<1H OCEAN --118.13,34.14,23.0,5465.0,1494.0,2511.0,1359.0,3.4531,210900.0,<1H OCEAN --118.13,34.14,29.0,3559.0,1034.0,1658.0,965.0,3.2643,163900.0,<1H OCEAN --118.14,34.14,24.0,10239.0,2823.0,4210.0,2565.0,3.6997,225000.0,<1H OCEAN --118.14,34.14,17.0,3404.0,1011.0,1694.0,949.0,2.9511,282300.0,<1H OCEAN --118.15,34.14,27.0,1499.0,426.0,755.0,414.0,3.875,258300.0,<1H OCEAN --118.15,34.14,45.0,543.0,191.0,454.0,181.0,2.3,55000.0,<1H OCEAN --118.15,34.14,52.0,403.0,117.0,361.0,105.0,1.625,187500.0,<1H OCEAN --118.16,34.14,27.0,1551.0,254.0,816.0,233.0,8.2435,500001.0,<1H OCEAN --118.16,34.14,41.0,3039.0,482.0,973.0,446.0,7.4817,500001.0,<1H OCEAN --118.17,34.14,45.0,2257.0,285.0,759.0,305.0,11.7894,500001.0,<1H OCEAN --118.18,34.13,44.0,2734.0,415.0,1057.0,424.0,7.9213,477800.0,<1H OCEAN --118.18,34.13,39.0,2902.0,460.0,1007.0,420.0,6.1953,363000.0,<1H OCEAN --118.18,34.14,38.0,3039.0,487.0,1131.0,465.0,7.7116,360900.0,<1H OCEAN --118.15,34.13,30.0,2763.0,520.0,1143.0,465.0,4.7298,500001.0,<1H OCEAN --118.15,34.13,50.0,2443.0,494.0,947.0,451.0,4.7344,314700.0,<1H OCEAN --118.16,34.13,36.0,4003.0,647.0,1337.0,631.0,7.723,500001.0,<1H OCEAN --118.13,34.13,52.0,2826.0,381.0,924.0,365.0,7.9976,500001.0,<1H OCEAN --118.13,34.12,46.0,3156.0,430.0,1109.0,423.0,10.7397,500001.0,<1H OCEAN --118.14,34.13,16.0,3569.0,821.0,1505.0,783.0,4.9167,251100.0,<1H OCEAN --118.14,34.13,49.0,4438.0,803.0,1650.0,741.0,5.1072,479700.0,<1H OCEAN --118.15,34.13,34.0,824.0,224.0,430.0,213.0,3.6389,215000.0,<1H OCEAN --118.12,34.13,52.0,2935.0,341.0,975.0,327.0,11.706,500001.0,<1H OCEAN --118.11,34.12,48.0,2476.0,313.0,900.0,303.0,10.6767,500001.0,<1H OCEAN --118.11,34.12,52.0,2954.0,371.0,1152.0,347.0,11.5609,500001.0,<1H OCEAN --118.12,34.12,52.0,2907.0,317.0,956.0,279.0,15.0001,500001.0,<1H OCEAN --118.12,34.11,52.0,2787.0,353.0,1057.0,364.0,10.2317,500001.0,<1H OCEAN --118.13,34.11,52.0,2568.0,345.0,1102.0,345.0,9.1373,500001.0,<1H OCEAN --118.14,34.11,52.0,2742.0,422.0,1153.0,414.0,8.1124,500001.0,<1H OCEAN --118.1,34.13,44.0,1917.0,265.0,754.0,257.0,12.4237,500001.0,<1H OCEAN --118.1,34.13,44.0,1745.0,237.0,693.0,248.0,9.7912,500001.0,<1H OCEAN --118.09,34.12,45.0,2966.0,415.0,1231.0,409.0,7.8347,500001.0,<1H OCEAN --118.1,34.12,49.0,3783.0,579.0,1601.0,539.0,6.3013,500001.0,<1H OCEAN --118.1,34.12,50.0,1835.0,231.0,636.0,211.0,11.6471,500001.0,<1H OCEAN --118.1,34.13,47.0,2234.0,276.0,749.0,260.0,15.0001,500001.0,<1H OCEAN --118.08,34.13,39.0,788.0,128.0,413.0,139.0,5.9546,396700.0,INLAND --118.08,34.12,41.0,1598.0,280.0,807.0,282.0,5.5067,325000.0,<1H OCEAN --118.09,34.12,38.0,2638.0,432.0,1284.0,433.0,5.4536,342700.0,<1H OCEAN --118.09,34.12,38.0,1713.0,285.0,779.0,286.0,5.6152,359900.0,<1H OCEAN --118.07,34.13,27.0,3787.0,913.0,1992.0,853.0,3.301,251200.0,INLAND --118.08,34.13,28.0,4465.0,985.0,2273.0,949.0,3.5671,228500.0,INLAND --118.07,34.12,30.0,2201.0,559.0,1194.0,531.0,4.1136,279900.0,INLAND --118.07,34.12,43.0,1554.0,287.0,802.0,277.0,4.2312,272600.0,INLAND --118.08,34.12,34.0,2921.0,641.0,1541.0,562.0,3.6827,264100.0,<1H OCEAN --118.08,34.12,27.0,1685.0,341.0,757.0,317.0,4.2434,270500.0,<1H OCEAN --118.07,34.11,41.0,2869.0,563.0,1627.0,533.0,5.0736,270700.0,<1H OCEAN --118.07,34.11,47.0,832.0,194.0,419.0,156.0,3.1576,225000.0,<1H OCEAN --118.08,34.11,42.0,2628.0,525.0,1494.0,523.0,3.9464,257200.0,<1H OCEAN --118.08,34.11,42.0,1969.0,353.0,927.0,354.0,5.5924,285300.0,<1H OCEAN --118.08,34.1,32.0,2830.0,645.0,1500.0,527.0,3.0819,214600.0,<1H OCEAN --118.09,34.11,36.0,2966.0,527.0,1231.0,482.0,4.6442,316800.0,<1H OCEAN --118.09,34.11,45.0,1883.0,275.0,764.0,289.0,6.5078,414800.0,<1H OCEAN --118.1,34.1,52.0,1788.0,313.0,792.0,294.0,3.75,280000.0,<1H OCEAN --118.1,34.11,49.0,3367.0,523.0,1317.0,495.0,6.706,351400.0,<1H OCEAN --118.11,34.11,50.0,2131.0,294.0,753.0,284.0,6.7099,352200.0,<1H OCEAN --118.11,34.1,49.0,2812.0,478.0,1329.0,490.0,5.2503,292900.0,<1H OCEAN --118.12,34.11,48.0,2124.0,319.0,785.0,319.0,5.2131,359600.0,<1H OCEAN --118.12,34.1,49.0,2057.0,430.0,1103.0,414.0,4.0556,282600.0,<1H OCEAN --118.12,34.1,34.0,2918.0,555.0,1435.0,568.0,4.2344,306300.0,<1H OCEAN --118.13,34.1,19.0,2742.0,756.0,1396.0,703.0,2.5663,197500.0,<1H OCEAN --118.13,34.09,21.0,3862.0,1186.0,2773.0,1102.0,2.7816,188200.0,<1H OCEAN --118.13,34.1,26.0,3050.0,825.0,2153.0,772.0,3.1103,214100.0,<1H OCEAN --118.14,34.09,20.0,3447.0,1007.0,2622.0,934.0,2.918,208700.0,<1H OCEAN --118.13,34.11,45.0,1780.0,289.0,755.0,328.0,4.825,351100.0,<1H OCEAN --118.13,34.1,24.0,4670.0,1185.0,2478.0,1107.0,3.1975,252400.0,<1H OCEAN --118.14,34.1,52.0,4061.0,861.0,2290.0,790.0,2.8919,258400.0,<1H OCEAN --118.14,34.11,52.0,3367.0,545.0,1427.0,535.0,5.2292,444500.0,<1H OCEAN --118.15,34.1,52.0,4325.0,823.0,1927.0,795.0,3.9485,419100.0,<1H OCEAN --118.15,34.11,52.0,2375.0,369.0,930.0,351.0,7.4111,469100.0,<1H OCEAN --118.15,34.11,52.0,1746.0,330.0,704.0,306.0,3.7895,364800.0,<1H OCEAN --118.15,34.11,52.0,1000.0,192.0,363.0,158.0,4.2981,352800.0,<1H OCEAN --118.15,34.12,36.0,6119.0,1513.0,2719.0,1402.0,3.8427,319700.0,<1H OCEAN --118.15,34.12,43.0,1810.0,427.0,742.0,429.0,3.8529,350000.0,<1H OCEAN --118.15,34.12,52.0,1518.0,344.0,725.0,296.0,3.4018,204500.0,<1H OCEAN --118.15,34.12,49.0,1789.0,288.0,848.0,311.0,6.0199,500000.0,<1H OCEAN --118.16,34.12,38.0,2231.0,489.0,940.0,484.0,5.4165,435100.0,<1H OCEAN --118.17,34.12,37.0,2246.0,481.0,995.0,459.0,4.2944,354700.0,<1H OCEAN --118.15,34.11,39.0,2618.0,582.0,1314.0,532.0,3.5875,309300.0,<1H OCEAN --118.15,34.1,39.0,3856.0,867.0,1847.0,830.0,3.4559,364900.0,<1H OCEAN --118.16,34.11,31.0,5715.0,1154.0,2639.0,1079.0,4.1661,364400.0,<1H OCEAN --118.16,34.11,48.0,1091.0,236.0,632.0,234.0,3.7235,263600.0,<1H OCEAN --118.17,34.11,39.0,1758.0,436.0,892.0,447.0,3.6406,278900.0,<1H OCEAN --118.17,34.11,26.0,4971.0,996.0,2370.0,932.0,4.9676,381400.0,<1H OCEAN --118.17,34.1,25.0,4444.0,647.0,1922.0,652.0,8.058,477300.0,<1H OCEAN --118.14,34.1,27.0,4073.0,1013.0,2411.0,933.0,3.108,231000.0,<1H OCEAN --118.15,34.09,27.0,1935.0,460.0,1456.0,382.0,2.8062,192800.0,<1H OCEAN --118.15,34.09,52.0,2203.0,430.0,1238.0,403.0,4.4306,225800.0,<1H OCEAN --118.16,34.09,52.0,1722.0,448.0,1122.0,425.0,3.1204,224000.0,<1H OCEAN --118.15,34.1,36.0,3514.0,818.0,2277.0,828.0,3.1211,229300.0,<1H OCEAN --118.15,34.08,44.0,1053.0,251.0,941.0,256.0,3.125,205600.0,<1H OCEAN --118.15,34.08,48.0,3697.0,816.0,2446.0,787.0,3.3988,199200.0,<1H OCEAN --118.14,34.09,28.0,4164.0,1127.0,2934.0,1014.0,2.7483,218800.0,<1H OCEAN --118.14,34.09,38.0,1745.0,457.0,1547.0,460.0,2.85,219000.0,<1H OCEAN --118.14,34.08,24.0,3988.0,1098.0,2909.0,1034.0,2.7036,170000.0,<1H OCEAN --118.14,34.08,30.0,1433.0,397.0,1110.0,346.0,2.3464,191700.0,<1H OCEAN --118.14,34.08,24.0,2999.0,786.0,2937.0,796.0,2.9405,217800.0,<1H OCEAN --118.14,34.07,52.0,695.0,145.0,523.0,170.0,3.665,220400.0,<1H OCEAN --118.11,34.1,44.0,2012.0,435.0,1454.0,456.0,3.3229,226600.0,<1H OCEAN --118.12,34.09,25.0,4870.0,1371.0,3518.0,1296.0,3.2307,188400.0,<1H OCEAN --118.13,34.09,42.0,700.0,212.0,662.0,210.0,3.0078,191700.0,<1H OCEAN --118.13,34.09,42.0,2562.0,781.0,1936.0,687.0,2.2214,219000.0,<1H OCEAN --118.13,34.08,40.0,1931.0,449.0,1367.0,446.0,2.575,228400.0,<1H OCEAN --118.09,34.1,27.0,6010.0,1532.0,3620.0,1445.0,2.7436,201700.0,<1H OCEAN --118.1,34.1,41.0,1379.0,315.0,1249.0,309.0,2.6553,183100.0,<1H OCEAN --118.09,34.09,36.0,1068.0,246.0,949.0,250.0,2.3462,188500.0,<1H OCEAN --118.1,34.09,44.0,2352.0,484.0,1517.0,463.0,4.2833,258000.0,<1H OCEAN --118.1,34.1,29.0,1937.0,448.0,1352.0,433.0,3.81,234600.0,<1H OCEAN --118.11,34.1,20.0,3090.0,802.0,2109.0,738.0,3.3801,192500.0,<1H OCEAN --118.1,34.1,34.0,2578.0,645.0,1628.0,617.0,2.34,210900.0,<1H OCEAN --118.07,34.1,34.0,2253.0,522.0,1262.0,511.0,3.4375,259800.0,<1H OCEAN --118.07,34.09,33.0,2178.0,445.0,1153.0,400.0,3.6083,212000.0,<1H OCEAN --118.07,34.1,28.0,676.0,177.0,543.0,185.0,3.2361,187500.0,<1H OCEAN --118.07,34.1,32.0,4275.0,,2812.0,1012.0,3.3512,214100.0,<1H OCEAN --118.08,34.1,36.0,2679.0,548.0,1605.0,533.0,3.5313,213200.0,<1H OCEAN --118.09,34.1,40.0,1904.0,393.0,1183.0,364.0,3.6696,210400.0,<1H OCEAN --118.08,34.08,38.0,1889.0,407.0,1330.0,396.0,3.9219,205200.0,<1H OCEAN --118.08,34.08,43.0,1716.0,402.0,1343.0,386.0,2.9688,211400.0,<1H OCEAN --118.09,34.09,40.0,855.0,208.0,745.0,222.0,3.0125,224000.0,<1H OCEAN --118.09,34.08,34.0,1513.0,384.0,986.0,336.0,2.6901,235600.0,<1H OCEAN --118.09,34.08,33.0,1430.0,344.0,1165.0,328.0,3.0357,206000.0,<1H OCEAN --118.09,34.08,42.0,1003.0,236.0,769.0,231.0,3.1607,218300.0,<1H OCEAN --118.1,34.09,42.0,1460.0,289.0,829.0,273.0,4.875,227300.0,<1H OCEAN --118.1,34.08,37.0,2894.0,659.0,1977.0,636.0,2.543,208100.0,<1H OCEAN --118.1,34.08,24.0,4510.0,1296.0,3985.0,1240.0,2.6884,204600.0,<1H OCEAN --118.1,34.09,46.0,2822.0,525.0,1434.0,520.0,3.8906,238300.0,<1H OCEAN --118.11,34.08,42.0,3172.0,644.0,1829.0,642.0,3.3966,243200.0,<1H OCEAN --118.11,34.08,30.0,2350.0,472.0,945.0,467.0,3.3421,201000.0,<1H OCEAN --118.11,34.08,45.0,1106.0,226.0,779.0,205.0,4.5446,244800.0,<1H OCEAN --118.11,34.07,46.0,1130.0,229.0,698.0,209.0,5.2719,244400.0,<1H OCEAN --118.12,34.09,25.0,3603.0,1003.0,2719.0,913.0,2.6981,208000.0,<1H OCEAN --118.12,34.08,52.0,1437.0,290.0,980.0,282.0,5.3032,245700.0,<1H OCEAN --118.12,34.08,49.0,1782.0,374.0,1010.0,367.0,3.1583,268200.0,<1H OCEAN --118.13,34.08,34.0,3848.0,991.0,2814.0,972.0,2.6716,227100.0,<1H OCEAN --118.12,34.08,35.0,2248.0,,1762.0,622.0,3.0,253900.0,<1H OCEAN --118.13,34.08,35.0,2517.0,662.0,1883.0,607.0,2.5787,223000.0,<1H OCEAN --118.12,34.08,36.0,2433.0,585.0,1565.0,563.0,3.2344,234900.0,<1H OCEAN --118.13,34.07,32.0,1880.0,428.0,1404.0,424.0,3.085,220500.0,<1H OCEAN --118.12,34.07,45.0,1770.0,423.0,1410.0,389.0,3.0592,212500.0,<1H OCEAN --118.12,34.07,43.0,1050.0,252.0,820.0,244.0,2.025,215600.0,<1H OCEAN --118.12,34.06,23.0,1190.0,347.0,965.0,327.0,2.2261,211800.0,<1H OCEAN --118.13,34.06,17.0,1714.0,572.0,1590.0,568.0,1.1875,183900.0,<1H OCEAN --118.13,34.07,20.0,2130.0,654.0,1870.0,578.0,2.3664,192200.0,<1H OCEAN --118.12,34.06,17.0,5137.0,1614.0,4945.0,1535.0,2.4599,181600.0,<1H OCEAN --118.11,34.07,19.0,3215.0,907.0,3072.0,870.0,2.3393,202300.0,<1H OCEAN --118.11,34.06,18.0,2609.0,721.0,2221.0,703.0,2.3224,192300.0,<1H OCEAN --118.14,34.07,42.0,1036.0,199.0,656.0,215.0,4.1902,235000.0,<1H OCEAN --118.14,34.06,39.0,2390.0,444.0,1246.0,422.0,3.7857,245700.0,<1H OCEAN --118.14,34.06,37.0,1339.0,258.0,706.0,238.0,4.7569,253800.0,<1H OCEAN --118.15,34.07,52.0,1983.0,344.0,887.0,331.0,3.2875,234400.0,<1H OCEAN --118.15,34.07,44.0,1626.0,383.0,1063.0,334.0,2.4348,220700.0,<1H OCEAN --118.16,34.07,47.0,2994.0,543.0,1651.0,561.0,3.8644,241500.0,<1H OCEAN --118.16,34.07,42.0,3836.0,777.0,2118.0,754.0,3.6364,254600.0,<1H OCEAN --118.15,34.07,40.0,1072.0,204.0,940.0,200.0,3.125,242700.0,<1H OCEAN --118.15,34.06,28.0,3855.0,922.0,2517.0,874.0,3.505,204300.0,<1H OCEAN --118.16,34.06,25.0,4284.0,741.0,2163.0,701.0,6.1509,315100.0,<1H OCEAN --118.16,34.06,27.0,1675.0,274.0,785.0,275.0,5.828,301100.0,<1H OCEAN --118.14,34.05,25.0,5478.0,1136.0,3062.0,1096.0,3.4118,341100.0,<1H OCEAN --118.15,34.05,31.0,3362.0,799.0,1939.0,754.0,3.5089,305800.0,<1H OCEAN --118.15,34.05,33.0,3287.0,649.0,1783.0,653.0,3.8472,293300.0,<1H OCEAN --118.13,34.06,30.0,1692.0,398.0,1130.0,365.0,2.8672,198500.0,<1H OCEAN --118.14,34.06,27.0,5257.0,1082.0,3496.0,1036.0,3.3906,237200.0,<1H OCEAN --118.13,34.05,35.0,3229.0,616.0,1879.0,595.0,3.9531,268400.0,<1H OCEAN --118.14,34.05,39.0,1880.0,367.0,954.0,349.0,3.875,236400.0,<1H OCEAN --118.12,34.06,35.0,1729.0,438.0,1308.0,412.0,2.5321,197200.0,<1H OCEAN --118.12,34.06,25.0,1137.0,293.0,800.0,281.0,2.4286,233300.0,<1H OCEAN --118.12,34.06,25.0,1526.0,388.0,1304.0,378.0,3.1892,214700.0,<1H OCEAN --118.11,34.06,32.0,1273.0,344.0,1148.0,368.0,2.1061,214700.0,<1H OCEAN --118.11,34.06,16.0,2416.0,565.0,1750.0,514.0,2.8229,163700.0,<1H OCEAN --118.11,34.06,14.0,2628.0,668.0,2208.0,574.0,2.9764,160300.0,<1H OCEAN --118.09,34.07,45.0,593.0,133.0,481.0,128.0,2.5938,199300.0,<1H OCEAN --118.09,34.07,38.0,1036.0,226.0,1058.0,235.0,3.2578,184200.0,<1H OCEAN --118.1,34.08,21.0,1349.0,352.0,1188.0,330.0,2.5,182100.0,<1H OCEAN --118.1,34.07,29.0,1179.0,313.0,1255.0,308.0,2.5964,176800.0,<1H OCEAN --118.11,34.07,39.0,1270.0,299.0,1073.0,278.0,3.3088,186600.0,<1H OCEAN --118.1,34.07,36.0,1240.0,349.0,1383.0,338.0,2.4931,170300.0,<1H OCEAN --118.1,34.07,36.0,3661.0,956.0,3816.0,931.0,2.5104,185000.0,<1H OCEAN --118.09,34.07,26.0,794.0,182.0,709.0,170.0,3.175,170800.0,<1H OCEAN --118.1,34.07,33.0,3437.0,1081.0,3817.0,1042.0,2.25,203700.0,<1H OCEAN --118.09,34.07,45.0,726.0,146.0,568.0,160.0,3.0347,183200.0,<1H OCEAN --118.09,34.07,31.0,1054.0,252.0,1032.0,258.0,2.3424,188500.0,<1H OCEAN --118.09,34.06,30.0,1980.0,552.0,2264.0,511.0,2.6094,179400.0,<1H OCEAN --118.09,34.06,38.0,3230.0,840.0,3485.0,827.0,2.629,171600.0,<1H OCEAN --118.08,34.04,20.0,5841.0,1146.0,3273.0,1131.0,4.7222,185100.0,<1H OCEAN --118.09,34.06,31.0,1146.0,289.0,1163.0,258.0,2.2083,185600.0,<1H OCEAN --118.1,34.06,31.0,2852.0,740.0,3100.0,725.0,2.9524,178800.0,<1H OCEAN --118.1,34.06,36.0,1463.0,369.0,1492.0,366.0,3.25,179200.0,<1H OCEAN --118.11,34.06,30.0,1547.0,436.0,1700.0,410.0,2.5488,187500.0,<1H OCEAN --118.09,34.05,22.0,1764.0,357.0,1379.0,363.0,3.5357,199000.0,<1H OCEAN --118.1,34.05,31.0,3559.0,734.0,2975.0,715.0,3.756,183300.0,<1H OCEAN --118.1,34.05,26.0,1495.0,328.0,1296.0,304.0,2.913,152300.0,<1H OCEAN --118.09,34.04,18.0,5580.0,1369.0,3842.0,1276.0,3.6512,168500.0,<1H OCEAN --118.09,34.04,24.0,1543.0,257.0,824.0,271.0,6.4385,272600.0,<1H OCEAN --118.11,34.05,23.0,3436.0,565.0,1729.0,529.0,5.9941,266700.0,<1H OCEAN --118.11,34.04,28.0,3913.0,696.0,2264.0,697.0,5.2446,258000.0,<1H OCEAN --118.12,34.05,32.0,3775.0,786.0,2416.0,792.0,3.6625,247600.0,<1H OCEAN --118.12,34.04,35.0,1038.0,209.0,598.0,190.0,5.9214,254900.0,<1H OCEAN --118.13,34.04,36.0,1938.0,364.0,1118.0,374.0,3.5833,227300.0,<1H OCEAN --118.13,34.04,40.0,1444.0,312.0,881.0,303.0,3.1083,220500.0,<1H OCEAN --118.14,34.03,38.0,1447.0,293.0,1042.0,284.0,4.1375,211500.0,<1H OCEAN --118.15,34.04,33.0,818.0,195.0,664.0,198.0,2.1944,203300.0,<1H OCEAN --118.14,34.04,43.0,1949.0,464.0,1216.0,457.0,3.3214,209300.0,<1H OCEAN --118.14,34.04,40.0,1966.0,391.0,1120.0,362.0,3.7109,198800.0,<1H OCEAN --118.14,34.04,37.0,1129.0,212.0,509.0,202.0,2.6146,243200.0,<1H OCEAN --118.11,34.03,36.0,1493.0,316.0,989.0,293.0,3.5272,213700.0,<1H OCEAN --118.13,34.04,42.0,2205.0,451.0,1392.0,423.0,4.3646,211400.0,<1H OCEAN --118.12,34.04,34.0,2103.0,427.0,1355.0,434.0,4.5795,235300.0,<1H OCEAN --118.12,34.04,35.0,1064.0,203.0,608.0,201.0,4.0938,246900.0,<1H OCEAN --117.93,33.95,31.0,3600.0,468.0,1382.0,435.0,7.4597,500001.0,<1H OCEAN --117.95,33.95,29.0,4943.0,674.0,1913.0,641.0,6.8189,379300.0,<1H OCEAN --117.95,33.97,33.0,1113.0,145.0,424.0,137.0,8.3474,500001.0,<1H OCEAN --117.97,33.96,30.0,4873.0,667.0,1995.0,638.0,7.2472,441900.0,<1H OCEAN --117.98,33.95,35.0,4055.0,652.0,1758.0,639.0,6.1898,282400.0,<1H OCEAN --117.98,33.94,36.0,4297.0,717.0,2038.0,700.0,5.2851,258800.0,<1H OCEAN --117.99,33.95,30.0,2217.0,284.0,851.0,291.0,10.4835,498600.0,<1H OCEAN --118.0,33.95,35.0,1431.0,210.0,505.0,213.0,6.8109,401000.0,<1H OCEAN --118.01,33.95,35.0,1755.0,322.0,774.0,290.0,5.0861,296700.0,<1H OCEAN --118.0,33.96,37.0,2414.0,323.0,878.0,305.0,9.1541,453800.0,<1H OCEAN --117.99,33.97,18.0,4078.0,484.0,1490.0,482.0,10.8034,500001.0,<1H OCEAN --118.05,34.02,31.0,40.0,8.0,25.0,7.0,2.125,375000.0,<1H OCEAN --118.03,34.01,10.0,6531.0,1036.0,2975.0,1018.0,6.2319,403700.0,<1H OCEAN --118.06,34.02,25.0,3548.0,639.0,2653.0,664.0,5.2557,188800.0,<1H OCEAN --118.06,34.01,34.0,1962.0,396.0,1488.0,332.0,3.9091,155100.0,<1H OCEAN --118.07,34.01,38.0,2245.0,444.0,1540.0,419.0,3.7986,171000.0,<1H OCEAN --118.07,34.01,36.0,1391.0,283.0,1025.0,275.0,3.2375,176800.0,<1H OCEAN --118.08,34.01,32.0,1973.0,401.0,1322.0,386.0,3.4861,158100.0,<1H OCEAN --118.07,34.0,42.0,1392.0,351.0,1471.0,348.0,2.63,143800.0,<1H OCEAN --118.08,34.0,35.0,1188.0,342.0,1373.0,332.0,2.9107,150900.0,<1H OCEAN --118.08,34.01,34.0,1914.0,549.0,2122.0,529.0,2.5969,150200.0,<1H OCEAN --118.08,34.02,14.0,3789.0,810.0,2551.0,793.0,2.9321,144200.0,<1H OCEAN --118.08,34.01,33.0,1091.0,233.0,890.0,226.0,2.7679,176400.0,<1H OCEAN --118.08,34.01,36.0,1248.0,322.0,1282.0,326.0,3.2031,147600.0,<1H OCEAN --118.09,34.01,36.0,1465.0,363.0,1538.0,342.0,3.5469,150600.0,<1H OCEAN --118.09,34.01,42.0,897.0,229.0,1094.0,238.0,2.0729,114100.0,<1H OCEAN --118.09,34.01,31.0,1108.0,238.0,1151.0,229.0,4.3333,149500.0,<1H OCEAN --118.09,34.0,36.0,1722.0,353.0,1174.0,335.0,3.045,160600.0,<1H OCEAN --118.09,34.0,35.0,1580.0,331.0,1290.0,338.0,4.1458,162500.0,<1H OCEAN --118.09,33.99,34.0,1369.0,270.0,1005.0,272.0,3.692,172600.0,<1H OCEAN --118.1,33.99,36.0,1529.0,290.0,1271.0,287.0,3.6875,175200.0,<1H OCEAN --118.1,33.99,35.0,1326.0,272.0,933.0,267.0,3.4306,162500.0,<1H OCEAN --118.1,33.99,31.0,965.0,217.0,599.0,206.0,2.7202,190300.0,<1H OCEAN --118.08,33.98,36.0,1492.0,282.0,1041.0,270.0,4.0677,165800.0,<1H OCEAN --118.08,33.98,39.0,1042.0,221.0,863.0,228.0,3.6033,157800.0,<1H OCEAN --118.09,33.98,37.0,1270.0,272.0,1092.0,274.0,3.5,160700.0,<1H OCEAN --118.09,33.99,35.0,2787.0,639.0,1923.0,614.0,3.5757,177900.0,<1H OCEAN --118.08,33.99,38.0,1683.0,328.0,1369.0,339.0,3.6196,170700.0,<1H OCEAN --118.08,33.99,37.0,1419.0,310.0,1125.0,296.0,2.5,162000.0,<1H OCEAN --118.08,33.99,36.0,2024.0,590.0,2028.0,573.0,2.8152,163900.0,<1H OCEAN --118.08,34.0,32.0,1165.0,358.0,997.0,361.0,0.9817,166300.0,<1H OCEAN --118.07,33.99,35.0,1625.0,302.0,1134.0,288.0,4.5595,164900.0,<1H OCEAN --118.07,33.99,41.0,1204.0,252.0,1002.0,248.0,3.0577,163300.0,<1H OCEAN --118.07,33.99,39.0,552.0,151.0,807.0,168.0,3.25,153300.0,<1H OCEAN --118.06,33.98,40.0,1723.0,370.0,1221.0,370.0,3.3562,169200.0,<1H OCEAN --118.06,33.98,40.0,1410.0,255.0,932.0,273.0,4.2206,178000.0,<1H OCEAN --118.06,33.98,42.0,1342.0,243.0,615.0,208.0,5.4381,186900.0,<1H OCEAN --118.06,33.98,50.0,1146.0,238.0,579.0,213.0,2.9583,172600.0,<1H OCEAN --118.06,33.98,38.0,1862.0,319.0,975.0,305.0,4.7266,177600.0,<1H OCEAN --118.06,34.0,34.0,5002.0,917.0,2597.0,893.0,3.9243,219800.0,<1H OCEAN --118.07,34.0,37.0,2976.0,636.0,2117.0,598.0,4.1058,167300.0,<1H OCEAN --118.05,33.99,42.0,2480.0,401.0,1085.0,438.0,5.193,263400.0,<1H OCEAN --118.04,33.99,36.0,3531.0,754.0,1613.0,697.0,3.2359,198600.0,<1H OCEAN --118.05,33.99,38.0,1619.0,,886.0,357.0,3.7328,182400.0,<1H OCEAN --118.06,33.99,38.0,862.0,178.0,484.0,176.0,4.375,186200.0,<1H OCEAN --118.06,33.99,47.0,1588.0,309.0,827.0,292.0,3.7833,166100.0,<1H OCEAN --118.06,33.99,46.0,1203.0,219.0,637.0,211.0,3.3611,174400.0,<1H OCEAN --118.06,33.99,45.0,1471.0,255.0,670.0,250.0,4.5478,188000.0,<1H OCEAN --118.04,33.98,50.0,1951.0,458.0,1362.0,454.0,3.0,163200.0,<1H OCEAN --118.05,33.98,41.0,1406.0,428.0,1174.0,390.0,2.0147,137500.0,<1H OCEAN --118.05,33.98,41.0,1694.0,413.0,1222.0,387.0,2.8311,155300.0,<1H OCEAN --118.04,34.0,30.0,5308.0,854.0,2114.0,838.0,5.1985,279200.0,<1H OCEAN --118.03,33.99,52.0,2792.0,461.0,1177.0,439.0,3.4312,243800.0,<1H OCEAN --118.03,33.98,46.0,1974.0,465.0,880.0,441.0,2.7578,236800.0,<1H OCEAN --118.04,33.98,43.0,2446.0,764.0,1699.0,692.0,2.625,163300.0,<1H OCEAN --118.04,33.98,28.0,1617.0,507.0,1158.0,486.0,1.9688,165600.0,<1H OCEAN --118.04,33.98,25.0,3040.0,831.0,1580.0,735.0,2.3182,182100.0,<1H OCEAN --118.04,33.99,47.0,2530.0,565.0,1262.0,509.0,3.6475,197100.0,<1H OCEAN --118.02,33.98,23.0,1995.0,306.0,707.0,293.0,8.6677,332700.0,<1H OCEAN --118.03,33.97,32.0,2468.0,552.0,1190.0,479.0,3.8275,238500.0,<1H OCEAN --118.02,33.97,34.0,1903.0,293.0,887.0,306.0,6.148,313800.0,<1H OCEAN --118.01,33.97,36.0,1451.0,224.0,608.0,246.0,6.0648,290800.0,<1H OCEAN --118.0,33.97,30.0,6540.0,991.0,3124.0,953.0,6.0663,372600.0,<1H OCEAN --118.01,33.96,36.0,1805.0,288.0,882.0,308.0,5.3054,273500.0,<1H OCEAN --118.02,33.96,36.0,2002.0,361.0,913.0,311.0,4.5446,244700.0,<1H OCEAN --118.02,33.96,36.0,2071.0,398.0,988.0,404.0,4.6226,219700.0,<1H OCEAN --118.03,33.97,36.0,1601.0,290.0,715.0,284.0,4.8152,232400.0,<1H OCEAN --118.03,33.97,39.0,1996.0,389.0,1029.0,387.0,4.65,224300.0,<1H OCEAN --118.03,33.97,39.0,2126.0,434.0,1103.0,433.0,3.2852,196200.0,<1H OCEAN --118.03,33.97,36.0,2149.0,527.0,1359.0,481.0,2.824,167900.0,<1H OCEAN --118.04,33.97,29.0,2376.0,700.0,1968.0,680.0,2.6082,162500.0,<1H OCEAN --118.04,33.97,25.0,2945.0,914.0,2313.0,832.0,2.5686,177500.0,<1H OCEAN --118.03,33.97,22.0,2185.0,623.0,1644.0,606.0,2.593,192000.0,<1H OCEAN --118.02,33.95,38.0,2139.0,426.0,1138.0,412.0,4.2917,168900.0,<1H OCEAN --118.02,33.95,36.0,1681.0,329.0,964.0,311.0,4.108,181200.0,<1H OCEAN --118.03,33.96,37.0,1745.0,365.0,1022.0,368.0,4.0536,171400.0,<1H OCEAN --118.03,33.96,37.0,1180.0,256.0,614.0,242.0,3.117,164600.0,<1H OCEAN --118.03,33.95,34.0,1882.0,428.0,1034.0,375.0,3.6509,173200.0,<1H OCEAN --118.03,33.95,37.0,1772.0,321.0,934.0,326.0,4.1471,177800.0,<1H OCEAN --118.04,33.95,36.0,2722.0,515.0,1390.0,486.0,3.8214,178500.0,<1H OCEAN --118.04,33.96,37.0,1948.0,395.0,1163.0,379.0,3.225,154000.0,<1H OCEAN --118.04,33.96,42.0,1430.0,338.0,1269.0,321.0,3.3214,148800.0,<1H OCEAN --118.05,33.96,37.0,2622.0,652.0,2778.0,644.0,2.9714,160300.0,<1H OCEAN --118.04,33.97,34.0,1759.0,431.0,1282.0,391.0,3.0491,158200.0,<1H OCEAN --118.05,33.98,34.0,2142.0,390.0,1305.0,406.0,4.0379,172800.0,<1H OCEAN --118.05,33.97,36.0,2854.0,688.0,2816.0,673.0,3.6,154000.0,<1H OCEAN --118.06,33.97,37.0,1645.0,308.0,1077.0,320.0,4.3203,159200.0,<1H OCEAN --118.07,33.98,32.0,3304.0,714.0,2032.0,690.0,3.2093,167800.0,<1H OCEAN --118.07,33.98,41.0,1478.0,273.0,916.0,281.0,3.9688,169800.0,<1H OCEAN --118.06,33.97,39.0,1639.0,300.0,988.0,309.0,3.9612,175800.0,<1H OCEAN --118.07,33.97,36.0,1887.0,370.0,1006.0,329.0,3.1554,170700.0,<1H OCEAN --118.08,33.97,38.0,1026.0,190.0,789.0,193.0,4.2,163200.0,<1H OCEAN --118.07,33.97,32.0,3400.0,826.0,3017.0,793.0,2.4607,155600.0,<1H OCEAN --118.07,33.96,30.0,928.0,230.0,913.0,214.0,2.6991,147100.0,<1H OCEAN --118.07,33.97,36.0,1265.0,273.0,1052.0,253.0,4.8929,156200.0,<1H OCEAN --118.08,33.97,36.0,1620.0,298.0,1258.0,309.0,3.9773,166700.0,<1H OCEAN --118.08,33.97,35.0,825.0,155.0,590.0,144.0,4.6333,161200.0,<1H OCEAN --118.08,33.97,36.0,1678.0,323.0,1380.0,352.0,3.5481,163300.0,<1H OCEAN --118.09,33.98,39.0,936.0,194.0,691.0,211.0,3.6875,169500.0,<1H OCEAN --118.09,33.97,39.0,1473.0,297.0,1108.0,294.0,4.1389,166000.0,<1H OCEAN --118.09,33.97,35.0,2664.0,541.0,2033.0,491.0,3.7326,164300.0,<1H OCEAN --118.1,33.97,35.0,2426.0,529.0,2010.0,514.0,2.9922,163500.0,<1H OCEAN --118.1,33.98,34.0,1357.0,310.0,1042.0,287.0,3.4083,156700.0,<1H OCEAN --118.09,33.98,37.0,1226.0,255.0,1068.0,271.0,3.1607,172200.0,<1H OCEAN --118.1,33.98,33.0,1927.0,482.0,1623.0,479.0,3.5268,152000.0,<1H OCEAN --118.11,33.97,33.0,2125.0,500.0,1672.0,476.0,3.6397,166600.0,<1H OCEAN --118.11,33.98,36.0,446.0,108.0,410.0,117.0,3.3942,147200.0,<1H OCEAN --118.09,33.96,36.0,3271.0,603.0,2593.0,616.0,3.3621,169700.0,<1H OCEAN --118.09,33.96,36.0,1116.0,229.0,719.0,233.0,3.425,163200.0,<1H OCEAN --118.09,33.95,36.0,1991.0,396.0,1306.0,403.0,4.5,166600.0,<1H OCEAN --118.1,33.96,38.0,1657.0,335.0,1195.0,309.0,4.1711,160100.0,<1H OCEAN --118.1,33.96,36.0,1184.0,240.0,946.0,232.0,4.0357,162500.0,<1H OCEAN --118.1,33.97,20.0,1878.0,548.0,1461.0,516.0,2.9821,142500.0,<1H OCEAN --118.1,33.96,36.0,2013.0,435.0,1476.0,475.0,3.9549,192100.0,<1H OCEAN --118.1,33.96,40.0,1743.0,328.0,981.0,291.0,3.6667,173100.0,<1H OCEAN --118.08,33.95,32.0,1962.0,387.0,1274.0,398.0,4.8304,160600.0,<1H OCEAN --118.08,33.95,37.0,1743.0,348.0,1328.0,354.0,3.0944,162800.0,<1H OCEAN --118.08,33.96,35.0,2104.0,399.0,1659.0,387.0,4.0096,165000.0,<1H OCEAN --118.08,33.96,34.0,1431.0,310.0,1162.0,288.0,4.369,165400.0,<1H OCEAN --118.09,33.96,20.0,1911.0,472.0,1407.0,465.0,2.7647,163000.0,<1H OCEAN --118.09,33.95,32.0,1083.0,206.0,737.0,218.0,3.5583,170800.0,<1H OCEAN --118.09,33.94,36.0,2762.0,472.0,1576.0,493.0,4.0846,183400.0,<1H OCEAN --118.09,33.93,36.0,1585.0,323.0,1205.0,343.0,4.5306,183400.0,<1H OCEAN --118.09,33.94,33.0,1976.0,404.0,1379.0,395.0,3.8542,175400.0,<1H OCEAN --118.08,33.94,21.0,3933.0,949.0,2219.0,820.0,2.4926,171400.0,<1H OCEAN --118.04,33.95,35.0,1945.0,357.0,1227.0,359.0,5.2162,171900.0,<1H OCEAN --118.04,33.94,31.0,3808.0,670.0,2430.0,660.0,4.625,173900.0,<1H OCEAN --118.04,33.95,36.0,1976.0,368.0,1236.0,355.0,4.615,174000.0,<1H OCEAN --118.05,33.95,33.0,1954.0,390.0,1600.0,376.0,3.6125,170800.0,<1H OCEAN --118.05,33.94,34.0,495.0,120.0,527.0,130.0,1.9453,149000.0,<1H OCEAN --118.04,33.93,36.0,1045.0,239.0,1165.0,230.0,3.1979,161800.0,<1H OCEAN --118.05,33.93,31.0,894.0,203.0,883.0,190.0,3.6771,141500.0,<1H OCEAN --118.05,33.93,35.0,2107.0,480.0,2241.0,443.0,3.1513,150000.0,<1H OCEAN --118.05,33.92,33.0,1999.0,470.0,2170.0,466.0,3.2371,154700.0,<1H OCEAN --118.03,33.93,22.0,3382.0,800.0,2688.0,784.0,3.875,164700.0,<1H OCEAN --118.02,33.92,35.0,2075.0,424.0,1312.0,396.0,3.7969,164800.0,<1H OCEAN --118.03,33.92,30.0,1414.0,332.0,1307.0,315.0,3.0,158300.0,<1H OCEAN --118.03,33.92,35.0,2108.0,405.0,1243.0,394.0,3.6731,167000.0,<1H OCEAN --118.04,33.93,35.0,1805.0,387.0,1505.0,366.0,4.1667,151900.0,<1H OCEAN --118.04,33.92,34.0,1995.0,417.0,1573.0,407.0,3.4907,153500.0,<1H OCEAN --118.04,33.93,36.0,1726.0,332.0,1293.0,310.0,4.3849,144100.0,<1H OCEAN --118.04,33.92,35.0,2469.0,522.0,2151.0,537.0,3.4219,156200.0,<1H OCEAN --118.02,33.93,35.0,2400.0,398.0,1218.0,408.0,4.1312,193800.0,<1H OCEAN --118.03,33.93,35.0,2470.0,416.0,1386.0,411.0,5.2736,179500.0,<1H OCEAN --118.03,33.94,37.0,1699.0,302.0,889.0,271.0,4.3542,179800.0,<1H OCEAN --118.03,33.94,30.0,2572.0,521.0,1564.0,501.0,3.4861,177200.0,<1H OCEAN --118.04,33.94,37.0,1328.0,273.0,1115.0,275.0,4.2051,164400.0,<1H OCEAN --118.03,33.94,34.0,1748.0,386.0,917.0,378.0,3.4792,169000.0,<1H OCEAN --118.01,33.95,36.0,1579.0,290.0,816.0,276.0,4.4318,181100.0,<1H OCEAN --118.02,33.95,36.0,1705.0,299.0,871.0,296.0,4.6184,179800.0,<1H OCEAN --118.02,33.95,36.0,1632.0,295.0,797.0,283.0,4.2292,179500.0,<1H OCEAN --118.01,33.95,37.0,1165.0,210.0,627.0,221.0,4.6923,181000.0,<1H OCEAN --118.02,33.94,33.0,2382.0,404.0,1339.0,389.0,5.3016,192200.0,<1H OCEAN --118.02,33.94,23.0,4815.0,1081.0,3232.0,1016.0,3.488,191800.0,<1H OCEAN --118.02,33.95,35.0,2085.0,400.0,1112.0,391.0,3.4886,173900.0,<1H OCEAN --117.98,33.94,32.0,2562.0,491.0,1222.0,446.0,4.0985,226200.0,<1H OCEAN --117.98,33.93,27.0,3142.0,509.0,1520.0,503.0,6.2924,232500.0,<1H OCEAN --117.99,33.93,33.0,2299.0,431.0,1049.0,447.0,3.6458,208100.0,<1H OCEAN --117.99,33.94,34.0,1519.0,301.0,758.0,304.0,4.3125,214000.0,<1H OCEAN --117.99,33.94,30.0,2395.0,565.0,1214.0,521.0,3.7045,212300.0,<1H OCEAN --118.0,33.94,35.0,2603.0,482.0,1305.0,507.0,3.9543,214400.0,<1H OCEAN --118.0,33.94,36.0,2911.0,534.0,1395.0,486.0,5.1738,203700.0,<1H OCEAN --118.01,33.94,36.0,1921.0,329.0,969.0,327.0,4.9191,188700.0,<1H OCEAN --118.01,33.94,35.0,1323.0,235.0,807.0,247.0,4.2708,174800.0,<1H OCEAN --118.01,33.93,31.0,3395.0,742.0,1886.0,737.0,4.4118,174400.0,<1H OCEAN --118.02,33.93,33.0,4711.0,988.0,2984.0,931.0,3.6028,184700.0,<1H OCEAN --117.99,33.93,36.0,1287.0,233.0,779.0,229.0,4.8523,175800.0,<1H OCEAN --118.0,33.93,35.0,1288.0,240.0,758.0,250.0,4.9205,173900.0,<1H OCEAN --118.01,33.93,34.0,2424.0,468.0,1293.0,444.0,3.275,189900.0,<1H OCEAN --118.0,33.93,35.0,802.0,153.0,445.0,150.0,5.0077,185000.0,<1H OCEAN --118.0,33.94,37.0,903.0,158.0,444.0,158.0,3.75,174400.0,<1H OCEAN --118.01,33.92,34.0,4039.0,694.0,2269.0,663.0,5.2305,205100.0,<1H OCEAN --118.01,33.92,35.0,1606.0,289.0,829.0,273.0,5.273,187600.0,<1H OCEAN --118.02,33.92,34.0,1478.0,251.0,956.0,277.0,5.5238,185300.0,<1H OCEAN --118.0,33.92,26.0,2830.0,399.0,1204.0,404.0,6.1273,289600.0,<1H OCEAN --118.0,33.91,19.0,5166.0,770.0,2374.0,753.0,5.979,285200.0,<1H OCEAN --117.99,33.93,27.0,3708.0,718.0,1921.0,721.0,4.375,210400.0,<1H OCEAN --118.0,33.93,24.0,4534.0,967.0,2547.0,895.0,3.9575,215400.0,<1H OCEAN --117.98,33.92,27.0,3700.0,,1793.0,552.0,5.3668,219800.0,<1H OCEAN --117.99,33.92,27.0,5805.0,1152.0,3106.0,1144.0,4.061,222700.0,<1H OCEAN --117.98,33.91,16.0,10621.0,1782.0,3836.0,1480.0,5.0923,257200.0,<1H OCEAN --117.99,33.9,33.0,2161.0,383.0,1235.0,383.0,5.6454,202800.0,<1H OCEAN --117.99,33.9,30.0,1677.0,372.0,1021.0,332.0,3.5859,199700.0,<1H OCEAN --118.0,33.89,35.0,1065.0,176.0,574.0,171.0,5.0384,200800.0,<1H OCEAN --118.0,33.89,34.0,1932.0,315.0,1053.0,316.0,5.1377,213300.0,<1H OCEAN --118.0,33.9,35.0,1758.0,309.0,972.0,338.0,4.3831,209800.0,<1H OCEAN --118.0,33.9,35.0,1942.0,332.0,1127.0,325.0,4.5144,206300.0,<1H OCEAN --118.01,33.9,26.0,2968.0,674.0,1655.0,628.0,4.6094,201000.0,<1H OCEAN --118.01,33.89,34.0,1653.0,292.0,1003.0,310.0,4.6,203400.0,<1H OCEAN --118.01,33.89,33.0,2046.0,327.0,1018.0,320.0,4.2292,212800.0,<1H OCEAN --118.0,33.89,35.0,1011.0,183.0,578.0,171.0,3.9861,188700.0,<1H OCEAN --118.02,33.9,36.0,2417.0,421.0,1276.0,426.0,5.5601,205200.0,<1H OCEAN --118.02,33.9,34.0,2678.0,511.0,1540.0,497.0,4.4954,202900.0,<1H OCEAN --118.01,33.89,36.0,1589.0,265.0,804.0,272.0,4.6354,202900.0,<1H OCEAN --118.02,33.89,36.0,1375.0,,670.0,221.0,5.0839,198200.0,<1H OCEAN --118.02,33.92,34.0,2169.0,418.0,1169.0,406.0,3.2222,218700.0,<1H OCEAN --118.01,33.91,32.0,2722.0,571.0,2541.0,462.0,4.2305,221400.0,<1H OCEAN --118.01,33.9,36.0,1382.0,257.0,685.0,255.0,5.125,211700.0,<1H OCEAN --118.02,33.91,35.0,2182.0,390.0,1248.0,399.0,5.4236,216700.0,<1H OCEAN --118.02,33.9,34.0,1636.0,358.0,977.0,357.0,3.5938,209900.0,<1H OCEAN --118.03,33.9,35.0,1434.0,279.0,744.0,252.0,3.7308,202400.0,<1H OCEAN --118.02,33.91,35.0,1337.0,234.0,692.0,235.0,5.1155,213700.0,<1H OCEAN --118.02,33.91,34.0,2518.0,429.0,1309.0,421.0,4.7861,210700.0,<1H OCEAN --118.03,33.91,32.0,4040.0,832.0,2526.0,798.0,3.2143,160100.0,<1H OCEAN --118.03,33.91,35.0,2323.0,406.0,1741.0,398.0,4.2437,164100.0,<1H OCEAN --118.03,33.9,36.0,1143.0,193.0,826.0,188.0,5.3184,171100.0,<1H OCEAN --118.04,33.9,36.0,15.0,5.0,15.0,6.0,0.4999,162500.0,<1H OCEAN --118.09,34.03,27.0,3797.0,597.0,2043.0,614.0,5.5,276800.0,<1H OCEAN --118.09,34.02,28.0,1984.0,313.0,1099.0,343.0,4.5526,250200.0,<1H OCEAN --118.09,34.02,33.0,4853.0,1105.0,2855.0,1006.0,3.2622,208600.0,<1H OCEAN --118.1,34.02,33.0,1143.0,172.0,508.0,174.0,4.9107,279900.0,<1H OCEAN --118.11,34.02,17.0,9559.0,1911.0,5279.0,1844.0,5.1515,318900.0,<1H OCEAN --118.12,34.02,25.0,2655.0,558.0,1466.0,525.0,3.0529,265800.0,<1H OCEAN --118.12,34.03,20.0,2595.0,428.0,1751.0,479.0,5.6112,308000.0,<1H OCEAN --118.1,34.01,29.0,2077.0,564.0,2087.0,543.0,2.66,189200.0,<1H OCEAN --118.1,34.01,23.0,1724.0,576.0,1336.0,542.0,1.3365,183300.0,<1H OCEAN --118.1,34.01,42.0,1436.0,298.0,1005.0,298.0,3.4297,195800.0,<1H OCEAN --118.1,34.02,37.0,1022.0,232.0,653.0,238.0,3.0625,189400.0,<1H OCEAN --118.11,34.02,40.0,1727.0,309.0,932.0,313.0,3.95,210200.0,<1H OCEAN --118.11,34.01,43.0,1539.0,386.0,1122.0,377.0,2.4605,196000.0,<1H OCEAN --118.12,34.02,36.0,1595.0,383.0,1105.0,359.0,2.4286,205600.0,<1H OCEAN --118.12,34.02,32.0,1789.0,528.0,1429.0,517.0,1.8906,224500.0,<1H OCEAN --118.13,34.03,31.0,4267.0,1070.0,3176.0,1071.0,3.0212,208200.0,<1H OCEAN --118.13,34.02,38.0,1243.0,310.0,788.0,286.0,2.5852,185100.0,<1H OCEAN --118.13,34.02,40.0,2988.0,690.0,2144.0,667.0,2.3359,189300.0,<1H OCEAN --118.13,34.02,41.0,734.0,190.0,565.0,191.0,2.2813,192000.0,<1H OCEAN --118.13,34.02,43.0,396.0,91.0,261.0,73.0,2.9044,172900.0,<1H OCEAN --118.14,34.02,45.0,1307.0,283.0,967.0,254.0,2.75,178300.0,<1H OCEAN --118.14,34.03,44.0,2003.0,390.0,1291.0,392.0,4.0625,201100.0,<1H OCEAN --118.13,34.03,42.0,2203.0,467.0,1470.0,488.0,2.8385,192200.0,<1H OCEAN --118.14,34.03,45.0,1569.0,359.0,1203.0,359.0,2.4612,180500.0,<1H OCEAN --118.15,34.02,43.0,2172.0,605.0,2386.0,597.0,2.8239,150600.0,<1H OCEAN --118.15,34.03,43.0,2006.0,472.0,1687.0,463.0,1.7991,158800.0,<1H OCEAN --118.16,34.03,41.0,1377.0,293.0,1142.0,272.0,3.1724,141600.0,<1H OCEAN --118.15,34.03,44.0,603.0,207.0,588.0,218.0,2.0536,186400.0,<1H OCEAN --118.15,34.03,42.0,1481.0,411.0,1206.0,394.0,2.6806,189300.0,<1H OCEAN --118.15,34.04,39.0,1099.0,263.0,787.0,269.0,3.7794,194600.0,<1H OCEAN --118.15,34.04,44.0,647.0,142.0,457.0,143.0,3.6875,162500.0,<1H OCEAN --118.16,34.04,45.0,332.0,70.0,302.0,60.0,3.1895,156300.0,<1H OCEAN --118.16,34.04,22.0,2991.0,791.0,2486.0,754.0,1.5078,181900.0,<1H OCEAN --118.16,34.04,38.0,1076.0,286.0,1535.0,323.0,2.7026,145000.0,<1H OCEAN --118.16,34.04,11.0,852.0,215.0,806.0,202.0,1.3971,134400.0,<1H OCEAN --118.17,34.03,31.0,1014.0,252.0,1064.0,247.0,2.4167,125500.0,<1H OCEAN --118.17,34.04,38.0,385.0,102.0,402.0,95.0,1.625,129700.0,<1H OCEAN --118.17,34.04,46.0,705.0,167.0,655.0,149.0,3.5938,141100.0,<1H OCEAN --118.17,34.06,36.0,871.0,201.0,2862.0,181.0,2.1845,123800.0,<1H OCEAN --118.17,34.05,35.0,1256.0,294.0,2990.0,302.0,3.1528,121800.0,<1H OCEAN --118.18,34.05,41.0,389.0,102.0,455.0,107.0,2.7031,109200.0,<1H OCEAN --118.17,34.06,44.0,1856.0,461.0,1853.0,452.0,2.5033,131900.0,<1H OCEAN --118.17,34.06,43.0,464.0,,416.0,120.0,2.475,142600.0,<1H OCEAN --118.18,34.06,33.0,278.0,71.0,266.0,56.0,0.8941,98200.0,<1H OCEAN --118.19,34.06,37.0,1715.0,456.0,2052.0,440.0,2.3125,116100.0,<1H OCEAN --118.18,34.06,45.0,934.0,228.0,893.0,192.0,2.53,140300.0,<1H OCEAN --118.18,34.05,52.0,1070.0,231.0,925.0,220.0,1.825,133000.0,<1H OCEAN --118.19,34.05,42.0,1291.0,345.0,1535.0,332.0,1.9083,119200.0,<1H OCEAN --118.19,34.05,35.0,1296.0,307.0,1423.0,276.0,2.7432,135200.0,<1H OCEAN --118.19,34.05,47.0,1273.0,264.0,1193.0,260.0,2.4375,122900.0,<1H OCEAN --118.18,34.05,38.0,3272.0,731.0,3299.0,726.0,2.8295,126500.0,<1H OCEAN --118.18,34.05,41.0,762.0,147.0,817.0,176.0,3.75,123100.0,<1H OCEAN --118.18,34.05,41.0,616.0,196.0,814.0,180.0,3.3333,115100.0,<1H OCEAN --118.18,34.04,36.0,1807.0,630.0,2118.0,669.0,1.55,129000.0,<1H OCEAN --118.18,34.04,44.0,1079.0,275.0,1249.0,249.0,3.0417,141700.0,<1H OCEAN --118.19,34.04,34.0,1011.0,274.0,1164.0,262.0,2.8542,146900.0,<1H OCEAN --118.19,34.04,39.0,1074.0,323.0,1613.0,308.0,2.3015,131700.0,<1H OCEAN --118.19,34.05,29.0,855.0,199.0,785.0,169.0,2.6964,122200.0,<1H OCEAN --118.17,34.04,44.0,691.0,155.0,613.0,142.0,1.9667,133900.0,<1H OCEAN --118.17,34.04,39.0,563.0,138.0,682.0,137.0,2.75,150000.0,<1H OCEAN --118.18,34.03,39.0,609.0,145.0,690.0,134.0,2.9167,145800.0,<1H OCEAN --118.17,34.04,43.0,908.0,232.0,1005.0,224.0,1.75,134000.0,<1H OCEAN --118.17,34.04,45.0,911.0,238.0,1005.0,229.0,2.8167,114000.0,<1H OCEAN --118.17,34.05,39.0,962.0,229.0,999.0,221.0,3.375,126000.0,<1H OCEAN --118.17,34.05,45.0,733.0,178.0,715.0,165.0,2.5962,124100.0,<1H OCEAN --118.18,34.04,42.0,1670.0,,1997.0,452.0,2.788,150500.0,<1H OCEAN --118.18,34.03,26.0,859.0,255.0,835.0,232.0,1.1929,143800.0,<1H OCEAN --118.19,34.03,27.0,1346.0,340.0,1177.0,295.0,1.7995,153400.0,<1H OCEAN --118.19,34.04,40.0,1279.0,316.0,1438.0,329.0,2.1774,157600.0,<1H OCEAN --118.19,34.04,43.0,1682.0,422.0,1706.0,409.0,2.1029,153300.0,<1H OCEAN --118.19,34.03,31.0,525.0,136.0,627.0,145.0,2.6964,125000.0,<1H OCEAN --118.18,34.03,37.0,2115.0,580.0,2842.0,572.0,2.239,121300.0,<1H OCEAN --118.19,34.03,42.0,2250.0,629.0,2588.0,609.0,1.9719,134200.0,<1H OCEAN --118.18,34.03,40.0,2631.0,698.0,2920.0,677.0,2.0764,145600.0,<1H OCEAN --118.19,34.02,45.0,1535.0,432.0,1820.0,419.0,1.7801,142800.0,<1H OCEAN --118.18,34.02,36.0,1138.0,296.0,1484.0,320.0,2.2813,150700.0,<1H OCEAN --118.18,34.02,37.0,2631.0,734.0,3228.0,701.0,2.15,132200.0,<1H OCEAN --118.19,34.02,40.0,474.0,124.0,546.0,121.0,2.3438,137500.0,<1H OCEAN --118.18,34.02,35.0,661.0,142.0,720.0,143.0,2.8977,142500.0,<1H OCEAN --118.19,34.02,34.0,1478.0,369.0,1735.0,348.0,1.8875,136700.0,<1H OCEAN --118.18,34.02,33.0,832.0,226.0,987.0,220.0,3.0972,125000.0,<1H OCEAN --118.18,34.02,43.0,887.0,219.0,965.0,217.0,2.625,133900.0,<1H OCEAN --118.18,34.01,42.0,1845.0,497.0,2191.0,492.0,2.3462,127300.0,<1H OCEAN --118.17,34.03,41.0,2099.0,530.0,2325.0,528.0,2.1979,140800.0,<1H OCEAN --118.17,34.03,43.0,1636.0,506.0,1855.0,502.0,2.2902,152400.0,<1H OCEAN --118.17,34.03,42.0,882.0,292.0,1248.0,281.0,2.761,120000.0,<1H OCEAN --118.18,34.03,44.0,1629.0,420.0,1893.0,387.0,2.2991,137500.0,<1H OCEAN --118.17,34.02,41.0,676.0,216.0,851.0,199.0,2.3077,140600.0,<1H OCEAN --118.17,34.02,34.0,760.0,219.0,968.0,202.0,1.7813,145000.0,<1H OCEAN --118.17,34.02,39.0,759.0,215.0,883.0,226.0,2.125,143800.0,<1H OCEAN --118.17,34.02,33.0,346.0,103.0,488.0,107.0,1.8681,112500.0,<1H OCEAN --118.16,34.03,45.0,894.0,231.0,925.0,222.0,2.6042,145000.0,<1H OCEAN --118.16,34.03,40.0,2201.0,636.0,2682.0,595.0,2.359,143400.0,<1H OCEAN --118.16,34.02,35.0,1734.0,493.0,2053.0,508.0,2.1442,149200.0,<1H OCEAN --118.16,34.02,41.0,1256.0,391.0,1511.0,381.0,1.7981,166000.0,<1H OCEAN --118.16,34.02,47.0,1055.0,298.0,1303.0,302.0,2.6964,138800.0,<1H OCEAN --118.17,34.02,42.0,946.0,272.0,1191.0,261.0,2.45,132000.0,<1H OCEAN --118.16,34.02,34.0,1474.0,511.0,1962.0,501.0,1.8715,139600.0,<1H OCEAN --118.15,34.02,42.0,2729.0,725.0,3004.0,722.0,2.3438,154300.0,<1H OCEAN --118.15,34.02,37.0,2344.0,631.0,2195.0,610.0,2.7022,151900.0,<1H OCEAN --118.16,34.02,42.0,814.0,216.0,773.0,208.0,2.5313,156900.0,<1H OCEAN --118.16,34.01,37.0,690.0,261.0,952.0,255.0,1.6354,158900.0,<1H OCEAN --118.16,34.01,40.0,1552.0,,1919.0,427.0,2.2596,137500.0,<1H OCEAN --118.16,34.02,44.0,1218.0,374.0,1175.0,342.0,1.9688,173900.0,<1H OCEAN --118.14,34.02,44.0,1715.0,460.0,1740.0,423.0,2.7019,153300.0,<1H OCEAN --118.14,34.02,40.0,1912.0,502.0,2077.0,500.0,2.6,180600.0,<1H OCEAN --118.13,34.02,36.0,984.0,275.0,1024.0,284.0,2.125,153500.0,<1H OCEAN --118.14,34.01,42.0,1007.0,277.0,1060.0,268.0,3.0179,153700.0,<1H OCEAN --118.14,34.02,42.0,1384.0,458.0,1825.0,455.0,1.4178,145500.0,<1H OCEAN --118.14,34.01,46.0,1746.0,447.0,1296.0,392.0,2.3929,156800.0,<1H OCEAN --118.14,34.01,42.0,1973.0,510.0,1841.0,502.0,2.5326,156500.0,<1H OCEAN --118.13,34.01,45.0,1179.0,268.0,736.0,252.0,2.7083,161800.0,<1H OCEAN --118.13,34.01,40.0,2412.0,629.0,2119.0,600.0,2.075,151100.0,<1H OCEAN --118.13,34.01,43.0,782.0,207.0,827.0,223.0,3.1538,154300.0,<1H OCEAN --118.11,34.01,41.0,815.0,252.0,775.0,231.0,2.2847,190000.0,<1H OCEAN --118.12,34.0,31.0,3281.0,768.0,2385.0,733.0,2.7308,173800.0,<1H OCEAN --118.12,34.01,40.0,1417.0,338.0,1068.0,331.0,2.4259,164600.0,<1H OCEAN --118.12,34.01,33.0,1956.0,478.0,1472.0,464.0,1.9867,166300.0,<1H OCEAN --118.1,34.0,32.0,2122.0,591.0,1929.0,539.0,2.7311,169300.0,<1H OCEAN --118.11,34.0,24.0,2403.0,590.0,2103.0,547.0,2.7292,193800.0,<1H OCEAN --118.11,34.0,38.0,2573.0,484.0,1568.0,459.0,3.0208,193700.0,<1H OCEAN --118.11,34.0,33.0,2886.0,726.0,2650.0,728.0,2.625,178700.0,<1H OCEAN --118.11,34.01,22.0,1141.0,332.0,1189.0,321.0,2.2042,162500.0,<1H OCEAN --118.12,33.99,27.0,2316.0,559.0,2012.0,544.0,2.8155,176800.0,<1H OCEAN --118.12,33.99,26.0,2296.0,534.0,1777.0,507.0,2.5395,191000.0,<1H OCEAN --118.12,33.98,44.0,932.0,179.0,717.0,180.0,3.6875,178100.0,<1H OCEAN --118.12,33.99,24.0,1705.0,479.0,2037.0,459.0,2.4219,137500.0,<1H OCEAN --118.14,34.01,36.0,702.0,210.0,834.0,216.0,2.25,162500.0,<1H OCEAN --118.15,33.98,17.0,3361.0,925.0,3264.0,914.0,2.2813,145600.0,<1H OCEAN --118.15,34.0,32.0,3218.0,739.0,2368.0,730.0,3.1406,175300.0,<1H OCEAN --118.16,34.0,37.0,1341.0,336.0,1233.0,306.0,3.6583,150500.0,<1H OCEAN --118.17,34.01,30.0,1228.0,358.0,1603.0,323.0,3.0225,130800.0,<1H OCEAN --118.16,34.01,36.0,931.0,246.0,732.0,235.0,1.7679,142800.0,<1H OCEAN --118.17,34.01,36.0,1657.0,425.0,1689.0,418.0,2.7799,149300.0,<1H OCEAN --118.18,34.01,39.0,322.0,82.0,319.0,90.0,2.6364,148800.0,<1H OCEAN --118.21,33.99,39.0,47.0,16.0,51.0,23.0,3.2188,112500.0,<1H OCEAN --118.23,34.0,35.0,167.0,60.0,267.0,55.0,1.5227,350000.0,<1H OCEAN --118.23,33.99,37.0,378.0,176.0,714.0,156.0,2.1912,112500.0,<1H OCEAN --118.22,33.99,24.0,1402.0,482.0,1976.0,466.0,2.6964,163200.0,<1H OCEAN --118.22,33.99,6.0,1499.0,437.0,1754.0,447.0,4.3164,143200.0,<1H OCEAN --118.22,33.99,4.0,1849.0,577.0,1529.0,418.0,2.7708,186300.0,<1H OCEAN --118.22,33.98,34.0,2283.0,809.0,3032.0,832.0,2.4387,175000.0,<1H OCEAN --118.22,33.98,27.0,1095.0,340.0,1300.0,318.0,2.6548,123200.0,<1H OCEAN --118.22,33.98,15.0,1011.0,274.0,899.0,219.0,2.7045,190600.0,<1H OCEAN --118.23,33.98,25.0,986.0,310.0,1439.0,251.0,2.39,183300.0,<1H OCEAN --118.23,33.99,5.0,706.0,203.0,839.0,199.0,4.5208,165000.0,<1H OCEAN --118.23,33.98,30.0,2562.0,959.0,3909.0,955.0,1.9929,150600.0,<1H OCEAN --118.24,33.99,28.0,312.0,89.0,498.0,87.0,2.4107,96400.0,<1H OCEAN --118.24,33.98,30.0,861.0,250.0,1062.0,231.0,1.75,115400.0,<1H OCEAN --118.24,33.99,33.0,885.0,294.0,1270.0,282.0,2.1615,118800.0,<1H OCEAN --118.25,33.99,41.0,2215.0,544.0,2054.0,480.0,1.5272,100300.0,<1H OCEAN --118.25,33.99,41.0,1486.0,509.0,2312.0,541.0,1.3963,92900.0,<1H OCEAN --118.25,33.98,47.0,617.0,162.0,754.0,144.0,2.2969,116700.0,<1H OCEAN --118.25,33.98,44.0,1087.0,335.0,1441.0,310.0,1.6667,112500.0,<1H OCEAN --118.25,33.98,40.0,1867.0,633.0,2223.0,609.0,1.7207,105100.0,<1H OCEAN --118.25,33.98,37.0,1045.0,361.0,1666.0,337.0,1.7929,97200.0,<1H OCEAN --118.25,33.98,39.0,1553.0,461.0,2271.0,437.0,1.7378,121900.0,<1H OCEAN --118.25,33.98,37.0,1503.0,392.0,1886.0,401.0,2.5637,125000.0,<1H OCEAN --118.24,33.98,37.0,1196.0,364.0,1622.0,327.0,2.125,108900.0,<1H OCEAN --118.24,33.98,45.0,972.0,249.0,1288.0,261.0,2.2054,125000.0,<1H OCEAN --118.24,33.98,45.0,173.0,42.0,230.0,57.0,3.0724,110700.0,<1H OCEAN --118.22,33.98,30.0,1971.0,645.0,2650.0,605.0,2.0357,169900.0,<1H OCEAN --118.22,33.98,42.0,626.0,143.0,625.0,156.0,3.125,166300.0,<1H OCEAN --118.22,33.98,32.0,2643.0,737.0,2784.0,711.0,2.5352,184400.0,<1H OCEAN --118.22,33.98,36.0,1514.0,453.0,1496.0,448.0,2.1044,148200.0,<1H OCEAN --118.22,33.98,18.0,1781.0,765.0,1913.0,702.0,1.2059,255000.0,<1H OCEAN --118.22,33.98,34.0,2225.0,753.0,2980.0,736.0,1.6685,128800.0,<1H OCEAN --118.23,33.98,35.0,1366.0,496.0,2160.0,497.0,2.2059,150000.0,<1H OCEAN --118.2,33.98,38.0,867.0,243.0,950.0,235.0,1.8929,163100.0,<1H OCEAN --118.21,33.97,35.0,1863.0,537.0,2274.0,510.0,2.1005,171300.0,<1H OCEAN --118.21,33.98,39.0,1315.0,306.0,1257.0,298.0,3.2788,169000.0,<1H OCEAN --118.21,33.98,37.0,788.0,215.0,883.0,221.0,2.6818,164600.0,<1H OCEAN --118.21,33.98,35.0,1705.0,562.0,2212.0,539.0,2.325,161500.0,<1H OCEAN --118.2,33.99,35.0,1705.0,523.0,2252.0,508.0,2.3421,154200.0,<1H OCEAN --118.2,33.99,33.0,1134.0,375.0,1615.0,354.0,2.1468,141700.0,<1H OCEAN --118.19,33.99,38.0,1212.0,272.0,1129.0,263.0,2.6673,142300.0,<1H OCEAN --118.19,33.99,40.0,1547.0,434.0,1930.0,427.0,3.3869,157300.0,<1H OCEAN --118.19,33.98,40.0,973.0,272.0,1257.0,258.0,2.8214,158000.0,<1H OCEAN --118.19,33.99,42.0,1429.0,436.0,1537.0,389.0,3.0114,157500.0,<1H OCEAN --118.19,33.99,37.0,2073.0,614.0,2544.0,598.0,2.9054,156300.0,<1H OCEAN --118.2,33.99,35.0,1608.0,465.0,2140.0,488.0,3.1979,154700.0,<1H OCEAN --118.2,33.99,30.0,1474.0,459.0,1844.0,464.0,2.551,160000.0,<1H OCEAN --118.19,33.99,35.0,1172.0,436.0,1741.0,408.0,2.4596,154700.0,<1H OCEAN --118.19,33.98,34.0,1022.0,286.0,1058.0,275.0,2.6042,156700.0,<1H OCEAN --118.19,33.99,36.0,1273.0,379.0,1398.0,353.0,2.4516,147800.0,<1H OCEAN --118.2,33.99,31.0,1186.0,387.0,2087.0,409.0,1.9132,154600.0,<1H OCEAN --118.2,33.98,43.0,1091.0,320.0,1418.0,316.0,2.1522,159400.0,<1H OCEAN --118.19,33.98,33.0,151.0,83.0,380.0,83.0,1.4224,189600.0,<1H OCEAN --118.19,33.97,30.0,1790.0,556.0,1827.0,520.0,1.7562,181300.0,<1H OCEAN --118.19,33.97,34.0,2700.0,763.0,2815.0,767.0,2.4196,178400.0,<1H OCEAN --118.19,33.98,36.0,4179.0,,4582.0,1196.0,2.0087,172100.0,<1H OCEAN --118.2,33.98,32.0,1403.0,399.0,1506.0,375.0,2.0,172700.0,<1H OCEAN --118.2,33.98,30.0,2369.0,753.0,3259.0,770.0,2.1964,158500.0,<1H OCEAN --118.2,33.97,30.0,1911.0,562.0,2055.0,534.0,2.3917,154600.0,<1H OCEAN --118.18,33.99,36.0,988.0,337.0,1508.0,351.0,2.4375,154800.0,<1H OCEAN --118.18,33.99,38.0,1010.0,315.0,1157.0,301.0,1.6341,161800.0,<1H OCEAN --118.17,33.98,27.0,1871.0,556.0,2542.0,581.0,2.8427,164400.0,<1H OCEAN --118.18,33.98,24.0,1880.0,642.0,2646.0,605.0,2.1836,162000.0,<1H OCEAN --118.18,33.98,30.0,1735.0,573.0,2237.0,545.0,2.3444,156100.0,<1H OCEAN --118.18,33.99,35.0,1230.0,407.0,1512.0,364.0,2.152,170800.0,<1H OCEAN --118.17,33.98,41.0,428.0,111.0,585.0,139.0,3.1786,132100.0,<1H OCEAN --118.17,33.97,31.0,3388.0,1059.0,3558.0,957.0,2.4049,159000.0,<1H OCEAN --118.17,33.97,33.0,2410.0,641.0,2106.0,593.0,2.2422,168200.0,<1H OCEAN --118.17,33.98,36.0,627.0,177.0,834.0,175.0,2.9844,163600.0,<1H OCEAN --118.17,33.98,41.0,756.0,,873.0,212.0,2.7321,156000.0,<1H OCEAN --118.18,33.98,36.0,903.0,266.0,1068.0,251.0,3.0398,165400.0,<1H OCEAN --118.18,33.97,30.0,2887.0,866.0,2806.0,830.0,2.2122,169400.0,<1H OCEAN --118.18,33.97,34.0,3214.0,899.0,3086.0,808.0,2.0057,189400.0,<1H OCEAN --118.18,33.98,40.0,1698.0,431.0,1280.0,405.0,2.625,206300.0,<1H OCEAN --118.18,33.98,38.0,1477.0,374.0,1514.0,408.0,2.5703,178600.0,<1H OCEAN --118.15,33.98,37.0,1184.0,290.0,1320.0,276.0,2.3,165600.0,<1H OCEAN --118.15,33.97,32.0,1174.0,373.0,1758.0,361.0,2.4263,158100.0,<1H OCEAN --118.15,33.97,33.0,1903.0,469.0,1882.0,435.0,2.4071,170500.0,<1H OCEAN --118.16,33.97,23.0,1516.0,457.0,1977.0,435.0,2.3068,157800.0,<1H OCEAN --118.16,33.97,30.0,2419.0,715.0,3208.0,719.0,2.1743,176000.0,<1H OCEAN --118.14,33.97,29.0,1846.0,530.0,2576.0,528.0,2.63,156000.0,<1H OCEAN --118.14,33.97,31.0,1161.0,267.0,1175.0,282.0,3.0114,177000.0,<1H OCEAN --118.14,33.96,38.0,590.0,139.0,620.0,132.0,2.1731,143800.0,<1H OCEAN --118.15,33.97,32.0,927.0,250.0,970.0,248.0,2.1591,181500.0,<1H OCEAN --118.14,33.97,31.0,2064.0,612.0,2461.0,573.0,2.0524,160800.0,<1H OCEAN --118.14,33.97,36.0,1407.0,385.0,1763.0,350.0,2.6364,150000.0,<1H OCEAN --118.16,33.98,33.0,1196.0,313.0,1448.0,320.0,2.9375,162500.0,<1H OCEAN --118.16,33.97,39.0,1444.0,447.0,1890.0,416.0,2.1181,176600.0,<1H OCEAN --118.16,33.97,32.0,1347.0,434.0,1756.0,438.0,1.9464,190600.0,<1H OCEAN --118.16,33.97,31.0,1363.0,428.0,1897.0,364.0,2.3929,191100.0,<1H OCEAN --118.16,33.97,13.0,221.0,63.0,286.0,64.0,1.9063,175000.0,<1H OCEAN --118.17,33.98,31.0,1236.0,329.0,1486.0,337.0,3.0938,155400.0,<1H OCEAN --118.15,33.96,33.0,1201.0,340.0,1482.0,334.0,2.4821,150000.0,<1H OCEAN --118.15,33.96,33.0,1471.0,451.0,2272.0,482.0,2.5385,160900.0,<1H OCEAN --118.17,33.96,25.0,2249.0,681.0,2621.0,628.0,2.3,164200.0,<1H OCEAN --118.16,33.96,24.0,1635.0,507.0,2480.0,481.0,2.4432,187500.0,<1H OCEAN --118.17,33.96,25.0,3297.0,1066.0,5027.0,1041.0,2.2817,164200.0,<1H OCEAN --118.17,33.96,29.0,2913.0,787.0,3803.0,740.0,2.5556,146500.0,<1H OCEAN --118.18,33.96,20.0,427.0,118.0,402.0,105.0,1.4167,137500.0,<1H OCEAN --118.19,33.96,28.0,3507.0,969.0,3740.0,970.0,2.0162,142000.0,<1H OCEAN --118.18,33.97,26.0,6895.0,1877.0,8551.0,1808.0,2.3175,154500.0,<1H OCEAN --118.19,33.97,27.0,2911.0,972.0,3559.0,945.0,1.9485,146300.0,<1H OCEAN --118.2,33.97,28.0,2474.0,702.0,2830.0,694.0,2.754,166200.0,<1H OCEAN --118.2,33.97,43.0,825.0,212.0,820.0,184.0,1.8897,174300.0,<1H OCEAN --118.2,33.96,44.0,3114.0,779.0,2959.0,776.0,3.1875,171700.0,<1H OCEAN --118.21,33.96,38.0,2090.0,519.0,1871.0,504.0,2.4688,169000.0,<1H OCEAN --118.21,33.97,49.0,1409.0,313.0,1268.0,317.0,3.9408,170600.0,<1H OCEAN --118.21,33.97,43.0,1751.0,400.0,1558.0,379.0,3.0313,166100.0,<1H OCEAN --118.21,33.97,52.0,4220.0,908.0,3731.0,892.0,3.1901,167600.0,<1H OCEAN --118.22,33.97,43.0,381.0,67.0,259.0,60.0,3.0313,166100.0,<1H OCEAN --118.22,33.97,47.0,1147.0,297.0,1097.0,307.0,2.6384,162900.0,<1H OCEAN --118.23,33.97,44.0,2748.0,715.0,2962.0,703.0,2.6951,169300.0,<1H OCEAN --118.23,33.96,44.0,3186.0,876.0,3913.0,842.0,3.0143,148200.0,<1H OCEAN --118.22,33.97,47.0,1688.0,386.0,1663.0,381.0,4.0609,171300.0,<1H OCEAN --118.22,33.97,47.0,1058.0,295.0,1097.0,274.0,2.881,183300.0,<1H OCEAN --118.23,33.97,47.0,932.0,295.0,1226.0,264.0,1.6065,111400.0,<1H OCEAN --118.24,33.97,38.0,1657.0,467.0,2033.0,443.0,2.1429,118500.0,<1H OCEAN --118.24,33.97,43.0,1357.0,349.0,1657.0,331.0,2.0819,111800.0,<1H OCEAN --118.24,33.97,41.0,1182.0,346.0,1644.0,346.0,2.1473,115100.0,<1H OCEAN --118.24,33.97,37.0,1053.0,263.0,1354.0,292.0,2.5833,112500.0,<1H OCEAN --118.25,33.97,32.0,879.0,257.0,1057.0,230.0,1.6776,114800.0,<1H OCEAN --118.25,33.97,36.0,1026.0,294.0,1316.0,268.0,1.7708,102600.0,<1H OCEAN --118.25,33.97,39.0,1346.0,380.0,1520.0,356.0,1.1635,108700.0,<1H OCEAN --118.25,33.97,43.0,1735.0,535.0,2288.0,524.0,1.9119,98800.0,<1H OCEAN --118.24,33.97,37.0,1212.0,314.0,1403.0,279.0,2.5536,117200.0,<1H OCEAN --118.24,33.96,30.0,859.0,221.0,912.0,191.0,1.9041,105100.0,<1H OCEAN --118.25,33.97,37.0,794.0,210.0,814.0,213.0,2.2917,112000.0,<1H OCEAN --118.25,33.96,43.0,1876.0,454.0,1571.0,458.0,2.0323,112500.0,<1H OCEAN --118.25,33.97,38.0,1231.0,346.0,1217.0,354.0,1.8661,106600.0,<1H OCEAN --118.24,33.96,34.0,1724.0,432.0,1876.0,416.0,2.1078,100600.0,<1H OCEAN --118.25,33.96,48.0,1052.0,234.0,793.0,216.0,1.6585,92900.0,<1H OCEAN --118.25,33.96,42.0,1326.0,295.0,918.0,258.0,2.3864,98800.0,<1H OCEAN --118.25,33.96,43.0,2015.0,419.0,1543.0,399.0,1.8672,98100.0,<1H OCEAN --118.25,33.95,48.0,1766.0,424.0,1655.0,420.0,0.9751,95500.0,<1H OCEAN --118.25,33.95,41.0,1576.0,339.0,1252.0,302.0,1.9798,98100.0,<1H OCEAN --118.23,33.96,39.0,405.0,163.0,686.0,164.0,1.695,94800.0,<1H OCEAN --118.23,33.96,36.0,1062.0,270.0,1136.0,273.0,1.6597,109100.0,<1H OCEAN --118.24,33.96,44.0,1338.0,366.0,1765.0,388.0,1.7778,109900.0,<1H OCEAN --118.24,33.96,39.0,643.0,186.0,821.0,191.0,2.5729,97300.0,<1H OCEAN --118.24,33.96,34.0,946.0,254.0,1101.0,239.0,1.7396,105900.0,<1H OCEAN --118.24,33.96,37.0,1602.0,388.0,1553.0,342.0,2.0655,93400.0,<1H OCEAN --118.23,33.95,42.0,705.0,173.0,739.0,140.0,0.9166,99000.0,<1H OCEAN --118.23,33.95,27.0,504.0,142.0,789.0,167.0,0.9518,91400.0,<1H OCEAN --118.21,33.96,39.0,2050.0,529.0,1959.0,485.0,2.1389,168900.0,<1H OCEAN --118.21,33.96,39.0,2265.0,628.0,2323.0,599.0,2.1522,155300.0,<1H OCEAN --118.22,33.96,32.0,2232.0,603.0,2361.0,608.0,2.5966,170900.0,<1H OCEAN --118.22,33.96,36.0,1542.0,458.0,1711.0,468.0,1.9028,164200.0,<1H OCEAN --118.22,33.96,35.0,1437.0,474.0,2113.0,484.0,2.6179,158800.0,<1H OCEAN --118.22,33.96,42.0,1380.0,331.0,1290.0,288.0,2.8,161800.0,<1H OCEAN --118.21,33.95,38.0,1889.0,565.0,2087.0,559.0,1.7778,154000.0,<1H OCEAN --118.22,33.95,36.0,1679.0,483.0,2249.0,487.0,2.8167,160400.0,<1H OCEAN --118.22,33.95,42.0,3896.0,981.0,4496.0,993.0,3.153,150900.0,<1H OCEAN --118.23,33.96,42.0,1977.0,570.0,2406.0,557.0,2.5913,151600.0,<1H OCEAN --118.23,33.95,43.0,1683.0,520.0,2190.0,494.0,2.2391,152800.0,<1H OCEAN --118.22,33.94,42.0,1046.0,287.0,1218.0,289.0,2.6538,143400.0,<1H OCEAN --118.22,33.94,42.0,1115.0,297.0,1412.0,325.0,3.0903,153500.0,<1H OCEAN --118.22,33.94,38.0,788.0,224.0,1155.0,208.0,3.3542,153800.0,<1H OCEAN --118.22,33.94,41.0,928.0,249.0,1108.0,236.0,3.4323,144600.0,<1H OCEAN --118.2,33.96,44.0,2144.0,477.0,1760.0,452.0,2.3221,161600.0,<1H OCEAN --118.2,33.96,43.0,1233.0,306.0,1190.0,282.0,2.8371,161300.0,<1H OCEAN --118.2,33.96,41.0,1512.0,400.0,1690.0,367.0,3.055,167000.0,<1H OCEAN --118.2,33.96,37.0,2127.0,533.0,2021.0,480.0,2.9773,164600.0,<1H OCEAN --118.21,33.96,43.0,1686.0,446.0,1590.0,474.0,2.3241,159300.0,<1H OCEAN --118.21,33.96,48.0,284.0,104.0,422.0,119.0,1.2826,145500.0,<1H OCEAN --118.21,33.95,43.0,1500.0,419.0,1726.0,440.0,1.8641,165100.0,<1H OCEAN --118.2,33.95,35.0,1924.0,520.0,2101.0,541.0,2.4267,151500.0,<1H OCEAN --118.2,33.95,41.0,679.0,184.0,788.0,185.0,2.1406,165300.0,<1H OCEAN --118.21,33.95,32.0,1116.0,328.0,1265.0,302.0,2.295,155200.0,<1H OCEAN --118.21,33.95,35.0,2134.0,650.0,2248.0,587.0,2.2988,153400.0,<1H OCEAN --118.21,33.95,35.0,2129.0,614.0,2376.0,618.0,2.0372,160800.0,<1H OCEAN --118.2,33.94,42.0,618.0,163.0,680.0,179.0,3.3472,154200.0,<1H OCEAN --118.2,33.94,45.0,1818.0,408.0,1705.0,373.0,4.0441,157500.0,<1H OCEAN --118.21,33.94,40.0,2227.0,594.0,2244.0,580.0,2.4459,143800.0,<1H OCEAN --118.21,33.94,41.0,1807.0,442.0,1628.0,443.0,2.84,156100.0,<1H OCEAN --118.19,33.95,44.0,1436.0,271.0,850.0,269.0,3.2768,179100.0,<1H OCEAN --118.19,33.94,45.0,1871.0,371.0,1315.0,382.0,3.3661,160800.0,<1H OCEAN --118.19,33.94,45.0,1403.0,315.0,1111.0,311.0,3.3846,168100.0,<1H OCEAN --118.19,33.95,41.0,1368.0,309.0,1244.0,312.0,3.0833,164800.0,<1H OCEAN --118.19,33.95,42.0,1651.0,463.0,1559.0,436.0,2.3882,148100.0,<1H OCEAN --118.2,33.94,44.0,1413.0,298.0,1200.0,307.0,3.5125,169300.0,<1H OCEAN --118.2,33.94,45.0,1570.0,328.0,1321.0,300.0,3.7361,171800.0,<1H OCEAN --118.2,33.94,43.0,1934.0,511.0,1895.0,493.0,2.5029,159700.0,<1H OCEAN --118.19,33.96,40.0,979.0,296.0,934.0,292.0,2.6354,151800.0,<1H OCEAN --118.19,33.95,42.0,2309.0,685.0,2609.0,673.0,2.7206,162100.0,<1H OCEAN --118.16,33.94,32.0,2210.0,456.0,1270.0,484.0,4.7708,178600.0,<1H OCEAN --118.16,33.93,35.0,757.0,151.0,474.0,132.0,3.7361,179800.0,<1H OCEAN --118.18,33.94,44.0,1337.0,245.0,968.0,240.0,3.4688,183600.0,<1H OCEAN --118.18,33.95,39.0,2121.0,579.0,1991.0,528.0,2.9094,152200.0,<1H OCEAN --118.18,33.95,42.0,2608.0,610.0,2062.0,616.0,3.5341,167500.0,<1H OCEAN --118.18,33.94,43.0,2724.0,612.0,2340.0,570.0,2.7,165000.0,<1H OCEAN --118.17,33.94,17.0,1145.0,209.0,499.0,202.0,4.6389,165500.0,<1H OCEAN --118.17,33.95,23.0,1991.0,584.0,1380.0,535.0,1.9107,181900.0,<1H OCEAN --118.17,33.92,36.0,2447.0,503.0,1532.0,498.0,4.3667,171800.0,<1H OCEAN --118.17,33.92,43.0,2099.0,398.0,1276.0,387.0,3.1528,166800.0,<1H OCEAN --118.16,33.92,44.0,1368.0,277.0,899.0,271.0,3.5938,161300.0,<1H OCEAN --118.16,33.91,41.0,1806.0,408.0,1146.0,374.0,2.9643,162200.0,<1H OCEAN --118.17,33.91,39.0,1157.0,273.0,877.0,305.0,3.1087,171000.0,<1H OCEAN --118.18,33.92,32.0,2035.0,519.0,2282.0,480.0,3.2734,136400.0,<1H OCEAN --118.18,33.92,29.0,749.0,185.0,708.0,196.0,2.4583,136900.0,<1H OCEAN --118.19,33.92,36.0,1356.0,314.0,1469.0,300.0,2.0785,139800.0,<1H OCEAN --118.18,33.93,31.0,1516.0,400.0,1820.0,398.0,2.1641,122900.0,<1H OCEAN --118.18,33.93,35.0,952.0,271.0,949.0,261.0,2.4297,147200.0,<1H OCEAN --118.19,33.93,40.0,1334.0,276.0,1226.0,278.0,3.4712,144300.0,<1H OCEAN --118.19,33.93,42.0,1829.0,391.0,1614.0,377.0,3.1912,146400.0,<1H OCEAN --118.2,33.93,40.0,1929.0,417.0,1780.0,419.0,3.4402,149400.0,<1H OCEAN --118.19,33.93,44.0,1613.0,345.0,1227.0,342.0,3.1667,145700.0,<1H OCEAN --118.19,33.92,43.0,2339.0,487.0,1732.0,449.0,3.0987,139400.0,<1H OCEAN --118.2,33.92,42.0,1411.0,314.0,1432.0,322.0,3.0871,138800.0,<1H OCEAN --118.2,33.93,38.0,1626.0,307.0,1280.0,295.0,3.5313,146500.0,<1H OCEAN --118.21,33.94,34.0,892.0,318.0,1443.0,341.0,2.1903,162500.0,<1H OCEAN --118.21,33.94,34.0,710.0,205.0,1134.0,233.0,2.7734,141100.0,<1H OCEAN --118.21,33.93,30.0,2831.0,862.0,3649.0,883.0,1.9668,152100.0,<1H OCEAN --118.2,33.93,36.0,2210.0,634.0,2341.0,553.0,2.1715,131100.0,<1H OCEAN --118.21,33.93,33.0,2739.0,801.0,3423.0,741.0,2.2847,132700.0,<1H OCEAN --118.2,33.93,41.0,857.0,201.0,934.0,227.0,2.6339,145700.0,<1H OCEAN --118.2,33.93,36.0,1191.0,345.0,1193.0,295.0,2.5185,138800.0,<1H OCEAN --118.21,33.93,36.0,1337.0,382.0,1769.0,393.0,2.6953,121000.0,<1H OCEAN --118.21,33.93,39.0,354.0,73.0,184.0,58.0,2.7679,108900.0,<1H OCEAN --118.22,33.93,39.0,1921.0,483.0,2286.0,470.0,3.0167,130000.0,<1H OCEAN --118.22,33.94,40.0,930.0,258.0,1203.0,244.0,2.5938,115400.0,<1H OCEAN --118.23,33.93,23.0,545.0,131.0,610.0,126.0,1.4861,95100.0,<1H OCEAN --118.23,33.93,30.0,1147.0,260.0,1219.0,210.0,2.0658,93200.0,<1H OCEAN --118.22,33.93,30.0,443.0,170.0,903.0,189.0,2.1964,125000.0,<1H OCEAN --118.21,33.93,41.0,619.0,138.0,636.0,145.0,2.5083,118100.0,<1H OCEAN --118.21,33.92,37.0,1705.0,403.0,1839.0,410.0,2.5833,132700.0,<1H OCEAN --118.21,33.92,35.0,1669.0,445.0,1870.0,412.0,3.0417,117300.0,<1H OCEAN --118.21,33.92,28.0,2949.0,1003.0,4551.0,930.0,1.9026,131900.0,<1H OCEAN --118.22,33.92,43.0,1195.0,256.0,1251.0,262.0,3.4539,125000.0,<1H OCEAN --118.23,33.93,37.0,239.0,49.0,308.0,52.0,1.4028,105400.0,<1H OCEAN --118.23,33.93,35.0,1149.0,277.0,909.0,214.0,1.7411,96700.0,<1H OCEAN --118.23,33.92,32.0,2698.0,640.0,1953.0,613.0,1.2222,107200.0,<1H OCEAN --118.24,33.93,19.0,325.0,74.0,354.0,87.0,2.75,90600.0,<1H OCEAN --118.24,33.92,42.0,328.0,100.0,605.0,87.0,2.4464,97400.0,<1H OCEAN --118.24,33.92,44.0,1079.0,210.0,601.0,182.0,2.2411,106400.0,<1H OCEAN --118.25,33.93,38.0,180.0,43.0,246.0,56.0,2.85,90000.0,<1H OCEAN --118.25,33.93,27.0,581.0,135.0,647.0,131.0,3.2917,83100.0,<1H OCEAN --118.25,33.93,42.0,763.0,191.0,754.0,174.0,2.0486,101800.0,<1H OCEAN --118.25,33.92,46.0,723.0,154.0,411.0,165.0,2.0893,96500.0,<1H OCEAN --118.25,33.92,44.0,1737.0,363.0,1184.0,343.0,2.5363,95900.0,<1H OCEAN --118.25,33.92,44.0,1137.0,235.0,747.0,225.0,2.0,92600.0,<1H OCEAN --118.26,33.92,42.0,3320.0,682.0,2105.0,632.0,1.9809,104600.0,<1H OCEAN --118.26,33.91,44.0,892.0,139.0,440.0,159.0,2.8859,120800.0,<1H OCEAN --118.27,33.92,34.0,1178.0,260.0,1166.0,244.0,1.9185,93300.0,<1H OCEAN --118.27,33.92,35.0,1818.0,374.0,1444.0,372.0,2.745,106800.0,<1H OCEAN --118.28,33.92,39.0,1472.0,302.0,1036.0,318.0,3.0,110000.0,<1H OCEAN --118.28,33.92,37.0,742.0,151.0,729.0,144.0,3.055,105400.0,<1H OCEAN --118.27,33.91,42.0,1786.0,358.0,1318.0,373.0,2.625,101100.0,<1H OCEAN --118.27,33.91,37.0,3018.0,547.0,1720.0,512.0,2.7269,124100.0,<1H OCEAN --118.27,33.91,32.0,2238.0,471.0,1292.0,467.0,1.1705,110600.0,<1H OCEAN --118.27,33.89,32.0,1969.0,397.0,1349.0,370.0,4.4659,138100.0,<1H OCEAN --118.27,33.87,21.0,6108.0,1130.0,3244.0,1113.0,4.2768,181400.0,<1H OCEAN --118.25,33.9,42.0,1386.0,320.0,1163.0,319.0,2.4271,89500.0,<1H OCEAN --118.26,33.9,38.0,1566.0,318.0,981.0,318.0,4.0234,111900.0,<1H OCEAN --118.26,33.9,22.0,894.0,232.0,754.0,222.0,2.0096,110700.0,<1H OCEAN --118.25,33.92,36.0,949.0,164.0,502.0,163.0,4.1042,124400.0,<1H OCEAN --118.25,33.91,36.0,1950.0,365.0,1125.0,374.0,3.1111,119300.0,<1H OCEAN --118.25,33.9,36.0,1135.0,231.0,614.0,227.0,2.5521,113100.0,<1H OCEAN --118.25,33.91,35.0,1479.0,272.0,963.0,292.0,3.4917,109500.0,<1H OCEAN --118.26,33.91,39.0,935.0,210.0,711.0,193.0,2.4375,101900.0,<1H OCEAN --118.26,33.91,33.0,954.0,241.0,655.0,218.0,2.5882,92800.0,<1H OCEAN --118.26,33.91,39.0,967.0,256.0,903.0,256.0,1.9038,93100.0,<1H OCEAN --118.24,33.91,40.0,972.0,240.0,761.0,225.0,1.4688,88200.0,<1H OCEAN --118.24,33.91,38.0,745.0,152.0,721.0,160.0,1.875,102900.0,<1H OCEAN --118.24,33.91,36.0,1446.0,316.0,1286.0,314.0,2.7083,103600.0,<1H OCEAN --118.24,33.91,37.0,1607.0,377.0,1526.0,375.0,1.7158,94300.0,<1H OCEAN --118.24,33.92,40.0,1772.0,369.0,1122.0,324.0,3.2768,96100.0,<1H OCEAN --118.23,33.92,32.0,1735.0,430.0,1699.0,386.0,1.1793,103800.0,<1H OCEAN --118.23,33.91,34.0,661.0,146.0,742.0,143.0,2.1734,88200.0,<1H OCEAN --118.23,33.91,33.0,677.0,182.0,984.0,174.0,2.5893,88900.0,<1H OCEAN --118.23,33.91,34.0,789.0,200.0,1041.0,191.0,3.119,90300.0,<1H OCEAN --118.23,33.91,27.0,1694.0,393.0,1890.0,373.0,3.0341,89100.0,<1H OCEAN --118.22,33.92,32.0,1263.0,333.0,1789.0,346.0,1.9957,89300.0,<1H OCEAN --118.22,33.91,31.0,571.0,153.0,841.0,158.0,2.6154,89200.0,<1H OCEAN --118.23,33.91,34.0,1060.0,276.0,1215.0,250.0,2.0804,84700.0,<1H OCEAN --118.23,33.92,24.0,1555.0,406.0,1665.0,361.0,1.6437,98800.0,<1H OCEAN --118.22,33.92,23.0,926.0,409.0,1856.0,408.0,2.1366,100000.0,<1H OCEAN --118.21,33.91,24.0,1545.0,391.0,1807.0,388.0,2.6429,105300.0,<1H OCEAN --118.21,33.91,26.0,2422.0,632.0,2601.0,583.0,1.7824,110200.0,<1H OCEAN --118.22,33.9,38.0,796.0,159.0,679.0,167.0,3.6607,110400.0,<1H OCEAN --118.22,33.91,28.0,1847.0,500.0,2263.0,473.0,1.5161,103200.0,<1H OCEAN --118.2,33.9,26.0,1000.0,275.0,1178.0,263.0,2.12,105000.0,<1H OCEAN --118.21,33.9,35.0,2420.0,579.0,2010.0,540.0,2.0817,104600.0,<1H OCEAN --118.21,33.9,41.0,941.0,233.0,973.0,253.0,1.9583,102300.0,<1H OCEAN --118.22,33.9,35.0,1649.0,424.0,1786.0,388.0,1.4091,105600.0,<1H OCEAN --118.22,33.9,30.0,1007.0,260.0,1112.0,238.0,1.7262,115600.0,<1H OCEAN --118.2,33.92,36.0,414.0,104.0,477.0,130.0,3.6719,130400.0,<1H OCEAN --118.2,33.92,45.0,1283.0,,1025.0,248.0,3.2798,141200.0,<1H OCEAN --118.2,33.92,39.0,1050.0,217.0,895.0,207.0,3.1538,155600.0,<1H OCEAN --118.21,33.91,37.0,1073.0,265.0,1197.0,250.0,2.7109,133000.0,<1H OCEAN --118.21,33.92,41.0,1722.0,363.0,1432.0,326.0,3.2976,151200.0,<1H OCEAN --118.21,33.92,36.0,602.0,150.0,645.0,145.0,3.1964,115400.0,<1H OCEAN --118.18,33.91,41.0,1260.0,299.0,1535.0,322.0,3.0134,128100.0,<1H OCEAN --118.18,33.91,36.0,1138.0,238.0,878.0,224.0,2.0625,134400.0,<1H OCEAN --118.19,33.91,43.0,1531.0,357.0,1509.0,376.0,2.6354,128100.0,<1H OCEAN --118.19,33.91,33.0,915.0,225.0,826.0,212.0,2.7708,117400.0,<1H OCEAN --118.19,33.92,35.0,915.0,241.0,1153.0,252.0,3.305,115800.0,<1H OCEAN --118.19,33.91,35.0,2695.0,748.0,2935.0,706.0,2.0134,132400.0,<1H OCEAN --118.2,33.91,43.0,1381.0,278.0,1494.0,298.0,3.5878,118400.0,<1H OCEAN --118.2,33.9,33.0,1435.0,322.0,1298.0,299.0,2.7813,105100.0,<1H OCEAN --118.2,33.91,36.0,2283.0,499.0,1836.0,462.0,2.8793,118100.0,<1H OCEAN --118.19,33.9,36.0,1073.0,271.0,1385.0,288.0,2.3214,104800.0,<1H OCEAN --118.19,33.9,32.0,2762.0,652.0,2677.0,632.0,2.5719,105600.0,<1H OCEAN --118.19,33.9,36.0,2326.0,543.0,2073.0,494.0,1.9952,112900.0,<1H OCEAN --118.19,33.89,31.0,886.0,224.0,1154.0,247.0,2.1071,99500.0,<1H OCEAN --118.19,33.89,32.0,1696.0,438.0,1639.0,376.0,2.0357,107300.0,<1H OCEAN --118.2,33.89,37.0,2394.0,568.0,2499.0,551.0,2.5321,105100.0,<1H OCEAN --118.2,33.9,34.0,1552.0,444.0,2093.0,413.0,2.2125,103200.0,<1H OCEAN --118.19,33.89,38.0,4018.0,986.0,3702.0,927.0,2.9293,113600.0,<1H OCEAN --118.2,33.89,40.0,2538.0,564.0,2170.0,541.0,2.7212,107900.0,<1H OCEAN --118.21,33.89,42.0,1254.0,225.0,929.0,235.0,4.3646,116200.0,<1H OCEAN --118.21,33.89,39.0,1565.0,364.0,1389.0,360.0,2.7443,113900.0,<1H OCEAN --118.21,33.89,42.0,1739.0,370.0,1104.0,297.0,2.2125,120700.0,<1H OCEAN --118.21,33.9,43.0,1810.0,357.0,1335.0,358.0,3.1189,118800.0,<1H OCEAN --118.21,33.89,45.0,1211.0,234.0,1128.0,261.0,3.4792,110700.0,<1H OCEAN --118.21,33.88,38.0,929.0,166.0,686.0,183.0,3.4485,119400.0,<1H OCEAN --118.21,33.88,29.0,1976.0,444.0,1254.0,371.0,2.1782,126800.0,<1H OCEAN --118.22,33.89,26.0,266.0,75.0,252.0,59.0,2.1211,138100.0,<1H OCEAN --118.22,33.89,41.0,990.0,228.0,776.0,207.0,2.125,120200.0,<1H OCEAN --118.22,33.89,37.0,797.0,190.0,485.0,166.0,2.7434,95200.0,<1H OCEAN --118.22,33.89,36.0,873.0,240.0,1086.0,217.0,2.25,126600.0,<1H OCEAN --118.23,33.89,16.0,5003.0,1180.0,4145.0,1159.0,2.1389,133400.0,<1H OCEAN --118.24,33.89,34.0,1479.0,332.0,1166.0,322.0,2.6165,100900.0,<1H OCEAN --118.22,33.91,27.0,500.0,159.0,732.0,162.0,2.7426,103100.0,<1H OCEAN --118.22,33.9,22.0,312.0,107.0,583.0,119.0,1.9423,98400.0,<1H OCEAN --118.22,33.9,40.0,1802.0,496.0,2096.0,468.0,2.3542,97900.0,<1H OCEAN --118.23,33.9,31.0,2143.0,522.0,2276.0,519.0,1.8095,100800.0,<1H OCEAN --118.23,33.9,34.0,2462.0,553.0,2334.0,502.0,1.641,96800.0,<1H OCEAN --118.23,33.9,28.0,1108.0,284.0,1498.0,289.0,2.4706,88800.0,<1H OCEAN --118.23,33.9,45.0,1285.0,238.0,840.0,211.0,3.4107,112500.0,<1H OCEAN --118.24,33.9,38.0,2055.0,442.0,1518.0,425.0,2.3382,103000.0,<1H OCEAN --118.24,33.9,35.0,1079.0,247.0,1055.0,243.0,2.375,93600.0,<1H OCEAN --118.24,33.9,39.0,642.0,129.0,475.0,123.0,1.2083,92600.0,<1H OCEAN --118.25,33.9,37.0,2119.0,442.0,1372.0,406.0,1.9605,106200.0,<1H OCEAN --118.24,33.9,40.0,1308.0,272.0,901.0,257.0,2.8269,98000.0,<1H OCEAN --118.25,33.9,38.0,1201.0,223.0,733.0,206.0,3.3804,105800.0,<1H OCEAN --118.25,33.89,35.0,1582.0,391.0,1957.0,404.0,2.4537,91500.0,<1H OCEAN --118.24,33.89,32.0,1132.0,266.0,1211.0,279.0,2.1838,98300.0,<1H OCEAN --118.25,33.89,41.0,1476.0,286.0,1086.0,278.0,2.4632,111700.0,<1H OCEAN --118.25,33.89,36.0,406.0,71.0,268.0,77.0,3.9,115800.0,<1H OCEAN --118.25,33.89,34.0,1367.0,288.0,1183.0,286.0,2.6812,104100.0,<1H OCEAN --118.26,33.89,36.0,2230.0,417.0,1395.0,381.0,2.8493,109600.0,<1H OCEAN --118.26,33.89,36.0,923.0,165.0,603.0,191.0,3.5687,120700.0,<1H OCEAN --118.24,33.88,37.0,1843.0,366.0,1207.0,351.0,2.4821,111000.0,<1H OCEAN --118.25,33.88,37.0,1027.0,217.0,1042.0,254.0,2.2121,98600.0,<1H OCEAN --118.25,33.89,37.0,1042.0,213.0,699.0,196.0,2.9643,103200.0,<1H OCEAN --118.25,33.89,36.0,1527.0,309.0,1154.0,279.0,3.3095,105500.0,<1H OCEAN --118.26,33.88,39.0,1756.0,320.0,1055.0,322.0,3.2375,105200.0,<1H OCEAN --118.26,33.88,40.0,519.0,102.0,330.0,95.0,3.0972,108500.0,<1H OCEAN --118.26,33.88,36.0,1212.0,222.0,775.0,224.0,5.5591,136500.0,<1H OCEAN --118.22,33.88,37.0,1149.0,280.0,1016.0,250.0,2.125,101900.0,<1H OCEAN --118.22,33.88,35.0,998.0,313.0,1335.0,311.0,1.6574,102500.0,<1H OCEAN --118.23,33.89,35.0,1255.0,344.0,1782.0,343.0,2.1949,95100.0,<1H OCEAN --118.23,33.88,35.0,842.0,201.0,763.0,189.0,2.6719,109800.0,<1H OCEAN --118.23,33.88,41.0,1941.0,367.0,1204.0,323.0,3.0417,113700.0,<1H OCEAN --118.23,33.89,36.0,2598.0,514.0,1872.0,514.0,3.1667,117700.0,<1H OCEAN --118.22,33.86,16.0,8732.0,1489.0,3944.0,1493.0,5.1948,203500.0,<1H OCEAN --118.24,33.85,25.0,9594.0,1489.0,5237.0,1496.0,5.9684,193300.0,<1H OCEAN --118.23,33.84,25.0,1106.0,207.0,888.0,216.0,5.3307,207000.0,<1H OCEAN --118.24,33.83,22.0,7368.0,1367.0,4721.0,1342.0,4.8438,213100.0,<1H OCEAN --118.25,33.84,19.0,1731.0,420.0,1032.0,364.0,3.8125,208100.0,<1H OCEAN --118.25,33.87,18.0,6812.0,1263.0,3704.0,1216.0,4.25,169200.0,<1H OCEAN --118.25,33.86,26.0,3022.0,476.0,1852.0,452.0,6.0531,186400.0,<1H OCEAN --118.26,33.85,25.0,2324.0,326.0,1087.0,328.0,5.293,207000.0,<1H OCEAN --118.26,33.85,24.0,9071.0,1335.0,4558.0,1327.0,5.542,197500.0,<1H OCEAN --118.27,33.86,33.0,1685.0,333.0,1484.0,318.0,4.3527,167000.0,<1H OCEAN --118.27,33.86,29.0,2587.0,489.0,2115.0,475.0,3.7466,168600.0,<1H OCEAN --118.27,33.86,26.0,1097.0,167.0,701.0,188.0,6.5799,196600.0,<1H OCEAN --118.28,33.85,27.0,489.0,98.0,403.0,97.0,5.144,180800.0,<1H OCEAN --118.28,33.84,27.0,2326.0,533.0,1697.0,546.0,3.8633,187900.0,<1H OCEAN --118.28,33.83,18.0,5923.0,1409.0,3887.0,1322.0,3.4712,194400.0,<1H OCEAN --118.29,33.84,11.0,2274.0,617.0,1897.0,622.0,3.5094,162900.0,<1H OCEAN --118.29,33.84,33.0,896.0,208.0,843.0,200.0,3.5,183000.0,<1H OCEAN --118.29,33.84,34.0,2617.0,558.0,1396.0,515.0,5.061,218000.0,<1H OCEAN --118.29,33.84,23.0,3626.0,799.0,2321.0,731.0,4.7393,237900.0,<1H OCEAN --118.29,33.83,24.0,4092.0,893.0,2819.0,893.0,4.1378,216500.0,<1H OCEAN --118.28,33.82,26.0,4586.0,1042.0,3680.0,1027.0,4.174,205100.0,<1H OCEAN --118.29,33.82,21.0,4383.0,901.0,2689.0,913.0,3.4375,218800.0,<1H OCEAN --118.29,33.81,19.0,7023.0,1538.0,3993.0,1412.0,5.0532,218200.0,<1H OCEAN --118.29,33.8,21.0,9944.0,1623.0,4185.0,1582.0,4.526,329400.0,<1H OCEAN --118.28,33.82,30.0,3615.0,760.0,2813.0,752.0,5.3849,217700.0,<1H OCEAN --118.28,33.81,29.0,2755.0,508.0,2046.0,488.0,5.2034,212400.0,<1H OCEAN --118.27,33.82,36.0,1593.0,334.0,1427.0,320.0,4.4015,166900.0,<1H OCEAN --118.27,33.82,33.0,1596.0,337.0,1650.0,329.0,4.3687,173500.0,<1H OCEAN --118.27,33.82,37.0,943.0,218.0,803.0,216.0,5.2287,191100.0,<1H OCEAN --118.27,33.81,10.0,1881.0,571.0,1769.0,553.0,3.9286,114000.0,<1H OCEAN --118.27,33.81,42.0,865.0,208.0,811.0,218.0,3.8621,165300.0,<1H OCEAN --118.27,33.81,38.0,1607.0,337.0,1130.0,334.0,4.4821,190700.0,<1H OCEAN --118.27,33.82,39.0,1357.0,249.0,763.0,229.0,4.25,200300.0,<1H OCEAN --118.27,33.8,28.0,4698.0,902.0,3287.0,881.0,4.8508,215900.0,<1H OCEAN --118.27,33.84,24.0,6303.0,1277.0,3728.0,1252.0,3.9227,208600.0,<1H OCEAN --118.28,33.83,28.0,880.0,168.0,717.0,142.0,4.5469,175700.0,<1H OCEAN --118.27,33.83,28.0,2152.0,415.0,1623.0,429.0,4.35,200500.0,<1H OCEAN --118.27,33.83,34.0,1124.0,245.0,717.0,242.0,3.1667,186900.0,<1H OCEAN --118.26,33.83,24.0,3059.0,,2064.0,629.0,3.5518,184600.0,<1H OCEAN --118.27,33.82,28.0,1642.0,434.0,1575.0,420.0,4.1292,201900.0,<1H OCEAN --118.26,33.82,28.0,5091.0,1074.0,4753.0,1033.0,3.6477,117400.0,<1H OCEAN --118.26,33.83,28.0,4112.0,861.0,3211.0,841.0,4.4539,192200.0,<1H OCEAN --118.21,33.84,28.0,822.0,205.0,627.0,192.0,3.4583,166300.0,<1H OCEAN --118.22,33.84,35.0,1131.0,273.0,1007.0,269.0,4.0219,168300.0,<1H OCEAN --118.22,33.84,38.0,1928.0,429.0,1358.0,399.0,4.0687,160300.0,<1H OCEAN --118.22,33.83,42.0,1370.0,299.0,1018.0,328.0,4.4474,160200.0,<1H OCEAN --118.22,33.83,44.0,1792.0,404.0,1115.0,358.0,3.9091,174400.0,<1H OCEAN --118.22,33.83,43.0,1426.0,272.0,871.0,276.0,3.7083,175200.0,<1H OCEAN --118.21,33.83,38.0,793.0,193.0,601.0,187.0,2.8837,176100.0,NEAR OCEAN --118.07,33.93,5.0,906.0,187.0,1453.0,158.0,4.125,171900.0,<1H OCEAN --118.08,33.93,39.0,859.0,164.0,673.0,172.0,3.7143,158200.0,<1H OCEAN --118.08,33.93,39.0,1478.0,324.0,1127.0,320.0,3.525,158000.0,<1H OCEAN --118.08,33.92,38.0,1335.0,,1011.0,269.0,3.6908,157500.0,<1H OCEAN --118.08,33.92,39.0,1631.0,322.0,1034.0,328.0,4.5382,165700.0,<1H OCEAN --118.07,33.92,36.0,1560.0,320.0,1348.0,314.0,3.622,174000.0,<1H OCEAN --118.08,33.92,34.0,2118.0,437.0,1414.0,442.0,3.7238,166800.0,<1H OCEAN --118.08,33.93,33.0,2263.0,511.0,1626.0,457.0,3.5556,172800.0,<1H OCEAN --118.08,33.93,34.0,1558.0,375.0,1179.0,337.0,3.2188,165100.0,<1H OCEAN --118.09,33.92,36.0,2381.0,419.0,1669.0,444.0,4.6976,171100.0,<1H OCEAN --118.09,33.92,36.0,847.0,185.0,713.0,194.0,4.8542,167400.0,<1H OCEAN --118.09,33.92,36.0,1226.0,211.0,711.0,219.0,4.5699,170800.0,<1H OCEAN --118.09,33.92,33.0,879.0,181.0,547.0,169.0,5.3146,168600.0,<1H OCEAN --118.09,33.92,31.0,1983.0,419.0,1157.0,390.0,3.5455,168300.0,<1H OCEAN --118.09,33.93,37.0,1950.0,356.0,1183.0,338.0,4.1449,175300.0,<1H OCEAN --118.1,33.92,35.0,2017.0,383.0,1388.0,386.0,4.0774,171600.0,<1H OCEAN --118.1,33.93,36.0,1124.0,217.0,707.0,234.0,4.375,174500.0,<1H OCEAN --118.1,33.93,33.0,1474.0,325.0,1205.0,335.0,3.1397,166800.0,<1H OCEAN --118.11,33.92,32.0,1016.0,190.0,729.0,177.0,4.3,151300.0,<1H OCEAN --118.11,33.92,34.0,1414.0,263.0,983.0,264.0,4.1767,156600.0,<1H OCEAN --118.1,33.94,33.0,639.0,129.0,460.0,118.0,3.1607,189000.0,<1H OCEAN --118.1,33.93,35.0,1622.0,302.0,845.0,284.0,4.5769,186100.0,<1H OCEAN --118.1,33.95,34.0,3635.0,781.0,2171.0,720.0,3.7308,196900.0,<1H OCEAN --118.1,33.95,27.0,1666.0,365.0,995.0,354.0,4.5694,204300.0,<1H OCEAN --118.11,33.95,36.0,2049.0,334.0,1105.0,363.0,4.8036,261300.0,<1H OCEAN --118.1,33.94,34.0,1947.0,284.0,841.0,277.0,6.1814,453600.0,<1H OCEAN --118.11,33.95,34.0,2319.0,334.0,941.0,356.0,6.4319,452300.0,<1H OCEAN --118.11,33.95,34.0,1723.0,279.0,617.0,252.0,6.7501,400000.0,<1H OCEAN --118.12,33.97,33.0,3099.0,839.0,2025.0,750.0,3.183,191100.0,<1H OCEAN --118.12,33.96,38.0,1301.0,264.0,877.0,275.0,4.625,191300.0,<1H OCEAN --118.11,33.96,29.0,2784.0,582.0,1278.0,550.0,4.3882,261600.0,<1H OCEAN --118.12,33.95,35.0,1604.0,280.0,802.0,280.0,5.752,291000.0,<1H OCEAN --118.12,33.96,34.0,2863.0,451.0,1243.0,466.0,6.0723,297200.0,<1H OCEAN --118.12,33.96,38.0,2105.0,348.0,956.0,350.0,4.4125,246000.0,<1H OCEAN --118.12,33.96,36.0,1426.0,235.0,698.0,240.0,4.8523,267300.0,<1H OCEAN --118.12,33.97,35.0,708.0,145.0,471.0,153.0,3.2,197400.0,<1H OCEAN --118.13,33.97,36.0,1759.0,295.0,837.0,267.0,4.6992,251900.0,<1H OCEAN --118.13,33.96,36.0,1933.0,341.0,958.0,335.0,4.4732,266000.0,<1H OCEAN --118.13,33.96,38.0,1040.0,202.0,557.0,228.0,4.0,254700.0,<1H OCEAN --118.14,33.96,34.0,2744.0,541.0,1333.0,503.0,4.0536,277200.0,<1H OCEAN --118.13,33.96,35.0,1500.0,250.0,706.0,250.0,4.5625,253500.0,<1H OCEAN --118.13,33.97,34.0,1736.0,297.0,823.0,292.0,5.4042,241600.0,<1H OCEAN --118.13,33.95,37.0,1709.0,333.0,778.0,344.0,3.9036,326600.0,<1H OCEAN --118.14,33.95,44.0,1812.0,338.0,822.0,314.0,6.7744,294100.0,<1H OCEAN --118.14,33.95,42.0,1413.0,228.0,630.0,219.0,6.8564,300000.0,<1H OCEAN --118.14,33.95,37.0,1462.0,243.0,600.0,236.0,5.2015,302000.0,<1H OCEAN --118.14,33.95,36.0,1942.0,355.0,891.0,348.0,3.6635,282100.0,<1H OCEAN --118.15,33.96,33.0,2418.0,485.0,1397.0,477.0,3.1083,285500.0,<1H OCEAN --118.15,33.95,31.0,1053.0,230.0,686.0,211.0,4.0,263200.0,<1H OCEAN --118.12,33.95,36.0,2752.0,459.0,1211.0,452.0,5.0526,269800.0,<1H OCEAN --118.12,33.94,35.0,1813.0,313.0,825.0,316.0,5.2485,323800.0,<1H OCEAN --118.12,33.94,33.0,2394.0,576.0,1166.0,548.0,2.7317,264700.0,<1H OCEAN --118.13,33.94,34.0,522.0,138.0,373.0,139.0,3.5481,265000.0,<1H OCEAN --118.13,33.95,24.0,6662.0,1852.0,3792.0,1735.0,3.1104,230000.0,<1H OCEAN --118.11,33.93,35.0,2670.0,493.0,1196.0,488.0,3.8427,283500.0,<1H OCEAN --118.11,33.94,37.0,1434.0,262.0,786.0,256.0,4.4375,244900.0,<1H OCEAN --118.11,33.94,32.0,2098.0,378.0,1036.0,385.0,5.0258,255400.0,<1H OCEAN --118.12,33.94,31.0,2210.0,519.0,1047.0,472.0,3.3292,271300.0,<1H OCEAN --118.12,33.94,33.0,2206.0,393.0,973.0,364.0,4.675,283000.0,<1H OCEAN --118.11,33.94,36.0,1949.0,319.0,909.0,325.0,5.1587,296600.0,<1H OCEAN --118.11,33.93,17.0,1205.0,347.0,736.0,342.0,3.2011,162500.0,<1H OCEAN --118.12,33.92,27.0,6336.0,1628.0,4673.0,1505.0,2.5893,183700.0,<1H OCEAN --118.12,33.93,27.0,580.0,143.0,466.0,133.0,3.0909,187500.0,<1H OCEAN --118.13,33.92,28.0,3069.0,864.0,1932.0,835.0,2.4925,177200.0,<1H OCEAN --118.13,33.93,38.0,2040.0,458.0,1775.0,445.0,3.5227,202400.0,<1H OCEAN --118.13,33.92,36.0,984.0,183.0,615.0,206.0,4.1786,201500.0,<1H OCEAN --118.14,33.92,31.0,3731.0,853.0,2313.0,801.0,3.2237,218200.0,<1H OCEAN --118.14,33.93,31.0,3205.0,727.0,1647.0,664.0,3.3681,223900.0,<1H OCEAN --118.14,33.93,32.0,2065.0,438.0,1075.0,442.0,4.4279,226400.0,<1H OCEAN --118.15,33.93,30.0,3096.0,628.0,1676.0,587.0,4.6583,207300.0,<1H OCEAN --118.13,33.93,34.0,2122.0,517.0,1578.0,488.0,3.1496,191900.0,<1H OCEAN --118.13,33.93,19.0,1793.0,447.0,1222.0,452.0,2.6862,195800.0,<1H OCEAN --118.14,33.94,31.0,2841.0,774.0,1612.0,708.0,2.9205,196600.0,<1H OCEAN --118.14,33.94,35.0,2987.0,601.0,1561.0,606.0,4.0039,226500.0,<1H OCEAN --118.15,33.94,36.0,1948.0,341.0,992.0,363.0,4.2594,242400.0,<1H OCEAN --118.15,33.94,37.0,1594.0,321.0,1003.0,323.0,3.3289,199700.0,<1H OCEAN --118.15,33.95,35.0,2753.0,702.0,1592.0,614.0,2.7875,209000.0,<1H OCEAN --118.16,33.94,25.0,3341.0,789.0,1685.0,751.0,3.6936,238300.0,<1H OCEAN --118.15,33.93,25.0,1948.0,433.0,1128.0,429.0,3.7614,255900.0,<1H OCEAN --118.16,33.94,25.0,5675.0,1224.0,3317.0,1119.0,3.9352,232900.0,<1H OCEAN --118.15,33.93,42.0,1839.0,346.0,1034.0,339.0,4.9808,212300.0,<1H OCEAN --118.15,33.93,34.0,1745.0,404.0,1084.0,410.0,3.3411,220500.0,<1H OCEAN --118.16,33.92,36.0,2062.0,351.0,1134.0,358.0,4.4881,218900.0,<1H OCEAN --118.14,33.92,35.0,2378.0,559.0,1799.0,546.0,3.9327,190500.0,<1H OCEAN --118.15,33.92,36.0,1890.0,400.0,1232.0,386.0,4.375,184200.0,<1H OCEAN --118.15,33.92,40.0,1335.0,281.0,804.0,282.0,4.3194,198400.0,<1H OCEAN --118.15,33.92,28.0,1038.0,252.0,912.0,245.0,2.5875,161200.0,<1H OCEAN --118.15,33.92,30.0,915.0,234.0,646.0,211.0,2.5208,182800.0,<1H OCEAN --118.11,33.91,19.0,3056.0,759.0,1561.0,740.0,3.1369,196900.0,<1H OCEAN --118.12,33.91,34.0,682.0,132.0,491.0,144.0,4.6389,173800.0,<1H OCEAN --118.12,33.91,35.0,620.0,122.0,381.0,124.0,3.7917,183900.0,<1H OCEAN --118.12,33.91,35.0,1518.0,279.0,857.0,251.0,3.6917,197500.0,<1H OCEAN --118.13,33.91,35.0,561.0,104.0,261.0,105.0,4.9375,183800.0,<1H OCEAN --118.13,33.91,34.0,916.0,162.0,552.0,164.0,4.9107,222000.0,<1H OCEAN --118.14,33.91,36.0,1096.0,204.0,569.0,201.0,4.475,182300.0,<1H OCEAN --118.14,33.91,34.0,2011.0,472.0,1087.0,423.0,3.0465,187800.0,<1H OCEAN --118.1,33.91,40.0,513.0,100.0,399.0,99.0,4.875,167600.0,<1H OCEAN --118.1,33.91,36.0,1080.0,201.0,719.0,201.0,4.2679,175800.0,<1H OCEAN --118.1,33.91,36.0,726.0,,490.0,130.0,3.6389,167600.0,<1H OCEAN --118.1,33.9,35.0,1151.0,248.0,809.0,246.0,4.7813,160000.0,<1H OCEAN --118.11,33.91,29.0,889.0,166.0,597.0,163.0,4.9609,186700.0,<1H OCEAN --118.11,33.91,22.0,1981.0,472.0,1231.0,457.0,4.0878,153700.0,<1H OCEAN --118.1,33.91,29.0,505.0,113.0,411.0,113.0,2.6397,164400.0,<1H OCEAN --118.09,33.91,14.0,2369.0,604.0,1546.0,464.0,3.7969,159400.0,<1H OCEAN --118.09,33.91,34.0,1582.0,343.0,1356.0,324.0,3.4211,141100.0,<1H OCEAN --118.09,33.91,36.0,1442.0,271.0,990.0,268.0,4.0517,162200.0,<1H OCEAN --118.09,33.92,35.0,1994.0,419.0,1491.0,428.0,3.7383,166200.0,<1H OCEAN --118.1,33.91,35.0,1592.0,335.0,1238.0,320.0,4.9732,165000.0,<1H OCEAN --118.08,33.91,36.0,1551.0,297.0,1100.0,322.0,5.1187,168100.0,<1H OCEAN --118.08,33.91,30.0,1366.0,460.0,920.0,410.0,0.9946,159900.0,<1H OCEAN --118.09,33.9,36.0,1215.0,279.0,862.0,285.0,3.7604,158700.0,<1H OCEAN --118.09,33.9,37.0,1112.0,222.0,771.0,224.0,4.2132,164600.0,<1H OCEAN --118.1,33.91,35.0,1653.0,325.0,1072.0,301.0,3.2708,159700.0,<1H OCEAN --118.08,33.91,30.0,3259.0,942.0,2744.0,895.0,2.8608,165600.0,<1H OCEAN --118.07,33.91,29.0,2387.0,570.0,1978.0,548.0,3.1957,159200.0,<1H OCEAN --118.08,33.91,18.0,1573.0,396.0,1200.0,365.0,2.895,146900.0,<1H OCEAN --118.06,33.91,24.0,4880.0,1044.0,4516.0,1050.0,4.1387,157700.0,<1H OCEAN --118.06,33.91,21.0,2863.0,701.0,1489.0,621.0,3.2031,180700.0,<1H OCEAN --118.06,33.91,36.0,1360.0,271.0,909.0,275.0,4.6731,173300.0,<1H OCEAN --118.07,33.91,35.0,2228.0,463.0,1558.0,427.0,4.023,157700.0,<1H OCEAN --118.05,33.9,41.0,550.0,129.0,642.0,125.0,1.875,119900.0,<1H OCEAN --118.05,33.9,36.0,1047.0,227.0,975.0,239.0,3.1897,155000.0,<1H OCEAN --118.06,33.9,37.0,1161.0,254.0,882.0,236.0,4.4167,158000.0,<1H OCEAN --118.06,33.89,26.0,2483.0,412.0,1538.0,449.0,5.1104,220500.0,<1H OCEAN --118.07,33.89,29.0,1138.0,217.0,964.0,222.0,4.537,185300.0,<1H OCEAN --118.07,33.89,17.0,2223.0,544.0,2008.0,512.0,3.0777,160800.0,<1H OCEAN --118.07,33.89,35.0,1145.0,274.0,1651.0,265.0,3.125,120300.0,<1H OCEAN --118.08,33.89,28.0,1035.0,275.0,1545.0,269.0,3.0357,123400.0,<1H OCEAN --118.08,33.89,35.0,1071.0,290.0,1412.0,274.0,3.1917,114900.0,<1H OCEAN --118.08,33.89,37.0,1152.0,259.0,981.0,225.0,3.2857,153600.0,<1H OCEAN --118.07,33.9,39.0,2502.0,546.0,1849.0,518.0,3.8846,164100.0,<1H OCEAN --118.07,33.9,42.0,1007.0,224.0,776.0,228.0,3.8672,162700.0,<1H OCEAN --118.07,33.9,45.0,1776.0,353.0,1180.0,337.0,4.6406,169200.0,<1H OCEAN --118.08,33.9,44.0,1167.0,237.0,733.0,237.0,4.2083,168300.0,<1H OCEAN --118.08,33.9,42.0,1768.0,372.0,1155.0,368.0,3.558,161100.0,<1H OCEAN --118.09,33.9,37.0,1147.0,258.0,742.0,242.0,4.0461,153500.0,<1H OCEAN --118.09,33.9,33.0,3326.0,720.0,2533.0,689.0,3.1441,176300.0,<1H OCEAN --118.1,33.9,43.0,1237.0,243.0,776.0,246.0,4.325,166000.0,<1H OCEAN --118.1,33.9,40.0,1880.0,377.0,1229.0,378.0,4.4167,174600.0,<1H OCEAN --118.08,33.89,41.0,834.0,166.0,603.0,179.0,3.7321,167500.0,<1H OCEAN --118.09,33.89,42.0,1150.0,215.0,708.0,204.0,3.6875,171500.0,<1H OCEAN --118.09,33.89,42.0,991.0,,717.0,219.0,4.0926,164400.0,<1H OCEAN --118.09,33.89,27.0,3399.0,882.0,2465.0,811.0,3.099,166600.0,<1H OCEAN --118.1,33.89,34.0,2242.0,436.0,1483.0,443.0,4.4934,185600.0,<1H OCEAN --118.1,33.9,37.0,1061.0,202.0,768.0,206.0,4.75,161900.0,<1H OCEAN --118.1,33.9,37.0,796.0,175.0,740.0,183.0,3.6,156400.0,<1H OCEAN --118.1,33.89,36.0,769.0,142.0,498.0,137.0,4.7159,182100.0,<1H OCEAN --118.1,33.89,35.0,994.0,203.0,602.0,185.0,3.5865,178000.0,<1H OCEAN --118.11,33.9,35.0,2604.0,495.0,1465.0,470.0,4.4896,184600.0,<1H OCEAN --118.11,33.9,26.0,4173.0,893.0,2471.0,863.0,3.5052,196000.0,<1H OCEAN --118.11,33.89,35.0,1139.0,197.0,772.0,233.0,4.375,204700.0,<1H OCEAN --118.11,33.88,35.0,1623.0,304.0,868.0,272.0,3.5893,276000.0,<1H OCEAN --118.11,33.89,34.0,2508.0,594.0,1549.0,545.0,3.2069,236500.0,<1H OCEAN --118.11,33.9,35.0,1323.0,269.0,1084.0,240.0,5.0753,178000.0,<1H OCEAN --118.11,33.9,36.0,1347.0,278.0,748.0,278.0,5.1423,183100.0,<1H OCEAN --118.11,33.91,36.0,1088.0,231.0,617.0,211.0,3.8824,193100.0,<1H OCEAN --118.12,33.91,36.0,1432.0,265.0,749.0,261.0,3.5772,207400.0,<1H OCEAN --118.12,33.91,36.0,2053.0,386.0,1023.0,394.0,3.0,216600.0,<1H OCEAN --118.13,33.9,38.0,1475.0,269.0,827.0,265.0,4.7663,191600.0,<1H OCEAN --118.13,33.91,36.0,1967.0,316.0,910.0,306.0,4.4948,190600.0,<1H OCEAN --118.14,33.91,37.0,932.0,171.0,578.0,175.0,4.375,177600.0,<1H OCEAN --118.14,33.9,26.0,2145.0,471.0,1150.0,429.0,3.5972,225800.0,<1H OCEAN --118.14,33.91,34.0,1766.0,410.0,974.0,404.0,3.0703,180800.0,<1H OCEAN --118.14,33.91,32.0,1981.0,472.0,1371.0,431.0,3.1204,204200.0,<1H OCEAN --118.15,33.91,35.0,1590.0,350.0,1299.0,335.0,4.0313,163200.0,<1H OCEAN --118.15,33.91,38.0,901.0,205.0,760.0,208.0,2.9643,147400.0,<1H OCEAN --118.15,33.9,20.0,2850.0,737.0,1855.0,662.0,2.809,144600.0,<1H OCEAN --118.16,33.9,28.0,2410.0,616.0,2399.0,594.0,2.7339,156700.0,<1H OCEAN --118.16,33.91,28.0,2922.0,739.0,3013.0,673.0,2.9531,127100.0,<1H OCEAN --118.16,33.91,35.0,1403.0,338.0,1415.0,367.0,3.0967,144000.0,<1H OCEAN --118.15,33.91,35.0,574.0,116.0,610.0,147.0,3.3182,133300.0,<1H OCEAN --118.15,33.91,25.0,2053.0,578.0,1721.0,507.0,2.3456,146100.0,<1H OCEAN --118.16,33.91,6.0,3445.0,847.0,2467.0,712.0,3.1507,144000.0,<1H OCEAN --118.17,33.9,12.0,3653.0,993.0,3215.0,854.0,2.8681,114200.0,<1H OCEAN --118.17,33.91,42.0,856.0,167.0,748.0,195.0,3.8,145800.0,<1H OCEAN --118.17,33.91,37.0,1499.0,288.0,1237.0,344.0,3.9333,162300.0,<1H OCEAN --118.18,33.9,25.0,1709.0,442.0,1177.0,410.0,2.4333,155000.0,<1H OCEAN --118.18,33.9,32.0,1452.0,365.0,1888.0,366.0,3.5461,146400.0,<1H OCEAN --118.18,33.9,32.0,778.0,227.0,933.0,209.0,2.7292,143800.0,<1H OCEAN --118.18,33.9,31.0,2536.0,603.0,2625.0,576.0,3.0909,150900.0,<1H OCEAN --118.18,33.9,34.0,1248.0,320.0,1960.0,338.0,3.1012,140400.0,<1H OCEAN --118.16,33.89,38.0,483.0,113.0,389.0,108.0,2.1859,143800.0,<1H OCEAN --118.16,33.89,6.0,1655.0,536.0,1201.0,487.0,1.7344,145800.0,<1H OCEAN --118.17,33.89,52.0,63.0,12.0,47.0,8.0,7.2423,350000.0,<1H OCEAN --118.17,33.89,11.0,3605.0,880.0,3637.0,873.0,2.6328,160700.0,<1H OCEAN --118.18,33.89,25.0,5896.0,1464.0,4149.0,1362.0,2.6742,131900.0,<1H OCEAN --118.15,33.89,30.0,4426.0,995.0,4196.0,921.0,3.274,148300.0,<1H OCEAN --118.15,33.88,24.0,4232.0,1092.0,2688.0,1035.0,2.52,146000.0,<1H OCEAN --118.15,33.89,33.0,2848.0,641.0,2319.0,647.0,3.407,190800.0,<1H OCEAN --118.16,33.89,46.0,940.0,219.0,599.0,214.0,3.2813,190900.0,<1H OCEAN --118.16,33.88,30.0,1694.0,398.0,1181.0,383.0,2.9779,169500.0,<1H OCEAN --118.13,33.9,36.0,1814.0,350.0,886.0,347.0,3.4868,208400.0,<1H OCEAN --118.13,33.89,33.0,3668.0,867.0,2368.0,845.0,2.8906,204900.0,<1H OCEAN --118.14,33.89,33.0,2867.0,786.0,1774.0,705.0,2.9292,183400.0,<1H OCEAN --118.13,33.89,36.0,599.0,125.0,361.0,139.0,5.0395,225800.0,<1H OCEAN --118.13,33.9,36.0,1477.0,305.0,788.0,291.0,3.625,195800.0,<1H OCEAN --118.14,33.9,39.0,1379.0,282.0,883.0,291.0,3.3375,180100.0,<1H OCEAN --118.13,33.9,35.0,1458.0,261.0,686.0,236.0,3.9038,202700.0,<1H OCEAN --118.12,33.9,35.0,3478.0,730.0,1885.0,673.0,2.9375,206500.0,<1H OCEAN --118.12,33.89,22.0,6876.0,1960.0,5162.0,1879.0,2.9293,170800.0,<1H OCEAN --118.12,33.89,29.0,2666.0,848.0,2030.0,781.0,2.5432,180900.0,<1H OCEAN --118.12,33.9,38.0,1222.0,282.0,756.0,256.0,4.125,173900.0,<1H OCEAN --118.12,33.88,25.0,1768.0,559.0,983.0,488.0,2.6184,243800.0,<1H OCEAN --118.12,33.88,40.0,2344.0,571.0,1305.0,544.0,3.1923,191900.0,<1H OCEAN --118.13,33.88,32.0,3088.0,1024.0,1981.0,956.0,2.2027,192700.0,<1H OCEAN --118.13,33.89,29.0,2823.0,737.0,1723.0,678.0,2.7121,165500.0,<1H OCEAN --118.14,33.89,37.0,1159.0,238.0,740.0,243.0,4.9107,179600.0,<1H OCEAN --118.14,33.89,39.0,1744.0,339.0,1048.0,330.0,4.5735,195500.0,<1H OCEAN --118.14,33.88,30.0,2596.0,580.0,1662.0,539.0,4.0507,179500.0,<1H OCEAN --118.14,33.89,33.0,1250.0,276.0,866.0,268.0,4.1708,175000.0,<1H OCEAN --118.14,33.88,41.0,1531.0,343.0,1119.0,341.0,4.3646,161400.0,<1H OCEAN --118.14,33.88,24.0,3305.0,982.0,2085.0,881.0,2.6641,168200.0,<1H OCEAN --118.15,33.87,29.0,2690.0,659.0,1747.0,617.0,3.3713,198200.0,<1H OCEAN --118.11,33.88,19.0,3203.0,708.0,1761.0,667.0,4.0911,239700.0,<1H OCEAN --118.11,33.87,33.0,1379.0,254.0,795.0,297.0,4.6713,231800.0,<1H OCEAN --118.11,33.87,15.0,3254.0,598.0,1772.0,618.0,5.0417,240800.0,<1H OCEAN --118.12,33.87,21.0,3764.0,1081.0,1919.0,977.0,2.5057,156300.0,<1H OCEAN --118.12,33.88,36.0,1083.0,218.0,557.0,210.0,3.0795,218400.0,<1H OCEAN --118.13,33.88,32.0,1788.0,459.0,1131.0,461.0,3.5278,166100.0,<1H OCEAN --118.13,33.87,20.0,3638.0,868.0,2326.0,822.0,3.3304,194600.0,<1H OCEAN --118.14,33.87,21.0,6618.0,1773.0,4396.0,1649.0,3.0989,171400.0,<1H OCEAN --118.04,33.88,17.0,4807.0,838.0,3059.0,853.0,5.7619,297300.0,<1H OCEAN --118.04,33.87,17.0,2358.0,396.0,1387.0,364.0,6.299,285800.0,<1H OCEAN --118.06,33.88,17.0,7187.0,1073.0,3844.0,1068.0,6.5901,337400.0,<1H OCEAN --118.05,33.87,18.0,4928.0,773.0,2952.0,754.0,5.8855,313800.0,<1H OCEAN --118.07,33.88,16.0,4934.0,825.0,2668.0,810.0,5.748,284200.0,<1H OCEAN --118.07,33.88,17.0,2407.0,539.0,1422.0,524.0,4.2619,139700.0,<1H OCEAN --118.07,33.88,18.0,2436.0,375.0,1303.0,386.0,6.1968,344700.0,<1H OCEAN --118.07,33.87,18.0,3405.0,556.0,1945.0,509.0,5.7652,299100.0,<1H OCEAN --118.08,33.86,17.0,2259.0,383.0,1378.0,386.0,5.8733,287000.0,<1H OCEAN --118.08,33.85,19.0,4261.0,678.0,2621.0,661.0,6.2427,288700.0,<1H OCEAN --118.07,33.86,17.0,3666.0,562.0,2104.0,579.0,5.6818,338900.0,<1H OCEAN --118.07,33.85,16.0,3771.0,606.0,2196.0,564.0,7.0113,319700.0,<1H OCEAN --118.06,33.86,16.0,5603.0,938.0,3045.0,893.0,5.0778,293700.0,<1H OCEAN --118.05,33.86,16.0,2851.0,626.0,1985.0,603.0,5.4089,265600.0,<1H OCEAN --118.03,33.87,16.0,2306.0,393.0,1368.0,387.0,5.93,277600.0,<1H OCEAN --118.04,33.87,18.0,4626.0,822.0,2794.0,763.0,5.6917,275100.0,<1H OCEAN --118.04,33.86,21.0,2870.0,437.0,1671.0,470.0,7.2628,322700.0,<1H OCEAN --118.05,33.86,16.0,2676.0,391.0,1377.0,395.0,6.5513,350400.0,<1H OCEAN --118.06,33.85,16.0,4851.0,726.0,2527.0,704.0,6.0142,437400.0,<1H OCEAN --118.1,33.88,18.0,8046.0,1221.0,4276.0,1228.0,6.5515,319600.0,<1H OCEAN --118.1,33.86,21.0,3052.0,624.0,1588.0,568.0,4.3397,268100.0,<1H OCEAN --118.09,33.85,19.0,8120.0,1371.0,5026.0,1345.0,6.3093,286500.0,<1H OCEAN --118.1,33.85,19.0,993.0,174.0,572.0,175.0,5.7039,277600.0,<1H OCEAN --118.08,33.88,27.0,3065.0,736.0,1840.0,719.0,3.6417,208100.0,<1H OCEAN --118.09,33.88,27.0,3119.0,635.0,1887.0,567.0,3.8654,195300.0,<1H OCEAN --118.07,33.89,32.0,1819.0,386.0,1679.0,360.0,3.5562,146000.0,<1H OCEAN --118.08,33.89,33.0,2131.0,435.0,2045.0,426.0,4.0,145700.0,<1H OCEAN --118.08,33.88,27.0,923.0,186.0,1014.0,204.0,3.825,159500.0,<1H OCEAN --118.08,33.88,30.0,1901.0,519.0,2685.0,496.0,3.2639,120100.0,<1H OCEAN --118.08,33.88,26.0,1507.0,270.0,931.0,275.0,5.1645,244900.0,<1H OCEAN --118.08,33.87,23.0,2536.0,552.0,2012.0,556.0,4.1406,200800.0,<1H OCEAN --118.07,33.87,28.0,2399.0,436.0,1613.0,429.0,3.6339,220100.0,<1H OCEAN --118.09,33.87,31.0,3498.0,728.0,2098.0,697.0,3.9837,246000.0,<1H OCEAN --118.07,33.86,31.0,2943.0,518.0,1703.0,472.0,3.7091,225900.0,<1H OCEAN --118.07,33.86,28.0,1789.0,352.0,1347.0,330.0,3.425,189700.0,<1H OCEAN --118.08,33.86,26.0,778.0,173.0,539.0,186.0,3.2679,236500.0,<1H OCEAN --118.08,33.86,29.0,3260.0,783.0,1969.0,737.0,3.5268,215500.0,<1H OCEAN --118.08,33.86,29.0,1018.0,235.0,684.0,248.0,3.3333,198800.0,<1H OCEAN --118.08,33.84,31.0,2377.0,600.0,2042.0,593.0,3.625,170400.0,<1H OCEAN --118.08,33.84,31.0,2906.0,578.0,1806.0,553.0,4.8448,194600.0,<1H OCEAN --118.09,33.84,23.0,4412.0,910.0,2380.0,825.0,4.54,213100.0,<1H OCEAN --118.09,33.84,27.0,1594.0,295.0,1061.0,320.0,4.7917,217700.0,<1H OCEAN --118.08,33.85,22.0,1055.0,204.0,682.0,216.0,6.0,191300.0,<1H OCEAN --118.08,33.84,28.0,4216.0,948.0,2997.0,896.0,3.7961,162700.0,<1H OCEAN --118.08,33.84,25.0,3696.0,953.0,2827.0,860.0,3.3438,153300.0,<1H OCEAN --118.06,33.84,26.0,6960.0,1454.0,4367.0,1437.0,4.7953,210900.0,<1H OCEAN --118.06,33.84,20.0,5643.0,1231.0,3841.0,1195.0,4.0542,168400.0,<1H OCEAN --118.07,33.82,27.0,3481.0,576.0,1660.0,560.0,5.7965,228200.0,<1H OCEAN --118.08,33.82,26.0,4259.0,588.0,1644.0,581.0,6.2519,345700.0,<1H OCEAN --118.08,33.83,30.0,2188.0,556.0,2727.0,525.0,2.7759,136800.0,<1H OCEAN --118.08,33.82,30.0,2636.0,652.0,3412.0,649.0,2.8095,118300.0,<1H OCEAN --118.07,33.83,17.0,4822.0,1168.0,3868.0,1117.0,2.5978,142900.0,<1H OCEAN --118.11,33.86,33.0,2389.0,410.0,1229.0,393.0,5.3889,234900.0,<1H OCEAN --118.11,33.86,35.0,1255.0,252.0,685.0,279.0,4.2,226900.0,<1H OCEAN --118.12,33.86,44.0,2663.0,511.0,1277.0,462.0,4.3194,199500.0,<1H OCEAN --118.12,33.87,43.0,1633.0,355.0,837.0,350.0,3.0405,188000.0,<1H OCEAN --118.13,33.87,45.0,1606.0,300.0,735.0,295.0,4.6765,198400.0,<1H OCEAN --118.13,33.86,45.0,1320.0,256.0,645.0,256.0,4.4,209500.0,<1H OCEAN --118.13,33.86,45.0,1866.0,343.0,919.0,344.0,3.5833,200200.0,<1H OCEAN --118.14,33.87,44.0,1661.0,315.0,985.0,319.0,4.3942,219500.0,<1H OCEAN --118.14,33.86,43.0,2104.0,382.0,1071.0,396.0,5.0,208900.0,<1H OCEAN --118.14,33.86,44.0,1436.0,257.0,745.0,233.0,4.625,213400.0,<1H OCEAN --118.14,33.86,44.0,1276.0,234.0,538.0,213.0,4.8667,218300.0,<1H OCEAN --118.14,33.87,44.0,1607.0,271.0,799.0,283.0,5.084,214100.0,<1H OCEAN --118.15,33.86,36.0,1578.0,312.0,827.0,311.0,4.8942,194100.0,<1H OCEAN --118.15,33.86,34.0,2403.0,413.0,1385.0,386.0,4.4934,213800.0,<1H OCEAN --118.16,33.88,33.0,2180.0,522.0,1634.0,467.0,3.0114,167000.0,<1H OCEAN --118.15,33.87,33.0,2373.0,552.0,1673.0,571.0,3.0685,181800.0,<1H OCEAN --118.16,33.87,32.0,1854.0,471.0,1363.0,478.0,2.6406,156700.0,<1H OCEAN --118.16,33.88,18.0,2287.0,662.0,1804.0,537.0,1.9903,170300.0,<1H OCEAN --118.17,33.88,29.0,815.0,206.0,590.0,183.0,3.0052,166700.0,<1H OCEAN --118.17,33.88,42.0,1645.0,371.0,1161.0,351.0,3.0893,162700.0,<1H OCEAN --118.18,33.88,47.0,882.0,185.0,536.0,174.0,4.625,163000.0,<1H OCEAN --118.18,33.88,44.0,1308.0,267.0,783.0,237.0,4.7361,167700.0,<1H OCEAN --118.18,33.88,42.0,2326.0,503.0,1832.0,501.0,3.1713,161000.0,<1H OCEAN --118.19,33.87,27.0,4701.0,1359.0,2571.0,1216.0,2.5417,184100.0,<1H OCEAN --118.19,33.87,35.0,1769.0,436.0,1166.0,386.0,2.875,178300.0,<1H OCEAN --118.19,33.86,42.0,1999.0,431.0,1060.0,399.0,3.7031,167100.0,<1H OCEAN --118.19,33.86,46.0,1824.0,438.0,1200.0,451.0,3.4375,156700.0,<1H OCEAN --118.19,33.86,38.0,2009.0,524.0,1449.0,451.0,2.7045,155400.0,<1H OCEAN --118.19,33.86,35.0,1133.0,296.0,774.0,271.0,2.2381,137500.0,<1H OCEAN --118.19,33.86,36.0,2013.0,546.0,1659.0,522.0,3.1215,153600.0,<1H OCEAN --118.2,33.86,27.0,2732.0,867.0,1690.0,794.0,2.6465,160200.0,<1H OCEAN --118.19,33.87,42.0,1213.0,269.0,628.0,229.0,3.6987,152100.0,<1H OCEAN --118.2,33.88,40.0,1699.0,346.0,1188.0,329.0,4.2083,147300.0,<1H OCEAN --118.2,33.88,40.0,2945.0,725.0,2858.0,690.0,3.2368,136900.0,<1H OCEAN --118.21,33.88,31.0,1332.0,417.0,1405.0,363.0,2.0125,143000.0,<1H OCEAN --118.21,33.88,32.0,1507.0,379.0,1082.0,350.0,3.225,138200.0,<1H OCEAN --118.2,33.87,26.0,703.0,202.0,757.0,212.0,2.525,155500.0,<1H OCEAN --118.2,33.87,42.0,1482.0,310.0,1052.0,317.0,3.9469,158200.0,<1H OCEAN --118.2,33.87,36.0,1554.0,273.0,974.0,264.0,4.2135,161400.0,<1H OCEAN --118.17,33.87,40.0,2462.0,587.0,1821.0,536.0,3.5646,162600.0,<1H OCEAN --118.17,33.86,44.0,1701.0,396.0,1091.0,384.0,3.025,162300.0,<1H OCEAN --118.17,33.87,49.0,1937.0,445.0,1339.0,440.0,3.0319,162800.0,<1H OCEAN --118.17,33.87,48.0,2258.0,509.0,1395.0,492.0,3.765,164800.0,<1H OCEAN --118.17,33.87,45.0,2110.0,494.0,1404.0,454.0,2.9803,165900.0,<1H OCEAN --118.18,33.87,44.0,2137.0,461.0,1126.0,439.0,3.4408,172900.0,<1H OCEAN --118.18,33.87,44.0,1832.0,401.0,1056.0,405.0,4.0658,175100.0,<1H OCEAN --118.18,33.87,38.0,2664.0,626.0,1627.0,604.0,3.7527,161900.0,<1H OCEAN --118.16,33.86,26.0,6607.0,1663.0,4066.0,1558.0,2.5068,156300.0,<1H OCEAN --118.17,33.86,10.0,1664.0,508.0,1369.0,493.0,2.9886,175000.0,<1H OCEAN --118.17,33.85,39.0,2247.0,526.0,1670.0,525.0,3.07,173000.0,<1H OCEAN --118.18,33.85,38.0,3596.0,862.0,2416.0,832.0,3.6897,169800.0,<1H OCEAN --118.18,33.86,43.0,2752.0,645.0,1674.0,614.0,3.6719,161300.0,<1H OCEAN --118.18,33.86,39.0,2925.0,732.0,1702.0,642.0,2.375,160800.0,<1H OCEAN --118.17,33.86,40.0,1301.0,342.0,954.0,336.0,2.3804,158000.0,<1H OCEAN --118.14,33.86,37.0,1404.0,257.0,652.0,258.0,4.2062,195400.0,<1H OCEAN --118.15,33.85,30.0,4071.0,1067.0,2144.0,970.0,2.7268,218100.0,<1H OCEAN --118.15,33.85,36.0,1435.0,249.0,606.0,234.0,4.1439,212600.0,<1H OCEAN --118.15,33.85,36.0,1491.0,259.0,699.0,266.0,4.0781,217300.0,<1H OCEAN --118.15,33.86,32.0,2630.0,559.0,1069.0,491.0,2.4659,209000.0,<1H OCEAN --118.16,33.85,36.0,2668.0,473.0,1315.0,478.0,4.0714,215600.0,<1H OCEAN --118.16,33.85,36.0,1979.0,339.0,952.0,339.0,4.0815,216200.0,<1H OCEAN --118.13,33.86,37.0,2259.0,425.0,1183.0,413.0,5.1805,201600.0,<1H OCEAN --118.13,33.85,36.0,2110.0,416.0,1128.0,403.0,4.6019,208400.0,<1H OCEAN --118.13,33.85,36.0,1885.0,391.0,1049.0,405.0,3.55,212800.0,<1H OCEAN --118.14,33.86,36.0,1774.0,348.0,934.0,333.0,4.8571,203300.0,<1H OCEAN --118.14,33.86,36.0,1703.0,325.0,845.0,308.0,5.0106,210800.0,<1H OCEAN --118.1,33.85,28.0,2825.0,470.0,1352.0,469.0,5.2639,242000.0,<1H OCEAN --118.1,33.85,36.0,1473.0,253.0,713.0,257.0,5.9493,228000.0,<1H OCEAN --118.1,33.85,36.0,956.0,159.0,416.0,157.0,4.6429,223700.0,<1H OCEAN --118.11,33.85,36.0,887.0,163.0,482.0,157.0,4.125,219500.0,<1H OCEAN --118.11,33.85,36.0,2418.0,389.0,1138.0,387.0,4.8393,216300.0,<1H OCEAN --118.11,33.86,36.0,2750.0,487.0,1386.0,458.0,4.9904,221700.0,<1H OCEAN --118.12,33.86,34.0,2116.0,427.0,972.0,396.0,4.8516,213600.0,<1H OCEAN --118.12,33.85,37.0,2584.0,453.0,1333.0,481.0,4.3661,219900.0,<1H OCEAN --118.12,33.85,37.0,2386.0,409.0,1101.0,399.0,4.6908,218200.0,<1H OCEAN --118.1,33.84,35.0,1790.0,269.0,924.0,263.0,5.296,226200.0,<1H OCEAN --118.1,33.84,36.0,1915.0,316.0,850.0,319.0,4.7222,225800.0,<1H OCEAN --118.1,33.83,37.0,2059.0,349.0,825.0,334.0,4.0603,225200.0,<1H OCEAN --118.11,33.83,36.0,1726.0,287.0,820.0,288.0,5.5767,218100.0,<1H OCEAN --118.1,33.84,36.0,1557.0,270.0,697.0,251.0,4.5417,219600.0,<1H OCEAN --118.1,33.84,36.0,2572.0,421.0,1318.0,434.0,5.1836,219700.0,<1H OCEAN --118.1,33.84,36.0,690.0,109.0,316.0,104.0,3.7813,209100.0,<1H OCEAN --118.11,33.84,37.0,1588.0,272.0,692.0,245.0,4.8594,220300.0,<1H OCEAN --118.11,33.84,36.0,1756.0,297.0,798.0,287.0,5.5581,218300.0,<1H OCEAN --118.12,33.84,37.0,2143.0,382.0,1047.0,377.0,4.4423,216000.0,<1H OCEAN --118.12,33.84,37.0,2706.0,462.0,1331.0,476.0,5.0719,220000.0,<1H OCEAN --118.11,33.84,36.0,1074.0,188.0,496.0,196.0,4.625,217400.0,<1H OCEAN --118.11,33.84,36.0,1523.0,263.0,717.0,278.0,4.875,218900.0,<1H OCEAN --118.11,33.83,36.0,1784.0,303.0,964.0,299.0,4.2703,220900.0,<1H OCEAN --118.12,33.83,44.0,1712.0,314.0,691.0,293.0,4.3594,221300.0,<1H OCEAN --118.12,33.84,37.0,1242.0,221.0,565.0,213.0,4.1094,215800.0,<1H OCEAN --118.11,33.84,36.0,1463.0,257.0,722.0,260.0,4.8438,226300.0,<1H OCEAN --118.13,33.84,35.0,3008.0,674.0,1584.0,671.0,3.5465,213200.0,<1H OCEAN --118.13,33.84,46.0,2439.0,429.0,944.0,374.0,4.2841,312400.0,<1H OCEAN --118.13,33.83,44.0,1710.0,333.0,786.0,344.0,4.2917,314700.0,<1H OCEAN --118.14,33.84,43.0,2107.0,439.0,876.0,429.0,3.2024,339400.0,<1H OCEAN --118.13,33.84,48.0,1895.0,294.0,881.0,293.0,6.3364,307400.0,<1H OCEAN --118.14,33.84,45.0,1908.0,361.0,890.0,342.0,4.575,336000.0,<1H OCEAN --118.14,33.84,44.0,3043.0,619.0,1316.0,607.0,4.4286,254900.0,<1H OCEAN --118.14,33.84,36.0,3002.0,484.0,1322.0,471.0,4.933,228900.0,<1H OCEAN --118.15,33.84,29.0,2448.0,354.0,894.0,349.0,7.6526,481300.0,<1H OCEAN --118.15,33.84,36.0,2987.0,491.0,1360.0,497.0,4.8013,224100.0,<1H OCEAN --118.15,33.84,37.0,1508.0,252.0,635.0,241.0,3.75,221300.0,<1H OCEAN --118.16,33.84,36.0,2444.0,432.0,1199.0,424.0,4.1538,218800.0,<1H OCEAN --118.16,33.84,36.0,1348.0,234.0,643.0,221.0,3.6447,211000.0,<1H OCEAN --118.16,33.84,36.0,2831.0,573.0,1462.0,569.0,3.8646,214600.0,<1H OCEAN --118.16,33.84,36.0,2220.0,367.0,1002.0,351.0,5.0719,219500.0,<1H OCEAN --118.17,33.85,37.0,3714.0,708.0,1956.0,694.0,4.2218,200500.0,<1H OCEAN --118.17,33.84,45.0,1533.0,331.0,791.0,335.0,3.4605,186600.0,<1H OCEAN --118.17,33.84,29.0,4716.0,1372.0,2515.0,1272.0,2.726,208700.0,<1H OCEAN --118.17,33.84,45.0,1853.0,328.0,945.0,320.0,5.0787,219200.0,<1H OCEAN --118.17,33.83,45.0,2019.0,363.0,880.0,339.0,4.1023,217300.0,NEAR OCEAN --118.18,33.85,40.0,2597.0,582.0,1285.0,559.0,3.975,213800.0,<1H OCEAN --118.18,33.84,35.0,1415.0,294.0,591.0,291.0,2.9798,315600.0,NEAR OCEAN --118.19,33.84,44.0,2731.0,577.0,1396.0,555.0,4.1771,219100.0,NEAR OCEAN --118.19,33.84,24.0,1228.0,320.0,537.0,273.0,2.25,192000.0,NEAR OCEAN --118.18,33.85,30.0,2548.0,717.0,2086.0,700.0,0.7007,134400.0,<1H OCEAN --118.18,33.85,44.0,1890.0,465.0,1378.0,430.0,3.8819,143200.0,<1H OCEAN --118.19,33.85,30.0,3533.0,1061.0,2678.0,1033.0,2.2417,151900.0,NEAR OCEAN --118.19,33.85,49.0,1073.0,260.0,725.0,272.0,3.8026,149700.0,NEAR OCEAN --118.19,33.85,45.0,1167.0,302.0,773.0,287.0,3.2798,150300.0,NEAR OCEAN --118.2,33.85,33.0,2557.0,731.0,2286.0,700.0,2.3041,149100.0,<1H OCEAN --118.2,33.85,46.0,1854.0,462.0,1360.0,429.0,2.4844,158200.0,<1H OCEAN --118.2,33.84,35.0,3405.0,779.0,1953.0,671.0,2.7813,159200.0,NEAR OCEAN --118.2,33.83,35.0,3737.0,613.0,1305.0,583.0,7.2096,490300.0,NEAR OCEAN --118.19,33.83,43.0,2641.0,411.0,1011.0,444.0,6.4468,444200.0,NEAR OCEAN --118.19,33.83,42.0,1773.0,360.0,815.0,299.0,4.9,406300.0,NEAR OCEAN --118.17,33.83,45.0,1808.0,315.0,800.0,302.0,4.8693,277700.0,NEAR OCEAN --118.17,33.83,46.0,1362.0,214.0,531.0,222.0,4.3125,290500.0,NEAR OCEAN --118.18,33.83,44.0,1497.0,277.0,542.0,274.0,5.0052,321800.0,NEAR OCEAN --118.18,33.83,45.0,1535.0,274.0,591.0,276.0,4.2411,371700.0,NEAR OCEAN --118.18,33.83,39.0,3622.0,745.0,1330.0,648.0,3.3125,425500.0,NEAR OCEAN --118.18,33.84,43.0,2561.0,544.0,1063.0,537.0,3.835,418600.0,NEAR OCEAN --118.17,33.82,50.0,3587.0,693.0,1513.0,651.0,5.5106,252200.0,NEAR OCEAN --118.17,33.82,52.0,2539.0,497.0,1152.0,488.0,4.1354,268200.0,NEAR OCEAN --118.18,33.83,52.0,2569.0,484.0,1030.0,451.0,4.1301,268400.0,NEAR OCEAN --118.18,33.82,52.0,2618.0,472.0,943.0,440.0,3.7895,254000.0,NEAR OCEAN --118.18,33.82,43.0,284.0,65.0,167.0,68.0,4.25,207500.0,NEAR OCEAN --118.19,33.83,30.0,2246.0,552.0,1032.0,548.0,3.5871,347100.0,NEAR OCEAN --118.19,33.82,19.0,2953.0,895.0,1914.0,855.0,3.5521,290000.0,NEAR OCEAN --118.2,33.82,21.0,2251.0,452.0,913.0,420.0,4.6042,272200.0,NEAR OCEAN --118.2,33.82,43.0,1758.0,347.0,954.0,312.0,5.2606,198900.0,NEAR OCEAN --118.19,33.82,11.0,872.0,203.0,422.0,221.0,4.6364,156300.0,NEAR OCEAN --118.19,33.81,21.0,1835.0,427.0,1038.0,384.0,4.4559,198500.0,NEAR OCEAN --118.2,33.81,43.0,3013.0,574.0,1525.0,529.0,4.95,194000.0,NEAR OCEAN --118.2,33.82,34.0,2807.0,768.0,2217.0,744.0,2.4286,204800.0,NEAR OCEAN --118.19,33.81,23.0,954.0,390.0,804.0,373.0,2.5833,181300.0,NEAR OCEAN --118.2,33.81,45.0,944.0,178.0,533.0,193.0,3.4808,206900.0,NEAR OCEAN --118.2,33.81,46.0,1388.0,254.0,742.0,241.0,4.6458,212100.0,NEAR OCEAN --118.2,33.81,47.0,2347.0,437.0,1219.0,420.0,5.3096,209900.0,NEAR OCEAN --118.21,33.82,34.0,1719.0,398.0,1444.0,372.0,2.8438,139300.0,NEAR OCEAN --118.21,33.81,43.0,905.0,199.0,764.0,204.0,3.3214,162200.0,NEAR OCEAN --118.21,33.81,40.0,1815.0,428.0,1807.0,413.0,3.0882,160700.0,NEAR OCEAN --118.21,33.82,33.0,1278.0,311.0,1157.0,320.0,3.5054,146800.0,NEAR OCEAN --118.22,33.82,30.0,1680.0,469.0,1779.0,429.0,3.6086,146300.0,NEAR OCEAN --118.21,33.82,45.0,455.0,92.0,394.0,89.0,4.9562,165700.0,NEAR OCEAN --118.21,33.82,43.0,1005.0,199.0,723.0,191.0,4.3424,162500.0,NEAR OCEAN --118.22,33.82,17.0,5357.0,1332.0,3030.0,1266.0,1.9311,138100.0,NEAR OCEAN --118.21,33.81,45.0,1693.0,337.0,1255.0,333.0,3.6923,159700.0,NEAR OCEAN --118.21,33.81,45.0,1816.0,398.0,1524.0,388.0,3.8586,157900.0,NEAR OCEAN --118.22,33.81,38.0,1486.0,359.0,1345.0,326.0,3.3988,147800.0,NEAR OCEAN --118.22,33.81,41.0,726.0,166.0,602.0,183.0,3.7885,156900.0,NEAR OCEAN --118.21,33.8,45.0,1160.0,274.0,1095.0,269.0,2.7308,139000.0,NEAR OCEAN --118.21,33.8,41.0,1251.0,279.0,1053.0,278.0,3.2778,150800.0,NEAR OCEAN --118.22,33.8,36.0,1285.0,347.0,1291.0,337.0,3.7708,157100.0,NEAR OCEAN --118.22,33.8,33.0,1984.0,477.0,1764.0,440.0,3.875,165100.0,NEAR OCEAN --118.22,33.79,28.0,3008.0,629.0,2537.0,596.0,2.3,137500.0,NEAR OCEAN --118.21,33.79,39.0,1598.0,458.0,1691.0,399.0,2.3605,141800.0,NEAR OCEAN --118.21,33.79,32.0,2020.0,613.0,2557.0,562.0,2.1397,145300.0,NEAR OCEAN --118.21,33.8,44.0,1387.0,280.0,984.0,302.0,4.25,143100.0,NEAR OCEAN --118.19,33.8,38.0,2010.0,595.0,1535.0,525.0,1.9848,160400.0,NEAR OCEAN --118.19,33.79,29.0,3497.0,1096.0,2994.0,919.0,1.8109,137500.0,NEAR OCEAN --118.2,33.79,47.0,767.0,195.0,569.0,195.0,2.9514,185200.0,NEAR OCEAN --118.2,33.79,48.0,2105.0,592.0,1807.0,539.0,2.7183,190400.0,NEAR OCEAN --118.2,33.79,47.0,2549.0,626.0,1388.0,606.0,3.0135,192700.0,NEAR OCEAN --118.2,33.8,52.0,1786.0,445.0,1090.0,430.0,2.8988,194900.0,NEAR OCEAN --118.19,33.8,41.0,2125.0,591.0,1604.0,555.0,2.9943,190600.0,NEAR OCEAN --118.2,33.8,42.0,4577.0,1146.0,2749.0,1094.0,2.5012,197500.0,NEAR OCEAN --118.2,33.8,45.0,2456.0,495.0,1300.0,450.0,3.9792,210200.0,NEAR OCEAN --118.2,33.8,52.0,1009.0,216.0,614.0,231.0,4.0074,200800.0,NEAR OCEAN --118.18,33.8,42.0,2301.0,621.0,2114.0,561.0,2.0579,132700.0,NEAR OCEAN --118.19,33.8,36.0,2326.0,729.0,2635.0,657.0,2.1985,141800.0,NEAR OCEAN --118.18,33.79,42.0,1571.0,435.0,1631.0,417.0,1.6384,128000.0,NEAR OCEAN --118.19,33.79,41.0,2114.0,612.0,2357.0,529.0,1.7938,142600.0,NEAR OCEAN --118.19,33.79,43.0,1823.0,600.0,2339.0,560.0,1.6792,130600.0,NEAR OCEAN --118.18,33.8,30.0,2734.0,758.0,2951.0,691.0,1.7689,117600.0,NEAR OCEAN --118.17,33.79,36.0,948.0,303.0,1042.0,301.0,1.55,100000.0,NEAR OCEAN --118.18,33.82,43.0,2210.0,469.0,1042.0,418.0,3.5,216700.0,NEAR OCEAN --118.18,33.81,27.0,471.0,132.0,315.0,96.0,1.75,154200.0,NEAR OCEAN --118.16,33.8,9.0,3564.0,835.0,1530.0,807.0,5.1806,175000.0,NEAR OCEAN --118.16,33.79,25.0,5463.0,1265.0,3010.0,1179.0,3.233,199100.0,NEAR OCEAN --118.17,33.8,26.0,1589.0,380.0,883.0,366.0,3.5313,187500.0,NEAR OCEAN --118.18,33.8,15.0,2407.0,589.0,1591.0,506.0,3.0513,148100.0,NEAR OCEAN --118.12,33.83,45.0,1579.0,278.0,687.0,285.0,5.0424,225900.0,<1H OCEAN --118.12,33.83,45.0,1734.0,331.0,797.0,293.0,4.8917,222800.0,<1H OCEAN --118.12,33.82,43.0,1544.0,286.0,701.0,298.0,4.1375,226000.0,<1H OCEAN --118.12,33.82,42.0,1493.0,277.0,671.0,267.0,3.2794,224500.0,<1H OCEAN --118.13,33.82,44.0,1619.0,280.0,815.0,284.0,5.5449,232200.0,<1H OCEAN --118.13,33.82,44.0,1785.0,307.0,779.0,291.0,4.3056,228600.0,<1H OCEAN --118.13,33.83,45.0,3087.0,574.0,1474.0,567.0,5.5196,227600.0,<1H OCEAN --118.1,33.83,36.0,1408.0,250.0,702.0,251.0,4.875,222500.0,<1H OCEAN --118.11,33.83,36.0,1462.0,233.0,664.0,220.0,5.1171,225300.0,<1H OCEAN --118.11,33.82,36.0,1999.0,390.0,887.0,379.0,3.8162,221900.0,<1H OCEAN --118.11,33.82,36.0,1742.0,340.0,857.0,341.0,4.6875,218200.0,<1H OCEAN --118.11,33.83,37.0,1249.0,202.0,517.0,189.0,4.4196,223100.0,<1H OCEAN --118.11,33.83,36.0,1820.0,313.0,899.0,295.0,4.918,225200.0,<1H OCEAN --118.09,33.83,36.0,2734.0,448.0,1308.0,441.0,5.9265,227300.0,<1H OCEAN --118.1,33.82,36.0,2422.0,420.0,1193.0,421.0,4.8462,225700.0,<1H OCEAN --118.1,33.82,36.0,1930.0,354.0,915.0,328.0,5.2713,244400.0,<1H OCEAN --118.1,33.83,36.0,2000.0,343.0,956.0,352.0,5.3735,234400.0,<1H OCEAN --118.08,33.81,20.0,6295.0,937.0,2292.0,874.0,7.6084,402500.0,<1H OCEAN --118.09,33.82,36.0,2219.0,393.0,1042.0,396.0,5.2299,239800.0,<1H OCEAN --118.09,33.81,36.0,1878.0,323.0,846.0,325.0,7.1937,254400.0,<1H OCEAN --118.1,33.81,36.0,1111.0,184.0,444.0,177.0,3.7031,245300.0,<1H OCEAN --118.1,33.81,36.0,856.0,146.0,451.0,164.0,5.1993,246000.0,<1H OCEAN --118.11,33.81,36.0,1252.0,209.0,558.0,214.0,3.9722,235600.0,<1H OCEAN --118.11,33.82,37.0,1987.0,347.0,1095.0,357.0,4.3203,232800.0,<1H OCEAN --118.1,33.82,36.0,1946.0,346.0,871.0,336.0,5.2155,254800.0,<1H OCEAN --118.11,33.82,37.0,1756.0,345.0,836.0,335.0,4.375,218200.0,<1H OCEAN --118.12,33.81,36.0,2565.0,458.0,1155.0,443.0,4.6087,224600.0,<1H OCEAN --118.12,33.81,37.0,1798.0,331.0,860.0,340.0,4.2143,228500.0,<1H OCEAN --118.13,33.81,37.0,1013.0,199.0,493.0,183.0,4.7845,231400.0,<1H OCEAN --118.13,33.81,37.0,1228.0,237.0,572.0,242.0,4.325,223900.0,<1H OCEAN --118.13,33.82,37.0,1530.0,290.0,711.0,283.0,5.1795,225400.0,<1H OCEAN --118.13,33.82,36.0,665.0,114.0,273.0,112.0,3.7321,223700.0,<1H OCEAN --118.13,33.81,34.0,1903.0,343.0,928.0,349.0,5.395,241900.0,<1H OCEAN --118.13,33.81,36.0,1749.0,322.0,855.0,319.0,4.6473,227100.0,<1H OCEAN --118.13,33.8,36.0,1026.0,182.0,505.0,176.0,4.3438,233600.0,<1H OCEAN --118.13,33.8,36.0,1496.0,271.0,743.0,265.0,4.4312,226000.0,<1H OCEAN --118.13,33.8,41.0,1509.0,325.0,821.0,314.0,4.0893,223000.0,<1H OCEAN --118.15,33.8,44.0,1886.0,399.0,1167.0,372.0,3.1042,219800.0,NEAR OCEAN --118.12,33.81,36.0,1774.0,299.0,784.0,298.0,5.0447,249200.0,<1H OCEAN --118.12,33.81,36.0,1665.0,291.0,721.0,294.0,4.6875,250700.0,<1H OCEAN --118.12,33.8,35.0,1835.0,435.0,774.0,418.0,2.7092,256300.0,<1H OCEAN --118.12,33.8,36.0,1257.0,205.0,530.0,211.0,5.3701,251400.0,<1H OCEAN --118.11,33.8,36.0,1837.0,319.0,810.0,305.0,4.3897,235000.0,<1H OCEAN --118.11,33.79,36.0,1993.0,354.0,884.0,337.0,5.587,244900.0,<1H OCEAN --118.11,33.79,36.0,2223.0,370.0,1039.0,370.0,5.7942,257000.0,<1H OCEAN --118.09,33.81,36.0,1371.0,250.0,666.0,257.0,5.0795,243300.0,<1H OCEAN --118.09,33.8,36.0,1724.0,322.0,838.0,328.0,4.4831,253900.0,<1H OCEAN --118.11,33.8,36.0,1680.0,291.0,744.0,280.0,4.66,244800.0,<1H OCEAN --118.11,33.8,35.0,1034.0,180.0,444.0,177.0,5.4602,231600.0,<1H OCEAN --118.11,33.81,37.0,1694.0,280.0,776.0,271.0,6.2187,257900.0,<1H OCEAN --118.1,33.81,36.0,1962.0,325.0,786.0,315.0,5.62,239600.0,<1H OCEAN --118.1,33.8,37.0,1814.0,329.0,850.0,328.0,5.0574,240800.0,<1H OCEAN --118.09,33.79,36.0,4210.0,657.0,1911.0,631.0,5.8491,247300.0,<1H OCEAN --118.1,33.78,35.0,4466.0,740.0,2134.0,743.0,5.7389,251800.0,<1H OCEAN --118.1,33.79,35.0,2370.0,379.0,996.0,380.0,5.7368,287200.0,<1H OCEAN --118.1,33.79,36.0,3359.0,596.0,1522.0,565.0,5.1805,249400.0,<1H OCEAN --118.11,33.78,16.0,3985.0,567.0,1327.0,564.0,7.9767,500001.0,<1H OCEAN --118.13,33.79,29.0,2937.0,524.0,1132.0,528.0,4.6133,500001.0,NEAR OCEAN --118.13,33.78,31.0,3039.0,739.0,1199.0,697.0,3.7232,500001.0,NEAR OCEAN --118.13,33.79,36.0,1245.0,211.0,508.0,221.0,5.3441,480600.0,NEAR OCEAN --118.12,33.79,43.0,1471.0,301.0,767.0,311.0,4.3317,232400.0,<1H OCEAN --118.12,33.79,41.0,1762.0,314.0,738.0,300.0,4.1687,240700.0,<1H OCEAN --118.13,33.79,44.0,2153.0,375.0,947.0,364.0,5.0072,236200.0,NEAR OCEAN --118.13,33.79,45.0,2317.0,448.0,1057.0,428.0,4.375,234800.0,NEAR OCEAN --118.14,33.79,45.0,1519.0,263.0,681.0,267.0,4.6452,212500.0,NEAR OCEAN --118.13,33.79,20.0,6678.0,1797.0,3625.0,1599.0,3.7716,242900.0,NEAR OCEAN --118.14,33.8,43.0,2506.0,531.0,1230.0,543.0,3.4211,203900.0,NEAR OCEAN --118.15,33.79,5.0,3700.0,993.0,1657.0,848.0,3.7826,196300.0,NEAR OCEAN --118.14,33.79,23.0,2573.0,688.0,1478.0,604.0,3.4833,209400.0,NEAR OCEAN --118.14,33.79,44.0,2388.0,619.0,1461.0,592.0,3.1711,215400.0,NEAR OCEAN --118.14,33.78,44.0,2101.0,496.0,1038.0,500.0,3.108,217900.0,NEAR OCEAN --118.15,33.79,25.0,4013.0,1097.0,2297.0,969.0,3.0453,185900.0,NEAR OCEAN --118.15,33.78,17.0,1584.0,435.0,904.0,406.0,2.0875,181300.0,NEAR OCEAN --118.16,33.78,14.0,1709.0,558.0,1939.0,520.0,1.9808,139100.0,NEAR OCEAN --118.16,33.78,33.0,2048.0,585.0,2074.0,597.0,2.0156,152700.0,NEAR OCEAN --118.16,33.79,25.0,3742.0,1180.0,3916.0,1063.0,2.4,153700.0,NEAR OCEAN --118.16,33.79,26.0,3061.0,844.0,2135.0,769.0,2.875,164000.0,NEAR OCEAN --118.17,33.79,32.0,2171.0,672.0,3002.0,648.0,2.375,139700.0,NEAR OCEAN --118.17,33.79,30.0,1349.0,519.0,2646.0,552.0,1.9318,115900.0,NEAR OCEAN --118.18,33.78,36.0,1697.0,550.0,1379.0,434.0,1.2746,129700.0,NEAR OCEAN --118.18,33.79,27.0,1580.0,510.0,1896.0,448.0,2.0186,130000.0,NEAR OCEAN --118.17,33.79,28.0,1219.0,408.0,1816.0,348.0,1.7589,118300.0,NEAR OCEAN --118.18,33.79,20.0,1255.0,360.0,1201.0,318.0,1.2206,162500.0,NEAR OCEAN --118.19,33.78,29.0,1170.0,369.0,1398.0,373.0,2.2543,156300.0,NEAR OCEAN --118.19,33.79,37.0,1834.0,551.0,1967.0,476.0,2.137,126600.0,NEAR OCEAN --118.19,33.79,30.0,3107.0,994.0,3543.0,850.0,1.9387,141700.0,NEAR OCEAN --118.19,33.78,24.0,225.0,72.0,439.0,71.0,2.8533,137500.0,NEAR OCEAN --118.2,33.79,25.0,2851.0,968.0,3744.0,906.0,2.0675,116700.0,NEAR OCEAN --118.21,33.79,33.0,32.0,18.0,96.0,36.0,4.5938,112500.0,NEAR OCEAN --118.21,33.79,44.0,121.0,29.0,153.0,30.0,2.1964,150000.0,NEAR OCEAN --118.22,33.79,48.0,143.0,41.0,222.0,50.0,1.7,104200.0,NEAR OCEAN --118.23,33.76,21.0,49.0,14.0,29.0,16.0,5.0,87500.0,NEAR OCEAN --118.19,33.78,21.0,2741.0,1029.0,2924.0,969.0,1.3274,218800.0,NEAR OCEAN --118.19,33.78,35.0,1511.0,593.0,914.0,539.0,0.9318,187500.0,NEAR OCEAN --118.2,33.78,46.0,1889.0,651.0,1545.0,587.0,1.7064,175000.0,NEAR OCEAN --118.2,33.78,48.0,1766.0,497.0,1908.0,466.0,1.9872,168800.0,NEAR OCEAN --118.2,33.78,52.0,2662.0,893.0,3018.0,763.0,2.3305,162500.0,NEAR OCEAN --118.19,33.77,35.0,1574.0,603.0,820.0,514.0,1.2321,137500.0,NEAR OCEAN --118.2,33.77,40.0,2034.0,899.0,1257.0,797.0,1.2864,131300.0,NEAR OCEAN --118.2,33.77,24.0,2404.0,819.0,1566.0,753.0,1.5076,145800.0,NEAR OCEAN --118.2,33.77,22.0,1118.0,437.0,1190.0,399.0,1.9797,143800.0,NEAR OCEAN --118.2,33.77,52.0,1375.0,457.0,1089.0,317.0,2.2344,200000.0,NEAR OCEAN --118.2,33.77,41.0,1158.0,396.0,1209.0,336.0,2.7813,129200.0,NEAR OCEAN --118.2,33.77,42.0,517.0,233.0,995.0,212.0,2.225,106300.0,NEAR OCEAN --118.18,33.77,45.0,1434.0,627.0,735.0,518.0,1.5,162500.0,NEAR OCEAN --118.19,33.76,25.0,1442.0,392.0,632.0,385.0,4.6629,162500.0,NEAR OCEAN --118.19,33.77,52.0,1562.0,616.0,692.0,512.0,1.4048,200000.0,NEAR OCEAN --118.18,33.77,39.0,1645.0,547.0,1339.0,499.0,1.5536,155000.0,NEAR OCEAN --118.18,33.77,36.0,1833.0,688.0,1128.0,620.0,1.1483,112500.0,NEAR OCEAN --118.19,33.77,21.0,2103.0,727.0,1064.0,603.0,1.6178,137500.0,NEAR OCEAN --118.19,33.77,31.0,1711.0,691.0,1092.0,568.0,1.0714,150000.0,NEAR OCEAN --118.18,33.78,20.0,1852.0,556.0,1712.0,556.0,1.4565,152500.0,NEAR OCEAN --118.18,33.78,17.0,1419.0,436.0,1300.0,360.0,2.0769,100000.0,NEAR OCEAN --118.18,33.78,52.0,1180.0,381.0,1046.0,332.0,1.5603,162500.0,NEAR OCEAN --118.19,33.78,31.0,1648.0,484.0,898.0,457.0,1.5844,162500.0,NEAR OCEAN --118.19,33.78,8.0,992.0,393.0,694.0,331.0,2.5544,162500.0,NEAR OCEAN --118.19,33.78,29.0,1013.0,392.0,1083.0,316.0,1.8438,162500.0,NEAR OCEAN --118.19,33.78,42.0,1021.0,300.0,533.0,187.0,1.8036,175000.0,NEAR OCEAN --118.17,33.78,29.0,2920.0,962.0,3580.0,772.0,1.7393,140200.0,NEAR OCEAN --118.17,33.78,23.0,3768.0,1261.0,3940.0,1098.0,1.9647,186200.0,NEAR OCEAN --118.18,33.78,26.0,3042.0,1253.0,4812.0,1141.0,1.7701,146200.0,NEAR OCEAN --118.17,33.78,44.0,2364.0,746.0,3184.0,672.0,1.918,147500.0,NEAR OCEAN --118.17,33.77,36.0,2933.0,881.0,2077.0,838.0,2.2538,181300.0,NEAR OCEAN --118.17,33.77,45.0,2508.0,797.0,1340.0,720.0,2.6786,191100.0,NEAR OCEAN --118.17,33.77,38.0,2239.0,721.0,984.0,684.0,2.346,165600.0,NEAR OCEAN --118.17,33.77,39.0,2953.0,878.0,1379.0,785.0,2.1378,180400.0,NEAR OCEAN --118.17,33.77,12.0,4409.0,1401.0,3068.0,1262.0,2.2808,154700.0,NEAR OCEAN --118.18,33.77,29.0,1776.0,606.0,1391.0,488.0,1.1295,137500.0,NEAR OCEAN --118.18,33.77,30.0,1418.0,439.0,720.0,417.0,2.6371,159400.0,NEAR OCEAN --118.17,33.77,37.0,1127.0,327.0,492.0,331.0,2.675,241700.0,NEAR OCEAN --118.18,33.74,30.0,5915.0,1750.0,2136.0,1503.0,4.0968,310000.0,NEAR OCEAN --118.17,33.77,45.0,2151.0,643.0,1047.0,579.0,3.1149,218800.0,NEAR OCEAN --118.17,33.77,45.0,2143.0,697.0,1004.0,594.0,3.0153,220000.0,NEAR OCEAN --118.18,33.77,37.0,2653.0,754.0,1087.0,698.0,2.3523,325000.0,NEAR OCEAN --118.18,33.77,41.0,2048.0,601.0,852.0,533.0,2.5726,193800.0,NEAR OCEAN --118.18,33.77,49.0,2297.0,759.0,1105.0,629.0,1.8388,175000.0,NEAR OCEAN --118.16,33.77,49.0,3382.0,787.0,1314.0,756.0,3.8125,382100.0,NEAR OCEAN --118.17,33.74,36.0,2006.0,453.0,807.0,426.0,3.7838,500001.0,NEAR OCEAN --118.16,33.77,30.0,4439.0,1105.0,1749.0,1011.0,3.8984,306300.0,NEAR OCEAN --118.15,33.77,39.0,2428.0,634.0,1312.0,612.0,2.7212,266300.0,NEAR OCEAN --118.16,33.77,30.0,2800.0,757.0,1292.0,742.0,2.7614,272200.0,NEAR OCEAN --118.16,33.77,38.0,3235.0,769.0,1284.0,752.0,2.9384,304100.0,NEAR OCEAN --118.16,33.77,29.0,3078.0,786.0,1460.0,736.0,2.875,232500.0,NEAR OCEAN --118.17,33.77,25.0,4405.0,1262.0,2178.0,1090.0,3.0503,225000.0,NEAR OCEAN --118.16,33.78,15.0,4798.0,1374.0,3087.0,1212.0,2.127,163300.0,NEAR OCEAN --118.16,33.78,39.0,4075.0,1085.0,2470.0,1025.0,2.3317,222500.0,NEAR OCEAN --118.16,33.78,52.0,3248.0,853.0,1819.0,815.0,3.1739,222900.0,NEAR OCEAN --118.16,33.78,29.0,3684.0,1301.0,3891.0,1143.0,1.6955,179700.0,NEAR OCEAN --118.15,33.78,13.0,3056.0,861.0,1600.0,824.0,3.3003,207800.0,NEAR OCEAN --118.15,33.78,12.0,4436.0,1133.0,2176.0,1002.0,3.5812,198600.0,NEAR OCEAN --118.15,33.78,35.0,2768.0,752.0,1277.0,651.0,3.6193,250000.0,NEAR OCEAN --118.14,33.78,42.0,1898.0,488.0,940.0,483.0,3.4107,233300.0,NEAR OCEAN --118.13,33.78,45.0,1016.0,172.0,361.0,163.0,7.5,434500.0,NEAR OCEAN --118.14,33.77,49.0,2792.0,690.0,1301.0,648.0,3.2917,307400.0,NEAR OCEAN --118.14,33.77,51.0,2812.0,621.0,1171.0,566.0,3.875,342900.0,NEAR OCEAN --118.15,33.77,52.0,2204.0,498.0,899.0,445.0,4.1765,393900.0,NEAR OCEAN --118.15,33.77,41.0,3448.0,896.0,1621.0,838.0,4.5,339800.0,NEAR OCEAN --118.15,33.77,27.0,3043.0,787.0,1398.0,747.0,3.5528,271100.0,NEAR OCEAN --118.14,33.76,37.0,3242.0,698.0,1080.0,629.0,3.901,432500.0,NEAR OCEAN --118.16,33.72,29.0,2743.0,708.0,1059.0,651.0,3.625,500000.0,NEAR OCEAN --118.15,33.76,36.0,2916.0,785.0,1183.0,749.0,3.5985,500001.0,NEAR OCEAN --118.15,33.77,36.0,4366.0,1211.0,1912.0,1172.0,3.5292,361800.0,NEAR OCEAN --118.13,33.76,52.0,2216.0,526.0,940.0,530.0,4.5469,381000.0,NEAR OCEAN --118.13,33.76,44.0,1543.0,463.0,652.0,406.0,4.25,439300.0,NEAR OCEAN --118.14,33.75,39.0,1995.0,634.0,867.0,567.0,4.0795,400000.0,NEAR OCEAN --118.14,33.76,52.0,2677.0,642.0,1144.0,624.0,4.3889,378000.0,NEAR OCEAN --118.14,33.76,50.0,2960.0,761.0,1179.0,718.0,3.5214,398100.0,NEAR OCEAN --118.14,33.76,44.0,1633.0,536.0,741.0,513.0,3.385,408300.0,NEAR OCEAN --118.14,33.77,52.0,2208.0,409.0,791.0,408.0,5.8408,500000.0,NEAR OCEAN --118.14,33.76,50.0,914.0,167.0,322.0,165.0,4.7361,418800.0,NEAR OCEAN --118.13,33.76,46.0,2834.0,673.0,1175.0,670.0,4.7875,363800.0,NEAR OCEAN --118.13,33.76,44.0,2532.0,621.0,961.0,550.0,3.9352,406900.0,NEAR OCEAN --118.12,33.76,43.0,3070.0,668.0,1240.0,646.0,3.7813,461500.0,NEAR OCEAN --118.12,33.75,47.0,3330.0,569.0,1220.0,557.0,7.3672,500001.0,NEAR OCEAN --118.12,33.76,45.0,3035.0,516.0,1127.0,527.0,7.0796,500001.0,NEAR OCEAN --118.12,33.75,41.0,2072.0,491.0,742.0,414.0,3.9934,500001.0,NEAR OCEAN --118.14,33.71,36.0,2484.0,525.0,792.0,446.0,5.1815,500001.0,NEAR OCEAN --118.1,33.76,15.0,4690.0,1002.0,1879.0,974.0,5.6051,267400.0,NEAR OCEAN --118.11,33.77,15.0,9103.0,1847.0,3333.0,1712.0,5.1508,367300.0,NEAR OCEAN --118.12,33.77,20.0,4534.0,954.0,1941.0,892.0,6.0362,463500.0,NEAR OCEAN --118.12,33.77,10.0,7264.0,1137.0,2528.0,1057.0,10.2233,500001.0,NEAR OCEAN --118.13,33.77,52.0,3697.0,691.0,1436.0,671.0,4.6852,395200.0,NEAR OCEAN --118.13,33.77,37.0,4365.0,926.0,1661.0,868.0,5.3046,360700.0,NEAR OCEAN --118.32,33.35,27.0,1675.0,521.0,744.0,331.0,2.1579,450000.0,ISLAND --118.33,33.34,52.0,2359.0,591.0,1100.0,431.0,2.8333,414700.0,ISLAND --118.32,33.33,52.0,2127.0,512.0,733.0,288.0,3.3906,300000.0,ISLAND --118.32,33.34,52.0,996.0,264.0,341.0,160.0,2.7361,450000.0,ISLAND --118.48,33.43,29.0,716.0,214.0,422.0,173.0,2.6042,287500.0,ISLAND --118.29,33.96,32.0,3508.0,917.0,2794.0,839.0,1.554,100000.0,<1H OCEAN --118.3,33.95,36.0,1786.0,418.0,1367.0,393.0,1.5078,99600.0,<1H OCEAN --118.29,33.95,31.0,2839.0,792.0,2390.0,729.0,2.0,109800.0,<1H OCEAN --118.3,33.95,41.0,2057.0,550.0,1805.0,506.0,1.2455,100800.0,<1H OCEAN --118.3,33.95,27.0,1774.0,444.0,1622.0,402.0,2.2031,96900.0,<1H OCEAN --118.3,33.95,35.0,1182.0,305.0,977.0,283.0,1.5898,94000.0,<1H OCEAN --118.29,33.94,38.0,2407.0,630.0,1774.0,562.0,1.5615,108600.0,<1H OCEAN --118.3,33.94,36.0,3504.0,862.0,2521.0,836.0,2.5679,114900.0,<1H OCEAN --118.3,33.94,36.0,2041.0,531.0,1390.0,464.0,2.0114,99300.0,<1H OCEAN --118.29,33.94,32.0,2701.0,708.0,1880.0,590.0,1.6716,123800.0,<1H OCEAN --118.29,33.93,32.0,1815.0,488.0,1715.0,475.0,1.7244,111200.0,<1H OCEAN --118.3,33.93,35.0,1300.0,356.0,1216.0,326.0,1.2,99200.0,<1H OCEAN --118.3,33.93,36.0,2196.0,633.0,2017.0,583.0,1.3962,124300.0,<1H OCEAN --118.3,33.93,40.0,2434.0,477.0,1646.0,453.0,3.2024,128000.0,<1H OCEAN --118.31,33.93,37.0,1282.0,244.0,852.0,249.0,4.2917,127900.0,<1H OCEAN --118.31,33.94,44.0,1854.0,367.0,976.0,335.0,3.6583,126700.0,<1H OCEAN --118.31,33.94,40.0,1917.0,438.0,1021.0,383.0,2.2448,175000.0,<1H OCEAN --118.31,33.94,40.0,1323.0,243.0,684.0,229.0,3.2206,145800.0,<1H OCEAN --118.31,33.94,40.0,1550.0,,798.0,270.0,3.775,153800.0,<1H OCEAN --118.31,33.93,42.0,1173.0,201.0,602.0,186.0,5.5787,142000.0,<1H OCEAN --118.31,33.93,43.0,1834.0,292.0,997.0,295.0,4.9464,150300.0,<1H OCEAN --118.32,33.94,37.0,2740.0,504.0,1468.0,479.0,4.5368,168800.0,<1H OCEAN --118.32,33.93,37.0,2379.0,462.0,1327.0,445.0,4.25,172100.0,<1H OCEAN --118.33,33.93,37.0,1831.0,356.0,925.0,338.0,4.4091,148400.0,<1H OCEAN --118.33,33.93,38.0,694.0,112.0,412.0,119.0,6.0718,156000.0,<1H OCEAN --118.34,33.93,35.0,1213.0,284.0,742.0,253.0,4.0625,159900.0,<1H OCEAN --118.32,33.94,37.0,1487.0,296.0,863.0,291.0,3.1563,186200.0,<1H OCEAN --118.32,33.94,38.0,1067.0,170.0,499.0,169.0,4.6389,183800.0,<1H OCEAN --118.32,33.94,36.0,1722.0,280.0,830.0,261.0,4.0536,189000.0,<1H OCEAN --118.32,33.94,36.0,1153.0,224.0,639.0,226.0,4.0,192000.0,<1H OCEAN --118.33,33.94,31.0,3757.0,1102.0,3288.0,964.0,1.9309,137500.0,<1H OCEAN --118.32,33.96,47.0,1453.0,247.0,721.0,276.0,5.5176,191000.0,<1H OCEAN --118.32,33.95,43.0,3819.0,708.0,1505.0,712.0,3.1719,183500.0,<1H OCEAN --118.33,33.96,24.0,6513.0,1290.0,2636.0,1271.0,4.2099,189800.0,<1H OCEAN --118.32,33.95,44.0,2023.0,325.0,992.0,326.0,4.6667,175600.0,<1H OCEAN --118.32,33.95,44.0,2131.0,360.0,1040.0,330.0,5.0912,169800.0,<1H OCEAN --118.34,33.95,33.0,1923.0,459.0,1412.0,361.0,5.4359,194100.0,<1H OCEAN --118.32,33.97,52.0,1590.0,302.0,844.0,295.0,2.7139,164900.0,<1H OCEAN --118.32,33.96,47.0,1885.0,361.0,954.0,357.0,3.8512,171300.0,<1H OCEAN --118.32,33.96,47.0,1297.0,292.0,704.0,264.0,3.3214,166500.0,<1H OCEAN --118.32,33.97,46.0,1504.0,270.0,814.0,306.0,4.3919,157100.0,<1H OCEAN --118.34,33.97,45.0,2230.0,364.0,949.0,344.0,5.5,188200.0,<1H OCEAN --118.33,33.96,42.0,1686.0,361.0,737.0,319.0,2.3,189200.0,<1H OCEAN --118.33,33.96,42.0,2084.0,517.0,1062.0,451.0,2.0057,198200.0,<1H OCEAN --118.35,33.97,33.0,1495.0,474.0,1272.0,447.0,2.0694,143500.0,<1H OCEAN --118.35,33.97,25.0,1864.0,616.0,1710.0,575.0,2.2303,159400.0,<1H OCEAN --118.35,33.97,26.0,1725.0,431.0,1130.0,404.0,3.2708,128100.0,<1H OCEAN --118.35,33.97,26.0,3832.0,1074.0,2340.0,904.0,2.6734,143400.0,<1H OCEAN --118.35,33.98,33.0,1884.0,477.0,1518.0,449.0,3.1194,152800.0,<1H OCEAN --118.35,33.98,42.0,3081.0,680.0,1785.0,609.0,3.745,170800.0,<1H OCEAN --118.34,33.98,47.0,2649.0,684.0,2374.0,607.0,2.3882,137700.0,<1H OCEAN --118.34,33.98,40.0,2108.0,526.0,1922.0,544.0,3.163,137800.0,<1H OCEAN --118.34,33.98,45.0,1298.0,294.0,1064.0,268.0,3.7067,136600.0,<1H OCEAN --118.35,33.97,30.0,1548.0,330.0,757.0,349.0,3.8056,323800.0,<1H OCEAN --118.35,33.96,21.0,2714.0,881.0,1549.0,853.0,1.2094,157500.0,<1H OCEAN --118.35,33.96,26.0,2773.0,681.0,1560.0,631.0,3.1354,164300.0,<1H OCEAN --118.35,33.95,28.0,4770.0,1328.0,3201.0,1196.0,2.681,147700.0,<1H OCEAN --118.34,33.95,25.0,3762.0,1281.0,4015.0,1178.0,2.1587,143800.0,<1H OCEAN --118.35,33.95,30.0,2661.0,765.0,2324.0,724.0,3.0519,137500.0,<1H OCEAN --118.35,33.95,42.0,1779.0,431.0,1507.0,380.0,2.8892,159800.0,<1H OCEAN --118.35,33.95,45.0,1076.0,213.0,781.0,238.0,3.95,164000.0,<1H OCEAN --118.36,33.95,42.0,1116.0,303.0,1082.0,299.0,3.7237,170800.0,<1H OCEAN --118.36,33.96,21.0,1802.0,556.0,1286.0,557.0,2.7284,146900.0,<1H OCEAN --118.36,33.96,25.0,1849.0,518.0,1498.0,451.0,2.8378,170000.0,<1H OCEAN --118.36,33.96,26.0,3543.0,,2742.0,951.0,2.5504,151300.0,<1H OCEAN --118.36,33.95,26.0,3231.0,1089.0,3193.0,1020.0,2.6535,177200.0,<1H OCEAN --118.36,33.98,45.0,1559.0,305.0,891.0,341.0,4.4038,259400.0,<1H OCEAN --118.36,33.98,46.0,1425.0,283.0,782.0,273.0,5.057,246300.0,<1H OCEAN --118.36,33.98,39.0,813.0,185.0,344.0,154.0,3.5833,218800.0,<1H OCEAN --118.37,33.97,26.0,6672.0,1729.0,3333.0,1557.0,2.9646,179800.0,<1H OCEAN --118.36,33.97,18.0,1284.0,283.0,990.0,289.0,4.0179,195800.0,<1H OCEAN --118.37,33.97,21.0,3616.0,1060.0,2515.0,945.0,2.7464,153100.0,<1H OCEAN --118.36,33.98,29.0,2861.0,816.0,1715.0,775.0,2.7712,160900.0,<1H OCEAN --118.36,33.97,19.0,4651.0,1281.0,2917.0,1121.0,2.6823,142500.0,<1H OCEAN --118.36,33.96,17.0,3431.0,934.0,2365.0,810.0,3.0393,129200.0,<1H OCEAN --118.36,33.96,37.0,2146.0,573.0,2009.0,592.0,3.6583,177300.0,<1H OCEAN --118.37,33.96,26.0,138.0,23.0,100.0,20.0,4.875,175000.0,<1H OCEAN --118.37,33.95,35.0,924.0,349.0,1376.0,358.0,2.2297,262500.0,<1H OCEAN --118.36,33.95,42.0,1139.0,302.0,1283.0,306.0,4.1635,163900.0,<1H OCEAN --118.36,33.95,42.0,2532.0,627.0,2038.0,591.0,2.875,177500.0,<1H OCEAN --118.37,33.95,32.0,1067.0,286.0,1053.0,277.0,2.8438,181700.0,<1H OCEAN --118.37,33.95,52.0,836.0,175.0,747.0,166.0,4.125,174000.0,<1H OCEAN --118.36,33.94,39.0,1390.0,410.0,1666.0,371.0,3.3056,156800.0,<1H OCEAN --118.36,33.94,38.0,2169.0,688.0,3036.0,639.0,2.3125,148500.0,<1H OCEAN --118.37,33.94,29.0,2265.0,813.0,3425.0,781.0,2.3675,149400.0,<1H OCEAN --118.36,33.93,30.0,1132.0,347.0,1433.0,341.0,2.68,170000.0,<1H OCEAN --118.36,33.93,40.0,1625.0,500.0,2036.0,476.0,2.6298,156500.0,<1H OCEAN --118.36,33.94,33.0,939.0,284.0,1309.0,250.0,3.4063,152300.0,<1H OCEAN --118.34,33.93,36.0,1528.0,486.0,1824.0,470.0,2.2679,153900.0,<1H OCEAN --118.35,33.93,35.0,1050.0,252.0,918.0,236.0,1.7344,146900.0,<1H OCEAN --118.35,33.93,34.0,617.0,189.0,810.0,180.0,1.9766,162500.0,<1H OCEAN --118.35,33.93,33.0,2040.0,576.0,2649.0,561.0,2.3375,170600.0,<1H OCEAN --118.35,33.94,35.0,1451.0,435.0,1888.0,420.0,2.8462,149100.0,<1H OCEAN --118.35,33.94,38.0,1794.0,508.0,2188.0,454.0,2.6654,142200.0,<1H OCEAN --118.35,33.94,36.0,2225.0,601.0,2755.0,610.0,2.5547,150400.0,<1H OCEAN --118.35,33.94,42.0,1028.0,278.0,1369.0,261.0,3.3125,144600.0,<1H OCEAN --118.34,33.94,37.0,3107.0,903.0,3456.0,734.0,2.182,147500.0,<1H OCEAN --118.34,33.94,36.0,2796.0,1041.0,4033.0,944.0,2.4886,160700.0,<1H OCEAN --118.33,33.93,37.0,4916.0,1134.0,3533.0,1035.0,3.2862,152300.0,<1H OCEAN --118.34,33.93,33.0,4294.0,1224.0,4512.0,1189.0,2.8304,143700.0,<1H OCEAN --118.34,33.93,32.0,1254.0,399.0,1281.0,386.0,2.2976,155700.0,<1H OCEAN --118.34,33.93,37.0,1638.0,407.0,1341.0,369.0,3.0677,167700.0,<1H OCEAN --118.35,33.93,26.0,3156.0,857.0,2394.0,787.0,3.01,191900.0,<1H OCEAN --118.35,33.93,31.0,2746.0,697.0,1973.0,598.0,3.5139,192800.0,<1H OCEAN --118.35,33.93,25.0,2260.0,692.0,1603.0,673.0,2.11,223300.0,<1H OCEAN --118.36,33.93,27.0,4445.0,1231.0,3340.0,1113.0,3.1656,204500.0,<1H OCEAN --118.34,33.92,29.0,1475.0,349.0,965.0,370.0,3.3558,199600.0,<1H OCEAN --118.35,33.92,24.0,2728.0,845.0,2023.0,773.0,2.75,239700.0,<1H OCEAN --118.35,33.92,29.0,736.0,232.0,584.0,231.0,3.6167,200000.0,<1H OCEAN --118.36,33.92,26.0,3695.0,1144.0,2308.0,1009.0,2.6667,229300.0,<1H OCEAN --118.36,33.92,46.0,1231.0,231.0,793.0,256.0,4.1023,226800.0,<1H OCEAN --118.36,33.92,19.0,2807.0,883.0,1546.0,815.0,2.6375,233800.0,<1H OCEAN --118.36,33.93,19.0,3103.0,918.0,2033.0,738.0,2.6961,212500.0,<1H OCEAN --118.37,33.93,10.0,199.0,41.0,61.0,56.0,2.8958,245800.0,<1H OCEAN --118.37,33.92,44.0,938.0,181.0,502.0,171.0,4.4722,218300.0,<1H OCEAN --118.37,33.92,36.0,1075.0,197.0,509.0,197.0,4.9688,238900.0,<1H OCEAN --118.37,33.92,40.0,928.0,187.0,521.0,185.0,5.5255,242700.0,<1H OCEAN --118.37,33.92,39.0,1073.0,206.0,556.0,204.0,4.8611,245600.0,<1H OCEAN --118.37,33.93,46.0,1130.0,201.0,503.0,196.0,4.4861,246300.0,<1H OCEAN --118.37,33.93,46.0,442.0,88.0,255.0,94.0,4.4474,246900.0,<1H OCEAN --118.36,33.93,44.0,520.0,116.0,392.0,106.0,3.0132,202500.0,<1H OCEAN --118.36,33.91,41.0,2048.0,439.0,1191.0,429.0,3.8,222500.0,<1H OCEAN --118.36,33.91,42.0,1949.0,422.0,1184.0,423.0,4.3333,225600.0,<1H OCEAN --118.36,33.9,42.0,1935.0,388.0,1136.0,379.0,4.74,230000.0,<1H OCEAN --118.36,33.9,40.0,1271.0,276.0,725.0,234.0,5.0452,231900.0,<1H OCEAN --118.37,33.91,41.0,1869.0,427.0,1334.0,435.0,3.9355,227800.0,<1H OCEAN --118.37,33.91,35.0,1742.0,283.0,812.0,282.0,5.6704,303700.0,<1H OCEAN --118.37,33.9,35.0,1651.0,269.0,707.0,252.0,5.6482,294800.0,<1H OCEAN --118.37,33.9,32.0,332.0,103.0,177.0,102.0,3.3409,256300.0,<1H OCEAN --118.38,33.91,36.0,2904.0,515.0,1463.0,534.0,5.8374,289600.0,<1H OCEAN --118.35,33.91,19.0,1949.0,559.0,1282.0,498.0,2.7813,231300.0,<1H OCEAN --118.35,33.91,31.0,2583.0,663.0,1675.0,612.0,3.5234,265000.0,<1H OCEAN --118.35,33.91,28.0,2108.0,534.0,1485.0,536.0,4.0775,241400.0,<1H OCEAN --118.35,33.91,26.0,2159.0,523.0,1331.0,520.0,3.87,264500.0,<1H OCEAN --118.35,33.91,25.0,1884.0,554.0,1337.0,549.0,2.8512,272800.0,<1H OCEAN --118.35,33.9,25.0,3309.0,902.0,2299.0,837.0,3.0417,237000.0,<1H OCEAN --118.35,33.91,32.0,1660.0,366.0,928.0,398.0,4.3187,269700.0,<1H OCEAN --118.35,33.91,29.0,2461.0,535.0,1236.0,482.0,4.8409,244000.0,<1H OCEAN --118.35,33.91,34.0,2055.0,448.0,1134.0,408.0,3.825,235400.0,<1H OCEAN --118.36,33.91,36.0,2064.0,474.0,1366.0,421.0,4.1,243100.0,<1H OCEAN --118.35,33.9,32.0,1056.0,225.0,565.0,231.0,3.9485,230000.0,<1H OCEAN --118.36,33.9,39.0,1166.0,222.0,640.0,206.0,3.5313,230400.0,<1H OCEAN --118.33,33.92,23.0,969.0,288.0,670.0,251.0,3.267,185400.0,<1H OCEAN --118.33,33.91,39.0,1224.0,312.0,1106.0,333.0,3.3491,181800.0,<1H OCEAN --118.34,33.91,17.0,3724.0,1023.0,2536.0,971.0,3.2649,202100.0,<1H OCEAN --118.33,33.91,35.0,1092.0,302.0,962.0,297.0,3.5903,183300.0,<1H OCEAN --118.34,33.91,8.0,3937.0,1404.0,2691.0,1142.0,2.4741,185700.0,<1H OCEAN --118.34,33.92,6.0,1047.0,271.0,740.0,248.0,3.425,193800.0,<1H OCEAN --118.34,33.91,12.0,9975.0,3638.0,7429.0,3405.0,2.6689,192300.0,<1H OCEAN --118.33,33.91,8.0,10731.0,3335.0,7211.0,3028.0,2.455,192700.0,<1H OCEAN --118.31,33.91,31.0,1415.0,339.0,874.0,289.0,3.8173,177900.0,<1H OCEAN --118.31,33.91,36.0,961.0,173.0,625.0,179.0,4.2596,181100.0,<1H OCEAN --118.32,33.91,33.0,1729.0,396.0,1073.0,344.0,4.2083,180500.0,<1H OCEAN --118.32,33.91,35.0,940.0,197.0,640.0,215.0,4.2,181300.0,<1H OCEAN --118.32,33.91,35.0,881.0,159.0,605.0,170.0,3.6654,184500.0,<1H OCEAN --118.32,33.91,34.0,3041.0,677.0,1920.0,640.0,4.5304,181300.0,<1H OCEAN --118.32,33.91,34.0,1068.0,198.0,757.0,231.0,5.7528,180500.0,<1H OCEAN --118.32,33.9,35.0,3189.0,680.0,1882.0,651.0,3.6625,188000.0,<1H OCEAN --118.31,33.92,35.0,1307.0,246.0,672.0,219.0,4.8456,146400.0,<1H OCEAN --118.31,33.93,35.0,1580.0,266.0,926.0,282.0,5.0653,158000.0,<1H OCEAN --118.32,33.93,34.0,1536.0,273.0,804.0,287.0,4.9615,157800.0,<1H OCEAN --118.32,33.92,35.0,1281.0,219.0,710.0,184.0,4.8304,152800.0,<1H OCEAN --118.29,33.93,31.0,3894.0,1017.0,3590.0,962.0,2.0437,137200.0,<1H OCEAN --118.29,33.92,34.0,1799.0,362.0,1293.0,355.0,3.692,145200.0,<1H OCEAN --118.29,33.92,34.0,1374.0,240.0,906.0,248.0,5.3292,155500.0,<1H OCEAN --118.3,33.92,34.0,2053.0,382.0,1258.0,380.0,3.0139,154700.0,<1H OCEAN --118.3,33.93,29.0,2228.0,396.0,1140.0,352.0,3.7969,169400.0,<1H OCEAN --118.3,33.91,30.0,1842.0,476.0,1491.0,420.0,3.0147,155100.0,<1H OCEAN --118.3,33.91,34.0,1617.0,493.0,1530.0,500.0,2.6182,172600.0,<1H OCEAN --118.31,33.9,28.0,1576.0,400.0,891.0,378.0,2.6312,171300.0,<1H OCEAN --118.29,33.91,28.0,1501.0,446.0,1028.0,418.0,2.3043,177500.0,<1H OCEAN --118.29,33.9,27.0,1013.0,394.0,1067.0,400.0,1.7714,159400.0,<1H OCEAN --118.3,33.9,29.0,2617.0,668.0,1868.0,647.0,3.6,208800.0,<1H OCEAN --118.3,33.9,27.0,3267.0,762.0,2099.0,647.0,3.4,224100.0,<1H OCEAN --118.3,33.9,13.0,2455.0,661.0,1975.0,618.0,2.9559,173600.0,<1H OCEAN --118.3,33.9,19.0,2421.0,689.0,1726.0,660.0,3.287,181400.0,<1H OCEAN --118.3,33.89,30.0,2756.0,858.0,1806.0,787.0,3.0329,207800.0,<1H OCEAN --118.3,33.89,37.0,2132.0,565.0,1369.0,565.0,3.285,218100.0,<1H OCEAN --118.31,33.9,38.0,1400.0,399.0,1131.0,405.0,3.5417,198400.0,<1H OCEAN --118.29,33.89,33.0,2138.0,567.0,1072.0,528.0,2.7428,208900.0,<1H OCEAN --118.29,33.89,32.0,2355.0,583.0,1605.0,571.0,4.2171,218200.0,<1H OCEAN --118.29,33.88,36.0,1751.0,438.0,1175.0,419.0,3.0739,218600.0,<1H OCEAN --118.29,33.88,21.0,4946.0,1231.0,3186.0,1167.0,3.3281,237000.0,<1H OCEAN --118.3,33.87,27.0,3144.0,722.0,1510.0,680.0,3.1597,214700.0,<1H OCEAN --118.3,33.87,31.0,1398.0,261.0,823.0,263.0,5.0641,234900.0,<1H OCEAN --118.3,33.88,26.0,1221.0,312.0,807.0,330.0,4.0536,253600.0,<1H OCEAN --118.3,33.88,29.0,850.0,229.0,563.0,204.0,3.7375,247700.0,<1H OCEAN --118.3,33.88,30.0,1348.0,333.0,885.0,322.0,3.2574,195300.0,<1H OCEAN --118.3,33.88,35.0,3227.0,749.0,1881.0,696.0,2.8445,242100.0,<1H OCEAN --118.31,33.88,32.0,2421.0,671.0,1491.0,587.0,3.5644,242300.0,<1H OCEAN --118.31,33.88,35.0,1939.0,412.0,1036.0,400.0,3.5556,238000.0,<1H OCEAN --118.31,33.88,21.0,1490.0,430.0,686.0,400.0,2.3812,237500.0,<1H OCEAN --118.31,33.9,30.0,2407.0,581.0,1724.0,531.0,3.4792,194700.0,<1H OCEAN --118.31,33.89,37.0,2278.0,508.0,1257.0,498.0,3.7639,220600.0,<1H OCEAN --118.31,33.89,35.0,2144.0,423.0,1192.0,417.0,4.1458,231500.0,<1H OCEAN --118.32,33.9,36.0,1520.0,300.0,831.0,291.0,4.0473,212100.0,<1H OCEAN --118.32,33.9,36.0,1741.0,412.0,1245.0,423.0,4.1344,210300.0,<1H OCEAN --118.32,33.9,37.0,1664.0,401.0,1316.0,409.0,3.0526,216400.0,<1H OCEAN --118.32,33.89,45.0,1928.0,453.0,1323.0,458.0,4.2813,210100.0,<1H OCEAN --118.32,33.89,44.0,1300.0,252.0,695.0,249.0,5.1669,220600.0,<1H OCEAN --118.32,33.89,34.0,2675.0,560.0,1270.0,492.0,4.5053,242000.0,<1H OCEAN --118.33,33.9,21.0,6603.0,1984.0,5546.0,1745.0,2.6091,163900.0,<1H OCEAN --118.34,33.9,23.0,2395.0,498.0,1309.0,493.0,4.9779,224600.0,<1H OCEAN --118.34,33.9,37.0,542.0,105.0,355.0,118.0,5.5133,227300.0,<1H OCEAN --118.34,33.9,36.0,1158.0,219.0,628.0,253.0,4.7426,242700.0,<1H OCEAN --118.34,33.9,36.0,1342.0,259.0,706.0,261.0,4.1776,236600.0,<1H OCEAN --118.33,33.89,39.0,1880.0,361.0,982.0,357.0,4.1953,226900.0,<1H OCEAN --118.33,33.89,42.0,1816.0,338.0,897.0,306.0,5.1874,230800.0,<1H OCEAN --118.34,33.89,36.0,2392.0,444.0,1346.0,445.0,6.0088,245900.0,<1H OCEAN --118.34,33.89,36.0,2274.0,411.0,1232.0,423.0,5.373,244500.0,<1H OCEAN --118.35,33.9,13.0,2887.0,853.0,2197.0,800.0,2.8777,207900.0,<1H OCEAN --118.35,33.9,31.0,1547.0,,956.0,287.0,3.4698,225000.0,<1H OCEAN --118.35,33.9,31.0,981.0,222.0,734.0,239.0,4.875,232400.0,<1H OCEAN --118.35,33.89,29.0,2940.0,708.0,2175.0,684.0,3.6486,229000.0,<1H OCEAN --118.35,33.89,34.0,1740.0,387.0,1249.0,375.0,4.1552,233900.0,<1H OCEAN --118.36,33.9,41.0,1355.0,349.0,655.0,329.0,2.9551,205000.0,<1H OCEAN --118.35,33.9,22.0,1127.0,287.0,697.0,241.0,3.3971,220300.0,<1H OCEAN --118.35,33.89,30.0,1143.0,299.0,776.0,273.0,4.2829,240000.0,<1H OCEAN --118.36,33.89,37.0,1719.0,426.0,1266.0,424.0,3.375,228000.0,<1H OCEAN --118.36,33.89,34.0,760.0,174.0,723.0,198.0,5.3169,227600.0,<1H OCEAN --118.36,33.9,18.0,3380.0,922.0,2276.0,854.0,4.0727,214000.0,<1H OCEAN --118.36,33.89,27.0,2837.0,684.0,2141.0,648.0,3.1325,215000.0,<1H OCEAN --118.36,33.88,33.0,2408.0,534.0,1644.0,523.0,4.2454,236800.0,<1H OCEAN --118.36,33.88,28.0,1313.0,319.0,827.0,308.0,2.65,260800.0,<1H OCEAN --118.36,33.88,25.0,2845.0,710.0,1611.0,628.0,3.2049,267400.0,<1H OCEAN --118.36,33.88,22.0,1388.0,336.0,930.0,287.0,2.7981,275000.0,<1H OCEAN --118.36,33.88,26.0,1375.0,286.0,829.0,278.0,3.9844,230700.0,<1H OCEAN --118.35,33.89,25.0,1769.0,440.0,1371.0,414.0,3.0833,232700.0,<1H OCEAN --118.35,33.88,36.0,1583.0,411.0,1097.0,350.0,4.0737,238200.0,<1H OCEAN --118.34,33.88,42.0,725.0,183.0,493.0,172.0,3.2589,233300.0,<1H OCEAN --118.35,33.88,44.0,822.0,180.0,480.0,177.0,4.4,225800.0,<1H OCEAN --118.35,33.88,36.0,1567.0,362.0,1054.0,386.0,3.2594,233900.0,<1H OCEAN --118.35,33.88,25.0,1459.0,362.0,1150.0,354.0,3.35,237500.0,<1H OCEAN --118.3,33.74,40.0,1896.0,416.0,950.0,383.0,2.425,255000.0,NEAR OCEAN --118.3,33.74,28.0,1065.0,215.0,887.0,217.0,3.9375,270500.0,NEAR OCEAN --118.39,33.92,41.0,80.0,20.0,61.0,23.0,5.25,247200.0,<1H OCEAN --118.4,33.92,25.0,1453.0,271.0,695.0,283.0,5.9499,345800.0,<1H OCEAN --118.4,33.92,32.0,2828.0,629.0,1313.0,534.0,4.5987,363800.0,<1H OCEAN --118.4,33.93,35.0,2217.0,447.0,1000.0,450.0,4.7319,376100.0,<1H OCEAN --118.41,33.93,38.0,3328.0,625.0,1455.0,619.0,5.0596,363900.0,<1H OCEAN --118.41,33.92,32.0,2590.0,607.0,1132.0,555.0,4.2333,358000.0,<1H OCEAN --118.41,33.92,22.0,2340.0,584.0,1141.0,554.0,4.5729,337500.0,<1H OCEAN --118.41,33.93,22.0,2514.0,605.0,1225.0,568.0,4.1818,339700.0,<1H OCEAN --118.41,33.92,38.0,1437.0,272.0,590.0,250.0,5.2338,358000.0,<1H OCEAN --118.41,33.92,29.0,1436.0,401.0,674.0,343.0,3.6389,275000.0,<1H OCEAN --118.42,33.92,25.0,3521.0,852.0,1524.0,764.0,3.8086,361300.0,<1H OCEAN --118.42,33.92,41.0,1621.0,279.0,756.0,277.0,5.0594,346000.0,<1H OCEAN --118.42,33.93,39.0,2988.0,605.0,1466.0,610.0,4.9286,341400.0,<1H OCEAN --118.42,33.93,28.0,4603.0,993.0,2191.0,943.0,4.5743,382200.0,<1H OCEAN --118.42,33.9,29.0,1929.0,523.0,686.0,455.0,5.5347,500001.0,<1H OCEAN --118.43,33.9,27.0,1536.0,377.0,553.0,326.0,5.4088,500001.0,<1H OCEAN --118.4,33.9,34.0,2674.0,435.0,1087.0,431.0,7.3151,492200.0,<1H OCEAN --118.4,33.9,37.0,2458.0,400.0,920.0,375.0,7.8924,500001.0,<1H OCEAN --118.41,33.9,39.0,2311.0,404.0,1044.0,380.0,8.468,472100.0,<1H OCEAN --118.41,33.9,39.0,2040.0,336.0,926.0,351.0,7.5552,500001.0,<1H OCEAN --118.44,33.88,35.0,2020.0,451.0,724.0,399.0,6.6494,500001.0,NEAR OCEAN --118.42,33.9,37.0,1576.0,345.0,662.0,340.0,5.308,500001.0,<1H OCEAN --118.42,33.9,43.0,1394.0,321.0,552.0,296.0,5.9596,500001.0,<1H OCEAN --118.41,33.89,31.0,1428.0,320.0,677.0,331.0,7.2316,500001.0,<1H OCEAN --118.41,33.89,35.0,1194.0,292.0,507.0,295.0,9.0812,500001.0,<1H OCEAN --118.41,33.89,38.0,4166.0,828.0,1600.0,770.0,6.3861,500001.0,<1H OCEAN --118.41,33.89,34.0,2959.0,639.0,1143.0,593.0,6.348,500001.0,<1H OCEAN --118.41,33.89,31.0,702.0,161.0,236.0,144.0,5.0497,500001.0,<1H OCEAN --118.4,33.9,38.0,2868.0,466.0,1098.0,438.0,7.9059,477100.0,<1H OCEAN --118.4,33.89,36.0,2334.0,430.0,1033.0,407.0,6.6321,481500.0,<1H OCEAN --118.4,33.89,31.0,2926.0,492.0,1149.0,476.0,7.9611,500001.0,<1H OCEAN --118.4,33.89,36.0,2127.0,314.0,807.0,306.0,8.1596,500001.0,<1H OCEAN --118.39,33.9,7.0,4314.0,725.0,1699.0,718.0,8.2037,500001.0,<1H OCEAN --118.38,33.89,35.0,1778.0,330.0,732.0,312.0,6.5745,379300.0,<1H OCEAN --118.39,33.89,30.0,2532.0,464.0,1056.0,419.0,6.3434,460400.0,<1H OCEAN --118.39,33.89,38.0,1851.0,332.0,750.0,314.0,7.3356,422700.0,<1H OCEAN --118.39,33.89,40.0,826.0,143.0,389.0,147.0,7.1845,438100.0,<1H OCEAN --118.36,33.89,40.0,756.0,122.0,371.0,130.0,5.0299,329200.0,<1H OCEAN --118.36,33.88,44.0,1362.0,237.0,709.0,247.0,4.4271,336200.0,<1H OCEAN --118.37,33.88,44.0,1325.0,245.0,669.0,253.0,4.4211,324000.0,<1H OCEAN --118.37,33.88,21.0,966.0,172.0,417.0,158.0,5.5335,342600.0,<1H OCEAN --118.38,33.88,33.0,1313.0,244.0,561.0,217.0,5.2999,359400.0,<1H OCEAN --118.37,33.89,21.0,2696.0,548.0,1142.0,473.0,5.6091,356800.0,<1H OCEAN --118.37,33.88,20.0,2439.0,474.0,1219.0,497.0,5.9619,335900.0,<1H OCEAN --118.36,33.88,31.0,2518.0,543.0,1107.0,508.0,4.7404,295800.0,<1H OCEAN --118.36,33.87,19.0,2512.0,575.0,1275.0,544.0,4.9375,293000.0,<1H OCEAN --118.37,33.87,19.0,757.0,148.0,361.0,141.0,6.02,304200.0,<1H OCEAN --118.37,33.88,27.0,1688.0,331.0,811.0,327.0,4.5357,334200.0,<1H OCEAN --118.38,33.87,27.0,2287.0,491.0,1101.0,466.0,4.675,316900.0,<1H OCEAN --118.38,33.88,27.0,3039.0,606.0,1421.0,564.0,5.5771,345500.0,<1H OCEAN --118.37,33.88,26.0,2620.0,530.0,1282.0,525.0,4.4828,340700.0,<1H OCEAN --118.36,33.87,17.0,1082.0,291.0,598.0,281.0,3.9868,281900.0,<1H OCEAN --118.36,33.87,22.0,2114.0,541.0,1300.0,538.0,3.4208,290000.0,<1H OCEAN --118.37,33.87,18.0,2516.0,485.0,1128.0,433.0,5.0114,338600.0,<1H OCEAN --118.37,33.87,13.0,2907.0,726.0,1573.0,694.0,3.5048,294000.0,<1H OCEAN --118.36,33.86,35.0,2126.0,434.0,1044.0,433.0,5.5456,297400.0,<1H OCEAN --118.36,33.86,37.0,1768.0,314.0,802.0,290.0,5.0784,295900.0,<1H OCEAN --118.36,33.86,34.0,1865.0,345.0,963.0,302.0,5.543,305900.0,<1H OCEAN --118.37,33.86,28.0,2685.0,581.0,1243.0,529.0,4.119,324000.0,<1H OCEAN --118.37,33.87,23.0,1829.0,331.0,891.0,356.0,6.5755,359900.0,<1H OCEAN --118.38,33.87,21.0,4151.0,1018.0,2054.0,925.0,4.9821,292900.0,<1H OCEAN --118.38,33.87,17.0,2791.0,579.0,1467.0,583.0,5.7415,321900.0,<1H OCEAN --118.38,33.87,23.0,2387.0,418.0,1008.0,415.0,5.8518,337900.0,<1H OCEAN --118.39,33.87,19.0,3303.0,584.0,1329.0,569.0,7.521,340400.0,<1H OCEAN --118.38,33.86,12.0,4235.0,735.0,1798.0,683.0,6.4242,365500.0,<1H OCEAN --118.38,33.86,29.0,2787.0,475.0,1182.0,444.0,6.7613,352700.0,<1H OCEAN --118.38,33.86,24.0,3124.0,560.0,1312.0,542.0,6.3021,333800.0,<1H OCEAN --118.38,33.86,15.0,1778.0,311.0,908.0,330.0,7.674,329300.0,<1H OCEAN --118.38,33.87,33.0,1993.0,371.0,918.0,361.0,6.9021,337600.0,<1H OCEAN --118.38,33.88,39.0,1489.0,282.0,743.0,270.0,4.8611,456100.0,<1H OCEAN --118.38,33.88,34.0,1830.0,315.0,822.0,307.0,5.0602,453700.0,<1H OCEAN --118.39,33.88,33.0,2496.0,387.0,1098.0,404.0,7.6685,474300.0,<1H OCEAN --118.39,33.88,34.0,1973.0,367.0,843.0,345.0,6.077,472700.0,<1H OCEAN --118.39,33.88,33.0,2543.0,439.0,1098.0,416.0,5.9683,495500.0,<1H OCEAN --118.39,33.88,31.0,1448.0,244.0,607.0,259.0,8.1513,500001.0,<1H OCEAN --118.39,33.88,35.0,1267.0,216.0,521.0,191.0,6.0441,470000.0,<1H OCEAN --118.38,33.88,36.0,2501.0,443.0,1031.0,422.0,4.75,442100.0,<1H OCEAN --118.4,33.88,36.0,3022.0,482.0,1278.0,494.0,7.2651,500001.0,<1H OCEAN --118.4,33.88,36.0,1543.0,214.0,474.0,187.0,9.3399,500001.0,<1H OCEAN --118.4,33.88,35.0,1753.0,296.0,615.0,275.0,7.5,500001.0,<1H OCEAN --118.41,33.88,34.0,540.0,107.0,213.0,104.0,6.3403,500001.0,<1H OCEAN --118.4,33.88,35.0,1060.0,191.0,444.0,196.0,8.0015,500001.0,<1H OCEAN --118.41,33.88,43.0,2492.0,449.0,1033.0,437.0,7.9614,500001.0,<1H OCEAN --118.41,33.88,40.0,925.0,254.0,371.0,227.0,5.2533,500001.0,<1H OCEAN --118.41,33.88,34.0,1471.0,308.0,498.0,264.0,7.0842,500001.0,<1H OCEAN --118.43,33.87,41.0,847.0,173.0,344.0,170.0,6.822,500001.0,NEAR OCEAN --118.4,33.87,26.0,6712.0,1441.0,2803.0,1394.0,5.2276,434500.0,<1H OCEAN --118.39,33.87,34.0,2395.0,469.0,1087.0,438.0,5.9683,394600.0,<1H OCEAN --118.43,33.86,34.0,358.0,87.0,162.0,84.0,7.1264,500001.0,NEAR OCEAN --118.4,33.88,42.0,1516.0,341.0,634.0,327.0,6.2356,472700.0,<1H OCEAN --118.4,33.87,40.0,1679.0,372.0,719.0,385.0,6.435,479500.0,<1H OCEAN --118.4,33.87,38.0,2398.0,431.0,911.0,392.0,5.2319,500001.0,<1H OCEAN --118.4,33.87,45.0,2093.0,497.0,842.0,472.0,6.3231,500001.0,<1H OCEAN --118.4,33.87,34.0,3145.0,786.0,1352.0,727.0,5.0976,469800.0,<1H OCEAN --118.4,33.87,45.0,2181.0,505.0,965.0,471.0,5.3816,500001.0,<1H OCEAN --118.39,33.86,34.0,2361.0,442.0,915.0,437.0,5.687,392400.0,<1H OCEAN --118.39,33.86,28.0,3619.0,764.0,1735.0,789.0,6.1404,368400.0,<1H OCEAN --118.39,33.86,24.0,2386.0,582.0,1152.0,568.0,4.8971,400700.0,<1H OCEAN --118.4,33.86,18.0,5152.0,1365.0,2286.0,1243.0,5.1677,380800.0,<1H OCEAN --118.4,33.85,29.0,2085.0,533.0,919.0,489.0,5.6017,430000.0,<1H OCEAN --118.4,33.86,41.0,2237.0,597.0,938.0,523.0,4.7105,500001.0,<1H OCEAN --118.42,33.85,43.0,1584.0,477.0,799.0,433.0,5.0322,435000.0,NEAR OCEAN --118.38,33.85,28.0,4430.0,928.0,2131.0,885.0,4.9384,378100.0,<1H OCEAN --118.38,33.85,31.0,3533.0,729.0,1647.0,679.0,5.5843,384600.0,<1H OCEAN --118.39,33.85,24.0,4373.0,871.0,1830.0,824.0,5.7128,366200.0,<1H OCEAN --118.41,33.85,16.0,6123.0,1989.0,2853.0,1789.0,4.425,336400.0,NEAR OCEAN --118.39,33.85,17.0,1610.0,379.0,670.0,341.0,4.3594,349000.0,<1H OCEAN --118.38,33.84,25.0,5775.0,1149.0,2637.0,1117.0,5.4968,379800.0,<1H OCEAN --118.38,33.83,20.0,2270.0,498.0,1070.0,521.0,4.4615,384800.0,<1H OCEAN --118.38,33.83,40.0,3070.0,570.0,1264.0,506.0,5.1626,432700.0,<1H OCEAN --118.38,33.84,26.0,2869.0,567.0,1157.0,538.0,6.0382,355300.0,<1H OCEAN --118.39,33.84,16.0,2472.0,572.0,965.0,529.0,5.137,348600.0,<1H OCEAN --118.43,33.83,19.0,6206.0,1611.0,2455.0,1472.0,5.145,420200.0,NEAR OCEAN --118.39,33.83,32.0,2075.0,539.0,954.0,519.0,5.637,500001.0,NEAR OCEAN --118.39,33.82,30.0,3433.0,918.0,1526.0,828.0,4.5817,500001.0,NEAR OCEAN --118.43,33.82,34.0,2112.0,614.0,946.0,574.0,4.6048,500001.0,NEAR OCEAN --118.37,33.82,32.0,2815.0,607.0,1338.0,609.0,4.5687,381200.0,<1H OCEAN --118.38,33.82,35.0,3053.0,623.0,1311.0,589.0,5.1589,439200.0,NEAR OCEAN --118.38,33.82,38.0,1318.0,237.0,547.0,225.0,6.0308,416700.0,NEAR OCEAN --118.38,33.83,35.0,2152.0,454.0,902.0,414.0,4.5179,427200.0,<1H OCEAN --118.31,33.88,33.0,2147.0,505.0,1371.0,498.0,2.4219,260700.0,<1H OCEAN --118.32,33.87,28.0,3763.0,762.0,1967.0,724.0,5.3244,271900.0,<1H OCEAN --118.32,33.88,35.0,1818.0,339.0,828.0,319.0,4.3036,282100.0,<1H OCEAN --118.32,33.88,34.0,1803.0,341.0,947.0,333.0,5.5538,280300.0,<1H OCEAN --118.32,33.88,37.0,1402.0,254.0,722.0,251.0,6.4781,269000.0,<1H OCEAN --118.33,33.88,30.0,1856.0,444.0,899.0,435.0,3.1505,270000.0,<1H OCEAN --118.33,33.88,36.0,1271.0,346.0,811.0,345.0,3.2417,283300.0,<1H OCEAN --118.33,33.87,44.0,724.0,133.0,373.0,133.0,3.9167,265600.0,<1H OCEAN --118.34,33.87,28.0,4605.0,1188.0,2558.0,1093.0,3.6988,266600.0,<1H OCEAN --118.34,33.88,31.0,3122.0,727.0,1885.0,715.0,3.8657,298400.0,<1H OCEAN --118.31,33.87,27.0,3348.0,695.0,1545.0,625.0,4.7543,296300.0,<1H OCEAN --118.31,33.86,29.0,2243.0,361.0,1051.0,352.0,6.6632,325200.0,<1H OCEAN --118.32,33.86,32.0,3485.0,678.0,1715.0,649.0,4.6563,291700.0,<1H OCEAN --118.32,33.87,35.0,2380.0,404.0,1212.0,422.0,5.6254,283800.0,<1H OCEAN --118.34,33.87,34.0,1069.0,217.0,601.0,212.0,4.6406,255900.0,<1H OCEAN --118.33,33.87,36.0,2219.0,406.0,1219.0,403.0,4.2614,267100.0,<1H OCEAN --118.33,33.87,35.0,743.0,128.0,385.0,137.0,6.4891,278100.0,<1H OCEAN --118.32,33.86,34.0,495.0,90.0,269.0,93.0,6.4391,252300.0,<1H OCEAN --118.33,33.86,38.0,914.0,176.0,519.0,174.0,6.0335,255400.0,<1H OCEAN --118.33,33.86,36.0,854.0,160.0,473.0,150.0,6.3992,259600.0,<1H OCEAN --118.33,33.86,38.0,1059.0,218.0,561.0,205.0,4.0,248600.0,<1H OCEAN --118.34,33.86,36.0,2223.0,360.0,1162.0,376.0,5.259,279400.0,<1H OCEAN --118.34,33.86,35.0,1936.0,343.0,1008.0,346.0,5.4791,285900.0,<1H OCEAN --118.34,33.87,28.0,2948.0,566.0,1445.0,524.0,5.3743,286500.0,<1H OCEAN --118.35,33.87,37.0,1420.0,286.0,886.0,290.0,4.5833,261300.0,<1H OCEAN --118.35,33.87,34.0,2823.0,500.0,1429.0,483.0,5.5,279600.0,<1H OCEAN --118.35,33.87,28.0,2319.0,579.0,1369.0,564.0,3.6169,257000.0,<1H OCEAN --118.35,33.86,28.0,2075.0,463.0,1216.0,446.0,3.9732,281500.0,<1H OCEAN --118.35,33.86,24.0,2139.0,481.0,971.0,418.0,4.3859,271300.0,<1H OCEAN --118.34,33.84,36.0,1561.0,252.0,740.0,253.0,6.2778,309700.0,<1H OCEAN --118.33,33.84,36.0,1364.0,251.0,668.0,245.0,5.3131,314100.0,<1H OCEAN --118.34,33.84,36.0,1407.0,231.0,676.0,231.0,5.269,331900.0,<1H OCEAN --118.34,33.83,34.0,1761.0,329.0,965.0,329.0,5.399,358500.0,<1H OCEAN --118.34,33.83,35.0,1818.0,353.0,853.0,321.0,5.8972,350900.0,<1H OCEAN --118.36,33.86,37.0,1249.0,218.0,583.0,214.0,5.7422,330700.0,<1H OCEAN --118.35,33.85,34.0,1770.0,291.0,916.0,289.0,5.0,354200.0,<1H OCEAN --118.35,33.85,35.0,1248.0,206.0,551.0,185.0,5.6426,348200.0,<1H OCEAN --118.36,33.85,36.0,1390.0,230.0,683.0,219.0,4.8906,334400.0,<1H OCEAN --118.36,33.86,36.0,681.0,122.0,360.0,128.0,5.2799,332600.0,<1H OCEAN --118.37,33.85,34.0,2415.0,404.0,1278.0,414.0,6.1599,341200.0,<1H OCEAN --118.36,33.85,34.0,1086.0,197.0,509.0,158.0,6.1133,349300.0,<1H OCEAN --118.37,33.85,25.0,5622.0,998.0,2537.0,1009.0,5.785,395300.0,<1H OCEAN --118.35,33.84,22.0,13133.0,3680.0,7180.0,3522.0,3.5414,354700.0,<1H OCEAN --118.36,33.84,22.0,11016.0,3170.0,6664.0,2838.0,3.703,361300.0,<1H OCEAN --118.37,33.85,29.0,3662.0,586.0,1626.0,611.0,6.3974,410000.0,<1H OCEAN --118.37,33.84,27.0,3245.0,605.0,1572.0,556.0,5.3773,379000.0,<1H OCEAN --118.35,33.83,36.0,1102.0,193.0,522.0,172.0,6.1187,342000.0,<1H OCEAN --118.36,33.83,36.0,1660.0,300.0,943.0,300.0,5.1984,353600.0,<1H OCEAN --118.36,33.84,35.0,1577.0,279.0,743.0,274.0,5.7654,343000.0,<1H OCEAN --118.37,33.84,35.0,1792.0,322.0,978.0,326.0,4.9583,342800.0,<1H OCEAN --118.36,33.83,35.0,1378.0,247.0,645.0,217.0,5.9143,343400.0,<1H OCEAN --118.36,33.83,35.0,2828.0,487.0,1439.0,490.0,5.6013,350200.0,<1H OCEAN --118.37,33.83,35.0,1207.0,207.0,601.0,213.0,4.7308,353400.0,<1H OCEAN --118.37,33.84,32.0,1751.0,328.0,819.0,323.0,6.7105,339000.0,<1H OCEAN --118.33,33.83,5.0,13038.0,2679.0,5272.0,2523.0,5.5023,286400.0,<1H OCEAN --118.32,33.85,42.0,3146.0,770.0,1859.0,740.0,3.5073,234800.0,<1H OCEAN --118.31,33.84,52.0,1819.0,464.0,1068.0,424.0,3.625,270700.0,<1H OCEAN --118.32,33.83,51.0,2399.0,516.0,1160.0,514.0,3.8456,318900.0,<1H OCEAN --118.32,33.84,42.0,1486.0,420.0,897.0,377.0,1.6228,376100.0,<1H OCEAN --118.31,33.83,50.0,696.0,311.0,382.0,234.0,2.775,225000.0,<1H OCEAN --118.31,33.83,45.0,2929.0,755.0,1635.0,652.0,2.9375,273000.0,<1H OCEAN --118.31,33.82,35.0,3462.0,814.0,1902.0,700.0,3.402,279900.0,<1H OCEAN --118.32,33.83,19.0,3792.0,790.0,2105.0,834.0,5.2363,310000.0,<1H OCEAN --118.31,33.82,39.0,2198.0,425.0,1160.0,436.0,4.1406,323700.0,<1H OCEAN --118.31,33.82,26.0,2345.0,408.0,1195.0,377.0,5.4925,361700.0,<1H OCEAN --118.31,33.81,23.0,3942.0,748.0,1679.0,711.0,4.1169,362600.0,<1H OCEAN --118.31,33.81,30.0,1773.0,356.0,905.0,352.0,4.3056,336000.0,<1H OCEAN --118.32,33.82,25.0,2587.0,512.0,1219.0,509.0,4.4271,382100.0,<1H OCEAN --118.32,33.82,22.0,2508.0,402.0,1254.0,395.0,7.0935,379500.0,<1H OCEAN --118.32,33.81,28.0,2142.0,445.0,1140.0,422.0,4.8438,346200.0,<1H OCEAN --118.32,33.81,27.0,2113.0,380.0,1109.0,360.0,4.7062,357000.0,<1H OCEAN --118.33,33.82,26.0,5591.0,934.0,2824.0,939.0,6.5861,417800.0,<1H OCEAN --118.34,33.8,25.0,4177.0,832.0,2123.0,789.0,5.0814,446800.0,<1H OCEAN --118.35,33.82,28.0,7591.0,1710.0,3420.0,1635.0,4.0708,328900.0,<1H OCEAN --118.36,33.82,36.0,1784.0,311.0,901.0,293.0,6.2247,339000.0,<1H OCEAN --118.37,33.82,39.0,2794.0,444.0,1319.0,441.0,5.878,387800.0,<1H OCEAN --118.37,33.82,36.0,2463.0,447.0,1125.0,424.0,6.0176,352700.0,<1H OCEAN --118.37,33.82,36.0,2416.0,394.0,1115.0,386.0,6.256,366900.0,<1H OCEAN --118.36,33.82,36.0,1083.0,187.0,522.0,187.0,5.7765,339500.0,<1H OCEAN --118.36,33.82,26.0,5166.0,1313.0,2738.0,1239.0,3.3565,360800.0,<1H OCEAN --118.36,33.82,28.0,67.0,15.0,49.0,11.0,6.1359,330000.0,<1H OCEAN --118.36,33.81,25.0,9042.0,2022.0,4458.0,1944.0,4.5592,378800.0,<1H OCEAN --118.36,33.81,26.0,1575.0,300.0,881.0,309.0,5.1778,359900.0,<1H OCEAN --118.37,33.81,36.0,2031.0,339.0,817.0,337.0,5.1271,458300.0,NEAR OCEAN --118.38,33.81,33.0,2349.0,407.0,954.0,373.0,6.4956,483600.0,NEAR OCEAN --118.38,33.81,20.0,1975.0,306.0,703.0,292.0,8.5491,410300.0,NEAR OCEAN --118.44,33.81,33.0,3994.0,990.0,1647.0,931.0,5.0106,500001.0,NEAR OCEAN --118.38,33.82,34.0,1822.0,364.0,750.0,366.0,5.9907,500001.0,NEAR OCEAN --118.36,33.81,34.0,2211.0,502.0,1113.0,488.0,4.7026,356800.0,<1H OCEAN --118.37,33.81,33.0,5057.0,790.0,2021.0,748.0,6.8553,482200.0,NEAR OCEAN --118.37,33.81,36.0,1283.0,209.0,563.0,209.0,6.9296,500001.0,NEAR OCEAN --118.38,33.81,41.0,1889.0,301.0,802.0,278.0,6.015,488500.0,NEAR OCEAN --118.38,33.81,39.0,2400.0,373.0,877.0,372.0,5.7361,500001.0,NEAR OCEAN --118.39,33.81,35.0,1008.0,165.0,391.0,167.0,3.7778,487500.0,NEAR OCEAN --118.38,33.81,36.0,1018.0,148.0,329.0,169.0,10.5045,500001.0,NEAR OCEAN --118.33,33.79,29.0,4389.0,873.0,2069.0,901.0,4.1071,365600.0,<1H OCEAN --118.34,33.79,36.0,716.0,123.0,388.0,124.0,5.0254,350000.0,<1H OCEAN --118.34,33.8,34.0,1730.0,427.0,1008.0,393.0,3.9408,327700.0,<1H OCEAN --118.34,33.8,33.0,2194.0,469.0,987.0,397.0,5.0951,318900.0,<1H OCEAN --118.35,33.8,32.0,1434.0,296.0,672.0,285.0,4.875,311700.0,<1H OCEAN --118.35,33.8,19.0,6224.0,1105.0,3152.0,1076.0,5.9541,500001.0,<1H OCEAN --118.31,33.8,29.0,2795.0,572.0,1469.0,557.0,3.7167,308900.0,<1H OCEAN --118.32,33.8,29.0,3254.0,717.0,1593.0,680.0,4.0536,285800.0,<1H OCEAN --118.31,33.79,35.0,2290.0,563.0,1374.0,530.0,3.2472,254700.0,<1H OCEAN --118.31,33.8,31.0,4464.0,991.0,2420.0,947.0,4.0425,277900.0,<1H OCEAN --118.32,33.8,39.0,1415.0,298.0,729.0,278.0,3.1648,244800.0,<1H OCEAN --118.32,33.79,35.0,2924.0,658.0,1675.0,602.0,3.8287,279900.0,<1H OCEAN --118.32,33.79,32.0,2381.0,467.0,1264.0,488.0,4.1477,315100.0,<1H OCEAN --118.32,33.8,29.0,4317.0,1037.0,2102.0,959.0,3.1275,286400.0,<1H OCEAN --118.31,33.79,38.0,1601.0,352.0,711.0,304.0,3.3958,250000.0,<1H OCEAN --118.31,33.78,30.0,4573.0,819.0,2411.0,819.0,3.5804,383800.0,<1H OCEAN --118.32,33.79,21.0,6638.0,1634.0,3240.0,1568.0,3.6797,271100.0,<1H OCEAN --118.34,33.78,25.0,11016.0,1626.0,4168.0,1584.0,8.1782,500001.0,NEAR OCEAN --118.36,33.79,34.0,5166.0,704.0,2071.0,668.0,8.3609,500001.0,NEAR OCEAN --118.37,33.79,36.0,1596.0,234.0,654.0,223.0,8.2064,500001.0,NEAR OCEAN --118.36,33.8,38.0,2553.0,400.0,1042.0,393.0,6.9742,500001.0,NEAR OCEAN --118.36,33.8,34.0,2629.0,369.0,966.0,375.0,10.1241,500001.0,NEAR OCEAN --118.38,33.8,36.0,4421.0,702.0,1433.0,624.0,8.0838,500001.0,NEAR OCEAN --118.45,33.8,31.0,4803.0,575.0,1490.0,577.0,11.9993,500001.0,NEAR OCEAN --118.39,33.79,30.0,4402.0,563.0,1582.0,551.0,10.898,500001.0,NEAR OCEAN --118.4,33.78,24.0,4787.0,562.0,1653.0,548.0,12.9758,500001.0,NEAR OCEAN --118.44,33.79,27.0,2141.0,260.0,635.0,240.0,11.6648,500001.0,NEAR OCEAN --118.41,33.77,22.0,7554.0,991.0,2808.0,946.0,10.06,500001.0,NEAR OCEAN --118.46,33.77,28.0,3065.0,406.0,1101.0,391.0,10.5536,500001.0,NEAR OCEAN --118.42,33.78,36.0,2093.0,303.0,802.0,300.0,8.0957,500001.0,NEAR OCEAN --118.37,33.77,26.0,6339.0,876.0,2540.0,880.0,10.1447,500001.0,NEAR OCEAN --118.38,33.77,21.0,11353.0,1537.0,4649.0,1504.0,9.821,500001.0,NEAR OCEAN --118.38,33.77,17.0,10950.0,2207.0,4713.0,2043.0,6.3064,418300.0,NEAR OCEAN --118.38,33.79,32.0,10445.0,1620.0,4474.0,1576.0,7.7042,500001.0,NEAR OCEAN --118.4,33.78,26.0,5005.0,776.0,2357.0,790.0,8.5421,500001.0,NEAR OCEAN --118.42,33.75,22.0,17591.0,2604.0,6897.0,2492.0,8.2831,500001.0,NEAR OCEAN --118.34,33.76,34.0,5586.0,674.0,1871.0,636.0,15.0001,500001.0,NEAR OCEAN --118.35,33.74,25.0,8272.0,1132.0,3392.0,1132.0,10.0973,500001.0,NEAR OCEAN --118.38,33.75,23.0,8277.0,1290.0,3176.0,1159.0,7.6986,500001.0,NEAR OCEAN --118.39,33.71,18.0,1193.0,233.0,475.0,228.0,7.5594,500001.0,NEAR OCEAN --118.41,33.75,4.0,311.0,51.0,128.0,46.0,9.8091,500001.0,NEAR OCEAN --118.31,33.77,20.0,5776.0,956.0,2757.0,936.0,6.6447,416800.0,<1H OCEAN --118.31,33.76,26.0,4486.0,709.0,1873.0,719.0,6.5704,414700.0,<1H OCEAN --118.31,33.75,36.0,2715.0,474.0,1303.0,457.0,4.6042,357300.0,NEAR OCEAN --118.31,33.75,34.0,2338.0,393.0,1031.0,373.0,6.287,396400.0,NEAR OCEAN --118.33,33.77,33.0,4244.0,595.0,1534.0,557.0,9.8214,500001.0,NEAR OCEAN --118.32,33.75,33.0,2996.0,398.0,1048.0,387.0,9.267,500001.0,NEAR OCEAN --118.32,33.75,37.0,1080.0,135.0,366.0,142.0,11.6677,500001.0,NEAR OCEAN --118.32,33.74,24.0,6097.0,794.0,2248.0,806.0,10.1357,500001.0,NEAR OCEAN --118.32,33.77,37.0,627.0,95.0,259.0,106.0,6.887,500001.0,<1H OCEAN --118.34,34.09,37.0,1442.0,501.0,998.0,503.0,2.4432,200000.0,<1H OCEAN --118.35,34.09,35.0,1989.0,634.0,1108.0,593.0,1.6081,288900.0,<1H OCEAN --118.35,34.09,35.0,2705.0,785.0,1526.0,793.0,3.0349,266700.0,<1H OCEAN --118.35,34.09,35.0,2234.0,689.0,1334.0,662.0,2.5444,236100.0,<1H OCEAN --118.36,34.09,34.0,2832.0,883.0,1594.0,843.0,1.7558,312500.0,<1H OCEAN --118.36,34.09,36.0,1616.0,465.0,773.0,429.0,2.6,313600.0,<1H OCEAN --118.36,34.09,33.0,3463.0,1170.0,1845.0,1134.0,2.0205,243800.0,<1H OCEAN --118.36,34.09,30.0,2353.0,728.0,1365.0,718.0,2.0702,283300.0,<1H OCEAN --118.36,34.1,37.0,7097.0,2010.0,2913.0,1939.0,2.875,300000.0,<1H OCEAN --118.36,34.09,36.0,1390.0,458.0,874.0,468.0,2.5812,200000.0,<1H OCEAN --118.36,34.09,28.0,1111.0,300.0,526.0,294.0,2.6136,383300.0,<1H OCEAN --118.37,34.09,38.0,1349.0,344.0,547.0,309.0,3.2159,383300.0,<1H OCEAN --118.37,34.09,38.0,4408.0,1295.0,1690.0,1229.0,3.0156,300000.0,<1H OCEAN --118.37,34.09,33.0,3180.0,865.0,1347.0,841.0,4.0651,500001.0,<1H OCEAN --118.37,34.09,31.0,6348.0,1827.0,2559.0,1755.0,3.2818,225000.0,<1H OCEAN --118.37,34.09,22.0,4247.0,1253.0,1766.0,1170.0,3.1517,341700.0,<1H OCEAN --118.37,34.09,24.0,630.0,172.0,257.0,147.0,5.5224,400000.0,<1H OCEAN --118.37,34.08,28.0,4376.0,1202.0,1847.0,1128.0,2.6713,312500.0,<1H OCEAN --118.38,34.08,52.0,1479.0,360.0,652.0,346.0,2.945,431400.0,<1H OCEAN --118.38,34.08,30.0,4524.0,1312.0,1910.0,1243.0,2.8889,335300.0,<1H OCEAN --118.39,34.08,52.0,1244.0,304.0,444.0,282.0,3.5114,430800.0,<1H OCEAN --118.38,34.08,48.0,1226.0,288.0,370.0,264.0,3.9375,450000.0,<1H OCEAN --118.38,34.09,24.0,8264.0,2437.0,3148.0,2274.0,3.5659,281300.0,<1H OCEAN --118.38,34.09,28.0,4001.0,1352.0,1799.0,1220.0,2.5784,272900.0,<1H OCEAN --118.39,34.09,27.0,4312.0,1214.0,1634.0,1097.0,3.6207,362500.0,<1H OCEAN --118.39,34.09,28.0,2347.0,608.0,785.0,548.0,4.4167,425000.0,<1H OCEAN --118.39,34.08,28.0,833.0,230.0,349.0,210.0,3.067,375000.0,<1H OCEAN --118.4,34.1,27.0,3979.0,510.0,1351.0,520.0,15.0001,500001.0,<1H OCEAN --118.4,34.09,45.0,2686.0,283.0,857.0,259.0,15.0001,500001.0,<1H OCEAN --118.39,34.08,52.0,3759.0,464.0,1407.0,422.0,15.0001,500001.0,<1H OCEAN --118.4,34.08,52.0,3815.0,439.0,1266.0,413.0,15.0001,500001.0,<1H OCEAN --118.41,34.09,37.0,2716.0,302.0,809.0,291.0,15.0001,500001.0,<1H OCEAN --118.42,34.09,40.0,3552.0,392.0,1024.0,370.0,15.0001,500001.0,<1H OCEAN --118.42,34.08,48.0,2413.0,261.0,770.0,248.0,15.0001,500001.0,<1H OCEAN --118.41,34.07,52.0,3562.0,394.0,1163.0,361.0,15.0001,500001.0,<1H OCEAN --118.41,34.07,52.0,1202.0,142.0,408.0,138.0,15.0001,500001.0,<1H OCEAN --118.38,34.07,48.0,2799.0,596.0,1235.0,561.0,4.4896,500001.0,<1H OCEAN --118.39,34.07,33.0,5301.0,1281.0,2243.0,1159.0,4.2386,500001.0,<1H OCEAN --118.39,34.07,45.0,3143.0,553.0,1153.0,564.0,5.7762,500001.0,<1H OCEAN --118.39,34.08,27.0,6605.0,1710.0,2665.0,1520.0,3.8088,500001.0,<1H OCEAN --118.4,34.07,22.0,2170.0,593.0,850.0,520.0,2.9107,500001.0,<1H OCEAN --118.37,34.06,36.0,1661.0,395.0,690.0,365.0,3.3438,500001.0,<1H OCEAN --118.38,34.06,50.0,1509.0,291.0,690.0,259.0,6.2344,500001.0,<1H OCEAN --118.39,34.06,52.0,1213.0,194.0,503.0,194.0,8.0095,500001.0,<1H OCEAN --118.38,34.06,52.0,1311.0,217.0,578.0,205.0,7.6771,500001.0,<1H OCEAN --118.39,34.06,43.0,1879.0,397.0,873.0,382.0,3.8158,500001.0,<1H OCEAN --118.39,34.06,37.0,2975.0,705.0,1291.0,654.0,5.3316,500001.0,<1H OCEAN --118.39,34.06,39.0,3299.0,831.0,1649.0,759.0,3.3295,500001.0,<1H OCEAN --118.4,34.06,37.0,3781.0,873.0,1725.0,838.0,4.1455,500001.0,<1H OCEAN --118.4,34.06,47.0,3652.0,967.0,1438.0,887.0,3.6964,500001.0,<1H OCEAN --118.4,34.06,52.0,1871.0,326.0,646.0,284.0,8.2961,500001.0,<1H OCEAN --118.4,34.06,52.0,2501.0,362.0,748.0,349.0,6.6343,500001.0,<1H OCEAN --118.41,34.06,43.0,2665.0,556.0,1015.0,506.0,4.1411,500001.0,<1H OCEAN --118.41,34.06,43.0,4994.0,1057.0,1830.0,969.0,5.5321,500001.0,<1H OCEAN --118.41,34.07,47.0,2979.0,626.0,1076.0,571.0,3.9904,500001.0,<1H OCEAN --118.45,34.06,52.0,204.0,34.0,1154.0,28.0,9.337,500001.0,<1H OCEAN --118.49,34.05,52.0,2416.0,291.0,810.0,270.0,13.8556,500001.0,<1H OCEAN --118.49,34.04,50.0,2597.0,340.0,964.0,339.0,13.3036,500001.0,<1H OCEAN --118.49,34.04,48.0,2381.0,345.0,859.0,306.0,8.0257,500001.0,<1H OCEAN --118.5,34.04,52.0,3000.0,374.0,1143.0,375.0,15.0001,500001.0,<1H OCEAN --118.5,34.04,52.0,2233.0,317.0,769.0,277.0,8.3839,500001.0,<1H OCEAN --118.49,34.04,31.0,4066.0,951.0,1532.0,868.0,4.8125,500001.0,<1H OCEAN --118.49,34.03,30.0,4061.0,927.0,1487.0,865.0,4.1827,435100.0,<1H OCEAN --118.51,34.04,40.0,1382.0,167.0,483.0,178.0,11.7045,500001.0,<1H OCEAN --118.5,34.03,52.0,1506.0,208.0,547.0,186.0,7.8705,500001.0,<1H OCEAN --118.5,34.03,52.0,1711.0,245.0,671.0,242.0,7.7572,500001.0,<1H OCEAN --118.5,34.03,44.0,2146.0,394.0,851.0,355.0,6.48,500001.0,<1H OCEAN --118.51,34.03,37.0,4072.0,905.0,1468.0,923.0,3.8571,500001.0,<1H OCEAN --118.52,34.02,24.0,7418.0,1755.0,2713.0,1577.0,5.0867,500001.0,<1H OCEAN --118.49,34.03,31.0,4949.0,1293.0,1985.0,1244.0,4.252,436700.0,<1H OCEAN --118.5,34.03,32.0,6365.0,1784.0,2767.0,1698.0,3.6451,383300.0,<1H OCEAN --118.5,34.02,28.0,5109.0,1482.0,2313.0,1451.0,3.3266,483300.0,<1H OCEAN --118.5,34.02,24.0,2924.0,1013.0,1492.0,943.0,2.775,291700.0,<1H OCEAN --118.5,34.02,35.0,2914.0,934.0,1334.0,870.0,2.9934,350000.0,<1H OCEAN --118.52,34.01,25.0,2757.0,738.0,1014.0,633.0,3.1433,500001.0,<1H OCEAN --118.49,34.03,32.0,3851.0,900.0,1456.0,836.0,4.5208,442100.0,<1H OCEAN --118.49,34.03,31.0,3155.0,808.0,1208.0,745.0,3.6769,450000.0,<1H OCEAN --118.49,34.02,27.0,4725.0,1185.0,1945.0,1177.0,4.1365,470800.0,<1H OCEAN --118.48,34.03,32.0,1793.0,476.0,1143.0,448.0,2.8981,353600.0,<1H OCEAN --118.49,34.02,28.0,2545.0,752.0,1548.0,679.0,2.9125,475000.0,<1H OCEAN --118.49,34.02,29.0,2709.0,799.0,1238.0,793.0,3.1563,330000.0,<1H OCEAN --118.48,34.04,47.0,1956.0,277.0,724.0,277.0,8.9616,500001.0,<1H OCEAN --118.48,34.04,49.0,3780.0,741.0,1435.0,690.0,4.3158,500001.0,<1H OCEAN --118.48,34.04,40.0,1395.0,285.0,610.0,262.0,3.9659,500001.0,<1H OCEAN --118.48,34.04,36.0,2539.0,535.0,979.0,500.0,3.6667,500001.0,<1H OCEAN --118.47,34.04,32.0,2909.0,748.0,1310.0,706.0,4.516,350000.0,<1H OCEAN --118.47,34.03,32.0,3024.0,784.0,1323.0,740.0,3.3889,347900.0,<1H OCEAN --118.48,34.03,39.0,1530.0,401.0,1074.0,375.0,3.5076,381800.0,<1H OCEAN --118.47,34.03,29.0,3287.0,882.0,1523.0,823.0,3.7381,290600.0,<1H OCEAN --118.47,34.03,31.0,2642.0,681.0,1303.0,625.0,3.5987,340500.0,<1H OCEAN --118.48,34.03,19.0,902.0,284.0,414.0,272.0,1.3333,310000.0,<1H OCEAN --118.48,34.02,22.0,1249.0,483.0,1106.0,481.0,2.5261,375000.0,<1H OCEAN --118.48,34.02,29.0,1585.0,542.0,1019.0,487.0,2.7072,375000.0,<1H OCEAN --118.49,34.02,30.0,2075.0,687.0,1026.0,592.0,3.1635,366700.0,<1H OCEAN --118.46,34.03,27.0,1965.0,631.0,1042.0,596.0,2.75,327300.0,<1H OCEAN --118.46,34.03,39.0,1244.0,283.0,886.0,284.0,3.125,325000.0,<1H OCEAN --118.46,34.03,52.0,523.0,,317.0,130.0,2.2794,337500.0,<1H OCEAN --118.46,34.02,29.0,2329.0,833.0,1953.0,800.0,2.6639,233300.0,<1H OCEAN --118.47,34.02,38.0,2163.0,651.0,1759.0,584.0,2.3382,297500.0,<1H OCEAN --118.48,34.02,11.0,72.0,16.0,150.0,20.0,2.625,250000.0,<1H OCEAN --118.47,34.02,35.0,3057.0,774.0,2223.0,732.0,2.0745,332500.0,<1H OCEAN --118.48,34.02,30.0,2027.0,609.0,1425.0,562.0,2.2917,330800.0,<1H OCEAN --118.48,34.02,25.0,1583.0,460.0,983.0,422.0,2.7019,293800.0,<1H OCEAN --118.49,34.02,28.0,1394.0,582.0,716.0,543.0,1.5132,450000.0,<1H OCEAN --118.49,34.01,28.0,651.0,252.0,333.0,174.0,1.9722,500001.0,<1H OCEAN --118.51,34.0,52.0,1241.0,502.0,679.0,459.0,2.3098,500001.0,<1H OCEAN --118.48,34.01,31.0,2851.0,804.0,1410.0,782.0,4.0893,381500.0,<1H OCEAN --118.48,34.0,41.0,2584.0,743.0,1058.0,668.0,3.2061,370000.0,<1H OCEAN --118.48,34.01,30.0,3078.0,954.0,1561.0,901.0,3.4852,425000.0,<1H OCEAN --118.49,34.0,32.0,3407.0,1071.0,1463.0,986.0,3.0369,500001.0,<1H OCEAN --118.48,34.01,31.0,1829.0,458.0,719.0,392.0,4.4,353800.0,<1H OCEAN --118.47,34.0,28.0,1259.0,302.0,668.0,280.0,4.2813,384400.0,<1H OCEAN --118.47,34.0,42.0,1271.0,301.0,574.0,312.0,3.1304,340500.0,<1H OCEAN --118.48,34.0,25.0,4149.0,1067.0,1749.0,1000.0,3.9722,450000.0,<1H OCEAN --118.48,34.0,29.0,1727.0,479.0,741.0,431.0,3.6121,500000.0,<1H OCEAN --118.48,34.0,52.0,1359.0,395.0,521.0,368.0,2.6736,500001.0,<1H OCEAN --118.5,33.99,22.0,3484.0,975.0,1268.0,952.0,3.2609,500001.0,<1H OCEAN --118.47,34.02,41.0,2136.0,549.0,986.0,557.0,2.7254,444400.0,<1H OCEAN --118.47,34.01,44.0,2175.0,475.0,1019.0,448.0,4.793,470800.0,<1H OCEAN --118.47,34.01,41.0,2704.0,557.0,1047.0,478.0,4.4211,462900.0,<1H OCEAN --118.48,34.01,40.0,2198.0,611.0,1023.0,567.0,3.755,398300.0,<1H OCEAN --118.47,34.01,41.0,752.0,201.0,482.0,207.0,2.5417,418200.0,<1H OCEAN --118.46,34.01,48.0,1640.0,322.0,664.0,301.0,4.0,500001.0,<1H OCEAN --118.46,34.01,46.0,1379.0,239.0,688.0,269.0,6.8901,500001.0,<1H OCEAN --118.47,34.01,44.0,2017.0,343.0,958.0,382.0,6.1014,480100.0,<1H OCEAN --118.47,34.01,43.0,1160.0,304.0,393.0,250.0,2.9167,461100.0,<1H OCEAN --118.47,34.01,27.0,1782.0,471.0,837.0,422.0,3.7727,413000.0,<1H OCEAN --118.45,34.02,41.0,2956.0,700.0,1212.0,645.0,3.4583,421900.0,<1H OCEAN --118.45,34.02,45.0,1230.0,201.0,565.0,219.0,6.3521,493400.0,<1H OCEAN --118.46,34.02,45.0,3803.0,970.0,1690.0,871.0,3.0476,456200.0,<1H OCEAN --118.46,34.02,46.0,2571.0,502.0,1225.0,501.0,6.0436,473000.0,<1H OCEAN --118.46,34.02,39.0,3599.0,776.0,1569.0,763.0,5.2571,405400.0,<1H OCEAN --118.37,34.03,39.0,213.0,44.0,138.0,52.0,2.125,196400.0,<1H OCEAN --118.38,34.03,44.0,1913.0,441.0,1295.0,432.0,3.9537,266400.0,<1H OCEAN --118.38,34.02,45.0,2098.0,486.0,1343.0,481.0,3.9615,268600.0,<1H OCEAN --118.39,34.02,38.0,2447.0,636.0,1312.0,574.0,3.5909,279400.0,<1H OCEAN --118.39,34.02,45.0,1577.0,421.0,1042.0,375.0,3.4375,314500.0,<1H OCEAN --118.38,34.01,18.0,9528.0,2075.0,3922.0,1920.0,4.7612,304100.0,<1H OCEAN --118.39,34.01,25.0,1101.0,285.0,543.0,294.0,2.3571,340600.0,<1H OCEAN --118.39,34.02,38.0,2521.0,647.0,1091.0,597.0,4.1296,322900.0,<1H OCEAN --118.39,34.01,35.0,4424.0,918.0,2101.0,888.0,3.9688,355100.0,<1H OCEAN --118.4,34.01,44.0,1494.0,262.0,618.0,266.0,5.4035,356300.0,<1H OCEAN --118.4,34.02,40.0,593.0,137.0,371.0,132.0,4.6932,332800.0,<1H OCEAN --118.39,34.0,40.0,1565.0,269.0,826.0,268.0,5.2035,485700.0,<1H OCEAN --118.39,33.99,32.0,2612.0,418.0,1030.0,402.0,6.603,369200.0,<1H OCEAN --118.39,33.99,43.0,612.0,135.0,402.0,142.0,5.1322,314900.0,<1H OCEAN --118.39,34.0,35.0,1465.0,386.0,1104.0,345.0,4.056,339100.0,<1H OCEAN --118.4,34.0,34.0,1816.0,335.0,872.0,339.0,4.85,329400.0,<1H OCEAN --118.4,34.0,37.0,1534.0,258.0,751.0,259.0,5.444,336000.0,<1H OCEAN --118.4,33.99,36.0,1280.0,240.0,704.0,217.0,5.9632,328100.0,<1H OCEAN --118.4,33.99,36.0,1225.0,213.0,591.0,227.0,5.4663,326700.0,<1H OCEAN --118.4,34.0,44.0,2122.0,385.0,1012.0,367.0,4.6687,344300.0,<1H OCEAN --118.4,34.01,48.0,1427.0,253.0,693.0,268.0,5.7405,351600.0,<1H OCEAN --118.41,34.01,44.0,2010.0,394.0,961.0,365.0,4.5982,333500.0,<1H OCEAN --118.41,34.0,37.0,1426.0,259.0,689.0,261.0,5.5284,331000.0,<1H OCEAN --118.41,34.01,26.0,2503.0,449.0,1218.0,426.0,5.3683,500001.0,<1H OCEAN --118.41,34.01,43.0,2000.0,529.0,1290.0,514.0,4.7031,302500.0,<1H OCEAN --118.41,34.01,33.0,3306.0,974.0,2475.0,924.0,2.8797,285300.0,<1H OCEAN --118.42,34.01,42.0,1700.0,438.0,997.0,436.0,2.9213,305000.0,<1H OCEAN --118.41,34.0,38.0,324.0,70.0,268.0,73.0,2.55,271400.0,<1H OCEAN --118.42,34.0,45.0,1807.0,355.0,883.0,371.0,5.0357,329800.0,<1H OCEAN --118.41,34.0,46.0,105.0,20.0,69.0,19.0,3.9643,275000.0,<1H OCEAN --118.42,34.0,33.0,1139.0,299.0,734.0,257.0,3.2708,325000.0,<1H OCEAN --118.43,34.0,37.0,1340.0,358.0,1008.0,340.0,3.7614,314300.0,<1H OCEAN --118.43,33.99,45.0,2092.0,451.0,1190.0,429.0,3.8021,323000.0,<1H OCEAN --118.44,33.99,44.0,305.0,72.0,156.0,70.0,5.9641,275000.0,<1H OCEAN --118.44,33.98,21.0,18132.0,5419.0,7431.0,4930.0,5.3359,500001.0,<1H OCEAN --118.38,33.99,21.0,11308.0,3039.0,5127.0,2839.0,4.6277,228300.0,<1H OCEAN --118.37,33.99,32.0,4018.0,564.0,1400.0,568.0,8.6718,439100.0,<1H OCEAN --118.36,33.99,35.0,3702.0,648.0,1449.0,614.0,5.3194,313700.0,<1H OCEAN --118.37,33.99,36.0,3228.0,543.0,1305.0,520.0,5.1695,397000.0,<1H OCEAN --118.38,33.98,25.0,7105.0,1012.0,2519.0,1004.0,6.8112,500001.0,<1H OCEAN --118.35,34.0,30.0,1879.0,226.0,740.0,266.0,6.431,492500.0,<1H OCEAN --118.35,34.0,46.0,3402.0,503.0,1389.0,504.0,5.3462,270400.0,<1H OCEAN --118.35,33.99,48.0,2741.0,439.0,1115.0,459.0,5.0514,269100.0,<1H OCEAN --118.36,33.99,43.0,2657.0,548.0,1145.0,524.0,4.1375,287100.0,<1H OCEAN --118.36,33.99,45.0,2005.0,368.0,909.0,364.0,4.6406,268900.0,<1H OCEAN --118.35,33.99,45.0,1764.0,401.0,679.0,334.0,3.2021,222100.0,<1H OCEAN --118.34,34.0,44.0,3183.0,513.0,1183.0,473.0,5.0407,314900.0,<1H OCEAN --118.34,34.0,49.0,2863.0,411.0,1108.0,406.0,5.8993,313300.0,<1H OCEAN --118.33,34.0,52.0,1114.0,169.0,486.0,176.0,4.2917,247600.0,<1H OCEAN --118.34,34.0,49.0,2465.0,372.0,1018.0,359.0,4.0,296800.0,<1H OCEAN --118.34,33.99,47.0,1107.0,199.0,437.0,178.0,3.7344,179400.0,<1H OCEAN --118.34,33.99,48.0,1172.0,205.0,497.0,190.0,3.825,183000.0,<1H OCEAN --118.35,34.0,40.0,2894.0,395.0,1063.0,409.0,6.939,372000.0,<1H OCEAN --118.6,34.13,20.0,14291.0,1934.0,5452.0,1875.0,9.1232,472000.0,<1H OCEAN --118.58,34.12,42.0,718.0,140.0,324.0,131.0,6.4018,500001.0,<1H OCEAN --118.59,34.11,35.0,2396.0,472.0,1054.0,457.0,6.4504,407000.0,<1H OCEAN --118.6,34.09,43.0,2228.0,438.0,960.0,395.0,7.6091,438500.0,<1H OCEAN --118.6,34.08,40.0,866.0,181.0,399.0,176.0,6.91,380000.0,<1H OCEAN --118.6,34.07,16.0,319.0,59.0,149.0,64.0,4.625,433300.0,<1H OCEAN --118.69,34.08,23.0,204.0,40.0,117.0,41.0,9.7646,500001.0,NEAR OCEAN --118.66,34.1,12.0,2560.0,365.0,907.0,366.0,10.076,500001.0,NEAR OCEAN --118.63,34.11,35.0,3795.0,690.0,1521.0,653.0,5.8735,448100.0,<1H OCEAN --118.67,34.16,17.0,16544.0,2206.0,6214.0,2118.0,9.1228,500001.0,<1H OCEAN --118.68,34.08,18.0,102.0,17.0,55.0,21.0,3.9934,500001.0,NEAR OCEAN --118.68,34.13,9.0,11251.0,1594.0,3029.0,1227.0,6.7273,500001.0,<1H OCEAN --118.76,34.13,10.0,4355.0,716.0,2030.0,674.0,6.5571,500001.0,NEAR OCEAN --118.75,34.1,34.0,2255.0,402.0,857.0,317.0,4.5333,377300.0,NEAR OCEAN --118.72,34.14,7.0,23866.0,4407.0,9873.0,4012.0,5.4032,318500.0,NEAR OCEAN --118.78,34.16,9.0,30405.0,4093.0,12873.0,3931.0,8.0137,399200.0,NEAR OCEAN --118.8,34.15,9.0,1143.0,179.0,647.0,180.0,6.8474,356700.0,NEAR OCEAN --118.75,34.17,16.0,2950.0,387.0,1228.0,379.0,5.3749,346100.0,NEAR OCEAN --118.84,34.11,12.0,7508.0,1058.0,2484.0,965.0,5.8788,500001.0,NEAR OCEAN --118.82,34.14,22.0,11668.0,1730.0,4054.0,1671.0,6.9935,385500.0,NEAR OCEAN --118.79,34.14,7.0,3003.0,504.0,1143.0,466.0,5.8548,500001.0,NEAR OCEAN --118.74,34.05,19.0,3487.0,686.0,2782.0,584.0,7.9184,500001.0,NEAR OCEAN --118.86,34.07,16.0,1409.0,244.0,970.0,172.0,8.0144,500001.0,NEAR OCEAN --118.88,34.02,19.0,15990.0,2611.0,5175.0,2173.0,7.7848,500001.0,NEAR OCEAN --118.85,34.04,21.0,3837.0,578.0,1509.0,509.0,8.4476,500001.0,NEAR OCEAN --118.78,34.05,28.0,1343.0,215.0,487.0,199.0,6.83,500001.0,NEAR OCEAN --118.58,34.06,25.0,4440.0,693.0,1560.0,636.0,8.8666,500001.0,<1H OCEAN --118.6,34.02,36.0,2043.0,467.0,606.0,326.0,8.4331,500001.0,NEAR OCEAN --118.62,34.06,25.0,3546.0,584.0,1530.0,601.0,7.4001,500001.0,NEAR OCEAN --118.66,34.02,23.0,8798.0,1465.0,2750.0,1208.0,8.7364,500001.0,NEAR OCEAN --117.76,34.71,15.0,2981.0,625.0,1694.0,540.0,2.9541,106700.0,INLAND --117.84,34.63,5.0,6739.0,1251.0,4614.0,1266.0,4.002,115100.0,INLAND --117.78,34.58,6.0,10263.0,1864.0,6163.0,1781.0,3.8803,120000.0,INLAND --117.96,34.71,32.0,3511.0,646.0,1733.0,510.0,3.46,123900.0,INLAND --118.09,34.74,34.0,1218.0,285.0,797.0,248.0,2.4348,104800.0,INLAND --118.06,34.71,14.0,2606.0,514.0,1228.0,512.0,2.5764,150000.0,INLAND --118.09,34.68,4.0,23386.0,4171.0,10493.0,3671.0,4.0211,144000.0,INLAND --118.11,34.68,6.0,7430.0,1184.0,3489.0,1115.0,5.3267,140100.0,INLAND --118.12,34.69,17.0,2479.0,390.0,1219.0,363.0,4.6417,125700.0,INLAND --118.12,34.68,12.0,5319.0,875.0,2439.0,779.0,4.6629,131500.0,INLAND --118.13,34.69,34.0,2156.0,397.0,1269.0,388.0,2.75,96800.0,INLAND --118.13,34.68,28.0,718.0,124.0,347.0,121.0,4.025,102600.0,INLAND --118.1,34.65,33.0,873.0,177.0,425.0,142.0,2.67,187500.0,INLAND --118.09,34.71,5.0,5807.0,1182.0,2602.0,1007.0,2.4012,159400.0,INLAND --118.1,34.7,5.0,10356.0,1647.0,4562.0,1427.0,4.9806,141100.0,INLAND --118.09,34.7,6.0,4558.0,804.0,1543.0,563.0,2.8548,138500.0,INLAND --118.1,34.71,16.0,3914.0,819.0,1524.0,795.0,2.415,137500.0,INLAND --118.12,34.71,26.0,4230.0,823.0,2789.0,793.0,2.5179,104000.0,INLAND --118.12,34.71,46.0,40.0,10.0,14.0,7.0,1.125,225000.0,INLAND --118.12,34.7,7.0,4915.0,885.0,2833.0,874.0,4.3229,130000.0,INLAND --118.13,34.7,34.0,1943.0,500.0,1078.0,446.0,1.1296,93800.0,INLAND --118.13,34.69,32.0,3670.0,765.0,1986.0,673.0,3.682,108800.0,INLAND --118.12,34.69,27.0,3019.0,501.0,1580.0,523.0,3.7804,113500.0,INLAND --118.14,34.68,31.0,2666.0,662.0,1337.0,602.0,2.4432,101100.0,INLAND --118.14,34.69,35.0,2118.0,374.0,1108.0,360.0,3.4327,100300.0,INLAND --118.14,34.68,33.0,2815.0,485.0,1447.0,489.0,4.2679,119600.0,INLAND --118.14,34.68,25.0,1703.0,342.0,775.0,309.0,4.5455,126500.0,INLAND --118.16,34.68,17.0,2994.0,832.0,1571.0,695.0,2.5902,85400.0,INLAND --118.15,34.69,32.0,1300.0,234.0,712.0,249.0,3.25,107500.0,INLAND --118.16,34.68,9.0,4303.0,900.0,2240.0,861.0,3.7807,110900.0,INLAND --118.15,34.67,5.0,12317.0,2953.0,6291.0,2654.0,3.5732,146900.0,INLAND --118.14,34.65,20.0,1257.0,201.0,551.0,186.0,4.6591,247200.0,INLAND --118.14,34.72,15.0,2181.0,361.0,1057.0,300.0,4.625,118100.0,INLAND --118.16,34.71,27.0,6007.0,998.0,2680.0,882.0,4.1719,117200.0,INLAND --118.15,34.71,36.0,1338.0,250.0,709.0,250.0,3.5625,101400.0,INLAND --118.14,34.71,33.0,2347.0,461.0,1482.0,374.0,2.8194,93000.0,INLAND --118.14,34.71,32.0,1164.0,248.0,588.0,270.0,1.1917,86900.0,INLAND --118.15,34.71,35.0,1503.0,309.0,842.0,300.0,2.5278,97700.0,INLAND --118.14,34.7,36.0,1205.0,317.0,678.0,290.0,2.0182,98400.0,INLAND --118.14,34.7,12.0,1984.0,614.0,1071.0,574.0,1.2532,102100.0,INLAND --118.15,34.7,36.0,2696.0,454.0,1192.0,452.0,3.9615,116300.0,INLAND --118.16,34.7,33.0,2918.0,494.0,1365.0,478.0,4.8787,127700.0,INLAND --118.16,34.69,35.0,3114.0,583.0,1974.0,545.0,3.9028,126800.0,INLAND --118.14,34.69,34.0,1439.0,327.0,708.0,298.0,3.2699,100000.0,INLAND --118.14,34.69,48.0,1379.0,327.0,696.0,304.0,2.1167,94900.0,INLAND --118.28,34.76,19.0,3430.0,601.0,1817.0,571.0,4.7875,163600.0,INLAND --118.19,34.77,16.0,2035.0,370.0,704.0,330.0,2.1979,146400.0,INLAND --118.2,34.69,5.0,9076.0,1503.0,7694.0,1278.0,4.875,163400.0,INLAND --118.17,34.69,12.0,4881.0,803.0,2188.0,724.0,4.1667,171900.0,INLAND --118.17,34.68,13.0,5341.0,773.0,2288.0,724.0,6.6772,185600.0,INLAND --118.19,34.67,8.0,11275.0,1822.0,5731.0,1692.0,5.0285,167900.0,INLAND --118.17,34.67,5.0,8352.0,1555.0,3723.0,1389.0,4.5659,140300.0,INLAND --118.19,34.65,33.0,1781.0,326.0,913.0,314.0,3.9963,126800.0,INLAND --118.17,34.66,9.0,1561.0,253.0,731.0,233.0,5.7049,173200.0,INLAND --118.22,34.67,28.0,2357.0,408.0,1162.0,384.0,4.3636,179700.0,INLAND --118.23,34.66,25.0,2627.0,387.0,1059.0,338.0,3.6382,138200.0,INLAND --118.22,34.66,17.0,3810.0,662.0,1867.0,586.0,4.9,152400.0,INLAND --118.21,34.65,17.0,4001.0,814.0,2313.0,756.0,3.0441,140100.0,INLAND --118.23,34.65,17.0,1827.0,348.0,766.0,335.0,3.5673,136300.0,INLAND --118.27,34.68,19.0,552.0,129.0,314.0,106.0,3.2125,185400.0,INLAND --118.29,34.65,18.0,6893.0,1372.0,2837.0,1221.0,3.3173,218400.0,INLAND --118.32,34.62,31.0,1398.0,273.0,884.0,299.0,4.8409,264900.0,INLAND --118.38,34.58,18.0,1859.0,375.0,913.0,372.0,4.3456,148900.0,INLAND --118.61,34.73,25.0,3080.0,587.0,1558.0,510.0,5.0839,156700.0,INLAND --118.4,34.7,10.0,4122.0,814.0,2164.0,710.0,4.2941,151600.0,INLAND --117.92,34.63,34.0,81.0,26.0,53.0,14.0,1.4091,137500.0,INLAND --117.92,34.59,7.0,681.0,125.0,485.0,104.0,2.7396,125600.0,INLAND --117.93,34.57,5.0,5613.0,1060.0,3569.0,999.0,3.1946,132700.0,INLAND --117.9,34.53,8.0,3484.0,647.0,2169.0,619.0,3.9766,135800.0,INLAND --117.96,34.53,10.0,2907.0,559.0,1681.0,531.0,3.8594,141000.0,INLAND --117.98,34.53,13.0,2815.0,535.0,1492.0,491.0,4.0945,135700.0,INLAND --118.09,34.63,31.0,1537.0,416.0,1239.0,397.0,1.9722,99200.0,INLAND --118.02,34.62,38.0,248.0,55.0,261.0,53.0,2.1413,96900.0,INLAND --118.18,34.63,19.0,3562.0,606.0,1677.0,578.0,4.1573,228100.0,INLAND --118.17,34.61,7.0,2465.0,336.0,978.0,332.0,7.1381,292200.0,INLAND --118.16,34.6,2.0,11008.0,1549.0,4098.0,1367.0,6.4865,204400.0,INLAND --118.12,34.6,33.0,2189.0,497.0,1459.0,443.0,2.3958,94500.0,INLAND --118.15,34.59,33.0,2111.0,429.0,1067.0,397.0,3.7344,111400.0,INLAND --118.16,34.6,5.0,7294.0,1139.0,3123.0,930.0,4.9904,154100.0,INLAND --118.21,34.56,12.0,2472.0,408.0,1048.0,380.0,4.7097,262100.0,INLAND --118.22,34.63,4.0,14348.0,2145.0,5839.0,1806.0,5.3799,222400.0,INLAND --118.21,34.64,16.0,2573.0,427.0,1273.0,426.0,5.9508,181100.0,INLAND --118.12,34.58,13.0,2614.0,650.0,1949.0,537.0,2.0547,102600.0,INLAND --118.13,34.58,29.0,2370.0,475.0,1746.0,483.0,3.7464,113500.0,INLAND --118.14,34.57,6.0,9882.0,1892.0,4892.0,1621.0,3.7636,167600.0,INLAND --118.12,34.56,5.0,6446.0,1154.0,3427.0,1104.0,3.9936,148500.0,INLAND --118.1,34.58,32.0,1489.0,306.0,774.0,267.0,3.275,103500.0,INLAND --118.1,34.58,29.0,2843.0,603.0,1517.0,573.0,2.6658,106900.0,INLAND --118.1,34.57,7.0,20377.0,4335.0,11973.0,3933.0,3.3086,138100.0,INLAND --118.09,34.57,4.0,9761.0,1683.0,4970.0,1535.0,4.5266,142900.0,INLAND --118.08,34.58,5.0,1113.0,186.0,631.0,168.0,4.1719,146600.0,INLAND --118.07,34.58,34.0,3416.0,601.0,1929.0,567.0,4.0147,107400.0,INLAND --118.06,34.58,36.0,1493.0,258.0,899.0,260.0,3.86,109300.0,INLAND --118.08,34.58,12.0,3851.0,857.0,2169.0,811.0,3.0101,116300.0,INLAND --118.07,34.56,5.0,10264.0,1821.0,5871.0,1790.0,4.2329,145500.0,INLAND --118.08,34.56,14.0,5144.0,887.0,2846.0,824.0,4.5615,137200.0,INLAND --118.03,34.58,4.0,9849.0,1780.0,4546.0,1598.0,4.0729,154300.0,INLAND --118.02,34.57,4.0,10655.0,1706.0,5391.0,1529.0,5.083,151300.0,INLAND --118.01,34.55,2.0,2701.0,530.0,1368.0,430.0,4.071,137400.0,INLAND --118.08,34.55,5.0,16181.0,2971.0,8152.0,2651.0,4.5237,141800.0,INLAND --118.07,34.51,14.0,2798.0,459.0,1236.0,404.0,4.8667,239900.0,INLAND --118.37,34.43,11.0,17339.0,2866.0,8721.0,2803.0,5.9507,225200.0,INLAND --118.4,34.41,22.0,4443.0,560.0,1573.0,496.0,10.0285,500001.0,<1H OCEAN --118.35,34.52,14.0,3490.0,592.0,1710.0,580.0,5.9171,333300.0,INLAND --118.22,34.52,7.0,4524.0,735.0,2298.0,717.0,6.5538,311600.0,INLAND --118.26,34.5,6.0,5813.0,908.0,2275.0,790.0,4.7778,340400.0,INLAND --118.27,34.46,10.0,2184.0,405.0,1119.0,370.0,4.7437,294000.0,INLAND --118.13,34.44,10.0,2726.0,465.0,1773.0,459.0,4.8295,319100.0,INLAND --117.89,34.49,12.0,3449.0,598.0,1502.0,540.0,3.7043,150800.0,INLAND --117.96,34.48,32.0,1896.0,342.0,806.0,299.0,4.5769,159400.0,INLAND --117.79,34.45,18.0,2986.0,597.0,1355.0,472.0,3.2765,165000.0,INLAND --118.46,34.4,12.0,25957.0,4798.0,10475.0,4490.0,4.542,195300.0,<1H OCEAN --118.5,34.45,25.0,1290.0,190.0,689.0,216.0,6.0097,220200.0,<1H OCEAN --118.5,34.52,3.0,6577.0,1056.0,3032.0,1004.0,5.9263,251800.0,INLAND --118.48,34.47,36.0,84.0,12.0,29.0,17.0,3.375,187500.0,<1H OCEAN --118.5,34.46,17.0,10267.0,,4956.0,1483.0,5.5061,239400.0,<1H OCEAN --118.52,34.44,26.0,934.0,148.0,519.0,162.0,5.3209,185000.0,<1H OCEAN --118.53,34.44,19.0,3013.0,507.0,1356.0,484.0,5.1163,233200.0,<1H OCEAN --118.53,34.45,26.0,828.0,149.0,508.0,158.0,5.2374,185500.0,<1H OCEAN --118.53,34.44,19.0,1285.0,195.0,650.0,193.0,6.0398,217800.0,<1H OCEAN --118.52,34.46,5.0,15341.0,2527.0,7270.0,2320.0,6.1281,236200.0,<1H OCEAN --118.53,34.45,10.0,5509.0,969.0,3002.0,959.0,5.5981,220100.0,<1H OCEAN --118.51,34.43,15.0,8510.0,1258.0,3733.0,1233.0,6.1082,253700.0,<1H OCEAN --118.46,34.42,25.0,2988.0,525.0,1884.0,513.0,4.7007,169500.0,<1H OCEAN --118.44,34.5,5.0,1514.0,220.0,1355.0,215.0,8.1344,359000.0,INLAND --118.45,34.44,16.0,13406.0,2574.0,7030.0,2440.0,4.6861,187900.0,<1H OCEAN --118.49,34.43,15.0,8244.0,1409.0,4453.0,1357.0,5.4829,199600.0,<1H OCEAN --118.49,34.42,23.0,4166.0,756.0,2082.0,743.0,4.4107,213400.0,<1H OCEAN --118.48,34.42,21.0,1375.0,259.0,728.0,258.0,5.0166,229000.0,<1H OCEAN --118.47,34.42,17.0,913.0,228.0,530.0,201.0,3.038,238500.0,<1H OCEAN --118.47,34.42,25.0,3223.0,524.0,1763.0,508.0,5.2887,183000.0,<1H OCEAN --118.43,34.42,13.0,3600.0,580.0,1799.0,576.0,6.2971,218300.0,<1H OCEAN --118.43,34.43,5.0,21113.0,4386.0,9842.0,3886.0,4.2037,194600.0,<1H OCEAN --118.55,34.44,14.0,15348.0,2366.0,7087.0,2169.0,6.3277,237700.0,INLAND --118.56,34.42,2.0,966.0,270.0,233.0,169.0,1.9667,450000.0,<1H OCEAN --118.61,34.59,5.0,4028.0,896.0,2062.0,826.0,4.0579,167100.0,INLAND --118.7,34.53,5.0,14275.0,2474.0,7158.0,2311.0,5.4284,236300.0,INLAND --118.66,34.43,9.0,2356.0,469.0,1556.0,386.0,3.775,155000.0,INLAND --118.59,34.47,5.0,538.0,98.0,8733.0,105.0,4.2391,154600.0,INLAND --118.61,34.31,4.0,1949.0,458.0,868.0,398.0,5.0151,285200.0,<1H OCEAN --118.52,34.39,21.0,5477.0,1275.0,3384.0,1222.0,3.6625,228100.0,<1H OCEAN --118.53,34.38,18.0,2288.0,607.0,2305.0,597.0,3.227,136100.0,<1H OCEAN --118.54,34.38,18.0,2096.0,309.0,1044.0,328.0,6.8299,262100.0,<1H OCEAN --118.52,34.4,5.0,7748.0,1557.0,4768.0,1393.0,5.305,311200.0,<1H OCEAN --118.53,34.37,8.0,3839.0,852.0,1342.0,593.0,3.9118,333700.0,<1H OCEAN --118.54,34.37,27.0,2051.0,301.0,917.0,287.0,7.6059,323700.0,<1H OCEAN --118.52,34.36,5.0,4222.0,712.0,2024.0,646.0,5.8703,500001.0,<1H OCEAN --118.55,34.37,21.0,7010.0,1063.0,3331.0,1038.0,6.776,278100.0,<1H OCEAN --118.56,34.37,23.0,3927.0,728.0,1984.0,707.0,4.8536,202600.0,<1H OCEAN --118.55,34.41,8.0,21086.0,3945.0,9936.0,3790.0,5.8602,265100.0,<1H OCEAN --118.55,34.38,24.0,6246.0,1028.0,2803.0,999.0,6.3002,282900.0,<1H OCEAN --118.56,34.41,4.0,17313.0,3224.0,6902.0,2707.0,5.6798,320900.0,<1H OCEAN --118.55,34.39,16.0,8726.0,1317.0,3789.0,1279.0,6.8419,323300.0,<1H OCEAN --118.61,34.38,2.0,5989.0,883.0,1787.0,613.0,6.6916,329500.0,INLAND --117.86,34.24,52.0,803.0,267.0,628.0,225.0,4.1932,14999.0,INLAND --118.12,34.23,52.0,433.0,69.0,147.0,53.0,3.9583,162500.0,INLAND --118.35,34.32,52.0,102.0,29.0,54.0,32.0,1.9875,191700.0,<1H OCEAN --118.38,34.3,39.0,1622.0,355.0,903.0,314.0,4.1125,183000.0,<1H OCEAN --118.29,34.36,34.0,503.0,99.0,275.0,68.0,4.5491,375000.0,INLAND --119.53,37.34,26.0,4047.0,702.0,571.0,199.0,2.3482,179500.0,INLAND --119.51,37.32,14.0,362.0,78.0,88.0,39.0,3.5893,214300.0,INLAND --119.56,37.29,14.0,2391.0,451.0,798.0,308.0,3.0924,114600.0,INLAND --119.45,37.21,17.0,3538.0,726.0,1603.0,629.0,2.9449,95600.0,INLAND --119.65,37.09,17.0,1280.0,254.0,707.0,267.0,3.55,106300.0,INLAND --119.59,37.39,19.0,3273.0,611.0,1164.0,481.0,3.5446,106500.0,INLAND --119.66,37.39,10.0,2106.0,410.0,1003.0,397.0,2.7813,124100.0,INLAND --119.68,37.35,13.0,2307.0,386.0,925.0,347.0,3.1326,119800.0,INLAND --119.72,37.38,16.0,2131.0,424.0,989.0,369.0,2.6071,103700.0,INLAND --119.65,37.32,11.0,2161.0,448.0,820.0,405.0,2.3565,122300.0,INLAND --119.64,37.31,15.0,2654.0,530.0,1267.0,489.0,2.8393,104400.0,INLAND --119.6,37.29,13.0,1722.0,325.0,712.0,269.0,2.625,137500.0,INLAND --119.62,37.33,7.0,3389.0,621.0,1268.0,474.0,3.0224,147800.0,INLAND --119.91,37.23,17.0,2171.0,389.0,1042.0,375.0,3.625,94400.0,INLAND --119.85,37.1,8.0,828.0,168.0,413.0,146.0,3.375,80700.0,INLAND --119.68,37.19,10.0,3113.0,589.0,1508.0,512.0,2.8167,96100.0,INLAND --119.77,37.19,8.0,5212.0,872.0,2383.0,857.0,4.1099,113600.0,INLAND --119.67,37.27,13.0,5087.0,981.0,2284.0,913.0,2.7413,123100.0,INLAND --120.31,37.11,38.0,1696.0,301.0,985.0,278.0,2.4054,112500.0,INLAND --120.35,37.04,37.0,1495.0,292.0,858.0,275.0,2.9306,46300.0,INLAND --120.25,37.04,21.0,1724.0,317.0,1006.0,290.0,3.2868,91700.0,INLAND --120.16,37.12,29.0,1995.0,392.0,1261.0,354.0,1.9073,79200.0,INLAND --120.27,37.11,18.0,1277.0,234.0,674.0,238.0,2.6694,75900.0,INLAND --120.25,37.11,20.0,2062.0,466.0,1285.0,456.0,1.5319,50500.0,INLAND --120.26,37.11,33.0,1097.0,254.0,627.0,253.0,1.2794,50700.0,INLAND --120.27,37.12,42.0,1142.0,236.0,597.0,210.0,1.7279,52300.0,INLAND --120.27,37.12,36.0,1219.0,258.0,639.0,245.0,1.9464,57000.0,INLAND --120.27,37.12,17.0,3328.0,628.0,1580.0,619.0,2.9861,81500.0,INLAND --120.26,37.13,33.0,1239.0,250.0,648.0,227.0,2.0278,58800.0,INLAND --120.43,36.99,16.0,1027.0,199.0,673.0,193.0,2.9688,63800.0,INLAND --120.29,36.88,34.0,1391.0,297.0,943.0,281.0,2.4219,83900.0,INLAND --120.06,36.95,24.0,646.0,134.0,454.0,149.0,2.125,61900.0,INLAND --120.06,36.94,19.0,901.0,183.0,700.0,190.0,2.2375,64300.0,INLAND --120.04,36.93,11.0,3606.0,699.0,2074.0,644.0,2.6941,63300.0,INLAND --120.05,36.95,18.0,2287.0,534.0,1339.0,505.0,2.2527,65200.0,INLAND --120.21,36.98,21.0,1667.0,303.0,861.0,276.0,2.6012,92200.0,INLAND --120.16,36.96,18.0,508.0,104.0,393.0,114.0,3.0,156300.0,INLAND --120.11,36.96,17.0,3344.0,570.0,1624.0,536.0,3.8952,95300.0,INLAND --120.08,37.06,18.0,402.0,76.0,213.0,71.0,1.9063,95800.0,INLAND --120.09,37.0,11.0,3761.0,675.0,2374.0,673.0,3.4598,74600.0,INLAND --120.06,37.02,13.0,6301.0,1080.0,3840.0,1033.0,3.5258,84900.0,INLAND --119.94,37.04,14.0,1636.0,253.0,766.0,225.0,3.125,88500.0,INLAND --120.09,37.02,9.0,1608.0,297.0,1057.0,295.0,3.7143,81600.0,INLAND --119.95,36.96,18.0,1996.0,379.0,1327.0,356.0,2.6087,96000.0,INLAND --120.02,36.95,25.0,2115.0,482.0,1976.0,474.0,1.8431,53900.0,INLAND --119.9,36.94,11.0,2513.0,408.0,1360.0,415.0,4.277,98500.0,INLAND --119.85,36.97,13.0,2872.0,477.0,1607.0,481.0,4.475,102400.0,INLAND --119.88,36.93,12.0,3174.0,520.0,1590.0,488.0,4.5347,101200.0,INLAND --119.87,36.93,13.0,1429.0,209.0,702.0,205.0,4.3625,111800.0,INLAND --120.07,36.98,12.0,1790.0,379.0,1399.0,397.0,2.5388,59600.0,INLAND --120.06,36.98,12.0,2710.0,575.0,1724.0,516.0,1.4712,60400.0,INLAND --120.05,36.98,16.0,3705.0,739.0,2463.0,697.0,2.5288,61800.0,INLAND --120.05,36.97,20.0,2029.0,427.0,983.0,401.0,1.8444,47100.0,INLAND --120.06,36.97,38.0,1542.0,364.0,1220.0,334.0,1.625,52800.0,INLAND --120.07,36.97,28.0,1563.0,403.0,1564.0,408.0,1.5662,48000.0,INLAND --120.07,36.96,34.0,1457.0,239.0,557.0,226.0,3.6181,96500.0,INLAND --120.08,36.97,13.0,3356.0,589.0,1458.0,601.0,3.8257,94200.0,INLAND --120.1,36.96,20.0,2100.0,317.0,910.0,274.0,4.8187,90900.0,INLAND --120.09,36.95,16.0,3222.0,511.0,1425.0,503.0,4.1544,119400.0,INLAND --120.08,36.96,36.0,2074.0,349.0,954.0,363.0,3.1136,73800.0,INLAND --120.08,36.95,41.0,1164.0,211.0,476.0,171.0,2.4196,70700.0,INLAND --120.07,36.97,27.0,968.0,240.0,587.0,231.0,1.6071,55000.0,INLAND --120.06,36.97,35.0,1859.0,428.0,1208.0,399.0,1.4044,61700.0,INLAND --120.05,36.96,37.0,1000.0,261.0,1092.0,233.0,1.4267,52300.0,INLAND --120.05,36.95,31.0,696.0,254.0,913.0,248.0,1.4,52500.0,INLAND --120.06,36.96,44.0,1288.0,295.0,723.0,287.0,1.6534,61400.0,INLAND --120.07,36.96,42.0,963.0,216.0,471.0,211.0,2.2898,66100.0,INLAND --120.07,36.96,32.0,1268.0,283.0,549.0,273.0,1.4511,65200.0,INLAND --120.04,36.97,20.0,2129.0,526.0,1845.0,522.0,1.8973,51600.0,INLAND --120.04,36.96,23.0,2126.0,506.0,2091.0,491.0,1.3713,51800.0,INLAND --120.04,36.95,36.0,1528.0,347.0,1334.0,304.0,1.3594,48300.0,INLAND --119.98,36.9,26.0,1284.0,239.0,820.0,254.0,2.5833,62300.0,INLAND --119.81,36.92,14.0,4795.0,710.0,2047.0,640.0,4.665,121300.0,INLAND --119.98,36.86,31.0,2366.0,482.0,1933.0,433.0,3.0234,65000.0,INLAND --120.13,36.87,32.0,2089.0,468.0,1765.0,427.0,2.234,61700.0,INLAND --122.49,38.1,43.0,1226.0,244.0,491.0,205.0,4.9286,307000.0,NEAR BAY --122.54,38.14,16.0,4431.0,603.0,1659.0,630.0,7.5412,392100.0,NEAR BAY --122.55,38.1,26.0,5188.0,892.0,2341.0,906.0,5.0029,255600.0,NEAR BAY --122.62,38.15,14.0,2259.0,341.0,1127.0,346.0,6.4092,334900.0,<1H OCEAN --122.59,38.13,20.0,1589.0,231.0,601.0,224.0,5.3755,290900.0,<1H OCEAN --122.58,38.15,9.0,1302.0,177.0,682.0,190.0,7.5,423200.0,<1H OCEAN --122.57,38.11,24.0,2863.0,734.0,1583.0,682.0,3.1981,215300.0,NEAR BAY --122.57,38.11,32.0,3521.0,748.0,1706.0,723.0,3.4705,228600.0,NEAR BAY --122.59,38.12,25.0,7784.0,1145.0,3445.0,1166.0,6.0132,287900.0,<1H OCEAN --122.58,38.12,13.0,5027.0,871.0,1912.0,770.0,4.9286,309500.0,NEAR BAY --122.6,38.11,19.0,1752.0,328.0,873.0,336.0,3.8068,201600.0,<1H OCEAN --122.6,38.11,23.0,8642.0,1294.0,3594.0,1253.0,5.3962,301500.0,<1H OCEAN --122.65,38.11,21.0,3891.0,616.0,1968.0,632.0,5.5524,279200.0,<1H OCEAN --122.61,38.09,18.0,6205.0,821.0,2311.0,756.0,6.9081,368700.0,<1H OCEAN --122.58,38.1,22.0,11872.0,2300.0,5600.0,2200.0,4.6463,276300.0,NEAR BAY --122.58,38.08,27.0,10839.0,1637.0,4406.0,1623.0,5.615,285600.0,NEAR BAY --122.55,38.07,5.0,1495.0,235.0,555.0,201.0,6.7232,345000.0,NEAR BAY --122.56,38.09,17.0,9614.0,2123.0,4684.0,2060.0,4.1705,209800.0,NEAR BAY --122.56,38.06,19.0,15622.0,2721.0,6109.0,2615.0,5.0965,295300.0,NEAR BAY --122.55,38.07,38.0,3392.0,709.0,1894.0,713.0,3.0573,350800.0,NEAR BAY --122.41,38.07,20.0,4536.0,708.0,1812.0,701.0,6.0433,435900.0,NEAR BAY --122.51,38.06,24.0,9493.0,1935.0,5162.0,1880.0,3.0742,118800.0,NEAR BAY --122.53,38.01,16.0,1495.0,292.0,472.0,284.0,3.4432,67500.0,NEAR BAY --122.44,38.03,13.0,4284.0,1042.0,2146.0,937.0,4.1289,179200.0,NEAR BAY --122.45,38.01,36.0,4501.0,832.0,2196.0,800.0,4.3182,252700.0,NEAR BAY --122.53,38.01,27.0,3121.0,531.0,1318.0,489.0,5.4781,310900.0,NEAR BAY --122.51,38.0,17.0,2449.0,536.0,1157.0,543.0,3.9519,274200.0,NEAR BAY --122.49,38.0,26.0,48.0,8.0,19.0,8.0,7.7197,400000.0,NEAR BAY --122.55,38.03,29.0,7174.0,1169.0,3063.0,1172.0,6.0902,293200.0,NEAR BAY --122.57,38.03,24.0,2330.0,322.0,911.0,320.0,6.5253,387700.0,NEAR BAY --122.56,38.03,34.0,1887.0,290.0,815.0,283.0,6.5249,324800.0,NEAR BAY --122.59,38.04,25.0,3412.0,455.0,1238.0,406.0,8.3646,397300.0,NEAR BAY --122.57,38.02,33.0,9531.0,1487.0,3798.0,1409.0,5.6512,314000.0,NEAR BAY --122.56,38.01,21.0,2144.0,400.0,840.0,398.0,4.6,239500.0,NEAR BAY --122.55,38.02,27.0,4985.0,711.0,1928.0,742.0,6.4978,361500.0,NEAR BAY --122.55,38.01,27.0,3966.0,577.0,1657.0,611.0,6.3314,342200.0,NEAR BAY --122.54,38.0,28.0,3416.0,826.0,1694.0,800.0,3.18,277000.0,NEAR BAY --122.55,38.0,18.0,3119.0,803.0,1395.0,722.0,3.9265,301100.0,NEAR BAY --122.54,37.99,32.0,2236.0,348.0,818.0,330.0,7.3521,444000.0,NEAR BAY --122.52,37.98,31.0,6555.0,1571.0,2962.0,1464.0,2.8903,324200.0,NEAR BAY --122.54,37.98,52.0,1758.0,316.0,607.0,264.0,5.5083,371900.0,NEAR BAY --122.55,37.99,34.0,3306.0,555.0,1398.0,585.0,4.8993,319900.0,NEAR BAY --122.53,37.98,32.0,2390.0,336.0,810.0,354.0,8.5759,500001.0,NEAR BAY --122.55,37.98,31.0,3807.0,828.0,1581.0,795.0,3.293,337500.0,NEAR BAY --122.51,37.99,32.0,4138.0,632.0,1541.0,626.0,5.5791,433300.0,NEAR BAY --122.51,37.98,37.0,4801.0,699.0,1830.0,679.0,6.0762,487800.0,NEAR BAY --122.51,37.97,37.0,4296.0,1089.0,2100.0,1025.0,3.2462,329400.0,NEAR BAY --122.47,37.99,22.0,7274.0,1002.0,2468.0,957.0,7.494,439200.0,NEAR BAY --122.46,37.98,10.0,1325.0,189.0,427.0,162.0,12.0933,500001.0,NEAR BAY --122.49,37.99,27.0,5470.0,755.0,1916.0,764.0,6.994,420800.0,NEAR BAY --122.49,37.98,34.0,1256.0,178.0,460.0,174.0,6.4271,451700.0,NEAR BAY --122.53,37.97,52.0,205.0,119.0,228.0,132.0,1.9063,200000.0,NEAR BAY --122.53,37.97,52.0,1560.0,451.0,700.0,419.0,2.5125,270800.0,NEAR BAY --122.53,37.97,44.0,3595.0,953.0,1831.0,910.0,2.6036,287500.0,NEAR BAY --122.54,37.97,39.0,4193.0,762.0,1833.0,737.0,5.6263,352100.0,NEAR BAY --122.52,37.97,33.0,563.0,194.0,265.0,169.0,2.75,231300.0,NEAR BAY --122.51,37.96,39.0,3302.0,684.0,1574.0,653.0,3.6863,263800.0,NEAR BAY --122.52,37.96,35.0,2012.0,346.0,818.0,352.0,5.2818,331000.0,NEAR BAY --122.53,37.97,37.0,1340.0,322.0,621.0,314.0,3.5588,268800.0,NEAR BAY --122.52,37.95,37.0,350.0,57.0,179.0,69.0,6.2862,500001.0,NEAR BAY --122.53,37.96,35.0,908.0,194.0,413.0,197.0,3.9917,290800.0,NEAR BAY --122.47,37.95,16.0,3769.0,839.0,1986.0,815.0,3.9712,187500.0,NEAR BAY --122.5,37.96,16.0,100.0,20.0,45.0,25.0,6.1359,212500.0,NEAR BAY --122.5,37.97,25.0,6526.0,1902.0,5917.0,1812.0,2.7273,187500.0,NEAR BAY --122.64,38.01,36.0,1336.0,258.0,678.0,249.0,5.5789,292000.0,NEAR OCEAN --122.64,38.01,36.0,1199.0,232.0,551.0,229.0,3.7321,266700.0,NEAR OCEAN --122.68,38.01,41.0,1865.0,392.0,825.0,369.0,4.2011,255400.0,NEAR OCEAN --122.7,38.03,42.0,1410.0,308.0,624.0,292.0,4.1379,309100.0,NEAR OCEAN --122.65,38.01,40.0,1428.0,280.0,708.0,255.0,5.0766,305400.0,NEAR OCEAN --122.59,37.97,46.0,4036.0,856.0,1872.0,833.0,4.5625,275200.0,NEAR OCEAN --122.61,37.99,40.0,7737.0,1488.0,3108.0,1349.0,4.4375,289600.0,NEAR OCEAN --122.62,37.97,52.0,370.0,62.0,150.0,56.0,7.7006,316700.0,NEAR OCEAN --122.59,37.99,36.0,4869.0,871.0,1899.0,827.0,4.1659,302000.0,NEAR BAY --122.6,38.0,21.0,2198.0,462.0,1100.0,449.0,4.1098,246600.0,<1H OCEAN --122.59,38.01,35.0,8814.0,1307.0,3450.0,1258.0,6.1724,414300.0,NEAR BAY --122.57,37.99,45.0,2404.0,425.0,926.0,400.0,4.9674,320100.0,NEAR BAY --122.57,37.99,38.0,5587.0,996.0,2466.0,1027.0,4.1711,336900.0,NEAR BAY --122.57,37.98,49.0,2860.0,552.0,1178.0,522.0,4.625,355000.0,NEAR BAY --122.58,37.98,52.0,3675.0,649.0,1553.0,639.0,4.6905,316300.0,NEAR BAY --122.58,37.98,52.0,1180.0,216.0,467.0,197.0,4.9615,292200.0,NEAR BAY --122.56,37.98,36.0,2649.0,542.0,1111.0,557.0,4.8056,345700.0,NEAR BAY --122.56,37.97,52.0,1833.0,324.0,735.0,306.0,4.6944,398900.0,NEAR BAY --122.57,37.97,47.0,5416.0,1115.0,2177.0,1027.0,3.5055,382100.0,NEAR BAY --122.55,37.97,52.0,2232.0,291.0,731.0,253.0,7.1155,500001.0,NEAR BAY --122.57,37.96,52.0,3458.0,468.0,1449.0,471.0,9.1834,500001.0,NEAR BAY --122.56,37.95,34.0,2677.0,411.0,933.0,410.0,6.1444,500001.0,NEAR OCEAN --122.56,37.94,36.0,2023.0,242.0,653.0,241.0,10.6272,500001.0,NEAR BAY --122.64,37.96,29.0,377.0,58.0,151.0,67.0,9.5551,500001.0,NEAR OCEAN --122.54,37.96,44.0,1552.0,204.0,596.0,208.0,10.129,500001.0,NEAR BAY --122.54,37.96,33.0,2534.0,495.0,996.0,449.0,4.3083,500001.0,NEAR BAY --122.54,37.95,38.0,2310.0,400.0,971.0,386.0,5.697,435700.0,NEAR BAY --122.52,37.95,33.0,4448.0,631.0,1675.0,628.0,7.8904,468800.0,NEAR BAY --122.53,37.95,22.0,7446.0,1979.0,2980.0,1888.0,3.5838,271300.0,NEAR BAY --122.53,37.96,36.0,4385.0,620.0,1549.0,626.0,8.3935,470500.0,NEAR BAY --122.53,37.93,42.0,2171.0,362.0,887.0,347.0,6.6125,393200.0,NEAR BAY --122.54,37.93,43.0,2998.0,470.0,970.0,430.0,5.5385,431800.0,NEAR BAY --122.54,37.94,39.0,3670.0,775.0,1519.0,788.0,4.4081,435200.0,NEAR BAY --122.54,37.94,26.0,3990.0,804.0,1550.0,792.0,5.1834,405500.0,NEAR BAY --122.52,37.94,18.0,1804.0,284.0,600.0,241.0,5.9582,500001.0,NEAR BAY --122.53,37.94,18.0,878.0,255.0,384.0,247.0,4.7344,200000.0,NEAR BAY --122.52,37.93,34.0,2782.0,502.0,1219.0,507.0,5.0779,333900.0,NEAR BAY --122.51,37.92,32.0,2622.0,541.0,1022.0,464.0,3.7647,375000.0,NEAR BAY --122.52,37.92,24.0,421.0,64.0,163.0,75.0,14.5833,500001.0,NEAR BAY --122.53,37.92,42.0,1741.0,301.0,723.0,306.0,5.5379,410500.0,NEAR BAY --122.53,37.93,37.0,1722.0,352.0,648.0,337.0,4.125,310300.0,NEAR BAY --122.53,37.92,45.0,1530.0,324.0,608.0,328.0,3.875,390800.0,NEAR BAY --122.52,37.92,47.0,793.0,163.0,334.0,151.0,5.8509,317800.0,NEAR BAY --122.5,37.92,32.0,2639.0,415.0,1013.0,408.0,6.1632,349200.0,NEAR BAY --122.5,37.92,30.0,2270.0,359.0,974.0,351.0,5.5926,300900.0,NEAR BAY --122.49,37.92,26.0,2170.0,347.0,849.0,318.0,6.2953,386200.0,NEAR BAY --122.51,37.91,2.0,647.0,136.0,203.0,118.0,6.641,310000.0,NEAR BAY --122.48,37.93,16.0,2947.0,802.0,1385.0,743.0,3.6731,318000.0,NEAR BAY --122.46,37.88,35.0,2492.0,409.0,812.0,373.0,8.8386,500001.0,NEAR BAY --122.47,37.87,36.0,4471.0,618.0,1315.0,582.0,11.5706,500001.0,NEAR BAY --122.45,37.91,27.0,2682.0,382.0,935.0,369.0,10.0791,500001.0,NEAR BAY --122.5,37.91,31.0,7001.0,1282.0,2755.0,1267.0,5.4851,441100.0,NEAR BAY --122.49,37.89,23.0,1650.0,403.0,541.0,336.0,6.0238,500001.0,NEAR BAY --122.47,37.89,23.0,10774.0,1736.0,3895.0,1683.0,7.2905,500001.0,NEAR BAY --122.45,37.9,30.0,3763.0,717.0,1292.0,632.0,8.4888,500001.0,NEAR BAY --122.5,37.88,28.0,5448.0,1089.0,2100.0,1023.0,4.7475,474600.0,NEAR BAY --122.51,37.89,27.0,2674.0,565.0,1233.0,547.0,3.4485,458300.0,NEAR BAY --122.53,37.91,37.0,2524.0,398.0,999.0,417.0,7.9892,500001.0,NEAR BAY --122.53,37.9,44.0,2846.0,551.0,1232.0,537.0,3.8839,327200.0,NEAR BAY --122.54,37.9,48.0,2491.0,460.0,937.0,455.0,4.4375,370000.0,NEAR BAY --122.54,37.91,48.0,2924.0,489.0,1159.0,505.0,5.6302,489000.0,NEAR BAY --122.55,37.92,52.0,2303.0,350.0,859.0,359.0,6.1085,500001.0,NEAR BAY --122.52,37.91,30.0,4174.0,739.0,1818.0,705.0,5.5951,402900.0,NEAR BAY --122.52,37.89,17.0,4363.0,1041.0,1640.0,989.0,3.9531,417600.0,NEAR BAY --122.52,37.9,16.0,1704.0,402.0,689.0,348.0,4.4239,267100.0,NEAR BAY --122.54,37.9,41.0,3170.0,622.0,1091.0,528.0,3.7813,389200.0,NEAR BAY --122.55,37.9,34.0,1431.0,224.0,503.0,220.0,7.9606,453400.0,NEAR BAY --122.56,37.9,48.0,1550.0,253.0,641.0,276.0,8.634,463500.0,NEAR BAY --122.56,37.91,52.0,1972.0,327.0,755.0,345.0,7.1924,500001.0,NEAR BAY --122.56,37.92,37.0,1926.0,290.0,721.0,298.0,8.9248,500001.0,NEAR BAY --122.55,37.91,48.0,1283.0,278.0,567.0,255.0,3.2794,460000.0,NEAR BAY --122.53,37.88,25.0,4921.0,866.0,1913.0,834.0,6.8742,413100.0,NEAR BAY --122.54,37.88,30.0,4382.0,732.0,1775.0,745.0,6.7809,414400.0,NEAR BAY --122.53,37.87,20.0,1814.0,282.0,658.0,253.0,7.9977,400000.0,NEAR BAY --122.53,37.88,36.0,2688.0,485.0,1064.0,449.0,4.4583,308600.0,NEAR BAY --122.56,37.9,36.0,1760.0,283.0,562.0,246.0,6.7546,402400.0,NEAR BAY --122.54,37.89,33.0,4971.0,836.0,1907.0,795.0,6.1275,424400.0,NEAR BAY --122.53,37.89,35.0,4127.0,689.0,1596.0,707.0,5.9073,400400.0,NEAR BAY --122.56,37.9,24.0,221.0,41.0,75.0,38.0,5.1292,362500.0,NEAR BAY --122.51,37.87,21.0,3904.0,980.0,1949.0,919.0,2.862,258400.0,NEAR BAY --122.47,37.85,19.0,1926.0,593.0,881.0,546.0,2.9145,140400.0,NEAR BAY --122.5,37.87,17.0,4333.0,947.0,1650.0,919.0,6.3066,346100.0,NEAR BAY --122.49,37.86,35.0,2729.0,538.0,969.0,528.0,6.7669,500001.0,NEAR BAY --122.49,37.86,52.0,2175.0,510.0,809.0,503.0,4.5398,442000.0,NEAR BAY --122.48,37.86,52.0,3914.0,752.0,1177.0,670.0,6.2113,500001.0,NEAR BAY --122.48,37.85,42.0,6297.0,1307.0,2096.0,1205.0,6.4752,500001.0,NEAR BAY --122.49,37.85,38.0,240.0,29.0,63.0,34.0,12.2547,500001.0,NEAR BAY --122.52,37.88,52.0,176.0,50.0,88.0,46.0,3.8068,275000.0,NEAR BAY --122.62,37.85,30.0,833.0,164.0,358.0,143.0,6.8198,493800.0,NEAR OCEAN --122.53,37.86,38.0,1183.0,196.0,628.0,205.0,3.75,478600.0,NEAR BAY --122.66,37.93,42.0,1505.0,324.0,553.0,277.0,4.1792,350000.0,NEAR OCEAN --122.71,37.88,21.0,2845.0,552.0,599.0,250.0,4.3125,495800.0,NEAR OCEAN --122.69,37.91,43.0,1730.0,326.0,629.0,279.0,4.3194,238700.0,NEAR OCEAN --122.71,37.9,23.0,1250.0,257.0,437.0,188.0,3.115,242600.0,NEAR OCEAN --122.86,38.1,44.0,2602.0,509.0,691.0,343.0,4.3125,261500.0,NEAR OCEAN --122.84,38.07,31.0,1858.0,367.0,701.0,297.0,3.8269,270700.0,NEAR OCEAN --122.93,38.02,28.0,1284.0,265.0,628.0,219.0,3.5469,200000.0,NEAR OCEAN --122.68,38.07,26.0,1445.0,244.0,510.0,207.0,5.6305,430000.0,NEAR OCEAN --122.9,38.28,52.0,1275.0,218.0,627.0,185.0,2.3482,163500.0,NEAR OCEAN --122.96,38.26,20.0,1982.0,358.0,308.0,132.0,3.1429,240900.0,NEAR OCEAN --122.81,38.08,19.0,1615.0,366.0,815.0,337.0,3.4609,238800.0,NEAR OCEAN --122.8,38.18,36.0,2378.0,476.0,957.0,362.0,3.625,253100.0,NEAR OCEAN --120.19,37.53,25.0,1470.0,341.0,706.0,283.0,1.7614,71300.0,INLAND --120.02,37.57,17.0,2116.0,425.0,909.0,319.0,2.7188,113100.0,INLAND --119.99,37.51,14.0,2878.0,617.0,1011.0,509.0,1.398,103800.0,INLAND --119.95,37.47,32.0,1312.0,315.0,600.0,265.0,1.5,91500.0,INLAND --119.98,37.43,12.0,2776.0,592.0,1236.0,489.0,2.5551,105000.0,INLAND --120.07,37.34,16.0,1667.0,372.0,762.0,283.0,1.75,87500.0,INLAND --120.31,37.64,11.0,2403.0,497.0,890.0,344.0,3.0,120800.0,INLAND --120.15,37.69,13.0,866.0,252.0,369.0,165.0,2.875,70200.0,INLAND --120.02,37.72,17.0,2806.0,600.0,990.0,410.0,2.3818,88100.0,INLAND --119.81,37.67,24.0,172.0,42.0,79.0,30.0,3.8333,93800.0,INLAND --119.82,37.57,13.0,1713.0,340.0,643.0,241.0,2.662,92400.0,INLAND --119.9,37.49,13.0,2230.0,443.0,920.0,361.0,3.0,112000.0,INLAND --119.84,37.48,17.0,2582.0,553.0,1087.0,423.0,2.5,104200.0,INLAND --119.8,37.5,15.0,989.0,184.0,406.0,151.0,3.1771,121900.0,INLAND --119.72,37.46,13.0,1999.0,375.0,750.0,308.0,2.875,96000.0,INLAND --119.85,37.39,14.0,2744.0,555.0,1153.0,474.0,2.753,111100.0,INLAND --119.55,37.75,30.0,2165.0,536.0,1500.0,414.0,3.5391,55900.0,INLAND --119.64,37.61,30.0,2857.0,661.0,291.0,135.0,2.6838,164600.0,INLAND --123.15,39.74,23.0,608.0,143.0,281.0,108.0,2.9306,70000.0,INLAND --123.24,39.81,25.0,1435.0,304.0,746.0,259.0,1.7788,57900.0,INLAND --123.23,39.77,25.0,2075.0,435.0,991.0,377.0,1.2281,60300.0,INLAND --123.47,39.8,18.0,2130.0,545.0,863.0,346.0,2.3571,79200.0,INLAND --123.71,39.88,42.0,1518.0,383.0,656.0,303.0,1.4952,69800.0,NEAR OCEAN --123.84,39.83,19.0,1461.0,340.0,515.0,227.0,1.5278,145800.0,NEAR OCEAN --123.58,39.66,15.0,1839.0,489.0,887.0,332.0,2.2429,100000.0,<1H OCEAN --123.5,39.67,22.0,2124.0,450.0,1122.0,446.0,2.1793,71500.0,INLAND --123.64,39.45,21.0,3359.0,677.0,1908.0,642.0,3.0433,140700.0,<1H OCEAN --123.79,39.5,24.0,1421.0,291.0,588.0,274.0,2.325,157300.0,<1H OCEAN --123.8,39.47,28.0,2492.0,507.0,1202.0,460.0,2.7857,150300.0,<1H OCEAN --123.73,39.44,32.0,790.0,151.0,380.0,142.0,2.7,165000.0,<1H OCEAN --123.84,39.46,47.0,1150.0,244.0,552.0,201.0,2.5192,110400.0,<1H OCEAN --123.8,39.46,35.0,1718.0,345.0,698.0,299.0,2.9243,131600.0,<1H OCEAN --123.8,39.44,52.0,1533.0,336.0,754.0,340.0,1.9213,95000.0,<1H OCEAN --123.79,39.44,49.0,2290.0,482.0,1201.0,479.0,3.5,113300.0,<1H OCEAN --123.8,39.44,33.0,2024.0,459.0,1019.0,422.0,1.9208,93600.0,<1H OCEAN --123.79,39.44,36.0,1330.0,273.0,761.0,286.0,2.7813,105800.0,<1H OCEAN --123.79,39.44,16.0,2017.0,423.0,1177.0,414.0,3.2171,116200.0,<1H OCEAN --123.85,39.42,11.0,1804.0,506.0,895.0,451.0,1.7574,150000.0,<1H OCEAN --123.34,39.5,15.0,2342.0,535.0,1064.0,433.0,1.8967,96600.0,INLAND --123.4,39.46,10.0,4086.0,831.0,2111.0,758.0,3.2156,104400.0,<1H OCEAN --123.32,39.42,22.0,2085.0,432.0,1133.0,402.0,2.3906,92600.0,<1H OCEAN --123.38,39.37,18.0,3946.0,813.0,1899.0,730.0,2.6424,124600.0,<1H OCEAN --123.35,39.42,18.0,1619.0,346.0,904.0,295.0,2.1625,77200.0,<1H OCEAN --123.37,39.43,32.0,2780.0,470.0,1281.0,479.0,3.588,96000.0,<1H OCEAN --123.36,39.41,46.0,1748.0,362.0,808.0,330.0,2.9183,76900.0,<1H OCEAN --123.35,39.4,27.0,1321.0,338.0,779.0,327.0,1.85,71800.0,<1H OCEAN --123.36,39.4,21.0,1081.0,254.0,715.0,275.0,1.5625,71500.0,<1H OCEAN --123.34,39.39,18.0,2821.0,628.0,1636.0,615.0,2.3333,84000.0,<1H OCEAN --123.1,39.36,19.0,1056.0,248.0,611.0,226.0,1.746,105000.0,INLAND --123.23,39.33,20.0,804.0,121.0,448.0,140.0,3.9632,147100.0,<1H OCEAN --123.15,39.31,19.0,1026.0,205.0,424.0,152.0,2.8833,154200.0,INLAND --123.11,39.32,20.0,2745.0,504.0,1421.0,430.0,3.3431,137500.0,INLAND --123.18,39.26,25.0,3066.0,570.0,1558.0,535.0,3.788,134200.0,<1H OCEAN --123.22,39.28,16.0,5569.0,1106.0,3148.0,1088.0,3.1455,142900.0,<1H OCEAN --123.36,39.25,17.0,1087.0,254.0,522.0,202.0,2.5875,144500.0,<1H OCEAN --123.18,39.23,18.0,243.0,55.0,115.0,54.0,2.125,175000.0,<1H OCEAN --123.21,39.2,17.0,3145.0,693.0,1560.0,647.0,2.2926,149300.0,<1H OCEAN --123.19,39.21,22.0,1542.0,291.0,821.0,285.0,3.5917,118800.0,<1H OCEAN --123.2,39.23,26.0,786.0,168.0,494.0,161.0,2.3583,105400.0,<1H OCEAN --123.75,39.37,16.0,1377.0,296.0,830.0,279.0,3.25,151400.0,<1H OCEAN --123.85,39.39,23.0,4671.0,912.0,2095.0,857.0,3.184,140500.0,<1H OCEAN --123.81,39.34,17.0,1981.0,371.0,773.0,325.0,3.1563,277000.0,<1H OCEAN --123.7,39.32,18.0,1652.0,352.0,711.0,292.0,3.1071,213200.0,<1H OCEAN --123.81,39.31,23.0,2754.0,577.0,887.0,432.0,3.3654,225000.0,NEAR OCEAN --123.73,39.17,20.0,4620.0,1042.0,1745.0,794.0,2.375,158800.0,NEAR OCEAN --123.53,38.93,38.0,1706.0,355.0,506.0,211.0,2.5625,165600.0,NEAR OCEAN --123.69,38.9,17.0,2206.0,478.0,1140.0,428.0,2.1985,95300.0,NEAR OCEAN --123.59,38.8,17.0,5202.0,1037.0,1742.0,803.0,3.1201,176100.0,NEAR OCEAN --123.54,39.17,18.0,2251.0,510.0,1032.0,369.0,2.2946,101000.0,<1H OCEAN --123.39,38.99,28.0,1416.0,294.0,812.0,258.0,3.4063,109400.0,<1H OCEAN --123.36,39.01,35.0,1551.0,321.0,857.0,288.0,2.7232,115400.0,<1H OCEAN --123.21,39.18,17.0,2772.0,576.0,1501.0,584.0,2.6275,142100.0,<1H OCEAN --123.34,39.1,24.0,5372.0,1051.0,3002.0,992.0,3.0652,131100.0,<1H OCEAN --123.21,39.07,17.0,1890.0,342.0,877.0,312.0,3.7833,159800.0,<1H OCEAN --123.22,39.15,45.0,1348.0,265.0,639.0,270.0,3.3667,115200.0,<1H OCEAN --123.22,39.16,32.0,1149.0,187.0,499.0,208.0,3.6587,154600.0,<1H OCEAN --123.23,39.13,33.0,1176.0,211.0,529.0,217.0,3.8958,144000.0,<1H OCEAN --123.22,39.15,36.0,1166.0,216.0,504.0,203.0,3.5938,122100.0,<1H OCEAN --123.21,39.15,52.0,1370.0,258.0,617.0,228.0,2.55,112900.0,<1H OCEAN --123.21,39.14,39.0,1419.0,262.0,661.0,278.0,3.0,114600.0,<1H OCEAN --123.21,39.13,27.0,1531.0,266.0,822.0,234.0,4.0469,127400.0,<1H OCEAN --123.2,39.16,14.0,1908.0,484.0,1195.0,467.0,1.7929,82300.0,<1H OCEAN --123.22,39.16,29.0,6121.0,1222.0,3595.0,1189.0,2.631,109600.0,<1H OCEAN --123.2,39.15,27.0,990.0,238.0,592.0,225.0,2.0074,96200.0,<1H OCEAN --123.19,39.15,16.0,2577.0,495.0,1232.0,488.0,2.6012,125600.0,<1H OCEAN --123.21,39.15,31.0,2685.0,675.0,1367.0,626.0,1.6571,108900.0,<1H OCEAN --123.2,39.14,17.0,1620.0,396.0,878.0,399.0,1.8042,109200.0,<1H OCEAN --123.2,39.13,26.0,1474.0,417.0,1065.0,401.0,1.375,84400.0,<1H OCEAN --123.21,39.14,15.0,2235.0,545.0,1376.0,516.0,1.9032,100000.0,<1H OCEAN --123.1,39.15,32.0,1143.0,208.0,454.0,188.0,3.8333,116100.0,<1H OCEAN --123.17,39.18,14.0,2240.0,327.0,1030.0,308.0,5.9585,214900.0,<1H OCEAN --123.17,39.15,30.0,1904.0,331.0,816.0,325.0,4.425,161900.0,<1H OCEAN --123.16,39.13,33.0,1320.0,303.0,1048.0,303.0,1.7813,94700.0,<1H OCEAN --123.16,39.1,31.0,418.0,82.0,327.0,81.0,2.775,120800.0,<1H OCEAN --123.19,39.12,38.0,267.0,57.0,196.0,60.0,2.3125,70000.0,<1H OCEAN --123.15,38.94,22.0,2163.0,436.0,1048.0,358.0,2.7171,95800.0,<1H OCEAN --123.1,38.97,36.0,1211.0,247.0,697.0,251.0,2.5761,94900.0,<1H OCEAN --120.46,37.51,22.0,2704.0,497.0,1432.0,399.0,2.9,83100.0,INLAND --120.68,37.47,33.0,1028.0,226.0,658.0,197.0,2.3043,66300.0,INLAND --120.75,37.44,27.0,2295.0,424.0,1252.0,350.0,3.6182,123200.0,INLAND --120.76,37.44,18.0,2003.0,398.0,1333.0,411.0,2.7562,90500.0,INLAND --120.77,37.42,27.0,949.0,224.0,888.0,241.0,2.3333,72800.0,INLAND --120.79,37.43,17.0,2534.0,517.0,1764.0,502.0,2.8519,80700.0,INLAND --120.79,37.41,35.0,2436.0,466.0,1730.0,469.0,2.2071,85900.0,INLAND --120.71,37.39,11.0,1479.0,341.0,1476.0,327.0,3.2721,73800.0,INLAND --120.71,37.39,40.0,680.0,160.0,785.0,175.0,2.6058,72700.0,INLAND --120.69,37.4,46.0,860.0,130.0,496.0,147.0,3.5167,137500.0,INLAND --120.74,37.33,30.0,2390.0,470.0,1409.0,428.0,2.1484,81300.0,INLAND --120.75,37.37,32.0,1656.0,317.0,1037.0,286.0,2.4964,88800.0,INLAND --120.73,37.38,37.0,653.0,176.0,827.0,176.0,1.9236,64400.0,INLAND --120.72,37.38,22.0,1311.0,319.0,1455.0,340.0,2.2813,67300.0,INLAND --120.73,37.38,23.0,1451.0,292.0,1052.0,265.0,2.8698,72900.0,INLAND --120.71,37.38,14.0,1979.0,432.0,1756.0,382.0,2.6923,71400.0,INLAND --120.84,37.4,7.0,2773.0,530.0,1374.0,505.0,2.6214,103800.0,INLAND --120.86,37.4,17.0,3511.0,636.0,1904.0,617.0,3.1111,113900.0,INLAND --120.84,37.43,32.0,2892.0,521.0,1580.0,484.0,3.7784,164500.0,INLAND --120.94,37.4,32.0,1175.0,208.0,774.0,222.0,3.0,109400.0,INLAND --120.88,37.37,24.0,1294.0,222.0,684.0,221.0,2.6908,103100.0,INLAND --120.89,37.33,27.0,2692.0,481.0,1518.0,447.0,2.0417,94200.0,INLAND --120.64,37.38,21.0,3157.0,637.0,2268.0,620.0,2.567,70400.0,INLAND --120.64,37.38,19.0,2256.0,449.0,1469.0,435.0,2.5129,84600.0,INLAND --120.65,37.33,25.0,1731.0,311.0,810.0,266.0,4.1058,107600.0,INLAND --120.59,37.39,16.0,4717.0,1119.0,3589.0,1017.0,2.1061,72800.0,INLAND --120.63,37.41,27.0,2083.0,444.0,1462.0,479.0,2.6439,69100.0,INLAND --120.57,37.43,39.0,2235.0,412.0,1268.0,402.0,2.6758,74600.0,INLAND --120.6,37.37,10.0,3075.0,498.0,1368.0,487.0,4.6667,130100.0,INLAND --120.6,37.36,27.0,2521.0,484.0,1307.0,456.0,3.0911,86900.0,INLAND --120.63,37.36,16.0,1605.0,282.0,866.0,284.0,4.0694,110200.0,INLAND --120.62,37.35,18.0,874.0,203.0,572.0,190.0,1.6833,71000.0,INLAND --120.62,37.36,15.0,3455.0,729.0,2014.0,659.0,3.2656,83500.0,INLAND --120.62,37.37,8.0,2608.0,428.0,1530.0,435.0,3.968,102100.0,INLAND --120.59,37.36,11.0,3946.0,978.0,2814.0,953.0,2.0179,87300.0,INLAND --120.6,37.35,34.0,1722.0,316.0,904.0,315.0,2.4653,66100.0,INLAND --120.61,37.35,34.0,1900.0,401.0,1009.0,385.0,2.2222,75000.0,INLAND --120.62,37.35,20.0,1457.0,372.0,1000.0,346.0,1.4615,69200.0,INLAND --120.61,37.32,18.0,5009.0,826.0,2497.0,805.0,4.25,146300.0,INLAND --120.6,37.34,34.0,1830.0,431.0,1304.0,415.0,2.1182,68900.0,INLAND --120.61,37.36,16.0,638.0,,380.0,132.0,1.9135,87500.0,INLAND --120.57,37.35,18.0,704.0,176.0,520.0,154.0,3.003,101300.0,INLAND --120.6,37.35,19.0,3874.0,676.0,2441.0,707.0,3.2955,88600.0,INLAND --120.59,37.35,15.0,3249.0,613.0,1569.0,595.0,3.5393,88000.0,INLAND --120.58,37.36,33.0,3564.0,716.0,2603.0,696.0,2.2179,67500.0,INLAND --120.64,37.2,16.0,2236.0,438.0,1361.0,393.0,2.0066,125000.0,INLAND --120.55,37.32,21.0,1410.0,229.0,590.0,205.0,3.3194,141400.0,INLAND --120.49,37.26,28.0,2159.0,416.0,1283.0,378.0,1.8939,83000.0,INLAND --120.5,37.37,18.0,8606.0,1678.0,5303.0,1644.0,2.4012,79700.0,INLAND --120.41,37.16,21.0,1684.0,341.0,1052.0,312.0,2.0809,95800.0,INLAND --120.51,37.32,13.0,2109.0,477.0,1108.0,466.0,2.3099,89600.0,INLAND --120.49,37.32,10.0,1275.0,255.0,620.0,240.0,3.0263,118300.0,INLAND --120.5,37.32,13.0,1936.0,384.0,1158.0,367.0,2.75,83200.0,INLAND --120.49,37.32,13.0,3474.0,927.0,2149.0,821.0,1.9528,85300.0,INLAND --120.48,37.32,13.0,3641.0,897.0,1737.0,788.0,2.1418,130600.0,INLAND --120.47,37.32,15.0,3952.0,984.0,2024.0,1026.0,2.558,121600.0,INLAND --120.5,37.34,16.0,1245.0,231.0,956.0,219.0,3.4559,108000.0,INLAND --120.48,37.34,8.0,6146.0,1017.0,2821.0,987.0,4.67,127600.0,INLAND --120.47,37.34,9.0,2934.0,511.0,1227.0,501.0,3.6742,117200.0,INLAND --120.43,37.32,16.0,1170.0,178.0,566.0,181.0,5.2522,125300.0,INLAND --120.45,37.32,21.0,1318.0,202.0,618.0,197.0,4.8214,117800.0,INLAND --120.45,37.32,19.0,3136.0,466.0,1631.0,484.0,3.6471,101400.0,INLAND --120.46,37.33,4.0,786.0,116.0,368.0,109.0,6.3215,138200.0,INLAND --120.46,37.33,17.0,6111.0,1171.0,2950.0,1104.0,3.2852,98800.0,INLAND --120.44,37.31,16.0,3369.0,532.0,1770.0,574.0,5.2662,126200.0,INLAND --120.45,37.31,20.0,4379.0,753.0,2055.0,716.0,3.7652,133500.0,INLAND --120.46,37.31,26.0,3170.0,572.0,1524.0,565.0,3.48,95300.0,INLAND --120.48,37.31,42.0,2361.0,512.0,1684.0,511.0,2.355,75600.0,INLAND --120.5,37.31,36.0,2162.0,433.0,1048.0,451.0,2.6797,81800.0,INLAND --120.49,37.31,45.0,1834.0,421.0,1405.0,407.0,2.0521,72400.0,INLAND --120.48,37.3,49.0,2919.0,719.0,1956.0,679.0,1.5427,88500.0,INLAND --120.48,37.3,39.0,1015.0,356.0,875.0,313.0,1.5,67000.0,INLAND --120.49,37.3,50.0,985.0,309.0,621.0,250.0,1.3125,60900.0,INLAND --120.44,37.31,21.0,6911.0,1341.0,3967.0,1297.0,3.0515,95200.0,INLAND --120.46,37.31,35.0,2042.0,378.0,953.0,356.0,2.7344,87800.0,INLAND --120.47,37.3,40.0,3693.0,771.0,2102.0,742.0,2.1838,75000.0,INLAND --120.46,37.3,36.0,3346.0,739.0,2151.0,713.0,2.3095,68300.0,INLAND --120.51,37.29,20.0,4927.0,1042.0,4205.0,1009.0,1.7679,79800.0,INLAND --120.5,37.3,29.0,1572.0,456.0,1697.0,429.0,1.76,63200.0,INLAND --120.49,37.3,35.0,1313.0,324.0,1350.0,343.0,1.75,57600.0,INLAND --120.49,37.29,17.0,2414.0,594.0,2487.0,582.0,1.0955,62700.0,INLAND --120.47,37.29,16.0,749.0,222.0,1277.0,224.0,1.2054,60900.0,INLAND --120.48,37.29,17.0,2266.0,693.0,3200.0,664.0,1.5635,60400.0,INLAND --120.47,37.28,19.0,1548.0,319.0,1227.0,309.0,1.7756,73300.0,INLAND --120.49,37.28,11.0,1721.0,381.0,1708.0,373.0,1.9535,57100.0,INLAND --120.44,37.28,12.0,2855.0,598.0,1658.0,586.0,2.3929,81100.0,INLAND --120.44,37.29,18.0,1260.0,268.0,576.0,263.0,1.7222,101500.0,INLAND --120.46,37.29,30.0,2972.0,635.0,1940.0,590.0,2.3594,72300.0,INLAND --120.43,37.35,15.0,1613.0,203.0,673.0,213.0,5.9378,212200.0,INLAND --120.4,37.3,28.0,1401.0,,967.0,257.0,1.5917,89400.0,INLAND --120.3,37.34,33.0,993.0,186.0,556.0,175.0,2.4286,103600.0,INLAND --120.32,37.29,38.0,576.0,,478.0,112.0,2.3382,59600.0,INLAND --120.31,37.29,40.0,1542.0,341.0,1283.0,341.0,1.6929,55900.0,INLAND --120.31,37.29,36.0,969.0,206.0,732.0,175.0,1.5938,57600.0,INLAND --120.32,37.29,9.0,695.0,188.0,810.0,190.0,1.6172,56300.0,INLAND --120.25,37.23,34.0,1656.0,328.0,1110.0,332.0,2.1845,59900.0,INLAND --120.24,37.21,31.0,2447.0,465.0,1313.0,352.0,3.3929,93800.0,INLAND --120.35,37.31,17.0,605.0,159.0,416.0,83.0,2.0,87500.0,INLAND --121.0,37.25,31.0,1923.0,341.0,806.0,349.0,3.1738,97600.0,INLAND --121.0,37.26,45.0,1750.0,371.0,847.0,354.0,1.7062,77400.0,INLAND --121.0,37.25,21.0,1937.0,389.0,1002.0,373.0,2.6087,96200.0,INLAND --121.01,37.25,16.0,2216.0,458.0,1135.0,424.0,2.7316,97500.0,INLAND --121.06,37.18,30.0,2603.0,507.0,1491.0,473.0,3.0909,123400.0,INLAND --120.89,37.21,25.0,3301.0,678.0,994.0,306.0,3.2262,97200.0,INLAND --121.02,37.09,17.0,1118.0,270.0,560.0,244.0,2.0216,112500.0,INLAND --121.02,36.94,33.0,1541.0,313.0,880.0,272.0,2.5074,117700.0,INLAND --120.77,37.01,28.0,1689.0,378.0,1057.0,267.0,3.125,156300.0,INLAND --120.95,37.09,43.0,1116.0,222.0,801.0,207.0,2.875,97200.0,INLAND --120.85,37.08,3.0,3425.0,611.0,1588.0,459.0,4.1779,147800.0,INLAND --120.85,37.07,16.0,1795.0,362.0,1642.0,340.0,2.5363,86300.0,INLAND --120.84,37.07,24.0,1520.0,335.0,882.0,306.0,2.2019,100000.0,INLAND --120.84,37.06,14.0,1506.0,380.0,1096.0,352.0,1.1301,78500.0,INLAND --120.85,37.06,31.0,2609.0,645.0,1796.0,629.0,1.5479,82000.0,INLAND --120.87,37.07,26.0,2036.0,401.0,1343.0,414.0,3.6331,88600.0,INLAND --120.87,37.05,29.0,4176.0,779.0,2092.0,741.0,2.595,104200.0,INLAND --120.85,37.05,32.0,2893.0,481.0,1198.0,466.0,3.1719,140600.0,INLAND --120.84,37.05,8.0,1944.0,283.0,814.0,276.0,5.3988,165500.0,INLAND --120.79,37.08,9.0,97.0,20.0,91.0,22.0,2.9063,55000.0,INLAND --120.83,37.07,16.0,3736.0,761.0,1942.0,730.0,2.5598,120200.0,INLAND --120.82,37.05,15.0,1385.0,288.0,775.0,255.0,1.933,140600.0,INLAND --120.65,37.09,22.0,886.0,173.0,595.0,161.0,2.4398,150000.0,INLAND --120.61,37.03,34.0,1841.0,354.0,1019.0,356.0,1.7841,67500.0,INLAND --120.7,36.99,32.0,320.0,73.0,222.0,78.0,2.9271,87500.0,INLAND --120.65,36.98,26.0,1787.0,364.0,1548.0,362.0,1.7188,49500.0,INLAND --120.63,36.98,20.0,2380.0,489.0,1581.0,505.0,2.0595,61300.0,INLAND --120.64,36.99,23.0,2363.0,449.0,1168.0,410.0,2.2794,75700.0,INLAND --120.62,36.99,32.0,2455.0,508.0,1344.0,492.0,1.9732,69400.0,INLAND --120.67,37.37,18.0,164.0,30.0,104.0,32.0,1.6607,87500.0,INLAND --121.16,41.78,42.0,2918.0,576.0,1182.0,440.0,2.1434,44000.0,INLAND --121.18,41.31,22.0,2124.0,432.0,829.0,313.0,2.4519,57500.0,INLAND --120.87,41.54,21.0,1091.0,208.0,660.0,188.0,2.2321,34600.0,INLAND --120.51,41.35,16.0,2843.0,564.0,892.0,386.0,2.5074,69100.0,INLAND --120.48,41.82,20.0,1367.0,284.0,429.0,181.0,2.0227,47500.0,INLAND --120.08,41.79,34.0,1355.0,262.0,434.0,178.0,2.0903,56100.0,INLAND --120.12,41.4,33.0,2820.0,515.0,976.0,403.0,2.6062,52600.0,INLAND --120.55,41.61,22.0,9047.0,1831.0,4276.0,1622.0,2.0802,47900.0,INLAND --119.54,38.51,14.0,1250.0,272.0,721.0,234.0,2.35,95700.0,INLAND --119.44,38.53,20.0,1963.0,434.0,682.0,273.0,1.5817,97800.0,INLAND --119.3,38.26,19.0,3325.0,660.0,750.0,286.0,2.9509,114800.0,INLAND --118.98,38.03,15.0,991.0,277.0,419.0,170.0,3.5469,82500.0,INLAND --119.07,37.8,12.0,1736.0,352.0,330.0,123.0,3.5294,160700.0,INLAND --119.08,37.78,17.0,1631.0,335.0,285.0,128.0,2.7656,130000.0,INLAND --118.45,37.7,15.0,2199.0,453.0,899.0,347.0,2.35,107800.0,INLAND --118.74,37.58,20.0,3301.0,779.0,1085.0,448.0,3.7315,159300.0,INLAND --118.96,37.64,11.0,3934.0,697.0,901.0,345.0,4.2381,242700.0,INLAND --119.02,37.64,14.0,5919.0,1278.0,265.0,112.0,3.2431,221400.0,INLAND --118.98,37.65,18.0,1795.0,416.0,483.0,208.0,4.5375,169800.0,INLAND --118.99,37.65,20.0,2474.0,625.0,338.0,141.0,5.01,195500.0,INLAND --118.98,37.64,17.0,3769.0,908.0,1160.0,453.0,3.05,188900.0,INLAND --118.97,37.64,13.0,1907.0,544.0,575.0,234.0,3.0685,162500.0,INLAND --118.97,37.64,14.0,2284.0,622.0,342.0,137.0,3.0921,87500.0,INLAND --118.97,37.64,14.0,1847.0,439.0,238.0,98.0,3.6042,137500.0,INLAND --118.99,37.63,10.0,7744.0,1573.0,483.0,224.0,3.2917,231800.0,INLAND --121.64,36.72,17.0,4203.0,816.0,2900.0,827.0,4.1742,159900.0,<1H OCEAN --121.63,36.71,19.0,5015.0,1013.0,3251.0,940.0,3.9818,152900.0,<1H OCEAN --121.62,36.71,24.0,4195.0,706.0,2200.0,647.0,4.3451,177800.0,<1H OCEAN --121.62,36.74,30.0,1337.0,253.0,838.0,247.0,5.0374,165400.0,<1H OCEAN --121.64,36.7,32.0,4089.0,735.0,2927.0,713.0,4.1675,142500.0,<1H OCEAN --121.65,36.7,29.0,4964.0,1056.0,2773.0,1036.0,3.0827,148100.0,<1H OCEAN --121.66,36.71,27.0,4131.0,886.0,2002.0,815.0,3.2929,157500.0,<1H OCEAN --121.66,36.7,33.0,3252.0,630.0,2010.0,641.0,3.4222,158100.0,<1H OCEAN --121.65,36.69,21.0,7884.0,2011.0,4907.0,1919.0,2.7367,160300.0,<1H OCEAN --121.64,36.68,16.0,6568.0,1603.0,6012.0,1565.0,2.3463,156100.0,<1H OCEAN --121.63,36.68,24.0,2591.0,739.0,3243.0,702.0,2.1766,108500.0,<1H OCEAN --121.61,36.68,37.0,3149.0,833.0,3456.0,788.0,2.8542,127600.0,<1H OCEAN --121.62,36.68,43.0,2534.0,592.0,2448.0,603.0,2.4884,130500.0,<1H OCEAN --121.61,36.69,19.0,9899.0,2617.0,11272.0,2528.0,2.0244,118500.0,<1H OCEAN --121.61,36.67,39.0,3260.0,821.0,3130.0,793.0,2.5224,119200.0,<1H OCEAN --121.62,36.67,45.0,1827.0,408.0,1507.0,410.0,2.8942,129000.0,<1H OCEAN --121.62,36.67,31.0,2697.0,690.0,2220.0,665.0,2.5329,135200.0,<1H OCEAN --121.63,36.67,34.0,2486.0,560.0,2443.0,557.0,2.5263,130400.0,<1H OCEAN --121.64,36.67,28.0,256.0,66.0,214.0,60.0,3.0197,137500.0,<1H OCEAN --121.63,36.65,44.0,309.0,121.0,315.0,80.0,1.6071,112500.0,<1H OCEAN --121.64,36.66,24.0,3174.0,506.0,1466.0,535.0,5.2285,248100.0,<1H OCEAN --121.65,36.66,30.0,3745.0,767.0,1762.0,748.0,3.2355,214200.0,<1H OCEAN --121.65,36.66,42.0,4261.0,840.0,2013.0,801.0,3.5288,221000.0,<1H OCEAN --121.65,36.67,52.0,2351.0,459.0,1169.0,439.0,2.8924,169600.0,<1H OCEAN --121.65,36.67,28.0,1926.0,556.0,1717.0,535.0,1.9385,123200.0,<1H OCEAN --121.66,36.68,10.0,913.0,265.0,508.0,251.0,0.9914,147500.0,<1H OCEAN --121.66,36.67,40.0,2878.0,592.0,1444.0,564.0,3.1439,192300.0,<1H OCEAN --121.66,36.67,40.0,2497.0,520.0,1275.0,508.0,3.1071,193100.0,<1H OCEAN --121.67,36.66,19.0,9371.0,1980.0,4259.0,1882.0,3.6875,189700.0,<1H OCEAN --121.67,36.67,24.0,3071.0,544.0,1477.0,560.0,3.9219,222500.0,<1H OCEAN --121.68,36.67,26.0,5745.0,1017.0,2780.0,996.0,5.0,202300.0,<1H OCEAN --121.67,36.68,38.0,5561.0,1292.0,3523.0,1253.0,2.8289,168300.0,<1H OCEAN --121.66,36.69,6.0,10613.0,2485.0,7249.0,2375.0,3.7912,168900.0,<1H OCEAN --121.79,36.85,28.0,1049.0,235.0,705.0,208.0,2.7321,150000.0,NEAR OCEAN --121.77,36.87,37.0,424.0,65.0,266.0,64.0,3.3472,293800.0,NEAR OCEAN --121.73,36.9,23.0,2392.0,721.0,3074.0,718.0,2.5195,136900.0,<1H OCEAN --121.71,36.9,16.0,1680.0,285.0,1103.0,275.0,4.6125,253800.0,<1H OCEAN --121.68,36.9,13.0,833.0,130.0,405.0,127.0,5.2729,322900.0,<1H OCEAN --121.66,36.89,15.0,2608.0,458.0,1531.0,457.0,5.5148,253500.0,<1H OCEAN --121.76,36.83,28.0,1445.0,268.0,1017.0,284.0,3.6693,211000.0,<1H OCEAN --121.73,36.86,28.0,827.0,178.0,703.0,144.0,4.4271,175700.0,<1H OCEAN --121.71,36.88,19.0,2528.0,554.0,2332.0,492.0,3.7766,177000.0,<1H OCEAN --121.73,36.85,22.0,1304.0,278.0,887.0,227.0,3.6607,206300.0,<1H OCEAN --121.7,36.84,19.0,2511.0,465.0,1551.0,450.0,4.9107,231900.0,<1H OCEAN --121.65,36.85,20.0,2606.0,424.0,1361.0,426.0,4.5787,245100.0,<1H OCEAN --121.69,36.8,19.0,2164.0,410.0,1309.0,426.0,3.338,185300.0,<1H OCEAN --121.74,36.79,16.0,3841.0,620.0,1799.0,611.0,4.3814,245300.0,<1H OCEAN --121.72,36.81,18.0,1984.0,379.0,1078.0,359.0,3.2969,229900.0,<1H OCEAN --121.69,36.81,18.0,2837.0,522.0,1454.0,458.0,4.5272,221000.0,<1H OCEAN --121.66,36.82,17.0,3921.0,654.0,1895.0,641.0,5.0092,238700.0,<1H OCEAN --121.64,36.82,18.0,1819.0,283.0,919.0,295.0,4.1696,222500.0,<1H OCEAN --121.76,36.75,21.0,1141.0,257.0,671.0,195.0,3.8424,155700.0,<1H OCEAN --121.7,36.77,21.0,2294.0,478.0,1306.0,430.0,3.0347,227200.0,<1H OCEAN --121.76,36.77,27.0,1608.0,503.0,2031.0,498.0,2.3384,121000.0,<1H OCEAN --121.75,36.77,25.0,1851.0,418.0,1678.0,390.0,3.2937,135300.0,<1H OCEAN --121.75,36.76,32.0,1740.0,399.0,1563.0,389.0,2.7694,132400.0,<1H OCEAN --121.64,36.74,30.0,2628.0,444.0,1372.0,432.0,4.1696,175000.0,<1H OCEAN --121.64,36.8,18.0,5915.0,1000.0,2975.0,975.0,4.5812,255200.0,<1H OCEAN --121.6,36.81,18.0,1575.0,230.0,751.0,219.0,5.2203,286500.0,<1H OCEAN --121.65,36.77,15.0,2191.0,358.0,1150.0,330.0,4.7969,227500.0,<1H OCEAN --121.68,36.72,12.0,19234.0,4492.0,12153.0,4372.0,3.2652,152800.0,<1H OCEAN --121.7,36.67,37.0,641.0,129.0,458.0,142.0,3.3456,252600.0,<1H OCEAN --121.62,36.63,52.0,1437.0,298.0,836.0,257.0,3.6286,165500.0,<1H OCEAN --121.54,36.7,12.0,6758.0,1241.0,3918.0,1100.0,3.525,201700.0,<1H OCEAN --121.62,36.69,11.0,4712.0,1098.0,5982.0,1105.0,2.5986,135700.0,<1H OCEAN --121.62,36.69,12.0,512.0,144.0,767.0,149.0,2.2667,72900.0,<1H OCEAN --121.69,36.62,19.0,1907.0,323.0,681.0,270.0,6.0332,244900.0,<1H OCEAN --121.7,36.6,19.0,3562.0,530.0,1607.0,505.0,5.0162,283100.0,<1H OCEAN --121.67,36.58,11.0,5892.0,837.0,2327.0,812.0,6.1551,291800.0,<1H OCEAN --121.59,36.55,34.0,737.0,140.0,362.0,138.0,5.1788,270000.0,<1H OCEAN --121.7,36.55,21.0,3905.0,583.0,1528.0,586.0,7.6245,336600.0,<1H OCEAN --121.69,36.52,15.0,4037.0,586.0,1596.0,557.0,8.0922,390100.0,<1H OCEAN --121.43,36.5,14.0,1835.0,468.0,1867.0,461.0,2.3879,129800.0,<1H OCEAN --121.44,36.51,31.0,1636.0,380.0,1468.0,339.0,3.2219,114700.0,<1H OCEAN --121.45,36.51,29.0,1045.0,311.0,1245.0,273.0,1.775,112500.0,<1H OCEAN --121.42,36.57,13.0,2685.0,621.0,2474.0,573.0,2.8775,134100.0,<1H OCEAN --121.48,36.49,28.0,1006.0,228.0,738.0,193.0,1.9722,210700.0,<1H OCEAN --121.74,36.49,33.0,2952.0,565.0,1264.0,517.0,4.4209,274600.0,<1H OCEAN --121.73,36.5,27.0,3184.0,520.0,1121.0,493.0,5.6383,377000.0,<1H OCEAN --121.74,36.47,28.0,1973.0,343.0,970.0,349.0,4.25,279100.0,<1H OCEAN --121.7,36.48,19.0,2150.0,479.0,1052.0,428.0,3.5039,288400.0,<1H OCEAN --121.62,36.43,20.0,1335.0,290.0,717.0,243.0,4.7891,230600.0,<1H OCEAN --121.66,36.37,9.0,1580.0,287.0,465.0,208.0,6.1668,405800.0,<1H OCEAN --121.31,36.42,21.0,2740.0,615.0,2630.0,564.0,2.6629,102700.0,<1H OCEAN --121.32,36.42,20.0,1054.0,269.0,1219.0,273.0,3.0437,76600.0,<1H OCEAN --121.32,36.43,22.0,2927.0,637.0,2546.0,618.0,2.7153,114300.0,<1H OCEAN --121.33,36.43,40.0,622.0,194.0,902.0,196.0,2.625,109100.0,<1H OCEAN --121.4,36.38,39.0,2288.0,529.0,1449.0,410.0,3.3289,190600.0,<1H OCEAN --121.23,36.33,23.0,2095.0,536.0,1858.0,457.0,3.0543,92400.0,<1H OCEAN --121.25,36.32,12.0,4776.0,1082.0,4601.0,1066.0,2.9184,100500.0,<1H OCEAN --121.26,36.32,30.0,146.0,41.0,164.0,40.0,2.3,206300.0,<1H OCEAN --121.24,36.33,13.0,1642.0,418.0,1534.0,388.0,3.1222,125500.0,<1H OCEAN --121.24,36.34,33.0,1691.0,308.0,792.0,262.0,2.6648,164600.0,<1H OCEAN --121.12,36.21,16.0,1720.0,473.0,1427.0,291.0,2.1107,76200.0,<1H OCEAN --121.13,36.21,27.0,1476.0,352.0,1156.0,358.0,3.1929,137900.0,<1H OCEAN --121.13,36.21,30.0,1484.0,414.0,1200.0,351.0,1.7548,95800.0,<1H OCEAN --121.13,36.21,34.0,2504.0,550.0,1810.0,547.0,3.4821,113700.0,<1H OCEAN --121.13,36.2,16.0,1868.0,443.0,1323.0,436.0,2.9559,163200.0,<1H OCEAN --121.02,36.24,12.0,2198.0,507.0,1971.0,502.0,2.6801,100000.0,<1H OCEAN --121.2,36.14,12.0,3738.0,710.0,2337.0,664.0,3.9647,135000.0,<1H OCEAN --121.39,36.16,28.0,1057.0,249.0,288.0,130.0,3.0526,146900.0,NEAR OCEAN --121.32,35.95,31.0,372.0,68.0,479.0,67.0,3.5547,200000.0,NEAR OCEAN --121.0,35.94,16.0,3077.0,628.0,1479.0,536.0,3.3724,114600.0,<1H OCEAN --120.79,36.06,29.0,1916.0,386.0,1019.0,314.0,2.4881,87500.0,<1H OCEAN --120.51,35.91,39.0,768.0,162.0,264.0,118.0,5.3245,250000.0,INLAND --121.91,36.42,14.0,1078.0,261.0,382.0,171.0,3.7083,210000.0,NEAR OCEAN --121.84,36.25,20.0,958.0,245.0,590.0,189.0,2.6094,362500.0,NEAR OCEAN --121.62,36.14,25.0,726.0,274.0,411.0,214.0,3.2375,450000.0,NEAR OCEAN --121.87,36.55,20.0,10053.0,1768.0,3083.0,1621.0,5.1506,387500.0,NEAR OCEAN --121.82,36.54,22.0,1746.0,363.0,886.0,364.0,5.5469,378800.0,<1H OCEAN --121.77,36.53,18.0,2321.0,358.0,803.0,341.0,10.1854,426000.0,<1H OCEAN --121.84,36.52,18.0,3165.0,533.0,1312.0,434.0,6.5234,357400.0,NEAR OCEAN --121.88,36.49,28.0,2830.0,458.0,898.0,370.0,5.8142,500001.0,NEAR OCEAN --121.92,36.57,42.0,3944.0,738.0,1374.0,598.0,4.174,394400.0,NEAR OCEAN --121.91,36.55,39.0,5468.0,834.0,1782.0,712.0,5.7248,398800.0,NEAR OCEAN --121.92,36.54,33.0,5323.0,887.0,1670.0,740.0,3.9792,468000.0,NEAR OCEAN --121.92,36.56,40.0,2124.0,449.0,643.0,341.0,5.5164,369100.0,NEAR OCEAN --121.94,36.55,30.0,2722.0,584.0,628.0,384.0,3.4048,487100.0,NEAR OCEAN --121.92,36.56,39.0,2144.0,538.0,749.0,419.0,2.7039,364000.0,NEAR OCEAN --121.92,36.55,37.0,2190.0,419.0,490.0,300.0,3.7852,465800.0,NEAR OCEAN --121.92,36.55,44.0,3494.0,635.0,693.0,415.0,3.6,452800.0,NEAR OCEAN --121.92,36.55,52.0,2616.0,483.0,582.0,313.0,3.275,500001.0,NEAR OCEAN --121.95,36.61,31.0,1736.0,250.0,497.0,170.0,6.3835,407800.0,NEAR OCEAN --121.93,36.59,25.0,2201.0,353.0,622.0,295.0,5.0621,386500.0,NEAR OCEAN --121.95,36.6,32.0,3152.0,504.0,793.0,426.0,7.1198,469900.0,NEAR OCEAN --121.95,36.59,22.0,3553.0,530.0,1108.0,441.0,5.8505,417100.0,NEAR OCEAN --121.94,36.58,23.0,4911.0,693.0,1480.0,606.0,6.777,500000.0,NEAR OCEAN --121.94,36.57,28.0,3153.0,409.0,569.0,271.0,14.4113,500001.0,NEAR OCEAN --121.93,36.6,33.0,3455.0,683.0,1704.0,663.0,4.0154,225700.0,NEAR OCEAN --121.92,36.61,29.0,3735.0,808.0,1873.0,757.0,3.1543,253800.0,NEAR OCEAN --121.93,36.62,34.0,2351.0,,1063.0,428.0,3.725,278000.0,NEAR OCEAN --121.92,36.61,27.0,3044.0,661.0,1229.0,618.0,3.1359,268000.0,NEAR OCEAN --121.93,36.62,39.0,869.0,173.0,406.0,165.0,4.0313,253800.0,NEAR OCEAN --121.92,36.62,52.0,974.0,190.0,403.0,181.0,4.3281,236500.0,NEAR OCEAN --121.92,36.62,52.0,1001.0,191.0,425.0,184.0,3.7614,241700.0,NEAR OCEAN --121.92,36.62,47.0,1811.0,401.0,948.0,375.0,3.0379,249300.0,NEAR OCEAN --121.91,36.62,52.0,1431.0,300.0,657.0,293.0,3.2865,240100.0,<1H OCEAN --121.92,36.62,52.0,867.0,199.0,391.0,187.0,2.6713,234600.0,NEAR OCEAN --121.92,36.62,52.0,1410.0,303.0,578.0,285.0,2.5625,235400.0,NEAR OCEAN --121.92,36.62,52.0,728.0,161.0,313.0,142.0,3.4327,254500.0,NEAR OCEAN --121.91,36.62,40.0,1292.0,271.0,504.0,230.0,2.475,258300.0,<1H OCEAN --121.91,36.62,30.0,724.0,167.0,325.0,155.0,3.3333,247900.0,<1H OCEAN --121.71,36.78,19.0,2371.0,324.0,944.0,332.0,5.9175,240200.0,<1H OCEAN --121.92,36.62,52.0,2584.0,599.0,790.0,444.0,2.5263,286400.0,NEAR OCEAN --121.91,36.62,52.0,541.0,157.0,240.0,145.0,3.5865,290000.0,<1H OCEAN --121.91,36.62,52.0,1220.0,267.0,488.0,265.0,3.7454,243800.0,<1H OCEAN --121.91,36.63,42.0,817.0,194.0,391.0,193.0,2.1776,279200.0,<1H OCEAN --121.93,36.63,28.0,3983.0,852.0,1582.0,778.0,3.5147,313900.0,NEAR OCEAN --121.93,36.63,33.0,1740.0,342.0,638.0,329.0,3.1912,319800.0,NEAR OCEAN --121.92,36.63,40.0,1076.0,193.0,406.0,180.0,3.4943,311100.0,<1H OCEAN --121.93,36.63,41.0,1049.0,198.0,428.0,183.0,4.3571,287500.0,NEAR OCEAN --121.92,36.63,36.0,877.0,175.0,349.0,168.0,3.4167,339100.0,<1H OCEAN --121.89,36.63,20.0,1834.0,554.0,971.0,514.0,3.0383,217300.0,<1H OCEAN --121.9,36.61,29.0,3412.0,827.0,1574.0,759.0,2.9309,217100.0,NEAR OCEAN --121.91,36.61,30.0,2755.0,597.0,1519.0,554.0,3.2952,234600.0,NEAR OCEAN --121.92,36.61,27.0,1619.0,352.0,831.0,344.0,4.3,226400.0,NEAR OCEAN --121.92,36.61,21.0,1242.0,340.0,834.0,362.0,2.4922,243800.0,NEAR OCEAN --121.9,36.6,39.0,1629.0,423.0,804.0,386.0,2.4663,236500.0,NEAR OCEAN --121.9,36.6,33.0,2461.0,649.0,1234.0,601.0,2.8727,225000.0,NEAR OCEAN --121.9,36.6,45.0,2249.0,412.0,944.0,429.0,3.0625,260300.0,NEAR OCEAN --121.9,36.59,42.0,2689.0,510.0,1023.0,459.0,4.6182,301000.0,NEAR OCEAN --121.9,36.58,31.0,1431.0,,704.0,393.0,3.1977,289300.0,NEAR OCEAN --121.91,36.59,31.0,2034.0,335.0,966.0,322.0,4.6964,291300.0,NEAR OCEAN --121.91,36.6,35.0,2605.0,410.0,1110.0,406.0,5.5519,329500.0,NEAR OCEAN --121.91,36.59,17.0,5039.0,833.0,1678.0,710.0,6.2323,339100.0,NEAR OCEAN --121.89,36.6,40.0,626.0,164.0,337.0,150.0,2.7917,225000.0,<1H OCEAN --121.89,36.6,19.0,656.0,200.0,248.0,173.0,1.2656,500000.0,<1H OCEAN --121.88,36.6,30.0,1671.0,469.0,760.0,375.0,2.5164,178100.0,<1H OCEAN --121.88,36.59,30.0,1822.0,505.0,932.0,496.0,2.6894,179500.0,<1H OCEAN --121.89,36.59,18.0,2700.0,937.0,1042.0,744.0,3.1364,150000.0,NEAR OCEAN --121.89,36.59,32.0,784.0,112.0,262.0,114.0,6.918,500001.0,NEAR OCEAN --121.88,36.58,29.0,4910.0,871.0,3438.0,904.0,4.0432,450000.0,NEAR OCEAN --121.86,36.58,20.0,6332.0,991.0,2668.0,955.0,5.7578,347700.0,<1H OCEAN --121.81,36.57,13.0,3030.0,413.0,1027.0,363.0,6.9615,500001.0,<1H OCEAN --121.87,36.61,21.0,1616.0,400.0,688.0,384.0,4.2109,278800.0,<1H OCEAN --121.86,36.6,31.0,1044.0,285.0,762.0,301.0,3.038,195300.0,<1H OCEAN --121.86,36.6,21.0,3634.0,1011.0,1985.0,917.0,2.9085,156300.0,<1H OCEAN --121.86,36.6,33.0,1409.0,307.0,633.0,290.0,3.5568,191200.0,<1H OCEAN --121.85,36.6,21.0,2381.0,701.0,1264.0,659.0,2.5372,218000.0,<1H OCEAN --121.85,36.59,42.0,891.0,203.0,525.0,212.0,3.3156,186300.0,<1H OCEAN --121.84,36.59,34.0,3852.0,733.0,1661.0,696.0,4.3269,221300.0,<1H OCEAN --121.83,36.61,27.0,5665.0,1281.0,3612.0,1191.0,3.0542,142100.0,<1H OCEAN --121.83,36.6,30.0,2748.0,502.0,1491.0,535.0,4.3472,185000.0,<1H OCEAN --121.84,36.61,26.0,2902.0,761.0,2258.0,719.0,2.5663,128900.0,<1H OCEAN --121.84,36.6,30.0,2958.0,691.0,1616.0,666.0,3.4643,191800.0,<1H OCEAN --121.84,36.61,21.0,2876.0,802.0,2487.0,795.0,2.2007,112800.0,<1H OCEAN --121.84,36.61,15.0,2190.0,586.0,1570.0,510.0,1.875,122300.0,<1H OCEAN --121.82,36.61,24.0,2437.0,438.0,1430.0,444.0,3.8015,169100.0,<1H OCEAN --121.83,36.61,26.0,3723.0,789.0,2563.0,747.0,3.4531,133100.0,<1H OCEAN --121.83,36.61,27.0,2248.0,466.0,1644.0,453.0,3.2545,131200.0,<1H OCEAN --121.83,36.62,33.0,2938.0,576.0,1516.0,568.0,3.5,162400.0,<1H OCEAN --121.83,36.62,33.0,1771.0,398.0,1037.0,388.0,2.7708,161800.0,<1H OCEAN --121.85,36.6,41.0,3138.0,717.0,1890.0,642.0,2.4864,140400.0,<1H OCEAN --121.85,36.61,38.0,238.0,,191.0,67.0,1.3897,125000.0,<1H OCEAN --121.86,36.63,37.0,338.0,109.0,231.0,100.0,2.5313,108300.0,<1H OCEAN --121.84,36.62,26.0,32.0,8.0,27.0,10.0,2.225,150000.0,<1H OCEAN --121.79,36.64,11.0,32627.0,6445.0,28566.0,6082.0,2.3087,118800.0,<1H OCEAN --121.8,36.68,18.0,8581.0,1957.0,6071.0,1889.0,3.0,162200.0,<1H OCEAN --121.79,36.68,22.0,6912.0,1513.0,3794.0,1455.0,3.0608,168300.0,<1H OCEAN --121.8,36.72,14.0,2493.0,407.0,1296.0,418.0,5.4508,190000.0,<1H OCEAN --121.8,36.69,12.0,3877.0,914.0,2274.0,858.0,3.4239,194800.0,<1H OCEAN --121.77,36.71,18.0,6601.0,1395.0,3562.0,1299.0,3.512,174800.0,<1H OCEAN --122.29,38.3,52.0,144.0,54.0,89.0,48.0,1.0096,162500.0,NEAR BAY --122.29,38.3,52.0,935.0,224.0,315.0,207.0,1.8287,146900.0,NEAR BAY --122.3,38.3,21.0,1108.0,269.0,524.0,274.0,2.7619,154600.0,NEAR BAY --122.3,38.3,52.0,1128.0,207.0,450.0,197.0,3.3542,154600.0,NEAR BAY --122.29,38.3,52.0,1219.0,288.0,847.0,283.0,1.6691,183300.0,NEAR BAY --122.28,38.29,23.0,1398.0,388.0,1112.0,406.0,2.2366,140200.0,NEAR BAY --122.29,38.29,52.0,3217.0,742.0,1670.0,671.0,2.4398,163100.0,NEAR BAY --122.3,38.29,48.0,2278.0,477.0,1219.0,453.0,2.9643,154000.0,NEAR BAY --122.3,38.29,40.0,1739.0,318.0,744.0,312.0,2.6518,156100.0,NEAR BAY --122.29,38.28,38.0,2308.0,425.0,1272.0,406.0,3.6083,134200.0,NEAR BAY --122.26,38.29,10.0,969.0,160.0,482.0,180.0,6.5799,218100.0,NEAR BAY --122.27,38.29,36.0,1446.0,306.0,678.0,295.0,2.8409,153000.0,NEAR BAY --122.28,38.3,23.0,526.0,152.0,245.0,130.0,2.0134,142500.0,NEAR BAY --122.28,38.29,19.0,531.0,112.0,139.0,80.0,1.9875,325000.0,NEAR BAY --122.27,38.29,20.0,3870.0,795.0,2088.0,774.0,3.3021,152700.0,NEAR BAY --122.26,38.28,24.0,2831.0,502.0,1462.0,503.0,4.5,158300.0,NEAR BAY --122.27,38.28,37.0,1170.0,303.0,766.0,302.0,2.6618,136200.0,NEAR BAY --122.26,38.31,33.0,4518.0,704.0,1776.0,669.0,5.2444,281100.0,NEAR BAY --122.27,38.32,31.0,1267.0,319.0,545.0,297.0,1.9946,206800.0,NEAR BAY --122.27,38.31,44.0,3030.0,589.0,1373.0,582.0,2.9054,155200.0,NEAR BAY --122.28,38.32,12.0,4609.0,1005.0,2293.0,960.0,3.4543,194500.0,NEAR BAY --122.29,38.32,23.0,4312.0,993.0,2317.0,934.0,2.7667,153200.0,NEAR BAY --122.3,38.32,20.0,2063.0,486.0,1045.0,460.0,2.5035,153200.0,NEAR BAY --122.3,38.31,34.0,1797.0,395.0,1162.0,407.0,3.455,137500.0,NEAR BAY --122.29,38.31,25.0,4927.0,1005.0,2756.0,998.0,2.7325,162900.0,NEAR BAY --122.28,38.31,52.0,58.0,18.0,48.0,22.0,1.76,166700.0,NEAR BAY --122.29,38.31,45.0,3075.0,754.0,1635.0,723.0,2.2721,139800.0,NEAR BAY --122.3,38.3,44.0,3690.0,809.0,1922.0,736.0,2.6346,139800.0,NEAR BAY --122.31,38.34,19.0,4187.0,684.0,1827.0,605.0,4.5293,210400.0,NEAR BAY --122.31,38.33,21.0,1922.0,344.0,1051.0,342.0,3.6042,183300.0,NEAR BAY --122.3,38.33,15.0,4741.0,956.0,2043.0,856.0,4.1862,183600.0,NEAR BAY --122.31,38.33,26.0,2155.0,339.0,956.0,365.0,4.0132,174700.0,NEAR BAY --122.31,38.32,33.0,2463.0,421.0,1235.0,465.0,3.7045,161500.0,NEAR BAY --122.32,38.33,17.0,851.0,118.0,370.0,123.0,5.0877,209300.0,NEAR BAY --122.33,38.33,15.0,3193.0,468.0,1303.0,426.0,5.3017,202600.0,NEAR BAY --122.32,38.32,19.0,2922.0,417.0,1221.0,442.0,5.8002,238700.0,NEAR BAY --122.32,38.32,22.0,2483.0,528.0,1478.0,492.0,4.0878,164400.0,NEAR BAY --122.31,38.32,35.0,3997.0,762.0,2074.0,703.0,3.285,138100.0,NEAR BAY --122.32,38.32,26.0,2710.0,498.0,1439.0,484.0,5.0,175200.0,NEAR BAY --122.33,38.31,14.0,6778.0,947.0,2768.0,1014.0,6.1953,258900.0,NEAR BAY --122.31,38.3,25.0,3883.0,740.0,1641.0,676.0,3.9,187300.0,NEAR BAY --122.31,38.31,32.0,2577.0,458.0,1172.0,447.0,3.8796,175500.0,NEAR BAY --122.31,38.3,45.0,3023.0,659.0,1789.0,657.0,3.6039,126000.0,NEAR BAY --122.32,38.29,21.0,1607.0,356.0,834.0,352.0,2.3787,177900.0,NEAR BAY --122.33,38.29,14.0,3541.0,499.0,1577.0,459.0,5.3351,269900.0,NEAR BAY --122.3,38.29,20.0,1789.0,434.0,1113.0,398.0,2.4728,139700.0,NEAR BAY --122.3,38.29,25.0,1701.0,427.0,1021.0,399.0,3.0404,142100.0,NEAR BAY --122.3,38.28,31.0,1633.0,316.0,944.0,300.0,3.3977,158700.0,NEAR BAY --122.31,38.27,34.0,1748.0,284.0,783.0,303.0,4.3585,194400.0,NEAR BAY --122.3,38.27,4.0,1051.0,263.0,455.0,248.0,3.6389,130200.0,NEAR BAY --122.3,38.25,18.0,3548.0,880.0,1476.0,699.0,3.7188,163400.0,NEAR BAY --122.21,38.28,35.0,1273.0,210.0,555.0,181.0,4.4861,269300.0,NEAR BAY --122.24,38.25,33.0,213.0,36.0,91.0,33.0,4.9167,187500.0,NEAR BAY --122.28,38.22,42.0,106.0,18.0,40.0,25.0,7.5197,275000.0,NEAR BAY --122.29,38.19,13.0,7065.0,1259.0,3864.0,1221.0,4.7472,148600.0,NEAR BAY --122.25,38.17,34.0,778.0,137.0,406.0,136.0,4.2955,121300.0,NEAR BAY --122.23,38.17,45.0,350.0,,225.0,72.0,1.8942,216700.0,NEAR BAY --122.25,38.16,17.0,4459.0,944.0,1812.0,888.0,2.9375,106700.0,NEAR BAY --122.26,38.16,23.0,2840.0,491.0,1586.0,466.0,4.0337,130400.0,NEAR BAY --122.39,38.37,33.0,1066.0,191.0,403.0,163.0,6.8,240800.0,<1H OCEAN --122.37,38.33,29.0,1868.0,291.0,764.0,284.0,4.825,195100.0,NEAR BAY --122.35,38.3,18.0,3735.0,557.0,1504.0,521.0,5.6304,243100.0,NEAR BAY --122.33,38.21,33.0,2017.0,370.0,949.0,342.0,4.625,228600.0,NEAR BAY --122.4,38.34,33.0,1408.0,273.0,520.0,212.0,3.5781,242500.0,<1H OCEAN --122.33,38.38,28.0,1020.0,169.0,504.0,164.0,4.5694,287500.0,INLAND --122.4,38.41,20.0,4867.0,1015.0,1725.0,1015.0,2.5685,267600.0,INLAND --122.32,38.35,20.0,3494.0,549.0,1673.0,541.0,5.5718,185200.0,INLAND --122.36,38.41,18.0,1808.0,400.0,968.0,370.0,3.7067,175000.0,INLAND --122.36,38.4,16.0,2716.0,546.0,898.0,500.0,2.2536,201200.0,INLAND --122.18,38.35,24.0,407.0,68.0,175.0,61.0,6.0266,216700.0,INLAND --122.21,38.41,12.0,4270.0,654.0,1624.0,598.0,5.5266,331300.0,INLAND --122.29,38.4,28.0,2024.0,340.0,844.0,309.0,4.7833,361100.0,INLAND --122.33,38.39,36.0,831.0,122.0,272.0,109.0,6.3427,304800.0,INLAND --122.28,38.34,44.0,1066.0,190.0,416.0,174.0,3.6389,304000.0,NEAR BAY --122.26,38.36,25.0,1821.0,344.0,349.0,179.0,6.9931,398800.0,INLAND --122.26,38.33,34.0,2048.0,316.0,780.0,267.0,5.815,339200.0,NEAR BAY --122.23,38.33,31.0,3440.0,574.0,1538.0,537.0,5.5368,325900.0,NEAR BAY --122.24,38.31,38.0,1938.0,301.0,823.0,285.0,6.1089,280800.0,NEAR BAY --122.52,38.53,35.0,1227.0,236.0,548.0,207.0,4.875,336700.0,INLAND --122.48,38.48,29.0,2278.0,397.0,765.0,322.0,4.6379,348200.0,INLAND --122.4,38.46,33.0,2542.0,466.0,1099.0,420.0,4.635,248500.0,INLAND --122.47,38.51,18.0,2487.0,516.0,980.0,503.0,3.5506,187500.0,INLAND --122.47,38.51,25.0,928.0,195.0,413.0,184.0,3.4904,196900.0,INLAND --122.48,38.51,49.0,1977.0,393.0,741.0,339.0,3.1312,247600.0,INLAND --122.48,38.5,37.0,3049.0,,1287.0,439.0,4.3125,276500.0,INLAND --122.47,38.5,23.0,2191.0,415.0,959.0,361.0,4.1993,214500.0,INLAND --122.45,38.51,18.0,1297.0,337.0,610.0,312.0,1.9441,184400.0,INLAND --122.4,38.53,24.0,1741.0,289.0,564.0,231.0,3.6118,248400.0,INLAND --122.44,38.57,26.0,2101.0,390.0,2171.0,360.0,3.6429,159700.0,INLAND --122.45,38.58,34.0,2517.0,483.0,1324.0,464.0,3.0938,189400.0,INLAND --122.47,38.6,20.0,1036.0,202.0,589.0,194.0,5.3698,303300.0,INLAND --122.48,38.54,37.0,1898.0,359.0,973.0,340.0,4.2096,256600.0,INLAND --122.46,38.53,32.0,1735.0,331.0,785.0,309.0,3.6641,275800.0,INLAND --122.27,38.68,18.0,742.0,142.0,343.0,119.0,3.1563,98400.0,INLAND --122.26,38.57,22.0,509.0,103.0,139.0,73.0,2.1979,152800.0,INLAND --122.27,38.53,22.0,678.0,137.0,336.0,103.0,4.4,142500.0,INLAND --122.18,38.49,15.0,1743.0,366.0,655.0,264.0,3.3393,146900.0,INLAND --122.52,38.67,35.0,1705.0,321.0,708.0,253.0,3.4539,300000.0,INLAND --122.59,38.56,43.0,2088.0,379.0,721.0,293.0,4.65,245000.0,<1H OCEAN --122.57,38.58,18.0,2083.0,506.0,926.0,487.0,1.9925,225000.0,INLAND --122.58,38.59,33.0,1239.0,262.0,539.0,246.0,3.5208,195800.0,INLAND --122.58,38.58,32.0,2723.0,637.0,1549.0,556.0,2.3942,183100.0,INLAND --122.59,38.58,18.0,3753.0,752.0,1454.0,668.0,3.7585,185700.0,<1H OCEAN --121.07,39.15,15.0,6828.0,1319.0,3002.0,1318.0,2.4726,143400.0,INLAND --121.07,39.09,17.0,1878.0,345.0,892.0,299.0,2.8864,143100.0,INLAND --121.1,39.08,13.0,1110.0,216.0,602.0,209.0,2.5887,144400.0,INLAND --121.11,39.09,16.0,1000.0,197.0,508.0,190.0,2.3062,138800.0,INLAND --121.12,39.03,17.0,838.0,161.0,388.0,142.0,3.6563,163500.0,INLAND --121.05,39.13,10.0,3063.0,497.0,1168.0,507.0,4.4375,185100.0,INLAND --121.03,39.14,10.0,3138.0,524.0,1275.0,511.0,4.0775,164500.0,INLAND --121.07,39.13,8.0,4839.0,832.0,1977.0,762.0,4.0848,155900.0,INLAND --121.05,39.11,7.0,2767.0,423.0,1143.0,382.0,3.6333,170200.0,INLAND --121.04,39.08,8.0,2870.0,526.0,1307.0,451.0,3.463,201700.0,INLAND --121.0,39.09,7.0,439.0,84.0,246.0,80.0,3.0781,162500.0,INLAND --121.08,39.02,13.0,1839.0,275.0,752.0,270.0,4.2031,209600.0,INLAND --121.07,39.05,10.0,1813.0,311.0,827.0,287.0,3.6087,182100.0,INLAND --121.07,39.04,9.0,2374.0,372.0,884.0,333.0,4.5042,206400.0,INLAND --121.03,39.05,12.0,1875.0,307.0,806.0,283.0,3.9185,195200.0,INLAND --121.06,39.04,14.0,1651.0,279.0,633.0,261.0,4.2802,194800.0,INLAND --121.06,39.04,15.0,1999.0,287.0,585.0,246.0,5.5161,361900.0,INLAND --121.06,39.03,11.0,1887.0,303.0,775.0,283.0,3.8417,187200.0,INLAND --121.22,39.11,14.0,1405.0,269.0,660.0,228.0,3.0804,156800.0,INLAND --121.19,39.05,14.0,1131.0,193.0,520.0,178.0,3.9,180400.0,INLAND --121.14,39.1,13.0,1085.0,227.0,629.0,214.0,5.0389,171500.0,INLAND --121.12,39.2,9.0,1431.0,254.0,681.0,221.0,3.045,170400.0,INLAND --121.1,39.15,10.0,680.0,143.0,354.0,140.0,4.0333,161500.0,INLAND --121.08,39.18,19.0,2323.0,397.0,963.0,379.0,3.7426,162700.0,INLAND --121.18,39.26,14.0,811.0,161.0,352.0,121.0,3.5938,140300.0,INLAND --121.18,39.25,9.0,3415.0,562.0,1208.0,479.0,4.3646,185900.0,INLAND --121.2,39.25,5.0,906.0,144.0,376.0,141.0,4.3523,188200.0,INLAND --121.18,39.23,8.0,2112.0,360.0,782.0,344.0,3.7125,175000.0,INLAND --121.21,39.24,7.0,4194.0,673.0,1355.0,566.0,4.3702,226100.0,INLAND --121.2,39.23,9.0,2802.0,447.0,955.0,418.0,5.2359,213300.0,INLAND --121.18,39.19,16.0,1528.0,351.0,729.0,319.0,2.4688,138800.0,INLAND --121.16,39.18,14.0,1006.0,187.0,462.0,185.0,3.1042,152000.0,INLAND --121.25,39.17,9.0,999.0,189.0,411.0,176.0,2.125,151800.0,INLAND --121.2,39.2,16.0,1039.0,182.0,554.0,184.0,2.9688,128300.0,INLAND --121.15,39.23,13.0,3883.0,763.0,1816.0,682.0,2.8102,144400.0,INLAND --121.24,39.22,14.0,983.0,163.0,399.0,161.0,2.2917,145100.0,INLAND --121.23,39.27,11.0,1265.0,224.0,573.0,205.0,3.3603,162500.0,INLAND --121.07,39.23,39.0,2099.0,433.0,929.0,423.0,1.9886,113800.0,INLAND --121.04,39.24,48.0,1188.0,227.0,471.0,219.0,2.3125,125700.0,INLAND --121.05,39.23,20.0,1634.0,374.0,1053.0,390.0,1.5313,154900.0,INLAND --121.06,39.23,10.0,2229.0,537.0,982.0,512.0,2.186,132700.0,INLAND --121.06,39.22,52.0,1749.0,422.0,837.0,391.0,2.325,109700.0,INLAND --121.09,39.23,35.0,2637.0,511.0,1181.0,480.0,2.7813,109200.0,INLAND --121.07,39.22,52.0,2432.0,495.0,928.0,435.0,2.425,121100.0,INLAND --121.08,39.22,30.0,2188.0,,1033.0,437.0,2.1419,105200.0,INLAND --121.08,39.21,17.0,3033.0,590.0,1319.0,583.0,2.4811,111800.0,INLAND --121.09,39.22,25.0,2200.0,439.0,1045.0,419.0,2.6042,116700.0,INLAND --121.07,39.2,45.0,204.0,62.0,133.0,51.0,1.0,90600.0,INLAND --121.02,39.23,16.0,1427.0,319.0,642.0,333.0,1.4241,125000.0,INLAND --121.04,39.22,14.0,1889.0,471.0,853.0,399.0,2.25,112500.0,INLAND --121.03,39.21,28.0,2843.0,535.0,1310.0,525.0,3.2337,123100.0,INLAND --121.05,39.2,48.0,1759.0,389.0,716.0,350.0,2.3125,108300.0,INLAND --121.06,39.21,52.0,1452.0,309.0,637.0,299.0,2.2083,103900.0,INLAND --121.05,39.21,43.0,1264.0,273.0,611.0,260.0,2.535,117100.0,INLAND --120.94,39.22,12.0,1321.0,268.0,661.0,232.0,4.0062,153800.0,INLAND --120.83,39.27,14.0,3338.0,608.0,1373.0,562.0,3.67,160100.0,INLAND --121.0,39.23,15.0,2809.0,450.0,1267.0,408.0,4.0426,191700.0,INLAND --120.99,39.22,16.0,1497.0,275.0,737.0,243.0,2.8942,182500.0,INLAND --120.99,39.2,15.0,2993.0,562.0,1296.0,518.0,3.3009,156800.0,INLAND --120.93,39.17,13.0,2331.0,464.0,1110.0,419.0,3.6563,164900.0,INLAND --120.99,39.13,14.0,770.0,116.0,285.0,116.0,3.6434,155400.0,INLAND --120.99,39.18,23.0,2550.0,457.0,1016.0,405.0,3.6607,153000.0,INLAND --121.0,39.16,10.0,1170.0,225.0,537.0,194.0,3.2813,163200.0,INLAND --121.04,39.19,17.0,856.0,167.0,518.0,170.0,3.5859,144300.0,INLAND --121.02,39.17,17.0,2277.0,459.0,1149.0,476.0,3.2303,149500.0,INLAND --121.02,39.27,52.0,3720.0,707.0,1424.0,609.0,3.2,155000.0,INLAND --121.03,39.26,49.0,3739.0,759.0,1422.0,606.0,2.4283,143100.0,INLAND --121.0,39.26,14.0,810.0,151.0,302.0,138.0,3.1094,136100.0,INLAND --121.02,39.25,52.0,1549.0,275.0,604.0,249.0,2.2278,155400.0,INLAND --121.06,39.29,14.0,1864.0,331.0,894.0,332.0,3.4028,171800.0,INLAND --120.94,39.32,14.0,3120.0,595.0,1569.0,556.0,3.5385,157400.0,INLAND --121.06,39.25,17.0,3127.0,539.0,1390.0,520.0,3.9537,172800.0,INLAND --120.89,39.3,17.0,2282.0,431.0,974.0,371.0,3.5417,155100.0,INLAND --120.99,39.26,16.0,2616.0,422.0,1090.0,425.0,3.7917,179200.0,INLAND --120.91,39.39,16.0,352.0,105.0,226.0,82.0,1.6094,79500.0,INLAND --121.03,39.37,15.0,1337.0,326.0,1172.0,306.0,2.6341,85000.0,INLAND --121.13,39.31,17.0,3442.0,705.0,1693.0,619.0,2.8102,128900.0,INLAND --120.74,39.39,18.0,453.0,117.0,152.0,77.0,1.3523,85700.0,INLAND --120.09,39.4,17.0,1076.0,283.0,171.0,64.0,2.125,83900.0,INLAND --120.17,39.33,18.0,1046.0,204.0,486.0,179.0,4.119,110900.0,INLAND --120.2,39.33,26.0,1988.0,379.0,905.0,321.0,3.7841,109500.0,INLAND --120.19,39.32,16.0,1536.0,298.0,646.0,208.0,2.3594,155700.0,INLAND --120.17,39.32,14.0,2421.0,489.0,1000.0,354.0,3.5652,119800.0,INLAND --120.17,39.33,10.0,614.0,141.0,195.0,95.0,0.9283,116300.0,INLAND --120.1,39.37,10.0,2325.0,410.0,1016.0,373.0,4.5208,117300.0,INLAND --120.1,39.33,9.0,2738.0,510.0,1193.0,412.0,4.3958,124800.0,INLAND --120.15,39.36,9.0,2254.0,400.0,694.0,243.0,5.6856,138100.0,INLAND --120.26,39.32,24.0,6012.0,1227.0,780.0,358.0,3.0043,122100.0,INLAND --120.35,39.34,29.0,1986.0,474.0,337.0,100.0,4.0278,95800.0,INLAND --120.27,39.35,11.0,2520.0,401.0,397.0,165.0,4.665,145600.0,INLAND --120.25,39.34,9.0,2739.0,555.0,294.0,110.0,3.1842,162500.0,INLAND --120.24,39.35,8.0,4195.0,725.0,291.0,115.0,3.4792,180800.0,INLAND --120.23,39.36,7.0,2045.0,358.0,245.0,92.0,4.0481,152300.0,INLAND --120.22,39.35,8.0,1872.0,281.0,203.0,71.0,4.5882,198400.0,INLAND --120.21,39.35,7.0,914.0,159.0,85.0,34.0,4.7917,187500.0,INLAND --120.19,39.35,7.0,2611.0,395.0,482.0,159.0,5.0622,174100.0,INLAND --117.95,33.94,28.0,2851.0,496.0,1287.0,496.0,5.0782,264100.0,<1H OCEAN --117.96,33.94,34.0,2228.0,399.0,1159.0,378.0,4.8906,228900.0,<1H OCEAN --117.97,33.94,36.0,1870.0,338.0,947.0,324.0,4.1205,217000.0,<1H OCEAN --117.97,33.94,34.0,1632.0,263.0,690.0,268.0,5.5608,255800.0,<1H OCEAN --117.97,33.94,35.0,1928.0,360.0,1056.0,366.0,4.0893,215700.0,<1H OCEAN --117.97,33.93,31.0,1975.0,373.0,918.0,347.0,4.4107,202000.0,<1H OCEAN --117.97,33.93,33.0,1700.0,369.0,981.0,362.0,4.5461,194000.0,<1H OCEAN --117.96,33.93,31.0,1471.0,321.0,841.0,330.0,3.46,232800.0,<1H OCEAN --117.96,33.93,29.0,2316.0,522.0,1275.0,501.0,3.776,192600.0,<1H OCEAN --117.96,33.94,31.0,2397.0,518.0,1407.0,476.0,2.6641,185200.0,<1H OCEAN --117.94,33.93,33.0,1770.0,370.0,1346.0,366.0,4.0833,162500.0,<1H OCEAN --117.94,33.93,34.0,1475.0,319.0,698.0,293.0,3.8194,186000.0,<1H OCEAN --117.94,33.93,14.0,999.0,232.0,1037.0,244.0,2.7125,166100.0,<1H OCEAN --117.95,33.93,25.0,3445.0,801.0,2400.0,750.0,3.4702,161900.0,<1H OCEAN --117.95,33.93,37.0,2633.0,630.0,1904.0,630.0,2.6123,161300.0,<1H OCEAN --117.96,33.93,15.0,2014.0,419.0,839.0,390.0,4.7446,175400.0,<1H OCEAN --117.97,33.92,32.0,2620.0,398.0,1296.0,429.0,5.7796,241300.0,<1H OCEAN --117.97,33.93,35.0,1887.0,328.0,989.0,351.0,4.1321,198100.0,<1H OCEAN --117.97,33.92,24.0,2017.0,416.0,900.0,436.0,3.0,251400.0,<1H OCEAN --117.96,33.92,18.0,3744.0,1027.0,1654.0,912.0,3.2158,215000.0,<1H OCEAN --117.95,33.92,18.0,2825.0,660.0,1590.0,643.0,3.6106,153600.0,<1H OCEAN --117.94,33.92,28.0,639.0,179.0,1062.0,169.0,3.0588,145200.0,<1H OCEAN --117.95,33.92,32.0,1661.0,312.0,1201.0,302.0,4.0,178200.0,<1H OCEAN --117.95,33.92,11.0,3127.0,706.0,1594.0,694.0,4.3426,141300.0,<1H OCEAN --117.94,33.92,32.0,1053.0,207.0,1038.0,222.0,4.6696,165500.0,<1H OCEAN --117.95,33.92,13.0,2312.0,592.0,2038.0,559.0,3.1378,137000.0,<1H OCEAN --117.94,33.94,25.0,3250.0,546.0,1452.0,501.0,5.1084,303800.0,<1H OCEAN --117.94,33.94,30.0,1596.0,307.0,845.0,309.0,4.5096,241100.0,<1H OCEAN --117.95,33.94,31.0,2237.0,431.0,1135.0,434.0,4.45,267900.0,<1H OCEAN --117.94,33.94,26.0,1962.0,540.0,1236.0,520.0,2.2156,145000.0,<1H OCEAN --117.93,33.94,30.0,2658.0,382.0,1135.0,392.0,6.0516,245000.0,<1H OCEAN --117.93,33.94,28.0,3664.0,719.0,1820.0,657.0,4.225,224700.0,<1H OCEAN --117.93,33.93,25.0,2431.0,534.0,1702.0,523.0,3.7933,184400.0,<1H OCEAN --117.92,33.94,27.0,4566.0,620.0,2045.0,664.0,5.583,267700.0,<1H OCEAN --117.92,33.94,30.0,2506.0,394.0,1255.0,421.0,4.7813,198200.0,<1H OCEAN --117.93,33.92,34.0,2271.0,437.0,1393.0,433.0,4.2443,174400.0,<1H OCEAN --117.93,33.93,37.0,1128.0,273.0,931.0,234.0,2.8,137500.0,<1H OCEAN --117.93,33.93,33.0,1626.0,378.0,1062.0,356.0,2.1944,139600.0,<1H OCEAN --117.92,33.93,12.0,4415.0,890.0,1532.0,854.0,3.75,166300.0,<1H OCEAN --117.91,33.93,21.0,2578.0,363.0,1207.0,350.0,6.2452,291700.0,<1H OCEAN --117.91,33.94,15.0,5799.0,842.0,2314.0,787.0,6.3433,350500.0,<1H OCEAN --117.89,33.94,20.0,3349.0,685.0,1822.0,675.0,4.7216,227000.0,<1H OCEAN --117.88,33.93,17.0,6100.0,861.0,2771.0,866.0,7.6486,306700.0,<1H OCEAN --117.9,33.93,12.0,4325.0,1191.0,1897.0,1080.0,3.3173,247400.0,<1H OCEAN --117.89,33.92,17.0,2936.0,555.0,1381.0,535.0,5.4617,190300.0,<1H OCEAN --117.9,33.92,27.0,698.0,116.0,391.0,126.0,5.9177,267600.0,<1H OCEAN --117.91,33.92,21.0,380.0,91.0,398.0,70.0,4.7222,208300.0,<1H OCEAN --117.91,33.91,27.0,2181.0,501.0,1555.0,488.0,3.6106,196400.0,<1H OCEAN --117.91,33.91,34.0,1763.0,303.0,894.0,297.0,5.0096,221700.0,<1H OCEAN --117.91,33.91,32.0,1530.0,301.0,666.0,276.0,4.125,230200.0,<1H OCEAN --117.91,33.91,24.0,2249.0,379.0,1015.0,385.0,4.9766,267100.0,<1H OCEAN --117.89,33.92,34.0,1473.0,312.0,1025.0,315.0,3.8333,170400.0,<1H OCEAN --117.89,33.91,33.0,1264.0,224.0,527.0,227.0,3.7321,216500.0,<1H OCEAN --117.9,33.91,36.0,1376.0,257.0,687.0,221.0,3.5403,195400.0,<1H OCEAN --117.89,33.92,8.0,2120.0,544.0,1281.0,470.0,3.4954,159500.0,<1H OCEAN --117.89,33.92,14.0,1562.0,373.0,609.0,328.0,2.3935,125000.0,<1H OCEAN --117.89,33.9,16.0,1426.0,216.0,652.0,226.0,6.5284,288700.0,<1H OCEAN --117.89,33.9,23.0,1533.0,226.0,693.0,230.0,7.898,258200.0,<1H OCEAN --117.9,33.9,19.0,2176.0,414.0,1002.0,402.0,4.9743,193500.0,<1H OCEAN --117.9,33.91,26.0,2885.0,476.0,1227.0,439.0,4.9524,226600.0,<1H OCEAN --117.9,33.91,33.0,4181.0,804.0,2049.0,834.0,4.3103,201600.0,<1H OCEAN --117.92,33.92,19.0,2181.0,400.0,1272.0,337.0,5.1952,302100.0,<1H OCEAN --117.92,33.91,33.0,2868.0,382.0,1204.0,412.0,6.1825,336900.0,<1H OCEAN --117.92,33.91,27.0,2558.0,310.0,891.0,316.0,9.5561,411800.0,<1H OCEAN --117.91,33.9,27.0,829.0,114.0,383.0,133.0,9.3125,293500.0,<1H OCEAN --117.92,33.89,18.0,2895.0,487.0,1116.0,429.0,5.4716,400000.0,<1H OCEAN --117.92,33.9,13.0,1814.0,320.0,1010.0,313.0,6.3489,337900.0,<1H OCEAN --117.93,33.91,24.0,1698.0,297.0,676.0,273.0,5.2017,364600.0,<1H OCEAN --117.9,33.9,18.0,3821.0,576.0,1430.0,568.0,6.9399,349600.0,<1H OCEAN --117.9,33.88,28.0,2696.0,346.0,947.0,356.0,9.0055,375400.0,<1H OCEAN --117.89,33.89,17.0,1671.0,192.0,678.0,206.0,13.1107,467600.0,<1H OCEAN --117.92,33.89,12.0,1859.0,393.0,622.0,316.0,5.0258,161800.0,<1H OCEAN --117.97,33.91,19.0,8096.0,1318.0,3853.0,1313.0,6.0076,269500.0,<1H OCEAN --117.96,33.9,9.0,1899.0,284.0,1070.0,293.0,7.2532,381500.0,<1H OCEAN --117.95,33.9,15.0,3057.0,479.0,1679.0,498.0,6.8429,372600.0,<1H OCEAN --117.96,33.9,10.0,2423.0,356.0,1213.0,347.0,6.5635,346900.0,<1H OCEAN --117.98,33.9,6.0,1537.0,347.0,506.0,280.0,4.8264,146800.0,<1H OCEAN --117.96,33.88,25.0,3578.0,461.0,1588.0,466.0,6.2556,341300.0,<1H OCEAN --117.95,33.89,17.0,1665.0,247.0,755.0,254.0,6.5764,349000.0,<1H OCEAN --117.96,33.89,24.0,1332.0,252.0,625.0,230.0,4.4375,334100.0,<1H OCEAN --117.94,33.91,18.0,8836.0,1527.0,3946.0,1451.0,5.6441,313000.0,<1H OCEAN --117.93,33.9,30.0,2629.0,331.0,956.0,319.0,9.9071,500001.0,<1H OCEAN --117.94,33.89,30.0,2577.0,404.0,1076.0,374.0,6.7528,459600.0,<1H OCEAN --117.94,33.88,35.0,2159.0,343.0,833.0,335.0,5.3738,365100.0,<1H OCEAN --117.94,33.9,27.0,2029.0,242.0,711.0,254.0,9.7956,500001.0,<1H OCEAN --117.98,33.87,25.0,2037.0,515.0,1435.0,496.0,3.3199,188800.0,<1H OCEAN --117.98,33.87,29.0,1310.0,332.0,937.0,294.0,3.8068,158700.0,<1H OCEAN --117.98,33.86,25.0,1025.0,266.0,726.0,183.0,3.875,137500.0,<1H OCEAN --117.98,33.86,26.0,1240.0,285.0,781.0,315.0,4.1287,205800.0,<1H OCEAN --117.97,33.87,28.0,1784.0,440.0,1255.0,433.0,3.7054,169200.0,<1H OCEAN --117.97,33.86,34.0,2138.0,490.0,1682.0,463.0,3.6006,161700.0,<1H OCEAN --117.97,33.86,35.0,1691.0,367.0,1265.0,378.0,3.5855,174300.0,<1H OCEAN --117.97,33.86,12.0,1370.0,367.0,1022.0,296.0,3.6471,141700.0,<1H OCEAN --117.96,33.86,35.0,2146.0,430.0,1230.0,429.0,3.7813,184900.0,<1H OCEAN --117.96,33.86,35.0,2181.0,371.0,1249.0,358.0,4.2937,183200.0,<1H OCEAN --117.96,33.87,35.0,1972.0,367.0,1152.0,356.0,3.7222,187500.0,<1H OCEAN --117.95,33.86,35.0,2375.0,439.0,1343.0,424.0,4.53,193500.0,<1H OCEAN --117.95,33.86,35.0,2478.0,431.0,1333.0,427.0,5.2099,191400.0,<1H OCEAN --117.96,33.86,32.0,2366.0,505.0,1283.0,477.0,3.3516,190000.0,<1H OCEAN --117.94,33.88,46.0,1747.0,312.0,770.0,296.0,5.4217,256000.0,<1H OCEAN --117.95,33.87,34.0,1599.0,296.0,938.0,307.0,4.285,184900.0,<1H OCEAN --117.95,33.87,35.0,1854.0,383.0,1115.0,381.0,4.4784,185200.0,<1H OCEAN --117.95,33.87,22.0,1432.0,335.0,746.0,296.0,2.0227,55000.0,<1H OCEAN --117.96,33.87,27.0,890.0,289.0,416.0,200.0,3.141,167500.0,<1H OCEAN --117.96,33.87,37.0,1785.0,360.0,1155.0,403.0,4.7984,175800.0,<1H OCEAN --117.95,33.88,34.0,1939.0,355.0,817.0,314.0,3.6705,275000.0,<1H OCEAN --117.94,33.86,36.0,2824.0,493.0,1394.0,507.0,4.6477,194700.0,<1H OCEAN --117.94,33.86,33.0,1013.0,312.0,706.0,266.0,2.1432,197500.0,<1H OCEAN --117.95,33.86,36.0,2038.0,343.0,1066.0,346.0,5.197,195700.0,<1H OCEAN --117.93,33.86,36.0,1672.0,318.0,1173.0,337.0,4.5774,182100.0,<1H OCEAN --117.93,33.86,35.0,1216.0,225.0,893.0,228.0,4.0288,184000.0,<1H OCEAN --117.94,33.86,35.0,1235.0,227.0,875.0,220.0,4.6964,183100.0,<1H OCEAN --117.94,33.86,35.0,2127.0,417.0,1247.0,378.0,4.75,185600.0,<1H OCEAN --117.93,33.88,52.0,2157.0,362.0,1001.0,373.0,5.1237,240000.0,<1H OCEAN --117.93,33.87,10.0,1277.0,488.0,730.0,417.0,1.4803,137500.0,<1H OCEAN --117.94,33.87,46.0,2066.0,450.0,1275.0,448.0,3.9375,187000.0,<1H OCEAN --117.94,33.88,35.0,1694.0,296.0,679.0,282.0,4.3333,239300.0,<1H OCEAN --117.92,33.87,44.0,308.0,87.0,301.0,100.0,2.1991,191100.0,<1H OCEAN --117.92,33.87,36.0,1125.0,285.0,966.0,257.0,2.8438,162500.0,<1H OCEAN --117.93,33.87,52.0,950.0,229.0,429.0,185.0,2.315,182100.0,<1H OCEAN --117.93,33.88,45.0,1306.0,293.0,585.0,260.0,4.0812,241700.0,<1H OCEAN --117.93,33.88,32.0,2458.0,359.0,967.0,409.0,7.2893,293500.0,<1H OCEAN --117.92,33.88,52.0,1270.0,276.0,609.0,211.0,3.75,232500.0,<1H OCEAN --117.91,33.88,34.0,1851.0,291.0,784.0,290.0,5.2336,235600.0,<1H OCEAN --117.92,33.88,32.0,1683.0,273.0,719.0,263.0,5.3649,243600.0,<1H OCEAN --117.92,33.88,32.0,1632.0,244.0,575.0,235.0,5.3986,318700.0,<1H OCEAN --117.91,33.89,30.0,1631.0,212.0,523.0,216.0,7.875,351900.0,<1H OCEAN --117.9,33.88,35.0,2062.0,353.0,991.0,357.0,5.2897,230400.0,<1H OCEAN --117.9,33.88,34.0,1396.0,245.0,661.0,261.0,4.675,215400.0,<1H OCEAN --117.9,33.87,28.0,2315.0,538.0,1360.0,504.0,2.9861,218600.0,<1H OCEAN --117.9,33.87,34.0,1411.0,292.0,1040.0,299.0,3.4338,195200.0,<1H OCEAN --117.91,33.87,29.0,1121.0,,762.0,276.0,2.5,143800.0,<1H OCEAN --117.91,33.87,52.0,2031.0,506.0,1191.0,463.0,2.9076,177300.0,<1H OCEAN --117.88,33.89,18.0,1616.0,532.0,866.0,496.0,3.6435,119100.0,<1H OCEAN --117.88,33.89,16.0,959.0,176.0,353.0,185.0,4.5,173300.0,<1H OCEAN --117.88,33.88,15.0,957.0,360.0,615.0,370.0,3.0263,162500.0,<1H OCEAN --117.89,33.88,15.0,1655.0,626.0,1549.0,582.0,1.9127,175000.0,<1H OCEAN --117.89,33.88,33.0,1582.0,256.0,771.0,240.0,5.3836,229600.0,<1H OCEAN --117.89,33.88,27.0,2091.0,336.0,1037.0,332.0,5.7519,243400.0,<1H OCEAN --117.89,33.87,25.0,1492.0,439.0,755.0,389.0,3.0893,188200.0,<1H OCEAN --117.89,33.87,32.0,1133.0,216.0,693.0,228.0,3.3594,202100.0,<1H OCEAN --117.88,33.87,35.0,1919.0,349.0,1302.0,345.0,5.6409,190900.0,<1H OCEAN --117.89,33.87,32.0,1569.0,422.0,835.0,386.0,3.0465,148900.0,<1H OCEAN --117.93,33.87,45.0,1006.0,230.0,1237.0,237.0,3.3472,168000.0,<1H OCEAN --117.93,33.86,36.0,931.0,279.0,778.0,303.0,2.6563,155000.0,<1H OCEAN --117.93,33.86,17.0,1627.0,398.0,1216.0,369.0,3.3438,186600.0,<1H OCEAN --117.93,33.86,35.0,931.0,181.0,516.0,174.0,5.5867,182500.0,<1H OCEAN --117.93,33.87,29.0,1221.0,371.0,1822.0,326.0,1.7935,162500.0,<1H OCEAN --117.89,33.86,28.0,1395.0,398.0,1220.0,362.0,3.3008,193800.0,<1H OCEAN --117.91,33.86,26.0,2296.0,570.0,1415.0,527.0,2.4732,165800.0,<1H OCEAN --117.92,33.86,26.0,745.0,161.0,247.0,151.0,3.6375,133900.0,<1H OCEAN --117.92,33.87,33.0,1597.0,,1888.0,423.0,3.055,157800.0,<1H OCEAN --117.87,33.91,16.0,2434.0,455.0,1017.0,476.0,4.2188,176300.0,<1H OCEAN --117.88,33.9,21.0,3180.0,434.0,1413.0,391.0,6.5945,277300.0,<1H OCEAN --117.88,33.9,15.0,1705.0,478.0,759.0,479.0,3.5333,114400.0,<1H OCEAN --117.88,33.89,19.0,3583.0,911.0,2300.0,871.0,3.0214,218400.0,<1H OCEAN --117.88,33.89,17.0,3218.0,923.0,1701.0,824.0,3.6946,265500.0,<1H OCEAN --117.87,33.89,25.0,1142.0,162.0,486.0,150.0,7.1472,270100.0,<1H OCEAN --117.86,33.91,16.0,2889.0,423.0,1227.0,401.0,6.4514,270800.0,<1H OCEAN --117.86,33.9,17.0,1452.0,188.0,630.0,194.0,6.9113,285200.0,<1H OCEAN --117.86,33.9,25.0,3205.0,409.0,1291.0,408.0,7.2478,299200.0,<1H OCEAN --117.87,33.9,21.0,3181.0,447.0,1416.0,469.0,6.8268,280300.0,<1H OCEAN --117.86,33.89,22.0,4386.0,593.0,1915.0,592.0,6.6897,289800.0,<1H OCEAN --117.86,33.89,24.0,2002.0,253.0,820.0,241.0,6.9612,274500.0,<1H OCEAN --117.87,33.89,19.0,1674.0,243.0,786.0,234.0,6.4218,275000.0,<1H OCEAN --117.86,33.88,19.0,1621.0,328.0,871.0,322.0,3.7361,201400.0,<1H OCEAN --117.87,33.89,17.0,1441.0,530.0,769.0,456.0,2.425,171700.0,<1H OCEAN --117.87,33.89,22.0,2340.0,664.0,1382.0,546.0,3.343,184600.0,<1H OCEAN --117.87,33.88,25.0,1808.0,440.0,1342.0,454.0,3.025,156900.0,<1H OCEAN --117.87,33.88,24.0,2655.0,702.0,1519.0,708.0,3.3036,183900.0,<1H OCEAN --117.87,33.88,28.0,3333.0,752.0,2026.0,722.0,3.5667,190700.0,<1H OCEAN --117.87,33.88,28.0,2612.0,602.0,1682.0,563.0,3.6417,204300.0,<1H OCEAN --117.86,33.87,12.0,1600.0,251.0,685.0,256.0,5.1784,254000.0,<1H OCEAN --117.87,33.85,33.0,45.0,11.0,34.0,10.0,5.2949,350000.0,<1H OCEAN --117.85,33.86,18.0,329.0,72.0,209.0,71.0,4.6806,187500.0,<1H OCEAN --117.85,33.89,22.0,4020.0,655.0,1486.0,635.0,5.9639,262300.0,<1H OCEAN --117.85,33.88,14.0,4753.0,681.0,2138.0,678.0,7.3658,288500.0,<1H OCEAN --117.86,33.88,20.0,3977.0,540.0,1886.0,541.0,6.5843,272200.0,<1H OCEAN --117.85,33.87,15.0,5078.0,806.0,2569.0,759.0,5.6549,301900.0,<1H OCEAN --117.85,33.9,20.0,4026.0,648.0,1997.0,650.0,5.5918,260500.0,<1H OCEAN --117.85,33.9,25.0,1548.0,256.0,811.0,263.0,5.2037,242200.0,<1H OCEAN --117.84,33.89,24.0,3935.0,625.0,1912.0,593.0,5.7951,226900.0,<1H OCEAN --117.85,33.89,24.0,3326.0,503.0,1616.0,494.0,5.7457,240600.0,<1H OCEAN --117.88,33.87,21.0,1519.0,388.0,1203.0,366.0,3.2083,145300.0,<1H OCEAN --117.87,33.86,19.0,2232.0,448.0,1149.0,417.0,3.1534,324400.0,<1H OCEAN --117.87,33.87,7.0,2663.0,642.0,1367.0,677.0,4.6563,162400.0,<1H OCEAN --117.87,33.87,15.0,1898.0,476.0,1766.0,455.0,2.4929,158500.0,<1H OCEAN --117.87,33.87,16.0,1332.0,368.0,1534.0,295.0,3.0227,297100.0,<1H OCEAN --117.86,33.87,19.0,1591.0,279.0,891.0,237.0,5.6573,216000.0,<1H OCEAN --117.88,33.85,18.0,2705.0,713.0,2726.0,674.0,2.7759,200000.0,<1H OCEAN --117.87,33.86,28.0,2292.0,531.0,2197.0,509.0,3.4856,142800.0,<1H OCEAN --117.88,33.85,22.0,1105.0,241.0,971.0,249.0,3.1667,113900.0,<1H OCEAN --117.81,33.89,13.0,3252.0,583.0,1546.0,557.0,5.8243,297900.0,<1H OCEAN --117.82,33.88,18.0,1982.0,300.0,1027.0,324.0,7.0526,327500.0,<1H OCEAN --117.82,33.89,24.0,2168.0,421.0,1050.0,397.0,4.6172,238300.0,<1H OCEAN --117.81,33.88,19.0,2968.0,503.0,1430.0,459.0,5.3339,371700.0,<1H OCEAN --117.82,33.89,21.0,3079.0,509.0,1431.0,480.0,4.0714,278900.0,<1H OCEAN --117.78,33.86,16.0,3471.0,708.0,1769.0,691.0,4.1064,246100.0,<1H OCEAN --117.76,33.87,16.0,3973.0,595.0,1971.0,575.0,6.4265,263700.0,<1H OCEAN --117.83,33.9,23.0,2446.0,360.0,1196.0,359.0,6.5755,272800.0,<1H OCEAN --117.84,33.9,24.0,1723.0,223.0,707.0,219.0,7.0352,299600.0,<1H OCEAN --117.83,33.89,25.0,1737.0,270.0,840.0,265.0,4.625,245700.0,<1H OCEAN --117.83,33.88,23.0,2365.0,355.0,1209.0,347.0,6.0132,259400.0,<1H OCEAN --117.84,33.89,19.0,3544.0,542.0,1787.0,560.0,6.7837,264300.0,<1H OCEAN --117.83,33.88,18.0,2112.0,340.0,1048.0,315.0,6.9308,231700.0,<1H OCEAN --117.82,33.88,15.0,5392.0,895.0,2531.0,827.0,6.2185,280300.0,<1H OCEAN --117.83,33.87,5.0,6971.0,1449.0,3521.0,1423.0,5.2131,243900.0,<1H OCEAN --117.81,33.88,19.0,2265.0,283.0,904.0,279.0,9.2327,461300.0,<1H OCEAN --117.81,33.87,19.0,4491.0,680.0,2457.0,702.0,6.0591,233500.0,<1H OCEAN --117.8,33.87,16.0,5954.0,1281.0,3107.0,1209.0,4.2566,206100.0,<1H OCEAN --117.81,33.86,18.0,133.0,29.0,95.0,23.0,3.5625,235000.0,<1H OCEAN --117.87,33.92,14.0,4039.0,669.0,1905.0,670.0,6.3303,303000.0,<1H OCEAN --117.88,33.92,13.0,3292.0,727.0,1565.0,698.0,5.457,308800.0,<1H OCEAN --117.85,33.92,11.0,3331.0,410.0,1460.0,416.0,8.0287,371800.0,<1H OCEAN --117.87,33.92,17.0,4575.0,764.0,2054.0,737.0,6.0571,272400.0,<1H OCEAN --117.83,33.93,14.0,1956.0,282.0,671.0,269.0,6.5841,306400.0,<1H OCEAN --117.8,33.92,16.0,5819.0,986.0,2306.0,914.0,4.6315,277500.0,<1H OCEAN --117.8,33.89,25.0,3121.0,381.0,1278.0,389.0,7.0217,357900.0,<1H OCEAN --117.79,33.88,17.0,8562.0,1351.0,3822.0,1316.0,6.0829,252600.0,<1H OCEAN --117.78,33.87,16.0,5609.0,952.0,2624.0,934.0,5.3307,169600.0,<1H OCEAN --117.78,33.88,16.0,1800.0,238.0,871.0,234.0,6.6678,301900.0,<1H OCEAN --117.78,33.9,14.0,6239.0,901.0,2923.0,904.0,6.5437,268200.0,<1H OCEAN --117.82,33.9,25.0,1137.0,170.0,524.0,164.0,7.5744,259300.0,<1H OCEAN --117.8,33.9,22.0,3760.0,482.0,1485.0,461.0,7.8537,354900.0,<1H OCEAN --117.74,33.89,4.0,37937.0,5471.0,16122.0,5189.0,7.4947,366300.0,<1H OCEAN --117.76,33.88,9.0,4838.0,759.0,2090.0,695.0,6.6536,307800.0,<1H OCEAN --117.77,33.88,8.0,4874.0,627.0,2070.0,619.0,8.1117,410200.0,<1H OCEAN --117.78,33.89,7.0,9729.0,1210.0,4160.0,1214.0,8.9088,415300.0,<1H OCEAN --117.8,33.85,23.0,3038.0,470.0,1568.0,438.0,5.6403,233000.0,<1H OCEAN --117.82,33.85,21.0,2603.0,404.0,1350.0,390.0,6.057,235900.0,<1H OCEAN --117.82,33.85,18.0,1810.0,305.0,1189.0,326.0,5.2227,213500.0,<1H OCEAN --117.8,33.85,16.0,4151.0,637.0,1558.0,604.0,5.806,304900.0,<1H OCEAN --117.82,33.84,25.0,1788.0,203.0,676.0,217.0,10.1299,454300.0,<1H OCEAN --117.81,33.84,17.0,4343.0,515.0,1605.0,484.0,10.5981,460100.0,<1H OCEAN --117.79,33.84,9.0,10484.0,1603.0,4005.0,1419.0,8.3931,365300.0,<1H OCEAN --117.78,33.85,16.0,3781.0,504.0,1665.0,499.0,7.2554,335600.0,<1H OCEAN --117.78,33.86,16.0,4390.0,660.0,2146.0,633.0,6.1504,266000.0,<1H OCEAN --117.76,33.87,16.0,3182.0,429.0,1663.0,428.0,7.0592,288200.0,<1H OCEAN --117.78,33.81,23.0,1986.0,278.0,826.0,260.0,7.7752,380000.0,<1H OCEAN --117.77,33.8,16.0,3973.0,483.0,1373.0,452.0,9.8074,417000.0,<1H OCEAN --117.8,33.79,13.0,2021.0,362.0,1081.0,341.0,4.3269,231400.0,<1H OCEAN --117.79,33.8,11.0,10535.0,1620.0,4409.0,1622.0,6.67,283200.0,<1H OCEAN --117.77,33.85,13.0,5415.0,827.0,2061.0,714.0,7.3681,353100.0,<1H OCEAN --117.76,33.84,15.0,3764.0,510.0,1448.0,468.0,8.7124,410500.0,<1H OCEAN --117.75,33.84,16.0,3491.0,502.0,1496.0,509.0,6.6207,270500.0,<1H OCEAN --117.76,33.83,15.0,3086.0,457.0,1262.0,436.0,6.4415,300700.0,<1H OCEAN --117.77,33.84,5.0,4380.0,715.0,1913.0,741.0,6.7274,266400.0,<1H OCEAN --117.76,33.86,14.0,3666.0,442.0,1400.0,433.0,10.1316,500001.0,<1H OCEAN --117.75,33.83,14.0,2452.0,296.0,954.0,275.0,8.2375,388300.0,<1H OCEAN --117.74,33.85,4.0,5416.0,820.0,1753.0,583.0,6.9544,314000.0,<1H OCEAN --117.78,33.82,12.0,6208.0,750.0,2443.0,739.0,9.1808,413700.0,<1H OCEAN --117.76,33.81,2.0,582.0,70.0,199.0,64.0,7.1193,500001.0,<1H OCEAN --117.81,33.8,25.0,2765.0,475.0,1666.0,474.0,6.0531,230700.0,<1H OCEAN --117.81,33.79,25.0,5950.0,1155.0,4528.0,1064.0,4.2564,204600.0,<1H OCEAN --117.8,33.81,14.0,1206.0,142.0,572.0,149.0,8.847,388700.0,<1H OCEAN --117.8,33.78,18.0,3548.0,474.0,1506.0,449.0,6.925,290300.0,<1H OCEAN --117.8,33.78,17.0,4138.0,805.0,2442.0,780.0,4.7804,242000.0,<1H OCEAN --117.69,33.8,5.0,3178.0,631.0,1467.0,581.0,5.2541,237100.0,<1H OCEAN --117.66,33.61,16.0,2022.0,254.0,789.0,270.0,8.4112,286900.0,<1H OCEAN --117.66,33.62,16.0,4065.0,661.0,1962.0,636.0,6.2177,256600.0,<1H OCEAN --117.67,33.61,24.0,3859.0,661.0,1972.0,624.0,5.7871,227400.0,<1H OCEAN --117.66,33.61,17.0,3464.0,519.0,1713.0,530.0,6.0471,248400.0,<1H OCEAN --117.66,33.61,21.0,1932.0,266.0,860.0,286.0,7.1497,274000.0,<1H OCEAN --117.66,33.6,24.0,1684.0,232.0,781.0,230.0,6.8667,279600.0,<1H OCEAN --117.66,33.6,25.0,3745.0,522.0,1648.0,496.0,7.5488,278100.0,<1H OCEAN --117.67,33.61,23.0,3588.0,577.0,1695.0,569.0,6.1401,243200.0,<1H OCEAN --117.68,33.63,16.0,5218.0,1187.0,2701.0,1125.0,3.929,143100.0,<1H OCEAN --117.68,33.63,13.0,5830.0,921.0,2897.0,891.0,6.2403,257400.0,<1H OCEAN --117.67,33.63,9.0,5774.0,1320.0,3086.0,1265.0,4.4063,202200.0,<1H OCEAN --117.62,33.77,43.0,1911.0,439.0,930.0,433.0,4.6369,186400.0,<1H OCEAN --117.6,33.72,36.0,1317.0,228.0,531.0,214.0,5.6346,272500.0,<1H OCEAN --117.67,33.6,25.0,3164.0,449.0,1517.0,453.0,6.7921,266000.0,<1H OCEAN --117.66,33.59,18.0,4552.0,706.0,1918.0,671.0,7.5791,288100.0,<1H OCEAN --117.67,33.6,20.0,1213.0,171.0,565.0,170.0,7.2592,314800.0,<1H OCEAN --117.66,33.58,16.0,3016.0,394.0,1172.0,382.0,7.5196,315600.0,<1H OCEAN --117.67,33.57,18.0,1614.0,210.0,692.0,209.0,7.9294,280300.0,<1H OCEAN --117.66,33.57,16.0,4277.0,565.0,1642.0,549.0,8.0082,286600.0,<1H OCEAN --117.7,33.62,16.0,9653.0,2000.0,4732.0,1922.0,3.7361,197200.0,<1H OCEAN --117.69,33.62,18.0,4265.0,581.0,2025.0,544.0,6.4598,282700.0,<1H OCEAN --117.68,33.61,19.0,2962.0,405.0,1295.0,440.0,6.0689,248000.0,<1H OCEAN --117.69,33.61,16.0,3010.0,580.0,1649.0,538.0,4.0221,236200.0,<1H OCEAN --117.68,33.6,19.0,3913.0,460.0,1646.0,454.0,7.2147,303900.0,<1H OCEAN --117.65,33.65,16.0,1538.0,260.0,835.0,259.0,5.5779,234800.0,<1H OCEAN --117.66,33.64,17.0,3173.0,501.0,1555.0,520.0,6.7079,250800.0,<1H OCEAN --117.67,33.64,11.0,2722.0,554.0,1565.0,508.0,5.1645,164100.0,<1H OCEAN --117.66,33.65,13.0,8527.0,1364.0,4597.0,1393.0,6.2242,237900.0,<1H OCEAN --117.65,33.65,15.0,3485.0,519.0,1740.0,485.0,6.7543,251900.0,<1H OCEAN --117.65,33.63,16.0,3388.0,425.0,1395.0,427.0,8.4471,351300.0,<1H OCEAN --117.65,33.65,15.0,4713.0,671.0,2197.0,673.0,7.5426,294800.0,<1H OCEAN --117.66,33.63,16.0,3299.0,610.0,1967.0,604.0,5.5085,223300.0,<1H OCEAN --117.63,33.65,10.0,3580.0,491.0,1688.0,467.0,7.7814,288700.0,<1H OCEAN --117.62,33.64,2.0,7826.0,893.0,2985.0,790.0,10.1531,484100.0,<1H OCEAN --117.64,33.63,10.0,4814.0,643.0,1808.0,588.0,8.798,436600.0,<1H OCEAN --117.64,33.64,11.0,2422.0,429.0,810.0,395.0,6.1935,293200.0,<1H OCEAN --117.64,33.65,4.0,6842.0,1512.0,3256.0,1439.0,5.4132,216600.0,<1H OCEAN --117.63,33.62,9.0,4257.0,785.0,1293.0,745.0,3.7139,196700.0,<1H OCEAN --117.63,33.63,6.0,3068.0,549.0,985.0,536.0,4.2009,238000.0,<1H OCEAN --117.65,33.62,15.0,2708.0,410.0,1140.0,389.0,6.2899,275000.0,<1H OCEAN --117.64,33.62,16.0,3970.0,771.0,1202.0,734.0,3.4115,184800.0,<1H OCEAN --117.66,33.62,16.0,5175.0,799.0,2717.0,813.0,6.1493,257800.0,<1H OCEAN --117.65,33.6,15.0,5736.0,,2529.0,762.0,6.4114,278700.0,<1H OCEAN --117.64,33.61,14.0,5232.0,810.0,3041.0,839.0,5.826,247900.0,<1H OCEAN --117.65,33.6,13.0,2319.0,430.0,1004.0,380.0,5.133,316100.0,<1H OCEAN --117.64,33.59,4.0,3274.0,383.0,1312.0,390.0,8.1611,348000.0,<1H OCEAN --117.66,33.58,6.0,4186.0,,1794.0,541.0,9.6986,357600.0,<1H OCEAN --117.65,33.57,5.0,1998.0,500.0,1185.0,446.0,4.3542,195600.0,<1H OCEAN --117.65,33.58,2.0,2411.0,354.0,703.0,217.0,7.8061,331400.0,<1H OCEAN --117.66,33.57,16.0,2483.0,443.0,1357.0,400.0,5.5545,214200.0,<1H OCEAN --117.65,33.59,8.0,2649.0,340.0,1238.0,354.0,8.0409,337900.0,<1H OCEAN --117.67,33.54,16.0,2102.0,350.0,1003.0,328.0,4.7981,170800.0,<1H OCEAN --117.67,33.54,15.0,2423.0,435.0,1366.0,423.0,4.8906,181800.0,<1H OCEAN --117.67,33.55,6.0,3157.0,721.0,1695.0,710.0,3.7609,222300.0,<1H OCEAN --117.67,33.56,4.0,3289.0,728.0,1345.0,632.0,4.6863,184400.0,<1H OCEAN --117.64,33.51,15.0,1743.0,254.0,943.0,274.0,5.9339,286000.0,<1H OCEAN --117.64,33.51,14.0,1343.0,175.0,650.0,184.0,7.2648,363200.0,<1H OCEAN --117.55,33.52,15.0,426.0,62.0,133.0,45.0,5.136,447400.0,<1H OCEAN --117.59,33.61,3.0,2993.0,429.0,991.0,390.0,10.0765,378200.0,<1H OCEAN --117.58,33.6,5.0,5348.0,659.0,1862.0,555.0,11.0567,495400.0,<1H OCEAN --117.49,33.64,3.0,8874.0,1302.0,3191.0,1027.0,6.8588,302000.0,<1H OCEAN --117.59,33.67,29.0,1223.0,215.0,633.0,204.0,6.5143,279800.0,<1H OCEAN --117.53,33.69,6.0,454.0,102.0,213.0,43.0,10.9704,483300.0,<1H OCEAN --117.59,33.66,3.0,1206.0,256.0,563.0,287.0,5.1589,167800.0,<1H OCEAN --117.58,33.66,4.0,3305.0,644.0,1693.0,597.0,5.2497,215000.0,<1H OCEAN --117.58,33.65,4.0,2000.0,422.0,833.0,386.0,5.7709,190300.0,<1H OCEAN --117.59,33.66,4.0,1318.0,218.0,673.0,225.0,6.0722,260800.0,<1H OCEAN --117.59,33.65,2.0,4860.0,1193.0,2332.0,1073.0,4.5022,151900.0,<1H OCEAN --117.6,33.65,4.0,3134.0,504.0,1599.0,485.0,6.2464,233900.0,<1H OCEAN --117.61,33.67,3.0,4541.0,720.0,1600.0,583.0,6.8004,284900.0,<1H OCEAN --117.64,33.66,6.0,5221.0,1217.0,2597.0,1119.0,4.6076,204000.0,<1H OCEAN --117.59,33.65,4.0,1793.0,390.0,897.0,386.0,4.2463,182800.0,<1H OCEAN --117.58,33.65,4.0,1606.0,498.0,815.0,426.0,3.375,500001.0,<1H OCEAN --117.61,33.63,2.0,4678.0,817.0,1970.0,712.0,6.1078,219000.0,<1H OCEAN --117.65,33.53,7.0,6814.0,785.0,2175.0,681.0,10.49,500001.0,<1H OCEAN --117.62,33.42,23.0,2656.0,515.0,998.0,435.0,4.0294,500001.0,NEAR OCEAN --117.63,33.38,12.0,5744.0,1054.0,2104.0,847.0,5.1482,500001.0,NEAR OCEAN --117.61,33.41,35.0,2556.0,404.0,946.0,399.0,6.1557,402900.0,NEAR OCEAN --117.61,33.42,31.0,3959.0,856.0,1919.0,775.0,4.0313,282000.0,NEAR OCEAN --117.6,33.41,29.0,2193.0,389.0,922.0,387.0,4.5476,309200.0,NEAR OCEAN --117.62,33.47,4.0,1812.0,255.0,661.0,211.0,6.487,294200.0,NEAR OCEAN --117.63,33.45,5.0,3549.0,604.0,1571.0,534.0,5.3705,363500.0,NEAR OCEAN --117.63,33.47,4.0,1969.0,280.0,805.0,271.0,7.6012,310800.0,NEAR OCEAN --117.61,33.45,6.0,950.0,184.0,426.0,186.0,4.7237,220700.0,NEAR OCEAN --117.63,33.46,7.0,7684.0,1088.0,2812.0,1057.0,6.3401,387300.0,NEAR OCEAN --117.64,33.45,26.0,1528.0,,607.0,218.0,6.2871,325500.0,NEAR OCEAN --117.65,33.42,25.0,2174.0,428.0,603.0,352.0,3.3967,249400.0,NEAR OCEAN --117.64,33.45,27.0,334.0,56.0,130.0,46.0,4.875,284100.0,NEAR OCEAN --117.62,33.43,27.0,1835.0,413.0,1221.0,377.0,3.2232,247100.0,NEAR OCEAN --117.62,33.43,27.0,3858.0,1062.0,2321.0,873.0,3.3155,231000.0,NEAR OCEAN --117.62,33.43,24.0,1296.0,384.0,850.0,367.0,2.7545,231300.0,NEAR OCEAN --117.65,33.4,17.0,2737.0,654.0,910.0,492.0,3.5729,370800.0,NEAR OCEAN --117.62,33.43,23.0,4052.0,955.0,1950.0,859.0,4.0647,240600.0,NEAR OCEAN --117.61,33.43,33.0,1150.0,383.0,604.0,317.0,2.3545,187500.0,NEAR OCEAN --117.62,33.42,27.0,1005.0,266.0,460.0,243.0,3.1029,190600.0,NEAR OCEAN --117.62,33.42,27.0,1444.0,412.0,597.0,311.0,3.1395,310000.0,NEAR OCEAN --117.6,33.45,4.0,2369.0,566.0,996.0,435.0,5.4031,243800.0,NEAR OCEAN --117.59,33.44,3.0,5813.0,1264.0,2363.0,1041.0,4.3897,341300.0,NEAR OCEAN --117.59,33.4,22.0,3167.0,743.0,1797.0,642.0,4.0076,252100.0,NEAR OCEAN --117.59,33.41,17.0,2248.0,448.0,878.0,423.0,5.1298,246000.0,NEAR OCEAN --117.6,33.42,23.0,2482.0,461.0,1048.0,425.0,4.665,280600.0,NEAR OCEAN --117.61,33.43,24.0,2303.0,399.0,851.0,379.0,3.9875,346500.0,NEAR OCEAN --117.6,33.43,21.0,3951.0,562.0,1392.0,543.0,5.1439,414000.0,NEAR OCEAN --117.61,33.44,17.0,2036.0,272.0,713.0,265.0,6.5954,346200.0,NEAR OCEAN --117.59,33.43,14.0,3223.0,484.0,1230.0,488.0,6.5964,358800.0,NEAR OCEAN --117.67,33.47,22.0,2728.0,616.0,1081.0,566.0,1.6393,500001.0,<1H OCEAN --117.67,33.46,24.0,3571.0,722.0,1409.0,543.0,4.6518,277800.0,<1H OCEAN --117.67,33.44,25.0,2994.0,519.0,903.0,410.0,6.6852,500001.0,<1H OCEAN --117.67,33.46,18.0,1679.0,271.0,783.0,257.0,5.3999,300000.0,<1H OCEAN --117.66,33.46,26.0,2073.0,370.0,952.0,340.0,5.0877,288100.0,<1H OCEAN --117.66,33.46,28.0,1261.0,233.0,609.0,242.0,5.1024,312700.0,<1H OCEAN --117.66,33.48,22.0,809.0,180.0,334.0,157.0,2.3846,500001.0,<1H OCEAN --117.65,33.49,16.0,2223.0,454.0,628.0,382.0,4.3603,248800.0,<1H OCEAN --117.64,33.49,3.0,2516.0,429.0,781.0,337.0,5.6197,271600.0,<1H OCEAN --117.65,33.48,10.0,3484.0,582.0,1469.0,556.0,5.4188,402200.0,<1H OCEAN --117.65,33.48,6.0,1638.0,188.0,572.0,174.0,13.0502,500001.0,<1H OCEAN --117.63,33.5,12.0,3619.0,536.0,1506.0,492.0,7.2013,353600.0,<1H OCEAN --117.63,33.47,4.0,2320.0,405.0,1408.0,477.0,6.3369,256000.0,NEAR OCEAN --117.65,33.46,19.0,7034.0,1139.0,2824.0,1068.0,6.0873,277300.0,<1H OCEAN --117.64,33.48,12.0,2007.0,397.0,1033.0,373.0,5.6754,275900.0,<1H OCEAN --117.65,33.45,15.0,7468.0,1275.0,3033.0,1217.0,5.49,239300.0,NEAR OCEAN --117.73,33.49,31.0,5112.0,778.0,1530.0,648.0,10.3983,500001.0,<1H OCEAN --117.76,33.48,38.0,3832.0,809.0,1332.0,636.0,5.0044,381200.0,<1H OCEAN --117.74,33.51,29.0,1720.0,269.0,612.0,258.0,7.8239,500001.0,<1H OCEAN --117.73,33.53,3.0,6388.0,920.0,2129.0,819.0,7.8915,420600.0,<1H OCEAN --117.72,33.54,13.0,4866.0,812.0,1909.0,733.0,4.9821,244800.0,<1H OCEAN --117.72,33.53,14.0,1672.0,295.0,704.0,293.0,5.1129,251300.0,<1H OCEAN --117.72,33.51,17.0,3617.0,597.0,1176.0,571.0,5.133,324000.0,<1H OCEAN --117.72,33.49,4.0,3623.0,734.0,1129.0,530.0,5.7281,500001.0,<1H OCEAN --117.73,33.49,17.0,2168.0,290.0,654.0,279.0,9.8321,500001.0,<1H OCEAN --117.73,33.51,5.0,4549.0,786.0,1238.0,632.0,6.1785,295900.0,<1H OCEAN --117.69,33.6,19.0,3562.0,439.0,1584.0,470.0,6.4211,288100.0,<1H OCEAN --117.68,33.6,24.0,1956.0,262.0,969.0,256.0,6.8154,265900.0,<1H OCEAN --117.69,33.6,17.0,2150.0,361.0,1194.0,335.0,5.4622,227000.0,<1H OCEAN --117.7,33.6,16.0,2092.0,489.0,877.0,392.0,3.0461,216900.0,<1H OCEAN --117.69,33.6,16.0,2205.0,393.0,1333.0,402.0,3.475,279500.0,<1H OCEAN --117.69,33.6,12.0,3258.0,421.0,1464.0,435.0,6.5413,332000.0,<1H OCEAN --117.69,33.59,13.0,3320.0,426.0,1432.0,431.0,7.9283,348100.0,<1H OCEAN --117.68,33.59,12.0,3473.0,466.0,1569.0,450.0,8.8636,314000.0,<1H OCEAN --117.69,33.58,5.0,6678.0,1011.0,2877.0,982.0,7.5177,330000.0,<1H OCEAN --117.68,33.59,8.0,2327.0,263.0,899.0,236.0,14.9009,500001.0,<1H OCEAN --117.69,33.58,8.0,2887.0,351.0,1176.0,351.0,10.3953,500001.0,<1H OCEAN --117.68,33.47,7.0,4458.0,731.0,1731.0,704.0,6.126,285600.0,<1H OCEAN --117.68,33.48,15.0,1786.0,299.0,727.0,293.0,5.0527,231400.0,<1H OCEAN --117.68,33.49,17.0,2232.0,372.0,1072.0,385.0,4.245,214500.0,<1H OCEAN --117.68,33.49,16.0,3084.0,724.0,2557.0,690.0,2.8357,106300.0,<1H OCEAN --117.67,33.49,15.0,2782.0,579.0,983.0,525.0,2.1935,183300.0,<1H OCEAN --117.67,33.49,10.0,366.0,61.0,128.0,61.0,8.163,250000.0,<1H OCEAN --117.68,33.51,19.0,2930.0,428.0,1481.0,430.0,6.323,480800.0,<1H OCEAN --117.68,33.49,18.0,4173.0,625.0,1649.0,634.0,6.3568,294300.0,<1H OCEAN --117.69,33.48,25.0,3240.0,481.0,1462.0,497.0,6.1815,288500.0,<1H OCEAN --117.69,33.47,13.0,2020.0,378.0,679.0,290.0,5.756,305600.0,<1H OCEAN --117.66,33.51,18.0,2626.0,,1302.0,522.0,4.0167,189600.0,<1H OCEAN --117.66,33.5,16.0,1956.0,346.0,862.0,326.0,4.4732,186300.0,<1H OCEAN --117.67,33.51,17.0,2112.0,480.0,1893.0,433.0,4.0388,120400.0,<1H OCEAN --117.67,33.51,18.0,1645.0,393.0,1490.0,355.0,3.4792,126400.0,<1H OCEAN --117.67,33.51,19.0,1258.0,246.0,545.0,227.0,2.9762,184400.0,<1H OCEAN --117.69,33.47,23.0,3499.0,722.0,1480.0,634.0,3.86,300000.0,<1H OCEAN --117.7,33.47,20.0,1577.0,363.0,764.0,333.0,4.1563,320800.0,<1H OCEAN --117.7,33.47,21.0,2208.0,534.0,1423.0,482.0,3.5915,305600.0,<1H OCEAN --117.69,33.47,19.0,2595.0,621.0,1728.0,571.0,3.668,243800.0,<1H OCEAN --117.7,33.47,21.0,1857.0,399.0,881.0,380.0,3.8403,350000.0,<1H OCEAN --117.72,33.43,5.0,1889.0,359.0,616.0,246.0,3.8992,500001.0,<1H OCEAN --117.68,33.55,5.0,2262.0,427.0,1016.0,402.0,6.065,315500.0,<1H OCEAN --117.68,33.54,5.0,2840.0,403.0,1363.0,403.0,7.618,341400.0,<1H OCEAN --117.68,33.52,5.0,3621.0,632.0,1546.0,567.0,5.753,322800.0,<1H OCEAN --117.69,33.55,9.0,3856.0,571.0,1646.0,576.0,6.8007,318300.0,<1H OCEAN --117.69,33.54,20.0,1767.0,280.0,801.0,284.0,6.5394,272000.0,<1H OCEAN --117.69,33.53,17.0,5041.0,778.0,2396.0,801.0,6.0868,282900.0,<1H OCEAN --117.69,33.52,4.0,2142.0,625.0,1176.0,483.0,3.4455,325000.0,<1H OCEAN --117.7,33.51,2.0,5261.0,763.0,1460.0,599.0,6.8279,279000.0,<1H OCEAN --117.69,33.52,3.0,7374.0,1444.0,3214.0,1279.0,4.538,278200.0,<1H OCEAN --117.7,33.53,5.0,6698.0,1254.0,2834.0,1139.0,5.9088,288500.0,<1H OCEAN --117.71,33.52,17.0,2486.0,417.0,876.0,361.0,6.1007,340900.0,<1H OCEAN --117.71,33.51,11.0,2198.0,252.0,883.0,281.0,13.1477,487000.0,<1H OCEAN --117.71,33.51,12.0,4676.0,698.0,1543.0,598.0,6.379,500001.0,<1H OCEAN --117.68,33.57,2.0,10008.0,1453.0,3550.0,1139.0,10.1122,500001.0,<1H OCEAN --117.69,33.55,4.0,1764.0,220.0,705.0,224.0,8.3275,384200.0,<1H OCEAN --117.69,33.55,3.0,1618.0,266.0,710.0,246.0,6.0743,274300.0,<1H OCEAN --117.7,33.54,4.0,4956.0,693.0,1802.0,625.0,7.9338,354700.0,<1H OCEAN --117.7,33.55,12.0,2459.0,390.0,1054.0,391.0,7.1736,262100.0,<1H OCEAN --117.7,33.56,2.0,2112.0,305.0,703.0,261.0,6.9343,298500.0,<1H OCEAN --117.7,33.56,3.0,2443.0,637.0,1033.0,548.0,4.1379,183300.0,<1H OCEAN --117.7,33.57,4.0,3283.0,911.0,1512.0,782.0,3.3125,138500.0,<1H OCEAN --117.71,33.54,7.0,4907.0,577.0,1883.0,556.0,10.4415,453800.0,<1H OCEAN --117.71,33.54,15.0,2460.0,368.0,962.0,320.0,7.3878,318300.0,<1H OCEAN --117.71,33.58,2.0,2530.0,562.0,1066.0,510.0,4.6336,187500.0,<1H OCEAN --117.7,33.57,9.0,1204.0,355.0,469.0,293.0,3.6196,119900.0,<1H OCEAN --117.71,33.57,4.0,3289.0,753.0,1285.0,651.0,4.045,226000.0,<1H OCEAN --117.71,33.57,6.0,3673.0,881.0,1846.0,768.0,4.877,144300.0,<1H OCEAN --117.68,33.51,4.0,2428.0,401.0,959.0,386.0,6.2661,268500.0,<1H OCEAN --117.69,33.51,4.0,1223.0,275.0,505.0,244.0,4.6607,173000.0,<1H OCEAN --117.7,33.5,4.0,2351.0,445.0,834.0,397.0,5.5677,245400.0,<1H OCEAN --117.71,33.49,5.0,1680.0,254.0,617.0,231.0,8.583,397700.0,<1H OCEAN --117.7,33.5,4.0,7474.0,1037.0,2969.0,1007.0,8.7591,434700.0,<1H OCEAN --117.7,33.48,10.0,3458.0,638.0,1156.0,470.0,6.3579,336700.0,<1H OCEAN --117.7,33.48,6.0,16590.0,2696.0,6223.0,2357.0,6.3088,340300.0,<1H OCEAN --117.71,33.47,14.0,3894.0,672.0,1490.0,629.0,6.5206,368500.0,<1H OCEAN --117.74,33.46,9.0,6564.0,1316.0,1720.0,904.0,4.89,454100.0,<1H OCEAN --117.71,33.47,17.0,2681.0,454.0,830.0,410.0,5.5507,345700.0,<1H OCEAN --117.7,33.68,29.0,5650.0,1084.0,3985.0,1056.0,2.8192,162500.0,<1H OCEAN --117.76,33.71,14.0,4321.0,582.0,2025.0,578.0,8.3634,355100.0,<1H OCEAN --117.75,33.71,15.0,2849.0,537.0,878.0,520.0,3.2841,158300.0,<1H OCEAN --117.76,33.7,12.0,4025.0,574.0,2042.0,588.0,7.9125,344900.0,<1H OCEAN --117.77,33.71,15.0,2102.0,295.0,1060.0,303.0,7.3141,337100.0,<1H OCEAN --117.77,33.7,3.0,3636.0,749.0,1486.0,696.0,5.5464,207500.0,<1H OCEAN --117.77,33.7,4.0,2446.0,622.0,1315.0,560.0,3.7147,137500.0,<1H OCEAN --117.69,33.65,16.0,5805.0,852.0,2356.0,795.0,6.1062,274600.0,<1H OCEAN --117.71,33.65,16.0,3774.0,456.0,1587.0,430.0,8.6088,307400.0,<1H OCEAN --117.7,33.65,16.0,3388.0,492.0,1249.0,463.0,6.1863,355600.0,<1H OCEAN --117.71,33.64,14.0,2945.0,356.0,1293.0,335.0,8.111,308900.0,<1H OCEAN --117.71,33.63,16.0,1565.0,274.0,950.0,280.0,5.8399,220600.0,<1H OCEAN --117.71,33.63,16.0,2497.0,500.0,1357.0,456.0,4.5909,241800.0,<1H OCEAN --117.71,33.63,16.0,1641.0,354.0,945.0,318.0,3.4261,219700.0,<1H OCEAN --117.7,33.63,16.0,4428.0,745.0,1525.0,682.0,5.2325,286800.0,<1H OCEAN --117.72,33.64,16.0,1230.0,242.0,380.0,246.0,2.2969,67500.0,<1H OCEAN --117.7,33.62,19.0,2957.0,492.0,1639.0,495.0,5.0686,225600.0,<1H OCEAN --117.7,33.63,23.0,3038.0,473.0,1501.0,436.0,5.5584,241700.0,<1H OCEAN --117.71,33.62,22.0,2520.0,387.0,1338.0,391.0,5.8898,242800.0,<1H OCEAN --117.76,33.72,11.0,4508.0,618.0,1993.0,573.0,10.4498,386100.0,<1H OCEAN --117.76,33.72,14.0,3011.0,388.0,1359.0,371.0,7.9739,368700.0,<1H OCEAN --117.75,33.72,10.0,2464.0,347.0,1241.0,366.0,8.7603,362500.0,<1H OCEAN --117.76,33.72,15.0,941.0,266.0,366.0,248.0,4.3636,148400.0,<1H OCEAN --117.76,33.71,15.0,1010.0,350.0,470.0,342.0,3.2229,108300.0,<1H OCEAN --117.74,33.73,18.0,328.0,68.0,391.0,60.0,4.1167,87500.0,<1H OCEAN --117.69,33.66,11.0,2630.0,327.0,1256.0,352.0,8.2953,350500.0,<1H OCEAN --117.69,33.66,5.0,4246.0,689.0,1933.0,722.0,6.9501,225700.0,<1H OCEAN --117.67,33.67,5.0,10534.0,2035.0,4656.0,1863.0,5.7797,309200.0,<1H OCEAN --117.67,33.66,4.0,10175.0,2181.0,4762.0,1929.0,4.7341,237400.0,<1H OCEAN --117.68,33.65,6.0,10395.0,1915.0,4783.0,1811.0,5.928,239900.0,<1H OCEAN --117.64,33.68,4.0,5687.0,970.0,2677.0,938.0,6.5069,243400.0,<1H OCEAN --117.7,33.72,6.0,211.0,51.0,125.0,44.0,1.9659,500001.0,<1H OCEAN --117.69,33.65,15.0,5394.0,748.0,2383.0,706.0,7.5619,302000.0,<1H OCEAN --117.7,33.64,15.0,5743.0,773.0,2380.0,773.0,8.1926,326600.0,<1H OCEAN --117.69,33.63,23.0,1444.0,260.0,792.0,253.0,4.9079,273800.0,<1H OCEAN --117.69,33.64,18.0,3783.0,654.0,1843.0,623.0,5.7559,215800.0,<1H OCEAN --117.69,33.64,16.0,2592.0,372.0,1279.0,383.0,6.9741,262000.0,<1H OCEAN --117.82,33.71,9.0,5206.0,992.0,4660.0,978.0,2.885,162500.0,<1H OCEAN --117.82,33.72,24.0,3260.0,458.0,1383.0,442.0,6.5987,272800.0,<1H OCEAN --117.81,33.73,17.0,1063.0,189.0,363.0,183.0,2.1719,261300.0,<1H OCEAN --117.8,33.72,16.0,2617.0,506.0,1317.0,511.0,4.821,201400.0,<1H OCEAN --117.81,33.71,16.0,2666.0,387.0,1227.0,347.0,7.3769,302400.0,<1H OCEAN --117.82,33.72,24.0,3477.0,462.0,1593.0,484.0,6.8634,276500.0,<1H OCEAN --117.77,33.7,15.0,1392.0,267.0,681.0,263.0,5.4248,187200.0,<1H OCEAN --117.77,33.69,14.0,1413.0,372.0,744.0,338.0,3.7988,184100.0,<1H OCEAN --117.77,33.69,15.0,500.0,113.0,261.0,116.0,5.0631,154000.0,<1H OCEAN --117.77,33.69,16.0,1666.0,341.0,479.0,336.0,2.1406,55000.0,<1H OCEAN --117.78,33.69,16.0,4702.0,806.0,2529.0,814.0,5.1299,238900.0,<1H OCEAN --117.78,33.68,19.0,2500.0,331.0,1027.0,327.0,6.115,315600.0,<1H OCEAN --117.78,33.69,16.0,3400.0,501.0,1575.0,488.0,6.0961,295500.0,<1H OCEAN --117.8,33.69,16.0,2745.0,447.0,1429.0,411.0,6.8219,325500.0,<1H OCEAN --117.79,33.69,16.0,1532.0,240.0,679.0,248.0,5.7115,313900.0,<1H OCEAN --117.79,33.68,16.0,1998.0,308.0,818.0,299.0,6.8722,326100.0,<1H OCEAN --117.8,33.68,14.0,2635.0,516.0,1150.0,499.0,4.4391,306700.0,<1H OCEAN --117.8,33.69,14.0,1800.0,362.0,874.0,373.0,4.2083,251000.0,<1H OCEAN --117.8,33.69,15.0,2099.0,322.0,873.0,307.0,7.9887,328000.0,<1H OCEAN --117.8,33.68,5.0,623.0,146.0,396.0,136.0,3.631,225000.0,<1H OCEAN --117.8,33.68,8.0,2032.0,349.0,862.0,340.0,6.9133,274100.0,<1H OCEAN --117.81,33.67,8.0,2098.0,342.0,908.0,329.0,7.7589,342900.0,<1H OCEAN --117.81,33.67,8.0,2440.0,502.0,1113.0,483.0,4.6019,242500.0,<1H OCEAN --117.81,33.67,9.0,1567.0,299.0,675.0,294.0,5.2124,199600.0,<1H OCEAN --117.81,33.67,9.0,2435.0,396.0,1194.0,385.0,7.2025,275000.0,<1H OCEAN --117.81,33.67,9.0,3279.0,530.0,1447.0,510.0,7.4581,296600.0,<1H OCEAN --117.81,33.68,8.0,1964.0,413.0,913.0,406.0,5.1583,192200.0,<1H OCEAN --117.78,33.68,15.0,1834.0,330.0,841.0,309.0,6.0634,234300.0,<1H OCEAN --117.78,33.68,14.0,1750.0,336.0,852.0,300.0,4.6793,236800.0,<1H OCEAN --117.79,33.68,13.0,2636.0,416.0,1137.0,404.0,7.2118,311500.0,<1H OCEAN --117.78,33.68,11.0,1994.0,477.0,849.0,411.0,4.0187,235600.0,<1H OCEAN --117.79,33.68,9.0,1633.0,295.0,928.0,297.0,5.7858,265900.0,<1H OCEAN --117.79,33.68,10.0,2106.0,319.0,1002.0,332.0,8.735,375300.0,<1H OCEAN --117.8,33.67,5.0,2638.0,521.0,1179.0,480.0,5.7759,240000.0,<1H OCEAN --117.8,33.67,5.0,2487.0,388.0,1147.0,397.0,8.284,302500.0,<1H OCEAN --117.8,33.67,4.0,3345.0,552.0,1525.0,539.0,6.7962,329100.0,<1H OCEAN --117.81,33.69,5.0,1256.0,256.0,880.0,288.0,2.4233,450000.0,<1H OCEAN --117.81,33.68,4.0,1545.0,304.0,788.0,296.0,4.5469,500001.0,<1H OCEAN --117.82,33.68,4.0,1346.0,213.0,603.0,219.0,8.7974,360600.0,<1H OCEAN --117.82,33.68,3.0,3068.0,494.0,1357.0,486.0,7.9187,333600.0,<1H OCEAN --117.82,33.67,17.0,2895.0,439.0,1588.0,450.0,6.276,290700.0,<1H OCEAN --117.83,33.68,4.0,3226.0,838.0,1666.0,800.0,4.1652,184500.0,<1H OCEAN --117.82,33.68,3.0,7105.0,1459.0,3068.0,1241.0,6.1395,358000.0,<1H OCEAN --117.77,33.67,12.0,4329.0,1068.0,1913.0,978.0,4.5094,160200.0,<1H OCEAN --117.77,33.72,10.0,2815.0,431.0,1181.0,398.0,6.5743,278700.0,<1H OCEAN --117.77,33.72,9.0,2153.0,316.0,954.0,324.0,7.8139,304700.0,<1H OCEAN --117.77,33.71,13.0,1939.0,247.0,928.0,244.0,8.1111,379800.0,<1H OCEAN --117.77,33.71,5.0,4050.0,584.0,1986.0,598.0,7.5847,375700.0,<1H OCEAN --117.77,33.71,4.0,1646.0,321.0,859.0,300.0,5.5631,227800.0,<1H OCEAN --117.78,33.71,16.0,2207.0,291.0,1081.0,308.0,7.3518,331200.0,<1H OCEAN --117.78,33.71,4.0,974.0,232.0,428.0,203.0,4.6141,195400.0,<1H OCEAN --117.79,33.73,3.0,8240.0,1410.0,3318.0,1270.0,7.2074,291300.0,<1H OCEAN --117.78,33.7,16.0,1663.0,250.0,597.0,204.0,5.409,233900.0,<1H OCEAN --117.79,33.7,16.0,6259.0,1098.0,3785.0,1114.0,6.3298,247100.0,<1H OCEAN --117.79,33.71,16.0,3114.0,463.0,1641.0,469.0,6.2162,283200.0,<1H OCEAN --117.79,33.71,16.0,6339.0,862.0,3132.0,825.0,7.1069,313400.0,<1H OCEAN --117.79,33.7,6.0,1593.0,371.0,832.0,379.0,4.4286,239500.0,<1H OCEAN --117.8,33.7,5.0,1549.0,378.0,735.0,355.0,5.2923,194000.0,<1H OCEAN --117.79,33.7,16.0,1416.0,249.0,636.0,244.0,5.1741,227700.0,<1H OCEAN --117.79,33.69,15.0,1875.0,316.0,890.0,316.0,6.5783,244800.0,<1H OCEAN --117.79,33.69,16.0,3067.0,396.0,1275.0,372.0,8.7385,340000.0,<1H OCEAN --117.8,33.69,13.0,1161.0,289.0,630.0,296.0,3.3438,333300.0,<1H OCEAN --117.8,33.55,38.0,1757.0,464.0,821.0,426.0,4.1304,433300.0,<1H OCEAN --117.79,33.56,36.0,2057.0,329.0,658.0,309.0,7.866,500001.0,<1H OCEAN --117.81,33.56,24.0,6258.0,1003.0,1730.0,752.0,10.9601,500001.0,<1H OCEAN --117.8,33.55,35.0,2067.0,428.0,724.0,377.0,5.8371,500001.0,<1H OCEAN --117.77,33.6,33.0,247.0,80.0,167.0,70.0,3.7059,237500.0,<1H OCEAN --117.8,33.53,41.0,2017.0,489.0,783.0,403.0,4.1591,500001.0,<1H OCEAN --117.78,33.54,29.0,1421.0,462.0,520.0,339.0,2.2969,450000.0,<1H OCEAN --117.79,33.55,39.0,5066.0,1292.0,1915.0,1117.0,3.821,452100.0,<1H OCEAN --117.75,33.54,21.0,8711.0,1544.0,3173.0,1396.0,5.0907,378200.0,<1H OCEAN --117.77,33.51,29.0,3590.0,772.0,1070.0,603.0,4.4464,500001.0,<1H OCEAN --117.77,33.55,28.0,2024.0,297.0,617.0,274.0,6.7861,499100.0,<1H OCEAN --117.73,33.57,5.0,11976.0,2495.0,4327.0,2009.0,4.8488,194400.0,<1H OCEAN --117.86,33.67,16.0,20.0,5.0,15.0,5.0,3.875,450000.0,<1H OCEAN --117.82,33.67,15.0,1010.0,274.0,649.0,261.0,2.5197,350000.0,<1H OCEAN --117.83,33.67,17.0,2634.0,641.0,1454.0,560.0,3.7976,275000.0,<1H OCEAN --117.83,33.66,15.0,2355.0,438.0,747.0,450.0,6.5356,272800.0,<1H OCEAN --117.83,33.66,16.0,1574.0,385.0,515.0,363.0,5.3423,291700.0,<1H OCEAN --117.81,33.67,24.0,3930.0,661.0,1831.0,616.0,6.3767,269000.0,<1H OCEAN --117.8,33.66,16.0,2542.0,498.0,1022.0,494.0,4.0,223400.0,<1H OCEAN --117.81,33.66,16.0,1414.0,191.0,635.0,230.0,10.0757,383900.0,<1H OCEAN --117.81,33.66,20.0,2851.0,490.0,1192.0,463.0,5.8752,274200.0,<1H OCEAN --117.82,33.66,24.0,4227.0,641.0,1605.0,589.0,6.4238,278400.0,<1H OCEAN --117.84,33.64,11.0,6840.0,1689.0,6083.0,1629.0,2.4132,198300.0,<1H OCEAN --117.87,33.61,25.0,2267.0,359.0,866.0,348.0,7.79,500001.0,<1H OCEAN --117.86,33.61,15.0,3191.0,482.0,930.0,447.0,8.6001,500001.0,<1H OCEAN --117.88,33.55,27.0,2278.0,316.0,772.0,304.0,10.1275,500001.0,<1H OCEAN --117.84,33.6,21.0,4281.0,582.0,1443.0,576.0,9.0519,500001.0,<1H OCEAN --117.86,33.62,23.0,3166.0,411.0,1092.0,345.0,7.9367,500001.0,<1H OCEAN --117.86,33.62,17.0,2975.0,371.0,1247.0,398.0,10.1989,500001.0,<1H OCEAN --117.85,33.62,18.0,729.0,105.0,316.0,108.0,10.3893,500001.0,<1H OCEAN --117.85,33.61,14.0,4340.0,741.0,1505.0,670.0,7.5674,500001.0,<1H OCEAN --117.85,33.62,13.0,5192.0,658.0,1865.0,662.0,15.0001,500001.0,<1H OCEAN --117.86,33.63,17.0,3095.0,551.0,1175.0,534.0,5.3099,500001.0,<1H OCEAN --117.77,33.54,28.0,3404.0,497.0,1134.0,466.0,7.2217,500001.0,<1H OCEAN --117.76,33.54,28.0,2250.0,329.0,826.0,323.0,6.9257,466400.0,<1H OCEAN --117.77,33.54,47.0,3090.0,652.0,1105.0,582.0,4.1699,373700.0,<1H OCEAN --117.77,33.53,46.0,1033.0,223.0,462.0,224.0,3.2708,384700.0,<1H OCEAN --117.8,33.52,50.0,1152.0,341.0,519.0,225.0,3.053,500001.0,<1H OCEAN --117.76,33.53,28.0,3085.0,499.0,1176.0,480.0,7.9794,426100.0,<1H OCEAN --117.76,33.53,18.0,3224.0,561.0,1310.0,580.0,8.4614,391900.0,<1H OCEAN --117.76,33.53,24.0,2105.0,346.0,712.0,332.0,10.6349,500001.0,<1H OCEAN --117.77,33.53,32.0,3116.0,661.0,1105.0,543.0,5.1837,445600.0,<1H OCEAN --117.78,33.51,44.0,1833.0,331.0,515.0,268.0,6.6178,500001.0,<1H OCEAN --117.73,33.63,15.0,2874.0,592.0,1382.0,586.0,5.5137,161800.0,<1H OCEAN --117.74,33.62,16.0,4134.0,740.0,2103.0,745.0,5.6877,231400.0,<1H OCEAN --117.75,33.64,9.0,2499.0,492.0,1111.0,542.0,5.5342,182300.0,<1H OCEAN --117.72,33.62,21.0,2322.0,518.0,662.0,457.0,3.1679,110000.0,<1H OCEAN --117.72,33.62,19.0,1144.0,268.0,365.0,279.0,2.8583,105800.0,<1H OCEAN --117.71,33.61,25.0,3004.0,718.0,891.0,626.0,2.395,80300.0,<1H OCEAN --117.72,33.63,15.0,1362.0,255.0,378.0,202.0,1.9,162500.0,<1H OCEAN --117.72,33.62,19.0,5777.0,1261.0,1711.0,1225.0,2.7634,86900.0,<1H OCEAN --117.73,33.61,16.0,590.0,130.0,178.0,121.0,4.8611,186800.0,<1H OCEAN --117.74,33.62,16.0,1889.0,590.0,686.0,537.0,3.4706,241700.0,<1H OCEAN --117.74,33.61,16.0,2753.0,576.0,857.0,546.0,3.7422,229800.0,<1H OCEAN --117.74,33.61,17.0,2116.0,474.0,662.0,443.0,3.5625,180800.0,<1H OCEAN --117.75,33.61,17.0,2499.0,566.0,781.0,522.0,3.1779,186500.0,<1H OCEAN --117.75,33.6,5.0,4944.0,1164.0,1727.0,948.0,4.9,255600.0,<1H OCEAN --117.75,33.61,16.0,2270.0,488.0,709.0,489.0,3.2845,227600.0,<1H OCEAN --117.73,33.61,17.0,2612.0,582.0,832.0,564.0,2.6759,120600.0,<1H OCEAN --117.7,33.61,16.0,2371.0,725.0,1738.0,686.0,3.6484,322600.0,<1H OCEAN --117.7,33.6,26.0,2283.0,506.0,634.0,469.0,2.3774,74300.0,<1H OCEAN --117.71,33.6,8.0,3329.0,753.0,1312.0,629.0,3.5521,229800.0,<1H OCEAN --117.71,33.6,25.0,3011.0,714.0,893.0,654.0,2.3387,74800.0,<1H OCEAN --117.72,33.61,26.0,2033.0,463.0,618.0,450.0,2.5685,80400.0,<1H OCEAN --117.72,33.61,26.0,2653.0,621.0,774.0,584.0,2.49,81100.0,<1H OCEAN --117.71,33.61,26.0,3046.0,726.0,888.0,663.0,2.6848,74100.0,<1H OCEAN --117.71,33.61,26.0,2280.0,550.0,669.0,502.0,2.3438,72300.0,<1H OCEAN --117.71,33.6,25.0,1949.0,459.0,602.0,428.0,2.7601,72500.0,<1H OCEAN --117.7,33.6,26.0,1021.0,230.0,301.0,208.0,2.625,80600.0,<1H OCEAN --117.7,33.6,25.0,1321.0,295.0,396.0,278.0,3.1131,77100.0,<1H OCEAN --117.7,33.59,11.0,8039.0,1717.0,3445.0,1571.0,4.1678,190900.0,<1H OCEAN --117.84,33.66,5.0,665.0,171.0,384.0,171.0,4.5833,230400.0,<1H OCEAN --117.84,33.66,5.0,1688.0,430.0,857.0,402.0,3.7857,231600.0,<1H OCEAN --117.84,33.65,4.0,1649.0,456.0,1030.0,411.0,2.2262,225000.0,<1H OCEAN --117.83,33.66,4.0,1011.0,198.0,511.0,198.0,7.9217,296200.0,<1H OCEAN --117.83,33.65,9.0,638.0,266.0,426.0,234.0,3.7875,187500.0,<1H OCEAN --117.83,33.65,8.0,2149.0,426.0,950.0,399.0,4.1103,250400.0,<1H OCEAN --117.82,33.66,15.0,2460.0,447.0,1049.0,398.0,6.4967,387500.0,<1H OCEAN --117.81,33.63,17.0,4477.0,610.0,1798.0,612.0,8.1093,410400.0,<1H OCEAN --117.82,33.65,18.0,2105.0,302.0,830.0,286.0,6.3822,362500.0,<1H OCEAN --117.8,33.63,8.0,32.0,9.0,26.0,11.0,4.1944,270800.0,<1H OCEAN --117.8,33.64,8.0,4447.0,713.0,1680.0,705.0,8.8693,450400.0,<1H OCEAN --117.8,33.63,15.0,3236.0,451.0,1289.0,416.0,11.1121,493000.0,<1H OCEAN --117.82,33.64,18.0,1974.0,260.0,808.0,278.0,9.8589,500001.0,<1H OCEAN --117.81,33.64,16.0,2404.0,349.0,868.0,329.0,11.0138,442100.0,<1H OCEAN --117.81,33.64,4.0,1741.0,225.0,811.0,233.0,12.3411,500001.0,<1H OCEAN --117.88,33.6,31.0,5488.0,1055.0,1938.0,964.0,8.8742,500001.0,<1H OCEAN --117.87,33.6,20.0,3212.0,572.0,1064.0,526.0,6.6155,500001.0,<1H OCEAN --117.87,33.6,35.0,1598.0,398.0,782.0,411.0,5.1155,500000.0,<1H OCEAN --117.87,33.59,44.0,2499.0,396.0,910.0,374.0,6.6544,500001.0,<1H OCEAN --117.87,33.6,33.0,3120.0,602.0,1155.0,553.0,5.2949,500001.0,<1H OCEAN --117.86,33.6,30.0,1891.0,364.0,635.0,314.0,6.6265,500001.0,<1H OCEAN --117.87,33.6,34.0,3415.0,779.0,1275.0,718.0,4.498,482900.0,<1H OCEAN --117.89,33.6,36.0,1496.0,247.0,441.0,203.0,7.8164,500001.0,<1H OCEAN --117.9,33.61,41.0,1521.0,328.0,527.0,275.0,4.0764,500001.0,<1H OCEAN --117.91,33.61,40.0,2790.0,531.0,952.0,424.0,4.8,500001.0,<1H OCEAN --117.91,33.6,37.0,2088.0,510.0,673.0,390.0,5.1048,500001.0,<1H OCEAN --117.92,33.57,37.0,3355.0,492.0,921.0,366.0,7.2988,500001.0,NEAR OCEAN --117.9,33.6,25.0,2465.0,585.0,906.0,472.0,3.6538,500001.0,<1H OCEAN --117.92,33.61,23.0,1808.0,408.0,539.0,300.0,3.5682,500001.0,<1H OCEAN --117.91,33.61,38.0,1232.0,178.0,410.0,171.0,11.075,500001.0,<1H OCEAN --117.92,33.61,37.0,1244.0,173.0,394.0,154.0,10.3682,500001.0,<1H OCEAN --117.92,33.61,36.0,1025.0,150.0,316.0,126.0,10.3048,500001.0,<1H OCEAN --117.91,33.61,36.0,3082.0,455.0,771.0,365.0,11.216,500001.0,<1H OCEAN --117.88,33.63,21.0,9565.0,2289.0,3162.0,1831.0,4.7024,345400.0,<1H OCEAN --117.89,33.62,24.0,1016.0,238.0,465.0,236.0,3.0625,93800.0,<1H OCEAN --117.88,33.64,16.0,3615.0,570.0,1209.0,559.0,8.5574,392200.0,<1H OCEAN --117.9,33.61,19.0,2897.0,413.0,860.0,367.0,13.1738,500001.0,<1H OCEAN --117.89,33.61,16.0,2413.0,559.0,656.0,423.0,6.3017,350000.0,<1H OCEAN --117.89,33.61,41.0,1790.0,361.0,540.0,284.0,6.0247,500001.0,<1H OCEAN --117.89,33.61,42.0,1301.0,280.0,539.0,249.0,5.0,500001.0,<1H OCEAN --117.89,33.61,44.0,2126.0,423.0,745.0,332.0,5.1923,500001.0,<1H OCEAN --117.89,33.6,40.0,1639.0,352.0,498.0,278.0,5.6336,500001.0,<1H OCEAN --117.89,33.61,45.0,1883.0,419.0,653.0,328.0,4.2222,500001.0,<1H OCEAN --117.9,33.61,44.0,1469.0,312.0,507.0,266.0,3.4937,500001.0,<1H OCEAN --117.87,33.64,26.0,3521.0,455.0,1336.0,451.0,10.2849,500001.0,<1H OCEAN --117.86,33.65,4.0,3618.0,767.0,1326.0,714.0,5.4284,500001.0,<1H OCEAN --117.87,33.63,9.0,6163.0,1004.0,1912.0,903.0,10.8289,500001.0,<1H OCEAN --117.87,33.62,15.0,2209.0,275.0,735.0,274.0,15.0001,500001.0,<1H OCEAN --117.87,33.62,8.0,1266.0,,375.0,183.0,9.802,500001.0,<1H OCEAN --117.88,33.65,24.0,4879.0,756.0,1777.0,754.0,5.9055,477300.0,<1H OCEAN --117.9,33.63,26.0,4486.0,554.0,1598.0,549.0,10.1454,500001.0,<1H OCEAN --117.91,33.63,20.0,3442.0,1526.0,1427.0,977.0,3.1985,106300.0,<1H OCEAN --117.9,33.63,32.0,3556.0,521.0,1381.0,537.0,6.1426,450700.0,<1H OCEAN --117.9,33.63,26.0,1632.0,376.0,598.0,375.0,3.2125,455000.0,<1H OCEAN --117.9,33.63,28.0,2370.0,352.0,832.0,347.0,7.1148,500001.0,<1H OCEAN --117.88,33.66,26.0,6017.0,1244.0,2673.0,1135.0,3.5426,295400.0,<1H OCEAN --117.89,33.66,33.0,3595.0,785.0,1621.0,732.0,4.1372,265200.0,<1H OCEAN --117.9,33.66,13.0,1642.0,423.0,841.0,368.0,3.6042,226000.0,<1H OCEAN --117.9,33.65,24.0,4496.0,877.0,1928.0,855.0,4.6808,245500.0,<1H OCEAN --117.89,33.66,32.0,2736.0,550.0,1279.0,534.0,5.5422,253100.0,<1H OCEAN --117.9,33.65,27.0,3310.0,598.0,1402.0,563.0,6.632,441100.0,<1H OCEAN --117.9,33.64,28.0,2466.0,507.0,1081.0,465.0,3.9375,339800.0,<1H OCEAN --117.9,33.65,28.0,2043.0,430.0,1108.0,452.0,5.2549,261800.0,<1H OCEAN --117.9,33.65,30.0,2196.0,486.0,1131.0,460.0,4.4135,272300.0,<1H OCEAN --117.91,33.65,24.0,885.0,321.0,590.0,254.0,2.625,217900.0,<1H OCEAN --117.9,33.65,30.0,1634.0,373.0,771.0,364.0,3.4125,284100.0,<1H OCEAN --117.91,33.65,17.0,1328.0,377.0,762.0,344.0,2.2222,276800.0,<1H OCEAN --117.91,33.64,37.0,1998.0,472.0,1030.0,436.0,3.9306,268400.0,<1H OCEAN --117.9,33.64,36.0,2017.0,357.0,850.0,348.0,5.0532,310900.0,<1H OCEAN --117.91,33.64,29.0,1652.0,310.0,832.0,326.0,4.8098,325400.0,<1H OCEAN --117.91,33.64,40.0,1958.0,333.0,876.0,364.0,3.6406,326100.0,<1H OCEAN --117.91,33.63,32.0,1901.0,400.0,946.0,418.0,2.7264,311100.0,<1H OCEAN --117.92,33.63,34.0,2479.0,491.0,1131.0,490.0,4.9643,317900.0,<1H OCEAN --117.91,33.63,30.0,2071.0,412.0,1081.0,412.0,4.9125,335700.0,<1H OCEAN --117.92,33.64,25.0,2224.0,580.0,985.0,516.0,3.1305,268800.0,<1H OCEAN --117.91,33.64,38.0,2222.0,542.0,1067.0,512.0,2.8553,307600.0,<1H OCEAN --117.92,33.63,24.0,1562.0,441.0,696.0,347.0,3.5161,236400.0,<1H OCEAN --117.91,33.63,32.0,1122.0,233.0,557.0,223.0,3.5388,407000.0,<1H OCEAN --117.92,33.62,37.0,2038.0,379.0,837.0,381.0,5.2416,471300.0,<1H OCEAN --117.92,33.63,39.0,1469.0,226.0,553.0,225.0,7.8496,490800.0,<1H OCEAN --117.92,33.62,35.0,1821.0,335.0,727.0,316.0,6.5842,458500.0,<1H OCEAN --117.91,33.61,27.0,1797.0,343.0,435.0,203.0,5.9196,500001.0,<1H OCEAN --117.91,33.62,32.0,1997.0,427.0,944.0,426.0,4.4063,500001.0,<1H OCEAN --117.91,33.62,35.0,2426.0,359.0,937.0,387.0,9.2175,500001.0,<1H OCEAN --117.92,33.61,18.0,1538.0,425.0,425.0,288.0,5.3369,312500.0,<1H OCEAN --117.93,33.62,33.0,1890.0,416.0,859.0,329.0,4.5658,500001.0,<1H OCEAN --117.93,33.62,34.0,2125.0,498.0,1052.0,468.0,5.6315,484600.0,<1H OCEAN --117.94,33.62,28.0,1765.0,390.0,832.0,349.0,6.5928,439100.0,<1H OCEAN --117.95,33.63,29.0,1496.0,282.0,463.0,215.0,6.0516,500001.0,<1H OCEAN --117.96,33.6,34.0,959.0,230.0,384.0,197.0,5.2333,471400.0,NEAR OCEAN --117.93,33.61,27.0,1806.0,465.0,791.0,358.0,3.8125,366700.0,<1H OCEAN --117.93,33.62,37.0,2204.0,428.0,807.0,410.0,7.0516,500001.0,<1H OCEAN --117.94,33.62,25.0,1188.0,264.0,569.0,249.0,3.6607,500001.0,<1H OCEAN --117.94,33.65,20.0,5476.0,1073.0,2327.0,963.0,5.6637,222100.0,<1H OCEAN --117.93,33.65,35.0,2133.0,413.0,1473.0,402.0,4.4211,215200.0,<1H OCEAN --117.93,33.64,31.0,1291.0,356.0,1252.0,373.0,2.7143,185400.0,<1H OCEAN --117.94,33.64,18.0,1867.0,426.0,871.0,399.0,2.6221,272000.0,<1H OCEAN --117.93,33.64,24.0,1395.0,396.0,1478.0,404.0,2.5301,192900.0,<1H OCEAN --117.92,33.64,24.0,2539.0,695.0,1623.0,611.0,3.0708,188700.0,<1H OCEAN --117.94,33.64,24.0,1097.0,307.0,470.0,333.0,1.6389,225000.0,<1H OCEAN --117.93,33.64,15.0,1707.0,514.0,1335.0,434.0,2.7543,177800.0,<1H OCEAN --117.95,33.63,27.0,2489.0,481.0,1082.0,443.0,5.8777,358800.0,<1H OCEAN --117.95,33.63,27.0,891.0,183.0,513.0,171.0,6.0,381500.0,<1H OCEAN --117.93,33.63,10.0,2766.0,732.0,1332.0,646.0,4.6161,226300.0,<1H OCEAN --117.95,33.63,17.0,6745.0,1547.0,2688.0,1535.0,3.9917,271600.0,<1H OCEAN --117.91,33.65,19.0,1589.0,421.0,1118.0,394.0,4.1029,213400.0,<1H OCEAN --117.92,33.64,5.0,949.0,287.0,497.0,244.0,2.75,225000.0,<1H OCEAN --117.92,33.65,15.0,1309.0,477.0,1330.0,424.0,3.4417,182500.0,<1H OCEAN --117.93,33.65,29.0,1253.0,375.0,1198.0,362.0,3.5179,225000.0,<1H OCEAN --117.91,33.65,24.0,1494.0,494.0,814.0,459.0,2.1074,181300.0,<1H OCEAN --117.92,33.65,28.0,1087.0,423.0,807.0,425.0,0.9702,225400.0,<1H OCEAN --117.92,33.65,25.0,1679.0,470.0,1314.0,473.0,4.1026,211500.0,<1H OCEAN --117.92,33.65,20.0,1391.0,393.0,856.0,360.0,3.184,220000.0,<1H OCEAN --117.93,33.65,27.0,1283.0,406.0,1063.0,376.0,2.75,275000.0,<1H OCEAN --117.92,33.68,28.0,3397.0,597.0,1397.0,560.0,4.8125,244600.0,<1H OCEAN --117.93,33.67,27.0,3512.0,472.0,1391.0,481.0,8.1001,336500.0,<1H OCEAN --117.94,33.67,26.0,2552.0,314.0,925.0,323.0,8.1839,367000.0,<1H OCEAN --117.94,33.66,16.0,2095.0,450.0,963.0,411.0,5.5,224100.0,<1H OCEAN --117.94,33.65,15.0,2016.0,443.0,1015.0,419.0,5.2732,209700.0,<1H OCEAN --117.93,33.65,34.0,2141.0,425.0,1559.0,429.0,4.2036,220100.0,<1H OCEAN --117.93,33.69,19.0,2602.0,439.0,1156.0,424.0,5.01,263800.0,<1H OCEAN --117.93,33.69,26.0,2822.0,473.0,1258.0,469.0,6.4441,261000.0,<1H OCEAN --117.92,33.68,25.0,2017.0,454.0,1024.0,428.0,4.4732,245600.0,<1H OCEAN --117.93,33.68,33.0,2664.0,432.0,1197.0,429.0,5.069,264200.0,<1H OCEAN --117.94,33.68,26.0,4183.0,539.0,1504.0,520.0,7.4056,374200.0,<1H OCEAN --117.92,33.67,14.0,6224.0,1679.0,3148.0,1589.0,4.2071,430900.0,<1H OCEAN --117.93,33.66,18.0,2043.0,250.0,702.0,246.0,9.6062,414700.0,<1H OCEAN --117.93,33.65,26.0,5831.0,1546.0,4738.0,1477.0,3.1483,213000.0,<1H OCEAN --117.91,33.69,30.0,2704.0,426.0,1289.0,423.0,5.2815,229500.0,<1H OCEAN --117.91,33.67,16.0,7961.0,2276.0,5014.0,2116.0,3.512,218400.0,<1H OCEAN --117.9,33.68,25.0,7060.0,1159.0,3903.0,1139.0,4.8359,249200.0,<1H OCEAN --117.9,33.67,26.0,2507.0,393.0,1333.0,392.0,6.1601,266100.0,<1H OCEAN --117.89,33.68,26.0,2905.0,504.0,1452.0,491.0,5.0853,260300.0,<1H OCEAN --117.9,33.67,25.0,639.0,98.0,311.0,93.0,6.6833,275900.0,<1H OCEAN --117.91,33.67,32.0,3058.0,562.0,1475.0,569.0,4.4625,253500.0,<1H OCEAN --117.91,33.66,26.0,5761.0,1326.0,2681.0,1116.0,4.0341,243300.0,<1H OCEAN --117.91,33.65,14.0,2598.0,759.0,1584.0,703.0,4.0417,180900.0,<1H OCEAN --117.91,33.66,21.0,1708.0,505.0,1099.0,434.0,3.225,193800.0,<1H OCEAN --117.9,33.66,22.0,3568.0,938.0,1952.0,938.0,3.1667,161000.0,<1H OCEAN --117.9,33.66,4.0,456.0,91.0,623.0,84.0,6.6369,192600.0,<1H OCEAN --117.9,33.69,13.0,9947.0,1675.0,4071.0,1582.0,5.422,316600.0,<1H OCEAN --117.87,33.69,4.0,2337.0,768.0,983.0,655.0,3.7174,275000.0,<1H OCEAN --117.89,33.68,8.0,5278.0,1575.0,2389.0,1371.0,3.3409,181300.0,<1H OCEAN --117.88,33.69,20.0,5330.0,976.0,2734.0,1000.0,5.2138,233100.0,<1H OCEAN --117.86,33.71,21.0,1795.0,406.0,2246.0,400.0,3.152,152800.0,<1H OCEAN --117.86,33.71,36.0,191.0,42.0,208.0,37.0,3.375,157500.0,<1H OCEAN --117.87,33.71,16.0,3397.0,686.0,1924.0,621.0,4.9148,155500.0,<1H OCEAN --117.87,33.71,13.0,1087.0,340.0,817.0,342.0,3.5326,262500.0,<1H OCEAN --117.87,33.7,17.0,3216.0,607.0,1916.0,618.0,4.9153,266400.0,<1H OCEAN --117.87,33.7,21.0,3648.0,654.0,2266.0,628.0,5.0956,246000.0,<1H OCEAN --117.88,33.71,27.0,1596.0,297.0,1703.0,289.0,4.1,184900.0,<1H OCEAN --117.88,33.71,30.0,1739.0,359.0,1914.0,369.0,3.5551,185200.0,<1H OCEAN --117.88,33.71,20.0,1738.0,509.0,1403.0,411.0,3.1742,245000.0,<1H OCEAN --117.88,33.7,18.0,2135.0,373.0,1464.0,405.0,5.4836,225800.0,<1H OCEAN --117.88,33.7,17.0,5122.0,1544.0,2966.0,1339.0,3.4835,116700.0,<1H OCEAN --117.88,33.7,24.0,534.0,88.0,249.0,74.0,5.3254,240500.0,<1H OCEAN --117.88,33.7,16.0,1505.0,358.0,835.0,339.0,3.8029,205400.0,<1H OCEAN --117.9,33.72,36.0,443.0,117.0,577.0,115.0,3.6875,137500.0,<1H OCEAN --117.91,33.72,32.0,2436.0,504.0,2839.0,516.0,4.5607,182100.0,<1H OCEAN --117.9,33.72,33.0,2613.0,562.0,3150.0,543.0,4.3899,180700.0,<1H OCEAN --117.9,33.73,31.0,1171.0,306.0,1690.0,301.0,3.2639,155200.0,<1H OCEAN --117.89,33.72,25.0,4343.0,847.0,3872.0,850.0,4.65,197800.0,<1H OCEAN --117.89,33.72,23.0,2305.0,538.0,2493.0,502.0,3.6618,183500.0,<1H OCEAN --117.88,33.73,32.0,1947.0,355.0,1786.0,332.0,4.5726,177500.0,<1H OCEAN --117.88,33.72,38.0,1421.0,300.0,1236.0,263.0,3.9844,165300.0,<1H OCEAN --117.88,33.72,36.0,1910.0,352.0,1593.0,329.0,3.89,170000.0,<1H OCEAN --117.9,33.71,16.0,4208.0,630.0,2592.0,662.0,6.1966,260500.0,<1H OCEAN --117.89,33.71,23.0,1422.0,260.0,1092.0,263.0,4.7422,202400.0,<1H OCEAN --117.89,33.71,24.0,4365.0,804.0,2663.0,753.0,4.5814,233300.0,<1H OCEAN --117.9,33.71,16.0,1917.0,317.0,1324.0,351.0,6.2488,252000.0,<1H OCEAN --117.89,33.71,16.0,1591.0,225.0,926.0,239.0,6.2452,266300.0,<1H OCEAN --117.9,33.71,15.0,539.0,71.0,287.0,66.0,6.3427,305200.0,<1H OCEAN --117.92,33.7,15.0,3201.0,,1510.0,622.0,4.2708,161700.0,<1H OCEAN --117.91,33.71,16.0,3113.0,783.0,1719.0,715.0,3.6505,145700.0,<1H OCEAN --117.89,33.7,13.0,1857.0,572.0,838.0,525.0,3.2386,129200.0,<1H OCEAN --117.9,33.7,12.0,4695.0,1110.0,2153.0,989.0,4.6483,190800.0,<1H OCEAN --117.9,33.7,15.0,2289.0,686.0,982.0,634.0,4.5757,162500.0,<1H OCEAN --117.86,33.73,31.0,1115.0,268.0,1369.0,259.0,3.5694,150500.0,<1H OCEAN --117.86,33.72,31.0,1194.0,297.0,1602.0,306.0,2.3333,157700.0,<1H OCEAN --117.87,33.72,39.0,3167.0,669.0,2789.0,619.0,3.5902,165900.0,<1H OCEAN --117.87,33.72,37.0,2216.0,497.0,2445.0,506.0,3.8421,174000.0,<1H OCEAN --117.86,33.72,37.0,1429.0,428.0,2089.0,399.0,3.413,150600.0,<1H OCEAN --117.86,33.72,32.0,1461.0,340.0,1909.0,346.0,3.5511,159100.0,<1H OCEAN --117.85,33.73,28.0,1499.0,574.0,3328.0,595.0,2.4539,115000.0,<1H OCEAN --117.84,33.73,20.0,2572.0,732.0,1534.0,669.0,2.4211,175000.0,<1H OCEAN --117.84,33.74,22.0,6072.0,1802.0,4715.0,1666.0,3.1353,121400.0,<1H OCEAN --117.84,33.74,24.0,1752.0,407.0,910.0,427.0,3.3611,134600.0,<1H OCEAN --117.84,33.74,25.0,1818.0,577.0,1426.0,532.0,3.2104,112500.0,<1H OCEAN --117.83,33.74,23.0,1818.0,522.0,958.0,485.0,2.6771,131500.0,<1H OCEAN --117.86,33.75,5.0,187.0,49.0,207.0,51.0,1.8,154200.0,<1H OCEAN --117.86,33.75,31.0,1761.0,515.0,1810.0,468.0,1.9309,173400.0,<1H OCEAN --117.86,33.75,6.0,1565.0,599.0,3157.0,629.0,2.9271,123200.0,<1H OCEAN --117.86,33.76,15.0,851.0,297.0,1326.0,254.0,2.8289,117500.0,<1H OCEAN --117.85,33.74,19.0,1248.0,357.0,1214.0,328.0,2.7059,159800.0,<1H OCEAN --117.85,33.75,27.0,2311.0,632.0,2936.0,609.0,2.5651,171400.0,<1H OCEAN --117.86,33.74,9.0,525.0,171.0,1257.0,165.0,3.375,165300.0,<1H OCEAN --117.86,33.74,32.0,691.0,151.0,926.0,148.0,4.125,175900.0,<1H OCEAN --117.85,33.74,26.0,2589.0,1003.0,5756.0,983.0,2.1992,170800.0,<1H OCEAN --117.86,33.73,23.0,407.0,108.0,647.0,96.0,3.775,177400.0,<1H OCEAN --117.86,33.73,30.0,2651.0,572.0,3249.0,552.0,3.7202,182100.0,<1H OCEAN --117.86,33.73,26.0,1702.0,456.0,2776.0,463.0,2.6385,180200.0,<1H OCEAN --117.87,33.74,31.0,2338.0,652.0,3289.0,631.0,2.6734,158500.0,<1H OCEAN --117.87,33.73,45.0,2264.0,,1970.0,499.0,3.4193,177000.0,<1H OCEAN --117.87,33.74,52.0,2411.0,526.0,2165.0,521.0,3.415,172500.0,<1H OCEAN --117.86,33.74,38.0,2415.0,642.0,3242.0,599.0,3.425,165600.0,<1H OCEAN --117.86,33.73,38.0,2284.0,511.0,2451.0,504.0,3.3125,159100.0,<1H OCEAN --117.86,33.74,34.0,2254.0,630.0,2984.0,625.0,2.5,162500.0,<1H OCEAN --117.89,33.73,33.0,1308.0,375.0,2175.0,347.0,3.0824,177400.0,<1H OCEAN --117.9,33.73,32.0,2930.0,833.0,5116.0,854.0,3.7147,164100.0,<1H OCEAN --117.9,33.73,30.0,746.0,172.0,1048.0,163.0,4.1,166400.0,<1H OCEAN --117.88,33.73,33.0,2291.0,594.0,3232.0,589.0,3.2037,163500.0,<1H OCEAN --117.88,33.73,36.0,2471.0,498.0,2594.0,475.0,3.75,170500.0,<1H OCEAN --117.89,33.75,31.0,1205.0,280.0,1476.0,301.0,4.0231,139200.0,<1H OCEAN --117.89,33.74,32.0,1562.0,365.0,2145.0,347.0,2.9167,158400.0,<1H OCEAN --117.89,33.74,34.0,1759.0,353.0,2083.0,330.0,3.2292,160600.0,<1H OCEAN --117.9,33.75,28.0,1346.0,291.0,1575.0,278.0,3.425,159500.0,<1H OCEAN --117.9,33.74,19.0,1566.0,379.0,1032.0,330.0,2.2105,180400.0,<1H OCEAN --117.9,33.74,18.0,1884.0,442.0,1915.0,442.0,2.3783,166700.0,<1H OCEAN --117.91,33.74,25.0,4273.0,965.0,2946.0,922.0,2.9926,183200.0,<1H OCEAN --117.91,33.73,26.0,2413.0,512.0,2867.0,509.0,4.7639,179900.0,<1H OCEAN --117.9,33.73,26.0,1324.0,314.0,1804.0,311.0,3.9659,178500.0,<1H OCEAN --117.9,33.74,24.0,2932.0,955.0,5516.0,911.0,2.7535,111000.0,<1H OCEAN --117.9,33.74,25.0,808.0,163.0,1066.0,189.0,4.7679,173100.0,<1H OCEAN --117.9,33.74,24.0,1435.0,494.0,3171.0,504.0,3.0833,151700.0,<1H OCEAN --117.89,33.74,32.0,660.0,145.0,959.0,113.0,3.75,159000.0,<1H OCEAN --117.89,33.74,33.0,619.0,139.0,1217.0,146.0,4.6875,154400.0,<1H OCEAN --117.89,33.73,32.0,728.0,134.0,837.0,135.0,4.0769,163900.0,<1H OCEAN --117.88,33.75,10.0,1823.0,590.0,2176.0,548.0,1.5026,151800.0,<1H OCEAN --117.88,33.74,29.0,720.0,174.0,1045.0,181.0,3.1964,151900.0,<1H OCEAN --117.88,33.74,16.0,1444.0,446.0,2329.0,441.0,3.1691,159400.0,<1H OCEAN --117.88,33.74,31.0,1120.0,296.0,1718.0,268.0,2.8077,140300.0,<1H OCEAN --117.87,33.74,16.0,1243.0,365.0,1925.0,376.0,2.7632,158900.0,<1H OCEAN --117.88,33.74,19.0,2261.0,642.0,3545.0,635.0,2.5224,148500.0,<1H OCEAN --117.88,33.74,25.0,1799.0,557.0,3416.0,538.0,3.0083,163500.0,<1H OCEAN --117.87,33.76,6.0,2992.0,1194.0,3800.0,1130.0,2.246,183300.0,<1H OCEAN --117.87,33.75,14.0,5526.0,1916.0,6799.0,1796.0,2.6561,144400.0,<1H OCEAN --117.87,33.75,18.0,697.0,255.0,812.0,221.0,2.6635,162500.0,<1H OCEAN --117.86,33.75,39.0,275.0,87.0,554.0,103.0,3.5972,158000.0,<1H OCEAN --117.86,33.75,13.0,1632.0,598.0,3356.0,659.0,1.5054,137500.0,<1H OCEAN --117.87,33.75,12.0,2782.0,1077.0,1968.0,795.0,0.971,102500.0,<1H OCEAN --117.87,33.75,26.0,411.0,114.0,448.0,95.0,1.7019,350000.0,<1H OCEAN --117.88,33.76,37.0,2988.0,677.0,2354.0,666.0,3.4345,235500.0,<1H OCEAN --117.88,33.76,17.0,1768.0,474.0,1079.0,436.0,1.7823,205300.0,<1H OCEAN --117.88,33.75,50.0,1344.0,228.0,747.0,234.0,4.5125,195400.0,<1H OCEAN --117.88,33.75,34.0,3004.0,673.0,5477.0,640.0,2.8342,187200.0,<1H OCEAN --117.9,33.76,26.0,2678.0,702.0,3262.0,685.0,3.6953,176800.0,<1H OCEAN --117.9,33.75,32.0,1893.0,431.0,2245.0,426.0,3.7143,163000.0,<1H OCEAN --117.89,33.76,36.0,2656.0,572.0,2370.0,571.0,3.8056,177200.0,<1H OCEAN --117.89,33.75,34.0,2753.0,654.0,3117.0,631.0,3.1713,170100.0,<1H OCEAN --117.88,33.78,26.0,1813.0,421.0,1235.0,343.0,3.5972,187500.0,<1H OCEAN --117.88,33.77,31.0,2549.0,355.0,1044.0,362.0,6.9737,288800.0,<1H OCEAN --117.88,33.78,26.0,3141.0,670.0,1572.0,724.0,3.3472,237400.0,<1H OCEAN --117.89,33.77,32.0,2342.0,570.0,1445.0,453.0,4.1951,195000.0,<1H OCEAN --117.89,33.77,35.0,1799.0,343.0,1239.0,368.0,3.9219,189600.0,<1H OCEAN --117.89,33.76,34.0,1050.0,210.0,723.0,201.0,4.8,192700.0,<1H OCEAN --117.87,33.77,52.0,2512.0,356.0,978.0,365.0,8.0784,320300.0,<1H OCEAN --117.87,33.76,37.0,4943.0,851.0,2164.0,788.0,4.1071,311300.0,<1H OCEAN --117.86,33.77,39.0,4159.0,655.0,1669.0,651.0,4.6111,240300.0,<1H OCEAN --117.86,33.76,34.0,3153.0,561.0,1679.0,532.0,4.7083,205300.0,<1H OCEAN --117.84,33.76,14.0,1458.0,423.0,615.0,365.0,4.2798,218800.0,<1H OCEAN --117.85,33.76,26.0,2312.0,525.0,1273.0,437.0,2.8828,204700.0,<1H OCEAN --117.84,33.76,16.0,238.0,51.0,93.0,50.0,5.375,215700.0,<1H OCEAN --117.84,33.76,22.0,378.0,78.0,196.0,81.0,3.6806,219400.0,<1H OCEAN --117.84,33.75,16.0,4367.0,1161.0,2164.0,1005.0,4.0214,139500.0,<1H OCEAN --117.85,33.76,33.0,1866.0,327.0,1053.0,371.0,4.5461,213800.0,<1H OCEAN --117.84,33.77,14.0,4412.0,952.0,1656.0,874.0,4.3292,206500.0,<1H OCEAN --117.85,33.77,23.0,5928.0,1204.0,3570.0,1150.0,4.0398,233100.0,<1H OCEAN --117.84,33.77,26.0,3350.0,581.0,1314.0,550.0,3.5195,249100.0,<1H OCEAN --117.84,33.76,26.0,2110.0,409.0,1146.0,407.0,4.3698,229600.0,<1H OCEAN --117.83,33.75,22.0,6433.0,1174.0,2703.0,1125.0,4.9957,296400.0,<1H OCEAN --117.82,33.75,30.0,2910.0,535.0,1270.0,489.0,4.6161,236500.0,<1H OCEAN --117.82,33.75,24.0,893.0,209.0,342.0,197.0,2.8261,146500.0,<1H OCEAN --117.82,33.74,25.0,2720.0,680.0,1559.0,631.0,3.0958,137800.0,<1H OCEAN --117.83,33.75,34.0,2660.0,601.0,1475.0,567.0,3.4152,210200.0,<1H OCEAN --117.81,33.75,23.0,3498.0,636.0,1574.0,642.0,5.021,252200.0,<1H OCEAN --117.8,33.74,30.0,3569.0,551.0,1540.0,537.0,5.2998,247200.0,<1H OCEAN --117.81,33.73,19.0,5471.0,1345.0,2828.0,1247.0,3.5719,252800.0,<1H OCEAN --117.81,33.74,24.0,2696.0,649.0,1908.0,626.0,3.3047,216900.0,<1H OCEAN --117.81,33.73,19.0,4022.0,975.0,2334.0,954.0,3.0305,140600.0,<1H OCEAN --117.81,33.73,23.0,3056.0,556.0,1508.0,555.0,4.7273,234200.0,<1H OCEAN --117.82,33.73,23.0,2542.0,772.0,1720.0,675.0,3.8703,137000.0,<1H OCEAN --117.82,33.73,24.0,845.0,190.0,482.0,190.0,4.7039,225000.0,<1H OCEAN --117.82,33.73,27.0,1270.0,258.0,809.0,264.0,5.0162,223000.0,<1H OCEAN --117.83,33.74,23.0,6114.0,1623.0,4088.0,1521.0,3.0382,183600.0,<1H OCEAN --117.83,33.73,20.0,5768.0,1597.0,4853.0,1465.0,3.5387,160400.0,<1H OCEAN --117.8,33.76,27.0,2655.0,345.0,1017.0,335.0,6.9014,366800.0,<1H OCEAN --117.79,33.76,25.0,2037.0,252.0,796.0,249.0,11.0546,487200.0,<1H OCEAN --117.79,33.75,26.0,2893.0,345.0,983.0,326.0,13.466,500001.0,<1H OCEAN --117.79,33.75,26.0,2955.0,377.0,1074.0,373.0,9.3845,500001.0,<1H OCEAN --117.8,33.75,29.0,3058.0,488.0,1197.0,474.0,5.3903,286600.0,<1H OCEAN --117.8,33.74,33.0,2890.0,453.0,1300.0,452.0,6.5616,290200.0,<1H OCEAN --117.81,33.75,25.0,2365.0,471.0,1197.0,458.0,3.7031,227800.0,<1H OCEAN --117.79,33.77,23.0,3596.0,451.0,1292.0,458.0,8.5403,451300.0,<1H OCEAN --117.79,33.77,21.0,4349.0,553.0,1680.0,519.0,6.9014,439000.0,<1H OCEAN --117.78,33.76,25.0,2260.0,261.0,719.0,254.0,11.4537,500001.0,<1H OCEAN --117.78,33.78,6.0,9792.0,1283.0,3744.0,1179.0,10.1714,481500.0,<1H OCEAN --117.76,33.79,4.0,8974.0,1268.0,3754.0,1241.0,8.2653,374000.0,<1H OCEAN --117.77,33.76,19.0,3532.0,402.0,1200.0,426.0,11.0124,500001.0,<1H OCEAN --117.82,33.77,32.0,2308.0,301.0,967.0,320.0,7.0565,324600.0,<1H OCEAN --117.83,33.77,22.0,2956.0,642.0,1342.0,558.0,4.1151,203200.0,<1H OCEAN --117.83,33.77,26.0,4931.0,853.0,2249.0,818.0,4.275,285400.0,<1H OCEAN --117.82,33.76,27.0,3230.0,449.0,1193.0,448.0,6.5308,287800.0,<1H OCEAN --117.82,33.77,27.0,2578.0,314.0,976.0,340.0,7.1882,359200.0,<1H OCEAN --117.82,33.76,33.0,2774.0,428.0,1229.0,407.0,6.2944,265600.0,<1H OCEAN --117.81,33.76,32.0,2053.0,339.0,835.0,323.0,5.5654,281800.0,<1H OCEAN --117.8,33.77,29.0,5436.0,707.0,2046.0,685.0,8.7496,349500.0,<1H OCEAN --117.81,33.77,31.0,4624.0,624.0,1852.0,635.0,7.2392,334600.0,<1H OCEAN --117.81,33.83,8.0,7326.0,884.0,2569.0,798.0,10.157,477100.0,<1H OCEAN --117.83,33.83,13.0,3759.0,489.0,1496.0,499.0,8.3818,377600.0,<1H OCEAN --117.83,33.83,23.0,2775.0,547.0,1226.0,510.0,3.6707,231400.0,<1H OCEAN --117.82,33.8,15.0,3207.0,647.0,1414.0,595.0,4.0484,165600.0,<1H OCEAN --117.83,33.79,29.0,1454.0,236.0,724.0,262.0,4.8542,218100.0,<1H OCEAN --117.82,33.79,26.0,2641.0,633.0,3657.0,617.0,4.1339,222300.0,<1H OCEAN --117.83,33.8,30.0,4713.0,758.0,2271.0,730.0,5.8622,221000.0,<1H OCEAN --117.83,33.8,31.0,2016.0,409.0,1095.0,405.0,3.8681,196000.0,<1H OCEAN --117.84,33.79,37.0,2733.0,460.0,1378.0,476.0,5.3041,235700.0,<1H OCEAN --117.83,33.79,25.0,2070.0,513.0,1078.0,460.0,2.9312,220100.0,<1H OCEAN --117.84,33.79,34.0,2590.0,603.0,1658.0,608.0,2.378,199600.0,<1H OCEAN --117.84,33.78,26.0,2577.0,434.0,1086.0,432.0,4.6125,229200.0,<1H OCEAN --117.84,33.78,24.0,3817.0,787.0,1656.0,713.0,4.25,248000.0,<1H OCEAN --117.81,33.79,23.0,3114.0,610.0,2045.0,577.0,3.75,211900.0,<1H OCEAN --117.82,33.78,25.0,4977.0,645.0,2061.0,646.0,6.58,318500.0,<1H OCEAN --117.81,33.78,27.0,3589.0,507.0,1484.0,495.0,5.7934,270500.0,<1H OCEAN --117.82,33.78,28.0,4485.0,667.0,2048.0,685.0,5.4562,274700.0,<1H OCEAN --117.81,33.82,20.0,2819.0,319.0,1019.0,319.0,12.2092,500001.0,<1H OCEAN --117.8,33.83,17.0,2971.0,350.0,1180.0,346.0,11.1228,500001.0,<1H OCEAN --117.82,33.82,22.0,3173.0,372.0,1181.0,355.0,8.3637,500001.0,<1H OCEAN --117.81,33.81,19.0,3154.0,390.0,1404.0,384.0,8.9257,431800.0,<1H OCEAN --117.81,33.82,22.0,2898.0,335.0,1057.0,324.0,10.8111,500001.0,<1H OCEAN --117.82,33.81,19.0,2556.0,304.0,822.0,260.0,9.9055,456900.0,<1H OCEAN --117.83,33.82,26.0,3259.0,456.0,1354.0,459.0,5.7817,267600.0,<1H OCEAN --117.83,33.82,23.0,1100.0,285.0,940.0,267.0,3.6953,150000.0,<1H OCEAN --117.83,33.81,24.0,3550.0,895.0,2828.0,834.0,2.8403,225600.0,<1H OCEAN --117.82,33.81,25.0,2662.0,402.0,1247.0,401.0,5.4395,244000.0,<1H OCEAN --117.83,33.81,28.0,1972.0,315.0,970.0,326.0,5.4298,234200.0,<1H OCEAN --117.82,33.81,30.0,2260.0,345.0,1182.0,341.0,6.0705,236700.0,<1H OCEAN --117.85,33.79,46.0,1846.0,383.0,867.0,336.0,3.4234,200000.0,<1H OCEAN --117.85,33.79,52.0,2102.0,403.0,898.0,365.0,3.6827,236800.0,<1H OCEAN --117.86,33.79,31.0,3523.0,922.0,2660.0,949.0,3.1792,146400.0,<1H OCEAN --117.85,33.79,52.0,1963.0,430.0,1197.0,415.0,3.8929,211000.0,<1H OCEAN --117.85,33.78,23.0,3187.0,870.0,1977.0,852.0,3.3939,212100.0,<1H OCEAN --117.86,33.78,25.0,2635.0,660.0,1710.0,634.0,3.125,215000.0,<1H OCEAN --117.85,33.77,16.0,2186.0,511.0,908.0,466.0,4.575,225000.0,<1H OCEAN --117.85,33.79,40.0,1251.0,336.0,729.0,343.0,2.4688,236400.0,<1H OCEAN --117.86,33.79,34.0,1883.0,408.0,1227.0,424.0,3.8929,187500.0,<1H OCEAN --117.86,33.78,21.0,2713.0,731.0,1952.0,722.0,2.6959,178800.0,<1H OCEAN --117.87,33.78,21.0,2487.0,573.0,1515.0,494.0,4.3039,168500.0,<1H OCEAN --117.87,33.78,19.0,2813.0,567.0,1334.0,596.0,4.7208,173500.0,<1H OCEAN --117.87,33.78,30.0,2022.0,522.0,1196.0,463.0,3.7454,186000.0,<1H OCEAN --117.86,33.8,35.0,1683.0,347.0,1242.0,335.0,3.5172,190400.0,<1H OCEAN --117.86,33.79,42.0,1024.0,191.0,483.0,187.0,4.105,194500.0,<1H OCEAN --117.87,33.79,25.0,2546.0,545.0,1543.0,521.0,4.192,219900.0,<1H OCEAN --117.88,33.79,32.0,1484.0,295.0,928.0,295.0,5.1418,190300.0,<1H OCEAN --117.89,33.78,16.0,6352.0,1747.0,5085.0,1649.0,2.8835,193800.0,<1H OCEAN --117.9,33.78,25.0,10336.0,2596.0,7111.0,2419.0,3.3627,197900.0,<1H OCEAN --117.85,33.84,26.0,2095.0,280.0,793.0,261.0,6.6719,271700.0,<1H OCEAN --117.86,33.84,19.0,1725.0,392.0,920.0,400.0,3.0087,159400.0,<1H OCEAN --117.85,33.84,17.0,2830.0,502.0,1370.0,459.0,5.1785,247300.0,<1H OCEAN --117.85,33.83,26.0,1904.0,292.0,945.0,303.0,5.6784,232400.0,<1H OCEAN --117.86,33.83,23.0,2377.0,403.0,1101.0,408.0,5.3439,227100.0,<1H OCEAN --117.84,33.84,23.0,4388.0,864.0,2526.0,846.0,4.5217,219400.0,<1H OCEAN --117.86,33.8,34.0,1793.0,480.0,1722.0,441.0,2.8235,153100.0,<1H OCEAN --117.85,33.81,26.0,4186.0,767.0,2447.0,777.0,4.9917,248100.0,<1H OCEAN --117.85,33.81,32.0,1766.0,322.0,876.0,330.0,4.0417,234500.0,<1H OCEAN --117.85,33.8,34.0,1593.0,283.0,872.0,255.0,3.825,216700.0,<1H OCEAN --117.85,33.8,40.0,1461.0,286.0,1322.0,264.0,4.3269,194100.0,<1H OCEAN --117.84,33.81,26.0,5574.0,1025.0,2607.0,988.0,4.0324,244900.0,<1H OCEAN --117.84,33.8,35.0,1490.0,251.0,629.0,257.0,4.3661,222100.0,<1H OCEAN --117.84,33.8,34.0,2004.0,331.0,843.0,328.0,3.59,230600.0,<1H OCEAN --117.86,33.82,9.0,1682.0,291.0,1015.0,271.0,6.6603,230900.0,<1H OCEAN --117.84,33.82,24.0,10281.0,1689.0,4926.0,1629.0,4.7946,251200.0,<1H OCEAN --117.84,33.84,23.0,6157.0,1129.0,2817.0,1073.0,5.0629,232600.0,<1H OCEAN --117.89,33.84,35.0,3315.0,744.0,2425.0,687.0,3.5521,182800.0,<1H OCEAN --117.89,33.83,35.0,2984.0,446.0,1435.0,455.0,5.6276,200800.0,<1H OCEAN --117.9,33.83,33.0,3065.0,611.0,2204.0,606.0,3.8456,211800.0,<1H OCEAN --117.89,33.82,21.0,1591.0,298.0,904.0,297.0,4.8906,179100.0,<1H OCEAN --117.89,33.8,38.0,51.0,12.0,41.0,10.0,6.0224,187500.0,<1H OCEAN --117.89,33.82,24.0,1268.0,210.0,700.0,224.0,5.0605,216200.0,<1H OCEAN --117.89,33.82,18.0,3197.0,809.0,1894.0,726.0,3.6761,140500.0,<1H OCEAN --117.87,33.81,15.0,3082.0,536.0,1268.0,531.0,3.7604,280100.0,<1H OCEAN --117.87,33.84,10.0,3381.0,729.0,1584.0,636.0,5.3812,235400.0,<1H OCEAN --117.88,33.84,26.0,1499.0,290.0,755.0,277.0,3.5893,238500.0,<1H OCEAN --117.88,33.84,31.0,3301.0,712.0,1532.0,682.0,3.7303,223800.0,<1H OCEAN --117.87,33.83,27.0,2287.0,,1140.0,351.0,5.6163,231000.0,<1H OCEAN --117.88,33.83,22.0,3522.0,543.0,1706.0,524.0,6.4685,241200.0,<1H OCEAN --117.88,33.83,25.0,1785.0,248.0,750.0,251.0,6.8407,266700.0,<1H OCEAN --117.88,33.82,17.0,2247.0,705.0,1382.0,618.0,3.8631,225000.0,<1H OCEAN --117.88,33.82,26.0,1783.0,298.0,1048.0,306.0,6.0488,232000.0,<1H OCEAN --117.87,33.82,26.0,2435.0,346.0,1088.0,350.0,5.9397,249400.0,<1H OCEAN --117.88,33.85,26.0,3924.0,781.0,2332.0,725.0,3.7772,223900.0,<1H OCEAN --117.88,33.85,34.0,1127.0,185.0,588.0,181.0,4.375,224700.0,<1H OCEAN --117.88,33.84,34.0,1410.0,214.0,837.0,240.0,6.1168,213900.0,<1H OCEAN --117.88,33.84,33.0,1526.0,237.0,906.0,245.0,5.1782,225000.0,<1H OCEAN --117.9,33.85,31.0,3413.0,764.0,2326.0,728.0,4.325,187100.0,<1H OCEAN --117.9,33.85,35.0,1756.0,328.0,1026.0,332.0,3.6,193500.0,<1H OCEAN --117.89,33.85,18.0,2036.0,414.0,1292.0,380.0,3.875,273000.0,<1H OCEAN --117.9,33.85,32.0,1605.0,314.0,986.0,306.0,3.3375,186200.0,<1H OCEAN --117.89,33.85,13.0,1583.0,474.0,1672.0,432.0,3.2303,201300.0,<1H OCEAN --117.9,33.84,31.0,2043.0,468.0,1524.0,454.0,3.5329,187400.0,<1H OCEAN --117.89,33.84,33.0,1587.0,374.0,1159.0,331.0,2.8021,195100.0,<1H OCEAN --117.88,33.85,25.0,1234.0,351.0,507.0,285.0,2.3173,225000.0,<1H OCEAN --117.88,33.84,25.0,1781.0,349.0,918.0,378.0,3.9286,262700.0,<1H OCEAN --117.87,33.84,23.0,1678.0,369.0,912.0,347.0,4.5,237300.0,<1H OCEAN --117.87,33.84,25.0,1928.0,414.0,961.0,385.0,4.0724,231400.0,<1H OCEAN --117.87,33.84,16.0,1545.0,354.0,730.0,350.0,4.5112,139000.0,<1H OCEAN --117.87,33.84,17.0,2395.0,410.0,1224.0,399.0,5.1182,249200.0,<1H OCEAN --117.85,33.85,17.0,4678.0,1065.0,2427.0,1020.0,4.2276,254100.0,<1H OCEAN --117.86,33.85,17.0,1131.0,236.0,622.0,244.0,4.9306,158500.0,<1H OCEAN --117.92,33.85,38.0,2082.0,532.0,1592.0,510.0,2.3704,166100.0,<1H OCEAN --117.92,33.84,45.0,2019.0,394.0,1549.0,377.0,4.6111,223000.0,<1H OCEAN --117.92,33.85,44.0,1231.0,258.0,682.0,244.0,3.2344,170100.0,<1H OCEAN --117.91,33.85,35.0,932.0,258.0,1147.0,267.0,2.7014,156700.0,<1H OCEAN --117.91,33.84,35.0,1244.0,324.0,1603.0,322.0,2.9583,175400.0,<1H OCEAN --117.91,33.85,22.0,1178.0,289.0,865.0,294.0,3.025,180000.0,<1H OCEAN --117.91,33.84,29.0,1570.0,482.0,1849.0,430.0,2.6563,162500.0,<1H OCEAN --117.93,33.85,27.0,1962.0,544.0,1492.0,481.0,1.9621,118100.0,<1H OCEAN --117.94,33.85,26.0,1888.0,429.0,1550.0,458.0,3.3393,168600.0,<1H OCEAN --117.93,33.85,33.0,2489.0,546.0,1857.0,444.0,2.9474,178400.0,<1H OCEAN --117.93,33.85,31.0,2149.0,465.0,966.0,302.0,3.875,183900.0,<1H OCEAN --117.93,33.85,25.0,1026.0,288.0,1646.0,283.0,4.2019,163900.0,<1H OCEAN --117.93,33.85,36.0,2147.0,416.0,1011.0,392.0,3.2188,196900.0,<1H OCEAN --117.94,33.85,37.0,588.0,121.0,436.0,104.0,4.275,186200.0,<1H OCEAN --117.93,33.84,23.0,2870.0,653.0,1680.0,598.0,3.2301,189900.0,<1H OCEAN --117.95,33.85,13.0,6963.0,1426.0,3892.0,1375.0,4.1325,203500.0,<1H OCEAN --117.96,33.85,35.0,1175.0,191.0,568.0,186.0,4.125,189200.0,<1H OCEAN --117.97,33.85,30.0,2513.0,476.0,1611.0,472.0,4.0061,182900.0,<1H OCEAN --117.96,33.85,36.0,1951.0,365.0,1254.0,358.0,4.8438,185700.0,<1H OCEAN --117.95,33.84,32.0,1378.0,492.0,1202.0,448.0,3.4028,183700.0,<1H OCEAN --117.95,33.84,19.0,1749.0,406.0,969.0,391.0,3.75,173400.0,<1H OCEAN --117.95,33.84,34.0,1229.0,215.0,1035.0,218.0,3.5455,180000.0,<1H OCEAN --117.94,33.84,25.0,4016.0,831.0,2166.0,774.0,3.1884,135400.0,<1H OCEAN --117.94,33.84,28.0,604.0,207.0,615.0,212.0,3.6214,182100.0,<1H OCEAN --117.98,33.85,23.0,2089.0,377.0,1085.0,362.0,4.765,181500.0,<1H OCEAN --117.98,33.84,33.0,2291.0,439.0,1187.0,405.0,3.9539,191100.0,<1H OCEAN --117.98,33.84,35.0,984.0,179.0,661.0,199.0,5.0747,189600.0,<1H OCEAN --117.97,33.85,45.0,818.0,147.0,546.0,152.0,5.1057,170700.0,<1H OCEAN --117.96,33.84,31.0,2265.0,537.0,1617.0,507.0,3.4583,186300.0,<1H OCEAN --117.97,33.84,34.0,874.0,153.0,549.0,153.0,4.8667,186800.0,<1H OCEAN --117.97,33.84,35.0,793.0,128.0,589.0,137.0,5.25,190200.0,<1H OCEAN --117.97,33.84,25.0,2471.0,518.0,1539.0,500.0,4.2679,191700.0,<1H OCEAN --117.97,33.84,18.0,1063.0,209.0,462.0,223.0,2.8348,219000.0,<1H OCEAN --117.99,33.84,31.0,2982.0,547.0,1895.0,570.0,4.9115,255500.0,<1H OCEAN --117.97,33.83,16.0,2035.0,564.0,1118.0,503.0,3.2546,187500.0,<1H OCEAN --117.98,33.84,31.0,1252.0,225.0,714.0,226.0,4.6042,220700.0,<1H OCEAN --117.98,33.83,17.0,3506.0,992.0,2104.0,893.0,3.3006,185800.0,<1H OCEAN --118.0,33.82,21.0,2253.0,580.0,1536.0,500.0,3.2326,204700.0,<1H OCEAN --118.01,33.82,31.0,1960.0,380.0,1356.0,356.0,4.0625,225900.0,<1H OCEAN --118.01,33.83,24.0,4639.0,1374.0,3093.0,1257.0,2.5577,202300.0,<1H OCEAN --118.01,33.83,23.0,1086.0,268.0,825.0,250.0,2.4609,219600.0,<1H OCEAN --118.0,33.83,26.0,1718.0,385.0,1022.0,368.0,3.9333,196100.0,<1H OCEAN --118.0,33.83,24.0,2578.0,580.0,1217.0,529.0,2.2401,212500.0,<1H OCEAN --118.0,33.82,18.0,2947.0,559.0,1820.0,551.0,4.5294,224800.0,<1H OCEAN --117.99,33.83,25.0,3434.0,835.0,1749.0,657.0,3.2539,199000.0,<1H OCEAN --117.99,33.82,19.0,1991.0,528.0,1202.0,460.0,3.1538,252100.0,<1H OCEAN --117.99,33.83,35.0,1484.0,252.0,916.0,248.0,5.2657,191400.0,<1H OCEAN --117.99,33.82,33.0,2342.0,475.0,1367.0,509.0,4.1167,215500.0,<1H OCEAN --117.98,33.83,17.0,3419.0,932.0,2460.0,766.0,3.2823,228500.0,<1H OCEAN --117.98,33.82,34.0,1038.0,175.0,578.0,174.0,4.9219,200000.0,<1H OCEAN --117.98,33.82,34.0,1290.0,220.0,867.0,241.0,5.5486,218100.0,<1H OCEAN --117.98,33.83,32.0,1133.0,166.0,523.0,187.0,6.213,230800.0,<1H OCEAN --117.97,33.83,22.0,3310.0,688.0,1807.0,674.0,4.0185,200900.0,<1H OCEAN --117.97,33.82,26.0,2335.0,504.0,1121.0,502.0,2.9891,205200.0,<1H OCEAN --117.97,33.82,26.0,4013.0,985.0,2442.0,922.0,3.7655,197700.0,<1H OCEAN --117.96,33.83,30.0,2838.0,649.0,1758.0,593.0,3.3831,197400.0,<1H OCEAN --117.96,33.83,18.0,2067.0,770.0,870.0,541.0,3.1315,137500.0,<1H OCEAN --117.96,33.83,29.0,1194.0,176.0,474.0,170.0,6.1001,298900.0,<1H OCEAN --117.95,33.84,18.0,3418.0,815.0,1961.0,773.0,3.65,171400.0,<1H OCEAN --117.94,33.83,20.0,812.0,192.0,494.0,172.0,3.25,350000.0,<1H OCEAN --117.95,33.83,31.0,2421.0,389.0,1348.0,413.0,4.9394,217800.0,<1H OCEAN --117.94,33.82,34.0,1347.0,212.0,676.0,201.0,3.8828,215400.0,<1H OCEAN --117.94,33.82,27.0,1366.0,326.0,878.0,325.0,3.4,196900.0,<1H OCEAN --117.95,33.82,29.0,2929.0,640.0,1618.0,584.0,3.6875,213200.0,<1H OCEAN --117.95,33.83,35.0,1107.0,207.0,641.0,210.0,5.0599,216700.0,<1H OCEAN --117.96,33.83,34.0,982.0,148.0,498.0,156.0,6.3214,220800.0,<1H OCEAN --117.95,33.83,36.0,1380.0,237.0,690.0,234.0,3.8214,210900.0,<1H OCEAN --117.93,33.83,32.0,1792.0,411.0,1131.0,381.0,2.4942,186300.0,<1H OCEAN --117.92,33.82,36.0,2360.0,405.0,1479.0,386.0,4.3583,187200.0,<1H OCEAN --117.94,33.82,29.0,1422.0,409.0,1057.0,390.0,2.3347,208100.0,<1H OCEAN --117.94,33.82,24.0,4735.0,955.0,2600.0,868.0,5.0764,228600.0,<1H OCEAN --117.93,33.82,28.0,2444.0,555.0,1848.0,567.0,3.0179,198800.0,<1H OCEAN --117.92,33.84,38.0,1316.0,263.0,671.0,278.0,3.2969,220000.0,<1H OCEAN --117.92,33.83,6.0,3136.0,990.0,1894.0,859.0,2.5564,171300.0,<1H OCEAN --117.93,33.83,30.0,1561.0,381.0,1104.0,391.0,3.375,201900.0,<1H OCEAN --117.93,33.84,34.0,2160.0,298.0,852.0,305.0,6.0531,287100.0,<1H OCEAN --117.93,33.84,26.0,2811.0,612.0,1374.0,566.0,3.475,282500.0,<1H OCEAN --117.91,33.84,26.0,1156.0,393.0,1880.0,400.0,2.2716,350000.0,<1H OCEAN --117.9,33.83,23.0,2459.0,689.0,2720.0,598.0,2.8072,164700.0,<1H OCEAN --117.91,33.83,9.0,1160.0,368.0,735.0,325.0,1.119,175000.0,<1H OCEAN --117.92,33.83,17.0,382.0,86.0,272.0,81.0,1.425,212500.0,<1H OCEAN --117.91,33.84,16.0,919.0,253.0,912.0,249.0,1.5903,165400.0,<1H OCEAN --117.91,33.84,25.0,1021.0,252.0,975.0,258.0,3.125,168100.0,<1H OCEAN --117.91,33.83,47.0,504.0,113.0,375.0,109.0,3.6607,160600.0,<1H OCEAN --117.91,33.83,37.0,1039.0,260.0,719.0,243.0,3.0288,161400.0,<1H OCEAN --117.92,33.83,36.0,1072.0,193.0,639.0,196.0,5.0275,179300.0,<1H OCEAN --117.92,33.83,52.0,1514.0,301.0,855.0,293.0,3.6042,166400.0,<1H OCEAN --117.91,33.83,32.0,1855.0,527.0,2568.0,504.0,2.5509,170800.0,<1H OCEAN --117.9,33.82,32.0,1187.0,302.0,1003.0,275.0,2.4931,166900.0,<1H OCEAN --117.92,33.82,10.0,1548.0,506.0,1535.0,424.0,4.5057,152400.0,<1H OCEAN --117.91,33.82,32.0,2696.0,640.0,2330.0,626.0,2.9479,184600.0,<1H OCEAN --117.91,33.82,29.0,1444.0,326.0,1038.0,271.0,2.3843,182900.0,<1H OCEAN --117.91,33.81,18.0,1181.0,353.0,781.0,340.0,2.5625,153100.0,<1H OCEAN --117.91,33.82,32.0,1408.0,307.0,1331.0,284.0,3.7014,179600.0,<1H OCEAN --117.93,33.81,18.0,3291.0,587.0,1640.0,563.0,4.8981,166300.0,<1H OCEAN --117.92,33.81,34.0,988.0,173.0,759.0,184.0,5.6047,205100.0,<1H OCEAN --117.93,33.8,34.0,3903.0,717.0,2054.0,716.0,4.2731,218000.0,<1H OCEAN --117.92,33.8,17.0,1317.0,256.0,679.0,272.0,4.6696,159500.0,<1H OCEAN --117.9,33.8,21.0,1342.0,326.0,748.0,335.0,2.9231,45000.0,<1H OCEAN --117.9,33.8,22.0,2964.0,829.0,2639.0,771.0,2.4833,157500.0,<1H OCEAN --117.9,33.8,23.0,1368.0,397.0,1940.0,358.0,3.0789,350000.0,<1H OCEAN --117.9,33.8,27.0,2176.0,442.0,1440.0,418.0,4.375,212500.0,<1H OCEAN --117.94,33.81,33.0,1891.0,334.0,932.0,343.0,4.2759,238000.0,<1H OCEAN --117.94,33.81,25.0,1731.0,482.0,1127.0,455.0,3.256,214300.0,<1H OCEAN --117.94,33.81,34.0,1290.0,203.0,664.0,204.0,5.8461,227400.0,<1H OCEAN --117.94,33.81,26.0,1589.0,259.0,735.0,315.0,4.5714,243200.0,<1H OCEAN --117.94,33.8,28.0,2914.0,489.0,1500.0,499.0,4.9429,254800.0,<1H OCEAN --117.94,33.81,24.0,4602.0,1131.0,3003.0,1014.0,3.6771,172200.0,<1H OCEAN --117.93,33.8,29.0,1672.0,267.0,891.0,281.0,4.8611,231900.0,<1H OCEAN --117.95,33.82,35.0,1068.0,190.0,514.0,174.0,4.0735,208700.0,<1H OCEAN --117.95,33.82,35.0,1117.0,181.0,496.0,168.0,4.3269,224700.0,<1H OCEAN --117.96,33.82,32.0,2856.0,622.0,1499.0,601.0,3.63,183400.0,<1H OCEAN --117.96,33.82,32.0,2726.0,556.0,1513.0,531.0,3.7917,197400.0,<1H OCEAN --117.96,33.8,30.0,729.0,131.0,488.0,139.0,4.7667,195200.0,<1H OCEAN --117.96,33.81,35.0,1153.0,192.0,884.0,208.0,5.2384,177400.0,<1H OCEAN --117.96,33.81,34.0,1416.0,277.0,980.0,284.0,4.7772,182500.0,<1H OCEAN --117.96,33.81,35.0,1996.0,326.0,1409.0,330.0,4.7738,180000.0,<1H OCEAN --117.96,33.82,29.0,2176.0,468.0,1632.0,428.0,3.707,180400.0,<1H OCEAN --117.96,33.82,19.0,1199.0,251.0,730.0,276.0,3.6422,209400.0,<1H OCEAN --117.95,33.81,33.0,1724.0,291.0,943.0,285.0,5.118,195200.0,<1H OCEAN --117.96,33.81,34.0,1941.0,356.0,1021.0,339.0,4.4663,183900.0,<1H OCEAN --117.95,33.81,24.0,2749.0,498.0,1367.0,460.0,4.025,240700.0,<1H OCEAN --118.0,33.81,33.0,2970.0,547.0,1869.0,539.0,4.3636,201800.0,<1H OCEAN --118.0,33.81,22.0,2642.0,640.0,1702.0,588.0,3.5268,174700.0,<1H OCEAN --118.01,33.81,25.0,1831.0,345.0,809.0,339.0,4.5179,177100.0,<1H OCEAN --118.0,33.82,24.0,3002.0,644.0,1495.0,634.0,3.1087,202800.0,<1H OCEAN --118.0,33.81,13.0,2782.0,605.0,1749.0,628.0,4.1276,153800.0,<1H OCEAN --118.0,33.81,17.0,2142.0,436.0,946.0,412.0,3.7059,146300.0,<1H OCEAN --117.99,33.8,18.0,383.0,94.0,487.0,98.0,3.975,162500.0,<1H OCEAN --118.0,33.81,17.0,1530.0,404.0,883.0,344.0,2.8835,196500.0,<1H OCEAN --117.99,33.82,21.0,2281.0,557.0,1510.0,460.0,2.8625,189600.0,<1H OCEAN --117.99,33.81,23.0,3284.0,795.0,3257.0,758.0,2.4526,182900.0,<1H OCEAN --117.99,33.81,42.0,161.0,40.0,157.0,50.0,2.2,153100.0,<1H OCEAN --117.99,33.81,46.0,38.0,8.0,66.0,14.0,4.1667,162500.0,<1H OCEAN --117.98,33.81,28.0,3528.0,816.0,2304.0,764.0,2.582,181800.0,<1H OCEAN --117.98,33.81,18.0,3751.0,878.0,2281.0,815.0,3.7201,183100.0,<1H OCEAN --117.98,33.81,35.0,897.0,156.0,479.0,161.0,5.152,215600.0,<1H OCEAN --117.97,33.81,26.0,4022.0,1081.0,2457.0,1001.0,2.8042,206300.0,<1H OCEAN --117.97,33.81,30.0,2406.0,462.0,1753.0,456.0,4.485,180600.0,<1H OCEAN --117.99,33.8,25.0,3179.0,639.0,2526.0,623.0,3.3281,180800.0,<1H OCEAN --117.99,33.79,33.0,2064.0,324.0,1384.0,315.0,4.5263,169000.0,<1H OCEAN --117.99,33.79,29.0,2470.0,560.0,1589.0,513.0,3.1801,190500.0,<1H OCEAN --117.99,33.79,35.0,2301.0,467.0,2272.0,454.0,3.9566,167800.0,<1H OCEAN --117.98,33.8,35.0,2114.0,341.0,1077.0,343.0,5.4876,227500.0,<1H OCEAN --117.98,33.79,35.0,2356.0,478.0,1659.0,480.0,4.1115,179700.0,<1H OCEAN --117.98,33.8,32.0,2161.0,432.0,1503.0,402.0,4.3036,191400.0,<1H OCEAN --117.97,33.8,35.0,2985.0,474.0,1614.0,453.0,5.4631,225600.0,<1H OCEAN --117.97,33.79,33.0,3268.0,641.0,1704.0,591.0,3.6849,211400.0,<1H OCEAN --118.0,33.79,18.0,3679.0,694.0,1820.0,652.0,3.6531,143500.0,<1H OCEAN --117.99,33.78,15.0,4273.0,993.0,2300.0,946.0,3.5313,213000.0,<1H OCEAN --117.99,33.79,21.0,2695.0,707.0,1888.0,683.0,3.2857,213300.0,<1H OCEAN --117.98,33.78,31.0,2825.0,546.0,1908.0,563.0,3.9798,187500.0,<1H OCEAN --117.97,33.79,34.0,2456.0,410.0,1289.0,442.0,4.1818,224200.0,<1H OCEAN --117.99,33.78,19.0,7399.0,1698.0,3554.0,1593.0,3.1049,173900.0,<1H OCEAN --117.97,33.78,35.0,3148.0,597.0,2110.0,587.0,3.9479,203800.0,<1H OCEAN --117.98,33.78,22.0,4255.0,971.0,2901.0,920.0,3.2636,180200.0,<1H OCEAN --117.96,33.8,33.0,1984.0,420.0,1119.0,387.0,3.4821,231300.0,<1H OCEAN --117.96,33.79,36.0,2398.0,403.0,1261.0,402.0,5.2816,221800.0,<1H OCEAN --117.96,33.8,35.0,1493.0,267.0,811.0,272.0,5.244,218000.0,<1H OCEAN --117.96,33.8,33.0,2362.0,394.0,1185.0,387.0,4.425,188400.0,<1H OCEAN --117.95,33.79,34.0,2584.0,408.0,1233.0,405.0,5.6935,218300.0,<1H OCEAN --117.95,33.78,26.0,4115.0,883.0,2184.0,825.0,3.9536,191000.0,<1H OCEAN --117.96,33.79,29.0,1813.0,501.0,1170.0,482.0,2.0677,214500.0,<1H OCEAN --117.96,33.78,35.0,1330.0,201.0,658.0,217.0,6.37,229200.0,<1H OCEAN --117.94,33.8,23.0,2757.0,734.0,1811.0,707.0,2.8,214300.0,<1H OCEAN --117.95,33.79,34.0,2912.0,520.0,1625.0,501.0,4.4667,190600.0,<1H OCEAN --117.95,33.8,34.0,1654.0,285.0,905.0,292.0,4.6389,214600.0,<1H OCEAN --117.95,33.8,32.0,1219.0,192.0,634.0,197.0,5.237,215700.0,<1H OCEAN --117.94,33.79,24.0,4179.0,784.0,1902.0,733.0,4.7986,236500.0,<1H OCEAN --117.93,33.78,36.0,2169.0,359.0,1018.0,370.0,4.3906,231300.0,<1H OCEAN --117.94,33.78,34.0,2627.0,468.0,1409.0,450.0,4.7731,199200.0,<1H OCEAN --117.93,33.79,36.0,2363.0,403.0,1240.0,391.0,4.0909,190800.0,<1H OCEAN --117.93,33.79,34.0,3592.0,616.0,2138.0,605.0,5.2129,193400.0,<1H OCEAN --117.92,33.79,35.0,1785.0,288.0,1033.0,297.0,4.5739,190500.0,<1H OCEAN --117.92,33.79,29.0,3692.0,969.0,2683.0,881.0,3.1726,198700.0,<1H OCEAN --117.92,33.79,26.0,2737.0,614.0,1877.0,606.0,2.8622,184300.0,<1H OCEAN --117.91,33.79,22.0,4417.0,1054.0,2759.0,983.0,4.25,170300.0,<1H OCEAN --117.91,33.78,33.0,2729.0,549.0,2223.0,535.0,4.0362,177900.0,<1H OCEAN --117.93,33.78,28.0,4380.0,820.0,2187.0,835.0,3.9018,182300.0,<1H OCEAN --117.92,33.77,28.0,3614.0,960.0,3282.0,889.0,3.522,190300.0,<1H OCEAN --117.91,33.78,26.0,4297.0,1037.0,3596.0,967.0,3.045,184000.0,<1H OCEAN --117.92,33.78,35.0,1654.0,323.0,1065.0,354.0,3.4837,186500.0,<1H OCEAN --117.95,33.78,9.0,3553.0,1035.0,2017.0,986.0,2.9726,133800.0,<1H OCEAN --117.94,33.77,32.0,714.0,142.0,654.0,154.0,4.5052,170800.0,<1H OCEAN --117.94,33.77,33.0,2964.0,747.0,2235.0,718.0,3.2591,175900.0,<1H OCEAN --117.94,33.78,11.0,2880.0,745.0,1806.0,722.0,3.8056,171100.0,<1H OCEAN --117.94,33.78,40.0,299.0,68.0,163.0,70.0,3.0125,166100.0,<1H OCEAN --117.93,33.77,36.0,3157.0,582.0,1842.0,561.0,4.5833,190700.0,<1H OCEAN --117.96,33.78,26.0,2136.0,557.0,1528.0,537.0,2.4931,236100.0,<1H OCEAN --117.95,33.78,32.0,2296.0,560.0,1376.0,532.0,3.7303,188500.0,<1H OCEAN --117.96,33.78,33.0,1520.0,,658.0,242.0,4.875,269300.0,<1H OCEAN --117.95,33.77,38.0,1476.0,308.0,1114.0,309.0,4.1917,181800.0,<1H OCEAN --117.95,33.77,38.0,989.0,246.0,691.0,204.0,3.2632,180900.0,<1H OCEAN --117.96,33.77,32.0,4398.0,905.0,2777.0,884.0,4.1321,222800.0,<1H OCEAN --117.97,33.77,20.0,1988.0,424.0,1277.0,425.0,2.9414,162200.0,<1H OCEAN --117.97,33.77,25.0,1295.0,417.0,856.0,342.0,2.7157,350000.0,<1H OCEAN --117.97,33.77,22.0,2244.0,575.0,1543.0,533.0,2.6618,179600.0,<1H OCEAN --117.99,33.77,15.0,2081.0,531.0,1617.0,561.0,3.4955,160900.0,<1H OCEAN --117.98,33.77,7.0,2252.0,570.0,1576.0,550.0,3.6333,169800.0,<1H OCEAN --117.97,33.76,18.0,1862.0,399.0,1301.0,369.0,3.1771,194000.0,<1H OCEAN --117.98,33.77,22.0,3236.0,673.0,2034.0,662.0,4.0955,174200.0,<1H OCEAN --117.98,33.76,29.0,1518.0,312.0,1086.0,317.0,4.32,196900.0,<1H OCEAN --117.97,33.76,28.0,1386.0,272.0,901.0,294.0,4.7464,187500.0,<1H OCEAN --117.96,33.76,24.0,1328.0,290.0,1012.0,306.0,4.2813,189500.0,<1H OCEAN --117.96,33.76,22.0,2520.0,556.0,2126.0,527.0,3.7734,193900.0,<1H OCEAN --117.96,33.75,14.0,2509.0,611.0,1814.0,547.0,2.7986,176100.0,<1H OCEAN --117.95,33.76,29.0,1829.0,366.0,1703.0,343.0,4.1295,188000.0,<1H OCEAN --117.94,33.76,27.0,2512.0,506.0,1861.0,511.0,4.2386,184200.0,<1H OCEAN --117.94,33.76,33.0,1441.0,337.0,1233.0,331.0,3.7232,176200.0,<1H OCEAN --117.95,33.76,24.0,3956.0,812.0,3196.0,795.0,4.3512,191400.0,<1H OCEAN --117.94,33.75,30.0,5268.0,1093.0,4480.0,1050.0,4.015,186700.0,<1H OCEAN --117.96,33.75,25.0,1323.0,208.0,852.0,229.0,4.6167,237300.0,<1H OCEAN --117.96,33.75,22.0,2300.0,539.0,1625.0,542.0,2.78,196300.0,<1H OCEAN --117.95,33.75,19.0,1983.0,283.0,1098.0,275.0,6.6355,276100.0,<1H OCEAN --117.95,33.75,24.0,2027.0,358.0,1405.0,341.0,5.1416,231400.0,<1H OCEAN --117.97,33.76,27.0,1712.0,325.0,1036.0,345.0,4.0508,183900.0,<1H OCEAN --117.97,33.75,26.0,3361.0,722.0,2709.0,648.0,3.9107,190700.0,<1H OCEAN --117.97,33.75,32.0,1564.0,270.0,973.0,290.0,3.75,190400.0,<1H OCEAN --117.93,33.76,24.0,3202.0,703.0,3308.0,714.0,4.1577,174100.0,<1H OCEAN --117.93,33.75,24.0,1380.0,339.0,1472.0,304.0,4.2219,162800.0,<1H OCEAN --117.93,33.75,15.0,2448.0,602.0,1666.0,575.0,3.5967,141600.0,<1H OCEAN --117.93,33.76,17.0,3341.0,803.0,3381.0,825.0,3.371,161800.0,<1H OCEAN --117.93,33.76,21.0,2884.0,662.0,2613.0,645.0,4.05,177900.0,<1H OCEAN --117.92,33.75,8.0,2325.0,598.0,1511.0,565.0,3.3629,137500.0,<1H OCEAN --117.92,33.75,19.0,1920.0,471.0,1413.0,432.0,4.0313,147500.0,<1H OCEAN --117.89,33.77,29.0,2577.0,445.0,1849.0,470.0,4.4732,194800.0,<1H OCEAN --117.9,33.77,35.0,2002.0,378.0,1726.0,387.0,3.9613,182300.0,<1H OCEAN --117.91,33.77,26.0,5556.0,1398.0,4545.0,1333.0,3.0902,190400.0,<1H OCEAN --117.91,33.76,22.0,7531.0,1569.0,5254.0,1523.0,3.8506,167400.0,<1H OCEAN --117.92,33.76,26.0,784.0,177.0,662.0,169.0,2.8438,174300.0,<1H OCEAN --117.91,33.76,20.0,4413.0,,4818.0,1063.0,2.8594,215100.0,<1H OCEAN --117.92,33.75,23.0,893.0,223.0,1149.0,216.0,2.6442,156300.0,<1H OCEAN --117.92,33.75,32.0,790.0,199.0,1196.0,201.0,3.0625,142800.0,<1H OCEAN --117.91,33.75,8.0,2346.0,679.0,3842.0,674.0,3.0635,160000.0,<1H OCEAN --117.93,33.74,15.0,1206.0,282.0,677.0,270.0,3.9219,142600.0,<1H OCEAN --117.93,33.74,30.0,1654.0,434.0,1843.0,467.0,3.1403,153000.0,<1H OCEAN --117.93,33.74,5.0,639.0,197.0,666.0,197.0,3.3017,87500.0,<1H OCEAN --117.92,33.74,13.0,4620.0,1265.0,3385.0,1109.0,3.1773,186500.0,<1H OCEAN --117.92,33.74,18.0,1639.0,491.0,2513.0,458.0,2.1838,159700.0,<1H OCEAN --117.91,33.74,15.0,715.0,214.0,1394.0,244.0,3.3846,162500.0,<1H OCEAN --117.92,33.74,24.0,5321.0,1063.0,4011.0,1047.0,4.3882,189300.0,<1H OCEAN --117.93,33.73,27.0,3662.0,834.0,3009.0,743.0,3.9816,179500.0,<1H OCEAN --117.94,33.74,24.0,4248.0,840.0,3118.0,798.0,4.2222,207200.0,<1H OCEAN --117.94,33.73,24.0,4197.0,718.0,2468.0,714.0,5.2563,211400.0,<1H OCEAN --117.95,33.74,16.0,2768.0,600.0,1182.0,563.0,3.7162,201200.0,<1H OCEAN --117.95,33.74,25.0,1393.0,243.0,976.0,245.0,5.4485,225200.0,<1H OCEAN --117.95,33.74,21.0,3576.0,554.0,1846.0,538.0,5.9838,271900.0,<1H OCEAN --117.98,33.7,17.0,1989.0,411.0,1401.0,453.0,4.1603,160500.0,<1H OCEAN --117.98,33.71,24.0,2308.0,464.0,1101.0,407.0,4.4766,230000.0,<1H OCEAN --117.99,33.71,19.0,1967.0,487.0,1251.0,404.0,3.6696,218800.0,<1H OCEAN --117.98,33.71,26.0,1905.0,373.0,1098.0,368.0,4.8611,229600.0,<1H OCEAN --117.96,33.68,26.0,1374.0,234.0,731.0,244.0,6.0905,224800.0,<1H OCEAN --117.97,33.68,23.0,1722.0,316.0,865.0,309.0,4.6452,273800.0,<1H OCEAN --117.96,33.68,25.0,2004.0,349.0,1085.0,343.0,4.7656,230700.0,<1H OCEAN --117.96,33.68,18.0,2594.0,539.0,817.0,485.0,2.3674,219200.0,<1H OCEAN --117.96,33.68,24.0,6517.0,1279.0,3441.0,1198.0,4.25,152100.0,<1H OCEAN --117.97,33.68,26.0,3653.0,568.0,1930.0,585.0,5.7301,260900.0,<1H OCEAN --117.95,33.69,26.0,1417.0,264.0,817.0,261.0,4.875,230400.0,<1H OCEAN --117.95,33.68,26.0,2249.0,344.0,1311.0,373.0,5.0287,265000.0,<1H OCEAN --117.95,33.68,27.0,1732.0,303.0,1115.0,308.0,5.5312,239200.0,<1H OCEAN --117.95,33.68,19.0,1028.0,191.0,340.0,159.0,3.6364,252800.0,<1H OCEAN --117.95,33.67,25.0,1611.0,383.0,554.0,327.0,3.0417,137300.0,<1H OCEAN --117.95,33.67,25.0,1799.0,233.0,810.0,265.0,8.289,372400.0,<1H OCEAN --117.95,33.66,26.0,1787.0,227.0,639.0,224.0,6.8226,329800.0,<1H OCEAN --117.95,33.66,22.0,2785.0,441.0,1086.0,392.0,7.3719,337400.0,<1H OCEAN --117.98,33.65,22.0,3335.0,754.0,1500.0,719.0,3.7315,197900.0,<1H OCEAN --117.98,33.65,18.0,1027.0,206.0,436.0,180.0,4.2159,211300.0,<1H OCEAN --117.98,33.65,22.0,3592.0,527.0,1598.0,523.0,6.5501,294900.0,<1H OCEAN --117.98,33.64,20.0,1851.0,495.0,792.0,363.0,3.8187,137500.0,NEAR OCEAN --117.97,33.74,16.0,1735.0,380.0,784.0,360.0,4.2566,139200.0,<1H OCEAN --117.97,33.74,18.0,2814.0,539.0,1439.0,493.0,3.599,262000.0,<1H OCEAN --117.97,33.73,27.0,2097.0,325.0,1217.0,331.0,5.7121,222500.0,<1H OCEAN --117.97,33.73,26.0,1694.0,260.0,885.0,279.0,5.0875,224200.0,<1H OCEAN --117.96,33.74,19.0,1783.0,415.0,1025.0,383.0,4.1484,230000.0,<1H OCEAN --117.96,33.73,22.0,3479.0,455.0,1454.0,488.0,6.6324,347600.0,<1H OCEAN --117.97,33.73,19.0,4154.0,560.0,2130.0,589.0,7.2845,301800.0,<1H OCEAN --117.97,33.72,24.0,2991.0,500.0,1437.0,453.0,5.4286,273400.0,<1H OCEAN --117.95,33.72,21.0,3107.0,483.0,1688.0,503.0,5.9582,288000.0,<1H OCEAN --117.96,33.72,23.0,3929.0,559.0,1858.0,538.0,6.8645,318200.0,<1H OCEAN --117.93,33.73,19.0,4021.0,557.0,1872.0,545.0,6.7919,295600.0,<1H OCEAN --117.93,33.72,17.0,4461.0,585.0,2095.0,580.0,7.6709,319500.0,<1H OCEAN --117.92,33.73,17.0,1692.0,293.0,934.0,280.0,4.4728,205800.0,<1H OCEAN --117.92,33.73,14.0,5147.0,1182.0,3171.0,1126.0,3.9929,225800.0,<1H OCEAN --117.92,33.72,17.0,3318.0,502.0,1520.0,498.0,5.5501,274200.0,<1H OCEAN --117.96,33.71,19.0,4328.0,849.0,2243.0,808.0,5.5702,342600.0,<1H OCEAN --117.95,33.71,16.0,6058.0,1715.0,3285.0,1495.0,3.4133,290900.0,<1H OCEAN --117.96,33.71,19.0,1624.0,221.0,782.0,228.0,4.5962,304500.0,<1H OCEAN --117.95,33.71,20.0,2781.0,407.0,1242.0,408.0,6.1092,306500.0,<1H OCEAN --117.94,33.71,18.0,3695.0,602.0,1779.0,572.0,5.9449,276500.0,<1H OCEAN --117.93,33.71,10.0,2775.0,717.0,1581.0,633.0,4.1366,158800.0,<1H OCEAN --117.94,33.7,18.0,4827.0,718.0,2471.0,716.0,6.1181,284500.0,<1H OCEAN --117.95,33.69,24.0,4269.0,618.0,1954.0,597.0,6.9261,284600.0,<1H OCEAN --117.95,33.7,17.0,5781.0,924.0,2585.0,915.0,5.343,231900.0,<1H OCEAN --117.98,33.69,22.0,3957.0,520.0,1774.0,527.0,7.0907,350200.0,<1H OCEAN --117.97,33.69,21.0,4112.0,580.0,1886.0,581.0,6.799,292000.0,<1H OCEAN --117.98,33.7,16.0,5127.0,631.0,2142.0,596.0,7.8195,390500.0,<1H OCEAN --117.96,33.7,23.0,4417.0,740.0,1865.0,693.0,5.3428,279300.0,<1H OCEAN --117.96,33.7,23.0,2622.0,445.0,1103.0,407.0,4.725,289600.0,<1H OCEAN --117.96,33.69,20.0,3123.0,441.0,1319.0,432.0,6.091,290400.0,<1H OCEAN --117.96,33.69,17.0,2500.0,343.0,1242.0,368.0,7.7313,316700.0,<1H OCEAN --117.98,33.7,24.0,3451.0,504.0,1736.0,493.0,6.3749,278000.0,<1H OCEAN --117.98,33.71,24.0,3430.0,548.0,1601.0,512.0,5.6825,264600.0,<1H OCEAN --117.97,33.71,26.0,2553.0,405.0,1337.0,411.0,5.3737,252900.0,<1H OCEAN --117.97,33.71,25.0,3273.0,478.0,1645.0,497.0,5.8195,286100.0,<1H OCEAN --117.99,33.7,25.0,2017.0,357.0,1063.0,369.0,4.0345,229400.0,<1H OCEAN --117.98,33.7,17.0,1997.0,340.0,952.0,341.0,4.4148,239200.0,<1H OCEAN --117.99,33.69,17.0,3386.0,729.0,1715.0,666.0,3.7479,213000.0,<1H OCEAN --117.98,33.69,16.0,2437.0,438.0,986.0,422.0,5.7117,247200.0,<1H OCEAN --117.97,33.67,25.0,3906.0,660.0,1809.0,622.0,5.6765,265100.0,<1H OCEAN --117.97,33.66,22.0,3914.0,600.0,1871.0,607.0,5.8541,281500.0,<1H OCEAN --117.96,33.67,16.0,5143.0,652.0,2209.0,637.0,7.0173,382100.0,<1H OCEAN --117.96,33.66,19.0,5925.0,744.0,2302.0,729.0,7.5699,333300.0,<1H OCEAN --117.96,33.65,23.0,5379.0,684.0,1826.0,555.0,7.0151,350600.0,<1H OCEAN --117.97,33.65,26.0,2379.0,336.0,988.0,346.0,5.3674,339300.0,<1H OCEAN --117.97,33.63,25.0,2482.0,360.0,960.0,352.0,6.1572,344000.0,NEAR OCEAN --117.96,33.65,24.0,4462.0,689.0,1943.0,712.0,5.7395,289800.0,<1H OCEAN --117.96,33.65,21.0,2030.0,318.0,910.0,311.0,7.8453,343300.0,<1H OCEAN --117.96,33.65,18.0,3603.0,879.0,1549.0,756.0,4.0229,363100.0,<1H OCEAN --117.98,33.61,17.0,2054.0,291.0,836.0,288.0,6.8939,383900.0,NEAR OCEAN --117.97,33.73,18.0,3698.0,574.0,2046.0,614.0,6.2984,269800.0,<1H OCEAN --117.98,33.73,18.0,3833.0,,2192.0,996.0,3.4679,219700.0,<1H OCEAN --117.98,33.72,24.0,2826.0,547.0,1738.0,546.0,6.0494,240400.0,<1H OCEAN --117.98,33.72,28.0,3109.0,561.0,1891.0,562.0,5.2655,243100.0,<1H OCEAN --117.98,33.67,7.0,5664.0,1174.0,2493.0,1101.0,5.8252,264700.0,<1H OCEAN --117.98,33.66,26.0,3527.0,547.0,1615.0,542.0,6.1624,279400.0,<1H OCEAN --117.97,33.67,17.0,4466.0,640.0,2166.0,666.0,6.979,330700.0,<1H OCEAN --117.97,33.66,14.0,6090.0,1338.0,1974.0,1248.0,2.8061,180300.0,<1H OCEAN --117.98,33.68,14.0,3396.0,477.0,1542.0,472.0,7.3982,369100.0,<1H OCEAN --117.98,33.68,24.0,4177.0,,1704.0,606.0,6.2473,281900.0,<1H OCEAN --117.98,33.68,17.0,2603.0,373.0,1265.0,382.0,6.8039,332900.0,<1H OCEAN --117.97,33.68,16.0,4508.0,598.0,2221.0,623.0,7.3731,390800.0,<1H OCEAN --117.97,33.68,26.0,1616.0,292.0,700.0,241.0,5.5105,232100.0,<1H OCEAN --118.01,33.67,13.0,2902.0,536.0,1125.0,490.0,5.888,447700.0,NEAR OCEAN --118.01,33.67,16.0,3581.0,780.0,1644.0,774.0,5.041,397600.0,NEAR OCEAN --118.01,33.66,19.0,4559.0,1045.0,1949.0,910.0,4.355,429200.0,NEAR OCEAN --118.0,33.66,25.0,4041.0,903.0,1689.0,784.0,4.2289,442700.0,NEAR OCEAN --118.02,33.65,38.0,2548.0,646.0,755.0,399.0,2.8352,408300.0,NEAR OCEAN --117.99,33.68,13.0,4000.0,883.0,1999.0,881.0,4.7245,273600.0,<1H OCEAN --117.99,33.68,18.0,2024.0,462.0,1047.0,451.0,3.5848,186900.0,<1H OCEAN --117.99,33.67,15.0,3141.0,664.0,1729.0,633.0,4.2165,234600.0,<1H OCEAN --117.99,33.68,14.0,3305.0,841.0,2272.0,769.0,3.4899,216700.0,<1H OCEAN --117.99,33.67,19.0,3808.0,790.0,1776.0,756.0,4.625,282200.0,<1H OCEAN --117.99,33.67,12.0,2228.0,479.0,1122.0,488.0,4.0385,350000.0,<1H OCEAN --117.99,33.67,17.0,1692.0,427.0,903.0,423.0,3.5859,262500.0,<1H OCEAN --118.0,33.66,16.0,2809.0,708.0,1260.0,638.0,3.2353,252900.0,NEAR OCEAN --117.99,33.66,29.0,1330.0,293.0,613.0,236.0,4.6591,353100.0,<1H OCEAN --117.99,33.66,14.0,3155.0,653.0,951.0,575.0,3.0625,268800.0,<1H OCEAN --118.02,33.62,11.0,3969.0,834.0,1508.0,754.0,4.3409,271400.0,NEAR OCEAN --118.05,33.65,5.0,7017.0,935.0,2427.0,867.0,10.1154,477700.0,NEAR OCEAN --118.0,33.68,12.0,5241.0,985.0,2048.0,943.0,6.4858,285400.0,<1H OCEAN --118.0,33.67,34.0,3712.0,667.0,1521.0,632.0,4.8125,387800.0,<1H OCEAN --118.0,33.71,19.0,4808.0,1029.0,2422.0,971.0,4.0121,279700.0,<1H OCEAN --117.99,33.71,18.0,1994.0,578.0,3031.0,577.0,2.7614,237500.0,<1H OCEAN --117.99,33.71,17.0,1600.0,458.0,1803.0,432.0,2.7865,216700.0,<1H OCEAN --118.02,33.71,23.0,5554.0,995.0,2408.0,936.0,5.3886,331900.0,<1H OCEAN --118.02,33.7,23.0,5069.0,770.0,2473.0,769.0,6.3047,285700.0,<1H OCEAN --118.02,33.72,22.0,8844.0,1706.0,4404.0,1594.0,4.4453,267800.0,<1H OCEAN --118.01,33.73,23.0,4095.0,578.0,1766.0,589.0,6.7418,302500.0,<1H OCEAN --118.02,33.73,24.0,6393.0,1141.0,2743.0,1057.0,5.1384,336900.0,<1H OCEAN --118.03,33.72,24.0,5203.0,957.0,2465.0,946.0,5.163,261000.0,<1H OCEAN --118.04,33.72,24.0,7141.0,1330.0,3418.0,1268.0,4.6649,237800.0,<1H OCEAN --117.99,33.73,24.0,2104.0,421.0,1181.0,414.0,3.8365,250900.0,<1H OCEAN --118.0,33.73,26.0,2236.0,280.0,809.0,282.0,6.7395,342800.0,<1H OCEAN --117.99,33.73,20.0,3182.0,884.0,1770.0,817.0,3.1912,220800.0,<1H OCEAN --117.99,33.72,26.0,1787.0,275.0,801.0,270.0,5.5514,255700.0,<1H OCEAN --117.99,33.72,17.0,2801.0,649.0,1473.0,535.0,4.2875,134800.0,<1H OCEAN --117.99,33.72,14.0,2127.0,537.0,1338.0,475.0,3.628,188500.0,<1H OCEAN --118.01,33.71,18.0,6565.0,1357.0,3079.0,1248.0,4.7515,295600.0,<1H OCEAN --118.01,33.7,24.0,3856.0,567.0,1741.0,588.0,7.248,302700.0,<1H OCEAN --118.01,33.69,3.0,945.0,115.0,337.0,123.0,11.5199,500001.0,<1H OCEAN --117.99,33.7,13.0,4013.0,903.0,1999.0,859.0,4.625,248800.0,<1H OCEAN --117.99,33.69,16.0,1476.0,294.0,886.0,270.0,5.3259,216400.0,<1H OCEAN --117.99,33.69,12.0,2480.0,858.0,1441.0,788.0,1.6705,350000.0,<1H OCEAN --118.02,33.71,24.0,2598.0,443.0,1184.0,435.0,5.8623,287800.0,<1H OCEAN --118.03,33.7,15.0,3244.0,421.0,1259.0,413.0,7.7854,395300.0,<1H OCEAN --118.03,33.71,26.0,1483.0,251.0,738.0,235.0,6.0,271400.0,<1H OCEAN --118.07,33.67,13.0,5126.0,711.0,2429.0,718.0,9.5268,437900.0,NEAR OCEAN --118.04,33.72,14.0,4494.0,1048.0,2222.0,963.0,4.7821,169400.0,<1H OCEAN --118.05,33.72,14.0,2673.0,687.0,1192.0,656.0,4.1862,188900.0,<1H OCEAN --118.04,33.72,15.0,1836.0,490.0,942.0,477.0,4.0238,182500.0,<1H OCEAN --118.09,33.7,13.0,4770.0,969.0,2261.0,972.0,5.883,295100.0,NEAR OCEAN --118.04,33.71,12.0,4014.0,868.0,1605.0,769.0,6.0102,396900.0,<1H OCEAN --118.09,33.75,32.0,6239.0,974.0,2615.0,950.0,6.6188,380000.0,NEAR OCEAN --118.1,33.74,37.0,997.0,262.0,531.0,282.0,4.7773,400000.0,NEAR OCEAN --118.11,33.75,15.0,2569.0,812.0,785.0,477.0,5.4011,346400.0,NEAR OCEAN --118.11,33.74,43.0,1222.0,303.0,565.0,309.0,4.8482,500001.0,NEAR OCEAN --118.09,33.74,44.0,1671.0,390.0,871.0,367.0,4.6369,422200.0,NEAR OCEAN --118.11,33.75,24.0,1608.0,314.0,592.0,314.0,5.0926,390500.0,NEAR OCEAN --118.1,33.74,33.0,2119.0,524.0,872.0,465.0,4.537,495500.0,NEAR OCEAN --118.1,33.74,31.0,1310.0,342.0,563.0,310.0,4.6528,457100.0,NEAR OCEAN --118.11,33.73,32.0,1258.0,333.0,645.0,334.0,5.0476,500001.0,NEAR OCEAN --118.1,33.74,32.0,2035.0,,934.0,512.0,4.2287,500001.0,NEAR OCEAN --118.07,33.72,24.0,1240.0,296.0,513.0,254.0,4.9044,485000.0,NEAR OCEAN --118.07,33.72,32.0,1179.0,250.0,369.0,209.0,5.1824,500001.0,NEAR OCEAN --118.09,33.71,19.0,1397.0,271.0,491.0,197.0,8.7397,500001.0,NEAR OCEAN --118.06,33.72,17.0,4573.0,937.0,1619.0,796.0,5.7704,500001.0,NEAR OCEAN --118.05,33.71,25.0,4150.0,570.0,1424.0,547.0,8.8281,461600.0,NEAR OCEAN --118.06,33.72,22.0,4311.0,531.0,1426.0,533.0,9.8177,500001.0,NEAR OCEAN --118.07,33.73,13.0,1822.0,313.0,643.0,303.0,9.8346,401700.0,NEAR OCEAN --118.06,33.72,14.0,2665.0,331.0,964.0,319.0,15.0001,500001.0,NEAR OCEAN --118.06,33.73,16.0,4392.0,602.0,1490.0,578.0,10.5424,500001.0,<1H OCEAN --118.08,33.72,14.0,2021.0,396.0,696.0,367.0,7.1673,340700.0,NEAR OCEAN --118.05,33.73,25.0,2472.0,450.0,1301.0,467.0,5.0699,266100.0,<1H OCEAN --118.05,33.72,17.0,1875.0,472.0,900.0,406.0,5.2589,226100.0,<1H OCEAN --118.05,33.72,22.0,5416.0,1271.0,2260.0,1184.0,3.8038,174500.0,<1H OCEAN --118.09,33.77,26.0,1388.0,409.0,515.0,392.0,1.8015,62000.0,<1H OCEAN --118.08,33.77,26.0,2461.0,562.0,971.0,544.0,2.1944,87500.0,<1H OCEAN --118.08,33.77,26.0,2013.0,551.0,664.0,510.0,2.2708,67500.0,<1H OCEAN --118.08,33.77,26.0,3083.0,806.0,960.0,723.0,1.9074,68500.0,<1H OCEAN --118.08,33.76,25.0,1995.0,637.0,743.0,597.0,1.4617,46900.0,<1H OCEAN --118.09,33.76,26.0,1625.0,440.0,533.0,414.0,1.808,58500.0,<1H OCEAN --118.09,33.77,26.0,5359.0,1508.0,1829.0,1393.0,1.7675,61300.0,<1H OCEAN --118.08,33.76,26.0,1967.0,577.0,692.0,538.0,1.6111,54300.0,<1H OCEAN --118.08,33.76,26.0,996.0,364.0,366.0,313.0,1.2813,46700.0,<1H OCEAN --118.08,33.76,27.0,529.0,159.0,193.0,155.0,2.0952,71300.0,<1H OCEAN --118.09,33.77,27.0,2301.0,640.0,847.0,627.0,1.7208,67500.0,<1H OCEAN --118.0,33.76,26.0,1876.0,455.0,1499.0,436.0,2.925,176000.0,<1H OCEAN --118.01,33.75,30.0,3380.0,722.0,2269.0,652.0,4.525,186000.0,<1H OCEAN --118.0,33.75,26.0,1382.0,387.0,1977.0,368.0,2.7589,137500.0,<1H OCEAN --118.0,33.74,25.0,2767.0,346.0,1148.0,372.0,6.394,316700.0,<1H OCEAN --118.02,33.76,27.0,2905.0,587.0,1781.0,561.0,4.25,214800.0,<1H OCEAN --118.02,33.75,26.0,2989.0,479.0,1596.0,475.0,5.7157,231200.0,<1H OCEAN --118.03,33.76,25.0,4650.0,849.0,2503.0,790.0,5.742,221900.0,<1H OCEAN --118.04,33.76,16.0,2070.0,263.0,878.0,297.0,7.0879,338800.0,<1H OCEAN --118.04,33.75,16.0,3757.0,650.0,1291.0,614.0,5.2001,235600.0,<1H OCEAN --118.04,33.74,26.0,2532.0,421.0,1274.0,441.0,5.3559,235800.0,<1H OCEAN --118.02,33.74,26.0,3842.0,609.0,1961.0,595.0,6.128,248200.0,<1H OCEAN --118.02,33.73,26.0,3711.0,610.0,1902.0,597.0,5.5599,234100.0,<1H OCEAN --118.01,33.74,25.0,8110.0,1264.0,3613.0,1232.0,6.0609,264900.0,<1H OCEAN --117.98,33.75,24.0,3865.0,802.0,2670.0,772.0,3.8158,180000.0,<1H OCEAN --117.98,33.75,37.0,1264.0,274.0,783.0,273.0,3.3438,199600.0,<1H OCEAN --117.99,33.75,30.0,1859.0,462.0,1314.0,418.0,3.0909,184400.0,<1H OCEAN --117.98,33.74,29.0,3443.0,635.0,2257.0,620.0,4.7404,207500.0,<1H OCEAN --117.99,33.74,26.0,4065.0,741.0,1960.0,739.0,4.506,240000.0,<1H OCEAN --117.98,33.74,16.0,4636.0,908.0,2341.0,825.0,4.4261,304700.0,<1H OCEAN --117.99,33.73,17.0,5239.0,1045.0,2440.0,985.0,4.375,248100.0,<1H OCEAN --117.98,33.73,22.0,4232.0,624.0,2408.0,660.0,6.6539,284900.0,<1H OCEAN --117.99,33.77,29.0,1312.0,267.0,922.0,255.0,3.1902,202400.0,<1H OCEAN --117.98,33.76,28.0,3215.0,652.0,2066.0,636.0,4.0194,197400.0,<1H OCEAN --117.99,33.76,30.0,1572.0,362.0,1351.0,359.0,3.369,190900.0,<1H OCEAN --117.99,33.76,17.0,2545.0,737.0,1468.0,699.0,1.9439,177700.0,<1H OCEAN --117.99,33.75,22.0,3024.0,754.0,2357.0,743.0,3.3125,191800.0,<1H OCEAN --117.98,33.76,23.0,1553.0,518.0,1988.0,474.0,2.1375,150000.0,<1H OCEAN --117.98,33.76,24.0,1880.0,405.0,967.0,418.0,4.4545,192500.0,<1H OCEAN --117.98,33.75,27.0,2343.0,415.0,1537.0,426.0,5.1345,210600.0,<1H OCEAN --118.02,33.77,34.0,2115.0,352.0,1253.0,338.0,5.1507,207500.0,<1H OCEAN --118.02,33.77,33.0,2683.0,436.0,1520.0,456.0,5.0091,211500.0,<1H OCEAN --118.02,33.76,25.0,1759.0,404.0,1404.0,385.0,3.6289,195800.0,<1H OCEAN --118.01,33.77,33.0,1387.0,238.0,890.0,264.0,5.422,204100.0,<1H OCEAN --118.01,33.77,32.0,1771.0,296.0,995.0,272.0,5.8362,217500.0,<1H OCEAN --118.01,33.76,35.0,2072.0,349.0,1249.0,317.0,3.9855,191900.0,<1H OCEAN --118.01,33.76,26.0,2141.0,597.0,2038.0,585.0,2.2981,177700.0,<1H OCEAN --118.0,33.77,24.0,1324.0,267.0,687.0,264.0,3.4327,192800.0,<1H OCEAN --118.0,33.76,29.0,1982.0,503.0,1426.0,502.0,3.0263,194200.0,<1H OCEAN --118.0,33.77,28.0,2401.0,503.0,1155.0,456.0,3.5139,211700.0,<1H OCEAN --118.0,33.76,14.0,1120.0,319.0,982.0,307.0,2.9083,179200.0,<1H OCEAN --118.0,33.76,12.0,1250.0,331.0,1047.0,334.0,3.0625,208800.0,<1H OCEAN --118.03,33.77,21.0,3803.0,898.0,1511.0,829.0,3.0,221200.0,<1H OCEAN --118.02,33.77,7.0,586.0,118.0,232.0,107.0,5.2077,181300.0,<1H OCEAN --118.03,33.77,27.0,2000.0,310.0,880.0,294.0,5.635,218900.0,<1H OCEAN --118.03,33.77,24.0,3810.0,579.0,1818.0,590.0,5.8053,255900.0,<1H OCEAN --118.03,33.76,32.0,2980.0,494.0,1370.0,481.0,5.0866,223500.0,<1H OCEAN --118.04,33.76,25.0,4061.0,545.0,1623.0,527.0,7.1572,294900.0,<1H OCEAN --118.03,33.79,26.0,5321.0,889.0,2932.0,896.0,5.8914,237600.0,<1H OCEAN --118.03,33.79,32.0,3191.0,634.0,1718.0,611.0,4.1548,216600.0,<1H OCEAN --118.01,33.79,30.0,2460.0,403.0,1277.0,395.0,5.4372,223200.0,<1H OCEAN --118.02,33.78,28.0,3375.0,559.0,1754.0,554.0,5.5446,228900.0,<1H OCEAN --118.01,33.78,19.0,2648.0,478.0,1160.0,452.0,5.9357,207400.0,<1H OCEAN --118.03,33.78,26.0,2001.0,302.0,836.0,298.0,5.1061,257500.0,<1H OCEAN --118.01,33.78,26.0,2343.0,377.0,1166.0,373.0,6.0,233100.0,<1H OCEAN --118.03,33.78,25.0,3554.0,528.0,1600.0,537.0,6.6453,270100.0,<1H OCEAN --118.04,33.78,26.0,3642.0,557.0,1623.0,569.0,5.8426,259400.0,<1H OCEAN --118.04,33.78,25.0,3715.0,575.0,1640.0,572.0,5.7705,247100.0,<1H OCEAN --118.08,33.8,29.0,3675.0,613.0,1457.0,591.0,6.0553,369400.0,<1H OCEAN --118.07,33.8,34.0,3486.0,507.0,1311.0,503.0,7.1221,384500.0,<1H OCEAN --118.08,33.79,34.0,2840.0,395.0,1127.0,396.0,7.6144,376200.0,<1H OCEAN --118.09,33.78,26.0,2146.0,298.0,852.0,296.0,6.6137,342700.0,<1H OCEAN --118.07,33.79,34.0,2473.0,383.0,967.0,353.0,5.8283,362400.0,<1H OCEAN --118.09,33.79,31.0,4231.0,617.0,1694.0,623.0,6.6312,360100.0,<1H OCEAN --118.08,33.78,34.0,2287.0,347.0,1051.0,346.0,5.5767,372000.0,<1H OCEAN --118.08,33.78,30.0,2879.0,403.0,1109.0,414.0,6.9324,364700.0,<1H OCEAN --118.08,33.78,25.0,5321.0,967.0,1969.0,903.0,5.0102,340100.0,<1H OCEAN --118.02,33.79,23.0,6368.0,1030.0,3281.0,1001.0,6.1142,240400.0,<1H OCEAN --118.01,33.79,23.0,2663.0,430.0,1499.0,403.0,5.7837,258000.0,<1H OCEAN --118.02,33.8,24.0,84.0,14.0,32.0,8.0,5.875,193800.0,<1H OCEAN --118.02,33.8,16.0,2956.0,393.0,1379.0,429.0,8.4952,359600.0,<1H OCEAN --118.01,33.8,16.0,4021.0,701.0,1488.0,650.0,5.32,219500.0,<1H OCEAN --118.05,33.78,18.0,3414.0,434.0,1272.0,454.0,8.7015,390900.0,<1H OCEAN --118.05,33.78,25.0,3112.0,435.0,1098.0,401.0,6.0,353500.0,<1H OCEAN --118.05,33.78,25.0,2356.0,330.0,937.0,326.0,6.6264,359100.0,<1H OCEAN --118.06,33.78,22.0,4048.0,562.0,1637.0,541.0,7.3463,355600.0,<1H OCEAN --118.04,33.8,33.0,2685.0,466.0,1359.0,476.0,5.0261,245100.0,<1H OCEAN --118.06,33.8,21.0,2196.0,504.0,1215.0,477.0,4.8,196900.0,<1H OCEAN --118.07,33.79,26.0,4422.0,624.0,1936.0,625.0,6.4288,320700.0,<1H OCEAN --118.06,33.8,22.0,1892.0,442.0,1015.0,404.0,4.1379,212500.0,<1H OCEAN --118.06,33.8,20.0,1379.0,333.0,937.0,304.0,3.6217,195300.0,<1H OCEAN --118.07,33.8,17.0,2439.0,554.0,1161.0,532.0,3.6442,193100.0,<1H OCEAN --118.05,33.79,19.0,1863.0,355.0,1260.0,317.0,3.2465,277400.0,<1H OCEAN --118.04,33.84,21.0,6623.0,1204.0,3193.0,1129.0,4.5395,256000.0,<1H OCEAN --118.05,33.84,21.0,4890.0,653.0,2295.0,654.0,6.983,329700.0,<1H OCEAN --118.04,33.83,19.0,4526.0,830.0,2318.0,748.0,4.6681,320700.0,<1H OCEAN --118.04,33.82,26.0,4105.0,637.0,2072.0,648.0,5.844,273900.0,<1H OCEAN --118.04,33.83,20.0,1488.0,312.0,972.0,283.0,4.055,201900.0,<1H OCEAN --118.05,33.82,25.0,1548.0,279.0,732.0,265.0,5.123,159600.0,<1H OCEAN --118.06,33.82,25.0,2637.0,462.0,965.0,415.0,4.5833,190900.0,<1H OCEAN --118.06,33.81,25.0,3497.0,513.0,1839.0,544.0,5.4216,263000.0,<1H OCEAN --118.07,33.81,22.0,2711.0,352.0,1305.0,368.0,8.5407,398800.0,<1H OCEAN --118.07,33.8,22.0,1391.0,338.0,810.0,295.0,3.8792,218200.0,<1H OCEAN --118.08,33.81,21.0,1189.0,281.0,577.0,264.0,3.3155,237500.0,<1H OCEAN --118.03,33.82,17.0,1851.0,346.0,770.0,310.0,5.6093,244400.0,<1H OCEAN --118.03,33.82,17.0,2178.0,477.0,1077.0,457.0,3.6815,245300.0,<1H OCEAN --118.03,33.82,20.0,2662.0,464.0,1275.0,472.0,6.0162,318500.0,<1H OCEAN --118.02,33.82,19.0,2485.0,437.0,1286.0,431.0,4.7466,258300.0,<1H OCEAN --118.02,33.83,16.0,1139.0,328.0,665.0,290.0,3.2933,260000.0,<1H OCEAN --118.03,33.83,34.0,3203.0,653.0,2072.0,691.0,4.225,198400.0,<1H OCEAN --118.03,33.83,25.0,3030.0,532.0,1668.0,509.0,4.625,229600.0,<1H OCEAN --118.03,33.83,25.0,768.0,195.0,529.0,184.0,3.175,132800.0,<1H OCEAN --118.06,33.83,22.0,5290.0,1054.0,2812.0,1021.0,4.53,226400.0,<1H OCEAN --118.05,33.83,24.0,4316.0,678.0,2286.0,665.0,5.7018,286700.0,<1H OCEAN --118.06,33.83,21.0,3941.0,655.0,1897.0,670.0,4.88,343900.0,<1H OCEAN --118.05,33.82,21.0,2997.0,372.0,1323.0,372.0,8.6123,386700.0,<1H OCEAN --118.06,33.83,17.0,1973.0,516.0,1112.0,501.0,3.8512,163800.0,<1H OCEAN --118.06,33.82,24.0,3983.0,675.0,1568.0,638.0,4.6458,213400.0,<1H OCEAN --118.04,33.81,22.0,4057.0,624.0,2204.0,643.0,5.8527,241000.0,<1H OCEAN --118.04,33.81,27.0,2990.0,515.0,1849.0,497.0,5.6846,216100.0,<1H OCEAN --118.05,33.81,26.0,2523.0,437.0,1377.0,450.0,5.2542,234600.0,<1H OCEAN --118.03,33.81,26.0,3635.0,567.0,1779.0,543.0,5.7089,237400.0,<1H OCEAN --118.03,33.86,19.0,1795.0,328.0,1014.0,322.0,4.535,289300.0,<1H OCEAN --118.04,33.85,24.0,2233.0,347.0,1162.0,355.0,5.6094,279200.0,<1H OCEAN --118.04,33.85,23.0,3132.0,469.0,1646.0,478.0,5.777,315900.0,<1H OCEAN --118.05,33.85,25.0,2856.0,388.0,1212.0,362.0,6.1737,313100.0,<1H OCEAN --118.04,33.85,18.0,3628.0,546.0,1922.0,544.0,7.5057,328500.0,<1H OCEAN --118.03,33.85,16.0,1831.0,390.0,1347.0,389.0,3.8426,344400.0,<1H OCEAN --118.01,33.83,29.0,3963.0,772.0,2104.0,743.0,4.9803,208600.0,<1H OCEAN --118.01,33.84,29.0,3740.0,691.0,1724.0,638.0,3.9628,215600.0,<1H OCEAN --118.03,33.84,28.0,3857.0,857.0,2328.0,830.0,4.0156,196000.0,<1H OCEAN --118.02,33.83,26.0,3616.0,892.0,2257.0,821.0,3.1497,217600.0,<1H OCEAN --118.02,33.82,21.0,2052.0,456.0,1173.0,432.0,3.7885,204500.0,<1H OCEAN --118.01,33.82,10.0,3897.0,893.0,1992.0,693.0,4.1591,192300.0,<1H OCEAN --118.01,33.81,18.0,5238.0,1083.0,3032.0,1065.0,4.4583,190100.0,<1H OCEAN --118.02,33.81,34.0,3482.0,614.0,2227.0,641.0,5.1155,200900.0,<1H OCEAN --118.02,33.86,26.0,2342.0,383.0,1290.0,394.0,5.6677,220700.0,<1H OCEAN --118.02,33.85,31.0,1922.0,329.0,1030.0,353.0,5.3416,213000.0,<1H OCEAN --118.03,33.85,30.0,2320.0,448.0,1434.0,452.0,4.0865,203700.0,<1H OCEAN --118.03,33.85,23.0,5495.0,1141.0,2873.0,1004.0,3.9156,224100.0,<1H OCEAN --118.01,33.85,29.0,2064.0,447.0,1265.0,400.0,3.8864,209300.0,<1H OCEAN --118.01,33.85,29.0,3061.0,612.0,2396.0,640.0,4.6326,195200.0,<1H OCEAN --118.0,33.85,34.0,1078.0,205.0,575.0,206.0,4.5083,188000.0,<1H OCEAN --118.01,33.86,29.0,2307.0,452.0,1218.0,402.0,3.4306,194200.0,<1H OCEAN --118.01,33.84,28.0,4097.0,838.0,2112.0,803.0,4.5,202100.0,<1H OCEAN --118.01,33.84,35.0,4166.0,713.0,2354.0,709.0,5.1775,213400.0,<1H OCEAN --118.02,33.84,35.0,3473.0,563.0,2091.0,580.0,4.4821,214100.0,<1H OCEAN --118.03,33.84,30.0,4781.0,831.0,2568.0,797.0,5.4746,226400.0,<1H OCEAN --117.99,33.86,36.0,1138.0,228.0,725.0,219.0,3.4167,187200.0,<1H OCEAN --117.99,33.85,34.0,1948.0,306.0,957.0,304.0,4.9777,212600.0,<1H OCEAN --118.0,33.85,33.0,2053.0,418.0,1154.0,405.0,4.0455,197200.0,<1H OCEAN --118.0,33.86,32.0,1162.0,196.0,563.0,178.0,3.875,203000.0,<1H OCEAN --117.99,33.85,35.0,1661.0,272.0,949.0,276.0,5.2548,192600.0,<1H OCEAN --117.99,33.84,34.0,2079.0,343.0,1379.0,352.0,5.103,207000.0,<1H OCEAN --118.0,33.84,30.0,1549.0,325.0,885.0,299.0,4.0039,195100.0,<1H OCEAN --118.0,33.84,29.0,2641.0,637.0,2413.0,619.0,2.8169,165100.0,<1H OCEAN --118.01,33.87,25.0,6348.0,1615.0,4188.0,1497.0,3.139,185700.0,<1H OCEAN --117.99,33.86,20.0,3540.0,906.0,2898.0,876.0,3.0252,178000.0,<1H OCEAN --118.0,33.88,28.0,1624.0,289.0,755.0,280.0,4.7083,268100.0,<1H OCEAN --118.01,33.88,19.0,1434.0,391.0,1088.0,341.0,3.369,269600.0,<1H OCEAN --117.99,33.88,15.0,2298.0,567.0,1261.0,527.0,4.2422,159400.0,<1H OCEAN --117.99,33.88,42.0,1461.0,302.0,986.0,314.0,3.9559,161100.0,<1H OCEAN --118.0,33.88,18.0,2628.0,720.0,2276.0,649.0,2.735,170800.0,<1H OCEAN --117.99,33.87,16.0,1689.0,499.0,1260.0,453.0,3.1205,174000.0,<1H OCEAN --118.0,33.87,13.0,2086.0,544.0,1356.0,462.0,2.95,165600.0,<1H OCEAN --117.99,33.87,17.0,2334.0,537.0,1662.0,535.0,3.0147,217000.0,<1H OCEAN --117.99,33.87,34.0,1239.0,307.0,869.0,291.0,3.59,161900.0,<1H OCEAN --117.99,33.86,20.0,2303.0,612.0,1607.0,564.0,2.9,176100.0,<1H OCEAN --117.98,33.89,18.0,2939.0,437.0,1278.0,435.0,7.1425,393700.0,<1H OCEAN --117.99,33.88,25.0,3401.0,509.0,1503.0,498.0,6.6704,240600.0,<1H OCEAN --117.99,33.89,21.0,5195.0,1020.0,2539.0,988.0,4.5033,160500.0,<1H OCEAN --117.99,33.89,23.0,2111.0,306.0,979.0,288.0,8.5621,347800.0,<1H OCEAN --117.97,33.89,17.0,1851.0,344.0,764.0,339.0,5.1315,181800.0,<1H OCEAN --117.97,33.89,17.0,1740.0,445.0,1158.0,412.0,2.8649,137500.0,<1H OCEAN --117.97,33.88,9.0,1344.0,279.0,530.0,265.0,5.0731,185100.0,<1H OCEAN --117.97,33.88,11.0,1454.0,247.0,635.0,236.0,6.2427,218500.0,<1H OCEAN --117.97,33.89,15.0,3801.0,542.0,1992.0,526.0,9.0683,367400.0,<1H OCEAN --117.97,33.88,16.0,2003.0,300.0,1172.0,318.0,6.0394,321600.0,<1H OCEAN --117.97,33.89,14.0,923.0,136.0,420.0,130.0,10.2252,462800.0,<1H OCEAN --120.1,39.17,33.0,1849.0,384.0,218.0,92.0,1.7083,143800.0,INLAND --120.06,39.09,30.0,2979.0,583.0,316.0,124.0,2.1987,124000.0,INLAND --120.06,39.15,22.0,2213.0,372.0,98.0,42.0,1.1912,170000.0,INLAND --120.2,39.12,15.0,2146.0,361.0,197.0,76.0,4.1316,200000.0,INLAND --120.18,39.14,25.0,2171.0,386.0,248.0,116.0,3.0375,171900.0,INLAND --120.16,39.14,21.0,2484.0,460.0,309.0,144.0,3.9722,127800.0,INLAND --120.18,39.17,18.0,1703.0,360.0,354.0,163.0,3.6563,146900.0,INLAND --120.15,39.17,32.0,1684.0,359.0,454.0,209.0,2.9125,145800.0,INLAND --120.15,39.15,25.0,1669.0,348.0,163.0,78.0,5.75,176600.0,INLAND --120.15,39.2,14.0,1382.0,242.0,141.0,66.0,4.1016,283300.0,INLAND --120.12,39.18,17.0,2839.0,525.0,390.0,189.0,3.5667,179200.0,INLAND --120.1,39.19,18.0,3824.0,559.0,241.0,106.0,5.5456,360000.0,INLAND --120.1,39.19,17.0,1480.0,241.0,202.0,80.0,3.9375,213200.0,INLAND --120.1,39.2,20.0,1703.0,294.0,409.0,174.0,3.087,196900.0,INLAND --120.11,39.21,18.0,2245.0,392.0,421.0,162.0,4.5795,158300.0,INLAND --120.11,39.24,21.0,3005.0,574.0,385.0,150.0,3.1193,153300.0,INLAND --120.08,39.23,19.0,1746.0,306.0,251.0,104.0,4.8182,146900.0,INLAND --120.07,39.24,20.0,3729.0,614.0,365.0,152.0,4.962,169500.0,INLAND --120.06,39.25,21.0,2459.0,525.0,584.0,233.0,3.01,163500.0,INLAND --120.04,39.24,30.0,2369.0,469.0,510.0,213.0,2.65,123800.0,INLAND --120.04,39.27,24.0,2237.0,491.0,264.0,95.0,4.1364,154500.0,INLAND --120.02,39.24,24.0,1602.0,426.0,751.0,257.0,1.7609,99300.0,INLAND --120.02,39.24,22.0,2309.0,571.0,919.0,342.0,3.0057,93600.0,INLAND --120.02,39.24,32.0,1347.0,444.0,825.0,303.0,1.8269,225000.0,INLAND --120.01,39.26,26.0,1930.0,391.0,307.0,138.0,2.6023,139300.0,INLAND --120.91,38.98,13.0,7689.0,1415.0,3264.0,1198.0,3.653,146800.0,INLAND --120.81,39.02,30.0,806.0,189.0,326.0,146.0,2.8155,101000.0,INLAND --120.69,39.12,19.0,1048.0,262.0,493.0,184.0,2.2917,118200.0,INLAND --120.83,39.02,15.0,1117.0,242.0,551.0,229.0,2.6319,97700.0,INLAND --121.06,38.91,18.0,6501.0,1416.0,2954.0,1373.0,2.5373,143000.0,INLAND --121.08,38.9,27.0,3436.0,755.0,1568.0,709.0,2.4273,138400.0,INLAND --121.06,38.88,17.0,7635.0,1284.0,3096.0,1227.0,4.2917,184300.0,INLAND --121.08,38.89,41.0,3471.0,753.0,1680.0,710.0,2.6701,139000.0,INLAND --121.07,38.9,52.0,1280.0,281.0,523.0,266.0,1.7375,122200.0,INLAND --121.15,38.89,20.0,2024.0,313.0,879.0,309.0,5.2903,239400.0,INLAND --121.12,38.86,17.0,3949.0,717.0,1683.0,686.0,3.3802,216500.0,INLAND --121.13,38.87,48.0,1127.0,,530.0,186.0,3.0917,128100.0,INLAND --121.15,38.91,23.0,1654.0,299.0,787.0,299.0,4.2723,193100.0,INLAND --121.08,38.85,10.0,2509.0,422.0,1037.0,389.0,6.0,220100.0,INLAND --121.16,38.74,17.0,3353.0,463.0,1417.0,447.0,5.1721,237100.0,INLAND --121.14,38.77,15.0,10282.0,1333.0,3868.0,1300.0,6.4789,287800.0,INLAND --121.16,38.75,27.0,771.0,108.0,315.0,111.0,8.4882,276600.0,INLAND --121.14,38.84,22.0,2750.0,433.0,1161.0,428.0,4.2143,236500.0,INLAND --121.14,38.82,22.0,1816.0,278.0,832.0,278.0,5.07,233000.0,INLAND --121.15,38.8,20.0,2104.0,370.0,745.0,314.0,4.1685,217500.0,INLAND --121.18,38.78,13.0,3480.0,528.0,1432.0,532.0,6.1642,277800.0,INLAND --121.18,38.8,18.0,2541.0,414.0,1276.0,405.0,5.1857,220100.0,INLAND --121.21,38.76,16.0,1608.0,296.0,792.0,286.0,3.1583,239200.0,INLAND --121.21,38.75,11.0,4552.0,639.0,2006.0,623.0,4.3962,264400.0,INLAND --121.17,38.76,14.0,2028.0,255.0,781.0,251.0,6.5322,394000.0,INLAND --121.2,38.73,11.0,4897.0,636.0,1931.0,616.0,7.7499,334800.0,INLAND --121.18,38.73,16.0,1584.0,264.0,613.0,226.0,6.0302,273100.0,INLAND --121.18,38.75,16.0,2807.0,459.0,1201.0,429.0,4.7941,247600.0,INLAND --121.24,38.75,5.0,9137.0,1368.0,3667.0,1294.0,5.4896,229600.0,INLAND --121.24,38.72,12.0,3605.0,576.0,1556.0,549.0,4.9,203700.0,INLAND --121.27,38.74,19.0,3869.0,887.0,2086.0,685.0,2.6065,154900.0,INLAND --121.26,38.73,14.0,3323.0,499.0,1527.0,540.0,5.3451,172100.0,INLAND --121.26,38.74,22.0,7173.0,1314.0,3526.0,1316.0,3.3941,135900.0,INLAND --121.28,38.73,6.0,4223.0,672.0,1747.0,631.0,5.419,267400.0,INLAND --121.27,38.72,6.0,4664.0,644.0,2105.0,663.0,6.0804,198700.0,INLAND --121.25,38.72,10.0,7277.0,1168.0,3507.0,1131.0,4.485,179400.0,INLAND --121.27,38.75,21.0,4812.0,1117.0,1985.0,1045.0,2.5083,128500.0,INLAND --121.28,38.74,33.0,4384.0,778.0,1775.0,789.0,4.05,134700.0,INLAND --121.3,38.73,9.0,5558.0,1099.0,2717.0,1043.0,3.6455,139200.0,INLAND --121.36,38.73,21.0,2253.0,416.0,1050.0,411.0,3.141,220100.0,INLAND --121.32,38.74,14.0,1449.0,228.0,670.0,232.0,4.3897,186300.0,INLAND --121.31,38.75,7.0,4185.0,750.0,2147.0,706.0,4.0519,129200.0,INLAND --121.3,38.75,36.0,3903.0,885.0,2313.0,804.0,2.655,86300.0,INLAND --121.28,38.75,52.0,493.0,89.0,189.0,94.0,2.108,83800.0,INLAND --121.3,38.74,41.0,4374.0,1039.0,2387.0,959.0,2.3611,87900.0,INLAND --121.33,38.77,3.0,20214.0,3559.0,8361.0,3112.0,4.2259,169300.0,INLAND --121.28,38.76,47.0,2901.0,631.0,1276.0,578.0,2.1366,101900.0,INLAND --121.27,38.75,43.0,1292.0,307.0,647.0,249.0,2.7188,85300.0,INLAND --121.29,38.76,12.0,1198.0,174.0,443.0,170.0,6.0097,187500.0,INLAND --121.28,38.77,6.0,3819.0,550.0,1738.0,587.0,5.8718,201400.0,INLAND --121.28,38.8,7.0,9003.0,1739.0,4445.0,1591.0,3.816,147900.0,INLAND --121.24,38.78,11.0,1851.0,352.0,1049.0,369.0,3.5288,141100.0,INLAND --121.24,38.78,18.0,549.0,143.0,249.0,136.0,0.8691,136500.0,INLAND --121.23,38.78,13.0,3813.0,871.0,1513.0,783.0,2.0807,142600.0,INLAND --121.22,38.78,8.0,3418.0,514.0,1312.0,409.0,6.3914,218000.0,INLAND --121.24,38.82,5.0,12259.0,1643.0,4819.0,1582.0,5.4498,217300.0,INLAND --121.25,38.8,14.0,5094.0,729.0,1974.0,705.0,5.5205,188700.0,INLAND --121.24,38.79,15.0,2615.0,485.0,1063.0,428.0,3.7904,173200.0,INLAND --121.24,38.79,23.0,1419.0,261.0,706.0,269.0,3.1875,110200.0,INLAND --121.23,38.79,45.0,907.0,176.0,463.0,190.0,2.2292,92000.0,INLAND --121.22,38.8,11.0,2521.0,521.0,1390.0,477.0,3.5265,124800.0,INLAND --121.19,38.87,20.0,3118.0,500.0,1405.0,519.0,6.0,209400.0,INLAND --121.21,38.83,21.0,3691.0,640.0,1758.0,603.0,3.5607,151900.0,INLAND --121.19,38.85,8.0,4114.0,710.0,2268.0,716.0,4.4085,139400.0,INLAND --121.18,38.83,15.0,4488.0,859.0,2114.0,805.0,2.9484,124400.0,INLAND --121.39,38.85,19.0,3568.0,646.0,1714.0,590.0,4.0862,162700.0,INLAND --121.3,39.0,16.0,3155.0,541.0,1630.0,540.0,4.0282,126400.0,INLAND --121.31,38.97,16.0,1210.0,228.0,726.0,222.0,2.7083,82100.0,INLAND --121.22,38.92,19.0,2531.0,461.0,1206.0,429.0,4.4958,192600.0,INLAND --121.27,38.87,16.0,2094.0,358.0,1092.0,357.0,4.4769,191400.0,INLAND --121.29,38.9,45.0,2019.0,394.0,1104.0,407.0,3.1691,108700.0,INLAND --121.28,38.9,31.0,1297.0,259.0,765.0,240.0,2.7656,93600.0,INLAND --121.29,38.89,10.0,653.0,120.0,407.0,146.0,3.3889,110800.0,INLAND --121.3,38.89,23.0,1750.0,297.0,1012.0,315.0,3.4706,99300.0,INLAND --121.3,38.89,45.0,1529.0,317.0,793.0,281.0,2.9866,91300.0,INLAND --121.32,38.89,9.0,5927.0,1269.0,3369.0,1176.0,2.8194,111300.0,INLAND --121.14,38.92,16.0,2069.0,312.0,889.0,299.0,4.6771,212000.0,INLAND --121.1,38.92,21.0,4064.0,871.0,1847.0,859.0,3.0321,135500.0,INLAND --121.11,38.91,24.0,2558.0,423.0,1149.0,403.0,4.0679,190500.0,INLAND --121.1,38.94,42.0,410.0,117.0,706.0,112.0,1.0179,125000.0,INLAND --121.07,38.92,15.0,5301.0,884.0,2335.0,831.0,4.515,164000.0,INLAND --121.05,38.92,34.0,2144.0,372.0,899.0,378.0,3.3021,158800.0,INLAND --121.15,39.0,15.0,4145.0,691.0,1872.0,680.0,4.3553,220600.0,INLAND --121.19,38.95,16.0,2544.0,431.0,1199.0,412.0,4.5129,196300.0,INLAND --121.11,38.95,14.0,3888.0,890.0,1830.0,844.0,1.8238,158600.0,INLAND --121.1,38.95,17.0,1475.0,403.0,943.0,363.0,2.1287,55300.0,INLAND --121.06,38.98,14.0,2267.0,355.0,1140.0,369.0,4.7019,212800.0,INLAND --121.05,38.97,12.0,3676.0,550.0,1572.0,510.0,4.8214,201900.0,INLAND --121.09,38.97,13.0,1467.0,221.0,688.0,231.0,5.2536,191900.0,INLAND --121.1,39.0,16.0,1106.0,195.0,505.0,187.0,5.0126,192300.0,INLAND --121.08,38.95,18.0,1931.0,380.0,1271.0,377.0,2.7463,156100.0,INLAND --121.08,38.93,14.0,4239.0,824.0,1729.0,794.0,2.4278,167700.0,INLAND --121.07,38.94,14.0,1710.0,294.0,839.0,297.0,4.7143,150700.0,INLAND --121.04,38.95,22.0,1931.0,445.0,1009.0,407.0,2.75,153200.0,INLAND --120.99,39.04,17.0,2289.0,450.0,1182.0,397.0,2.3696,166800.0,INLAND --120.98,38.99,17.0,3403.0,661.0,1540.0,622.0,3.6354,162900.0,INLAND --121.04,39.0,21.0,4059.0,730.0,1874.0,693.0,4.8051,174300.0,INLAND --121.02,39.01,17.0,4786.0,799.0,2066.0,770.0,3.9734,185400.0,INLAND --121.0,39.0,4.0,170.0,23.0,93.0,27.0,10.9891,312500.0,INLAND --120.87,39.18,25.0,2691.0,598.0,964.0,373.0,3.9196,142700.0,INLAND --120.87,39.15,17.0,1819.0,389.0,736.0,283.0,2.8603,128900.0,INLAND --120.58,39.27,15.0,4126.0,903.0,723.0,266.0,3.0147,118800.0,INLAND --120.33,39.3,16.0,868.0,178.0,44.0,21.0,3.0,175000.0,INLAND --120.18,39.28,14.0,10098.0,1545.0,701.0,254.0,4.0819,141300.0,INLAND --120.22,39.2,22.0,8259.0,1409.0,845.0,353.0,3.3699,244000.0,INLAND --120.96,39.12,24.0,2069.0,436.0,909.0,374.0,2.5326,139100.0,INLAND --120.98,39.08,20.0,4570.0,906.0,2125.0,815.0,3.0403,148000.0,INLAND --120.94,39.05,8.0,3758.0,717.0,1744.0,661.0,3.1972,151500.0,INLAND --120.98,39.93,25.0,2220.0,511.0,912.0,449.0,1.8914,87800.0,INLAND --120.95,39.93,26.0,2023.0,385.0,922.0,365.0,2.8125,83500.0,INLAND --120.93,39.9,20.0,1511.0,328.0,791.0,320.0,2.0221,70900.0,INLAND --120.9,39.93,23.0,2679.0,546.0,1424.0,529.0,2.8812,81900.0,INLAND --120.9,39.95,20.0,1349.0,238.0,601.0,203.0,3.5417,96600.0,INLAND --120.93,39.96,15.0,1666.0,351.0,816.0,316.0,2.9559,118800.0,INLAND --120.92,40.02,35.0,383.0,92.0,202.0,72.0,2.6458,102500.0,INLAND --120.74,39.9,23.0,1017.0,218.0,387.0,152.0,2.2656,88200.0,INLAND --120.57,39.78,15.0,1291.0,283.0,582.0,242.0,2.1216,102000.0,INLAND --120.66,39.72,15.0,3763.0,784.0,717.0,348.0,2.2019,130500.0,INLAND --120.74,39.82,9.0,1955.0,398.0,294.0,122.0,3.9583,126500.0,INLAND --121.0,39.75,8.0,1116.0,214.0,27.0,39.0,2.5893,83000.0,INLAND --121.14,39.86,16.0,2534.0,557.0,638.0,244.0,2.2101,88800.0,INLAND --120.53,39.79,18.0,1234.0,266.0,543.0,201.0,2.5156,71900.0,INLAND --120.48,39.78,11.0,513.0,104.0,204.0,86.0,2.375,100000.0,INLAND --120.45,39.8,47.0,2149.0,456.0,965.0,419.0,1.7829,55900.0,INLAND --120.46,39.83,18.0,3406.0,673.0,1567.0,617.0,2.2717,75900.0,INLAND --120.38,39.82,10.0,1262.0,258.0,510.0,209.0,2.1667,92800.0,INLAND --120.15,39.8,19.0,785.0,151.0,366.0,140.0,3.0625,82500.0,INLAND --120.94,40.17,22.0,1334.0,261.0,597.0,222.0,2.2132,89200.0,INLAND --120.91,40.08,24.0,1629.0,313.0,641.0,274.0,2.2067,69600.0,INLAND --120.94,40.14,31.0,3127.0,664.0,1345.0,580.0,1.5774,58000.0,INLAND --121.23,40.01,38.0,725.0,190.0,219.0,115.0,1.625,75000.0,INLAND --120.71,40.13,19.0,897.0,180.0,276.0,110.0,2.9554,89400.0,INLAND --121.25,40.27,25.0,958.0,245.0,28.0,16.0,2.625,67500.0,INLAND --121.24,40.31,36.0,1597.0,301.0,632.0,262.0,3.5962,93600.0,INLAND --121.23,40.29,21.0,3229.0,667.0,1501.0,582.0,2.1524,77100.0,INLAND --121.19,40.23,10.0,1572.0,232.0,247.0,104.0,5.8453,193800.0,INLAND --121.08,40.19,11.0,919.0,199.0,69.0,43.0,1.6944,137500.0,INLAND --121.06,40.23,23.0,1127.0,225.0,215.0,85.0,3.4844,143800.0,INLAND --121.09,40.3,15.0,1717.0,336.0,501.0,206.0,3.6477,113400.0,INLAND --121.14,40.29,17.0,1944.0,394.0,384.0,172.0,1.6875,111500.0,INLAND --121.15,40.25,14.0,5156.0,880.0,616.0,281.0,3.3462,145200.0,INLAND --117.35,34.0,38.0,1214.0,254.0,723.0,236.0,2.5469,87800.0,INLAND --117.36,33.99,42.0,1178.0,261.0,804.0,283.0,2.9688,92900.0,INLAND --117.37,34.0,36.0,730.0,155.0,476.0,142.0,2.4306,88900.0,INLAND --117.37,34.0,41.0,1248.0,278.0,770.0,250.0,3.025,90600.0,INLAND --117.36,34.0,19.0,4592.0,895.0,2769.0,838.0,3.3622,105100.0,INLAND --117.37,34.01,15.0,1386.0,247.0,703.0,185.0,3.6415,124200.0,INLAND --117.38,34.0,45.0,2881.0,514.0,1470.0,515.0,3.3687,123800.0,INLAND --117.38,33.99,52.0,1797.0,332.0,905.0,313.0,2.7054,141700.0,INLAND --117.38,33.98,52.0,2274.0,571.0,1167.0,504.0,2.0284,101600.0,INLAND --117.39,33.98,37.0,2337.0,452.0,948.0,437.0,3.145,169100.0,INLAND --117.41,33.97,24.0,950.0,183.0,383.0,182.0,3.0694,125000.0,INLAND --117.37,33.98,43.0,2862.0,772.0,1878.0,675.0,2.1151,96700.0,INLAND --117.38,33.97,29.0,1157.0,297.0,2027.0,253.0,1.6389,155000.0,INLAND --117.38,33.98,10.0,642.0,176.0,462.0,186.0,2.1528,162500.0,INLAND --117.37,33.98,27.0,1342.0,547.0,844.0,484.0,1.1194,95800.0,INLAND --117.37,33.99,44.0,917.0,224.0,666.0,220.0,1.685,114200.0,INLAND --117.36,33.98,46.0,1680.0,453.0,1570.0,435.0,2.0436,82300.0,INLAND --117.37,33.97,34.0,3676.0,697.0,2653.0,682.0,2.5804,92400.0,INLAND --117.37,33.97,38.0,1156.0,241.0,877.0,200.0,1.4514,79900.0,INLAND --117.37,33.97,40.0,1166.0,250.0,976.0,244.0,1.95,84800.0,INLAND --117.37,33.98,52.0,201.0,44.0,130.0,24.0,2.025,125000.0,INLAND --117.35,33.99,45.0,131.0,28.0,89.0,31.0,2.6071,112500.0,INLAND --117.35,33.98,31.0,4163.0,1242.0,3928.0,1076.0,1.6943,85900.0,INLAND --117.35,33.97,27.0,3960.0,886.0,2807.0,838.0,3.024,122500.0,INLAND --117.36,33.97,32.0,1625.0,335.0,1212.0,327.0,2.7596,82200.0,INLAND --117.36,33.98,33.0,2070.0,469.0,1851.0,467.0,2.4667,80700.0,INLAND --117.37,33.96,33.0,3974.0,548.0,1398.0,528.0,7.2519,216600.0,INLAND --117.35,33.96,25.0,2396.0,316.0,951.0,314.0,8.2405,235200.0,INLAND --117.35,33.95,28.0,1650.0,210.0,557.0,211.0,7.6632,204800.0,INLAND --117.37,33.94,14.0,9286.0,1269.0,3565.0,1238.0,6.6635,219600.0,INLAND --117.36,33.92,7.0,9376.0,1181.0,3570.0,1107.0,8.5326,315200.0,INLAND --117.39,33.97,52.0,3307.0,553.0,1269.0,529.0,4.3176,136200.0,INLAND --117.38,33.97,30.0,2953.0,703.0,1406.0,580.0,2.6895,150000.0,INLAND --117.39,33.96,52.0,1992.0,345.0,948.0,358.0,3.2917,129300.0,INLAND --117.4,33.96,51.0,1806.0,322.0,709.0,298.0,3.575,125500.0,INLAND --117.39,33.97,48.0,1915.0,348.0,1060.0,376.0,3.4044,117900.0,INLAND --117.4,33.97,38.0,1383.0,238.0,649.0,232.0,5.0194,148900.0,INLAND --117.4,33.97,41.0,1707.0,276.0,660.0,269.0,3.8618,134800.0,INLAND --117.41,33.96,32.0,2837.0,617.0,1393.0,595.0,2.3798,118800.0,INLAND --117.41,33.96,24.0,4481.0,901.0,2398.0,823.0,3.864,123400.0,INLAND --117.41,33.97,34.0,2316.0,365.0,956.0,389.0,4.337,157800.0,INLAND --117.44,33.96,29.0,124.0,22.0,50.0,18.0,12.5381,112500.0,INLAND --117.43,33.96,28.0,3747.0,651.0,2399.0,646.0,3.8682,116500.0,INLAND --117.44,33.95,31.0,914.0,177.0,556.0,161.0,3.7344,115300.0,INLAND --117.4,33.95,46.0,2189.0,423.0,866.0,389.0,3.1384,111500.0,INLAND --117.4,33.95,32.0,1979.0,491.0,954.0,444.0,2.4408,117300.0,INLAND --117.41,33.95,37.0,1586.0,283.0,675.0,305.0,2.9583,132100.0,INLAND --117.41,33.95,37.0,1462.0,257.0,849.0,287.0,3.0542,123900.0,INLAND --117.42,33.95,32.0,4251.0,848.0,2494.0,798.0,2.8173,110800.0,INLAND --117.42,33.96,33.0,2275.0,469.0,1691.0,459.0,2.7452,98100.0,INLAND --117.41,33.96,27.0,2341.0,418.0,1272.0,415.0,3.0208,112700.0,INLAND --117.38,33.96,30.0,3153.0,623.0,1544.0,575.0,3.4491,133800.0,INLAND --117.39,33.95,36.0,1380.0,269.0,598.0,262.0,3.1667,122900.0,INLAND --117.39,33.95,35.0,1599.0,284.0,721.0,287.0,4.125,120700.0,INLAND --117.4,33.95,43.0,633.0,166.0,292.0,135.0,1.1601,121400.0,INLAND --117.39,33.96,49.0,2527.0,461.0,1344.0,451.0,4.0833,114400.0,INLAND --117.37,33.95,32.0,2215.0,351.0,771.0,311.0,4.3542,142600.0,INLAND --117.37,33.94,20.0,1682.0,296.0,706.0,291.0,4.0966,140100.0,INLAND --117.38,33.94,21.0,2468.0,380.0,1164.0,385.0,4.0625,136800.0,INLAND --117.39,33.93,26.0,3014.0,494.0,1832.0,485.0,4.8333,127900.0,INLAND --117.39,33.95,35.0,3306.0,680.0,1742.0,673.0,3.7109,109100.0,INLAND --117.4,33.94,30.0,1198.0,251.0,1019.0,214.0,3.0509,82700.0,INLAND --117.4,33.93,35.0,1468.0,298.0,1168.0,261.0,2.2222,81300.0,INLAND --117.41,33.93,35.0,793.0,150.0,669.0,128.0,4.0156,89300.0,INLAND --117.4,33.94,37.0,987.0,187.0,551.0,191.0,3.5865,112000.0,INLAND --117.4,33.94,42.0,943.0,171.0,466.0,203.0,3.1458,116000.0,INLAND --117.41,33.94,33.0,2074.0,476.0,911.0,420.0,2.87,117600.0,INLAND --117.41,33.94,29.0,3181.0,714.0,1603.0,706.0,3.25,112500.0,INLAND --117.42,33.93,32.0,2885.0,595.0,1509.0,590.0,3.1795,125600.0,INLAND --117.41,33.94,22.0,4179.0,1081.0,2096.0,1013.0,2.4435,118500.0,INLAND --117.42,33.94,26.0,2420.0,532.0,1383.0,469.0,3.5403,113500.0,INLAND --117.42,33.94,35.0,1764.0,325.0,1094.0,353.0,4.1528,113900.0,INLAND --117.43,33.95,36.0,2284.0,444.0,1425.0,405.0,4.0526,104500.0,INLAND --117.43,33.93,36.0,2386.0,396.0,1176.0,374.0,4.5122,113300.0,INLAND --117.43,33.93,15.0,4836.0,1368.0,3012.0,1240.0,2.1865,129300.0,INLAND --117.43,33.93,31.0,1273.0,262.0,686.0,254.0,2.4922,109400.0,INLAND --117.44,33.93,34.0,1577.0,272.0,880.0,284.0,4.6327,116000.0,INLAND --117.45,33.94,12.0,3539.0,869.0,1987.0,859.0,2.1023,103700.0,INLAND --117.44,33.94,32.0,2349.0,452.0,1479.0,425.0,3.9118,114100.0,INLAND --117.44,33.94,30.0,2992.0,516.0,1521.0,507.0,3.9128,126900.0,INLAND --117.44,33.94,32.0,1814.0,320.0,903.0,306.0,4.1776,118700.0,INLAND --117.44,33.93,33.0,1371.0,236.0,715.0,227.0,4.375,129900.0,INLAND --117.45,33.93,20.0,5998.0,1320.0,3185.0,1199.0,3.2731,113900.0,INLAND --117.44,33.92,33.0,2433.0,525.0,1466.0,517.0,3.0437,110800.0,INLAND --117.45,33.91,29.0,2320.0,422.0,1358.0,415.0,3.7333,121400.0,INLAND --117.45,33.92,35.0,2552.0,588.0,1840.0,551.0,2.2548,113300.0,INLAND --117.39,33.92,25.0,2886.0,583.0,2327.0,577.0,2.3851,113700.0,INLAND --117.4,33.9,32.0,1263.0,178.0,508.0,180.0,3.6667,314100.0,INLAND --117.44,33.9,23.0,4487.0,754.0,2609.0,778.0,4.2788,148700.0,INLAND --117.43,33.91,15.0,14281.0,2511.0,7540.0,2245.0,4.3222,138000.0,INLAND --117.42,33.89,4.0,80.0,10.0,55.0,13.0,7.7197,193800.0,INLAND --117.4,34.01,25.0,1858.0,366.0,1311.0,331.0,2.7083,87800.0,INLAND --117.41,34.01,34.0,1231.0,216.0,841.0,199.0,2.6442,92000.0,INLAND --117.43,34.02,33.0,3084.0,570.0,1753.0,449.0,3.05,97800.0,INLAND --117.42,34.02,9.0,5455.0,882.0,3015.0,858.0,4.2321,162800.0,INLAND --117.4,34.0,24.0,2316.0,599.0,1829.0,532.0,1.6955,86800.0,INLAND --117.4,34.0,31.0,1192.0,307.0,1013.0,283.0,2.0742,76200.0,INLAND --117.41,34.0,38.0,2228.0,571.0,1697.0,530.0,1.9052,83400.0,INLAND --117.43,33.98,21.0,2634.0,421.0,1376.0,406.0,4.2589,152200.0,INLAND --117.42,33.98,16.0,10072.0,2043.0,5913.0,1909.0,3.0606,119500.0,INLAND --117.45,34.01,26.0,3042.0,598.0,1720.0,551.0,2.76,95200.0,INLAND --117.43,34.01,34.0,2101.0,426.0,1150.0,377.0,3.0909,98300.0,INLAND --117.41,34.0,26.0,2372.0,621.0,1647.0,612.0,1.4719,88600.0,INLAND --117.42,34.0,32.0,1617.0,346.0,1153.0,385.0,3.016,96600.0,INLAND --117.43,33.99,18.0,3307.0,547.0,1738.0,457.0,4.566,116900.0,INLAND --117.44,33.99,12.0,9966.0,1517.0,5008.0,1492.0,4.5625,171300.0,INLAND --117.5,34.0,15.0,1929.0,317.0,1237.0,316.0,4.4063,128500.0,INLAND --117.49,33.99,21.0,2050.0,392.0,1153.0,336.0,4.84,116400.0,INLAND --117.48,33.98,20.0,2451.0,475.0,1785.0,456.0,3.3966,115000.0,INLAND --117.49,33.98,17.0,2727.0,462.0,1691.0,448.0,4.8371,160600.0,INLAND --117.5,33.98,21.0,2394.0,416.0,1291.0,381.0,4.2099,138700.0,INLAND --117.47,33.98,8.0,12106.0,1913.0,5810.0,1717.0,4.9886,158100.0,INLAND --117.48,34.01,23.0,2000.0,376.0,1361.0,388.0,4.369,121100.0,INLAND --117.49,34.02,35.0,2051.0,427.0,1466.0,425.0,3.6711,108200.0,INLAND --117.49,34.02,21.0,3736.0,738.0,2021.0,640.0,4.4545,142400.0,INLAND --117.51,34.02,24.0,7779.0,1835.0,3996.0,1765.0,2.1764,135300.0,INLAND --117.48,34.0,12.0,6751.0,1153.0,3266.0,1134.0,3.8529,145500.0,INLAND --117.51,34.0,36.0,3791.0,746.0,2258.0,672.0,3.2067,124700.0,INLAND --117.52,33.99,14.0,13562.0,2057.0,7600.0,2086.0,5.2759,182900.0,INLAND --117.53,33.97,34.0,1293.0,215.0,774.0,217.0,3.8906,141000.0,INLAND --117.53,33.97,29.0,1430.0,273.0,872.0,283.0,4.0833,141000.0,INLAND --117.51,33.97,35.0,352.0,62.0,184.0,57.0,3.6691,137500.0,INLAND --117.53,34.02,19.0,256.0,34.0,101.0,28.0,5.3269,375000.0,INLAND --117.6,33.94,26.0,2925.0,575.0,1921.0,501.0,3.1859,153100.0,INLAND --117.55,34.0,17.0,3583.0,700.0,1587.0,719.0,2.6979,75000.0,INLAND --117.53,33.94,21.0,5675.0,935.0,2834.0,865.0,4.2263,203200.0,INLAND --117.55,33.94,30.0,5398.0,926.0,2672.0,864.0,4.4762,163900.0,INLAND --117.56,33.94,29.0,266.0,42.0,136.0,40.0,1.625,164300.0,INLAND --117.56,33.94,6.0,575.0,73.0,318.0,88.0,7.0215,257100.0,INLAND --117.57,33.93,3.0,1240.0,151.0,519.0,146.0,7.5408,271900.0,INLAND --117.55,33.95,17.0,3196.0,444.0,1581.0,462.0,5.9333,229400.0,INLAND --117.59,33.91,7.0,10223.0,1491.0,5205.0,1509.0,5.4872,203400.0,INLAND --117.57,33.9,7.0,3797.0,850.0,2369.0,720.0,3.5525,137600.0,INLAND --117.56,33.89,16.0,693.0,185.0,365.0,176.0,2.3417,191700.0,INLAND --117.55,33.89,25.0,2999.0,439.0,1396.0,458.0,5.6973,164800.0,INLAND --117.52,33.89,2.0,17978.0,3217.0,7305.0,2463.0,5.1695,220800.0,INLAND --117.6,33.91,15.0,1864.0,271.0,1006.0,288.0,7.2379,251000.0,INLAND --117.55,33.93,25.0,5187.0,934.0,2725.0,860.0,4.1865,154300.0,INLAND --117.55,33.92,24.0,2807.0,501.0,1653.0,509.0,4.8167,163300.0,INLAND --117.55,33.9,21.0,1839.0,324.0,871.0,307.0,3.4459,198800.0,INLAND --117.53,33.92,12.0,2290.0,319.0,728.0,228.0,6.1561,233500.0,INLAND --117.58,33.92,16.0,4157.0,586.0,2036.0,594.0,6.155,246400.0,INLAND --117.57,33.91,22.0,2620.0,396.0,1324.0,362.0,5.3735,214600.0,INLAND --117.59,33.93,17.0,338.0,47.0,200.0,46.0,7.8118,244200.0,INLAND --117.5,33.93,19.0,4741.0,835.0,2903.0,796.0,4.3723,135600.0,INLAND --117.49,33.91,17.0,5364.0,1020.0,3754.0,936.0,3.2857,139100.0,INLAND --117.5,33.92,31.0,2529.0,513.0,1504.0,426.0,2.9821,115600.0,INLAND --117.5,33.92,28.0,2101.0,337.0,1061.0,348.0,4.55,146800.0,INLAND --117.51,33.95,12.0,9016.0,1486.0,4285.0,1457.0,4.9984,169100.0,INLAND --117.46,33.95,34.0,1565.0,296.0,1142.0,328.0,3.6979,99600.0,INLAND --117.47,33.95,15.0,6248.0,1249.0,3795.0,1128.0,4.1264,124600.0,INLAND --117.5,33.96,12.0,7923.0,1470.0,4861.0,1385.0,4.2985,139200.0,INLAND --117.5,33.95,29.0,932.0,153.0,711.0,172.0,4.8214,143400.0,INLAND --117.46,33.94,26.0,2481.0,620.0,2411.0,552.0,1.7059,85800.0,INLAND --117.47,33.94,34.0,559.0,139.0,532.0,137.0,3.0687,88500.0,INLAND --117.48,33.94,19.0,1891.0,465.0,1693.0,416.0,2.7813,112900.0,INLAND --117.48,33.94,29.0,1625.0,336.0,1046.0,320.0,3.1985,117300.0,INLAND --117.49,33.94,28.0,2787.0,490.0,1684.0,467.0,4.0256,127100.0,INLAND --117.46,33.93,16.0,4112.0,880.0,2821.0,857.0,3.0122,114700.0,INLAND --117.46,33.93,19.0,4780.0,861.0,3043.0,766.0,3.7431,132800.0,INLAND --117.46,33.92,21.0,713.0,142.0,476.0,142.0,3.5208,121100.0,INLAND --117.47,33.93,33.0,919.0,208.0,724.0,235.0,3.4028,110500.0,INLAND --117.47,33.94,34.0,2086.0,417.0,1501.0,395.0,3.2311,105600.0,INLAND --117.46,33.94,35.0,1566.0,294.0,1056.0,279.0,3.5227,105400.0,INLAND --117.48,33.93,31.0,2191.0,459.0,1564.0,450.0,2.6776,122000.0,INLAND --117.47,33.92,18.0,3869.0,773.0,2500.0,726.0,3.6583,126100.0,INLAND --117.49,33.93,26.0,2970.0,576.0,2156.0,558.0,3.9522,124600.0,INLAND --117.47,33.91,21.0,3491.0,760.0,1920.0,669.0,2.2241,127300.0,INLAND --117.46,33.9,10.0,9738.0,2130.0,4936.0,1840.0,3.3187,144800.0,INLAND --117.48,33.89,14.0,10395.0,1799.0,6295.0,1855.0,4.7295,149900.0,INLAND --117.49,33.9,7.0,10235.0,2238.0,5271.0,2094.0,3.6071,159100.0,INLAND --117.48,33.91,22.0,3611.0,666.0,1869.0,649.0,4.2207,141100.0,INLAND --117.44,33.88,5.0,2589.0,351.0,1109.0,360.0,6.8089,334100.0,INLAND --117.51,33.89,16.0,5418.0,1005.0,2690.0,1088.0,4.0556,158000.0,INLAND --117.51,33.88,24.0,3044.0,602.0,2541.0,564.0,4.131,123800.0,INLAND --117.52,33.88,21.0,722.0,178.0,770.0,165.0,2.5656,102500.0,INLAND --117.53,33.88,22.0,2855.0,667.0,2453.0,624.0,3.1312,91000.0,INLAND --117.5,33.87,4.0,6755.0,1017.0,2866.0,850.0,5.0493,239800.0,INLAND --117.56,33.88,36.0,838.0,210.0,722.0,180.0,2.4861,96200.0,INLAND --117.58,33.89,14.0,1731.0,404.0,1269.0,351.0,2.3654,107900.0,INLAND --117.55,33.88,19.0,2472.0,618.0,2143.0,610.0,2.2372,108800.0,INLAND --117.57,33.87,33.0,2076.0,517.0,1374.0,480.0,2.2197,138200.0,INLAND --117.56,33.88,40.0,1196.0,294.0,1052.0,258.0,2.0682,113000.0,INLAND --117.57,33.88,35.0,1755.0,446.0,1453.0,428.0,2.316,119400.0,INLAND --117.57,33.88,39.0,679.0,164.0,769.0,179.0,2.3036,110600.0,INLAND --117.58,33.87,42.0,765.0,171.0,590.0,177.0,1.6875,113500.0,INLAND --117.59,33.88,7.0,3586.0,959.0,2695.0,877.0,2.4387,117000.0,INLAND --117.59,33.88,13.0,3239.0,849.0,2751.0,813.0,2.6111,107000.0,INLAND --117.58,33.88,16.0,1739.0,478.0,1235.0,420.0,2.2969,116100.0,INLAND --117.57,33.87,37.0,621.0,156.0,443.0,135.0,2.3333,122800.0,INLAND --117.57,33.87,27.0,1786.0,287.0,939.0,278.0,5.1929,165000.0,INLAND --117.58,33.87,17.0,2772.0,449.0,1685.0,461.0,5.0464,163900.0,INLAND --117.58,33.87,30.0,701.0,131.0,356.0,125.0,3.2917,144300.0,INLAND --117.58,33.87,34.0,1511.0,272.0,773.0,265.0,3.5313,142100.0,INLAND --117.55,33.85,4.0,8207.0,1373.0,3887.0,1304.0,4.8686,195300.0,INLAND --117.56,33.83,28.0,895.0,127.0,346.0,115.0,5.4788,339300.0,INLAND --117.58,33.85,6.0,16431.0,2640.0,8222.0,2553.0,5.2861,195100.0,INLAND --117.54,33.82,6.0,202.0,29.0,75.0,28.0,4.125,216700.0,INLAND --117.55,33.83,6.0,502.0,76.0,228.0,65.0,4.2386,500001.0,INLAND --117.6,33.85,9.0,6538.0,955.0,2928.0,892.0,5.3006,221400.0,<1H OCEAN --117.56,33.86,25.0,6964.0,1066.0,3240.0,1036.0,5.2898,177100.0,INLAND --117.55,33.87,18.0,8136.0,1584.0,4976.0,1516.0,3.9414,137100.0,INLAND --117.64,33.88,13.0,8010.0,1366.0,3920.0,1309.0,5.536,204800.0,<1H OCEAN --117.6,33.87,18.0,6450.0,1165.0,3716.0,1113.0,4.2721,150300.0,INLAND --117.6,33.86,23.0,2949.0,473.0,1671.0,477.0,5.195,161000.0,INLAND --117.6,33.87,15.0,7626.0,1570.0,3823.0,1415.0,3.4419,138100.0,INLAND --117.64,33.87,2.0,17470.0,2727.0,5964.0,1985.0,6.2308,257900.0,<1H OCEAN --117.52,33.84,20.0,688.0,146.0,575.0,144.0,3.55,111000.0,INLAND --117.52,33.83,22.0,2397.0,400.0,1347.0,403.0,4.46,189800.0,INLAND --117.53,33.83,7.0,2191.0,324.0,1156.0,310.0,5.5362,195600.0,INLAND --117.54,33.76,5.0,5846.0,1035.0,3258.0,1001.0,4.7965,160800.0,<1H OCEAN --117.52,33.82,14.0,3776.0,580.0,1877.0,559.0,5.1365,215000.0,INLAND --117.36,33.88,15.0,2857.0,421.0,1361.0,382.0,4.6875,189800.0,INLAND --117.33,33.9,2.0,12837.0,1842.0,4636.0,1453.0,5.1512,187800.0,INLAND --117.34,33.89,17.0,2678.0,394.0,1225.0,367.0,5.363,211300.0,INLAND --117.38,33.89,12.0,3964.0,524.0,1707.0,549.0,5.1624,267900.0,INLAND --117.36,33.88,10.0,5600.0,848.0,2573.0,788.0,5.0346,240500.0,INLAND --117.26,33.86,16.0,1171.0,235.0,659.0,216.0,3.1103,110000.0,INLAND --117.33,33.87,14.0,2300.0,335.0,1001.0,311.0,5.1045,161300.0,INLAND --117.3,33.85,15.0,3991.0,751.0,2317.0,657.0,2.9542,127900.0,INLAND --117.28,33.85,16.0,3498.0,702.0,2372.0,672.0,2.3229,118000.0,INLAND --117.43,33.81,13.0,4770.0,718.0,1985.0,662.0,4.2273,295200.0,INLAND --117.4,33.76,8.0,1954.0,330.0,973.0,321.0,4.4875,249100.0,INLAND --117.4,33.85,9.0,7538.0,1125.0,3450.0,1077.0,5.4625,223600.0,INLAND --117.26,33.84,12.0,1159.0,209.0,523.0,159.0,2.7232,123200.0,INLAND --117.32,33.87,15.0,826.0,138.0,440.0,134.0,4.8125,173900.0,INLAND --117.28,33.89,33.0,6982.0,1371.0,5650.0,1195.0,2.5379,152700.0,INLAND --117.34,33.96,15.0,6437.0,1298.0,2805.0,1205.0,4.1883,184500.0,INLAND --117.32,33.96,19.0,3216.0,666.0,1363.0,629.0,3.7585,144500.0,INLAND --117.34,33.94,20.0,4589.0,594.0,1660.0,595.0,7.4141,236500.0,INLAND --117.34,33.94,13.0,7910.0,,3382.0,1176.0,5.5563,214500.0,INLAND --117.31,33.94,7.0,11232.0,1791.0,4218.0,1644.0,5.2713,216500.0,INLAND --117.33,33.98,52.0,1417.0,353.0,881.0,300.0,1.9531,162500.0,INLAND --117.33,33.97,8.0,152.0,19.0,1275.0,20.0,1.625,162500.0,INLAND --117.34,34.0,27.0,321.0,64.0,214.0,67.0,3.175,101600.0,INLAND --117.34,33.98,10.0,17286.0,4952.0,9851.0,4616.0,1.7579,103400.0,INLAND --117.32,33.99,27.0,5464.0,850.0,2400.0,836.0,4.711,133500.0,INLAND --117.31,33.97,28.0,3420.0,691.0,1502.0,656.0,3.4896,140300.0,INLAND --117.29,33.97,4.0,18767.0,3032.0,8805.0,2723.0,4.6667,160600.0,INLAND --117.35,34.01,23.0,3707.0,769.0,1938.0,658.0,2.725,95300.0,INLAND --117.34,34.02,28.0,2683.0,708.0,2047.0,636.0,2.275,85400.0,INLAND --117.32,34.01,23.0,3021.0,527.0,1580.0,533.0,4.4063,129900.0,INLAND --117.24,33.95,11.0,6617.0,1118.0,3710.0,1087.0,4.7877,132600.0,INLAND --117.23,33.94,7.0,13195.0,2696.0,6763.0,2437.0,3.5851,142000.0,INLAND --117.25,33.95,5.0,13096.0,2208.0,6780.0,2180.0,4.2775,138700.0,INLAND --117.23,33.96,5.0,9179.0,1361.0,4573.0,1294.0,5.253,163300.0,INLAND --117.21,33.95,5.0,8403.0,1240.0,3962.0,1150.0,5.2174,155500.0,INLAND --117.14,33.94,5.0,4873.0,639.0,1947.0,568.0,6.3223,223200.0,INLAND --117.21,33.97,3.0,18356.0,2537.0,8437.0,2342.0,5.6409,197700.0,INLAND --117.28,33.94,10.0,972.0,212.0,773.0,219.0,1.3125,135700.0,INLAND --117.28,33.92,35.0,3623.0,841.0,2721.0,766.0,2.1574,86900.0,INLAND --117.27,33.92,13.0,8443.0,1744.0,4885.0,1470.0,3.0907,127200.0,INLAND --117.27,33.93,2.0,337.0,55.0,115.0,49.0,3.1042,164800.0,INLAND --117.24,33.94,15.0,1569.0,423.0,1123.0,369.0,1.6111,113900.0,INLAND --117.24,33.93,12.0,7105.0,1447.0,4520.0,1333.0,3.2705,113200.0,INLAND --117.25,33.93,8.0,10110.0,1761.0,5804.0,1703.0,4.2654,137600.0,INLAND --117.25,33.92,7.0,9812.0,1914.0,5595.0,1729.0,4.1482,124600.0,INLAND --117.23,33.91,9.0,11654.0,2100.0,7596.0,2127.0,4.0473,127200.0,INLAND --117.23,33.89,5.0,11775.0,2031.0,6686.0,1911.0,4.1953,136600.0,INLAND --117.23,33.94,8.0,2405.0,537.0,1594.0,517.0,3.0789,114200.0,INLAND --117.22,33.93,14.0,5104.0,1026.0,3513.0,972.0,3.2148,117000.0,INLAND --117.22,33.92,5.0,16884.0,2865.0,9509.0,2688.0,4.0938,130900.0,INLAND --117.21,33.93,4.0,10002.0,1468.0,5439.0,1397.0,5.0223,152600.0,INLAND --117.16,33.92,12.0,3236.0,502.0,1610.0,502.0,4.7568,143500.0,INLAND --117.22,33.9,8.0,8302.0,1461.0,5155.0,1370.0,4.0467,121500.0,INLAND --117.13,33.89,4.0,1611.0,239.0,275.0,84.0,3.5781,244400.0,INLAND --117.19,33.9,3.0,21060.0,3366.0,9623.0,2812.0,4.189,143000.0,INLAND --117.22,33.87,16.0,56.0,7.0,39.0,14.0,2.625,500001.0,INLAND --117.24,33.85,8.0,1031.0,201.0,606.0,179.0,2.8194,136300.0,INLAND --117.17,33.83,7.0,77.0,12.0,64.0,15.0,4.6,187500.0,INLAND --117.2,33.83,14.0,1265.0,230.0,621.0,173.0,3.6618,161300.0,INLAND --117.23,33.83,2.0,1424.0,251.0,681.0,192.0,4.0833,100000.0,INLAND --117.21,33.82,2.0,4198.0,805.0,1943.0,673.0,3.9052,122100.0,INLAND --117.22,33.81,4.0,9911.0,1946.0,5145.0,1661.0,3.4237,113700.0,INLAND --117.21,33.71,16.0,8476.0,1758.0,2711.0,1427.0,2.1848,97900.0,<1H OCEAN --117.2,33.72,8.0,5528.0,1073.0,1674.0,918.0,2.5335,110100.0,<1H OCEAN --117.2,33.72,16.0,5373.0,1079.0,1573.0,933.0,1.9912,98600.0,<1H OCEAN --117.2,33.71,24.0,4210.0,920.0,1283.0,829.0,2.0881,83300.0,<1H OCEAN --117.2,33.7,23.0,6323.0,1196.0,1984.0,1124.0,2.3276,92400.0,<1H OCEAN --117.19,33.7,24.0,5783.0,1256.0,1990.0,1151.0,1.9014,83500.0,<1H OCEAN --117.19,33.69,3.0,6484.0,1037.0,3295.0,1074.0,4.5881,136400.0,<1H OCEAN --117.27,33.68,8.0,26322.0,4072.0,9360.0,3361.0,5.3238,228900.0,<1H OCEAN --117.25,33.7,10.0,5156.0,941.0,2294.0,747.0,3.58,113400.0,<1H OCEAN --117.23,33.68,10.0,3659.0,650.0,1476.0,515.0,3.8869,125900.0,<1H OCEAN --117.22,33.66,12.0,1869.0,356.0,1007.0,323.0,3.125,117200.0,<1H OCEAN --117.17,33.66,2.0,7401.0,1187.0,2826.0,839.0,4.1386,177300.0,<1H OCEAN --117.07,33.67,11.0,939.0,187.0,557.0,190.0,2.375,145800.0,INLAND --117.11,33.83,14.0,2715.0,500.0,1540.0,464.0,3.8036,139600.0,INLAND --117.11,33.78,13.0,1914.0,339.0,930.0,304.0,4.1875,161200.0,INLAND --117.08,33.82,6.0,1771.0,293.0,935.0,279.0,4.065,148200.0,INLAND --117.18,33.78,7.0,1697.0,424.0,808.0,354.0,1.3417,169300.0,INLAND --117.11,33.75,17.0,4174.0,851.0,1845.0,780.0,2.2618,96100.0,INLAND --117.16,33.76,11.0,4934.0,929.0,2508.0,840.0,2.625,155400.0,INLAND --117.22,33.74,7.0,1810.0,386.0,931.0,355.0,2.5221,109200.0,<1H OCEAN --117.06,33.78,17.0,2813.0,565.0,1345.0,488.0,2.5847,145300.0,INLAND --117.14,33.81,13.0,4496.0,756.0,2044.0,695.0,3.2778,148800.0,INLAND --117.22,33.8,3.0,5284.0,920.0,2703.0,729.0,4.0717,126500.0,INLAND --117.09,33.71,13.0,1974.0,426.0,1276.0,408.0,1.972,90500.0,INLAND --117.07,33.72,16.0,4928.0,960.0,2132.0,853.0,2.7983,112500.0,INLAND --117.11,33.74,18.0,4799.0,1035.0,1966.0,944.0,2.1182,71300.0,INLAND --117.15,33.7,2.0,6305.0,1265.0,2489.0,1152.0,3.1319,111500.0,INLAND --117.16,33.73,10.0,2381.0,454.0,1323.0,477.0,2.6322,140700.0,INLAND --117.23,33.79,17.0,3318.0,759.0,2016.0,673.0,2.2969,89300.0,INLAND --117.23,33.78,23.0,3465.0,703.0,2672.0,607.0,1.9767,81500.0,INLAND --117.23,33.77,5.0,2108.0,496.0,1666.0,461.0,2.0,83000.0,INLAND --117.29,33.83,15.0,4173.0,804.0,2393.0,713.0,2.4662,118300.0,INLAND --117.32,33.8,11.0,3196.0,576.0,1757.0,552.0,4.0982,173300.0,INLAND --117.26,33.81,22.0,4249.0,922.0,2405.0,846.0,2.1549,146500.0,INLAND --117.24,33.77,9.0,6907.0,1379.0,3665.0,1290.0,2.8401,104200.0,INLAND --117.31,33.75,19.0,3173.0,678.0,2204.0,606.0,2.1484,129200.0,<1H OCEAN --117.27,33.77,16.0,2876.0,576.0,1859.0,545.0,2.0878,101300.0,<1H OCEAN --117.29,33.72,19.0,2248.0,427.0,1207.0,368.0,2.817,110000.0,<1H OCEAN --117.28,33.72,11.0,1161.0,235.0,640.0,210.0,2.1667,114600.0,<1H OCEAN --117.39,33.69,5.0,6529.0,997.0,3464.0,1006.0,5.3275,168700.0,<1H OCEAN --117.37,33.7,8.0,4345.0,865.0,2425.0,785.0,3.2481,123800.0,<1H OCEAN --117.34,33.71,10.0,2591.0,486.0,1255.0,425.0,3.1513,154300.0,<1H OCEAN --117.31,33.67,9.0,981.0,169.0,596.0,156.0,3.1832,157400.0,<1H OCEAN --117.35,33.69,11.0,1229.0,236.0,581.0,190.0,3.102,111300.0,<1H OCEAN --117.33,33.67,27.0,4376.0,1003.0,2667.0,870.0,1.9194,100600.0,<1H OCEAN --117.35,33.68,10.0,516.0,107.0,282.0,96.0,4.2788,125000.0,<1H OCEAN --117.38,33.67,9.0,13288.0,2728.0,7235.0,2350.0,3.375,131800.0,<1H OCEAN --117.38,33.67,17.0,10145.0,2306.0,4776.0,1749.0,2.2423,132600.0,<1H OCEAN --117.35,33.64,23.0,6859.0,1535.0,3405.0,1351.0,2.5395,109200.0,<1H OCEAN --117.29,33.63,7.0,16010.0,2726.0,7139.0,2426.0,3.8056,162200.0,<1H OCEAN --117.28,33.66,15.0,4573.0,928.0,2513.0,832.0,2.6949,163600.0,<1H OCEAN --117.43,33.55,8.0,446.0,62.0,188.0,68.0,9.4356,465600.0,<1H OCEAN --117.36,33.6,10.0,4097.0,813.0,2082.0,731.0,3.2258,159300.0,<1H OCEAN --117.25,33.65,10.0,1652.0,316.0,725.0,233.0,3.5125,155600.0,<1H OCEAN --117.19,33.64,12.0,1481.0,265.0,757.0,243.0,3.235,210700.0,<1H OCEAN --117.21,33.61,7.0,7722.0,1324.0,2975.0,1161.0,3.6273,150900.0,<1H OCEAN --117.2,33.58,2.0,30450.0,5033.0,9419.0,3197.0,4.5936,174300.0,<1H OCEAN --117.16,33.61,3.0,2744.0,428.0,1223.0,366.0,4.7944,215300.0,<1H OCEAN --117.12,33.61,2.0,2569.0,431.0,1232.0,388.0,4.3651,145600.0,<1H OCEAN --117.16,33.57,2.0,20391.0,3245.0,7132.0,2716.0,3.9443,187300.0,<1H OCEAN --117.16,33.54,4.0,4952.0,1000.0,2912.0,943.0,3.7538,147500.0,<1H OCEAN --117.05,33.52,5.0,3471.0,530.0,1541.0,502.0,4.8083,347700.0,<1H OCEAN --116.96,33.52,9.0,2802.0,471.0,1155.0,421.0,4.125,392100.0,INLAND --117.1,33.56,6.0,1868.0,289.0,750.0,247.0,4.3833,307600.0,<1H OCEAN --117.02,33.6,7.0,1972.0,352.0,964.0,317.0,3.244,337200.0,INLAND --116.96,33.62,8.0,1003.0,167.0,388.0,140.0,4.2917,221900.0,INLAND --117.22,33.48,5.0,1585.0,247.0,510.0,181.0,6.9136,493300.0,<1H OCEAN --117.19,33.53,6.0,108.0,18.0,43.0,17.0,3.475,187500.0,<1H OCEAN --117.18,33.51,13.0,270.0,42.0,120.0,42.0,6.993,500001.0,<1H OCEAN --117.12,33.49,4.0,21988.0,4055.0,8824.0,3252.0,3.9963,191100.0,<1H OCEAN --117.12,33.52,4.0,30401.0,4957.0,13251.0,4339.0,4.5841,212300.0,<1H OCEAN --117.15,33.45,4.0,9089.0,1413.0,3886.0,1243.0,4.6904,174200.0,<1H OCEAN --116.99,33.46,13.0,1614.0,410.0,846.0,270.0,2.83,43000.0,<1H OCEAN --117.23,33.57,6.0,13724.0,2269.0,5860.0,1986.0,3.9617,183000.0,<1H OCEAN --117.27,33.55,4.0,6112.0,890.0,2088.0,712.0,5.5351,429000.0,<1H OCEAN --117.32,33.51,4.0,966.0,133.0,311.0,92.0,5.2066,500001.0,<1H OCEAN --117.02,33.71,6.0,8278.0,1579.0,3062.0,1446.0,3.0043,134700.0,INLAND --116.91,33.71,19.0,6807.0,1164.0,2703.0,1055.0,3.1591,189700.0,INLAND --116.89,33.73,15.0,2094.0,316.0,937.0,277.0,5.3623,201300.0,INLAND --116.95,33.68,11.0,1183.0,178.0,543.0,147.0,4.4792,173900.0,INLAND --116.9,33.65,15.0,652.0,149.0,248.0,97.0,2.1071,93800.0,INLAND --116.92,33.63,18.0,397.0,89.0,239.0,80.0,2.8125,143800.0,INLAND --116.99,33.73,13.0,16148.0,3474.0,6159.0,3232.0,1.9961,97800.0,INLAND --116.9,33.74,14.0,2281.0,426.0,894.0,430.0,2.3712,127900.0,INLAND --116.95,33.75,19.0,2238.0,573.0,1190.0,507.0,2.0714,85800.0,INLAND --116.95,33.75,23.0,4676.0,1096.0,2770.0,1057.0,1.7847,109500.0,INLAND --116.93,33.75,14.0,6027.0,1148.0,3136.0,1036.0,2.964,121500.0,INLAND --116.93,33.74,15.0,3757.0,666.0,1693.0,654.0,3.6806,112800.0,INLAND --116.95,33.74,20.0,2233.0,431.0,1024.0,399.0,2.4554,89400.0,INLAND --116.96,33.73,20.0,4735.0,973.0,2306.0,904.0,3.069,87000.0,INLAND --116.95,33.73,21.0,4587.0,810.0,2233.0,765.0,3.2371,94500.0,INLAND --116.95,33.74,18.0,1996.0,405.0,1270.0,400.0,2.7083,91200.0,INLAND --116.94,33.74,19.0,2901.0,445.0,1414.0,475.0,4.6406,118900.0,INLAND --116.94,33.73,17.0,5160.0,851.0,2344.0,781.0,3.7175,120000.0,INLAND --116.93,33.73,13.0,3603.0,573.0,1644.0,515.0,4.0433,132300.0,INLAND --116.96,33.75,35.0,3269.0,757.0,2328.0,705.0,2.5898,76300.0,INLAND --116.97,33.74,31.0,2712.0,628.0,1519.0,629.0,1.942,86200.0,INLAND --116.97,33.75,22.0,3740.0,965.0,2011.0,824.0,1.3039,77500.0,INLAND --116.99,33.75,18.0,9601.0,2401.0,4002.0,2106.0,1.4366,77000.0,INLAND --116.98,33.74,25.0,4952.0,1062.0,1589.0,1024.0,1.8446,85700.0,INLAND --116.97,33.74,20.0,3674.0,792.0,1498.0,758.0,2.2161,76900.0,INLAND --116.96,33.74,19.0,3649.0,755.0,1717.0,696.0,2.2115,87600.0,INLAND --116.94,33.77,14.0,7240.0,1410.0,2708.0,1240.0,2.4145,137600.0,INLAND --117.01,33.75,15.0,2873.0,903.0,1094.0,659.0,1.8015,105100.0,INLAND --116.95,33.76,10.0,6890.0,1702.0,3141.0,1451.0,1.7079,95900.0,INLAND --116.98,33.77,12.0,5829.0,1309.0,2711.0,1118.0,1.9707,107900.0,INLAND --116.99,33.76,12.0,7626.0,1704.0,2823.0,1554.0,2.1722,69400.0,INLAND --117.0,33.74,8.0,5330.0,1529.0,2143.0,1107.0,2.1103,94400.0,INLAND --117.02,33.73,14.0,3700.0,750.0,1171.0,695.0,1.9476,112500.0,INLAND --116.99,33.77,7.0,10352.0,2007.0,3559.0,1689.0,2.2925,113100.0,INLAND --117.02,33.76,20.0,1317.0,203.0,453.0,158.0,2.8393,120700.0,INLAND --116.98,33.83,15.0,2228.0,472.0,653.0,350.0,2.683,139300.0,INLAND --117.02,33.81,10.0,6317.0,1335.0,2625.0,1094.0,2.3,108900.0,INLAND --116.95,33.79,8.0,10997.0,2205.0,5060.0,1949.0,2.1979,95300.0,INLAND --116.95,33.79,20.0,2399.0,546.0,1726.0,542.0,1.8845,77700.0,INLAND --116.96,33.79,21.0,2990.0,691.0,2108.0,660.0,2.0135,83000.0,INLAND --116.97,33.78,24.0,2680.0,606.0,1728.0,527.0,2.535,74800.0,INLAND --116.95,33.78,24.0,3409.0,804.0,1939.0,739.0,1.7303,74000.0,INLAND --116.89,33.79,12.0,701.0,130.0,434.0,110.0,2.0577,56700.0,INLAND --116.87,33.76,5.0,4116.0,761.0,1714.0,717.0,2.5612,130800.0,INLAND --116.88,33.74,20.0,3111.0,623.0,1000.0,508.0,1.5982,140000.0,INLAND --116.89,33.75,23.0,2719.0,538.0,930.0,485.0,2.0154,81700.0,INLAND --116.91,33.75,13.0,10886.0,2127.0,4266.0,1955.0,2.3169,123400.0,INLAND --116.86,33.73,13.0,2604.0,443.0,978.0,417.0,2.933,170700.0,INLAND --117.04,34.0,25.0,3750.0,781.0,1594.0,785.0,2.4167,104900.0,INLAND --117.06,34.0,33.0,1575.0,326.0,879.0,282.0,2.5357,94400.0,INLAND --117.04,34.0,21.0,4624.0,852.0,2174.0,812.0,3.5255,132100.0,INLAND --116.99,33.99,22.0,4227.0,658.0,1849.0,619.0,4.7356,195900.0,INLAND --117.01,33.97,18.0,4775.0,886.0,1868.0,836.0,2.3355,118800.0,INLAND --116.95,33.97,14.0,5320.0,974.0,1947.0,843.0,3.1393,116300.0,INLAND --116.97,33.96,12.0,5876.0,1222.0,2992.0,1151.0,2.4322,112100.0,INLAND --117.11,33.98,25.0,1254.0,312.0,715.0,301.0,2.7344,149000.0,INLAND --117.02,33.95,5.0,1822.0,367.0,798.0,313.0,2.8783,105200.0,INLAND --117.03,33.89,6.0,78.0,11.0,27.0,10.0,3.125,187500.0,INLAND --116.96,33.94,22.0,1999.0,497.0,1304.0,479.0,1.4063,81900.0,INLAND --116.99,33.92,26.0,503.0,69.0,293.0,59.0,3.7083,147500.0,INLAND --116.86,33.97,11.0,658.0,131.0,376.0,120.0,2.3977,58000.0,INLAND --116.79,33.99,16.0,319.0,68.0,212.0,67.0,1.4688,90000.0,INLAND --116.77,33.92,19.0,2307.0,525.0,1266.0,437.0,1.6875,63000.0,INLAND --116.81,33.9,17.0,2009.0,469.0,820.0,381.0,1.3286,81800.0,INLAND --116.89,33.86,2.0,6900.0,1238.0,1950.0,980.0,3.0417,146300.0,INLAND --116.95,33.86,1.0,6.0,2.0,8.0,2.0,1.625,55000.0,INLAND --116.86,33.84,18.0,521.0,118.0,174.0,74.0,2.7788,91100.0,INLAND --116.98,33.94,27.0,3459.0,640.0,1760.0,654.0,3.4545,89800.0,INLAND --116.98,33.93,40.0,2277.0,498.0,1391.0,453.0,1.9472,73200.0,INLAND --116.97,33.94,29.0,3197.0,632.0,1722.0,603.0,3.0432,91200.0,INLAND --116.97,33.93,29.0,2793.0,722.0,1583.0,626.0,1.424,73200.0,INLAND --116.98,33.93,33.0,376.0,83.0,267.0,88.0,2.1581,68300.0,INLAND --116.9,33.98,30.0,3915.0,672.0,1820.0,643.0,3.6339,98600.0,INLAND --116.93,33.93,13.0,7804.0,1594.0,3297.0,1469.0,2.0549,95600.0,INLAND --116.89,33.93,29.0,4549.0,916.0,2494.0,912.0,2.0976,72600.0,INLAND --116.88,33.93,37.0,1495.0,429.0,865.0,342.0,1.2188,55000.0,INLAND --116.9,33.93,34.0,3183.0,738.0,1820.0,647.0,2.2321,71800.0,INLAND --116.91,34.0,18.0,553.0,100.0,215.0,82.0,5.5,193800.0,INLAND --116.87,33.94,35.0,4448.0,906.0,2736.0,843.0,2.218,73400.0,INLAND --116.87,33.93,32.0,3141.0,812.0,2589.0,721.0,1.4556,54600.0,INLAND --116.87,33.91,37.0,1858.0,361.0,1632.0,310.0,2.7536,73100.0,INLAND --116.89,33.92,10.0,2653.0,621.0,1967.0,598.0,2.6643,81000.0,INLAND --116.75,33.83,16.0,5277.0,1070.0,657.0,276.0,3.3333,143400.0,INLAND --116.8,33.8,35.0,324.0,63.0,158.0,39.0,3.4167,100000.0,INLAND --116.71,33.75,25.0,10665.0,2161.0,1874.0,852.0,3.0625,150500.0,INLAND --116.68,33.71,21.0,3460.0,711.0,658.0,255.0,3.5882,161100.0,INLAND --116.74,33.62,11.0,2385.0,661.0,682.0,242.0,2.9141,214300.0,INLAND --116.8,33.52,3.0,830.0,145.0,272.0,104.0,3.8281,163500.0,INLAND --116.89,33.48,14.0,1016.0,219.0,443.0,169.0,2.8071,137500.0,INLAND --116.87,33.57,12.0,1153.0,265.0,446.0,195.0,3.038,128100.0,INLAND --116.72,33.56,13.0,3166.0,682.0,1250.0,475.0,2.355,122900.0,INLAND --116.48,33.61,8.0,1294.0,272.0,457.0,199.0,2.9167,115300.0,INLAND --116.57,33.64,10.0,489.0,82.0,183.0,74.0,6.2702,345500.0,INLAND --116.76,33.46,6.0,1251.0,268.0,544.0,216.0,3.0694,173400.0,INLAND --116.42,33.51,26.0,186.0,48.0,102.0,39.0,2.5625,103100.0,INLAND --116.6,33.49,16.0,3730.0,827.0,1346.0,592.0,2.183,113500.0,INLAND --116.69,33.5,13.0,1187.0,255.0,442.0,179.0,1.9107,155700.0,INLAND --116.39,33.82,15.0,11115.0,2257.0,4122.0,1653.0,2.7219,74400.0,INLAND --116.71,33.94,12.0,549.0,109.0,209.0,90.0,3.0208,66300.0,INLAND --116.51,33.89,21.0,1284.0,306.0,537.0,233.0,1.95,61000.0,INLAND --116.61,33.93,35.0,321.0,71.0,157.0,61.0,2.8056,68100.0,INLAND --116.57,33.94,29.0,551.0,166.0,224.0,107.0,1.1917,50000.0,INLAND --116.57,34.0,20.0,260.0,67.0,69.0,50.0,3.5208,76600.0,INLAND --116.44,33.93,17.0,5293.0,1266.0,1201.0,599.0,1.6849,88400.0,INLAND --116.36,33.88,11.0,12557.0,3098.0,2453.0,1232.0,1.7844,78500.0,INLAND --116.52,33.97,13.0,3921.0,754.0,1902.0,665.0,3.3616,89600.0,INLAND --116.51,33.96,16.0,4913.0,1395.0,2518.0,1132.0,1.4665,61100.0,INLAND --116.53,33.95,18.0,2990.0,648.0,1280.0,532.0,2.625,68200.0,INLAND --116.5,33.95,10.0,7249.0,1882.0,4274.0,1621.0,1.6983,66600.0,INLAND --116.51,33.94,12.0,3369.0,780.0,1315.0,584.0,1.7388,66000.0,INLAND --116.48,33.96,11.0,1381.0,300.0,644.0,248.0,2.3382,89400.0,INLAND --116.47,33.94,18.0,2233.0,471.0,919.0,388.0,3.2578,85200.0,INLAND --116.48,33.94,10.0,3254.0,913.0,923.0,486.0,1.8,81000.0,INLAND --116.5,33.98,5.0,4332.0,868.0,1420.0,567.0,4.0417,146400.0,INLAND --116.51,33.84,16.0,980.0,193.0,454.0,185.0,4.0729,100000.0,INLAND --116.63,33.89,22.0,1540.0,364.0,610.0,268.0,1.5227,71000.0,INLAND --116.52,33.84,17.0,4465.0,859.0,853.0,445.0,3.6875,130400.0,INLAND --116.54,33.87,16.0,3648.0,1035.0,1687.0,581.0,1.9167,70400.0,INLAND --116.57,33.84,18.0,7962.0,1652.0,2009.0,921.0,3.3897,230200.0,INLAND --116.53,33.85,16.0,10077.0,2186.0,3048.0,1337.0,2.9647,110900.0,INLAND --116.55,33.84,28.0,2992.0,562.0,676.0,346.0,5.7613,500001.0,INLAND --116.53,33.84,28.0,8399.0,1839.0,3470.0,1340.0,2.5885,159000.0,INLAND --116.52,33.85,13.0,7559.0,1444.0,3189.0,1105.0,3.4886,112500.0,INLAND --116.5,33.82,16.0,343.0,85.0,29.0,14.0,2.1042,87500.0,INLAND --116.49,33.82,27.0,3316.0,636.0,2362.0,532.0,2.9569,65900.0,INLAND --116.52,33.82,21.0,10227.0,2315.0,3623.0,1734.0,2.5212,145200.0,INLAND --116.54,33.82,12.0,9482.0,2501.0,2725.0,1300.0,1.5595,115600.0,INLAND --116.56,33.83,36.0,1765.0,399.0,451.0,264.0,2.6083,321900.0,INLAND --116.48,33.8,15.0,3004.0,615.0,437.0,210.0,3.6667,90000.0,INLAND --116.5,33.81,26.0,5032.0,1229.0,3086.0,1183.0,2.5399,94800.0,INLAND --116.52,33.81,12.0,12396.0,2552.0,2548.0,1265.0,3.4394,162200.0,INLAND --116.54,33.81,31.0,6814.0,1714.0,2628.0,1341.0,2.1176,124100.0,INLAND --116.54,33.81,24.0,6087.0,1217.0,1721.0,833.0,3.1493,199400.0,INLAND --116.49,33.8,13.0,8789.0,1875.0,1274.0,688.0,3.7396,148900.0,INLAND --116.54,33.8,22.0,6050.0,1387.0,1432.0,890.0,2.2216,183900.0,INLAND --116.57,33.76,25.0,2616.0,547.0,581.0,343.0,3.1364,301600.0,INLAND --116.5,33.69,20.0,4810.0,1074.0,1304.0,740.0,2.25,248100.0,INLAND --116.54,33.79,18.0,9374.0,1780.0,1678.0,919.0,3.9737,235600.0,INLAND --116.53,33.78,18.0,2547.0,463.0,411.0,214.0,2.5489,220500.0,INLAND --116.53,33.88,5.0,4423.0,763.0,1906.0,667.0,4.6855,125200.0,INLAND --116.48,33.84,5.0,5480.0,1371.0,1050.0,485.0,1.7204,137500.0,INLAND --116.48,33.79,14.0,9425.0,2020.0,1711.0,1000.0,2.6298,145200.0,INLAND --116.47,33.84,3.0,9169.0,1512.0,3838.0,1270.0,4.3111,142500.0,INLAND --116.46,33.82,6.0,4863.0,920.0,3010.0,828.0,3.9508,104200.0,INLAND --116.47,33.81,7.0,10105.0,2481.0,6274.0,2095.0,2.4497,90900.0,INLAND --116.46,33.79,10.0,6960.0,1487.0,1130.0,661.0,2.1411,136400.0,INLAND --116.43,33.81,8.0,6710.0,1343.0,2069.0,781.0,3.5223,115100.0,INLAND --116.42,33.79,12.0,7095.0,1260.0,1179.0,570.0,4.9444,285000.0,INLAND --116.43,33.78,17.0,4293.0,712.0,1091.0,464.0,6.1437,232100.0,INLAND --116.45,33.78,16.0,5228.0,992.0,1177.0,639.0,3.0859,134600.0,INLAND --116.42,33.76,14.0,16921.0,2837.0,2524.0,1262.0,7.6281,341700.0,INLAND --116.4,33.78,8.0,3059.0,500.0,612.0,208.0,6.8729,259200.0,INLAND --116.45,33.8,9.0,5534.0,1206.0,2283.0,1008.0,3.6161,99100.0,INLAND --116.36,33.78,6.0,24121.0,4522.0,4176.0,2221.0,3.3799,239300.0,INLAND --116.38,33.74,7.0,17579.0,3479.0,3581.0,1820.0,4.084,194500.0,INLAND --116.33,33.75,5.0,19107.0,3923.0,2880.0,1376.0,4.036,158500.0,INLAND --116.31,33.73,19.0,12467.0,2508.0,4086.0,1761.0,3.2846,131900.0,INLAND --116.46,33.78,25.0,1137.0,414.0,604.0,240.0,1.3801,55000.0,INLAND --116.46,33.78,33.0,2565.0,745.0,2301.0,638.0,2.5477,83000.0,INLAND --116.47,33.77,26.0,4300.0,767.0,1557.0,669.0,4.4107,122500.0,INLAND --116.47,33.78,27.0,1781.0,441.0,759.0,340.0,3.3162,113600.0,INLAND --116.38,33.73,10.0,11836.0,2405.0,3811.0,1570.0,4.0079,134500.0,INLAND --116.37,33.72,17.0,8626.0,1859.0,3497.0,1337.0,3.312,121300.0,INLAND --116.39,33.72,19.0,7646.0,1618.0,2496.0,1075.0,3.5569,128000.0,INLAND --116.38,33.71,17.0,12509.0,2460.0,2737.0,1423.0,4.5556,258100.0,INLAND --116.39,33.69,10.0,11659.0,2007.0,2186.0,1083.0,6.9833,238800.0,INLAND --116.37,33.72,19.0,6190.0,1355.0,2242.0,1043.0,3.0021,152300.0,INLAND --116.44,33.77,18.0,4872.0,1110.0,955.0,656.0,2.2439,97500.0,INLAND --116.43,33.75,24.0,2596.0,438.0,473.0,237.0,3.7727,500001.0,INLAND --116.44,33.74,5.0,846.0,249.0,117.0,67.0,7.9885,403300.0,INLAND --116.41,33.74,25.0,2475.0,476.0,910.0,387.0,3.3639,168800.0,INLAND --116.41,33.74,17.0,4289.0,893.0,958.0,440.0,2.4659,177800.0,INLAND --116.42,33.68,15.0,3895.0,782.0,900.0,529.0,2.2208,138300.0,INLAND --116.37,33.69,7.0,8806.0,1542.0,858.0,448.0,7.8005,318100.0,INLAND --116.33,33.72,11.0,12327.0,2000.0,2450.0,1139.0,7.4382,353100.0,INLAND --116.29,33.67,12.0,5048.0,842.0,883.0,391.0,5.6918,231300.0,INLAND --116.3,33.68,10.0,2387.0,481.0,863.0,304.0,2.8882,137500.0,INLAND --116.31,33.67,15.0,2214.0,410.0,1152.0,350.0,2.9187,93400.0,INLAND --116.31,33.67,11.0,4686.0,851.0,2466.0,731.0,3.3333,91800.0,INLAND --116.31,33.66,7.0,4497.0,831.0,2248.0,713.0,3.6354,98000.0,INLAND --116.31,33.65,8.0,3079.0,558.0,1572.0,474.0,4.5938,102600.0,INLAND --116.26,33.72,10.0,9404.0,1827.0,3208.0,1283.0,3.1086,105800.0,INLAND --116.25,33.69,5.0,1664.0,444.0,907.0,374.0,2.7667,92900.0,INLAND --116.22,33.7,9.0,3861.0,849.0,825.0,401.0,3.2833,124700.0,INLAND --116.24,33.76,9.0,1961.0,595.0,966.0,275.0,3.8125,96700.0,INLAND --116.29,33.74,6.0,12991.0,2555.0,4571.0,1926.0,4.7195,199300.0,INLAND --116.29,33.72,5.0,3584.0,760.0,1097.0,470.0,3.1771,167400.0,INLAND --116.25,33.81,24.0,880.0,187.0,507.0,169.0,3.4583,67500.0,INLAND --116.25,33.75,33.0,278.0,91.0,375.0,81.0,2.025,50000.0,INLAND --116.24,33.72,25.0,5236.0,1039.0,2725.0,935.0,3.775,93400.0,INLAND --116.24,33.71,10.0,9033.0,2224.0,5525.0,1845.0,2.7598,95000.0,INLAND --116.24,33.73,14.0,2774.0,566.0,1530.0,505.0,3.0682,104100.0,INLAND --116.22,33.74,26.0,4120.0,858.0,2918.0,815.0,3.3107,69400.0,INLAND --116.21,33.75,22.0,894.0,,830.0,202.0,3.0673,68200.0,INLAND --116.21,33.72,28.0,2488.0,714.0,2891.0,676.0,2.3169,68900.0,INLAND --116.22,33.73,38.0,1695.0,352.0,1279.0,305.0,2.1217,68500.0,INLAND --116.23,33.73,29.0,1133.0,221.0,918.0,239.0,2.8648,72100.0,INLAND --116.21,33.71,19.0,3114.0,787.0,3157.0,772.0,1.7083,82200.0,INLAND --116.22,33.72,28.0,826.0,258.0,979.0,245.0,1.7172,58800.0,INLAND --116.2,33.7,26.0,2399.0,625.0,2654.0,535.0,2.2989,60600.0,INLAND --116.23,33.72,32.0,4981.0,1326.0,3779.0,1186.0,1.7805,76900.0,INLAND --116.23,33.71,17.0,4874.0,1349.0,5032.0,1243.0,2.444,90000.0,INLAND --116.15,33.69,22.0,197.0,54.0,331.0,70.0,2.9286,112500.0,INLAND --116.11,33.64,20.0,1273.0,354.0,1548.0,355.0,2.0871,84700.0,INLAND --116.15,33.64,10.0,1711.0,499.0,1896.0,443.0,1.6557,65400.0,INLAND --116.2,33.63,23.0,1152.0,273.0,1077.0,235.0,2.5,96300.0,INLAND --116.21,33.66,19.0,1596.0,295.0,1201.0,282.0,3.8846,100900.0,INLAND --116.21,33.68,34.0,584.0,176.0,625.0,166.0,1.5809,100000.0,INLAND --116.25,33.68,16.0,926.0,189.0,238.0,118.0,3.0114,366700.0,INLAND --116.26,33.65,3.0,7437.0,1222.0,574.0,302.0,10.2948,382400.0,INLAND --116.17,33.53,13.0,1713.0,512.0,1978.0,442.0,2.1287,58600.0,INLAND --116.12,33.53,17.0,2421.0,820.0,2971.0,685.0,1.654,100000.0,INLAND --116.01,33.51,24.0,2985.0,958.0,4042.0,905.0,1.7344,66400.0,INLAND --115.84,33.49,20.0,1660.0,379.0,637.0,250.0,2.0347,68900.0,INLAND --116.16,33.68,12.0,1230.0,277.0,1334.0,260.0,2.2679,61400.0,INLAND --116.17,33.67,18.0,3585.0,800.0,3873.0,788.0,2.5714,65900.0,INLAND --116.17,33.66,22.0,639.0,203.0,664.0,153.0,1.9306,47500.0,INLAND --116.19,33.67,16.0,1859.0,476.0,1994.0,477.0,1.7297,67500.0,INLAND --116.18,33.67,25.0,2888.0,654.0,2940.0,660.0,2.2141,66700.0,INLAND --116.18,33.69,17.0,89.0,19.0,79.0,21.0,2.375,155000.0,INLAND --116.19,33.69,11.0,5692.0,1346.0,5682.0,1273.0,2.5383,74000.0,INLAND --116.08,33.86,16.0,381.0,89.0,182.0,75.0,2.425,76100.0,INLAND --115.22,33.54,18.0,1706.0,397.0,3424.0,283.0,1.625,53500.0,INLAND --114.67,33.92,17.0,97.0,24.0,29.0,15.0,1.2656,27500.0,INLAND --115.58,33.88,21.0,1161.0,282.0,724.0,186.0,3.1827,71700.0,INLAND --114.98,33.82,15.0,644.0,129.0,137.0,52.0,3.2097,71300.0,INLAND --114.49,33.97,17.0,2809.0,635.0,83.0,45.0,1.6154,87500.0,INLAND --114.65,33.6,28.0,1678.0,322.0,666.0,256.0,2.9653,94900.0,INLAND --114.68,33.49,20.0,1491.0,360.0,1135.0,303.0,1.6395,44400.0,INLAND --114.56,33.69,17.0,720.0,174.0,333.0,117.0,1.6509,85700.0,INLAND --114.57,33.64,14.0,1501.0,337.0,515.0,226.0,3.1917,73400.0,INLAND --114.57,33.57,20.0,1454.0,326.0,624.0,262.0,1.925,65500.0,INLAND --114.57,33.52,27.0,173.0,35.0,117.0,34.0,2.0833,45000.0,INLAND --114.59,33.61,34.0,4789.0,1175.0,3134.0,1056.0,2.1782,58400.0,INLAND --114.61,33.62,16.0,1187.0,261.0,1115.0,242.0,2.1759,61500.0,INLAND --114.6,33.62,16.0,3741.0,801.0,2434.0,824.0,2.6797,86500.0,INLAND --114.58,33.63,29.0,1387.0,236.0,671.0,239.0,3.3438,74000.0,INLAND --114.62,33.62,26.0,18.0,3.0,5.0,3.0,0.536,275000.0,INLAND --114.58,33.61,25.0,2907.0,680.0,1841.0,633.0,2.6768,82400.0,INLAND --114.6,33.6,21.0,1988.0,483.0,1182.0,437.0,1.625,62000.0,INLAND --121.43,38.58,35.0,5298.0,954.0,1933.0,918.0,3.9167,155700.0,INLAND --121.43,38.57,38.0,2507.0,446.0,888.0,448.0,4.0972,163700.0,INLAND --121.42,38.57,38.0,1878.0,338.0,710.0,342.0,3.7731,161400.0,INLAND --121.44,38.58,43.0,1806.0,339.0,764.0,341.0,3.9271,147100.0,INLAND --121.43,38.57,46.0,2443.0,476.0,939.0,457.0,3.5893,142000.0,INLAND --121.44,38.57,52.0,3080.0,545.0,975.0,495.0,3.776,164500.0,INLAND --121.44,38.58,42.0,2334.0,435.0,892.0,446.0,3.0208,148800.0,INLAND --121.45,38.58,44.0,2314.0,415.0,796.0,388.0,3.4914,153900.0,INLAND --121.45,38.57,48.0,1962.0,356.0,704.0,362.0,3.5313,147900.0,INLAND --121.46,38.58,52.0,4408.0,807.0,1604.0,777.0,3.8914,181600.0,INLAND --121.46,38.58,40.0,1394.0,397.0,689.0,353.0,1.7765,109800.0,INLAND --121.47,38.58,44.0,2092.0,555.0,878.0,528.0,1.5922,115100.0,INLAND --121.47,38.58,43.0,3807.0,952.0,1484.0,850.0,2.3266,137500.0,INLAND --121.47,38.58,52.0,2035.0,483.0,904.0,459.0,2.6976,109300.0,INLAND --121.48,38.58,52.0,576.0,146.0,273.0,127.0,2.01,94300.0,INLAND --121.48,38.58,48.0,2434.0,744.0,1281.0,662.0,1.6277,140600.0,INLAND --121.49,38.58,52.0,2151.0,664.0,1146.0,603.0,1.4034,90300.0,INLAND --121.48,38.59,52.0,1186.0,341.0,1038.0,320.0,1.6116,70500.0,INLAND --121.49,38.59,20.0,463.0,180.0,486.0,190.0,1.0313,85000.0,INLAND --121.49,38.58,52.0,1000.0,324.0,456.0,250.0,1.4375,168800.0,INLAND --121.5,38.58,5.0,761.0,306.0,2031.0,295.0,0.7526,162500.0,INLAND --121.5,38.58,20.0,4018.0,1220.0,1570.0,1122.0,2.5821,125000.0,INLAND --121.5,38.57,9.0,745.0,175.0,297.0,160.0,3.358,77500.0,INLAND --121.49,38.58,52.0,569.0,405.0,509.0,367.0,0.9196,137500.0,INLAND --121.48,38.58,42.0,1823.0,566.0,761.0,503.0,1.245,137500.0,INLAND --121.48,38.57,47.0,2438.0,804.0,1148.0,747.0,1.4301,141700.0,INLAND --121.48,38.57,52.0,567.0,193.0,272.0,187.0,1.625,187500.0,INLAND --121.49,38.57,49.0,1334.0,492.0,634.0,421.0,1.7568,93800.0,INLAND --121.49,38.57,38.0,2410.0,967.0,1091.0,829.0,1.2209,87900.0,INLAND --121.47,38.57,39.0,1360.0,368.0,589.0,338.0,2.1691,150000.0,INLAND --121.47,38.57,48.0,3136.0,926.0,1443.0,877.0,1.9034,123900.0,INLAND --121.48,38.57,38.0,2809.0,805.0,1243.0,785.0,1.8512,114100.0,INLAND --121.47,38.57,52.0,438.0,103.0,176.0,99.0,3.0217,200000.0,INLAND --121.47,38.57,50.0,3233.0,968.0,1223.0,837.0,1.2041,168100.0,INLAND --121.48,38.58,52.0,2501.0,757.0,1081.0,708.0,1.5872,157500.0,INLAND --121.45,38.57,52.0,2006.0,412.0,825.0,384.0,3.2963,236100.0,INLAND --121.45,38.56,52.0,3170.0,476.0,1027.0,457.0,4.63,233800.0,INLAND --121.46,38.56,52.0,1750.0,372.0,764.0,369.0,2.9191,111800.0,INLAND --121.46,38.57,52.0,810.0,172.0,326.0,151.0,3.1583,140000.0,INLAND --121.46,38.57,52.0,893.0,159.0,367.0,160.0,3.2386,213200.0,INLAND --121.46,38.57,52.0,1917.0,367.0,722.0,358.0,3.1484,158900.0,INLAND --121.46,38.57,52.0,1625.0,419.0,614.0,383.0,2.0549,156700.0,INLAND --121.43,38.56,41.0,1105.0,227.0,443.0,210.0,3.1827,131700.0,INLAND --121.44,38.56,45.0,2423.0,466.0,873.0,438.0,3.7167,131900.0,INLAND --121.44,38.56,52.0,906.0,165.0,257.0,166.0,2.8542,139400.0,INLAND --121.43,38.56,50.0,1533.0,288.0,532.0,257.0,2.5417,125900.0,INLAND --121.43,38.56,46.0,1316.0,244.0,452.0,245.0,3.0938,137800.0,INLAND --121.45,38.57,52.0,3994.0,635.0,1295.0,625.0,5.1169,232500.0,INLAND --121.45,38.56,52.0,3420.0,555.0,1301.0,530.0,4.0417,173800.0,INLAND --121.42,38.55,35.0,182.0,39.0,115.0,43.0,2.6417,98900.0,INLAND --121.43,38.55,44.0,3514.0,714.0,1509.0,656.0,2.7333,100100.0,INLAND --121.45,38.55,19.0,3374.0,808.0,1412.0,753.0,1.4889,77600.0,INLAND --121.46,38.56,52.0,1878.0,393.0,722.0,381.0,3.3348,122800.0,INLAND --121.45,38.56,51.0,1250.0,235.0,452.0,232.0,2.625,121200.0,INLAND --121.44,38.55,46.0,1698.0,383.0,726.0,386.0,2.9821,97000.0,INLAND --121.47,38.56,52.0,889.0,162.0,273.0,145.0,3.125,85600.0,INLAND --121.46,38.56,52.0,907.0,180.0,479.0,177.0,2.2125,104000.0,INLAND --121.46,38.55,52.0,3126.0,648.0,1789.0,558.0,1.7616,84100.0,INLAND --121.46,38.55,52.0,2094.0,463.0,1364.0,407.0,1.2235,68500.0,INLAND --121.47,38.55,48.0,1091.0,403.0,926.0,336.0,1.1458,65400.0,INLAND --121.47,38.56,52.0,1532.0,408.0,782.0,369.0,1.8911,85900.0,INLAND --121.47,38.56,51.0,2083.0,559.0,874.0,524.0,2.0221,95800.0,INLAND --121.47,38.56,44.0,1986.0,573.0,1044.0,490.0,1.7328,88100.0,INLAND --121.48,38.56,44.0,1151.0,263.0,518.0,258.0,2.0089,113600.0,INLAND --121.48,38.56,46.0,1476.0,344.0,688.0,353.0,2.7316,134700.0,INLAND --121.48,38.57,38.0,1145.0,324.0,596.0,288.0,1.78,114300.0,INLAND --121.49,38.56,42.0,900.0,239.0,506.0,231.0,1.2813,87500.0,INLAND --121.49,38.56,35.0,1521.0,457.0,987.0,455.0,1.9013,86900.0,INLAND --121.49,38.57,51.0,1492.0,385.0,736.0,365.0,1.7155,108800.0,INLAND --121.5,38.57,41.0,1124.0,344.0,807.0,316.0,1.4712,94600.0,INLAND --121.5,38.57,44.0,1375.0,351.0,766.0,321.0,2.1719,87500.0,INLAND --121.51,38.57,36.0,613.0,166.0,425.0,147.0,2.2031,93800.0,INLAND --121.5,38.57,45.0,858.0,254.0,510.0,200.0,1.0114,80000.0,INLAND --121.5,38.56,46.0,2646.0,645.0,1684.0,616.0,1.128,123100.0,INLAND --121.51,38.56,43.0,1048.0,312.0,1320.0,294.0,1.0649,137500.0,INLAND --121.51,38.55,45.0,3032.0,631.0,1341.0,597.0,2.8417,137900.0,INLAND --121.51,38.55,46.0,1485.0,278.0,531.0,291.0,2.7885,137200.0,INLAND --121.49,38.56,52.0,1844.0,392.0,667.0,353.0,3.0033,103500.0,INLAND --121.49,38.55,52.0,2515.0,460.0,836.0,442.0,3.3844,151100.0,INLAND --121.5,38.55,52.0,2784.0,455.0,957.0,448.0,5.6402,209800.0,INLAND --121.49,38.56,52.0,1777.0,368.0,624.0,350.0,3.6729,137800.0,INLAND --121.49,38.54,47.0,2313.0,536.0,779.0,442.0,2.5639,123000.0,INLAND --121.5,38.54,52.0,1145.0,133.0,334.0,138.0,8.338,405800.0,INLAND --121.49,38.55,51.0,4280.0,632.0,1486.0,621.0,5.0359,224100.0,INLAND --121.5,38.55,49.0,4094.0,634.0,1363.0,659.0,5.2362,236800.0,INLAND --121.5,38.54,44.0,1167.0,201.0,452.0,209.0,3.7344,179800.0,INLAND --121.48,38.55,52.0,2508.0,360.0,832.0,345.0,7.1035,228700.0,INLAND --121.48,38.55,52.0,2037.0,358.0,811.0,375.0,4.3929,162500.0,INLAND --121.48,38.56,50.0,1587.0,448.0,877.0,380.0,2.0833,94300.0,INLAND --121.48,38.55,52.0,1684.0,309.0,675.0,296.0,4.1467,175000.0,INLAND --121.48,38.55,52.0,2216.0,333.0,714.0,327.0,4.8603,191900.0,INLAND --121.48,38.56,52.0,814.0,216.0,327.0,181.0,2.8542,125000.0,INLAND --121.47,38.55,48.0,968.0,310.0,706.0,274.0,0.9948,65400.0,INLAND --121.47,38.55,29.0,1303.0,308.0,861.0,263.0,1.0208,55800.0,INLAND --121.47,38.54,47.0,2085.0,464.0,1346.0,402.0,1.2679,56700.0,INLAND --121.47,38.55,24.0,979.0,287.0,546.0,291.0,1.186,67000.0,INLAND --121.47,38.55,52.0,1384.0,295.0,561.0,244.0,2.0242,94600.0,INLAND --121.45,38.54,47.0,1159.0,250.0,810.0,244.0,2.7787,56000.0,INLAND --121.45,38.54,41.0,1278.0,308.0,839.0,280.0,1.4702,58300.0,INLAND --121.46,38.54,48.0,1001.0,205.0,605.0,175.0,1.8333,58200.0,INLAND --121.46,38.55,40.0,2077.0,435.0,1454.0,385.0,2.0074,57000.0,INLAND --121.42,38.54,29.0,1407.0,265.0,556.0,235.0,3.0521,108000.0,INLAND --121.43,38.54,43.0,2084.0,417.0,912.0,410.0,2.9769,92700.0,INLAND --121.43,38.54,44.0,1879.0,359.0,791.0,345.0,3.15,101500.0,INLAND --121.44,38.54,44.0,2570.0,509.0,1145.0,503.0,2.5694,92400.0,INLAND --121.45,38.54,48.0,3421.0,734.0,1441.0,727.0,1.9485,86600.0,INLAND --121.42,38.54,18.0,2525.0,501.0,1726.0,468.0,2.398,87600.0,INLAND --121.42,38.54,29.0,2358.0,493.0,1071.0,470.0,2.925,94300.0,INLAND --121.43,38.54,42.0,3321.0,688.0,1346.0,658.0,2.4618,101300.0,INLAND --121.44,38.54,39.0,2855.0,,1217.0,562.0,3.2404,93600.0,INLAND --121.44,38.54,47.0,2518.0,501.0,1308.0,471.0,2.5389,75700.0,INLAND --121.41,38.53,35.0,2061.0,371.0,1110.0,342.0,3.1944,79000.0,INLAND --121.41,38.53,37.0,1058.0,224.0,588.0,231.0,2.9737,72100.0,INLAND --121.42,38.53,37.0,1958.0,367.0,1171.0,366.0,2.8298,71200.0,INLAND --121.42,38.53,36.0,1581.0,288.0,832.0,291.0,3.4083,71800.0,INLAND --121.43,38.53,36.0,1488.0,294.0,846.0,279.0,3.1208,82700.0,INLAND --121.43,38.53,36.0,2430.0,426.0,1199.0,437.0,3.1667,81900.0,INLAND --121.44,38.53,37.0,1951.0,432.0,1089.0,411.0,2.3272,80600.0,INLAND --121.41,38.52,25.0,3087.0,720.0,2529.0,708.0,1.8689,66800.0,INLAND --121.42,38.51,21.0,3249.0,666.0,2611.0,663.0,1.9423,87800.0,INLAND --121.42,38.52,32.0,2828.0,556.0,1655.0,485.0,2.5574,72600.0,INLAND --121.43,38.52,43.0,2089.0,399.0,955.0,385.0,2.5898,72100.0,INLAND --121.43,38.52,30.0,3657.0,945.0,2925.0,899.0,1.3927,78300.0,INLAND --121.44,38.52,38.0,2080.0,388.0,995.0,380.0,2.7697,76600.0,INLAND --121.5,38.53,39.0,3184.0,593.0,1188.0,572.0,4.6923,192000.0,INLAND --121.5,38.53,37.0,3642.0,684.0,1508.0,657.0,3.5231,114300.0,INLAND --121.51,38.53,34.0,1613.0,265.0,631.0,266.0,4.25,191900.0,INLAND --121.51,38.53,36.0,2603.0,408.0,966.0,419.0,5.3135,216600.0,INLAND --121.5,38.52,37.0,2008.0,466.0,1261.0,427.0,2.2574,59100.0,INLAND --121.51,38.51,33.0,2918.0,439.0,1085.0,427.0,5.5208,171300.0,INLAND --121.51,38.51,31.0,1595.0,217.0,542.0,236.0,6.6112,251600.0,INLAND --121.51,38.52,30.0,3236.0,588.0,1167.0,569.0,4.0972,181400.0,INLAND --121.48,38.53,38.0,1451.0,315.0,786.0,340.0,2.3487,101600.0,INLAND --121.49,38.53,40.0,2966.0,536.0,1225.0,505.0,3.125,130600.0,INLAND --121.49,38.54,37.0,1655.0,393.0,841.0,355.0,1.6932,78400.0,INLAND --121.48,38.53,43.0,1378.0,280.0,708.0,280.0,2.3542,103900.0,INLAND --121.48,38.52,36.0,1824.0,357.0,906.0,356.0,2.9911,96400.0,INLAND --121.49,38.52,37.0,1902.0,413.0,955.0,384.0,3.1014,96800.0,INLAND --121.49,38.53,42.0,1468.0,281.0,571.0,271.0,3.3906,124200.0,INLAND --121.48,38.54,41.0,3364.0,685.0,1841.0,626.0,2.1975,73500.0,INLAND --121.48,38.53,37.0,1704.0,361.0,902.0,356.0,1.9837,62300.0,INLAND --121.47,38.54,36.0,2099.0,510.0,1845.0,483.0,1.4138,52500.0,INLAND --121.47,38.53,43.0,3215.0,725.0,2400.0,625.0,1.4625,54400.0,INLAND --121.47,38.53,44.0,543.0,146.0,506.0,125.0,1.3646,65400.0,INLAND --121.49,38.51,18.0,700.0,169.0,260.0,128.0,2.9219,152900.0,INLAND --121.49,38.5,32.0,2364.0,439.0,1331.0,449.0,3.319,84500.0,INLAND --121.49,38.5,30.0,1715.0,271.0,842.0,263.0,3.0313,87900.0,INLAND --121.5,38.5,29.0,2049.0,330.0,787.0,309.0,3.7414,98500.0,INLAND --121.49,38.51,30.0,3166.0,607.0,1857.0,579.0,3.1768,79500.0,INLAND --121.51,38.54,34.0,2815.0,479.0,1075.0,471.0,3.9792,164800.0,INLAND --121.52,38.53,31.0,3089.0,585.0,1366.0,561.0,4.2885,160300.0,INLAND --121.52,38.53,30.0,3377.0,623.0,1289.0,594.0,3.5737,171200.0,INLAND --121.52,38.51,23.0,6876.0,1456.0,2942.0,1386.0,3.0963,156900.0,INLAND --121.51,38.49,21.0,4426.0,790.0,1856.0,761.0,4.1,158300.0,INLAND --121.51,38.5,25.0,4719.0,745.0,1857.0,739.0,5.0371,180200.0,INLAND --121.55,38.51,14.0,5490.0,851.0,2415.0,837.0,6.5253,216800.0,INLAND --121.55,38.5,9.0,4868.0,738.0,2036.0,750.0,5.7621,204600.0,INLAND --121.54,38.5,15.0,6093.0,1051.0,2415.0,997.0,4.2075,183600.0,INLAND --121.54,38.51,17.0,8482.0,1590.0,3362.0,1513.0,4.2216,217900.0,INLAND --121.53,38.5,17.0,3087.0,477.0,1365.0,495.0,6.4667,216800.0,INLAND --121.53,38.51,20.0,6132.0,1324.0,2595.0,1174.0,3.1607,178900.0,INLAND --121.52,38.5,19.0,4900.0,805.0,2519.0,855.0,4.8497,184400.0,INLAND --121.53,38.48,5.0,27870.0,5027.0,11935.0,4855.0,4.8811,212200.0,INLAND --121.52,38.49,5.0,3344.0,800.0,1341.0,670.0,3.6196,152800.0,INLAND --121.54,38.49,6.0,9104.0,1535.0,3759.0,1481.0,5.1442,174500.0,INLAND --121.48,38.52,34.0,2561.0,497.0,1583.0,530.0,3.1583,95800.0,INLAND --121.48,38.51,24.0,979.0,201.0,723.0,205.0,2.5926,72300.0,INLAND --121.48,38.5,23.0,2679.0,792.0,1740.0,659.0,1.3679,70300.0,INLAND --121.49,38.49,26.0,1557.0,301.0,986.0,300.0,2.6613,77700.0,INLAND --121.5,38.49,29.0,3606.0,690.0,2317.0,696.0,2.7368,78200.0,INLAND --121.5,38.49,32.0,4013.0,725.0,2032.0,675.0,3.3689,83400.0,INLAND --121.48,38.49,26.0,3165.0,806.0,2447.0,752.0,1.5908,78600.0,INLAND --121.49,38.49,26.0,4629.0,832.0,2902.0,816.0,2.735,74600.0,INLAND --121.47,38.49,17.0,3595.0,790.0,2760.0,770.0,2.3233,78800.0,INLAND --121.47,38.48,25.0,2969.0,551.0,1745.0,487.0,2.6382,76200.0,INLAND --121.49,38.47,26.0,6121.0,1185.0,4224.0,1105.0,2.3496,68000.0,INLAND --121.47,38.48,24.0,2359.0,462.0,2048.0,476.0,3.2702,67300.0,INLAND --121.45,38.54,38.0,1865.0,384.0,1052.0,354.0,1.7891,60500.0,INLAND --121.45,38.53,38.0,1746.0,388.0,1142.0,315.0,1.7714,69900.0,INLAND --121.45,38.53,34.0,1893.0,415.0,884.0,395.0,2.1679,75400.0,INLAND --121.45,38.53,34.0,1717.0,354.0,848.0,306.0,2.4741,87000.0,INLAND --121.46,38.54,39.0,1453.0,324.0,843.0,281.0,1.7692,63900.0,INLAND --121.46,38.53,37.0,2745.0,588.0,1607.0,556.0,1.8007,65400.0,INLAND --121.46,38.54,36.0,1825.0,411.0,1226.0,391.0,1.5292,55700.0,INLAND --121.47,38.52,26.0,2177.0,638.0,1971.0,560.0,1.2575,66800.0,INLAND --121.46,38.51,18.0,2123.0,606.0,1576.0,599.0,1.5735,110000.0,INLAND --121.45,38.5,25.0,3033.0,665.0,1559.0,627.0,2.7101,99500.0,INLAND --121.47,38.5,17.0,1895.0,424.0,620.0,417.0,1.7188,137500.0,INLAND --121.47,38.51,52.0,20.0,4.0,74.0,9.0,3.625,80000.0,INLAND --121.47,38.52,42.0,2316.0,515.0,1597.0,522.0,1.8205,60400.0,INLAND --121.44,38.52,36.0,3446.0,950.0,2460.0,847.0,1.6521,69700.0,INLAND --121.45,38.51,29.0,4221.0,901.0,2294.0,850.0,2.2245,75900.0,INLAND --121.45,38.52,37.0,1705.0,325.0,827.0,326.0,2.6288,71200.0,INLAND --121.45,38.52,37.0,1477.0,321.0,888.0,312.0,2.5592,70300.0,INLAND --121.46,38.52,29.0,3873.0,797.0,2237.0,706.0,2.1736,72100.0,INLAND --121.46,38.51,32.0,2437.0,592.0,1596.0,557.0,1.68,84100.0,INLAND --121.46,38.52,34.0,1279.0,285.0,963.0,268.0,2.71,65600.0,INLAND --121.44,38.51,27.0,7212.0,1606.0,4828.0,1549.0,2.214,82400.0,INLAND --121.44,38.5,27.0,2527.0,439.0,1089.0,415.0,4.088,96800.0,INLAND --121.44,38.5,20.0,2033.0,586.0,1281.0,521.0,1.4007,97500.0,INLAND --121.42,38.51,15.0,7901.0,1422.0,4769.0,1418.0,2.8139,90400.0,INLAND --121.42,38.5,24.0,7740.0,1539.0,4333.0,1397.0,3.025,87900.0,INLAND --121.46,38.49,15.0,10211.0,1995.0,5656.0,1752.0,2.575,107900.0,INLAND --121.45,38.49,34.0,3573.0,662.0,1540.0,620.0,3.5323,109800.0,INLAND --121.44,38.49,31.0,4297.0,788.0,2083.0,771.0,3.3878,109300.0,INLAND --121.45,38.48,28.0,2780.0,510.0,1638.0,533.0,2.9571,103100.0,INLAND --121.43,38.48,12.0,4602.0,930.0,2299.0,860.0,3.0625,90500.0,INLAND --121.44,38.48,12.0,4929.0,1010.0,2621.0,870.0,2.7262,109800.0,INLAND --121.45,38.48,24.0,1766.0,340.0,1028.0,372.0,3.5402,98700.0,INLAND --121.46,38.48,8.0,3593.0,659.0,1710.0,530.0,3.5227,93100.0,INLAND --121.42,38.49,17.0,13180.0,2444.0,7235.0,2335.0,3.363,103000.0,INLAND --121.42,38.48,13.0,7880.0,1992.0,4749.0,1882.0,1.9657,116000.0,INLAND --121.4,38.49,12.0,7290.0,1283.0,3960.0,1248.0,3.5968,106300.0,INLAND --121.38,38.49,11.0,8537.0,1643.0,4224.0,1648.0,2.9647,108900.0,INLAND --121.39,38.51,19.0,1808.0,375.0,758.0,320.0,2.0062,92000.0,INLAND --121.42,38.56,21.0,2066.0,748.0,2548.0,734.0,1.3571,55000.0,INLAND --121.39,38.56,19.0,8507.0,1470.0,3517.0,1453.0,4.3644,137400.0,INLAND --121.38,38.55,23.0,2790.0,430.0,1407.0,460.0,4.3288,133700.0,INLAND --121.38,38.55,26.0,1532.0,264.0,781.0,285.0,4.6944,130900.0,INLAND --121.39,38.55,25.0,2171.0,431.0,1053.0,422.0,3.5278,126200.0,INLAND --121.39,38.55,18.0,1734.0,467.0,783.0,447.0,1.9044,154300.0,INLAND --121.4,38.55,26.0,2697.0,398.0,1088.0,389.0,5.0,142500.0,INLAND --121.41,38.55,14.0,2534.0,705.0,1495.0,583.0,1.9167,156300.0,INLAND --121.4,38.55,19.0,2497.0,494.0,748.0,442.0,2.925,142400.0,INLAND --121.4,38.53,38.0,152.0,30.0,65.0,35.0,0.9274,67500.0,INLAND --121.48,38.59,43.0,987.0,240.0,1253.0,237.0,0.9204,82100.0,INLAND --121.5,38.59,43.0,88.0,21.0,119.0,19.0,1.725,67500.0,INLAND --121.44,38.6,16.0,2987.0,864.0,1240.0,755.0,2.8231,137500.0,INLAND --121.41,38.56,17.0,7228.0,1369.0,2455.0,1365.0,5.1385,179500.0,INLAND --121.37,38.57,22.0,4899.0,847.0,1701.0,826.0,5.2449,387000.0,INLAND --121.39,38.57,33.0,2648.0,357.0,863.0,359.0,8.4016,338700.0,INLAND --121.4,38.57,25.0,2022.0,295.0,639.0,278.0,5.8416,297600.0,INLAND --121.41,38.57,16.0,4429.0,1124.0,1538.0,960.0,3.2443,190700.0,INLAND --121.4,38.56,22.0,2623.0,357.0,838.0,368.0,7.143,327800.0,INLAND --121.42,38.6,23.0,3713.0,1078.0,2194.0,1018.0,1.7451,89600.0,INLAND --121.42,38.6,35.0,1166.0,193.0,574.0,190.0,2.2452,102800.0,INLAND --121.42,38.6,36.0,1327.0,209.0,613.0,230.0,3.8672,111400.0,INLAND --121.43,38.61,33.0,2289.0,576.0,1100.0,503.0,2.1694,95700.0,INLAND --121.44,38.61,34.0,172.0,38.0,149.0,55.0,2.6442,55000.0,INLAND --121.41,38.61,36.0,3099.0,605.0,1322.0,623.0,3.4784,105500.0,INLAND --121.41,38.6,16.0,5407.0,1467.0,2523.0,1265.0,2.0471,104200.0,INLAND --121.41,38.59,18.0,5527.0,1446.0,2883.0,1305.0,2.6485,114500.0,INLAND --121.41,38.59,17.0,12355.0,3630.0,5692.0,3073.0,2.5245,99100.0,INLAND --121.41,38.58,18.0,6955.0,1882.0,2803.0,1740.0,3.089,141400.0,INLAND --121.39,38.61,36.0,2396.0,536.0,1225.0,515.0,2.9559,136600.0,INLAND --121.39,38.6,22.0,5773.0,1320.0,2607.0,1250.0,2.5238,118800.0,INLAND --121.4,38.61,37.0,1994.0,347.0,782.0,355.0,4.1488,136400.0,INLAND --121.38,38.59,36.0,1239.0,237.0,764.0,222.0,3.0156,103000.0,INLAND --121.39,38.59,33.0,2091.0,468.0,1053.0,470.0,2.2264,108100.0,INLAND --121.39,38.59,34.0,1151.0,234.0,563.0,251.0,2.8,113600.0,INLAND --121.4,38.59,25.0,2228.0,534.0,1130.0,481.0,2.5363,124600.0,INLAND --121.4,38.59,18.0,2614.0,624.0,1181.0,616.0,2.0432,156800.0,INLAND --121.38,38.59,36.0,2253.0,434.0,1018.0,426.0,3.2596,98700.0,INLAND --121.39,38.58,36.0,2019.0,369.0,878.0,356.0,2.8462,93400.0,INLAND --121.39,38.58,41.0,2577.0,365.0,913.0,339.0,6.3406,448300.0,INLAND --121.37,38.6,35.0,3137.0,544.0,1312.0,549.0,3.788,136800.0,INLAND --121.37,38.6,36.0,1119.0,144.0,414.0,150.0,5.8336,283300.0,INLAND --121.38,38.6,36.0,1249.0,159.0,362.0,143.0,6.8469,446400.0,INLAND --121.38,38.61,34.0,2888.0,496.0,1168.0,479.0,3.6053,148600.0,INLAND --121.37,38.59,36.0,2523.0,401.0,927.0,398.0,3.5179,207800.0,INLAND --121.37,38.58,37.0,2839.0,390.0,1006.0,400.0,7.3343,280400.0,INLAND --121.38,38.58,38.0,2968.0,475.0,1176.0,454.0,5.0497,191700.0,INLAND --121.38,38.59,38.0,1839.0,287.0,685.0,276.0,4.5313,189400.0,INLAND --121.37,38.59,36.0,2388.0,369.0,838.0,356.0,4.775,194100.0,INLAND --121.35,38.61,27.0,3900.0,776.0,1549.0,761.0,2.7788,115700.0,INLAND --121.35,38.6,27.0,4314.0,611.0,1662.0,575.0,5.0997,170100.0,INLAND --121.36,38.6,35.0,1930.0,328.0,805.0,338.0,4.4643,133000.0,INLAND --121.36,38.6,36.0,1275.0,227.0,530.0,245.0,3.875,133600.0,INLAND --121.36,38.61,35.0,2355.0,365.0,993.0,354.0,5.0492,144100.0,INLAND --121.35,38.59,29.0,1285.0,193.0,460.0,206.0,5.3243,265700.0,INLAND --121.36,38.59,32.0,3303.0,480.0,1185.0,436.0,5.0508,225700.0,INLAND --121.36,38.58,25.0,3196.0,406.0,978.0,419.0,8.4699,344000.0,INLAND --121.35,38.58,20.0,2992.0,378.0,1105.0,368.0,8.6572,320200.0,INLAND --121.34,38.58,18.0,1631.0,228.0,599.0,228.0,7.8031,267200.0,INLAND --121.34,38.59,23.0,2912.0,421.0,1132.0,410.0,5.9174,225900.0,INLAND --121.34,38.59,22.0,3273.0,480.0,1151.0,463.0,8.05,380000.0,INLAND --121.36,38.64,24.0,6540.0,1008.0,2667.0,1031.0,5.5632,175200.0,INLAND --121.36,38.63,28.0,6119.0,985.0,2631.0,934.0,4.875,146400.0,INLAND --121.35,38.62,28.0,4175.0,796.0,2032.0,830.0,3.4299,164000.0,INLAND --121.35,38.61,25.0,4916.0,1243.0,2140.0,1136.0,2.5511,134100.0,INLAND --121.36,38.61,37.0,2191.0,394.0,951.0,362.0,3.8882,159500.0,INLAND --121.36,38.62,34.0,2447.0,503.0,1077.0,456.0,3.058,133000.0,INLAND --121.36,38.63,30.0,2619.0,370.0,940.0,359.0,4.7283,164500.0,INLAND --121.37,38.64,36.0,322.0,48.0,133.0,59.0,4.6111,139300.0,INLAND --121.38,38.64,19.0,4563.0,1069.0,2256.0,926.0,2.1472,143400.0,INLAND --121.37,38.63,32.0,3658.0,797.0,1452.0,715.0,2.6623,120700.0,INLAND --121.37,38.63,37.0,494.0,86.0,253.0,99.0,4.8194,141100.0,INLAND --121.37,38.63,30.0,5996.0,1018.0,2532.0,1049.0,4.6127,151800.0,INLAND --121.37,38.62,27.0,1743.0,380.0,697.0,368.0,1.6678,166100.0,INLAND --121.38,38.62,34.0,2352.0,610.0,1127.0,592.0,2.2,116500.0,INLAND --121.38,38.62,41.0,774.0,144.0,356.0,150.0,3.5625,115300.0,INLAND --121.37,38.62,43.0,1077.0,199.0,447.0,182.0,3.0139,115600.0,INLAND --121.37,38.61,42.0,945.0,193.0,460.0,193.0,3.7569,127100.0,INLAND --121.37,38.61,39.0,823.0,146.0,329.0,144.0,3.0833,114100.0,INLAND --121.38,38.61,27.0,2375.0,537.0,863.0,452.0,3.0086,126900.0,INLAND --121.39,38.63,30.0,2930.0,739.0,1661.0,668.0,2.7813,118900.0,INLAND --121.39,38.63,34.0,1226.0,180.0,359.0,167.0,3.8068,150400.0,INLAND --121.39,38.61,35.0,2024.0,359.0,786.0,364.0,2.4632,156900.0,INLAND --121.39,38.62,27.0,5693.0,1487.0,2334.0,1387.0,2.2844,170500.0,INLAND --121.39,38.62,45.0,2696.0,624.0,1059.0,582.0,1.8176,160900.0,INLAND --121.4,38.63,30.0,3626.0,834.0,1577.0,806.0,2.517,130400.0,INLAND --121.4,38.63,31.0,1540.0,452.0,1079.0,444.0,1.8571,98700.0,INLAND --121.4,38.62,28.0,3671.0,886.0,1733.0,820.0,2.2292,113200.0,INLAND --121.4,38.61,33.0,3512.0,825.0,1515.0,782.0,1.9908,118800.0,INLAND --121.41,38.62,21.0,3260.0,763.0,1735.0,736.0,2.5162,97500.0,INLAND --121.42,38.62,33.0,3171.0,832.0,1591.0,695.0,2.0786,88600.0,INLAND --121.42,38.61,34.0,1126.0,256.0,589.0,243.0,2.1776,84400.0,INLAND --121.43,38.61,40.0,1134.0,252.0,675.0,249.0,1.3696,65200.0,INLAND --121.42,38.62,41.0,1087.0,272.0,462.0,219.0,2.0224,64900.0,INLAND --121.42,38.63,42.0,1385.0,273.0,740.0,274.0,2.6055,78000.0,INLAND --121.43,38.63,43.0,1009.0,225.0,604.0,218.0,1.6641,67000.0,INLAND --121.42,38.63,42.0,2217.0,536.0,1203.0,507.0,1.9412,73100.0,INLAND --121.43,38.62,36.0,1765.0,438.0,1008.0,382.0,2.0639,73000.0,INLAND --121.44,38.61,41.0,1404.0,313.0,765.0,330.0,1.8792,63300.0,INLAND --121.41,38.64,41.0,1578.0,317.0,897.0,333.0,2.3214,66800.0,INLAND --121.41,38.64,38.0,1384.0,287.0,682.0,280.0,1.9167,64400.0,INLAND --121.42,38.64,42.0,1720.0,382.0,1069.0,362.0,1.8611,60500.0,INLAND --121.42,38.64,44.0,1728.0,367.0,1042.0,349.0,1.6033,58500.0,INLAND --121.42,38.65,21.0,2274.0,495.0,1157.0,445.0,2.098,49800.0,INLAND --121.43,38.65,18.0,909.0,198.0,661.0,176.0,3.1696,77400.0,INLAND --121.43,38.64,34.0,2010.0,411.0,1501.0,422.0,2.0417,65900.0,INLAND --121.44,38.64,18.0,1756.0,442.0,837.0,320.0,1.125,70500.0,INLAND --121.44,38.64,25.0,1678.0,367.0,971.0,307.0,1.0398,62100.0,INLAND --121.44,38.65,28.0,1219.0,240.0,559.0,212.0,3.8295,122200.0,INLAND --121.44,38.63,38.0,1673.0,399.0,1116.0,382.0,1.3302,62200.0,INLAND --121.44,38.63,33.0,1077.0,271.0,753.0,236.0,1.3462,55900.0,INLAND --121.44,38.63,38.0,1402.0,370.0,970.0,382.0,1.6343,71000.0,INLAND --121.44,38.62,37.0,1607.0,385.0,972.0,354.0,1.9107,64700.0,INLAND --121.44,38.62,37.0,3009.0,733.0,1513.0,588.0,1.4387,61000.0,INLAND --121.45,38.65,5.0,2680.0,502.0,1885.0,498.0,2.6369,110000.0,INLAND --121.46,38.65,8.0,3746.0,767.0,2161.0,744.0,3.2039,103400.0,INLAND --121.46,38.65,14.0,3167.0,551.0,1787.0,533.0,3.8125,92600.0,INLAND --121.45,38.64,23.0,1481.0,343.0,1079.0,315.0,1.867,60600.0,INLAND --121.46,38.64,20.0,1517.0,323.0,1287.0,328.0,1.6607,67000.0,INLAND --121.46,38.63,26.0,3185.0,658.0,2444.0,626.0,1.56,67600.0,INLAND --121.45,38.63,28.0,1246.0,295.0,884.0,258.0,1.4397,51700.0,INLAND --121.45,38.62,37.0,1534.0,315.0,1147.0,322.0,2.5643,59800.0,INLAND --121.45,38.62,38.0,2419.0,605.0,1696.0,503.0,1.4861,63100.0,INLAND --121.45,38.61,32.0,2436.0,612.0,1509.0,618.0,1.0424,81400.0,INLAND --121.46,38.61,43.0,705.0,178.0,464.0,159.0,2.4205,60900.0,INLAND --121.46,38.62,35.0,3326.0,696.0,2511.0,649.0,1.9871,60900.0,INLAND --121.44,38.61,33.0,1591.0,466.0,1000.0,418.0,1.0467,70100.0,INLAND --121.45,38.6,44.0,2324.0,413.0,823.0,375.0,4.6625,158900.0,INLAND --121.45,38.61,46.0,1758.0,511.0,1094.0,484.0,1.0685,70000.0,INLAND --121.46,38.61,43.0,1111.0,269.0,613.0,290.0,1.2917,66300.0,INLAND --121.46,38.6,29.0,1978.0,538.0,823.0,490.0,1.9688,135600.0,INLAND --121.45,38.61,34.0,438.0,116.0,263.0,100.0,0.9379,67500.0,INLAND --121.47,38.63,29.0,2197.0,520.0,1374.0,483.0,2.1889,69300.0,INLAND --121.47,38.61,31.0,1072.0,,781.0,281.0,1.6563,65800.0,INLAND --121.47,38.61,35.0,1372.0,360.0,850.0,328.0,1.6331,67500.0,INLAND --121.52,38.65,17.0,1269.0,233.0,494.0,231.0,3.9615,331300.0,INLAND --121.53,38.61,5.0,8149.0,1913.0,2933.0,1616.0,3.6788,178800.0,INLAND --121.49,38.63,6.0,12197.0,2617.0,5634.0,2329.0,3.7449,129300.0,INLAND --121.5,38.62,8.0,16679.0,3457.0,7919.0,3329.0,3.7188,134500.0,INLAND --121.5,38.61,5.0,1395.0,373.0,638.0,322.0,2.6745,225000.0,INLAND --121.5,38.63,6.0,693.0,143.0,276.0,151.0,3.1944,117000.0,INLAND --121.49,38.62,8.0,15309.0,2996.0,7463.0,2885.0,3.9143,129700.0,INLAND --121.49,38.61,6.0,4391.0,974.0,1982.0,914.0,3.4291,105300.0,INLAND --121.48,38.62,23.0,7709.0,1279.0,4147.0,1262.0,3.8272,96600.0,INLAND --121.48,38.61,18.0,1511.0,315.0,1062.0,304.0,2.3438,89400.0,INLAND --121.51,38.69,28.0,800.0,149.0,450.0,158.0,2.1029,108600.0,INLAND --121.59,38.69,32.0,541.0,82.0,229.0,98.0,8.0379,383300.0,INLAND --121.42,38.72,10.0,3054.0,528.0,1932.0,510.0,3.0903,91900.0,INLAND --121.44,38.73,25.0,1287.0,224.0,727.0,236.0,4.7396,135500.0,INLAND --121.47,38.72,26.0,1708.0,299.0,911.0,290.0,4.0227,99800.0,INLAND --121.44,38.71,25.0,2336.0,406.0,1172.0,408.0,3.5129,101200.0,INLAND --121.42,38.7,10.0,2562.0,460.0,1478.0,433.0,4.0625,96200.0,INLAND --121.45,38.7,24.0,2159.0,369.0,1141.0,355.0,3.9853,90400.0,INLAND --121.46,38.7,32.0,965.0,183.0,568.0,188.0,3.8611,93900.0,INLAND --121.43,38.69,28.0,927.0,165.0,542.0,148.0,2.5,96200.0,INLAND --121.44,38.68,19.0,2476.0,534.0,1355.0,463.0,2.0625,94400.0,INLAND --121.42,38.68,32.0,2118.0,345.0,1019.0,338.0,3.725,112200.0,INLAND --121.41,38.69,28.0,1601.0,308.0,848.0,305.0,3.6429,105200.0,INLAND --121.44,38.69,24.0,3124.0,556.0,1512.0,555.0,3.1942,94900.0,INLAND --121.45,38.69,32.0,2962.0,526.0,1542.0,521.0,2.2243,89200.0,INLAND --121.46,38.68,35.0,1299.0,254.0,705.0,245.0,2.8333,103000.0,INLAND --121.47,38.68,19.0,946.0,182.0,474.0,173.0,5.0155,97300.0,INLAND --121.46,38.69,11.0,3335.0,658.0,1963.0,622.0,3.3125,96800.0,INLAND --121.47,38.7,31.0,1007.0,181.0,563.0,185.0,3.625,91300.0,INLAND --121.43,38.66,35.0,1814.0,367.0,1076.0,372.0,2.7179,81100.0,INLAND --121.46,38.66,3.0,3438.0,603.0,1602.0,554.0,3.9914,120500.0,INLAND --121.4,38.66,50.0,880.0,150.0,1148.0,148.0,2.5062,112500.0,INLAND --121.37,38.69,29.0,2103.0,380.0,1124.0,387.0,3.0833,87000.0,INLAND --121.37,38.68,34.0,1086.0,187.0,663.0,190.0,3.3074,84200.0,INLAND --121.38,38.68,35.0,1643.0,298.0,831.0,305.0,4.0673,84200.0,INLAND --121.37,38.68,36.0,1775.0,296.0,937.0,305.0,3.1786,83400.0,INLAND --121.37,38.69,35.0,1851.0,327.0,1007.0,286.0,3.2361,84000.0,INLAND --121.38,38.69,35.0,2943.0,554.0,1460.0,510.0,2.6713,84400.0,INLAND --121.39,38.69,38.0,300.0,47.0,154.0,51.0,4.0909,108300.0,INLAND --121.37,38.69,35.0,1093.0,192.0,590.0,190.0,2.7009,80200.0,INLAND --121.37,38.68,29.0,3757.0,646.0,2022.0,611.0,3.5429,88200.0,INLAND --121.37,38.68,35.0,1620.0,276.0,939.0,277.0,2.5542,72900.0,INLAND --121.38,38.68,35.0,1565.0,290.0,861.0,277.0,2.4844,77000.0,INLAND --121.38,38.68,40.0,67.0,17.0,50.0,32.0,1.7596,93800.0,INLAND --121.37,38.67,36.0,1354.0,258.0,771.0,267.0,2.2723,78800.0,INLAND --121.37,38.67,36.0,1786.0,338.0,974.0,319.0,2.555,72700.0,INLAND --121.38,38.67,37.0,2176.0,460.0,1067.0,357.0,2.3958,78400.0,INLAND --121.38,38.67,38.0,1001.0,228.0,597.0,226.0,2.2788,73400.0,INLAND --121.39,38.67,35.0,562.0,174.0,240.0,106.0,0.9338,112500.0,INLAND --121.37,38.7,18.0,3938.0,649.0,1861.0,606.0,3.6484,95000.0,INLAND --121.38,38.7,25.0,3919.0,764.0,2203.0,783.0,2.2402,89500.0,INLAND --121.39,38.69,30.0,2897.0,506.0,1508.0,478.0,3.865,88400.0,INLAND --121.37,38.7,26.0,2230.0,410.0,1155.0,377.0,3.4911,88200.0,INLAND --121.34,38.69,16.0,2686.0,516.0,1553.0,529.0,3.7857,112700.0,INLAND --121.34,38.69,17.0,1968.0,364.0,996.0,331.0,3.7031,114300.0,INLAND --121.35,38.68,20.0,7085.0,1222.0,3455.0,1229.0,4.3118,120000.0,INLAND --121.35,38.68,18.0,7923.0,1558.0,3789.0,1473.0,3.5403,98600.0,INLAND --121.35,38.72,2.0,21897.0,3513.0,8652.0,2873.0,4.5432,151300.0,INLAND --121.38,38.71,7.0,4842.0,935.0,2857.0,907.0,3.9318,133000.0,INLAND --121.4,38.71,15.0,4680.0,758.0,2626.0,729.0,3.8355,107000.0,INLAND --121.36,38.69,13.0,6850.0,1400.0,4251.0,1421.0,3.6989,93300.0,INLAND --121.35,38.7,5.0,14414.0,2979.0,7608.0,2832.0,3.5802,129600.0,INLAND --121.36,38.67,17.0,2770.0,684.0,1471.0,624.0,2.3683,82500.0,INLAND --121.36,38.67,5.0,5819.0,1507.0,3237.0,1356.0,2.2339,116600.0,INLAND --121.37,38.66,9.0,3184.0,779.0,1929.0,769.0,2.3844,86000.0,INLAND --121.36,38.66,22.0,2878.0,599.0,1362.0,541.0,2.7955,96500.0,INLAND --121.37,38.66,17.0,4866.0,1056.0,2371.0,1030.0,2.4574,103300.0,INLAND --121.38,38.66,17.0,3778.0,939.0,2393.0,862.0,1.8972,100500.0,INLAND --121.38,38.65,34.0,825.0,173.0,355.0,130.0,3.1858,109500.0,INLAND --121.39,38.64,33.0,1503.0,282.0,652.0,229.0,3.6937,99300.0,INLAND --121.34,38.68,28.0,3379.0,552.0,1543.0,556.0,4.2743,124000.0,INLAND --121.34,38.67,34.0,1503.0,264.0,731.0,285.0,4.0352,118500.0,INLAND --121.34,38.67,35.0,643.0,117.0,331.0,134.0,3.0417,120700.0,INLAND --121.34,38.66,16.0,3154.0,860.0,1837.0,793.0,1.9805,92900.0,INLAND --121.35,38.66,8.0,3322.0,805.0,1694.0,774.0,2.7011,130700.0,INLAND --121.34,38.66,17.0,1149.0,257.0,583.0,243.0,2.8092,137500.0,INLAND --121.34,38.66,18.0,4164.0,963.0,2032.0,898.0,2.119,133100.0,INLAND --121.35,38.66,24.0,3313.0,769.0,1631.0,681.0,2.5556,105700.0,INLAND --121.36,38.66,14.0,756.0,141.0,424.0,155.0,3.6953,116100.0,INLAND --121.37,38.64,27.0,1672.0,299.0,757.0,282.0,3.6786,159700.0,INLAND --121.35,38.65,20.0,2498.0,546.0,1185.0,506.0,3.2243,107900.0,INLAND --121.33,38.66,15.0,4371.0,908.0,1842.0,818.0,2.7797,105500.0,INLAND --121.33,38.65,23.0,2446.0,523.0,1132.0,513.0,2.6266,198500.0,INLAND --121.34,38.65,27.0,1595.0,246.0,610.0,253.0,4.6,199000.0,INLAND --121.33,38.65,24.0,3533.0,741.0,1496.0,723.0,2.8106,183200.0,INLAND --121.34,38.64,12.0,2772.0,578.0,1335.0,565.0,3.8068,161000.0,INLAND --121.33,38.64,27.0,2203.0,493.0,1158.0,492.0,2.4342,119500.0,INLAND --121.34,38.64,17.0,2761.0,501.0,1128.0,482.0,3.7562,139700.0,INLAND --121.34,38.63,13.0,3033.0,540.0,1363.0,519.0,4.0036,161700.0,INLAND --121.33,38.63,23.0,1947.0,409.0,866.0,400.0,2.7181,156800.0,INLAND --121.33,38.62,19.0,1853.0,415.0,772.0,397.0,2.2574,135800.0,INLAND --121.34,38.62,20.0,4021.0,864.0,1658.0,730.0,2.4537,153000.0,INLAND --121.34,38.61,22.0,1778.0,408.0,875.0,375.0,2.6023,142200.0,INLAND --121.34,38.61,11.0,1716.0,404.0,722.0,415.0,2.0926,166100.0,INLAND --121.33,38.61,21.0,2453.0,518.0,1326.0,505.0,2.7079,148000.0,INLAND --121.34,38.61,20.0,5801.0,1148.0,2586.0,1063.0,3.9063,162100.0,INLAND --121.33,38.6,25.0,4260.0,607.0,1635.0,640.0,6.2817,288200.0,INLAND --121.29,38.63,24.0,2868.0,527.0,1284.0,487.0,3.3182,213000.0,INLAND --121.3,38.63,31.0,1817.0,372.0,992.0,339.0,3.0972,150000.0,INLAND --121.32,38.63,20.0,7003.0,1409.0,3107.0,1315.0,3.0348,150500.0,INLAND --121.31,38.62,31.0,3114.0,430.0,1121.0,456.0,6.244,240000.0,INLAND --121.32,38.62,29.0,2430.0,448.0,1087.0,394.0,3.0864,177900.0,INLAND --121.32,38.62,33.0,898.0,190.0,470.0,201.0,2.6897,148300.0,INLAND --121.32,38.61,22.0,3902.0,845.0,1870.0,763.0,2.774,190200.0,INLAND --121.31,38.61,17.0,992.0,151.0,316.0,159.0,6.6238,326700.0,INLAND --121.3,38.64,20.0,5001.0,830.0,2330.0,830.0,4.0833,160000.0,INLAND --121.31,38.64,19.0,5407.0,838.0,1927.0,804.0,4.6302,195400.0,INLAND --121.32,38.64,19.0,8501.0,1558.0,3576.0,1467.0,3.6523,158500.0,INLAND --121.31,38.66,27.0,1713.0,282.0,761.0,295.0,5.2081,136400.0,INLAND --121.31,38.66,26.0,1604.0,245.0,751.0,267.0,4.7381,140500.0,INLAND --121.32,38.66,26.0,1149.0,193.0,500.0,194.0,5.078,163400.0,INLAND --121.32,38.66,21.0,1276.0,208.0,501.0,205.0,3.95,143600.0,INLAND --121.32,38.65,23.0,2628.0,499.0,1210.0,453.0,3.0952,157700.0,INLAND --121.31,38.65,21.0,2759.0,409.0,1053.0,374.0,5.5,165700.0,INLAND --121.3,38.66,21.0,3824.0,634.0,1818.0,600.0,3.712,139000.0,INLAND --121.3,38.66,28.0,3391.0,550.0,1546.0,553.0,4.2188,139200.0,INLAND --121.3,38.65,26.0,3192.0,447.0,1132.0,418.0,4.5278,144300.0,INLAND --121.3,38.65,36.0,1665.0,293.0,846.0,306.0,3.5852,121600.0,INLAND --121.21,38.66,15.0,6940.0,1019.0,2829.0,990.0,5.4889,232300.0,INLAND --121.21,38.65,14.0,3443.0,510.0,1413.0,505.0,5.6529,196000.0,INLAND --121.24,38.64,13.0,4491.0,689.0,1657.0,667.0,5.259,249400.0,INLAND --121.23,38.65,19.0,2926.0,476.0,1349.0,480.0,4.6437,212900.0,INLAND --121.23,38.66,19.0,3243.0,546.0,1334.0,515.0,4.8088,169500.0,INLAND --121.24,38.66,14.0,3335.0,440.0,1329.0,429.0,6.2082,250300.0,INLAND --121.28,38.66,17.0,7741.0,1401.0,3153.0,1331.0,3.7869,216100.0,INLAND --121.25,38.66,26.0,3670.0,556.0,1616.0,550.0,5.02,169600.0,INLAND --121.26,38.66,19.0,3170.0,444.0,1344.0,452.0,6.1183,221600.0,INLAND --121.27,38.66,19.0,1891.0,266.0,678.0,255.0,6.1872,188700.0,INLAND --121.27,38.66,15.0,2642.0,520.0,1032.0,475.0,4.1382,189800.0,INLAND --121.25,38.64,21.0,2764.0,363.0,902.0,360.0,5.6864,258700.0,INLAND --121.26,38.65,17.0,2655.0,421.0,991.0,384.0,4.6484,270600.0,INLAND --121.27,38.65,25.0,2787.0,601.0,1247.0,522.0,2.9016,159800.0,INLAND --121.27,38.64,22.0,1597.0,280.0,657.0,273.0,4.3098,213500.0,INLAND --121.26,38.64,40.0,1098.0,175.0,415.0,160.0,4.8375,217400.0,INLAND --121.27,38.65,33.0,1984.0,289.0,842.0,276.0,5.2949,173300.0,INLAND --121.29,38.65,27.0,2744.0,464.0,1340.0,452.0,3.8816,147300.0,INLAND --121.28,38.64,24.0,3459.0,573.0,1336.0,544.0,4.8661,186200.0,INLAND --121.28,38.63,36.0,120.0,16.0,30.0,14.0,10.2264,350000.0,INLAND --121.28,38.64,19.0,3574.0,669.0,1373.0,643.0,3.6298,242100.0,INLAND --121.28,38.71,8.0,4053.0,912.0,2033.0,897.0,2.8973,117100.0,INLAND --121.28,38.7,14.0,5827.0,1246.0,2578.0,1038.0,3.0212,112900.0,INLAND --121.28,38.71,35.0,3095.0,594.0,1550.0,576.0,3.575,113500.0,INLAND --121.28,38.7,15.0,5828.0,1051.0,2868.0,1037.0,3.7813,143200.0,INLAND --121.28,38.68,14.0,11442.0,2690.0,6068.0,2435.0,2.6016,121200.0,INLAND --121.3,38.7,18.0,7334.0,1332.0,3339.0,1271.0,3.235,124700.0,INLAND --121.3,38.69,21.0,6575.0,1105.0,3358.0,1098.0,4.0739,115400.0,INLAND --121.32,38.69,11.0,13796.0,2372.0,6000.0,2250.0,3.8776,124500.0,INLAND --121.33,38.68,13.0,5826.0,1411.0,2244.0,1219.0,1.9093,142900.0,INLAND --121.3,38.71,17.0,5434.0,1106.0,2755.0,1047.0,2.8226,99900.0,INLAND --121.29,38.71,32.0,1875.0,361.0,1027.0,343.0,3.5769,103800.0,INLAND --121.3,38.72,15.0,2514.0,482.0,1166.0,503.0,2.2813,131900.0,INLAND --121.31,38.72,11.0,2306.0,420.0,1308.0,418.0,3.9506,122200.0,INLAND --121.32,38.71,14.0,4594.0,774.0,2474.0,782.0,4.5245,127500.0,INLAND --121.31,38.71,18.0,3998.0,744.0,2071.0,660.0,4.3836,102000.0,INLAND --121.32,38.7,17.0,3214.0,551.0,1879.0,562.0,4.3643,124900.0,INLAND --121.32,38.7,16.0,2966.0,578.0,1365.0,480.0,3.2444,118400.0,INLAND --121.32,38.7,16.0,3592.0,642.0,1740.0,629.0,3.0703,126000.0,INLAND --121.33,38.7,15.0,2226.0,421.0,1004.0,417.0,2.7868,117800.0,INLAND --121.33,38.69,15.0,3137.0,509.0,1635.0,544.0,4.6923,122700.0,INLAND --121.32,38.68,25.0,1252.0,207.0,587.0,217.0,3.5893,146400.0,INLAND --121.32,38.67,10.0,3908.0,890.0,1898.0,798.0,2.8426,130600.0,INLAND --121.32,38.67,21.0,3455.0,706.0,1605.0,704.0,3.1382,91600.0,INLAND --121.31,38.67,26.0,1387.0,226.0,807.0,244.0,4.1563,135700.0,INLAND --121.33,38.67,17.0,2683.0,704.0,1410.0,659.0,1.962,130200.0,INLAND --121.33,38.66,17.0,2767.0,584.0,1275.0,568.0,2.5909,125400.0,INLAND --121.31,38.67,27.0,1998.0,353.0,970.0,343.0,4.8224,115500.0,INLAND --121.32,38.67,31.0,2532.0,479.0,1396.0,467.0,4.0417,114500.0,INLAND --121.29,38.68,12.0,5098.0,1094.0,2029.0,1065.0,3.5444,132500.0,INLAND --121.3,38.69,13.0,2135.0,429.0,779.0,432.0,3.6995,134900.0,INLAND --121.31,38.68,16.0,5179.0,1271.0,2181.0,1151.0,2.1009,82500.0,INLAND --121.31,38.68,22.0,1194.0,207.0,545.0,223.0,3.8603,134300.0,INLAND --121.3,38.67,15.0,4018.0,850.0,2070.0,814.0,3.0733,119800.0,INLAND --121.3,38.68,19.0,2655.0,438.0,1253.0,454.0,5.2817,140600.0,INLAND --121.3,38.67,20.0,1234.0,208.0,649.0,211.0,4.8523,143000.0,INLAND --121.3,38.66,32.0,2915.0,492.0,1292.0,454.0,3.3188,117100.0,INLAND --121.3,38.67,23.0,2145.0,340.0,1022.0,349.0,4.2037,125400.0,INLAND --121.27,38.7,16.0,3747.0,586.0,1817.0,590.0,4.6488,145300.0,INLAND --121.27,38.69,16.0,3389.0,597.0,1674.0,568.0,4.4489,145600.0,INLAND --121.26,38.68,4.0,3080.0,827.0,1195.0,683.0,2.7477,133000.0,INLAND --121.24,38.7,13.0,3243.0,488.0,1585.0,480.0,5.7133,166800.0,INLAND --121.25,38.7,16.0,3262.0,533.0,1794.0,543.0,4.2464,144400.0,INLAND --121.26,38.69,17.0,3917.0,638.0,1809.0,564.0,5.2586,137000.0,INLAND --121.25,38.69,17.0,3050.0,481.0,1490.0,489.0,4.5562,134500.0,INLAND --121.25,38.69,24.0,1014.0,185.0,606.0,194.0,4.1607,112800.0,INLAND --121.24,38.68,20.0,1402.0,236.0,676.0,236.0,3.7426,135500.0,INLAND --121.25,38.68,15.0,1497.0,243.0,730.0,242.0,4.9688,135600.0,INLAND --121.26,38.68,13.0,4256.0,619.0,1948.0,622.0,5.2051,167400.0,INLAND --121.25,38.68,13.0,503.0,70.0,267.0,77.0,6.1943,276100.0,INLAND --121.25,38.67,14.0,6155.0,1034.0,2407.0,941.0,4.2262,244300.0,INLAND --121.26,38.67,18.0,1830.0,313.0,905.0,361.0,4.2273,141800.0,INLAND --121.27,38.67,16.0,3185.0,886.0,1550.0,802.0,2.5199,149000.0,INLAND --121.26,38.66,8.0,1145.0,241.0,447.0,216.0,4.0781,124300.0,INLAND --121.27,38.67,15.0,2116.0,524.0,866.0,519.0,2.7388,111600.0,INLAND --121.27,38.67,15.0,1701.0,346.0,723.0,352.0,3.8906,128700.0,INLAND --121.28,38.68,16.0,3467.0,615.0,1478.0,601.0,3.75,147300.0,INLAND --121.28,38.67,23.0,1727.0,264.0,833.0,258.0,5.4797,160000.0,INLAND --121.28,38.67,29.0,1087.0,174.0,430.0,174.0,4.3625,158800.0,INLAND --121.29,38.68,20.0,1881.0,378.0,921.0,360.0,1.8589,144000.0,INLAND --121.29,38.67,20.0,1992.0,363.0,889.0,346.0,3.6516,130500.0,INLAND --121.25,38.72,15.0,6838.0,941.0,3166.0,926.0,5.2177,162700.0,INLAND --121.27,38.71,16.0,4082.0,666.0,1912.0,652.0,4.4609,142900.0,INLAND --121.25,38.71,14.0,3713.0,637.0,1845.0,635.0,4.3009,143400.0,INLAND --121.26,38.7,9.0,7812.0,1348.0,3275.0,1178.0,4.3826,146600.0,INLAND --121.17,38.69,5.0,7138.0,1227.0,2623.0,1139.0,5.6902,243200.0,INLAND --121.19,38.71,11.0,4415.0,,1520.0,627.0,3.2321,390800.0,INLAND --121.18,38.69,7.0,7104.0,970.0,2772.0,920.0,6.3528,274500.0,INLAND --121.2,38.7,28.0,2970.0,471.0,1379.0,463.0,4.3214,131700.0,INLAND --121.2,38.69,26.0,3077.0,607.0,1603.0,595.0,2.7174,137500.0,INLAND --121.22,38.68,10.0,6262.0,1278.0,2954.0,1169.0,3.4506,139000.0,INLAND --121.22,38.71,23.0,1843.0,273.0,818.0,276.0,4.4695,214700.0,INLAND --121.23,38.71,18.0,4947.0,714.0,2227.0,675.0,4.8542,170500.0,INLAND --121.23,38.69,19.0,5268.0,849.0,2357.0,849.0,3.9226,148700.0,INLAND --121.23,38.67,27.0,5266.0,971.0,2432.0,948.0,3.8954,133000.0,INLAND --121.24,38.67,28.0,3558.0,589.0,1742.0,581.0,4.0182,131700.0,INLAND --121.2,38.68,9.0,2200.0,422.0,938.0,369.0,3.4896,143800.0,INLAND --121.21,38.67,11.0,5500.0,956.0,2827.0,946.0,4.1071,145800.0,INLAND --121.22,38.67,20.0,1412.0,226.0,700.0,227.0,4.05,130700.0,INLAND --121.21,38.67,19.0,2987.0,626.0,1610.0,605.0,3.0533,112100.0,INLAND --121.19,38.67,16.0,1754.0,284.0,773.0,277.0,4.817,147000.0,INLAND --121.2,38.67,26.0,1546.0,287.0,773.0,299.0,2.9803,115400.0,INLAND --121.2,38.67,10.0,3875.0,668.0,1632.0,593.0,4.6902,171000.0,INLAND --121.19,38.66,26.0,1937.0,286.0,769.0,274.0,6.1185,179200.0,INLAND --121.2,38.66,17.0,1605.0,217.0,732.0,241.0,5.47,204800.0,INLAND --121.15,38.69,52.0,240.0,44.0,6675.0,29.0,6.1359,225000.0,INLAND --121.17,38.71,15.0,3084.0,557.0,1040.0,562.0,2.5183,293300.0,INLAND --121.17,38.68,37.0,1252.0,267.0,686.0,256.0,3.0,121900.0,INLAND --121.18,38.67,42.0,2101.0,480.0,945.0,426.0,2.3333,116000.0,INLAND --121.16,38.67,21.0,6198.0,1223.0,2827.0,1179.0,3.7796,159000.0,INLAND --121.15,38.68,6.0,9798.0,1551.0,4583.0,1494.0,5.0159,189600.0,INLAND --121.16,38.68,21.0,3517.0,667.0,1687.0,655.0,3.1161,131600.0,INLAND --121.13,38.66,2.0,12360.0,1747.0,4438.0,1470.0,6.2503,222500.0,INLAND --121.13,38.55,8.0,530.0,109.0,398.0,96.0,4.2031,212500.0,INLAND --121.06,38.51,6.0,6873.0,959.0,2354.0,931.0,6.8869,263100.0,INLAND --121.13,38.47,16.0,2574.0,441.0,1041.0,428.0,3.6645,203400.0,INLAND --121.24,38.63,4.0,11021.0,1565.0,3857.0,1494.0,7.2582,273200.0,INLAND --121.22,38.58,25.0,394.0,94.0,155.0,83.0,2.233,55000.0,INLAND --121.28,38.55,35.0,7088.0,1279.0,4885.0,1272.0,2.6981,112500.0,INLAND --121.31,38.59,35.0,3295.0,560.0,1454.0,536.0,3.1711,101900.0,INLAND --121.32,38.59,21.0,9774.0,1777.0,4674.0,1712.0,3.6817,136100.0,INLAND --121.32,38.59,24.0,4378.0,910.0,2149.0,812.0,2.5035,123700.0,INLAND --121.29,38.61,17.0,13553.0,2474.0,6544.0,2359.0,3.9727,132700.0,INLAND --121.3,38.61,25.0,2707.0,464.0,1423.0,490.0,4.3235,116900.0,INLAND --121.3,38.6,32.0,9534.0,1819.0,4951.0,1710.0,3.3926,103400.0,INLAND --121.27,38.62,13.0,2321.0,539.0,1066.0,497.0,2.7652,95600.0,INLAND --121.28,38.61,22.0,2938.0,619.0,1501.0,561.0,2.7356,96100.0,INLAND --121.28,38.61,23.0,2547.0,504.0,1235.0,469.0,2.4722,103300.0,INLAND --121.29,38.61,26.0,1814.0,299.0,963.0,317.0,4.4519,110500.0,INLAND --121.27,38.61,17.0,6663.0,1369.0,2840.0,1299.0,2.9452,115600.0,INLAND --121.28,38.6,25.0,1122.0,198.0,564.0,213.0,3.1654,111600.0,INLAND --121.28,38.6,17.0,1671.0,378.0,848.0,351.0,3.1194,112500.0,INLAND --121.29,38.6,29.0,1276.0,225.0,600.0,223.0,4.0938,109100.0,INLAND --121.32,38.57,15.0,3369.0,499.0,1733.0,470.0,5.31,127500.0,INLAND --121.33,38.56,17.0,3608.0,682.0,1694.0,666.0,3.311,109400.0,INLAND --121.32,38.57,25.0,692.0,146.0,504.0,167.0,3.6897,101100.0,INLAND --121.32,38.56,18.0,1169.0,186.0,614.0,192.0,4.5766,108700.0,INLAND --121.32,38.54,13.0,4715.0,1090.0,2420.0,1059.0,2.9693,104400.0,INLAND --121.28,38.53,18.0,224.0,38.0,95.0,41.0,3.1042,165000.0,INLAND --121.3,38.58,19.0,2653.0,680.0,1419.0,579.0,2.3787,91300.0,INLAND --121.3,38.58,16.0,1537.0,,1125.0,375.0,2.6471,90700.0,INLAND --121.31,38.58,10.0,2421.0,580.0,962.0,497.0,2.5035,112500.0,INLAND --121.31,38.57,9.0,2748.0,521.0,1663.0,565.0,3.5192,113300.0,INLAND --121.31,38.57,22.0,1229.0,253.0,733.0,250.0,2.5,101600.0,INLAND --121.33,38.57,17.0,1621.0,350.0,706.0,338.0,2.3684,150000.0,INLAND --121.28,38.59,3.0,4188.0,1136.0,2081.0,995.0,3.0481,92500.0,INLAND --121.29,38.59,19.0,2460.0,470.0,1346.0,480.0,3.6563,95600.0,INLAND --121.3,38.59,25.0,3002.0,718.0,1660.0,613.0,2.1116,89600.0,INLAND --121.3,38.58,29.0,2748.0,563.0,1619.0,525.0,2.8966,92400.0,INLAND --121.34,38.56,12.0,2975.0,628.0,1440.0,593.0,2.9896,118600.0,INLAND --121.34,38.55,11.0,2838.0,498.0,1701.0,504.0,4.1447,114000.0,INLAND --121.35,38.54,12.0,16239.0,3358.0,8656.0,3234.0,3.5691,116300.0,INLAND --121.37,38.56,19.0,6308.0,1167.0,3012.0,1112.0,2.9464,113500.0,INLAND --121.37,38.57,16.0,3895.0,896.0,1762.0,855.0,2.6635,135800.0,INLAND --121.37,38.56,18.0,2129.0,363.0,815.0,347.0,2.7679,118000.0,INLAND --121.36,38.57,26.0,1793.0,244.0,653.0,235.0,5.6485,129500.0,INLAND --121.35,38.56,16.0,2629.0,491.0,1265.0,485.0,4.5066,140200.0,INLAND --121.34,38.58,17.0,1605.0,258.0,748.0,262.0,5.0917,134100.0,INLAND --121.34,38.57,14.0,5737.0,1008.0,2731.0,983.0,4.4602,134500.0,INLAND --121.35,38.55,18.0,4481.0,780.0,2211.0,775.0,3.9934,123300.0,INLAND --121.35,38.55,22.0,2607.0,411.0,1216.0,407.0,5.0427,126900.0,INLAND --121.36,38.55,33.0,1191.0,198.0,554.0,191.0,2.8021,118800.0,INLAND --121.35,38.56,16.0,2278.0,370.0,1203.0,371.0,5.0622,132400.0,INLAND --121.36,38.56,17.0,6225.0,938.0,3064.0,947.0,5.2881,138000.0,INLAND --121.37,38.55,21.0,2713.0,432.0,1287.0,440.0,4.5815,125500.0,INLAND --121.36,38.56,20.0,1232.0,332.0,667.0,288.0,1.8288,32500.0,INLAND --121.37,38.56,27.0,1827.0,509.0,852.0,450.0,2.0901,52500.0,INLAND --121.3,38.51,19.0,822.0,134.0,457.0,133.0,4.15,157500.0,INLAND --121.35,38.51,29.0,2337.0,391.0,1054.0,352.0,4.2206,157700.0,INLAND --121.4,38.47,4.0,20982.0,3392.0,10329.0,3086.0,4.3658,130600.0,INLAND --121.38,38.47,4.0,14418.0,2282.0,6578.0,2140.0,4.5604,145900.0,INLAND --121.39,38.43,3.0,2696.0,384.0,990.0,316.0,5.4445,237600.0,INLAND --121.27,38.44,19.0,2780.0,414.0,1320.0,404.0,5.8831,209900.0,INLAND --121.35,38.46,2.0,6992.0,1132.0,2816.0,984.0,4.3879,144400.0,INLAND --121.34,38.44,14.0,3205.0,465.0,1439.0,456.0,5.7452,240900.0,INLAND --121.32,38.41,17.0,4401.0,655.0,1970.0,639.0,5.8239,247500.0,INLAND --121.36,38.42,6.0,3254.0,465.0,1168.0,345.0,5.1811,188400.0,INLAND --121.37,38.41,14.0,3727.0,685.0,1741.0,646.0,3.5625,125700.0,INLAND --121.37,38.42,18.0,2643.0,502.0,1755.0,541.0,3.3281,91200.0,INLAND --121.38,38.41,7.0,6091.0,921.0,2916.0,886.0,4.7557,150400.0,INLAND --121.38,38.41,10.0,3425.0,629.0,1538.0,587.0,4.45,138700.0,INLAND --121.38,38.4,15.0,4155.0,637.0,1722.0,616.0,4.8831,154400.0,INLAND --121.37,38.39,15.0,1883.0,254.0,893.0,256.0,6.2575,143500.0,INLAND --121.35,38.4,11.0,2322.0,459.0,1373.0,424.0,3.175,94400.0,INLAND --121.36,38.4,18.0,4813.0,849.0,2333.0,843.0,4.175,144400.0,INLAND --121.36,38.39,10.0,5121.0,763.0,2568.0,758.0,5.2447,148100.0,INLAND --121.13,38.37,10.0,1034.0,153.0,478.0,155.0,7.0326,241100.0,INLAND --121.2,38.36,14.0,2634.0,463.0,1402.0,432.0,3.8897,175700.0,INLAND --121.22,38.4,14.0,2655.0,441.0,1277.0,422.0,4.6989,213800.0,INLAND --121.22,38.43,20.0,2054.0,339.0,934.0,336.0,4.5368,219300.0,INLAND --121.29,38.36,17.0,2193.0,386.0,1148.0,372.0,4.5272,191700.0,INLAND --121.27,38.31,17.0,1144.0,202.0,626.0,178.0,4.4107,151600.0,INLAND --121.1,38.33,14.0,1357.0,247.0,695.0,224.0,4.1974,157800.0,INLAND --121.2,38.28,20.0,1732.0,307.0,999.0,305.0,3.9808,160200.0,INLAND --121.26,38.27,20.0,1314.0,229.0,712.0,219.0,4.4125,144600.0,INLAND --121.29,38.28,11.0,1554.0,260.0,793.0,233.0,4.8073,156700.0,INLAND --121.35,38.28,17.0,2756.0,557.0,1986.0,530.0,3.2234,82000.0,INLAND --121.33,38.28,14.0,980.0,171.0,659.0,183.0,4.4306,170100.0,INLAND --121.31,38.28,16.0,1708.0,391.0,687.0,378.0,1.9485,155400.0,INLAND --121.3,38.26,19.0,1403.0,276.0,901.0,290.0,3.215,104600.0,INLAND --121.31,38.26,22.0,1768.0,396.0,1005.0,420.0,1.8846,88300.0,INLAND --121.32,38.26,4.0,6125.0,1063.0,3077.0,953.0,4.1179,134600.0,INLAND --121.3,38.25,27.0,2475.0,548.0,1703.0,517.0,2.5727,86100.0,INLAND --121.48,38.46,8.0,10505.0,1777.0,6002.0,1694.0,4.0516,121200.0,INLAND --121.42,38.47,11.0,5665.0,1507.0,3422.0,1299.0,2.3343,97800.0,INLAND --121.43,38.46,18.0,1378.0,235.0,818.0,262.0,4.0625,100300.0,INLAND --121.43,38.47,21.0,1787.0,291.0,988.0,301.0,4.35,96200.0,INLAND --121.44,38.47,16.0,1215.0,223.0,787.0,233.0,4.1597,95900.0,INLAND --121.44,38.47,5.0,5666.0,1178.0,3139.0,1131.0,3.3608,108900.0,INLAND --121.44,38.46,10.0,4446.0,897.0,2499.0,884.0,3.5461,103600.0,INLAND --121.44,38.43,3.0,39320.0,6210.0,16305.0,5358.0,4.9516,153700.0,INLAND --121.41,38.34,24.0,1605.0,277.0,1966.0,250.0,3.0833,162500.0,INLAND --121.45,38.37,32.0,1441.0,261.0,629.0,249.0,4.4519,137500.0,INLAND --121.5,38.34,36.0,1212.0,255.0,569.0,256.0,2.0048,72900.0,INLAND --121.54,38.29,47.0,1396.0,254.0,630.0,218.0,2.8616,92500.0,INLAND --121.56,38.26,43.0,1906.0,327.0,996.0,314.0,2.9744,136800.0,INLAND --121.51,38.26,52.0,910.0,212.0,429.0,212.0,1.6458,52800.0,INLAND --121.57,38.19,36.0,1395.0,264.0,700.0,244.0,2.4353,162500.0,INLAND --121.7,38.1,19.0,4896.0,1083.0,2150.0,905.0,3.3398,89700.0,INLAND --121.29,36.9,17.0,3610.0,593.0,1734.0,559.0,5.8324,374200.0,INLAND --121.37,36.89,21.0,2471.0,473.0,1753.0,451.0,4.025,293800.0,INLAND --121.47,36.92,27.0,2049.0,417.0,1230.0,336.0,4.6477,265900.0,INLAND --121.53,36.85,23.0,3359.0,725.0,1862.0,651.0,2.6719,193600.0,INLAND --121.51,36.86,36.0,1019.0,168.0,602.0,169.0,2.625,210000.0,INLAND --121.6,36.88,21.0,3416.0,624.0,1862.0,595.0,4.7813,241500.0,<1H OCEAN --121.5,36.81,20.0,1345.0,230.0,731.0,217.0,4.2333,363300.0,INLAND --121.45,36.86,11.0,1613.0,335.0,1617.0,342.0,3.1375,146200.0,INLAND --121.42,36.86,41.0,440.0,106.0,389.0,94.0,2.6818,225000.0,INLAND --121.41,36.85,11.0,1708.0,394.0,1474.0,372.0,2.8839,145900.0,INLAND --121.4,36.85,50.0,2666.0,613.0,1768.0,555.0,2.6598,157300.0,INLAND --121.4,36.84,52.0,1860.0,400.0,1215.0,367.0,2.9554,136500.0,INLAND --121.4,36.84,40.0,2352.0,536.0,1430.0,535.0,3.0912,155300.0,INLAND --121.41,36.84,23.0,1771.0,356.0,1105.0,338.0,3.7049,192200.0,INLAND --121.4,36.86,36.0,1256.0,270.0,910.0,255.0,1.9405,145400.0,INLAND --121.38,36.85,13.0,4115.0,782.0,2903.0,747.0,3.7316,192400.0,INLAND --121.38,36.84,6.0,3769.0,669.0,2061.0,648.0,4.1875,217600.0,INLAND --121.37,36.84,11.0,1996.0,382.0,1023.0,358.0,3.5714,243000.0,INLAND --121.38,36.84,17.0,2625.0,512.0,1487.0,481.0,3.6354,221200.0,INLAND --121.37,36.83,14.0,3658.0,612.0,1951.0,600.0,4.76,216000.0,INLAND --121.4,36.83,11.0,3701.0,739.0,1749.0,654.0,3.067,207900.0,INLAND --121.44,36.84,7.0,1644.0,338.0,1143.0,331.0,4.005,180400.0,INLAND --121.42,36.85,7.0,1626.0,325.0,677.0,304.0,2.3125,170800.0,INLAND --121.32,36.79,30.0,516.0,90.0,288.0,95.0,3.6333,202500.0,INLAND --121.36,36.81,7.0,4609.0,741.0,1660.0,720.0,5.0871,290500.0,INLAND --121.34,36.76,15.0,2638.0,429.0,1289.0,357.0,4.1528,336800.0,INLAND --121.06,36.72,23.0,395.0,70.0,166.0,52.0,2.2132,100000.0,INLAND --120.95,36.47,52.0,1691.0,301.0,618.0,239.0,3.2292,225000.0,<1H OCEAN --117.75,34.01,4.0,22128.0,3522.0,10450.0,3258.0,6.1287,289600.0,<1H OCEAN --117.78,33.97,2.0,556.0,63.0,179.0,54.0,8.4411,500001.0,<1H OCEAN --117.72,33.99,14.0,5622.0,861.0,3108.0,821.0,5.7763,206700.0,INLAND --117.76,33.98,3.0,9662.0,1385.0,2497.0,856.0,6.7172,292400.0,<1H OCEAN --117.74,33.97,4.0,9755.0,1748.0,4662.0,1583.0,5.6501,254900.0,<1H OCEAN --117.72,33.97,16.0,13290.0,2062.0,6931.0,2023.0,5.228,187800.0,<1H OCEAN --117.71,33.97,10.0,10856.0,2278.0,6474.0,2199.0,3.851,137200.0,INLAND --117.7,33.92,4.0,8301.0,1333.0,3941.0,1236.0,6.2141,252200.0,<1H OCEAN --117.75,33.95,13.0,984.0,127.0,364.0,119.0,7.5839,426900.0,<1H OCEAN --117.76,33.94,40.0,1092.0,213.0,457.0,190.0,5.1165,184200.0,<1H OCEAN --117.69,34.09,28.0,1437.0,295.0,724.0,262.0,2.725,140200.0,INLAND --117.7,34.08,10.0,1979.0,454.0,1117.0,389.0,3.7802,107300.0,INLAND --117.7,34.09,25.0,1719.0,331.0,1098.0,324.0,3.625,121800.0,INLAND --117.71,34.08,29.0,1276.0,283.0,1216.0,316.0,2.5972,134300.0,INLAND --117.71,34.07,31.0,1840.0,380.0,1187.0,357.0,3.8875,129200.0,INLAND --117.69,34.08,30.0,4255.0,773.0,2129.0,730.0,4.5185,142500.0,INLAND --117.69,34.07,35.0,3222.0,559.0,1970.0,550.0,3.7083,131000.0,INLAND --117.69,34.07,34.0,4055.0,739.0,2470.0,753.0,3.8586,136000.0,INLAND --117.69,34.08,14.0,4136.0,886.0,2026.0,788.0,3.2344,128200.0,INLAND --117.71,34.07,24.0,1948.0,362.0,1286.0,364.0,3.6,139300.0,INLAND --117.7,34.08,33.0,4674.0,791.0,2769.0,784.0,4.1448,137300.0,INLAND --117.7,34.07,33.0,1552.0,288.0,1326.0,303.0,3.7969,128400.0,INLAND --117.69,34.06,29.0,873.0,226.0,649.0,198.0,2.7986,114400.0,INLAND --117.69,34.06,25.0,1881.0,433.0,1337.0,417.0,2.5536,144000.0,INLAND --117.7,34.06,25.0,2054.0,609.0,2271.0,564.0,2.3049,150000.0,INLAND --117.7,34.06,7.0,732.0,145.0,431.0,132.0,2.9107,95300.0,INLAND --117.71,34.06,27.0,2127.0,628.0,1970.0,534.0,1.4722,91300.0,INLAND --117.68,34.05,25.0,1859.0,463.0,1070.0,374.0,2.5395,187500.0,INLAND --117.69,34.05,10.0,1875.0,366.0,1055.0,363.0,4.3264,128900.0,INLAND --117.7,34.05,24.0,2834.0,470.0,1815.0,471.0,4.7357,162500.0,INLAND --117.71,34.06,16.0,1458.0,295.0,912.0,331.0,3.625,160400.0,INLAND --117.71,34.05,20.0,2281.0,444.0,1545.0,481.0,2.5735,130500.0,INLAND --117.72,34.05,31.0,2220.0,526.0,1662.0,472.0,2.7321,104300.0,INLAND --117.72,34.05,8.0,1841.0,409.0,1243.0,394.0,4.0614,107000.0,INLAND --117.69,34.04,5.0,4459.0,896.0,2028.0,881.0,4.0096,182600.0,INLAND --117.7,34.04,13.0,5301.0,1025.0,2870.0,984.0,3.5954,163000.0,INLAND --117.71,34.04,20.0,1950.0,310.0,1054.0,312.0,4.625,222100.0,INLAND --117.71,34.04,17.0,4098.0,733.0,1859.0,713.0,2.9811,231800.0,INLAND --117.72,34.03,17.0,2902.0,476.0,1652.0,479.0,5.6029,161800.0,INLAND --117.72,34.02,17.0,1781.0,262.0,860.0,256.0,6.5958,236800.0,INLAND --117.73,34.01,36.0,2340.0,392.0,1213.0,388.0,4.125,213000.0,INLAND --117.72,34.0,15.0,4363.0,690.0,2410.0,666.0,5.4824,179700.0,INLAND --117.68,34.0,5.0,3761.0,580.0,2335.0,648.0,5.7338,225400.0,INLAND --117.69,34.0,28.0,707.0,154.0,561.0,129.0,2.5781,111600.0,INLAND --117.7,34.0,15.0,4905.0,711.0,2711.0,762.0,5.7021,193100.0,INLAND --117.71,34.02,17.0,12689.0,2426.0,7343.0,2230.0,3.6361,157700.0,INLAND --117.71,34.03,11.0,3467.0,749.0,2163.0,676.0,3.4267,164400.0,INLAND --117.67,34.03,20.0,8561.0,1411.0,4861.0,1450.0,4.7056,165500.0,INLAND --117.68,34.03,16.0,2859.0,668.0,1946.0,591.0,3.0396,124300.0,INLAND --117.69,34.03,20.0,6374.0,1412.0,3690.0,1350.0,3.4184,162500.0,INLAND --117.68,34.01,20.0,7326.0,1555.0,5718.0,1538.0,3.2073,123500.0,INLAND --117.69,34.01,30.0,2598.0,573.0,2170.0,518.0,2.3,95600.0,INLAND --117.68,34.15,24.0,1033.0,189.0,486.0,204.0,4.1719,213500.0,INLAND --117.66,34.15,25.0,3430.0,485.0,1284.0,438.0,8.5282,360100.0,INLAND --117.64,34.15,16.0,2896.0,404.0,1165.0,379.0,6.4559,392900.0,INLAND --117.68,34.15,4.0,4082.0,578.0,1996.0,580.0,6.7813,286300.0,INLAND --117.68,34.14,4.0,4791.0,695.0,1871.0,659.0,6.9532,277000.0,INLAND --117.66,34.14,11.0,3628.0,469.0,1488.0,463.0,7.0844,325000.0,INLAND --117.66,34.14,8.0,1692.0,253.0,857.0,251.0,6.9418,310500.0,INLAND --117.66,34.15,20.0,2524.0,311.0,965.0,285.0,8.0103,395500.0,INLAND --117.65,34.14,16.0,2196.0,287.0,949.0,289.0,8.6573,354000.0,INLAND --117.69,34.13,8.0,2915.0,371.0,1271.0,354.0,7.9627,345400.0,INLAND --117.67,34.13,10.0,2846.0,362.0,1221.0,355.0,7.7234,304100.0,INLAND --117.66,34.13,17.0,3229.0,405.0,1289.0,407.0,6.3842,307100.0,INLAND --117.67,34.12,15.0,3162.0,495.0,1145.0,473.0,5.3525,191700.0,INLAND --117.66,34.13,19.0,3995.0,554.0,1523.0,509.0,6.075,254100.0,INLAND --117.66,34.12,22.0,2272.0,278.0,933.0,305.0,8.8204,390500.0,INLAND --117.65,34.14,9.0,3877.0,490.0,1815.0,490.0,8.4839,406700.0,INLAND --117.65,34.13,24.0,2121.0,296.0,913.0,302.0,5.9328,255900.0,INLAND --117.65,34.12,17.0,3006.0,427.0,1291.0,406.0,6.2083,242700.0,INLAND --117.63,34.12,4.0,4323.0,775.0,1479.0,663.0,6.0758,226800.0,INLAND --117.64,34.12,18.0,3605.0,534.0,1682.0,480.0,5.8407,202900.0,INLAND --117.65,34.11,29.0,2927.0,634.0,1710.0,623.0,3.6219,176600.0,INLAND --117.64,34.11,16.0,2129.0,420.0,932.0,379.0,2.5868,146900.0,INLAND --117.63,34.11,30.0,2674.0,428.0,1404.0,456.0,4.2969,165600.0,INLAND --117.69,34.11,16.0,2427.0,522.0,794.0,491.0,2.6929,119300.0,INLAND --117.68,34.12,16.0,2181.0,321.0,1133.0,350.0,5.7214,259400.0,INLAND --117.68,34.11,16.0,3190.0,471.0,1414.0,464.0,5.5292,208600.0,INLAND --117.66,34.12,16.0,3853.0,541.0,1726.0,497.0,6.1195,251100.0,INLAND --117.66,34.11,19.0,3445.0,661.0,1635.0,580.0,5.0681,230500.0,INLAND --117.65,34.12,27.0,2298.0,340.0,1071.0,369.0,6.5587,239000.0,INLAND --117.65,34.11,28.0,2788.0,370.0,1140.0,385.0,5.3368,233500.0,INLAND --117.69,34.1,17.0,3759.0,1035.0,1722.0,847.0,2.6074,137500.0,INLAND --117.68,34.1,11.0,7392.0,1796.0,3841.0,1621.0,2.8326,163000.0,INLAND --117.67,34.1,28.0,1263.0,248.0,601.0,219.0,3.875,174000.0,INLAND --117.67,34.1,19.0,2969.0,605.0,1326.0,573.0,4.3438,155700.0,INLAND --117.65,34.1,19.0,1688.0,365.0,622.0,322.0,3.6,136400.0,INLAND --117.66,34.1,37.0,1971.0,345.0,939.0,358.0,3.4634,145300.0,INLAND --117.66,34.1,26.0,1855.0,553.0,1109.0,536.0,2.2429,150000.0,INLAND --117.65,34.1,30.0,1461.0,341.0,1014.0,345.0,2.4667,106000.0,INLAND --117.68,34.09,22.0,1547.0,334.0,773.0,316.0,2.9812,148800.0,INLAND --117.67,34.09,17.0,4418.0,1256.0,2417.0,1094.0,2.7266,101000.0,INLAND --117.66,34.09,26.0,1151.0,200.0,593.0,188.0,3.6667,166300.0,INLAND --117.66,34.09,20.0,2462.0,496.0,1117.0,458.0,3.2321,162500.0,INLAND --117.66,34.09,23.0,1426.0,313.0,954.0,319.0,3.0357,151500.0,INLAND --117.65,34.09,33.0,2446.0,396.0,1209.0,412.0,4.3958,145600.0,INLAND --117.62,34.13,20.0,3216.0,516.0,1655.0,524.0,5.1261,158800.0,INLAND --117.62,34.11,17.0,1869.0,311.0,831.0,262.0,6.148,243900.0,INLAND --117.62,34.11,31.0,2561.0,414.0,1204.0,435.0,4.4637,192800.0,INLAND --117.63,34.1,15.0,4799.0,1209.0,2554.0,1057.0,2.6582,122800.0,INLAND --117.63,34.09,8.0,3557.0,890.0,2251.0,765.0,2.6818,114100.0,INLAND --117.64,34.09,34.0,2839.0,659.0,1822.0,631.0,3.05,121300.0,INLAND --117.65,34.09,46.0,1214.0,281.0,701.0,294.0,2.7083,116300.0,INLAND --117.65,34.1,44.0,1526.0,337.0,831.0,326.0,3.0284,115800.0,INLAND --117.65,34.1,44.0,2808.0,585.0,1444.0,550.0,2.7159,139300.0,INLAND --117.68,34.08,21.0,5662.0,1185.0,3067.0,1055.0,3.3482,137300.0,INLAND --117.68,34.08,28.0,2459.0,492.0,1230.0,498.0,3.0978,137200.0,INLAND --117.67,34.07,29.0,1840.0,388.0,1278.0,368.0,3.5036,123400.0,INLAND --117.68,34.07,24.0,2626.0,692.0,2204.0,647.0,1.7806,135000.0,INLAND --117.68,34.07,32.0,1775.0,314.0,1067.0,302.0,4.0375,121300.0,INLAND --117.65,34.08,35.0,2621.0,391.0,1074.0,391.0,4.7176,166400.0,INLAND --117.65,34.08,38.0,2750.0,572.0,1410.0,483.0,3.3836,144900.0,INLAND --117.66,34.07,37.0,2454.0,511.0,1165.0,504.0,2.9474,139600.0,INLAND --117.66,34.06,24.0,4043.0,952.0,2174.0,859.0,2.2244,114900.0,INLAND --117.66,34.07,36.0,2072.0,408.0,964.0,395.0,2.8702,137000.0,INLAND --117.66,34.07,33.0,2081.0,409.0,1008.0,375.0,2.587,138100.0,INLAND --117.66,34.08,36.0,1485.0,236.0,623.0,261.0,3.3036,141000.0,INLAND --117.66,34.08,33.0,3659.0,590.0,1773.0,615.0,3.9227,157200.0,INLAND --117.64,34.08,37.0,2576.0,468.0,1284.0,428.0,3.3958,130400.0,INLAND --117.64,34.07,43.0,1970.0,379.0,1036.0,391.0,3.2083,122800.0,INLAND --117.65,34.08,52.0,2264.0,439.0,1031.0,437.0,3.375,144300.0,INLAND --117.65,34.08,40.0,1609.0,258.0,624.0,242.0,5.4689,158200.0,INLAND --117.64,34.08,35.0,1254.0,241.0,729.0,253.0,3.495,118000.0,INLAND --117.64,34.08,33.0,1987.0,455.0,1369.0,475.0,2.4464,122600.0,INLAND --117.63,34.08,38.0,1810.0,371.0,1257.0,354.0,3.8355,111700.0,INLAND --117.63,34.07,39.0,2650.0,511.0,1537.0,495.0,3.4432,106700.0,INLAND --117.62,34.07,15.0,4061.0,811.0,2884.0,734.0,3.3936,127000.0,INLAND --117.62,34.08,30.0,1372.0,235.0,1047.0,225.0,3.1597,116300.0,INLAND --117.63,34.09,19.0,3490.0,816.0,2818.0,688.0,2.8977,126200.0,INLAND --117.62,34.09,26.0,3271.0,595.0,2259.0,566.0,4.0139,132000.0,INLAND --117.62,34.08,22.0,2626.0,631.0,1678.0,557.0,3.125,111800.0,INLAND --117.62,34.08,24.0,2801.0,554.0,2064.0,529.0,4.4946,136000.0,INLAND --117.61,34.08,20.0,3550.0,736.0,2229.0,681.0,3.0199,128800.0,INLAND --117.61,34.09,23.0,1945.0,362.0,1483.0,383.0,4.4205,135500.0,INLAND --117.61,34.09,11.0,2000.0,391.0,1503.0,426.0,4.6167,144000.0,INLAND --117.61,34.08,12.0,4427.0,,2400.0,843.0,4.7147,158700.0,INLAND --117.6,34.08,15.0,2700.0,460.0,1432.0,449.0,4.9063,159800.0,INLAND --117.65,34.07,35.0,2501.0,651.0,1182.0,591.0,1.4464,113200.0,INLAND --117.65,34.07,52.0,1041.0,252.0,558.0,231.0,1.9236,117200.0,INLAND --117.65,34.06,41.0,465.0,130.0,349.0,138.0,2.0893,112500.0,INLAND --117.62,34.07,16.0,6009.0,1599.0,5110.0,1389.0,2.5677,128900.0,INLAND --117.64,34.07,30.0,2787.0,713.0,2647.0,693.0,2.2765,98100.0,INLAND --117.64,34.07,38.0,2450.0,544.0,1823.0,536.0,2.837,111200.0,INLAND --117.64,34.07,52.0,1644.0,372.0,1269.0,355.0,2.6913,108300.0,INLAND --117.67,34.06,26.0,1592.0,429.0,1182.0,365.0,2.4583,110400.0,INLAND --117.66,34.06,39.0,1405.0,339.0,1489.0,336.0,1.608,91800.0,INLAND --117.65,34.06,41.0,1171.0,334.0,1479.0,334.0,2.25,90500.0,INLAND --117.64,34.06,43.0,763.0,219.0,851.0,198.0,1.7292,79200.0,INLAND --117.64,34.06,50.0,637.0,143.0,590.0,147.0,1.9659,85700.0,INLAND --117.63,34.06,39.0,1210.0,310.0,1294.0,303.0,2.3636,88300.0,INLAND --117.66,34.05,36.0,2341.0,520.0,2138.0,523.0,2.3347,104000.0,INLAND --117.66,34.05,33.0,960.0,216.0,831.0,222.0,2.5391,108600.0,INLAND --117.66,34.05,6.0,5129.0,1119.0,2533.0,949.0,3.625,113600.0,INLAND --117.67,34.04,16.0,3260.0,501.0,1973.0,535.0,4.6563,162000.0,INLAND --117.66,34.04,16.0,2081.0,348.0,1332.0,356.0,4.7872,147600.0,INLAND --117.66,34.05,14.0,2644.0,525.0,2021.0,511.0,3.6467,147500.0,INLAND --117.65,34.04,15.0,3393.0,,2039.0,611.0,3.9336,151000.0,INLAND --117.66,34.04,10.0,3657.0,695.0,2079.0,663.0,4.2054,159900.0,INLAND --117.67,34.05,6.0,2833.0,628.0,1717.0,589.0,3.2062,167500.0,INLAND --117.67,34.04,13.0,2295.0,374.0,1284.0,378.0,5.2551,194300.0,INLAND --117.67,34.04,13.0,1543.0,,776.0,358.0,3.0598,99700.0,INLAND --117.68,34.04,27.0,574.0,103.0,321.0,103.0,3.9107,186500.0,INLAND --117.65,34.02,9.0,2107.0,411.0,1138.0,389.0,4.4042,159100.0,INLAND --117.66,34.03,14.0,2137.0,345.0,1151.0,352.0,5.753,185500.0,INLAND --117.67,34.02,16.0,3042.0,524.0,1516.0,475.0,4.8906,178500.0,INLAND --117.66,34.02,11.0,3358.0,504.0,1690.0,482.0,6.7544,207900.0,INLAND --117.65,34.03,15.0,4420.0,903.0,2373.0,858.0,3.449,149100.0,INLAND --117.65,34.04,28.0,2360.0,607.0,2623.0,592.0,2.5048,100000.0,INLAND --117.64,34.05,32.0,1129.0,251.0,1378.0,268.0,3.0057,96900.0,INLAND --117.64,34.05,27.0,1407.0,362.0,1684.0,350.0,2.1944,95700.0,INLAND --117.64,34.03,11.0,2050.0,382.0,1044.0,371.0,4.8281,137000.0,INLAND --117.64,34.04,21.0,1801.0,507.0,2556.0,484.0,2.4716,102500.0,INLAND --117.64,34.03,10.0,3194.0,579.0,2088.0,549.0,4.1779,159100.0,INLAND --117.64,34.02,10.0,4887.0,930.0,2637.0,831.0,4.0611,158000.0,INLAND --117.63,34.02,13.0,4864.0,729.0,2780.0,723.0,5.6168,175400.0,INLAND --117.62,34.02,9.0,4265.0,587.0,2280.0,589.0,5.5632,195100.0,INLAND --117.62,34.03,15.0,3942.0,661.0,2240.0,621.0,4.8311,176000.0,INLAND --117.62,34.02,16.0,2040.0,325.0,1207.0,324.0,5.0431,164100.0,INLAND --117.61,34.02,15.0,1791.0,346.0,1219.0,328.0,3.8125,170300.0,INLAND --117.6,34.02,16.0,2103.0,348.0,1305.0,356.0,5.2849,160400.0,INLAND --117.6,34.03,16.0,1499.0,232.0,918.0,239.0,5.5677,175400.0,INLAND --117.62,34.05,33.0,883.0,211.0,1007.0,210.0,2.8281,103600.0,INLAND --117.61,34.04,8.0,4116.0,766.0,1785.0,745.0,3.1672,150200.0,INLAND --117.66,34.02,12.0,5616.0,871.0,3019.0,782.0,5.5425,202300.0,INLAND --117.64,34.02,6.0,248.0,47.0,119.0,42.0,2.125,416700.0,INLAND --117.61,34.01,25.0,352.0,41.0,99.0,34.0,3.9696,500000.0,INLAND --117.61,34.02,8.0,63.0,9.0,25.0,7.0,7.7197,275000.0,INLAND --117.64,33.99,29.0,1005.0,152.0,513.0,149.0,2.4375,181300.0,INLAND --117.66,34.0,5.0,1387.0,236.0,855.0,270.0,5.411,201100.0,INLAND --117.6,33.98,26.0,1225.0,199.0,717.0,204.0,2.7284,225000.0,INLAND --117.63,33.94,36.0,447.0,95.0,2886.0,85.0,4.2578,183300.0,INLAND --117.58,34.0,2.0,7544.0,1516.0,2801.0,1001.0,4.0037,245200.0,INLAND --117.57,34.15,3.0,12806.0,2219.0,4249.0,1499.0,5.485,343100.0,INLAND --117.57,34.13,5.0,6135.0,879.0,2795.0,781.0,5.9369,225200.0,INLAND --117.54,34.12,4.0,17577.0,2819.0,7766.0,2473.0,5.1333,181800.0,INLAND --117.54,34.11,16.0,2114.0,374.0,1463.0,399.0,3.9241,131500.0,INLAND --117.51,34.14,21.0,2455.0,381.0,1094.0,327.0,4.6437,191700.0,INLAND --117.5,34.12,2.0,11965.0,1802.0,4436.0,1296.0,5.285,191700.0,INLAND --117.51,34.16,2.0,718.0,98.0,119.0,50.0,4.1,315000.0,INLAND --117.55,34.14,3.0,5710.0,919.0,2874.0,886.0,5.3638,206300.0,INLAND --117.59,34.16,10.0,9467.0,1181.0,3819.0,1122.0,7.8252,361400.0,INLAND --117.58,34.14,7.0,11818.0,1745.0,5499.0,1600.0,5.3678,231700.0,INLAND --117.62,34.15,16.0,13556.0,1704.0,5669.0,1668.0,6.5138,311500.0,INLAND --117.61,34.14,14.0,15809.0,2485.0,7363.0,2410.0,5.5198,245600.0,INLAND --117.61,34.13,21.0,8416.0,1386.0,4308.0,1341.0,4.4611,164600.0,INLAND --117.61,34.12,17.0,6709.0,1198.0,3954.0,1161.0,4.6997,156900.0,INLAND --117.59,34.13,10.0,20263.0,3915.0,9716.0,3744.0,3.8505,169600.0,INLAND --117.58,34.11,14.0,11635.0,2055.0,6443.0,2009.0,4.7547,157600.0,INLAND --117.6,34.11,18.0,6025.0,1062.0,3360.0,1028.0,4.8889,155700.0,INLAND --117.56,34.12,4.0,6956.0,1271.0,3455.0,1228.0,4.7193,178700.0,INLAND --117.56,34.12,4.0,5351.0,1210.0,2988.0,1101.0,3.7973,181300.0,INLAND --117.61,34.1,9.0,18956.0,4095.0,10323.0,3832.0,3.6033,132600.0,INLAND --117.59,34.1,17.0,3646.0,1035.0,1987.0,895.0,2.3603,139300.0,INLAND --117.58,34.1,4.0,6360.0,1584.0,3359.0,1396.0,3.5186,127800.0,INLAND --117.58,34.09,27.0,754.0,200.0,746.0,185.0,1.9531,100800.0,INLAND --117.59,34.09,16.0,2401.0,465.0,1757.0,500.0,3.9755,120400.0,INLAND --117.57,34.07,4.0,2152.0,580.0,1083.0,441.0,3.1458,118800.0,INLAND --117.59,34.03,16.0,3443.0,562.0,2130.0,564.0,5.0769,161400.0,INLAND --117.59,34.02,14.0,1463.0,261.0,881.0,245.0,4.7857,152500.0,INLAND --117.58,34.02,4.0,5998.0,1092.0,3182.0,1042.0,5.2692,174800.0,INLAND --117.57,34.02,5.0,6933.0,1311.0,3845.0,1285.0,4.6727,158900.0,INLAND --117.53,34.06,18.0,5605.0,1303.0,4028.0,1145.0,2.9386,116400.0,INLAND --117.53,34.1,5.0,2185.0,488.0,1379.0,458.0,3.7917,103000.0,INLAND --117.42,34.13,4.0,11587.0,1796.0,5804.0,1705.0,4.8283,141900.0,INLAND --117.43,34.12,7.0,5954.0,1071.0,3567.0,1070.0,3.2056,134100.0,INLAND --117.45,34.13,16.0,5058.0,965.0,3388.0,878.0,3.6417,119000.0,INLAND --117.46,34.14,10.0,714.0,131.0,381.0,119.0,0.8926,116100.0,INLAND --117.47,34.12,6.0,10565.0,1767.0,5690.0,1555.0,4.1797,141000.0,INLAND --117.46,34.1,35.0,908.0,226.0,667.0,203.0,2.5833,93500.0,INLAND --117.46,34.1,7.0,1759.0,473.0,1064.0,328.0,1.9583,108800.0,INLAND --117.46,34.09,8.0,4711.0,963.0,3310.0,988.0,3.5488,101600.0,INLAND --117.48,34.09,32.0,3170.0,630.0,2612.0,580.0,3.6394,99200.0,INLAND --117.48,34.09,32.0,1650.0,328.0,1124.0,290.0,3.1838,98600.0,INLAND --117.48,34.1,30.0,2287.0,531.0,1796.0,503.0,2.5833,90600.0,INLAND --117.46,34.08,18.0,3830.0,750.0,2767.0,702.0,3.6602,120700.0,INLAND --117.46,34.07,19.0,3155.0,572.0,2482.0,642.0,2.9973,113400.0,INLAND --117.48,34.08,28.0,1922.0,382.0,1565.0,340.0,3.915,117400.0,INLAND --117.48,34.08,17.0,1834.0,390.0,1253.0,357.0,3.1028,106400.0,INLAND --117.47,34.07,24.0,1017.0,227.0,568.0,187.0,1.5972,112500.0,INLAND --117.42,34.06,27.0,2532.0,495.0,1305.0,436.0,2.9107,143100.0,INLAND --117.46,34.06,24.0,2831.0,478.0,1582.0,435.0,4.3397,195600.0,INLAND --117.47,34.06,33.0,1379.0,273.0,884.0,229.0,2.7574,125000.0,INLAND --117.49,34.05,20.0,1483.0,249.0,660.0,194.0,3.9464,207700.0,INLAND --117.5,34.04,5.0,3958.0,665.0,2456.0,666.0,5.1647,154700.0,INLAND --117.5,34.04,4.0,3428.0,649.0,2158.0,632.0,5.0175,143400.0,INLAND --117.49,34.04,4.0,6034.0,1170.0,3527.0,1098.0,4.1775,143700.0,INLAND --117.46,34.04,3.0,12870.0,2315.0,5820.0,1759.0,4.2429,147300.0,INLAND --117.38,34.14,11.0,10804.0,1493.0,5221.0,1482.0,5.246,161400.0,INLAND --117.4,34.15,4.0,12156.0,1864.0,5020.0,1524.0,4.7909,149200.0,INLAND --117.4,34.18,16.0,1769.0,254.0,1778.0,251.0,5.3671,181800.0,INLAND --117.38,34.2,16.0,193.0,45.0,312.0,76.0,3.7578,137500.0,INLAND --117.45,34.11,7.0,6356.0,1244.0,4052.0,1164.0,2.9112,121700.0,INLAND --117.45,34.1,9.0,4288.0,1017.0,3156.0,900.0,2.7827,105800.0,INLAND --117.45,34.1,6.0,5571.0,1316.0,4048.0,1154.0,2.0308,91100.0,INLAND --117.42,34.11,25.0,4261.0,893.0,2319.0,702.0,3.3958,111900.0,INLAND --117.42,34.1,18.0,3977.0,809.0,2231.0,742.0,4.1399,115400.0,INLAND --117.43,34.1,34.0,1345.0,265.0,834.0,290.0,3.7011,99500.0,INLAND --117.43,34.11,17.0,4109.0,884.0,2544.0,780.0,2.7757,109800.0,INLAND --117.43,34.1,43.0,1898.0,418.0,971.0,366.0,2.4735,89900.0,INLAND --117.44,34.1,43.0,1614.0,400.0,926.0,349.0,2.075,95100.0,INLAND --117.44,34.09,24.0,3477.0,831.0,2541.0,753.0,2.3682,97400.0,INLAND --117.44,34.09,12.0,3598.0,828.0,2588.0,781.0,2.375,113800.0,INLAND --117.44,34.08,15.0,5024.0,992.0,3208.0,981.0,3.6025,116400.0,INLAND --117.42,34.09,28.0,3193.0,525.0,1750.0,523.0,4.1375,128300.0,INLAND --117.42,34.08,28.0,2300.0,419.0,1312.0,444.0,3.4844,127700.0,INLAND --117.43,34.08,31.0,3207.0,560.0,1582.0,538.0,4.263,127400.0,INLAND --117.43,34.09,18.0,3172.0,632.0,1621.0,573.0,2.7437,120200.0,INLAND --117.42,34.08,21.0,4460.0,930.0,2657.0,839.0,2.7569,127500.0,INLAND --117.43,34.08,13.0,4563.0,1187.0,2475.0,1019.0,2.1189,121700.0,INLAND --117.45,34.07,21.0,3465.0,639.0,2292.0,628.0,3.3553,113500.0,INLAND --117.43,34.07,18.0,2453.0,537.0,1503.0,500.0,2.3768,95300.0,INLAND --117.41,34.11,12.0,6758.0,1550.0,3204.0,1279.0,2.5181,105500.0,INLAND --117.41,34.1,5.0,4937.0,1139.0,2204.0,812.0,2.5272,92000.0,INLAND --117.4,34.08,21.0,3622.0,667.0,2503.0,720.0,3.8531,105400.0,INLAND --117.41,34.08,38.0,1541.0,290.0,861.0,299.0,3.5655,95600.0,INLAND --117.41,34.09,21.0,3300.0,587.0,1896.0,572.0,3.6466,130600.0,INLAND --117.41,34.1,29.0,1362.0,251.0,776.0,253.0,3.1287,102000.0,INLAND --117.41,34.11,29.0,3999.0,772.0,2602.0,760.0,3.5481,105500.0,INLAND --117.4,34.11,14.0,1933.0,347.0,1443.0,376.0,4.2121,128100.0,INLAND --117.39,34.11,5.0,2987.0,457.0,1821.0,485.0,4.8889,138900.0,INLAND --117.39,34.11,16.0,1140.0,181.0,627.0,206.0,4.9444,132700.0,INLAND --117.38,34.11,36.0,1497.0,264.0,894.0,275.0,3.3066,96300.0,INLAND --117.38,34.11,32.0,3179.0,662.0,1878.0,661.0,3.1375,101200.0,INLAND --117.39,34.1,12.0,7184.0,1516.0,4862.0,1235.0,2.4492,103800.0,INLAND --117.39,34.1,19.0,1000.0,211.0,572.0,230.0,2.4028,112500.0,INLAND --117.39,34.13,9.0,2228.0,398.0,1316.0,370.0,4.1632,119800.0,INLAND --117.38,34.13,13.0,2903.0,510.0,1844.0,510.0,3.7198,112900.0,INLAND --117.37,34.13,17.0,2681.0,470.0,1621.0,459.0,3.875,118500.0,INLAND --117.38,34.13,23.0,1326.0,300.0,722.0,263.0,2.1856,107800.0,INLAND --117.37,34.13,12.0,1893.0,493.0,1054.0,389.0,2.3456,140800.0,INLAND --117.38,34.12,17.0,5959.0,1208.0,4115.0,1088.0,2.4053,105200.0,INLAND --117.39,34.12,7.0,5059.0,780.0,3253.0,801.0,4.9196,140500.0,INLAND --117.38,34.09,8.0,3955.0,815.0,2184.0,725.0,3.3438,127600.0,INLAND --117.36,34.09,32.0,3616.0,631.0,2131.0,593.0,3.2879,95500.0,INLAND --117.37,34.08,17.0,2029.0,404.0,1190.0,437.0,2.9554,115000.0,INLAND --117.38,34.08,11.0,5684.0,1139.0,3095.0,1036.0,3.6875,112600.0,INLAND --117.38,34.07,6.0,1156.0,191.0,910.0,234.0,4.9091,122400.0,INLAND --117.37,34.07,52.0,50.0,9.0,60.0,16.0,4.125,262500.0,INLAND --117.36,34.08,4.0,8866.0,1832.0,4775.0,1554.0,3.7348,125800.0,INLAND --117.4,34.09,5.0,6190.0,993.0,3615.0,963.0,4.4034,133200.0,INLAND --117.39,34.09,10.0,5736.0,945.0,3528.0,932.0,4.3958,130700.0,INLAND --117.39,34.07,15.0,1966.0,331.0,1118.0,323.0,3.8558,122700.0,INLAND --117.39,34.07,26.0,1387.0,277.0,664.0,239.0,3.0278,96800.0,INLAND --117.4,34.07,28.0,2879.0,659.0,1661.0,554.0,2.066,88100.0,INLAND --117.37,34.1,44.0,2087.0,447.0,1270.0,423.0,2.3889,86100.0,INLAND --117.37,34.1,10.0,3404.0,855.0,1656.0,675.0,1.6977,91300.0,INLAND --117.35,34.12,22.0,5640.0,889.0,3157.0,887.0,4.1581,126500.0,INLAND --117.36,34.11,35.0,2969.0,521.0,1555.0,503.0,3.25,107100.0,INLAND --117.37,34.12,32.0,3190.0,568.0,1614.0,512.0,3.8398,118200.0,INLAND --117.37,34.13,18.0,5877.0,1043.0,3114.0,1002.0,4.0294,133200.0,INLAND --117.35,34.13,26.0,3920.0,570.0,1862.0,552.0,3.7286,132000.0,INLAND --117.36,34.1,29.0,2819.0,637.0,1683.0,608.0,2.3205,87600.0,INLAND --117.36,34.1,31.0,2587.0,531.0,1227.0,489.0,2.3578,88600.0,INLAND --117.36,34.1,33.0,1904.0,343.0,1366.0,338.0,3.6227,92800.0,INLAND --117.38,34.06,17.0,3139.0,569.0,1612.0,516.0,3.3571,112300.0,INLAND --117.4,34.06,17.0,5451.0,1008.0,3533.0,940.0,3.9191,101600.0,INLAND --117.4,34.04,17.0,1906.0,334.0,1550.0,338.0,3.025,81800.0,INLAND --117.39,34.04,27.0,2919.0,549.0,1841.0,564.0,2.8682,96400.0,INLAND --117.35,34.04,14.0,2991.0,522.0,1729.0,537.0,3.5139,146800.0,INLAND --117.35,34.17,28.0,1905.0,372.0,1480.0,341.0,2.9844,79200.0,INLAND --117.34,34.16,31.0,1606.0,354.0,1049.0,335.0,2.1935,72700.0,INLAND --117.33,34.15,28.0,1473.0,333.0,1196.0,312.0,1.6993,67800.0,INLAND --117.32,34.14,32.0,1691.0,353.0,1457.0,329.0,1.8438,66600.0,INLAND --117.33,34.14,29.0,1646.0,391.0,1296.0,351.0,1.9423,69700.0,INLAND --117.34,34.14,37.0,1834.0,393.0,1198.0,348.0,2.225,81600.0,INLAND --117.35,34.15,32.0,2699.0,552.0,2086.0,551.0,2.2974,84500.0,INLAND --117.35,34.16,36.0,1717.0,348.0,1054.0,279.0,2.4444,73400.0,INLAND --117.32,34.13,41.0,1837.0,409.0,1430.0,344.0,2.4524,70400.0,INLAND --117.32,34.12,37.0,2868.0,574.0,2055.0,563.0,2.3508,70500.0,INLAND --117.32,34.12,39.0,2210.0,498.0,1752.0,477.0,1.4066,66400.0,INLAND --117.33,34.12,33.0,933.0,219.0,838.0,211.0,1.3417,69000.0,INLAND --117.33,34.13,30.0,2335.0,363.0,1214.0,311.0,2.2449,93200.0,INLAND --117.33,34.13,18.0,3009.0,740.0,2317.0,659.0,1.6375,72400.0,INLAND --117.34,34.13,29.0,1494.0,286.0,991.0,280.0,2.125,70600.0,INLAND --117.34,34.13,29.0,331.0,85.0,341.0,107.0,0.7069,70300.0,INLAND --117.32,34.11,38.0,1462.0,337.0,1208.0,324.0,2.2604,68100.0,INLAND --117.32,34.11,41.0,1229.0,302.0,994.0,270.0,1.4891,67300.0,INLAND --117.33,34.12,38.0,1703.0,385.0,1356.0,363.0,2.0391,70400.0,INLAND --117.34,34.12,26.0,1008.0,164.0,568.0,196.0,3.3516,105600.0,INLAND --117.34,34.11,29.0,2912.0,566.0,2188.0,518.0,3.2656,90600.0,INLAND --117.35,34.11,34.0,2104.0,388.0,1578.0,365.0,3.0833,88400.0,INLAND --117.34,34.1,14.0,11827.0,2445.0,6640.0,2299.0,2.4878,103800.0,INLAND --117.35,34.09,14.0,5983.0,1224.0,3255.0,1150.0,2.5902,111500.0,INLAND --117.35,34.2,5.0,9269.0,1605.0,4916.0,1519.0,4.4367,133200.0,INLAND --117.38,34.22,16.0,774.0,122.0,489.0,136.0,5.7628,221300.0,INLAND --117.41,34.24,20.0,1160.0,181.0,543.0,188.0,5.2072,164300.0,INLAND --117.41,34.23,17.0,889.0,131.0,439.0,141.0,6.1426,155000.0,INLAND --117.28,34.17,26.0,3106.0,603.0,1396.0,576.0,3.1736,122200.0,INLAND --117.28,34.17,26.0,3728.0,888.0,1765.0,727.0,1.7456,86800.0,INLAND --117.29,34.17,35.0,4174.0,847.0,2127.0,778.0,3.2232,88300.0,INLAND --117.3,34.18,28.0,2685.0,425.0,1304.0,420.0,4.3676,111100.0,INLAND --117.3,34.17,30.0,2483.0,573.0,1172.0,438.0,1.875,89700.0,INLAND --117.31,34.17,25.0,2795.0,596.0,1650.0,569.0,3.0078,87100.0,INLAND --117.32,34.17,6.0,5661.0,1287.0,2943.0,1162.0,3.6362,106500.0,INLAND --117.3,34.18,19.0,2526.0,381.0,1176.0,381.0,5.5136,137100.0,INLAND --117.32,34.19,6.0,1068.0,182.0,999.0,188.0,4.7222,109000.0,INLAND --117.34,34.18,7.0,2914.0,481.0,1584.0,499.0,4.6312,124900.0,INLAND --117.33,34.17,5.0,4718.0,1140.0,2564.0,1056.0,2.9877,119900.0,INLAND --117.33,34.17,13.0,3616.0,665.0,2189.0,620.0,3.7949,106300.0,INLAND --117.32,34.16,9.0,711.0,139.0,316.0,152.0,4.0156,131000.0,INLAND --117.31,34.15,7.0,5747.0,1307.0,2578.0,1147.0,3.3281,122200.0,INLAND --117.3,34.15,33.0,1607.0,282.0,608.0,260.0,4.3438,115000.0,INLAND --117.3,34.15,38.0,740.0,163.0,332.0,138.0,2.4107,88000.0,INLAND --117.3,34.15,40.0,961.0,199.0,509.0,182.0,2.06,85500.0,INLAND --117.3,34.14,39.0,1781.0,335.0,841.0,320.0,1.9432,89000.0,INLAND --117.31,34.14,44.0,1487.0,273.0,972.0,281.0,3.2292,86100.0,INLAND --117.31,34.14,38.0,2011.0,448.0,1190.0,403.0,1.8654,89400.0,INLAND --117.31,34.15,34.0,2037.0,385.0,1195.0,391.0,3.9231,96000.0,INLAND --117.3,34.15,45.0,942.0,166.0,401.0,174.0,3.8594,90800.0,INLAND --117.31,34.13,38.0,1287.0,284.0,1047.0,269.0,2.2865,65500.0,INLAND --117.3,34.12,34.0,1127.0,275.0,971.0,249.0,2.0583,64800.0,INLAND --117.31,34.12,37.0,1412.0,343.0,1127.0,351.0,1.1667,70900.0,INLAND --117.31,34.13,35.0,1622.0,393.0,1296.0,362.0,1.9286,68500.0,INLAND --117.31,34.13,36.0,1076.0,283.0,773.0,224.0,2.6307,66400.0,INLAND --117.3,34.11,42.0,525.0,111.0,444.0,120.0,2.6771,67000.0,INLAND --117.31,34.11,38.0,1208.0,321.0,1225.0,317.0,1.4663,64000.0,INLAND --117.31,34.11,52.0,851.0,190.0,731.0,190.0,1.9044,64900.0,INLAND --117.31,34.11,41.0,1105.0,257.0,816.0,197.0,1.9375,64100.0,INLAND --117.31,34.1,52.0,1457.0,415.0,1238.0,341.0,2.0089,68100.0,INLAND --117.3,34.1,44.0,589.0,130.0,504.0,137.0,1.775,63400.0,INLAND --117.31,34.1,28.0,2899.0,755.0,2406.0,655.0,1.5208,69500.0,INLAND --117.32,34.1,27.0,2053.0,461.0,1737.0,463.0,3.1213,78800.0,INLAND --117.32,34.1,42.0,801.0,176.0,711.0,183.0,1.8681,59700.0,INLAND --117.3,34.09,40.0,1051.0,244.0,745.0,243.0,2.1842,75200.0,INLAND --117.31,34.09,34.0,1336.0,345.0,1009.0,311.0,1.608,73700.0,INLAND --117.27,34.16,32.0,2894.0,427.0,1151.0,446.0,6.2236,159700.0,INLAND --117.28,34.15,36.0,1734.0,280.0,604.0,259.0,3.8292,122200.0,INLAND --117.28,34.15,38.0,1981.0,343.0,796.0,344.0,3.8125,97400.0,INLAND --117.29,34.15,42.0,1811.0,345.0,856.0,352.0,2.9667,97000.0,INLAND --117.29,34.16,38.0,2458.0,488.0,1135.0,453.0,2.875,99100.0,INLAND --117.28,34.16,26.0,2469.0,532.0,1068.0,501.0,1.9832,122100.0,INLAND --117.28,34.16,35.0,2028.0,456.0,972.0,398.0,2.3778,90700.0,INLAND --117.28,34.15,32.0,2170.0,430.0,815.0,401.0,3.1765,135000.0,INLAND --117.28,34.14,40.0,2364.0,438.0,968.0,416.0,3.4906,93300.0,INLAND --117.29,34.14,52.0,1683.0,266.0,646.0,256.0,4.0481,97300.0,INLAND --117.29,34.15,49.0,1820.0,321.0,757.0,324.0,3.2976,102600.0,INLAND --117.28,34.14,40.0,2190.0,496.0,1214.0,493.0,2.3947,81900.0,INLAND --117.29,34.14,45.0,1598.0,314.0,771.0,319.0,2.5417,82900.0,INLAND --117.29,34.14,48.0,1717.0,307.0,610.0,267.0,3.125,97600.0,INLAND --117.29,34.14,39.0,1989.0,401.0,805.0,341.0,2.425,90000.0,INLAND --117.3,34.14,37.0,1454.0,261.0,761.0,248.0,2.3438,88100.0,INLAND --117.28,34.13,44.0,2469.0,568.0,1363.0,517.0,1.8396,77100.0,INLAND --117.28,34.13,29.0,2077.0,577.0,1418.0,524.0,1.8281,76800.0,INLAND --117.3,34.13,52.0,1859.0,395.0,968.0,333.0,1.2034,79500.0,INLAND --117.29,34.13,52.0,2424.0,528.0,1171.0,455.0,1.4815,77900.0,INLAND --117.28,34.12,36.0,2991.0,822.0,2378.0,751.0,1.3571,70600.0,INLAND --117.29,34.12,40.0,2198.0,612.0,1517.0,531.0,1.0951,65800.0,INLAND --117.29,34.13,44.0,2337.0,563.0,1238.0,467.0,1.5156,75800.0,INLAND --117.3,34.13,42.0,2115.0,557.0,1532.0,494.0,1.4531,71500.0,INLAND --117.3,34.12,43.0,1018.0,261.0,736.0,215.0,2.6,66900.0,INLAND --117.28,34.12,47.0,2456.0,611.0,1653.0,512.0,1.3973,66100.0,INLAND --117.29,34.12,47.0,1648.0,432.0,1308.0,385.0,1.2069,68200.0,INLAND --117.29,34.12,45.0,1369.0,351.0,1046.0,274.0,1.8438,72100.0,INLAND --117.3,34.12,50.0,1629.0,437.0,1581.0,394.0,2.2019,63500.0,INLAND --117.29,34.11,48.0,1498.0,448.0,1586.0,455.0,1.1687,70800.0,INLAND --117.29,34.11,35.0,2014.0,677.0,1714.0,612.0,0.7075,78800.0,INLAND --117.29,34.11,35.0,2426.0,715.0,1920.0,586.0,1.5561,68000.0,INLAND --117.28,34.11,39.0,1573.0,418.0,1258.0,359.0,1.4896,69500.0,INLAND --117.29,34.1,19.0,1204.0,405.0,844.0,424.0,0.7235,71300.0,INLAND --117.29,34.09,24.0,1451.0,387.0,1178.0,330.0,1.1806,68300.0,INLAND --117.3,34.1,49.0,60.0,11.0,76.0,13.0,2.5625,75000.0,INLAND --117.28,34.09,44.0,376.0,,273.0,107.0,2.2917,90800.0,INLAND --117.3,34.07,34.0,567.0,143.0,387.0,138.0,1.7981,73300.0,INLAND --117.25,34.16,31.0,1516.0,238.0,596.0,255.0,4.3362,159400.0,INLAND --117.25,34.16,37.0,1709.0,278.0,744.0,274.0,3.7188,116600.0,INLAND --117.25,34.16,35.0,2707.0,481.0,1595.0,479.0,3.9018,91500.0,INLAND --117.25,34.15,30.0,1770.0,380.0,990.0,348.0,3.3,97600.0,INLAND --117.26,34.15,33.0,2271.0,389.0,1100.0,380.0,3.5978,88300.0,INLAND --117.26,34.16,31.0,3538.0,658.0,1715.0,663.0,3.7125,98000.0,INLAND --117.26,34.17,30.0,1937.0,351.0,945.0,344.0,3.8906,123700.0,INLAND --117.27,34.17,16.0,30.0,3.0,49.0,8.0,4.625,250000.0,INLAND --117.25,34.15,22.0,7935.0,1976.0,4523.0,1791.0,2.1465,88800.0,INLAND --117.25,34.14,19.0,5163.0,1229.0,2680.0,1141.0,2.2482,114500.0,INLAND --117.27,34.14,36.0,3795.0,676.0,1742.0,585.0,4.1,96400.0,INLAND --117.27,34.14,35.0,1517.0,257.0,658.0,245.0,4.4435,97600.0,INLAND --117.27,34.15,35.0,1490.0,253.0,705.0,253.0,3.3616,95300.0,INLAND --117.25,34.13,33.0,2898.0,503.0,1374.0,487.0,3.6856,90000.0,INLAND --117.25,34.13,37.0,2498.0,472.0,1291.0,487.0,3.0,83400.0,INLAND --117.26,34.13,37.0,2403.0,550.0,1234.0,493.0,2.0,72100.0,INLAND --117.26,34.13,39.0,3521.0,747.0,2256.0,721.0,2.1375,87500.0,INLAND --117.27,34.12,31.0,2209.0,636.0,1314.0,562.0,1.7235,78800.0,INLAND --117.27,34.13,40.0,1298.0,254.0,793.0,268.0,3.0721,83800.0,INLAND --117.27,34.13,36.0,3337.0,687.0,2388.0,589.0,2.9628,87800.0,INLAND --117.25,34.13,35.0,861.0,148.0,381.0,138.0,2.5234,88200.0,INLAND --117.25,34.12,17.0,3107.0,752.0,2160.0,643.0,1.8463,72600.0,INLAND --117.25,34.11,32.0,2910.0,641.0,2011.0,614.0,2.7473,70800.0,INLAND --117.27,34.12,27.0,2896.0,684.0,1514.0,668.0,1.462,70200.0,INLAND --117.27,34.12,52.0,954.0,246.0,943.0,256.0,0.8658,87500.0,INLAND --117.25,34.11,30.0,2173.0,560.0,1509.0,486.0,1.4079,67700.0,INLAND --117.26,34.11,33.0,1210.0,288.0,850.0,238.0,1.2171,59300.0,INLAND --117.27,34.11,44.0,567.0,134.0,565.0,150.0,1.8281,62900.0,INLAND --117.27,34.1,9.0,3904.0,1042.0,3688.0,896.0,1.8022,78000.0,INLAND --117.33,34.09,29.0,1960.0,415.0,1681.0,435.0,2.9292,84500.0,INLAND --117.33,34.08,35.0,2240.0,423.0,1394.0,396.0,3.1799,86700.0,INLAND --117.33,34.08,37.0,2267.0,405.0,1175.0,403.0,3.75,95200.0,INLAND --117.33,34.07,32.0,2086.0,458.0,1355.0,412.0,2.5238,89200.0,INLAND --117.34,34.07,46.0,1851.0,425.0,1100.0,377.0,2.0461,90500.0,INLAND --117.34,34.08,35.0,1380.0,248.0,730.0,264.0,3.2305,93700.0,INLAND --117.34,34.08,33.0,4924.0,1007.0,3502.0,953.0,3.233,99400.0,INLAND --117.32,34.09,38.0,1585.0,345.0,1347.0,368.0,2.375,75300.0,INLAND --117.32,34.09,30.0,1129.0,251.0,1034.0,237.0,2.3917,78600.0,INLAND --117.32,34.08,41.0,1359.0,264.0,786.0,244.0,2.5208,85500.0,INLAND --117.32,34.08,46.0,1308.0,276.0,576.0,244.0,3.1875,84000.0,INLAND --117.32,34.07,52.0,1226.0,269.0,693.0,272.0,1.9963,76900.0,INLAND --117.32,34.06,52.0,802.0,160.0,564.0,131.0,2.1591,63500.0,INLAND --117.33,34.05,26.0,613.0,149.0,431.0,130.0,1.3977,73100.0,INLAND --117.33,34.06,42.0,530.0,123.0,390.0,124.0,1.0469,67000.0,INLAND --117.33,34.06,48.0,732.0,149.0,486.0,139.0,2.5673,68200.0,INLAND --117.33,34.06,36.0,755.0,157.0,625.0,152.0,2.0242,65000.0,INLAND --117.32,34.06,46.0,476.0,102.0,476.0,91.0,1.4511,73100.0,INLAND --117.31,34.08,43.0,1697.0,387.0,1181.0,352.0,1.9234,74600.0,INLAND --117.31,34.08,40.0,2011.0,495.0,1528.0,469.0,1.9375,69900.0,INLAND --117.31,34.07,40.0,2936.0,732.0,2024.0,676.0,2.1139,70900.0,INLAND --117.32,34.07,26.0,971.0,245.0,592.0,207.0,2.1125,84000.0,INLAND --117.31,34.08,37.0,953.0,231.0,611.0,230.0,1.9926,81500.0,INLAND --117.31,34.05,6.0,7423.0,2111.0,4092.0,1789.0,2.7002,88300.0,INLAND --117.33,34.04,18.0,1837.0,388.0,727.0,336.0,2.5187,116700.0,INLAND --117.33,34.03,14.0,1582.0,347.0,825.0,259.0,2.8281,106300.0,INLAND --117.31,34.04,29.0,2481.0,383.0,1188.0,385.0,4.7344,134600.0,INLAND --117.31,34.04,5.0,2785.0,577.0,1310.0,536.0,3.39,149500.0,INLAND --117.3,34.05,6.0,2155.0,,1039.0,391.0,1.6675,95800.0,INLAND --117.3,34.05,7.0,4672.0,1121.0,2534.0,1046.0,3.4228,115700.0,INLAND --117.29,34.06,7.0,1971.0,403.0,1336.0,423.0,4.5066,111500.0,INLAND --117.28,34.06,2.0,1658.0,290.0,868.0,304.0,5.1365,136700.0,INLAND --117.32,34.02,17.0,1779.0,292.0,1006.0,293.0,4.6708,123100.0,INLAND --117.33,34.03,18.0,2342.0,402.0,1264.0,382.0,4.7986,123700.0,INLAND --117.32,34.03,13.0,3853.0,761.0,1685.0,669.0,3.9024,122400.0,INLAND --117.31,34.03,24.0,1966.0,299.0,786.0,302.0,5.0318,134500.0,INLAND --117.31,34.03,9.0,1199.0,187.0,629.0,207.0,5.7393,151600.0,INLAND --117.31,34.02,18.0,1634.0,274.0,899.0,285.0,5.2139,129300.0,INLAND --117.29,34.03,9.0,8185.0,1525.0,3630.0,1466.0,4.1667,197700.0,INLAND --117.27,34.09,36.0,848.0,186.0,737.0,169.0,0.9838,79300.0,INLAND --117.27,34.08,38.0,1093.0,256.0,856.0,212.0,1.4279,73000.0,INLAND --117.25,34.08,30.0,2981.0,605.0,1784.0,573.0,2.45,85800.0,INLAND --117.25,34.07,21.0,3067.0,706.0,2140.0,687.0,2.4432,78800.0,INLAND --117.27,34.07,21.0,418.0,132.0,401.0,120.0,1.7206,82100.0,INLAND --117.24,34.04,17.0,3362.0,507.0,1520.0,496.0,6.1986,214500.0,INLAND --117.25,34.04,18.0,5761.0,1063.0,2763.0,1058.0,4.4472,161100.0,INLAND --117.27,34.05,34.0,1703.0,395.0,849.0,359.0,3.1607,138200.0,INLAND --117.27,34.06,20.0,5258.0,1514.0,3780.0,1404.0,2.025,85700.0,INLAND --117.25,34.06,23.0,4503.0,1156.0,3264.0,937.0,1.9821,93000.0,INLAND --117.25,34.06,18.0,5009.0,1108.0,2948.0,963.0,3.0042,106500.0,INLAND --117.24,34.04,5.0,1775.0,234.0,726.0,222.0,7.978,223900.0,INLAND --117.24,34.04,4.0,4289.0,682.0,1981.0,705.0,5.3366,165100.0,INLAND --117.24,34.06,9.0,3603.0,786.0,1782.0,718.0,3.2604,93300.0,INLAND --117.23,34.15,17.0,5036.0,817.0,2084.0,833.0,4.6445,137200.0,INLAND --117.23,34.14,16.0,2577.0,521.0,956.0,472.0,2.5625,129400.0,INLAND --117.24,34.14,6.0,2383.0,606.0,1301.0,488.0,3.016,107500.0,INLAND --117.24,34.15,23.0,3847.0,608.0,1621.0,630.0,4.6111,128400.0,INLAND --117.24,34.15,26.0,2041.0,293.0,936.0,375.0,6.0,140200.0,INLAND --117.21,34.14,16.0,1613.0,245.0,811.0,267.0,5.2591,140700.0,INLAND --117.22,34.15,9.0,2524.0,352.0,1139.0,362.0,6.2516,159300.0,INLAND --117.2,34.15,18.0,1859.0,251.0,747.0,256.0,7.732,173200.0,INLAND --117.2,34.14,14.0,2647.0,524.0,989.0,479.0,3.1513,160000.0,INLAND --117.2,34.14,18.0,1920.0,333.0,890.0,323.0,5.159,144800.0,INLAND --117.24,34.13,24.0,1203.0,310.0,594.0,187.0,1.1522,87500.0,INLAND --117.24,34.13,26.0,3774.0,716.0,1913.0,620.0,3.3534,98900.0,INLAND --117.23,34.12,6.0,4464.0,1093.0,2364.0,952.0,2.3848,81600.0,INLAND --117.23,34.13,10.0,1145.0,293.0,726.0,251.0,1.645,68700.0,INLAND --117.22,34.13,10.0,5951.0,1330.0,3204.0,1159.0,2.7011,110200.0,INLAND --117.2,34.13,14.0,3998.0,711.0,1509.0,665.0,3.4138,126700.0,INLAND --117.22,34.12,34.0,2457.0,499.0,1538.0,507.0,2.809,82500.0,INLAND --117.21,34.13,31.0,3037.0,565.0,1834.0,575.0,3.3445,92900.0,INLAND --117.2,34.12,24.0,3532.0,618.0,1681.0,590.0,3.5,113900.0,INLAND --117.24,34.12,29.0,2654.0,667.0,1822.0,593.0,2.1563,72300.0,INLAND --117.24,34.11,23.0,1920.0,454.0,1161.0,358.0,2.2109,73200.0,INLAND --117.23,34.11,22.0,1162.0,221.0,995.0,244.0,2.5875,81300.0,INLAND --117.23,34.12,18.0,1439.0,319.0,699.0,310.0,2.1071,73500.0,INLAND --117.23,34.11,33.0,2170.0,500.0,1425.0,472.0,2.0133,78300.0,INLAND --117.22,34.12,30.0,2512.0,597.0,1390.0,523.0,2.3725,77200.0,INLAND --117.22,34.11,26.0,2972.0,,1972.0,532.0,2.0388,80400.0,INLAND --117.21,34.12,32.0,1677.0,354.0,1021.0,339.0,3.6853,90900.0,INLAND --117.21,34.11,27.0,1245.0,229.0,692.0,234.0,3.2176,89400.0,INLAND --117.21,34.11,26.0,1757.0,304.0,905.0,281.0,3.4103,90900.0,INLAND --117.19,34.1,5.0,2167.0,384.0,1174.0,358.0,4.0114,97700.0,INLAND --117.21,34.08,5.0,5749.0,1385.0,2382.0,1088.0,3.0587,143100.0,INLAND --117.22,34.07,8.0,3065.0,692.0,1440.0,666.0,3.2368,129200.0,INLAND --117.17,34.12,2.0,3867.0,573.0,1275.0,433.0,5.4138,164400.0,INLAND --117.12,34.1,40.0,96.0,14.0,46.0,14.0,3.2708,162500.0,INLAND --117.17,34.12,3.0,15695.0,2248.0,6080.0,1920.0,6.2178,173900.0,INLAND --117.18,34.08,28.0,2243.0,399.0,1464.0,379.0,3.2105,90300.0,INLAND --117.19,34.08,22.0,2467.0,555.0,1567.0,494.0,2.6536,84700.0,INLAND --117.19,34.08,5.0,4458.0,751.0,2392.0,773.0,4.5938,126500.0,INLAND --117.18,34.07,14.0,1258.0,245.0,752.0,264.0,3.3924,97400.0,INLAND --117.18,34.07,28.0,1306.0,279.0,885.0,255.0,2.1154,75300.0,INLAND --117.18,34.07,7.0,1347.0,301.0,799.0,276.0,2.9485,112500.0,INLAND --117.18,34.06,26.0,1953.0,446.0,1284.0,414.0,1.3485,85100.0,INLAND --117.18,34.06,28.0,699.0,180.0,432.0,168.0,2.1875,81900.0,INLAND --117.19,34.06,37.0,1467.0,348.0,1316.0,339.0,1.448,72800.0,INLAND --117.19,34.07,40.0,2374.0,500.0,1772.0,455.0,2.189,72500.0,INLAND --117.18,34.06,52.0,954.0,233.0,533.0,239.0,1.3021,100000.0,INLAND --117.19,34.06,21.0,6107.0,1559.0,2805.0,1444.0,2.5643,102700.0,INLAND --117.18,34.05,29.0,3436.0,731.0,1323.0,676.0,2.4943,122300.0,INLAND --117.17,34.05,29.0,4007.0,700.0,1576.0,696.0,3.1801,149300.0,INLAND --117.18,34.04,41.0,1766.0,288.0,753.0,278.0,4.9125,140700.0,INLAND --117.18,34.05,52.0,1820.0,342.0,601.0,315.0,2.6129,137000.0,INLAND --117.19,34.05,52.0,1949.0,432.0,767.0,392.0,2.5143,117600.0,INLAND --117.19,34.05,33.0,1688.0,313.0,808.0,298.0,3.2188,117800.0,INLAND --117.19,34.05,33.0,3007.0,498.0,1252.0,488.0,3.8816,134600.0,INLAND --117.2,34.04,24.0,1587.0,222.0,676.0,234.0,6.0715,173400.0,INLAND --117.2,34.04,23.0,1762.0,267.0,1132.0,279.0,5.9915,153200.0,INLAND --117.21,34.04,14.0,3063.0,426.0,1570.0,419.0,6.2917,224700.0,INLAND --117.21,34.05,4.0,2904.0,764.0,1250.0,664.0,3.2131,137500.0,INLAND --117.18,34.04,38.0,2492.0,381.0,1003.0,369.0,3.6875,152800.0,INLAND --117.19,34.03,36.0,2223.0,361.0,942.0,331.0,4.6806,152400.0,INLAND --117.19,34.03,25.0,2513.0,340.0,900.0,320.0,6.4962,182400.0,INLAND --117.19,34.03,20.0,856.0,124.0,395.0,145.0,10.8634,381800.0,INLAND --117.16,34.08,9.0,5306.0,993.0,2630.0,925.0,4.51,135800.0,INLAND --117.17,34.07,24.0,6573.0,1235.0,2904.0,1202.0,3.0651,108000.0,INLAND --117.17,34.08,5.0,1473.0,228.0,842.0,257.0,4.875,138100.0,INLAND --117.15,34.07,15.0,1852.0,316.0,906.0,298.0,5.3526,129800.0,INLAND --117.14,34.07,3.0,5542.0,828.0,2506.0,806.0,5.5875,162000.0,INLAND --117.14,34.06,15.0,3057.0,510.0,1154.0,460.0,3.9741,141100.0,INLAND --117.15,34.06,25.0,3670.0,644.0,1815.0,634.0,4.0658,127400.0,INLAND --117.14,34.05,5.0,2634.0,359.0,1173.0,372.0,6.746,204100.0,INLAND --117.15,34.05,9.0,1442.0,219.0,633.0,230.0,5.0227,162300.0,INLAND --117.16,34.05,23.0,3215.0,462.0,1411.0,435.0,6.0701,149900.0,INLAND --117.17,34.05,24.0,2877.0,507.0,1141.0,474.0,4.2059,121500.0,INLAND --117.15,34.04,14.0,2845.0,420.0,1172.0,377.0,7.5822,283100.0,INLAND --117.16,34.06,33.0,2101.0,468.0,1997.0,412.0,2.8125,117200.0,INLAND --117.16,34.06,17.0,2285.0,554.0,1412.0,541.0,1.8152,94300.0,INLAND --117.14,34.01,26.0,7561.0,1051.0,2909.0,1012.0,7.2972,269600.0,INLAND --117.15,34.03,32.0,2832.0,393.0,1033.0,385.0,6.5648,237200.0,INLAND --117.15,34.03,26.0,5305.0,701.0,1818.0,676.0,6.1461,217100.0,INLAND --117.17,34.03,33.0,4583.0,648.0,1760.0,638.0,6.3308,230600.0,INLAND --117.09,34.01,37.0,106.0,18.0,27.0,12.0,4.0556,131300.0,INLAND --117.09,34.07,24.0,6260.0,1271.0,3132.0,1189.0,2.5156,103000.0,INLAND --117.12,34.06,38.0,281.0,55.0,151.0,52.0,1.3906,120800.0,INLAND --117.13,34.06,4.0,3078.0,510.0,1341.0,486.0,4.9688,163200.0,INLAND --117.13,34.07,34.0,2405.0,541.0,1342.0,514.0,2.8031,86900.0,INLAND --117.08,34.08,34.0,45.0,11.0,39.0,14.0,3.0625,500001.0,INLAND --117.12,34.04,25.0,2495.0,438.0,1071.0,405.0,4.8173,146600.0,INLAND --117.07,34.05,14.0,5764.0,1006.0,1876.0,841.0,1.9694,173200.0,INLAND --117.03,34.07,16.0,3784.0,577.0,1615.0,525.0,4.2333,220300.0,INLAND --117.02,34.03,19.0,4415.0,648.0,1627.0,619.0,4.2361,191600.0,INLAND --117.03,34.02,26.0,3909.0,670.0,1884.0,665.0,4.1361,121000.0,INLAND --117.01,34.01,15.0,5592.0,891.0,2419.0,840.0,4.7193,135200.0,INLAND --116.98,34.05,6.0,2290.0,312.0,957.0,274.0,7.2708,316700.0,INLAND --117.05,34.04,23.0,3967.0,766.0,1518.0,698.0,2.29,111800.0,INLAND --117.1,34.03,24.0,4144.0,826.0,2127.0,772.0,2.5172,96000.0,INLAND --117.08,34.03,23.0,3862.0,699.0,2082.0,652.0,3.154,115700.0,INLAND --117.08,34.02,20.0,3111.0,563.0,1453.0,538.0,3.3365,122800.0,INLAND --117.06,34.02,24.0,3912.0,809.0,1926.0,762.0,2.6875,116300.0,INLAND --117.05,34.02,21.0,3098.0,646.0,1351.0,614.0,2.598,106700.0,INLAND --117.05,34.01,27.0,5484.0,1205.0,2645.0,1131.0,2.1927,116700.0,INLAND --117.04,34.02,24.0,4663.0,1213.0,1851.0,1116.0,1.4418,103500.0,INLAND --117.05,34.03,28.0,3009.0,698.0,1200.0,626.0,1.3993,104600.0,INLAND --117.06,34.03,27.0,1945.0,446.0,859.0,418.0,1.5203,126200.0,INLAND --117.03,34.03,26.0,3501.0,664.0,1860.0,681.0,3.0403,113500.0,INLAND --117.04,34.03,29.0,3375.0,795.0,1760.0,699.0,2.7028,92000.0,INLAND --117.04,34.04,30.0,3474.0,735.0,1674.0,691.0,2.5863,98300.0,INLAND --117.29,35.54,35.0,7922.0,1636.0,3431.0,1329.0,3.4145,40400.0,INLAND --117.37,34.59,39.0,8193.0,1747.0,6852.0,1597.0,2.3832,35000.0,INLAND --117.62,34.44,6.0,8884.0,1687.0,3767.0,1334.0,3.599,140200.0,INLAND --117.56,34.42,6.0,4264.0,749.0,2005.0,666.0,3.4695,138800.0,INLAND --117.51,34.41,5.0,2884.0,567.0,1396.0,465.0,3.7361,119600.0,INLAND --117.44,34.45,6.0,6068.0,1137.0,3094.0,947.0,3.5167,130900.0,INLAND --117.54,34.47,4.0,6712.0,1200.0,3126.0,1026.0,3.2277,126500.0,INLAND --117.5,34.66,20.0,1319.0,309.0,486.0,196.0,2.0184,84900.0,INLAND --117.42,34.59,8.0,5445.0,1360.0,3220.0,1214.0,1.7567,69500.0,INLAND --117.41,34.58,14.0,859.0,212.0,541.0,181.0,1.6838,57900.0,INLAND --117.4,34.58,18.0,755.0,169.0,483.0,165.0,1.4196,64700.0,INLAND --117.41,34.58,10.0,2964.0,668.0,1853.0,609.0,1.6047,73400.0,INLAND --117.54,34.55,5.0,2949.0,671.0,1620.0,530.0,2.9479,83300.0,INLAND --117.36,34.54,7.0,3940.0,764.0,2140.0,711.0,3.0357,91300.0,INLAND --117.63,34.37,20.0,7052.0,1306.0,2197.0,810.0,3.7252,167100.0,INLAND --117.61,34.34,18.0,5210.0,912.0,1301.0,464.0,4.8623,176900.0,INLAND --117.53,34.28,35.0,1529.0,338.0,688.0,256.0,4.1083,108000.0,INLAND --117.55,34.25,39.0,1578.0,317.0,872.0,322.0,4.555,153100.0,INLAND --117.03,34.91,27.0,2718.0,583.0,1472.0,509.0,2.825,76600.0,INLAND --117.01,34.9,36.0,2181.0,555.0,1404.0,492.0,2.3077,55500.0,INLAND --117.02,34.9,37.0,1199.0,351.0,782.0,296.0,1.6515,61600.0,INLAND --117.06,34.9,36.0,2828.0,916.0,1762.0,736.0,1.4318,59600.0,INLAND --117.01,34.9,34.0,2194.0,519.0,1326.0,515.0,2.1056,72000.0,INLAND --117.0,34.89,29.0,2637.0,512.0,1188.0,446.0,2.99,69400.0,INLAND --117.01,34.89,26.0,2599.0,498.0,1332.0,443.0,2.7198,70400.0,INLAND --117.02,34.89,29.0,3111.0,661.0,1530.0,608.0,2.8281,69300.0,INLAND --117.04,34.89,37.0,1884.0,366.0,1052.0,353.0,3.175,66800.0,INLAND --117.05,34.89,36.0,1199.0,260.0,665.0,229.0,3.7065,62000.0,INLAND --117.22,34.44,5.0,4787.0,910.0,1944.0,806.0,2.6576,98500.0,INLAND --117.2,34.46,7.0,8414.0,1584.0,5146.0,1517.0,3.2794,92500.0,INLAND --117.12,34.46,17.0,1613.0,326.0,765.0,300.0,2.6827,110400.0,INLAND --117.11,34.43,14.0,3026.0,556.0,1349.0,485.0,2.8021,111200.0,INLAND --117.13,34.39,29.0,2251.0,464.0,855.0,315.0,3.4183,104100.0,INLAND --117.25,34.49,4.0,2372.0,361.0,1017.0,322.0,5.1112,170900.0,INLAND --117.23,34.49,9.0,4055.0,536.0,1458.0,478.0,5.4201,170600.0,INLAND --117.21,34.49,14.0,2125.0,348.0,1067.0,360.0,3.6333,116200.0,INLAND --117.2,34.5,10.0,4201.0,850.0,2378.0,808.0,2.1781,92200.0,INLAND --117.17,34.49,13.0,4460.0,925.0,2225.0,840.0,2.0136,94100.0,INLAND --117.15,34.48,31.0,265.0,55.0,186.0,55.0,2.125,64800.0,INLAND --117.18,34.48,8.0,3561.0,691.0,2156.0,659.0,2.7778,86900.0,INLAND --117.2,34.48,7.0,4998.0,953.0,2764.0,891.0,3.205,101900.0,INLAND --117.22,34.48,7.0,2449.0,447.0,1217.0,408.0,3.6646,109900.0,INLAND --117.26,34.53,10.0,3103.0,520.0,1283.0,464.0,3.071,151600.0,INLAND --117.25,34.51,7.0,3200.0,477.0,1522.0,470.0,4.6914,142200.0,INLAND --117.23,34.51,9.0,5756.0,807.0,2158.0,758.0,5.5875,167800.0,INLAND --117.21,34.51,17.0,4379.0,629.0,1720.0,595.0,5.086,148400.0,INLAND --117.25,34.53,13.0,5841.0,955.0,2455.0,915.0,4.1333,158200.0,INLAND --117.22,34.54,8.0,12526.0,2495.0,6133.0,2324.0,2.9072,119200.0,INLAND --117.2,34.52,12.0,4476.0,761.0,2255.0,735.0,3.925,118500.0,INLAND --117.17,34.51,15.0,5151.0,942.0,2896.0,897.0,3.4875,90800.0,INLAND --117.18,34.54,5.0,3772.0,619.0,2097.0,635.0,3.8194,98500.0,INLAND --117.3,34.53,38.0,1643.0,489.0,1196.0,406.0,1.2275,64100.0,INLAND --117.3,34.54,31.0,1174.0,360.0,1161.0,328.0,1.06,56500.0,INLAND --117.3,34.54,25.0,2546.0,488.0,1338.0,487.0,3.2596,85400.0,INLAND --117.31,34.53,26.0,2299.0,496.0,1259.0,441.0,2.6125,79900.0,INLAND --117.32,34.55,18.0,279.0,59.0,188.0,60.0,0.8246,91700.0,INLAND --117.32,34.54,9.0,5904.0,1165.0,3489.0,1063.0,3.125,92800.0,INLAND --117.33,34.53,10.0,3781.0,712.0,2044.0,685.0,3.0943,97100.0,INLAND --117.34,34.51,6.0,5667.0,1385.0,2447.0,1199.0,2.3617,103100.0,INLAND --117.35,34.5,10.0,2163.0,392.0,1174.0,362.0,3.375,98000.0,INLAND --117.34,34.49,9.0,3293.0,585.0,1678.0,530.0,3.2941,98300.0,INLAND --117.36,34.48,3.0,16533.0,2549.0,7588.0,2285.0,3.9792,122100.0,INLAND --117.3,34.52,34.0,4493.0,838.0,2335.0,779.0,3.1635,74300.0,INLAND --117.32,34.51,16.0,3072.0,612.0,1283.0,604.0,2.8929,115600.0,INLAND --117.31,34.51,18.0,2704.0,698.0,1611.0,597.0,2.0243,82300.0,INLAND --117.28,34.51,10.0,4676.0,884.0,2845.0,812.0,3.0181,100400.0,INLAND --117.31,34.5,14.0,2443.0,447.0,883.0,465.0,2.1111,116700.0,INLAND --117.32,34.49,7.0,4584.0,1051.0,2049.0,918.0,1.6232,93400.0,INLAND --117.29,34.49,3.0,7689.0,1545.0,3804.0,1399.0,3.3871,111800.0,INLAND --117.32,34.48,8.0,4627.0,887.0,2739.0,846.0,3.0204,93100.0,INLAND --117.27,34.5,7.0,2045.0,342.0,878.0,292.0,6.0296,194100.0,INLAND --117.27,34.49,7.0,2344.0,351.0,846.0,314.0,4.7361,174500.0,INLAND --117.27,34.48,8.0,1794.0,276.0,690.0,271.0,3.662,165300.0,INLAND --117.26,34.48,6.0,4632.0,753.0,1851.0,694.0,4.1933,163100.0,INLAND --117.27,34.5,8.0,3567.0,543.0,1133.0,419.0,5.3733,302600.0,INLAND --117.25,34.41,13.0,3682.0,668.0,1606.0,668.0,2.1875,119700.0,INLAND --117.28,34.41,14.0,2105.0,396.0,960.0,396.0,2.9934,118200.0,INLAND --117.29,34.41,11.0,5934.0,1380.0,2756.0,1239.0,1.5758,108300.0,INLAND --117.3,34.39,11.0,3572.0,592.0,1876.0,507.0,3.6615,105100.0,INLAND --117.27,34.4,8.0,6042.0,979.0,3031.0,991.0,3.3438,124400.0,INLAND --117.27,34.39,6.0,6988.0,1121.0,3660.0,1092.0,4.2224,125700.0,INLAND --117.31,34.35,9.0,2404.0,390.0,1074.0,359.0,5.0198,151900.0,INLAND --117.31,34.41,14.0,3019.0,643.0,1639.0,582.0,1.5288,103400.0,INLAND --117.32,34.41,13.0,2032.0,348.0,1038.0,344.0,4.2891,120100.0,INLAND --117.33,34.41,13.0,3684.0,604.0,1767.0,585.0,3.7478,113500.0,INLAND --117.34,34.39,8.0,3579.0,672.0,2216.0,630.0,3.4038,100500.0,INLAND --117.31,34.39,15.0,1703.0,273.0,847.0,266.0,3.7917,123400.0,INLAND --117.39,34.38,4.0,7151.0,1295.0,3527.0,1170.0,3.5696,129700.0,INLAND --117.3,34.46,8.0,6246.0,1273.0,3883.0,1264.0,2.7917,98200.0,INLAND --117.31,34.44,10.0,1731.0,299.0,1056.0,312.0,3.6007,104000.0,INLAND --117.31,34.43,16.0,5130.0,1172.0,3126.0,1046.0,1.6784,71900.0,INLAND --117.35,34.44,9.0,11810.0,2181.0,6716.0,2081.0,3.1821,95600.0,INLAND --117.38,34.44,4.0,5083.0,867.0,2541.0,856.0,4.2414,121400.0,INLAND --117.34,34.46,9.0,5983.0,1122.0,3515.0,1064.0,3.1505,102000.0,INLAND --117.27,34.42,9.0,5643.0,1005.0,3166.0,957.0,3.2077,93300.0,INLAND --117.26,34.43,11.0,4597.0,782.0,2534.0,776.0,3.3368,99300.0,INLAND --117.27,34.45,8.0,6463.0,1095.0,3213.0,1031.0,3.2215,108800.0,INLAND --116.72,34.89,14.0,4527.0,875.0,1640.0,590.0,2.8594,81700.0,INLAND --115.93,35.55,18.0,1321.0,272.0,754.0,226.0,3.4028,67500.0,INLAND --115.75,35.23,5.0,208.0,78.0,132.0,56.0,2.5333,75000.0,INLAND --115.53,34.91,12.0,807.0,199.0,246.0,102.0,2.5391,40000.0,INLAND --116.51,34.85,15.0,3149.0,713.0,1281.0,486.0,2.0,64700.0,INLAND --116.57,35.43,8.0,9975.0,1743.0,6835.0,1439.0,2.7138,22500.0,INLAND --116.14,34.45,12.0,8796.0,1721.0,11139.0,1680.0,2.2612,137500.0,INLAND --116.32,34.1,10.0,4256.0,861.0,1403.0,686.0,2.6618,81000.0,INLAND --116.27,34.13,37.0,452.0,109.0,184.0,59.0,3.7292,65800.0,INLAND --116.31,34.13,20.0,2352.0,556.0,1217.0,481.0,1.6063,55400.0,INLAND --116.35,34.13,9.0,1969.0,406.0,805.0,349.0,1.5491,62300.0,INLAND --116.32,34.14,18.0,1880.0,487.0,994.0,425.0,1.69,54200.0,INLAND --116.33,34.15,13.0,1808.0,411.0,735.0,320.0,1.5489,57400.0,INLAND --116.29,34.18,15.0,4203.0,966.0,1756.0,695.0,2.182,60800.0,INLAND --116.62,34.23,14.0,6438.0,1719.0,1586.0,691.0,1.6136,67400.0,INLAND --116.73,34.52,16.0,1247.0,315.0,433.0,159.0,1.0568,75000.0,INLAND --116.51,34.45,21.0,8502.0,2634.0,2330.0,991.0,1.3811,51300.0,INLAND --116.56,34.06,15.0,6928.0,1529.0,2568.0,1075.0,2.5405,69600.0,INLAND --116.44,34.16,19.0,1867.0,361.0,758.0,321.0,2.8929,98100.0,INLAND --116.38,34.2,14.0,4985.0,1238.0,2517.0,954.0,2.0674,65000.0,INLAND --116.39,34.15,15.0,5583.0,1149.0,2709.0,964.0,1.9779,73300.0,INLAND --116.44,34.12,18.0,5584.0,1303.0,2250.0,1158.0,1.5823,72400.0,INLAND --116.47,34.07,22.0,5473.0,1234.0,2581.0,1098.0,1.9375,65300.0,INLAND --116.43,34.1,17.0,6683.0,1296.0,2677.0,1227.0,2.4828,84000.0,INLAND --116.4,34.09,9.0,4855.0,872.0,2098.0,765.0,3.2723,97800.0,INLAND --116.4,34.12,16.0,5648.0,1089.0,2524.0,1008.0,2.6739,78000.0,INLAND --116.38,34.1,6.0,2104.0,348.0,841.0,320.0,4.1458,116300.0,INLAND --116.22,34.21,23.0,1175.0,468.0,355.0,151.0,2.2083,42500.0,INLAND --116.14,34.22,32.0,3298.0,1228.0,763.0,360.0,1.875,47800.0,INLAND --116.06,34.2,29.0,1202.0,290.0,383.0,156.0,1.3371,66900.0,INLAND --116.06,34.15,15.0,10377.0,2331.0,4507.0,1807.0,2.2466,66800.0,INLAND --116.09,34.15,13.0,9444.0,1997.0,4166.0,1482.0,2.6111,65600.0,INLAND --116.15,34.14,18.0,3312.0,705.0,1251.0,512.0,3.0139,82600.0,INLAND --116.05,34.12,19.0,301.0,65.0,150.0,56.0,3.125,65600.0,INLAND --116.02,34.18,8.0,569.0,97.0,312.0,96.0,4.3021,94500.0,INLAND --115.85,34.2,34.0,3868.0,1257.0,890.0,423.0,1.3571,41000.0,INLAND --115.52,34.22,30.0,540.0,136.0,122.0,63.0,1.3333,42500.0,INLAND --116.0,34.12,32.0,3163.0,712.0,1358.0,544.0,2.125,57700.0,INLAND --114.94,34.55,20.0,350.0,95.0,119.0,58.0,1.625,50000.0,INLAND --114.47,34.4,19.0,7650.0,1901.0,1129.0,463.0,1.82,80100.0,INLAND --114.31,34.19,15.0,5612.0,1283.0,1015.0,472.0,1.4936,66900.0,INLAND --114.59,34.83,41.0,812.0,,375.0,158.0,1.7083,48500.0,INLAND --114.65,34.89,17.0,2556.0,587.0,1005.0,401.0,1.6991,69100.0,INLAND --114.6,34.83,46.0,1497.0,309.0,787.0,271.0,2.1908,48100.0,INLAND --114.61,34.84,48.0,1291.0,248.0,580.0,211.0,2.1571,48600.0,INLAND --114.61,34.83,31.0,2478.0,464.0,1346.0,479.0,3.212,70400.0,INLAND --114.64,34.83,10.0,2502.0,573.0,1152.0,481.0,1.7062,86800.0,INLAND --117.36,34.28,18.0,3903.0,715.0,1388.0,428.0,4.2386,157200.0,INLAND --117.28,34.26,18.0,3895.0,,1086.0,375.0,3.3672,133600.0,INLAND --117.31,34.25,29.0,4610.0,,1569.0,592.0,2.7663,97900.0,INLAND --117.32,34.24,29.0,1290.0,263.0,323.0,113.0,1.9265,103300.0,INLAND --117.3,34.24,38.0,4116.0,949.0,1196.0,422.0,3.5625,96500.0,INLAND --117.28,34.24,16.0,3474.0,633.0,853.0,315.0,5.2185,128600.0,INLAND --117.27,34.24,34.0,3687.0,756.0,941.0,367.0,2.875,117600.0,INLAND --117.26,34.24,10.0,4750.0,844.0,1220.0,428.0,4.5536,132400.0,INLAND --117.27,34.23,26.0,6339.0,1244.0,1177.0,466.0,3.7708,110400.0,INLAND --117.16,34.26,27.0,9285.0,1621.0,1135.0,410.0,2.5446,135200.0,INLAND --117.18,34.3,33.0,399.0,87.0,71.0,27.0,1.875,71300.0,INLAND --117.17,34.28,13.0,4867.0,718.0,780.0,250.0,7.1997,253800.0,INLAND --117.19,34.27,16.0,7961.0,1147.0,879.0,280.0,5.2146,255200.0,INLAND --117.21,34.28,16.0,3326.0,569.0,527.0,192.0,5.7421,167600.0,INLAND --117.2,34.26,17.0,9419.0,1455.0,1382.0,459.0,6.2233,230900.0,INLAND --117.22,34.26,16.0,8020.0,1432.0,1749.0,540.0,4.9716,162500.0,INLAND --117.2,34.24,22.0,8106.0,1665.0,1062.0,423.0,3.0434,137200.0,INLAND --117.17,34.25,15.0,4236.0,753.0,703.0,255.0,3.5625,165500.0,INLAND --117.21,34.22,31.0,5454.0,1053.0,1408.0,504.0,5.0,161100.0,INLAND --117.07,34.24,21.0,4773.0,1047.0,337.0,130.0,3.9375,115000.0,INLAND --117.13,34.24,17.0,2828.0,506.0,673.0,274.0,5.2563,144100.0,INLAND --117.15,34.22,10.0,1039.0,174.0,317.0,109.0,7.2371,171900.0,INLAND --117.12,34.21,19.0,4641.0,994.0,1334.0,474.0,4.5972,123900.0,INLAND --117.1,34.21,22.0,4397.0,931.0,1145.0,445.0,4.5268,108400.0,INLAND --117.09,34.22,16.0,1347.0,327.0,271.0,91.0,4.0,87500.0,INLAND --117.06,34.17,21.0,2520.0,582.0,416.0,151.0,2.712,89000.0,INLAND --117.13,34.17,17.0,1181.0,271.0,248.0,114.0,5.5762,150000.0,INLAND --116.94,34.24,27.0,12342.0,2630.0,1300.0,566.0,1.998,153500.0,INLAND --116.91,34.24,23.0,6379.0,1636.0,1350.0,568.0,1.6336,124500.0,INLAND --116.9,34.25,16.0,3018.0,523.0,556.0,244.0,3.5288,189700.0,INLAND --116.88,34.24,13.0,4137.0,796.0,573.0,218.0,4.6394,226500.0,INLAND --116.88,34.25,11.0,1089.0,198.0,230.0,90.0,4.9643,176000.0,INLAND --116.87,34.24,15.0,4419.0,822.0,622.0,267.0,3.9688,182800.0,INLAND --116.86,34.24,19.0,5411.0,1042.0,441.0,185.0,3.1324,132000.0,INLAND --116.86,34.23,13.0,4760.0,938.0,309.0,132.0,5.4618,147800.0,INLAND --116.99,34.3,29.0,5055.0,1036.0,410.0,191.0,3.5104,157100.0,INLAND --116.89,34.27,13.0,3661.0,770.0,567.0,228.0,4.4063,152600.0,INLAND --116.86,34.31,19.0,1649.0,328.0,382.0,151.0,4.0556,133000.0,INLAND --116.85,34.26,18.0,6988.0,1635.0,2044.0,726.0,2.4308,90600.0,INLAND --116.85,34.26,19.0,5395.0,1220.0,981.0,366.0,2.6094,92400.0,INLAND --116.85,34.25,5.0,5806.0,1030.0,569.0,219.0,4.0132,163100.0,INLAND --116.83,34.25,15.0,8948.0,1985.0,1316.0,514.0,2.7375,90800.0,INLAND --116.82,34.24,11.0,5799.0,1527.0,713.0,262.0,2.5147,84700.0,INLAND --116.76,34.29,14.0,3959.0,849.0,1064.0,376.0,2.8214,111400.0,INLAND --116.76,34.23,10.0,4374.0,989.0,1020.0,376.0,2.6071,89000.0,INLAND --116.98,34.13,16.0,2098.0,449.0,342.0,143.0,4.0333,133900.0,INLAND --116.98,34.07,21.0,739.0,125.0,199.0,82.0,4.8958,117500.0,INLAND --116.88,34.08,52.0,3419.0,777.0,710.0,265.0,3.9028,128600.0,INLAND --116.76,34.14,4.0,42.0,10.0,9.0,3.0,0.536,42500.0,INLAND --116.88,34.19,38.0,898.0,259.0,106.0,52.0,1.6875,225000.0,INLAND --117.46,34.85,7.0,9759.0,1816.0,2933.0,1168.0,3.4912,157700.0,INLAND --117.28,35.13,32.0,671.0,166.0,856.0,114.0,2.6477,53300.0,INLAND --116.85,34.98,26.0,3606.0,792.0,1683.0,608.0,2.6587,57400.0,INLAND --117.14,34.75,33.0,552.0,120.0,347.0,97.0,1.8158,100000.0,INLAND --117.28,34.68,28.0,1932.0,421.0,1156.0,404.0,1.8958,55600.0,INLAND --117.06,34.87,14.0,3348.0,619.0,1756.0,557.0,3.5987,91400.0,INLAND --117.13,34.88,21.0,3254.0,669.0,1548.0,545.0,2.3373,57100.0,INLAND --117.15,34.83,30.0,5370.0,1062.0,2778.0,944.0,3.099,66800.0,INLAND --117.19,34.94,31.0,2034.0,444.0,1097.0,367.0,2.1522,60800.0,INLAND --117.16,34.9,16.0,1579.0,327.0,934.0,298.0,2.7305,73800.0,INLAND --117.08,34.96,28.0,1777.0,307.0,721.0,259.0,3.6343,79800.0,INLAND --116.96,34.94,20.0,2355.0,467.0,1198.0,428.0,3.9934,88500.0,INLAND --116.99,34.89,24.0,2741.0,577.0,1551.0,522.0,3.474,70500.0,INLAND --116.99,34.88,23.0,6060.0,1165.0,2920.0,1072.0,3.1528,69000.0,INLAND --117.0,34.87,16.0,6862.0,1292.0,3562.0,1126.0,3.6091,87200.0,INLAND --117.02,34.88,18.0,2127.0,443.0,1168.0,401.0,3.0313,80000.0,INLAND --117.03,34.87,7.0,2245.0,407.0,1016.0,364.0,3.9464,101500.0,INLAND --116.96,34.83,30.0,1211.0,289.0,611.0,230.0,1.6667,44700.0,INLAND --116.9,34.69,10.0,337.0,102.0,108.0,50.0,0.4999,55000.0,INLAND --117.24,34.59,4.0,5027.0,797.0,1869.0,686.0,3.5507,186100.0,INLAND --117.29,34.57,22.0,1054.0,239.0,428.0,239.0,1.2548,68300.0,INLAND --117.1,34.57,6.0,5110.0,1044.0,1938.0,724.0,3.1917,112800.0,INLAND --116.9,34.52,20.0,3481.0,840.0,1694.0,587.0,1.4,77700.0,INLAND --116.94,34.4,20.0,6541.0,1401.0,2631.0,980.0,2.1339,78500.0,INLAND --117.18,32.76,52.0,2023.0,301.0,649.0,285.0,4.7396,441700.0,NEAR OCEAN --117.18,32.75,52.0,1539.0,212.0,535.0,224.0,5.392,408500.0,NEAR OCEAN --117.18,32.75,52.0,1504.0,208.0,518.0,196.0,8.603,459600.0,NEAR OCEAN --117.19,32.75,52.0,1495.0,230.0,459.0,190.0,8.1548,500001.0,NEAR OCEAN --117.19,32.75,52.0,1388.0,213.0,513.0,211.0,6.1309,411600.0,NEAR OCEAN --117.19,32.76,52.0,1294.0,175.0,434.0,180.0,5.7914,500001.0,NEAR OCEAN --117.17,32.76,45.0,3149.0,639.0,1160.0,661.0,2.7266,354200.0,NEAR OCEAN --117.17,32.75,38.0,5430.0,1176.0,2357.0,1100.0,3.654,249000.0,NEAR OCEAN --117.18,32.74,39.0,3132.0,738.0,1200.0,690.0,2.5288,274000.0,NEAR OCEAN --117.18,32.75,36.0,2282.0,534.0,918.0,531.0,2.7222,284700.0,NEAR OCEAN --117.17,32.75,52.0,1052.0,,381.0,201.0,3.0726,289600.0,NEAR OCEAN --117.16,32.75,23.0,2474.0,594.0,1107.0,536.0,2.9705,245500.0,NEAR OCEAN --117.16,32.75,49.0,1566.0,494.0,643.0,419.0,1.9637,137500.0,NEAR OCEAN --117.16,32.74,52.0,852.0,262.0,389.0,249.0,2.6042,225000.0,NEAR OCEAN --117.16,32.74,21.0,1882.0,486.0,903.0,482.0,3.06,243800.0,NEAR OCEAN --117.16,32.74,27.0,2335.0,604.0,982.0,590.0,3.1921,261500.0,NEAR OCEAN --117.17,32.75,28.0,1514.0,384.0,540.0,352.0,2.1532,240000.0,NEAR OCEAN --117.16,32.75,19.0,5430.0,1593.0,2496.0,1484.0,2.9112,199100.0,NEAR OCEAN --117.16,32.75,34.0,1785.0,558.0,804.0,490.0,2.2687,200000.0,NEAR OCEAN --117.15,32.76,43.0,2361.0,489.0,824.0,470.0,3.4196,302200.0,NEAR OCEAN --117.15,32.76,36.0,2644.0,674.0,1211.0,654.0,3.0445,214800.0,NEAR OCEAN --117.15,32.76,40.0,1809.0,474.0,826.0,456.0,2.6518,179800.0,NEAR OCEAN --117.15,32.76,37.0,1921.0,502.0,811.0,472.0,2.75,175000.0,NEAR OCEAN --117.15,32.75,40.0,2261.0,579.0,903.0,525.0,2.465,198700.0,NEAR OCEAN --117.15,32.75,9.0,2818.0,821.0,851.0,555.0,2.6181,204200.0,NEAR OCEAN --117.15,32.75,27.0,3166.0,867.0,1332.0,817.0,2.6742,171400.0,NEAR OCEAN --117.15,32.74,43.0,2383.0,607.0,962.0,587.0,2.2578,263600.0,NEAR OCEAN --117.15,32.74,26.0,3149.0,832.0,1320.0,808.0,3.0259,211700.0,NEAR OCEAN --117.14,32.75,35.0,1391.0,329.0,726.0,317.0,2.6818,159400.0,NEAR OCEAN --117.14,32.74,47.0,1494.0,327.0,689.0,304.0,3.125,172700.0,NEAR OCEAN --117.14,32.74,16.0,6075.0,1816.0,2592.0,1634.0,2.5553,178100.0,NEAR OCEAN --117.14,32.75,29.0,1961.0,565.0,1002.0,569.0,2.2813,118100.0,NEAR OCEAN --117.14,32.75,25.0,1908.0,513.0,956.0,467.0,2.4828,133300.0,NEAR OCEAN --117.14,32.75,37.0,1832.0,525.0,955.0,488.0,2.7852,129200.0,NEAR OCEAN --117.14,32.75,19.0,1358.0,613.0,766.0,630.0,1.0353,150000.0,NEAR OCEAN --117.14,32.75,20.0,1182.0,379.0,678.0,326.0,2.1937,162500.0,NEAR OCEAN --117.14,32.75,27.0,1551.0,464.0,880.0,400.0,2.4167,131300.0,NEAR OCEAN --117.14,32.76,28.0,3025.0,756.0,1328.0,695.0,2.694,164100.0,NEAR OCEAN --117.14,32.76,35.0,2539.0,661.0,1308.0,629.0,2.6777,146400.0,NEAR OCEAN --117.14,32.76,32.0,2587.0,681.0,1246.0,650.0,2.1727,145500.0,NEAR OCEAN --117.14,32.76,35.0,1785.0,493.0,965.0,506.0,2.0792,160000.0,NEAR OCEAN --117.13,32.77,30.0,2582.0,650.0,1098.0,603.0,2.8281,171700.0,NEAR OCEAN --117.13,32.76,29.0,2568.0,682.0,1191.0,642.0,2.1094,162500.0,NEAR OCEAN --117.13,32.76,41.0,1545.0,420.0,747.0,415.0,2.375,154400.0,NEAR OCEAN --117.13,32.76,27.0,2280.0,695.0,1235.0,664.0,1.9392,142900.0,NEAR OCEAN --117.13,32.76,33.0,1591.0,461.0,794.0,425.0,2.6333,140000.0,NEAR OCEAN --117.13,32.76,22.0,2623.0,732.0,1283.0,718.0,2.1563,127100.0,NEAR OCEAN --117.14,32.76,24.0,3523.0,991.0,1775.0,873.0,2.1273,142300.0,NEAR OCEAN --117.13,32.75,24.0,1877.0,519.0,898.0,483.0,2.2264,112500.0,NEAR OCEAN --117.13,32.75,28.0,2279.0,671.0,1166.0,623.0,1.95,150000.0,NEAR OCEAN --117.13,32.75,23.0,3999.0,1182.0,2051.0,1130.0,2.1292,135000.0,NEAR OCEAN --117.13,32.75,31.0,2336.0,656.0,1186.0,609.0,2.5872,130600.0,NEAR OCEAN --117.13,32.75,50.0,1476.0,354.0,698.0,354.0,3.0,168800.0,NEAR OCEAN --117.13,32.74,52.0,1512.0,321.0,651.0,321.0,3.6852,185300.0,NEAR OCEAN --117.13,32.75,37.0,4142.0,1031.0,1936.0,968.0,2.693,174100.0,NEAR OCEAN --117.12,32.75,37.0,2344.0,546.0,1134.0,513.0,2.4394,118300.0,NEAR OCEAN --117.12,32.74,46.0,1898.0,441.0,978.0,439.0,3.2708,155200.0,NEAR OCEAN --117.12,32.74,52.0,1969.0,389.0,877.0,424.0,3.79,163400.0,NEAR OCEAN --117.13,32.75,20.0,2271.0,602.0,992.0,520.0,2.2599,157600.0,NEAR OCEAN --117.12,32.75,15.0,2671.0,724.0,1800.0,646.0,2.1394,106700.0,NEAR OCEAN --117.12,32.75,17.0,2060.0,633.0,1251.0,602.0,1.9886,119200.0,NEAR OCEAN --117.12,32.75,20.0,1406.0,413.0,850.0,412.0,2.3261,114600.0,NEAR OCEAN --117.12,32.75,25.0,2222.0,634.0,1025.0,568.0,1.64,130000.0,NEAR OCEAN --117.12,32.76,23.0,2681.0,717.0,1279.0,648.0,2.1597,116100.0,NEAR OCEAN --117.12,32.76,33.0,2279.0,591.0,1250.0,576.0,2.4297,139000.0,NEAR OCEAN --117.12,32.76,43.0,2336.0,644.0,1203.0,614.0,2.3594,127800.0,NEAR OCEAN --117.12,32.76,26.0,1221.0,331.0,620.0,296.0,2.4821,123600.0,NEAR OCEAN --117.11,32.76,29.0,2030.0,545.0,1014.0,518.0,2.2409,114200.0,NEAR OCEAN --117.12,32.76,28.0,2160.0,608.0,1339.0,571.0,1.9152,128100.0,NEAR OCEAN --117.12,32.76,27.0,1426.0,364.0,792.0,353.0,2.0673,118800.0,NEAR OCEAN --117.12,32.76,28.0,1605.0,501.0,936.0,460.0,2.5991,147500.0,NEAR OCEAN --117.12,32.76,17.0,1559.0,462.0,821.0,428.0,2.0139,150000.0,NEAR OCEAN --117.12,32.76,41.0,1469.0,421.0,803.0,395.0,2.1856,120500.0,NEAR OCEAN --117.11,32.77,48.0,1502.0,272.0,590.0,265.0,2.5952,190300.0,NEAR OCEAN --117.11,32.77,50.0,1729.0,355.0,617.0,337.0,3.6705,167000.0,NEAR OCEAN --117.12,32.77,48.0,2012.0,422.0,893.0,394.0,2.7928,175000.0,NEAR OCEAN --117.12,32.77,43.0,2167.0,464.0,977.0,461.0,3.125,192200.0,NEAR OCEAN --117.11,32.77,52.0,1484.0,224.0,498.0,223.0,6.6053,331400.0,NEAR OCEAN --117.11,32.77,52.0,1506.0,233.0,478.0,240.0,4.3875,300000.0,NEAR OCEAN --117.1,32.77,49.0,4449.0,711.0,1606.0,709.0,5.7768,281600.0,NEAR OCEAN --117.1,32.76,52.0,2606.0,426.0,883.0,380.0,4.2813,270800.0,NEAR OCEAN --117.09,32.77,38.0,2065.0,374.0,812.0,343.0,3.125,216500.0,NEAR OCEAN --117.09,32.76,44.0,1139.0,214.0,470.0,217.0,3.5481,203100.0,NEAR OCEAN --117.09,32.76,43.0,3889.0,711.0,1466.0,663.0,3.5529,223000.0,NEAR OCEAN --117.11,32.76,31.0,2293.0,549.0,1108.0,557.0,3.3854,204400.0,NEAR OCEAN --117.1,32.76,30.0,1835.0,474.0,934.0,415.0,2.875,139600.0,NEAR OCEAN --117.11,32.76,28.0,1457.0,397.0,672.0,342.0,1.9799,122700.0,NEAR OCEAN --117.11,32.76,21.0,2226.0,600.0,1085.0,533.0,2.2604,126300.0,NEAR OCEAN --117.11,32.76,19.0,2188.0,616.0,1304.0,607.0,2.0852,114400.0,NEAR OCEAN --117.1,32.75,17.0,871.0,379.0,955.0,351.0,1.4375,96400.0,NEAR OCEAN --117.1,32.75,11.0,2393.0,726.0,1905.0,711.0,1.3448,91300.0,NEAR OCEAN --117.11,32.75,11.0,1607.0,478.0,1384.0,450.0,2.05,100000.0,NEAR OCEAN --117.11,32.75,21.0,2127.0,658.0,1812.0,603.0,1.6896,100000.0,NEAR OCEAN --117.11,32.75,18.0,1943.0,587.0,1329.0,522.0,1.7696,103100.0,NEAR OCEAN --117.09,32.76,29.0,1650.0,496.0,882.0,445.0,2.2287,140000.0,NEAR OCEAN --117.09,32.76,31.0,1235.0,387.0,816.0,397.0,1.5517,122500.0,NEAR OCEAN --117.1,32.76,31.0,987.0,267.0,619.0,250.0,2.9286,151800.0,NEAR OCEAN --117.1,32.75,16.0,2426.0,799.0,1505.0,754.0,1.6444,103400.0,NEAR OCEAN --117.1,32.75,21.0,2063.0,609.0,1686.0,558.0,1.4828,94800.0,NEAR OCEAN --117.1,32.75,20.0,2355.0,722.0,1848.0,576.0,2.0036,99200.0,NEAR OCEAN --117.1,32.75,15.0,2422.0,774.0,2120.0,715.0,1.0617,92400.0,NEAR OCEAN --117.1,32.75,23.0,1858.0,551.0,1506.0,492.0,1.7446,85200.0,NEAR OCEAN --117.11,32.75,46.0,695.0,182.0,601.0,195.0,2.4219,90600.0,NEAR OCEAN --117.11,32.75,20.0,1667.0,469.0,1292.0,445.0,2.0893,101100.0,NEAR OCEAN --117.11,32.75,34.0,2131.0,594.0,1373.0,562.0,2.113,102100.0,NEAR OCEAN --117.12,32.75,13.0,2795.0,773.0,1869.0,690.0,2.1767,101800.0,NEAR OCEAN --117.1,32.74,14.0,2361.0,601.0,1831.0,526.0,1.6102,93400.0,NEAR OCEAN --117.11,32.74,25.0,2846.0,644.0,2272.0,632.0,2.2,98700.0,NEAR OCEAN --117.11,32.74,25.0,684.0,190.0,665.0,187.0,2.4524,90300.0,NEAR OCEAN --117.11,32.74,33.0,1126.0,267.0,621.0,241.0,3.2422,123100.0,NEAR OCEAN --117.11,32.73,35.0,1689.0,397.0,1135.0,366.0,2.3269,97300.0,NEAR OCEAN --117.1,32.73,24.0,2927.0,704.0,2005.0,668.0,2.2375,102900.0,NEAR OCEAN --117.11,32.73,34.0,1096.0,221.0,574.0,223.0,3.8355,126700.0,NEAR OCEAN --117.11,32.73,27.0,3160.0,627.0,1628.0,612.0,3.8864,132600.0,NEAR OCEAN --117.09,32.75,30.0,1899.0,546.0,1620.0,493.0,1.6034,84400.0,NEAR OCEAN --117.09,32.74,23.0,3130.0,779.0,2472.0,744.0,2.32,93200.0,NEAR OCEAN --117.1,32.74,20.0,3854.0,1046.0,3555.0,966.0,1.6747,100000.0,NEAR OCEAN --117.1,32.74,30.0,1772.0,500.0,1389.0,447.0,2.3641,94100.0,NEAR OCEAN --117.1,32.75,11.0,1976.0,548.0,1528.0,512.0,1.4886,89800.0,NEAR OCEAN --117.08,32.75,20.0,1886.0,586.0,1134.0,525.0,1.5029,100000.0,NEAR OCEAN --117.08,32.75,16.0,1111.0,328.0,930.0,303.0,1.2347,128100.0,NEAR OCEAN --117.08,32.75,15.0,1821.0,516.0,1385.0,439.0,2.5101,95300.0,NEAR OCEAN --117.09,32.75,24.0,1245.0,376.0,1230.0,362.0,1.875,95000.0,NEAR OCEAN --117.09,32.75,28.0,1220.0,391.0,1286.0,396.0,1.2286,105000.0,NEAR OCEAN --117.09,32.75,20.0,1701.0,503.0,1482.0,465.0,1.6789,95500.0,NEAR OCEAN --117.09,32.76,10.0,1922.0,577.0,1595.0,545.0,1.5208,118800.0,NEAR OCEAN --117.08,32.76,18.0,1704.0,596.0,1639.0,548.0,1.7391,125000.0,NEAR OCEAN --117.07,32.76,14.0,2523.0,545.0,1297.0,525.0,2.3886,138100.0,NEAR OCEAN --117.07,32.75,37.0,2690.0,549.0,1219.0,524.0,2.3148,154200.0,NEAR OCEAN --117.07,32.75,14.0,3073.0,851.0,2000.0,782.0,2.3824,144700.0,NEAR OCEAN --117.07,32.75,9.0,3464.0,749.0,1687.0,645.0,3.3026,119100.0,NEAR OCEAN --117.06,32.75,34.0,1917.0,419.0,1181.0,426.0,3.0208,129200.0,NEAR OCEAN --117.05,32.74,34.0,2178.0,455.0,1193.0,446.0,3.1719,115300.0,NEAR OCEAN --117.07,32.74,37.0,1042.0,205.0,589.0,208.0,2.6629,116900.0,NEAR OCEAN --117.07,32.75,31.0,2036.0,501.0,1263.0,442.0,2.5583,120700.0,NEAR OCEAN --117.08,32.75,20.0,1989.0,508.0,1452.0,462.0,2.0077,118300.0,NEAR OCEAN --117.08,32.74,26.0,2359.0,622.0,2067.0,581.0,1.8103,124700.0,NEAR OCEAN --117.09,32.75,19.0,2739.0,707.0,2004.0,622.0,1.6318,117700.0,NEAR OCEAN --117.09,32.74,42.0,1986.0,472.0,1472.0,475.0,2.1757,110100.0,NEAR OCEAN --117.08,32.74,33.0,3260.0,673.0,1784.0,666.0,3.5078,126500.0,NEAR OCEAN --117.08,32.73,36.0,3331.0,643.0,1903.0,622.0,3.6974,122000.0,NEAR OCEAN --117.07,32.74,38.0,1901.0,392.0,1099.0,406.0,2.7661,113900.0,NEAR OCEAN --117.08,32.74,35.0,1434.0,253.0,753.0,228.0,2.3812,135100.0,NEAR OCEAN --117.08,32.73,36.0,1158.0,218.0,619.0,233.0,3.6125,122500.0,NEAR OCEAN --117.08,32.73,19.0,2935.0,763.0,1953.0,720.0,1.4254,111300.0,NEAR OCEAN --117.07,32.73,18.0,2968.0,656.0,1149.0,581.0,2.6452,154200.0,NEAR OCEAN --117.07,32.78,22.0,922.0,240.0,1524.0,235.0,1.6815,218800.0,NEAR OCEAN --117.09,32.77,31.0,3062.0,,1263.0,539.0,3.0875,291500.0,NEAR OCEAN --117.08,32.77,31.0,1070.0,155.0,426.0,153.0,6.1628,219200.0,NEAR OCEAN --117.07,32.77,34.0,2245.0,394.0,1849.0,429.0,3.5446,185500.0,NEAR OCEAN --117.07,32.77,38.0,3779.0,614.0,1495.0,614.0,4.3529,184000.0,NEAR OCEAN --117.07,32.76,42.0,1827.0,378.0,880.0,380.0,2.5125,176600.0,NEAR OCEAN --117.08,32.77,25.0,3911.0,849.0,1580.0,767.0,2.7778,184100.0,NEAR OCEAN --117.08,32.76,27.0,1221.0,254.0,606.0,259.0,3.0833,155400.0,NEAR OCEAN --117.09,32.76,31.0,2567.0,624.0,1255.0,582.0,2.5909,159100.0,NEAR OCEAN --117.08,32.76,20.0,2547.0,785.0,1199.0,643.0,1.7743,140300.0,NEAR OCEAN --117.04,32.77,21.0,1824.0,447.0,962.0,431.0,2.7826,143800.0,<1H OCEAN --117.05,32.77,23.0,2556.0,662.0,1200.0,548.0,1.8899,147700.0,NEAR OCEAN --117.06,32.77,18.0,2269.0,682.0,1329.0,581.0,1.7951,161800.0,NEAR OCEAN --117.06,32.77,34.0,1730.0,373.0,730.0,350.0,2.0284,161800.0,NEAR OCEAN --117.07,32.77,38.0,1130.0,228.0,699.0,241.0,2.65,167600.0,NEAR OCEAN --117.06,32.77,32.0,3888.0,827.0,3868.0,841.0,3.0755,166800.0,NEAR OCEAN --117.05,32.77,33.0,3535.0,683.0,1568.0,672.0,2.8097,158300.0,NEAR OCEAN --117.06,32.76,36.0,2785.0,577.0,1275.0,527.0,2.3015,156800.0,NEAR OCEAN --117.06,32.76,38.0,1549.0,288.0,636.0,278.0,3.2188,150500.0,NEAR OCEAN --117.05,32.76,46.0,1887.0,359.0,795.0,358.0,3.25,159600.0,NEAR OCEAN --117.06,32.76,37.0,2356.0,476.0,1231.0,499.0,2.965,155700.0,NEAR OCEAN --117.06,32.76,24.0,1629.0,587.0,1012.0,488.0,1.7452,156800.0,NEAR OCEAN --117.05,32.75,36.0,2024.0,,1030.0,390.0,3.8233,139800.0,NEAR OCEAN --117.06,32.75,34.0,2516.0,611.0,1317.0,594.0,2.2308,125900.0,NEAR OCEAN --117.05,32.75,35.0,2144.0,388.0,1003.0,383.0,3.0938,137300.0,NEAR OCEAN --117.07,32.72,18.0,1758.0,286.0,987.0,277.0,4.6875,141800.0,NEAR OCEAN --117.08,32.72,32.0,2286.0,468.0,1741.0,467.0,3.0446,101900.0,NEAR OCEAN --117.07,32.71,36.0,2448.0,475.0,1268.0,450.0,2.5682,109100.0,NEAR OCEAN --117.06,32.73,33.0,3444.0,619.0,1884.0,582.0,3.7891,126700.0,NEAR OCEAN --117.06,32.72,31.0,2669.0,514.0,1626.0,499.0,3.1923,116900.0,NEAR OCEAN --117.05,32.72,35.0,1777.0,369.0,1158.0,353.0,3.4107,117000.0,NEAR OCEAN --117.06,32.71,25.0,2681.0,596.0,1947.0,553.0,2.8964,104300.0,NEAR OCEAN --117.07,32.71,39.0,2754.0,652.0,2263.0,619.0,2.2454,89600.0,NEAR OCEAN --117.08,32.7,35.0,1477.0,264.0,852.0,279.0,3.1786,100600.0,NEAR OCEAN --117.08,32.7,37.0,2176.0,418.0,1301.0,375.0,2.875,98900.0,NEAR OCEAN --117.08,32.7,36.0,2103.0,390.0,1279.0,392.0,2.4135,97000.0,NEAR OCEAN --117.06,32.71,21.0,1864.0,388.0,1498.0,389.0,3.8194,125700.0,NEAR OCEAN --117.06,32.71,11.0,2397.0,523.0,1566.0,514.0,3.8687,145200.0,NEAR OCEAN --117.08,32.71,27.0,2204.0,598.0,1656.0,521.0,1.4821,86200.0,NEAR OCEAN --117.07,32.71,26.0,4151.0,823.0,2822.0,697.0,2.8372,123400.0,NEAR OCEAN --117.07,32.7,14.0,2763.0,456.0,1914.0,465.0,4.1645,143000.0,NEAR OCEAN --117.07,32.69,20.0,2192.0,406.0,1766.0,393.0,4.0921,135000.0,NEAR OCEAN --117.06,32.7,12.0,3943.0,737.0,3280.0,751.0,4.112,141400.0,NEAR OCEAN --117.04,32.71,28.0,5274.0,991.0,3727.0,961.0,3.57,109800.0,NEAR OCEAN --117.05,32.71,25.0,3292.0,608.0,2266.0,592.0,3.2986,119200.0,NEAR OCEAN --117.03,32.71,33.0,3126.0,627.0,2300.0,623.0,3.2596,103000.0,NEAR OCEAN --117.03,32.71,34.0,2328.0,444.0,1684.0,429.0,3.25,99600.0,NEAR OCEAN --117.02,32.71,20.0,4050.0,745.0,2870.0,761.0,3.7366,121800.0,NEAR OCEAN --117.02,32.7,22.0,2756.0,516.0,1849.0,486.0,4.1837,125400.0,NEAR OCEAN --117.02,32.7,18.0,1643.0,283.0,1134.0,269.0,5.1769,133000.0,NEAR OCEAN --117.02,32.71,30.0,3187.0,592.0,2082.0,631.0,3.5388,118500.0,NEAR OCEAN --117.01,32.7,25.0,2321.0,398.0,1434.0,386.0,3.5341,120800.0,NEAR OCEAN --117.05,32.69,8.0,831.0,158.0,740.0,154.0,5.3908,165500.0,NEAR OCEAN --117.06,32.69,9.0,1520.0,269.0,1250.0,265.0,4.8875,157700.0,NEAR OCEAN --117.06,32.69,13.0,705.0,149.0,718.0,155.0,4.4375,154900.0,NEAR OCEAN --117.06,32.69,9.0,521.0,111.0,491.0,110.0,5.1305,158900.0,NEAR OCEAN --117.03,32.7,19.0,2304.0,572.0,2010.0,556.0,2.2866,109900.0,NEAR OCEAN --117.04,32.69,27.0,1790.0,356.0,1286.0,347.0,3.5437,115800.0,NEAR OCEAN --117.04,32.7,7.0,9311.0,1703.0,7302.0,1694.0,4.419,156900.0,NEAR OCEAN --117.07,32.68,18.0,1475.0,267.0,1149.0,268.0,5.0827,142200.0,NEAR OCEAN --117.06,32.68,38.0,1481.0,317.0,1080.0,291.0,2.85,125800.0,NEAR OCEAN --117.06,32.68,36.0,3815.0,796.0,2945.0,728.0,2.0959,125000.0,NEAR OCEAN --117.05,32.69,21.0,991.0,210.0,695.0,203.0,3.625,144300.0,NEAR OCEAN --117.06,32.68,41.0,2665.0,515.0,1664.0,512.0,2.375,113500.0,NEAR OCEAN --117.06,32.67,29.0,4047.0,754.0,2353.0,730.0,4.0505,125000.0,NEAR OCEAN --117.05,32.68,35.0,3414.0,580.0,1761.0,522.0,3.9922,129800.0,NEAR OCEAN --117.05,32.67,32.0,4227.0,785.0,2842.0,795.0,3.9646,137800.0,NEAR OCEAN --117.05,32.68,19.0,1469.0,275.0,1010.0,292.0,3.5664,150400.0,NEAR OCEAN --117.05,32.67,16.0,2168.0,343.0,1589.0,338.0,5.4863,153800.0,NEAR OCEAN --117.06,32.66,33.0,3425.0,511.0,1528.0,479.0,5.6889,234600.0,NEAR OCEAN --117.06,32.66,24.0,2587.0,491.0,1617.0,458.0,3.5066,133400.0,NEAR OCEAN --117.04,32.66,22.0,3362.0,630.0,1471.0,612.0,4.1442,303900.0,NEAR OCEAN --117.03,32.67,15.0,5094.0,818.0,2118.0,758.0,5.3505,266600.0,NEAR OCEAN --117.02,32.68,14.0,3986.0,675.0,2065.0,702.0,5.7192,267400.0,NEAR OCEAN --117.05,32.69,14.0,1689.0,555.0,1319.0,527.0,3.16,143800.0,NEAR OCEAN --117.05,32.68,15.0,1828.0,359.0,955.0,248.0,3.2174,165100.0,NEAR OCEAN --117.04,32.68,13.0,2132.0,425.0,1345.0,432.0,4.0,89300.0,NEAR OCEAN --117.04,32.68,14.0,1320.0,270.0,943.0,260.0,5.0947,152700.0,NEAR OCEAN --117.04,32.67,14.0,3464.0,683.0,2139.0,734.0,4.0668,137500.0,NEAR OCEAN --117.04,32.69,9.0,3417.0,860.0,2521.0,828.0,3.02,158900.0,NEAR OCEAN --117.04,32.68,9.0,3087.0,609.0,1530.0,556.0,3.775,125000.0,NEAR OCEAN --117.04,32.68,11.0,1875.0,357.0,1014.0,386.0,4.375,115000.0,NEAR OCEAN --117.01,32.7,7.0,2327.0,490.0,1304.0,445.0,3.3553,132200.0,NEAR OCEAN --117.02,32.69,7.0,6055.0,1004.0,3031.0,952.0,4.436,135000.0,NEAR OCEAN --117.03,32.69,5.0,3201.0,532.0,2061.0,536.0,5.0829,179400.0,NEAR OCEAN --117.03,32.69,10.0,901.0,163.0,698.0,167.0,4.6648,156100.0,NEAR OCEAN --117.03,32.69,8.0,2460.0,397.0,1784.0,390.0,4.5662,175500.0,NEAR OCEAN --117.09,32.71,12.0,3375.0,945.0,2357.0,808.0,1.5,106300.0,NEAR OCEAN --117.09,32.7,15.0,869.0,217.0,887.0,216.0,1.4583,84200.0,NEAR OCEAN --117.09,32.7,22.0,2409.0,582.0,1887.0,578.0,1.4089,94200.0,NEAR OCEAN --117.09,32.69,18.0,1645.0,430.0,1221.0,410.0,1.3269,108000.0,NEAR OCEAN --117.09,32.69,20.0,1102.0,205.0,852.0,217.0,3.1833,108300.0,NEAR OCEAN --117.1,32.69,11.0,3071.0,911.0,2812.0,774.0,1.2413,83100.0,NEAR OCEAN --117.1,32.7,28.0,633.0,137.0,525.0,170.0,3.6042,95600.0,NEAR OCEAN --117.1,32.7,42.0,2002.0,488.0,1505.0,464.0,1.5057,86300.0,NEAR OCEAN --117.1,32.71,9.0,1931.0,472.0,1628.0,445.0,2.085,92600.0,NEAR OCEAN --117.09,32.73,26.0,3114.0,686.0,1948.0,660.0,2.8942,124100.0,NEAR OCEAN --117.1,32.72,5.0,1615.0,387.0,1094.0,394.0,2.2024,137200.0,NEAR OCEAN --117.09,32.72,39.0,1273.0,246.0,770.0,242.0,2.0938,102500.0,NEAR OCEAN --117.09,32.72,33.0,1096.0,240.0,716.0,224.0,1.6944,111800.0,NEAR OCEAN --117.09,32.73,28.0,3109.0,594.0,1559.0,589.0,3.5789,120300.0,NEAR OCEAN --117.09,32.71,29.0,2238.0,523.0,2061.0,504.0,2.5559,96800.0,NEAR OCEAN --117.1,32.71,29.0,3422.0,713.0,2775.0,644.0,1.7075,86900.0,NEAR OCEAN --117.1,32.71,25.0,939.0,247.0,1003.0,240.0,1.75,87900.0,NEAR OCEAN --117.11,32.72,25.0,1491.0,348.0,1183.0,316.0,1.9583,88600.0,NEAR OCEAN --117.11,32.71,30.0,1729.0,457.0,1673.0,460.0,1.7,85900.0,NEAR OCEAN --117.11,32.7,34.0,2028.0,522.0,1797.0,464.0,1.7402,79400.0,NEAR OCEAN --117.11,32.7,37.0,2045.0,502.0,1920.0,472.0,1.8125,83300.0,NEAR OCEAN --117.11,32.7,33.0,1980.0,488.0,1626.0,428.0,1.4856,86400.0,NEAR OCEAN --117.12,32.7,14.0,819.0,237.0,827.0,237.0,1.3194,90500.0,NEAR OCEAN --117.12,32.7,36.0,1011.0,253.0,763.0,226.0,1.8187,84100.0,NEAR OCEAN --117.11,32.71,29.0,1040.0,291.0,1054.0,297.0,1.1818,83200.0,NEAR OCEAN --117.1,32.69,37.0,1269.0,340.0,1369.0,302.0,2.2102,87200.0,NEAR OCEAN --117.1,32.69,35.0,1292.0,272.0,1183.0,272.0,2.0547,98000.0,NEAR OCEAN --117.11,32.69,36.0,1421.0,367.0,1418.0,355.0,1.9425,93400.0,NEAR OCEAN --117.11,32.69,34.0,1144.0,295.0,1271.0,302.0,2.09,91800.0,NEAR OCEAN --117.11,32.69,37.0,2395.0,627.0,2489.0,599.0,1.5933,86300.0,NEAR OCEAN --117.11,32.69,39.0,395.0,159.0,620.0,162.0,2.725,86500.0,NEAR OCEAN --117.12,32.69,46.0,200.0,77.0,180.0,65.0,1.0658,93800.0,NEAR OCEAN --117.12,32.69,37.0,1082.0,294.0,1146.0,265.0,2.0673,88500.0,NEAR OCEAN --117.12,32.7,38.0,818.0,217.0,953.0,231.0,1.0531,65700.0,NEAR OCEAN --117.12,32.7,37.0,1361.0,348.0,1398.0,328.0,1.1681,78100.0,NEAR OCEAN --117.13,32.69,36.0,1469.0,400.0,1271.0,340.0,1.043,90100.0,NEAR OCEAN --117.13,32.7,48.0,786.0,230.0,917.0,231.0,1.875,75600.0,NEAR OCEAN --117.13,32.7,42.0,1210.0,292.0,945.0,258.0,0.8991,78900.0,NEAR OCEAN --117.13,32.7,38.0,1445.0,392.0,1286.0,357.0,1.4632,80200.0,NEAR OCEAN --117.13,32.7,35.0,1179.0,344.0,1372.0,330.0,1.9509,70200.0,NEAR OCEAN --117.12,32.71,33.0,1256.0,331.0,1315.0,321.0,1.9286,78500.0,NEAR OCEAN --117.13,32.71,38.0,993.0,246.0,760.0,205.0,1.1563,82700.0,NEAR OCEAN --117.13,32.71,42.0,1145.0,314.0,1114.0,307.0,1.2614,87500.0,NEAR OCEAN --117.13,32.71,44.0,1697.0,413.0,1396.0,363.0,1.5474,83300.0,NEAR OCEAN --117.13,32.72,32.0,2197.0,623.0,1784.0,599.0,1.901,120300.0,NEAR OCEAN --117.12,32.71,24.0,421.0,101.0,396.0,113.0,0.6433,111300.0,NEAR OCEAN --117.13,32.72,9.0,2436.0,720.0,1780.0,653.0,1.8299,137500.0,NEAR OCEAN --117.13,32.72,19.0,1341.0,435.0,1048.0,360.0,1.975,117900.0,NEAR OCEAN --117.12,32.72,36.0,6096.0,1285.0,3093.0,1229.0,3.37,159100.0,NEAR OCEAN --117.12,32.73,50.0,2307.0,424.0,887.0,356.0,3.5156,168800.0,NEAR OCEAN --117.12,32.73,52.0,3976.0,718.0,1750.0,769.0,3.4151,175400.0,NEAR OCEAN --117.13,32.74,46.0,3355.0,768.0,1457.0,708.0,2.6604,170100.0,NEAR OCEAN --117.13,32.73,52.0,1148.0,214.0,481.0,215.0,5.454,240900.0,NEAR OCEAN --117.13,32.73,52.0,2676.0,557.0,1181.0,537.0,3.6058,213100.0,NEAR OCEAN --117.13,32.74,50.0,1527.0,338.0,728.0,322.0,2.625,203200.0,NEAR OCEAN --117.13,32.73,43.0,2706.0,667.0,1531.0,614.0,2.1513,145000.0,NEAR OCEAN --117.13,32.72,43.0,2160.0,504.0,1221.0,452.0,2.4821,140600.0,NEAR OCEAN --117.13,32.72,52.0,1560.0,307.0,757.0,315.0,2.7083,199100.0,NEAR OCEAN --117.13,32.73,52.0,1911.0,415.0,777.0,412.0,2.2429,221100.0,NEAR OCEAN --117.14,32.72,42.0,1558.0,458.0,1227.0,407.0,2.2804,139100.0,NEAR OCEAN --117.13,32.72,17.0,1285.0,423.0,1208.0,409.0,1.758,126600.0,NEAR OCEAN --117.14,32.71,34.0,1694.0,455.0,1467.0,425.0,2.1164,139400.0,NEAR OCEAN --117.14,32.71,32.0,719.0,251.0,894.0,208.0,1.8456,103100.0,NEAR OCEAN --117.14,32.72,43.0,1073.0,344.0,660.0,279.0,2.0529,168800.0,NEAR OCEAN --117.14,32.72,45.0,1140.0,310.0,840.0,339.0,1.6156,156300.0,NEAR OCEAN --117.14,32.72,34.0,2533.0,862.0,2011.0,778.0,2.1199,160400.0,NEAR OCEAN --117.14,32.71,52.0,1225.0,332.0,955.0,321.0,1.6011,106300.0,NEAR OCEAN --117.14,32.71,52.0,979.0,314.0,975.0,297.0,1.2375,100000.0,NEAR OCEAN --117.14,32.71,52.0,800.0,313.0,1337.0,282.0,1.5594,87500.0,NEAR OCEAN --117.14,32.71,52.0,500.0,,480.0,108.0,1.8696,91100.0,NEAR OCEAN --117.13,32.71,37.0,1220.0,325.0,1472.0,323.0,1.825,81500.0,NEAR OCEAN --117.13,32.71,35.0,614.0,180.0,691.0,164.0,1.6953,81300.0,NEAR OCEAN --117.14,32.71,43.0,966.0,255.0,857.0,208.0,1.2841,72000.0,NEAR OCEAN --117.14,32.71,39.0,1647.0,478.0,2176.0,479.0,1.7642,82900.0,NEAR OCEAN --117.14,32.7,32.0,1280.0,353.0,1335.0,330.0,1.6023,77300.0,NEAR OCEAN --117.13,32.7,35.0,365.0,98.0,463.0,112.0,2.5588,78800.0,NEAR OCEAN --117.14,32.7,43.0,1126.0,289.0,1132.0,294.0,2.1875,87000.0,NEAR OCEAN --117.14,32.7,40.0,1227.0,330.0,1199.0,316.0,1.2188,92500.0,NEAR OCEAN --117.14,32.7,36.0,633.0,148.0,557.0,139.0,1.5729,82700.0,NEAR OCEAN --117.14,32.7,48.0,510.0,180.0,545.0,132.0,1.8008,86500.0,NEAR OCEAN --117.14,32.7,44.0,658.0,218.0,869.0,212.0,1.9338,89400.0,NEAR OCEAN --117.14,32.7,47.0,552.0,161.0,593.0,174.0,0.9589,90000.0,NEAR OCEAN --117.15,32.7,50.0,475.0,172.0,483.0,120.0,1.3657,162500.0,NEAR OCEAN --117.15,32.71,52.0,402.0,183.0,557.0,172.0,1.3125,87500.0,NEAR OCEAN --117.15,32.7,52.0,458.0,148.0,1283.0,166.0,1.2863,86300.0,NEAR OCEAN --117.15,32.71,52.0,217.0,82.0,531.0,93.0,1.6607,137500.0,NEAR OCEAN --117.15,32.72,52.0,344.0,177.0,460.0,147.0,1.2292,137500.0,NEAR OCEAN --117.16,32.72,52.0,788.0,463.0,805.0,391.0,0.9142,162500.0,NEAR OCEAN --117.16,32.71,52.0,845.0,451.0,1230.0,375.0,1.0918,22500.0,NEAR OCEAN --117.16,32.71,5.0,2508.0,827.0,2066.0,761.0,1.3092,325000.0,NEAR OCEAN --117.17,32.71,7.0,2493.0,693.0,951.0,641.0,4.2375,205000.0,NEAR OCEAN --117.17,32.71,39.0,311.0,181.0,206.0,113.0,0.7685,187500.0,NEAR OCEAN --117.14,32.73,26.0,450.0,132.0,317.0,109.0,4.0,137500.0,NEAR OCEAN --117.15,32.72,51.0,1321.0,,781.0,499.0,1.3071,250000.0,NEAR OCEAN --117.16,32.72,24.0,1232.0,663.0,1184.0,626.0,1.0391,162500.0,NEAR OCEAN --117.16,32.73,52.0,1218.0,471.0,821.0,429.0,1.9597,200000.0,NEAR OCEAN --117.16,32.72,27.0,1245.0,471.0,653.0,451.0,1.2668,225000.0,NEAR OCEAN --117.17,32.73,52.0,408.0,143.0,313.0,143.0,1.815,116700.0,NEAR OCEAN --117.17,32.72,44.0,626.0,256.0,572.0,229.0,1.5909,262500.0,NEAR OCEAN --117.16,32.73,52.0,1682.0,617.0,873.0,534.0,2.0972,112500.0,NEAR OCEAN --117.16,32.73,52.0,1863.0,559.0,906.0,493.0,1.9203,195800.0,NEAR OCEAN --117.17,32.73,52.0,1578.0,487.0,879.0,446.0,2.4069,215000.0,NEAR OCEAN --117.16,32.74,49.0,1815.0,495.0,601.0,410.0,3.0571,418800.0,NEAR OCEAN --117.16,32.74,43.0,1437.0,406.0,692.0,379.0,3.1979,466700.0,NEAR OCEAN --117.17,32.74,39.0,3803.0,806.0,1567.0,775.0,3.7039,361500.0,NEAR OCEAN --117.17,32.74,38.0,5054.0,1168.0,2366.0,1103.0,2.9422,289400.0,NEAR OCEAN --117.17,32.73,52.0,55.0,18.0,65.0,22.0,1.6591,112500.0,NEAR OCEAN --117.2,32.76,40.0,581.0,157.0,298.0,156.0,2.4,255000.0,NEAR OCEAN --117.19,32.75,33.0,1115.0,316.0,583.0,269.0,2.5882,258300.0,NEAR OCEAN --117.18,32.74,20.0,1165.0,269.0,459.0,244.0,3.175,191700.0,NEAR OCEAN --117.19,32.75,52.0,25.0,5.0,13.0,5.0,0.536,162500.0,NEAR OCEAN --117.21,32.75,15.0,1716.0,702.0,914.0,672.0,1.0612,300000.0,NEAR OCEAN --117.21,32.74,45.0,3025.0,583.0,1980.0,550.0,2.2982,87500.0,NEAR OCEAN --117.21,32.75,27.0,2072.0,534.0,1118.0,510.0,2.8043,262100.0,NEAR OCEAN --117.22,32.75,24.0,3914.0,985.0,2147.0,874.0,2.9735,225000.0,NEAR OCEAN --117.22,32.75,26.0,696.0,185.0,384.0,184.0,2.6121,125000.0,NEAR OCEAN --117.23,32.75,23.0,2415.0,653.0,1275.0,596.0,3.1389,101800.0,NEAR OCEAN --117.22,32.75,26.0,617.0,112.0,251.0,110.0,3.8036,162000.0,NEAR OCEAN --117.23,32.75,11.0,4304.0,1245.0,1960.0,1105.0,3.3456,159800.0,NEAR OCEAN --117.21,32.74,52.0,1245.0,174.0,468.0,193.0,6.9322,334500.0,NEAR OCEAN --117.22,32.74,52.0,1283.0,173.0,436.0,190.0,7.4029,345700.0,NEAR OCEAN --117.22,32.74,52.0,1260.0,202.0,555.0,209.0,7.2758,345200.0,NEAR OCEAN --117.22,32.74,41.0,2621.0,542.0,1074.0,471.0,2.4016,287500.0,NEAR OCEAN --117.22,32.75,34.0,6001.0,1111.0,2654.0,1072.0,4.5878,291000.0,NEAR OCEAN --117.22,32.73,38.0,3966.0,768.0,1640.0,729.0,3.8409,291400.0,NEAR OCEAN --117.23,32.73,35.0,2914.0,683.0,1562.0,638.0,2.5259,240200.0,NEAR OCEAN --117.23,32.73,44.0,1168.0,263.0,509.0,256.0,2.7273,269700.0,NEAR OCEAN --117.23,32.72,43.0,952.0,209.0,392.0,210.0,2.1635,244200.0,NEAR OCEAN --117.23,32.74,44.0,1404.0,229.0,513.0,217.0,4.1806,263800.0,NEAR OCEAN --117.24,32.74,43.0,2216.0,375.0,918.0,388.0,5.5289,297700.0,NEAR OCEAN --117.24,32.73,37.0,2260.0,354.0,809.0,351.0,5.9113,388300.0,NEAR OCEAN --117.23,32.73,36.0,2052.0,287.0,699.0,265.0,7.5557,441400.0,NEAR OCEAN --117.23,32.72,38.0,2827.0,581.0,972.0,558.0,3.2361,500001.0,NEAR OCEAN --117.24,32.71,32.0,4164.0,701.0,1277.0,607.0,6.6661,500001.0,NEAR OCEAN --117.24,32.72,39.0,3089.0,431.0,1175.0,432.0,7.5925,466700.0,NEAR OCEAN --117.24,32.72,39.0,3819.0,594.0,1361.0,583.0,6.6013,396400.0,NEAR OCEAN --117.25,32.73,38.0,1840.0,291.0,633.0,283.0,4.9125,383600.0,NEAR OCEAN --117.25,32.72,36.0,2632.0,450.0,2038.0,419.0,6.5319,345800.0,NEAR OCEAN --117.25,32.72,33.0,1677.0,228.0,629.0,239.0,6.597,496400.0,NEAR OCEAN --117.25,32.73,37.0,2224.0,331.0,821.0,341.0,6.3331,400000.0,NEAR OCEAN --117.28,32.73,44.0,1934.0,325.0,783.0,316.0,4.8684,358600.0,NEAR OCEAN --117.28,32.74,33.0,4168.0,1112.0,1785.0,984.0,2.7515,247700.0,NEAR OCEAN --117.25,32.74,36.0,3548.0,956.0,1648.0,866.0,2.6962,288200.0,NEAR OCEAN --117.25,32.74,36.0,1830.0,430.0,755.0,419.0,2.9904,286800.0,NEAR OCEAN --117.25,32.74,40.0,2186.0,549.0,953.0,515.0,2.8007,257100.0,NEAR OCEAN --117.24,32.74,44.0,1686.0,285.0,712.0,298.0,4.0268,298600.0,NEAR OCEAN --117.24,32.74,44.0,1488.0,259.0,667.0,281.0,4.0862,321800.0,NEAR OCEAN --117.25,32.73,39.0,1688.0,256.0,635.0,272.0,4.5938,367400.0,NEAR OCEAN --117.23,32.75,5.0,1824.0,,892.0,426.0,3.4286,137500.0,NEAR OCEAN --117.23,32.75,21.0,2050.0,608.0,1131.0,550.0,2.4779,165000.0,NEAR OCEAN --117.23,32.74,16.0,735.0,139.0,299.0,134.0,4.6354,179200.0,NEAR OCEAN --117.23,32.74,16.0,1953.0,404.0,798.0,385.0,4.8167,169800.0,NEAR OCEAN --117.23,32.74,35.0,2615.0,525.0,1312.0,547.0,4.1339,238200.0,NEAR OCEAN --117.24,32.74,45.0,1718.0,293.0,757.0,329.0,4.05,284900.0,NEAR OCEAN --117.24,32.75,36.0,2831.0,669.0,1279.0,660.0,2.9896,252700.0,NEAR OCEAN --117.24,32.75,36.0,1856.0,475.0,822.0,416.0,2.3042,220600.0,NEAR OCEAN --117.24,32.75,41.0,1989.0,514.0,1015.0,489.0,2.79,226000.0,NEAR OCEAN --117.25,32.74,36.0,1240.0,310.0,577.0,319.0,2.6625,248200.0,NEAR OCEAN --117.25,32.75,32.0,3551.0,1037.0,1731.0,935.0,2.2017,208300.0,NEAR OCEAN --117.25,32.75,36.0,1929.0,526.0,974.0,491.0,1.7622,205800.0,NEAR OCEAN --117.24,32.75,33.0,1980.0,614.0,1057.0,567.0,2.2042,231300.0,NEAR OCEAN --117.25,32.75,37.0,1189.0,377.0,645.0,377.0,2.4672,216700.0,NEAR OCEAN --117.28,32.75,34.0,981.0,313.0,508.0,304.0,2.2328,266700.0,NEAR OCEAN --117.25,32.79,37.0,1467.0,442.0,651.0,354.0,2.375,340400.0,NEAR OCEAN --117.25,32.79,43.0,906.0,240.0,458.0,205.0,1.8365,328600.0,NEAR OCEAN --117.25,32.78,36.0,1527.0,427.0,710.0,312.0,2.7857,291700.0,NEAR OCEAN --117.25,32.78,21.0,1479.0,484.0,658.0,384.0,2.45,350000.0,NEAR OCEAN --117.28,32.77,38.0,1267.0,340.0,442.0,250.0,4.3403,500000.0,NEAR OCEAN --117.25,32.77,32.0,2021.0,524.0,973.0,485.0,3.18,362500.0,NEAR OCEAN --117.25,32.77,35.0,2494.0,690.0,1126.0,624.0,4.0313,385300.0,NEAR OCEAN --117.25,32.76,38.0,2331.0,493.0,836.0,433.0,4.9125,452600.0,NEAR OCEAN --117.22,32.78,22.0,2020.0,466.0,1010.0,429.0,3.4527,175000.0,NEAR OCEAN --117.23,32.79,23.0,2578.0,665.0,989.0,622.0,3.5484,238000.0,NEAR OCEAN --117.23,32.79,28.0,2453.0,648.0,1082.0,617.0,3.625,266700.0,NEAR OCEAN --117.23,32.78,35.0,1649.0,355.0,746.0,360.0,4.6293,356500.0,NEAR OCEAN --117.24,32.78,44.0,2172.0,431.0,892.0,420.0,4.1742,342200.0,NEAR OCEAN --117.24,32.79,17.0,1149.0,266.0,403.0,228.0,4.1652,241700.0,NEAR OCEAN --117.24,32.79,18.0,2539.0,616.0,964.0,526.0,3.4306,275000.0,NEAR OCEAN --117.24,32.79,20.0,961.0,278.0,525.0,254.0,3.1838,245800.0,NEAR OCEAN --117.24,32.79,25.0,2135.0,691.0,566.0,320.0,2.6902,212500.0,NEAR OCEAN --117.24,32.79,18.0,1741.0,602.0,508.0,283.0,3.2625,193800.0,NEAR OCEAN --117.21,32.8,19.0,786.0,282.0,525.0,229.0,1.7273,137500.0,NEAR OCEAN --117.22,32.8,23.0,1906.0,525.0,1029.0,491.0,2.93,183300.0,NEAR OCEAN --117.23,32.8,22.0,2981.0,873.0,1751.0,745.0,2.3482,190600.0,NEAR OCEAN --117.23,32.8,27.0,1297.0,355.0,776.0,337.0,2.4643,244400.0,NEAR OCEAN --117.23,32.81,28.0,1508.0,263.0,996.0,267.0,3.8026,270000.0,NEAR OCEAN --117.22,32.81,21.0,1703.0,335.0,902.0,369.0,3.7813,362500.0,NEAR OCEAN --117.25,32.8,37.0,1096.0,260.0,490.0,267.0,3.2663,270600.0,NEAR OCEAN --117.25,32.8,32.0,1601.0,468.0,731.0,429.0,2.5568,258300.0,NEAR OCEAN --117.25,32.8,30.0,2061.0,631.0,1007.0,577.0,2.5813,253100.0,NEAR OCEAN --117.25,32.8,31.0,2182.0,630.0,1069.0,599.0,2.9781,212500.0,NEAR OCEAN --117.25,32.79,27.0,848.0,300.0,455.0,298.0,3.0774,275000.0,NEAR OCEAN --117.25,32.79,25.0,1627.0,375.0,735.0,378.0,3.6429,317100.0,NEAR OCEAN --117.28,32.8,20.0,1838.0,540.0,615.0,325.0,3.5486,193800.0,NEAR OCEAN --117.23,32.8,21.0,2429.0,579.0,1011.0,538.0,3.225,229400.0,NEAR OCEAN --117.23,32.8,31.0,1403.0,388.0,724.0,371.0,2.6403,216100.0,NEAR OCEAN --117.23,32.8,28.0,3379.0,918.0,1849.0,849.0,3.0293,241700.0,NEAR OCEAN --117.24,32.8,26.0,3433.0,873.0,1492.0,798.0,2.9258,234800.0,NEAR OCEAN --117.24,32.8,28.0,1072.0,331.0,692.0,321.0,2.1357,187500.0,NEAR OCEAN --117.24,32.8,18.0,2205.0,661.0,874.0,580.0,3.8018,112500.0,NEAR OCEAN --117.24,32.8,19.0,1863.0,497.0,868.0,503.0,2.288,210000.0,NEAR OCEAN --117.24,32.8,30.0,1917.0,462.0,828.0,437.0,2.4671,276300.0,NEAR OCEAN --117.24,32.8,29.0,3376.0,882.0,1513.0,843.0,3.101,238200.0,NEAR OCEAN --117.25,32.81,32.0,2402.0,551.0,1020.0,532.0,3.3942,307400.0,NEAR OCEAN --117.25,32.8,35.0,2281.0,506.0,1005.0,496.0,4.2296,275000.0,NEAR OCEAN --117.25,32.8,26.0,2442.0,659.0,1134.0,624.0,3.3274,295500.0,NEAR OCEAN --117.26,32.81,25.0,2076.0,586.0,1060.0,554.0,2.8421,227800.0,NEAR OCEAN --117.26,32.81,30.0,1328.0,346.0,577.0,328.0,2.3284,290600.0,NEAR OCEAN --117.26,32.81,37.0,1616.0,421.0,650.0,395.0,2.92,326500.0,NEAR OCEAN --117.29,32.81,35.0,1878.0,308.0,598.0,257.0,6.9553,500001.0,NEAR OCEAN --117.26,32.8,30.0,1446.0,385.0,650.0,344.0,3.744,450000.0,NEAR OCEAN --117.24,32.81,33.0,1588.0,289.0,683.0,301.0,5.4103,332400.0,NEAR OCEAN --117.24,32.81,34.0,2420.0,391.0,917.0,392.0,6.5881,394400.0,NEAR OCEAN --117.25,32.81,39.0,1846.0,350.0,765.0,329.0,3.9187,311900.0,NEAR OCEAN --117.27,32.84,34.0,1655.0,450.0,870.0,411.0,3.2109,376000.0,NEAR OCEAN --117.28,32.84,41.0,1420.0,338.0,640.0,314.0,2.9306,360300.0,NEAR OCEAN --117.27,32.83,39.0,1877.0,426.0,805.0,409.0,3.875,410000.0,NEAR OCEAN --117.28,32.83,34.0,2392.0,653.0,933.0,619.0,3.7306,500000.0,NEAR OCEAN --117.31,32.83,38.0,2367.0,480.0,891.0,428.0,4.1477,500001.0,NEAR OCEAN --117.27,32.82,35.0,2908.0,595.0,1068.0,529.0,4.1793,500001.0,NEAR OCEAN --117.27,32.82,42.0,2820.0,488.0,1175.0,500.0,4.5083,405200.0,NEAR OCEAN --117.31,32.82,42.0,2785.0,389.0,833.0,333.0,11.3074,500001.0,NEAR OCEAN --117.27,32.85,34.0,2105.0,444.0,780.0,406.0,2.3187,488900.0,NEAR OCEAN --117.28,32.84,21.0,2455.0,660.0,1015.0,597.0,3.7596,381300.0,NEAR OCEAN --117.27,32.85,26.0,1373.0,,608.0,268.0,4.425,475000.0,NEAR OCEAN --117.3,32.85,28.0,2334.0,694.0,770.0,552.0,3.1324,500001.0,NEAR OCEAN --117.23,32.81,24.0,3271.0,508.0,1496.0,482.0,5.9359,422200.0,NEAR OCEAN --117.23,32.81,22.0,3205.0,429.0,1083.0,410.0,8.1844,406300.0,NEAR OCEAN --117.24,32.82,20.0,2467.0,332.0,731.0,335.0,7.2559,392300.0,NEAR OCEAN --117.25,32.84,19.0,1759.0,214.0,659.0,195.0,10.7751,500001.0,NEAR OCEAN --117.26,32.85,30.0,3652.0,499.0,978.0,462.0,8.2374,500001.0,NEAR OCEAN --117.25,32.83,17.0,2075.0,262.0,704.0,241.0,10.9529,500001.0,NEAR OCEAN --117.27,32.84,26.0,3940.0,657.0,1180.0,600.0,6.1025,500001.0,NEAR OCEAN --117.23,32.88,18.0,5566.0,1465.0,6303.0,1458.0,1.858,205000.0,NEAR OCEAN --117.22,32.85,26.0,1647.0,261.0,694.0,259.0,4.6875,274400.0,NEAR OCEAN --117.22,32.84,19.0,2691.0,347.0,1154.0,366.0,8.051,363600.0,NEAR OCEAN --117.23,32.85,25.0,4229.0,601.0,1634.0,574.0,6.3955,316700.0,NEAR OCEAN --117.21,32.86,24.0,3596.0,494.0,1573.0,492.0,6.5382,326000.0,NEAR OCEAN --117.21,32.86,26.0,1352.0,202.0,654.0,217.0,5.3693,260700.0,NEAR OCEAN --117.21,32.85,15.0,2593.0,521.0,901.0,456.0,4.2065,277800.0,NEAR OCEAN --117.21,32.85,26.0,2012.0,315.0,872.0,335.0,5.4067,277500.0,NEAR OCEAN --117.24,32.83,18.0,3109.0,501.0,949.0,368.0,7.4351,445700.0,NEAR OCEAN --117.25,32.82,19.0,5255.0,762.0,1773.0,725.0,7.8013,474000.0,NEAR OCEAN --117.25,32.82,23.0,6139.0,826.0,2036.0,807.0,9.5245,500001.0,NEAR OCEAN --117.26,32.83,24.0,1663.0,199.0,578.0,187.0,10.7721,500001.0,NEAR OCEAN --117.26,32.82,34.0,5846.0,785.0,1817.0,747.0,8.496,500001.0,NEAR OCEAN --117.27,32.83,35.0,1420.0,193.0,469.0,177.0,8.0639,500001.0,NEAR OCEAN --117.29,32.92,25.0,2355.0,381.0,823.0,358.0,6.8322,500001.0,NEAR OCEAN --117.25,32.86,30.0,1670.0,219.0,606.0,202.0,12.4429,500001.0,NEAR OCEAN --117.25,32.86,25.0,2911.0,533.0,1137.0,499.0,5.1023,500001.0,NEAR OCEAN --117.25,32.86,27.0,2530.0,469.0,594.0,326.0,7.2821,500001.0,NEAR OCEAN --117.26,32.85,42.0,1761.0,329.0,480.0,255.0,5.3787,500001.0,NEAR OCEAN --117.24,32.85,18.0,3117.0,475.0,904.0,368.0,6.7587,388500.0,NEAR OCEAN --117.24,32.85,22.0,3479.0,448.0,1252.0,440.0,10.0707,500001.0,NEAR OCEAN --117.19,32.86,18.0,4231.0,728.0,2030.0,720.0,6.1805,272400.0,NEAR OCEAN --117.19,32.86,19.0,3716.0,563.0,1788.0,587.0,5.2113,267400.0,NEAR OCEAN --117.2,32.85,22.0,3501.0,631.0,1297.0,581.0,4.7891,295300.0,NEAR OCEAN --117.2,32.85,26.0,2298.0,549.0,980.0,555.0,2.4207,213500.0,NEAR OCEAN --117.19,32.85,15.0,2895.0,498.0,1164.0,443.0,5.102,417500.0,NEAR OCEAN --117.23,32.87,15.0,2290.0,662.0,1034.0,594.0,3.0104,204200.0,NEAR OCEAN --117.23,32.86,16.0,1675.0,354.0,604.0,332.0,5.2326,188300.0,NEAR OCEAN --117.23,32.86,15.0,1199.0,301.0,510.0,296.0,3.6083,180100.0,NEAR OCEAN --117.23,32.86,15.0,1703.0,320.0,587.0,282.0,5.0855,209800.0,NEAR OCEAN --117.23,32.86,16.0,1200.0,468.0,648.0,443.0,3.045,100000.0,NEAR OCEAN --117.23,32.87,11.0,3123.0,740.0,1223.0,634.0,5.417,196800.0,NEAR OCEAN --117.21,32.86,16.0,2800.0,566.0,1267.0,518.0,3.2794,148600.0,NEAR OCEAN --117.22,32.87,14.0,3512.0,807.0,1835.0,792.0,3.35,171000.0,NEAR OCEAN --117.22,32.86,4.0,16289.0,4585.0,7604.0,4176.0,3.6287,280800.0,NEAR OCEAN --117.22,32.87,5.0,3511.0,1008.0,1599.0,918.0,3.8542,176600.0,NEAR OCEAN --117.21,32.89,14.0,3114.0,773.0,1592.0,776.0,3.3176,156100.0,NEAR OCEAN --117.2,32.86,4.0,4308.0,1095.0,1923.0,932.0,3.9356,267000.0,NEAR OCEAN --117.21,32.87,12.0,1428.0,303.0,528.0,269.0,4.1429,254400.0,NEAR OCEAN --117.15,32.91,15.0,1613.0,303.0,702.0,240.0,4.875,169300.0,<1H OCEAN --117.15,32.91,14.0,1259.0,238.0,889.0,247.0,4.9464,174800.0,<1H OCEAN --117.16,32.91,5.0,1619.0,272.0,1063.0,296.0,6.0891,214600.0,<1H OCEAN --117.15,32.91,10.0,2349.0,431.0,1598.0,435.0,4.8229,183200.0,<1H OCEAN --117.15,32.9,12.0,1681.0,381.0,1050.0,362.0,4.2008,176100.0,<1H OCEAN --117.16,32.89,5.0,8576.0,1952.0,5006.0,1827.0,4.3598,189100.0,<1H OCEAN --117.12,32.91,8.0,3405.0,961.0,1742.0,918.0,2.8728,114600.0,<1H OCEAN --117.13,32.91,15.0,1450.0,266.0,747.0,290.0,3.6111,196300.0,<1H OCEAN --117.13,32.91,16.0,3230.0,579.0,1825.0,576.0,4.2969,151200.0,<1H OCEAN --117.13,32.91,16.0,2715.0,581.0,1619.0,584.0,4.0,154700.0,<1H OCEAN --117.14,32.91,14.0,3014.0,710.0,2165.0,705.0,3.7837,160300.0,<1H OCEAN --117.14,32.9,16.0,3217.0,,2054.0,687.0,4.2234,162100.0,<1H OCEAN --117.13,32.9,15.0,2785.0,644.0,1798.0,630.0,3.7156,175200.0,<1H OCEAN --117.12,32.9,14.0,3249.0,937.0,1929.0,838.0,2.8588,92500.0,<1H OCEAN --117.12,32.9,13.0,1743.0,363.0,854.0,353.0,4.6667,138200.0,<1H OCEAN --117.13,32.92,16.0,2173.0,399.0,1460.0,393.0,4.2614,169600.0,<1H OCEAN --117.13,32.92,17.0,1481.0,315.0,1002.0,300.0,3.6196,163400.0,<1H OCEAN --117.14,32.92,7.0,1308.0,418.0,766.0,390.0,3.2151,106300.0,<1H OCEAN --117.14,32.92,6.0,3069.0,750.0,1541.0,736.0,3.814,132500.0,<1H OCEAN --117.14,32.92,15.0,3242.0,595.0,1936.0,593.0,4.9706,184700.0,<1H OCEAN --117.13,32.92,16.0,1580.0,241.0,917.0,261.0,4.7266,191100.0,<1H OCEAN --117.13,32.92,16.0,1565.0,257.0,893.0,239.0,5.5036,192300.0,<1H OCEAN --117.13,32.94,15.0,4846.0,825.0,2797.0,823.0,4.9375,180400.0,<1H OCEAN --117.13,32.93,16.0,2918.0,444.0,1697.0,444.0,5.3062,195500.0,<1H OCEAN --117.14,32.93,14.0,1946.0,463.0,1205.0,390.0,4.2109,171200.0,<1H OCEAN --117.14,32.93,12.0,1474.0,364.0,1009.0,372.0,4.0521,166700.0,<1H OCEAN --117.14,32.93,16.0,2412.0,419.0,1612.0,422.0,4.5086,171100.0,<1H OCEAN --117.12,32.93,7.0,1427.0,243.0,927.0,239.0,5.3625,218900.0,<1H OCEAN --117.15,32.93,16.0,2718.0,438.0,1515.0,431.0,5.1433,185300.0,<1H OCEAN --117.14,32.92,15.0,1558.0,314.0,949.0,332.0,5.2864,174400.0,<1H OCEAN --117.15,32.92,16.0,1972.0,402.0,1377.0,413.0,4.4615,168300.0,<1H OCEAN --117.15,32.92,16.0,2366.0,392.0,1482.0,407.0,4.9024,182900.0,<1H OCEAN --117.15,32.92,16.0,2969.0,514.0,1594.0,465.0,4.5221,168300.0,<1H OCEAN --117.18,32.92,4.0,15025.0,2616.0,7560.0,2392.0,5.196,210700.0,<1H OCEAN --117.25,32.96,18.0,4773.0,743.0,1970.0,716.0,6.6199,406200.0,NEAR OCEAN --117.26,32.95,15.0,1036.0,149.0,395.0,157.0,5.8343,500001.0,NEAR OCEAN --117.26,32.95,15.0,1882.0,233.0,704.0,219.0,6.9794,500001.0,NEAR OCEAN --117.25,32.94,16.0,4755.0,807.0,1829.0,756.0,6.7694,425900.0,NEAR OCEAN --117.25,32.94,15.0,1804.0,339.0,673.0,296.0,5.9806,370500.0,NEAR OCEAN --117.24,32.95,18.0,1591.0,268.0,547.0,243.0,5.9547,329300.0,NEAR OCEAN --117.24,32.94,12.0,2165.0,437.0,792.0,386.0,5.2648,294400.0,NEAR OCEAN --117.13,32.98,5.0,2276.0,311.0,1158.0,317.0,6.4321,271900.0,<1H OCEAN --117.13,32.97,10.0,3486.0,469.0,1700.0,483.0,6.4696,249500.0,<1H OCEAN --117.18,32.95,4.0,19001.0,2688.0,8980.0,2441.0,6.3237,260900.0,<1H OCEAN --117.14,32.96,12.0,5949.0,799.0,2936.0,781.0,6.3721,241500.0,<1H OCEAN --117.13,32.96,15.0,2267.0,292.0,1180.0,289.0,6.712,240200.0,<1H OCEAN --117.24,32.98,4.0,6423.0,1042.0,2607.0,983.0,7.6348,337000.0,NEAR OCEAN --117.21,32.96,3.0,6251.0,988.0,2330.0,893.0,8.4355,467600.0,NEAR OCEAN --117.22,32.95,4.0,18123.0,3173.0,7301.0,2964.0,6.357,322500.0,NEAR OCEAN --117.22,32.83,34.0,2936.0,597.0,1512.0,571.0,3.7841,176900.0,NEAR OCEAN --117.22,32.83,31.0,3958.0,727.0,1924.0,728.0,5.4605,190200.0,NEAR OCEAN --117.22,32.83,17.0,1124.0,187.0,553.0,205.0,5.7451,237300.0,NEAR OCEAN --117.22,32.83,31.0,2558.0,512.0,1164.0,492.0,3.4318,200400.0,NEAR OCEAN --117.22,32.82,35.0,756.0,135.0,423.0,136.0,3.5234,183900.0,NEAR OCEAN --117.2,32.84,34.0,3353.0,544.0,1583.0,571.0,4.55,187700.0,NEAR OCEAN --117.2,32.84,32.0,2033.0,394.0,989.0,389.0,3.2583,181400.0,NEAR OCEAN --117.21,32.84,34.0,2158.0,366.0,1046.0,335.0,4.5402,182100.0,NEAR OCEAN --117.2,32.83,36.0,1089.0,240.0,623.0,226.0,2.5909,176000.0,NEAR OCEAN --117.21,32.83,36.0,1475.0,328.0,806.0,327.0,3.5078,166000.0,NEAR OCEAN --117.21,32.83,28.0,3241.0,533.0,1334.0,513.0,4.1806,199600.0,NEAR OCEAN --117.21,32.83,35.0,2259.0,501.0,1340.0,511.0,3.4482,162500.0,NEAR OCEAN --117.21,32.81,33.0,4773.0,873.0,1954.0,845.0,4.3862,184800.0,NEAR OCEAN --117.21,32.82,31.0,2035.0,383.0,866.0,360.0,3.8529,212000.0,NEAR OCEAN --117.21,32.81,27.0,1318.0,216.0,495.0,191.0,5.2837,283800.0,NEAR OCEAN --117.22,32.82,22.0,3738.0,795.0,1476.0,728.0,3.7963,303100.0,NEAR OCEAN --117.22,32.81,24.0,730.0,196.0,335.0,203.0,3.5078,362500.0,NEAR OCEAN --117.2,32.83,35.0,1377.0,350.0,792.0,313.0,2.8472,161400.0,NEAR OCEAN --117.2,32.82,35.0,1217.0,220.0,643.0,237.0,3.9464,171600.0,NEAR OCEAN --117.2,32.82,35.0,2772.0,537.0,1392.0,521.0,3.337,172300.0,NEAR OCEAN --117.19,32.82,34.0,3850.0,608.0,1619.0,602.0,5.0465,208200.0,NEAR OCEAN --117.19,32.82,35.0,1074.0,180.0,442.0,173.0,5.253,204000.0,NEAR OCEAN --117.19,32.82,35.0,2197.0,353.0,945.0,357.0,4.9219,192900.0,NEAR OCEAN --117.18,32.84,31.0,3064.0,575.0,1476.0,549.0,3.6667,175900.0,NEAR OCEAN --117.18,32.84,30.0,2290.0,523.0,1272.0,472.0,3.5606,165100.0,NEAR OCEAN --117.18,32.84,32.0,1351.0,237.0,823.0,269.0,4.2768,167800.0,NEAR OCEAN --117.19,32.84,30.0,2492.0,406.0,1250.0,431.0,5.5277,197100.0,NEAR OCEAN --117.19,32.84,35.0,2263.0,427.0,1001.0,408.0,3.875,172000.0,NEAR OCEAN --117.18,32.83,23.0,2105.0,525.0,1218.0,484.0,3.375,184100.0,NEAR OCEAN --117.19,32.83,30.0,2288.0,448.0,1240.0,469.0,4.0114,169800.0,NEAR OCEAN --117.19,32.83,30.0,3225.0,555.0,1601.0,532.0,4.3317,173300.0,NEAR OCEAN --117.17,32.83,24.0,3541.0,530.0,1591.0,530.0,5.3538,212500.0,NEAR OCEAN --117.17,32.82,24.0,1623.0,417.0,911.0,397.0,2.7401,198100.0,NEAR OCEAN --117.17,32.82,21.0,2869.0,596.0,1471.0,577.0,3.0375,197600.0,NEAR OCEAN --117.18,32.83,27.0,2346.0,399.0,1105.0,373.0,4.2708,182800.0,NEAR OCEAN --117.18,32.83,31.0,1772.0,353.0,1090.0,350.0,3.9265,162000.0,NEAR OCEAN --117.16,32.82,28.0,2291.0,371.0,1098.0,382.0,4.6875,188000.0,NEAR OCEAN --117.17,32.81,26.0,2424.0,388.0,974.0,375.0,4.739,184100.0,NEAR OCEAN --117.17,32.81,26.0,788.0,127.0,346.0,125.0,5.0603,185700.0,NEAR OCEAN --117.18,32.81,19.0,6823.0,1509.0,3784.0,1509.0,3.1032,179500.0,NEAR OCEAN --117.17,32.82,24.0,1569.0,377.0,715.0,321.0,3.1146,187500.0,NEAR OCEAN --117.16,32.81,14.0,4328.0,1100.0,2046.0,1044.0,2.2899,159000.0,NEAR OCEAN --117.16,32.81,35.0,1213.0,200.0,532.0,181.0,3.6806,172400.0,NEAR OCEAN --117.16,32.8,37.0,422.0,79.0,211.0,80.0,3.0625,159700.0,NEAR OCEAN --117.16,32.8,22.0,2259.0,634.0,1213.0,601.0,2.5,177800.0,NEAR OCEAN --117.16,32.81,34.0,2275.0,375.0,1021.0,379.0,3.6371,176300.0,NEAR OCEAN --117.17,32.81,33.0,3064.0,506.0,1355.0,488.0,4.22,178700.0,NEAR OCEAN --117.14,32.83,25.0,2161.0,462.0,896.0,468.0,2.2284,177500.0,NEAR OCEAN --117.18,32.82,25.0,1756.0,301.0,722.0,312.0,4.5625,162300.0,NEAR OCEAN --117.18,32.81,28.0,3436.0,537.0,1503.0,498.0,4.7679,204000.0,NEAR OCEAN --117.19,32.81,33.0,5226.0,833.0,2221.0,839.0,5.1491,207000.0,NEAR OCEAN --117.18,32.8,10.0,3821.0,631.0,1605.0,609.0,5.5454,217100.0,NEAR OCEAN --117.18,32.8,30.0,2456.0,390.0,1022.0,393.0,3.8542,198500.0,NEAR OCEAN --117.18,32.79,30.0,5201.0,1104.0,2961.0,1064.0,3.2661,140400.0,NEAR OCEAN --117.17,32.79,44.0,2262.0,647.0,3009.0,657.0,2.2663,123600.0,NEAR OCEAN --117.17,32.79,43.0,1269.0,297.0,946.0,285.0,2.1447,133300.0,NEAR OCEAN --117.16,32.8,25.0,1399.0,329.0,1308.0,355.0,2.5682,187500.0,NEAR OCEAN --117.17,32.8,20.0,2827.0,554.0,1822.0,536.0,3.4706,157600.0,NEAR OCEAN --117.15,32.8,27.0,1937.0,537.0,1211.0,482.0,2.75,87500.0,NEAR OCEAN --117.15,32.8,23.0,2395.0,476.0,2284.0,488.0,3.7292,146300.0,NEAR OCEAN --117.16,32.78,24.0,3566.0,765.0,1697.0,722.0,3.6375,178600.0,NEAR OCEAN --117.16,32.79,32.0,1731.0,413.0,1569.0,427.0,3.3375,154300.0,NEAR OCEAN --117.17,32.78,17.0,3845.0,1051.0,3102.0,944.0,2.3658,164100.0,NEAR OCEAN --117.16,32.78,34.0,2515.0,488.0,1594.0,515.0,3.7381,165000.0,NEAR OCEAN --117.17,32.78,42.0,1104.0,305.0,892.0,270.0,2.2768,145200.0,NEAR OCEAN --117.17,32.77,35.0,1399.0,274.0,695.0,281.0,3.767,166800.0,NEAR OCEAN --117.17,32.77,6.0,3856.0,875.0,1547.0,816.0,4.5481,164800.0,NEAR OCEAN --117.18,32.77,16.0,2374.0,780.0,913.0,705.0,2.7386,87500.0,NEAR OCEAN --117.18,32.76,8.0,3694.0,997.0,1297.0,807.0,3.6492,158900.0,NEAR OCEAN --117.18,32.76,17.0,711.0,254.0,327.0,227.0,2.6493,67500.0,NEAR OCEAN --117.18,32.78,21.0,4185.0,1018.0,3122.0,993.0,3.0481,210000.0,NEAR OCEAN --117.18,32.77,23.0,1215.0,225.0,592.0,224.0,3.4,200600.0,NEAR OCEAN --117.21,32.81,26.0,2496.0,407.0,1062.0,380.0,5.5413,302100.0,NEAR OCEAN --117.2,32.8,34.0,4854.0,912.0,2089.0,854.0,3.8542,200000.0,NEAR OCEAN --117.2,32.79,16.0,2079.0,394.0,746.0,383.0,5.0958,300000.0,NEAR OCEAN --117.2,32.8,33.0,2573.0,436.0,1084.0,443.0,4.2417,294100.0,NEAR OCEAN --117.21,32.8,34.0,1398.0,222.0,532.0,244.0,3.7102,289600.0,NEAR OCEAN --117.19,32.8,16.0,2593.0,794.0,1235.0,684.0,3.1304,166300.0,NEAR OCEAN --117.2,32.8,36.0,4018.0,1067.0,1620.0,842.0,2.3599,168400.0,NEAR OCEAN --117.19,32.79,36.0,1514.0,258.0,665.0,278.0,3.8571,235100.0,NEAR OCEAN --117.19,32.79,35.0,1788.0,378.0,777.0,374.0,3.3713,238400.0,NEAR OCEAN --117.2,32.79,31.0,3417.0,533.0,1245.0,532.0,4.7788,276000.0,NEAR OCEAN --117.2,32.79,29.0,1213.0,,654.0,246.0,4.5987,255600.0,NEAR OCEAN --117.2,32.79,34.0,757.0,212.0,409.0,222.0,3.2312,192200.0,NEAR OCEAN --117.19,32.78,34.0,4108.0,664.0,1659.0,644.0,4.4097,252000.0,NEAR OCEAN --117.2,32.78,38.0,2662.0,498.0,1132.0,496.0,4.0057,241600.0,NEAR OCEAN --117.19,32.77,30.0,2747.0,640.0,3185.0,657.0,3.765,238000.0,NEAR OCEAN --117.19,32.77,16.0,3273.0,670.0,1305.0,671.0,4.1368,151000.0,NEAR OCEAN --117.19,32.77,9.0,634.0,152.0,248.0,133.0,3.8571,143800.0,NEAR OCEAN --117.19,32.77,14.0,3575.0,992.0,1645.0,839.0,2.4397,140600.0,NEAR OCEAN --117.2,32.77,30.0,156.0,45.0,77.0,40.0,3.2679,137500.0,NEAR OCEAN --117.2,32.77,31.0,1952.0,471.0,936.0,462.0,2.8621,196900.0,NEAR OCEAN --117.15,32.81,34.0,1629.0,318.0,900.0,282.0,3.1458,178300.0,NEAR OCEAN --117.15,32.8,41.0,1413.0,261.0,1070.0,259.0,2.3578,166700.0,NEAR OCEAN --117.14,32.8,41.0,2423.0,469.0,1813.0,466.0,2.1157,156900.0,NEAR OCEAN --117.14,32.8,33.0,2670.0,435.0,1256.0,431.0,3.9417,179800.0,NEAR OCEAN --117.14,32.8,35.0,1267.0,212.0,710.0,204.0,2.5368,169600.0,NEAR OCEAN --117.14,32.79,35.0,3578.0,582.0,1568.0,553.0,4.7813,188600.0,NEAR OCEAN --117.15,32.78,25.0,1577.0,266.0,611.0,284.0,5.25,205100.0,NEAR OCEAN --117.14,32.79,31.0,984.0,161.0,422.0,158.0,5.282,183000.0,NEAR OCEAN --117.13,32.81,19.0,2157.0,554.0,1349.0,535.0,2.7652,177400.0,NEAR OCEAN --117.14,32.81,34.0,1748.0,294.0,800.0,294.0,4.4886,179100.0,NEAR OCEAN --117.13,32.8,15.0,1606.0,375.0,784.0,342.0,3.7237,108300.0,NEAR OCEAN --117.13,32.8,33.0,2731.0,456.0,1263.0,445.0,4.5568,175300.0,NEAR OCEAN --117.12,32.8,29.0,2863.0,534.0,1392.0,522.0,3.8719,174200.0,NEAR OCEAN --117.13,32.81,26.0,2119.0,444.0,1202.0,440.0,3.2308,166500.0,NEAR OCEAN --117.12,32.8,31.0,1727.0,342.0,879.0,345.0,3.8125,166300.0,NEAR OCEAN --117.13,32.8,35.0,2129.0,382.0,1044.0,350.0,3.9732,174900.0,NEAR OCEAN --117.13,32.79,35.0,1458.0,262.0,723.0,257.0,4.2098,174100.0,NEAR OCEAN --117.13,32.79,35.0,1362.0,243.0,698.0,255.0,3.6458,173800.0,NEAR OCEAN --117.12,32.78,4.0,2782.0,817.0,1309.0,787.0,4.2621,124200.0,NEAR OCEAN --117.15,32.77,16.0,2056.0,631.0,847.0,569.0,2.9576,92200.0,NEAR OCEAN --117.09,32.81,7.0,6100.0,1185.0,2710.0,1040.0,5.5673,288200.0,NEAR OCEAN --117.11,32.82,16.0,3980.0,682.0,3174.0,647.0,2.6607,175000.0,NEAR OCEAN --117.11,32.82,17.0,1787.0,330.0,1341.0,314.0,2.875,112500.0,NEAR OCEAN --117.11,32.81,15.0,3428.0,491.0,2303.0,486.0,2.5953,67500.0,NEAR OCEAN --117.11,32.8,17.0,3890.0,586.0,2791.0,595.0,3.2197,67500.0,NEAR OCEAN --117.09,32.8,15.0,666.0,152.0,247.0,164.0,2.15,131300.0,NEAR OCEAN --117.11,32.84,16.0,4608.0,629.0,2020.0,636.0,6.04,243000.0,<1H OCEAN --117.11,32.82,16.0,4241.0,892.0,1771.0,864.0,4.375,166500.0,NEAR OCEAN --117.1,32.83,16.0,1049.0,154.0,467.0,160.0,6.2047,248100.0,<1H OCEAN --117.1,32.83,16.0,4214.0,744.0,1820.0,699.0,4.3783,179500.0,<1H OCEAN --117.09,32.83,15.0,4138.0,636.0,2001.0,677.0,4.8419,264000.0,<1H OCEAN --117.08,32.82,16.0,1787.0,236.0,770.0,228.0,7.1298,278600.0,<1H OCEAN --117.08,32.82,10.0,5177.0,856.0,2190.0,816.0,5.9734,271700.0,<1H OCEAN --117.08,32.83,7.0,13703.0,2352.0,4446.0,1856.0,6.4335,260600.0,<1H OCEAN --117.04,32.83,8.0,2205.0,348.0,777.0,341.0,6.0266,177400.0,<1H OCEAN --117.07,32.91,5.0,2234.0,256.0,894.0,253.0,10.3354,477600.0,<1H OCEAN --117.04,32.9,6.0,6525.0,826.0,3146.0,806.0,9.2858,436100.0,<1H OCEAN --117.08,32.8,25.0,2963.0,552.0,1162.0,556.0,3.625,184500.0,NEAR OCEAN --117.09,32.79,20.0,2183.0,534.0,999.0,496.0,2.8631,169700.0,NEAR OCEAN --117.09,32.8,36.0,2163.0,367.0,915.0,360.0,4.7188,174100.0,NEAR OCEAN --117.08,32.8,32.0,1587.0,268.0,635.0,249.0,3.375,178100.0,NEAR OCEAN --117.11,32.79,16.0,2574.0,771.0,1129.0,721.0,3.3849,96900.0,NEAR OCEAN --117.11,32.79,16.0,1791.0,518.0,1006.0,491.0,3.5179,129300.0,NEAR OCEAN --117.11,32.78,16.0,2470.0,830.0,1170.0,724.0,3.5562,73500.0,NEAR OCEAN --117.11,32.78,16.0,2220.0,512.0,930.0,527.0,3.6528,133200.0,NEAR OCEAN --117.09,32.79,36.0,1529.0,266.0,683.0,260.0,4.0982,171200.0,NEAR OCEAN --117.09,32.79,36.0,1936.0,345.0,861.0,343.0,3.8333,170000.0,NEAR OCEAN --117.09,32.79,31.0,2019.0,417.0,872.0,386.0,3.1964,177700.0,NEAR OCEAN --117.09,32.78,28.0,1708.0,393.0,816.0,393.0,2.9881,165300.0,NEAR OCEAN --117.07,32.8,31.0,2550.0,395.0,1017.0,405.0,5.1488,181000.0,<1H OCEAN --117.07,32.8,36.0,2028.0,349.0,820.0,352.0,3.9828,168900.0,<1H OCEAN --117.07,32.79,36.0,3583.0,642.0,1711.0,602.0,3.9745,170800.0,NEAR OCEAN --117.07,32.8,23.0,2698.0,410.0,1094.0,411.0,5.1782,195100.0,<1H OCEAN --117.07,32.81,15.0,2000.0,402.0,778.0,369.0,4.3594,224200.0,<1H OCEAN --117.06,32.81,17.0,3939.0,550.0,1694.0,553.0,6.7927,234700.0,<1H OCEAN --117.05,32.81,17.0,1885.0,292.0,771.0,301.0,5.6402,228600.0,<1H OCEAN --117.05,32.8,17.0,1475.0,308.0,549.0,293.0,3.7167,180400.0,<1H OCEAN --117.06,32.8,17.0,2247.0,340.0,973.0,318.0,5.5,222000.0,<1H OCEAN --117.07,32.79,25.0,2489.0,314.0,911.0,309.0,7.8336,277600.0,NEAR OCEAN --117.07,32.78,26.0,3725.0,623.0,1516.0,627.0,4.7143,268300.0,NEAR OCEAN --117.08,32.78,21.0,2919.0,496.0,984.0,443.0,4.625,222800.0,NEAR OCEAN --117.04,32.79,23.0,2491.0,350.0,863.0,348.0,6.7196,306800.0,<1H OCEAN --117.04,32.8,25.0,2504.0,345.0,1067.0,350.0,5.7416,243400.0,<1H OCEAN --117.05,32.8,16.0,1561.0,378.0,574.0,350.0,3.0035,94600.0,<1H OCEAN --117.05,32.8,25.0,1905.0,250.0,865.0,253.0,6.4797,249000.0,<1H OCEAN --117.05,32.8,23.0,3309.0,401.0,1116.0,386.0,7.916,330600.0,<1H OCEAN --117.06,32.79,17.0,2524.0,332.0,771.0,317.0,8.7604,331800.0,<1H OCEAN --117.06,32.79,21.0,3787.0,492.0,1246.0,457.0,9.6023,391300.0,<1H OCEAN --117.06,32.78,31.0,2485.0,436.0,942.0,448.0,4.8,220800.0,NEAR OCEAN --117.02,32.8,27.0,2369.0,370.0,927.0,374.0,4.1162,177200.0,<1H OCEAN --117.03,32.79,26.0,3859.0,513.0,1469.0,538.0,5.8683,220500.0,<1H OCEAN --117.03,32.8,19.0,3866.0,775.0,1554.0,703.0,4.3281,220000.0,<1H OCEAN --117.04,32.8,11.0,1802.0,440.0,630.0,428.0,2.0337,146700.0,<1H OCEAN --117.01,32.8,17.0,1042.0,210.0,650.0,215.0,3.1,84200.0,<1H OCEAN --117.01,32.8,17.0,1558.0,479.0,803.0,431.0,2.6934,160200.0,<1H OCEAN --117.01,32.8,20.0,2705.0,545.0,1198.0,497.0,3.7159,168900.0,<1H OCEAN --117.01,32.79,33.0,4015.0,663.0,1864.0,664.0,4.3152,159300.0,<1H OCEAN --117.02,32.8,29.0,1232.0,243.0,665.0,247.0,3.65,168900.0,<1H OCEAN --117.02,32.8,31.0,2692.0,445.0,1129.0,450.0,4.4583,170000.0,<1H OCEAN --117.01,32.81,26.0,4499.0,645.0,1866.0,626.0,5.516,185100.0,<1H OCEAN --117.02,32.81,27.0,1950.0,317.0,950.0,320.0,4.0656,164000.0,<1H OCEAN --117.02,32.81,26.0,1998.0,301.0,874.0,305.0,5.4544,180900.0,<1H OCEAN --117.01,32.81,21.0,4203.0,618.0,1620.0,600.0,5.3441,193500.0,<1H OCEAN --117.02,32.81,14.0,3173.0,599.0,1451.0,585.0,3.7292,182200.0,<1H OCEAN --117.03,32.82,16.0,1765.0,289.0,743.0,280.0,4.9744,209700.0,<1H OCEAN --117.04,32.81,12.0,2880.0,406.0,1381.0,418.0,6.5412,254200.0,<1H OCEAN --117.05,32.82,16.0,4046.0,731.0,1684.0,701.0,4.2312,197000.0,<1H OCEAN --117.05,32.59,26.0,1919.0,345.0,1326.0,341.0,4.2679,131900.0,NEAR OCEAN --117.06,32.59,13.0,3920.0,775.0,2814.0,760.0,4.0616,148800.0,NEAR OCEAN --117.05,32.58,22.0,2101.0,399.0,1551.0,371.0,4.1518,136900.0,NEAR OCEAN --117.06,32.58,17.0,2724.0,567.0,2213.0,554.0,3.8529,147700.0,NEAR OCEAN --117.06,32.58,13.0,3435.0,708.0,1761.0,699.0,3.4792,107600.0,NEAR OCEAN --117.06,32.58,11.0,2879.0,679.0,2098.0,673.0,3.5125,142400.0,NEAR OCEAN --117.06,32.57,16.0,1269.0,282.0,1609.0,298.0,2.6985,156500.0,NEAR OCEAN --117.04,32.58,14.0,2355.0,406.0,1883.0,401.0,5.0311,152100.0,NEAR OCEAN --117.04,32.58,20.0,2029.0,357.0,1497.0,353.0,4.0089,132100.0,NEAR OCEAN --117.05,32.58,23.0,1918.0,339.0,1392.0,340.0,4.087,134800.0,NEAR OCEAN --117.05,32.58,25.0,2185.0,370.0,1558.0,369.0,5.3072,132700.0,NEAR OCEAN --117.05,32.57,22.0,2857.0,516.0,2412.0,496.0,4.7337,127600.0,NEAR OCEAN --117.06,32.57,25.0,1268.0,282.0,991.0,299.0,3.0284,123600.0,NEAR OCEAN --117.06,32.57,17.0,2252.0,378.0,1776.0,365.0,4.6364,141100.0,NEAR OCEAN --117.05,32.57,13.0,2880.0,576.0,2450.0,567.0,3.1696,138000.0,NEAR OCEAN --117.05,32.56,18.0,1215.0,320.0,1195.0,349.0,1.9875,114900.0,NEAR OCEAN --117.05,32.56,17.0,985.0,233.0,811.0,223.0,2.875,134500.0,NEAR OCEAN --117.06,32.57,18.0,1384.0,311.0,1429.0,287.0,1.3362,95000.0,NEAR OCEAN --116.97,32.56,23.0,1262.0,294.0,5176.0,275.0,2.5625,153300.0,NEAR OCEAN --117.04,32.55,15.0,2206.0,648.0,2511.0,648.0,1.6348,93200.0,NEAR OCEAN --117.05,32.56,22.0,2172.0,563.0,2049.0,524.0,2.0159,139300.0,NEAR OCEAN --117.06,32.56,17.0,2803.0,683.0,2768.0,676.0,1.7958,140400.0,NEAR OCEAN --117.06,32.56,5.0,2706.0,925.0,3148.0,855.0,1.7301,125000.0,NEAR OCEAN --117.06,32.55,5.0,3223.0,940.0,3284.0,854.0,1.4384,108800.0,NEAR OCEAN --117.04,32.54,7.0,938.0,297.0,1187.0,282.0,1.2667,67500.0,NEAR OCEAN --117.1,32.59,21.0,2350.0,667.0,1621.0,613.0,2.0734,87500.0,NEAR OCEAN --117.1,32.58,23.0,1662.0,377.0,1318.0,386.0,2.3,120800.0,NEAR OCEAN --117.1,32.58,17.0,2046.0,559.0,1585.0,530.0,2.25,132800.0,NEAR OCEAN --117.1,32.58,33.0,393.0,76.0,330.0,80.0,4.1029,122700.0,NEAR OCEAN --117.1,32.58,29.0,1061.0,202.0,759.0,206.0,4.8646,136800.0,NEAR OCEAN --117.1,32.57,26.0,2343.0,371.0,1221.0,372.0,4.3601,144900.0,NEAR OCEAN --117.1,32.56,16.0,2687.0,501.0,1502.0,480.0,3.75,146800.0,NEAR OCEAN --117.07,32.57,17.0,2961.0,634.0,1911.0,615.0,2.5859,131400.0,NEAR OCEAN --117.08,32.57,18.0,2203.0,544.0,1943.0,497.0,2.25,103200.0,NEAR OCEAN --117.07,32.57,14.0,1527.0,357.0,1224.0,363.0,2.7361,93600.0,NEAR OCEAN --117.07,32.56,9.0,3648.0,895.0,3293.0,840.0,3.0992,142600.0,NEAR OCEAN --117.08,32.59,8.0,2888.0,662.0,2441.0,683.0,2.7048,153000.0,NEAR OCEAN --117.08,32.58,15.0,1462.0,274.0,1002.0,271.0,3.9698,142700.0,NEAR OCEAN --117.08,32.58,22.0,2128.0,477.0,1420.0,450.0,3.2687,131000.0,NEAR OCEAN --117.07,32.58,25.0,1607.0,280.0,899.0,260.0,3.8194,134400.0,NEAR OCEAN --117.09,32.58,12.0,2565.0,567.0,1785.0,545.0,3.0273,135300.0,NEAR OCEAN --117.08,32.57,9.0,6298.0,1512.0,4451.0,1456.0,2.569,88300.0,NEAR OCEAN --117.09,32.57,23.0,1817.0,323.0,1371.0,327.0,3.6736,139500.0,NEAR OCEAN --117.09,32.57,10.0,2198.0,368.0,1645.0,350.0,4.5547,160700.0,NEAR OCEAN --117.09,32.57,17.0,444.0,83.0,357.0,87.0,5.1478,138900.0,NEAR OCEAN --117.09,32.56,8.0,864.0,156.0,626.0,172.0,4.8984,151500.0,NEAR OCEAN --117.09,32.55,8.0,6533.0,1217.0,4797.0,1177.0,3.9583,144400.0,NEAR OCEAN --117.12,32.58,34.0,2003.0,466.0,1226.0,443.0,3.0613,136700.0,NEAR OCEAN --117.12,32.57,21.0,1738.0,295.0,983.0,298.0,4.8274,174100.0,NEAR OCEAN --117.13,32.58,27.0,2511.0,615.0,1427.0,576.0,3.1645,156000.0,NEAR OCEAN --117.13,32.58,32.0,1870.0,437.0,1142.0,426.0,2.3194,159400.0,NEAR OCEAN --117.13,32.58,27.0,1417.0,373.0,814.0,348.0,2.3603,195300.0,NEAR OCEAN --117.12,32.56,20.0,2524.0,682.0,1819.0,560.0,2.9286,257700.0,NEAR OCEAN --117.11,32.58,28.0,1869.0,407.0,1074.0,344.0,2.5988,135600.0,NEAR OCEAN --117.11,32.57,32.0,2723.0,586.0,1702.0,562.0,3.3371,140500.0,NEAR OCEAN --117.12,32.57,35.0,1450.0,256.0,930.0,286.0,2.6715,133300.0,NEAR OCEAN --117.12,32.58,26.0,1360.0,309.0,869.0,328.0,3.0217,131600.0,NEAR OCEAN --117.11,32.58,21.0,2894.0,685.0,2109.0,712.0,2.2755,125000.0,NEAR OCEAN --117.1,32.58,27.0,2616.0,591.0,1889.0,577.0,2.3824,127600.0,NEAR OCEAN --117.1,32.57,14.0,5058.0,1299.0,3662.0,1193.0,2.3253,133700.0,NEAR OCEAN --117.11,32.59,17.0,2020.0,534.0,1529.0,500.0,2.1773,143200.0,NEAR OCEAN --117.11,32.58,12.0,1086.0,294.0,870.0,290.0,2.4213,132500.0,NEAR OCEAN --117.11,32.59,18.0,2329.0,580.0,1538.0,567.0,2.1179,153100.0,NEAR OCEAN --117.12,32.59,28.0,2793.0,706.0,1825.0,676.0,2.6724,144500.0,NEAR OCEAN --117.16,32.58,36.0,1940.0,399.0,1076.0,382.0,3.3906,147800.0,NEAR OCEAN --117.13,32.63,10.0,7374.0,1157.0,1900.0,794.0,8.7991,478500.0,NEAR OCEAN --117.17,32.63,26.0,1617.0,279.0,2745.0,250.0,3.5357,67500.0,NEAR OCEAN --117.17,32.68,16.0,5895.0,1424.0,873.0,522.0,7.3669,187500.0,NEAR OCEAN --117.18,32.68,29.0,1539.0,344.0,556.0,289.0,3.25,500001.0,NEAR OCEAN --117.18,32.69,52.0,1837.0,313.0,668.0,300.0,5.1009,500001.0,NEAR OCEAN --117.18,32.69,37.0,3112.0,716.0,1304.0,674.0,3.2121,320800.0,NEAR OCEAN --117.18,32.69,44.0,2819.0,514.0,1258.0,503.0,4.4777,452800.0,NEAR OCEAN --117.17,32.69,40.0,2236.0,331.0,767.0,316.0,5.3177,500001.0,NEAR OCEAN --117.18,32.69,48.0,2764.0,491.0,978.0,449.0,5.1249,432400.0,NEAR OCEAN --117.17,32.69,19.0,2802.0,802.0,1159.0,597.0,4.7891,334600.0,NEAR OCEAN --117.17,32.69,45.0,3168.0,598.0,1341.0,562.0,4.5189,422200.0,NEAR OCEAN --117.17,32.7,33.0,4084.0,897.0,1804.0,833.0,4.0488,409700.0,NEAR OCEAN --117.18,32.7,44.0,2655.0,514.0,1102.0,489.0,3.6759,368800.0,NEAR OCEAN --117.18,32.7,42.0,1691.0,286.0,761.0,281.0,5.1386,404500.0,NEAR OCEAN --117.19,32.69,35.0,2921.0,438.0,1042.0,415.0,6.3612,482700.0,NEAR OCEAN --117.11,32.68,36.0,26.0,14.0,58.0,23.0,1.9107,125000.0,NEAR OCEAN --117.11,32.67,43.0,515.0,146.0,445.0,140.0,1.6094,93000.0,NEAR OCEAN --117.11,32.67,46.0,928.0,236.0,790.0,235.0,1.6806,92500.0,NEAR OCEAN --117.11,32.67,52.0,204.0,74.0,248.0,57.0,1.7961,47500.0,NEAR OCEAN --117.12,32.66,52.0,16.0,4.0,8.0,3.0,1.125,60000.0,NEAR OCEAN --117.11,32.67,52.0,280.0,71.0,217.0,71.0,1.4844,83300.0,NEAR OCEAN --117.11,32.66,52.0,25.0,5.0,14.0,9.0,1.625,118800.0,NEAR OCEAN --117.09,32.67,37.0,1157.0,332.0,983.0,306.0,2.0972,117000.0,NEAR OCEAN --117.09,32.66,38.0,833.0,206.0,570.0,182.0,1.8333,127100.0,NEAR OCEAN --117.09,32.66,37.0,1232.0,330.0,1086.0,330.0,1.6389,114300.0,NEAR OCEAN --117.1,32.66,27.0,1782.0,560.0,1785.0,560.0,2.1542,106300.0,NEAR OCEAN --117.1,32.67,26.0,2629.0,763.0,2721.0,767.0,2.0982,109100.0,NEAR OCEAN --117.1,32.67,22.0,1690.0,541.0,1669.0,494.0,2.0213,110600.0,NEAR OCEAN --117.09,32.68,30.0,2662.0,653.0,1997.0,605.0,2.8089,120600.0,NEAR OCEAN --117.09,32.67,31.0,2051.0,549.0,1581.0,538.0,2.052,108900.0,NEAR OCEAN --117.1,32.67,15.0,1635.0,553.0,1347.0,597.0,1.2745,92900.0,NEAR OCEAN --117.1,32.68,20.0,1012.0,269.0,837.0,240.0,2.0488,88900.0,NEAR OCEAN --117.1,32.69,29.0,4174.0,1195.0,3675.0,1124.0,1.8112,103600.0,NEAR OCEAN --117.1,32.68,42.0,2013.0,568.0,1920.0,557.0,2.0724,107600.0,NEAR OCEAN --117.1,32.68,47.0,771.0,224.0,637.0,212.0,2.0156,90300.0,NEAR OCEAN --117.1,32.68,49.0,1412.0,350.0,1200.0,332.0,2.0398,93600.0,NEAR OCEAN --117.1,32.68,47.0,1044.0,274.0,1003.0,280.0,1.7802,97800.0,NEAR OCEAN --117.1,32.68,45.0,1183.0,289.0,900.0,266.0,2.4943,99600.0,NEAR OCEAN --117.07,32.69,29.0,1429.0,293.0,1091.0,317.0,3.4609,118000.0,NEAR OCEAN --117.08,32.69,31.0,2558.0,487.0,1938.0,492.0,3.4875,117000.0,NEAR OCEAN --117.08,32.69,36.0,1571.0,284.0,1001.0,268.0,3.6875,111400.0,NEAR OCEAN --117.09,32.69,34.0,1469.0,267.0,1031.0,267.0,3.4583,112700.0,NEAR OCEAN --117.09,32.68,29.0,1792.0,449.0,1650.0,396.0,2.2201,100000.0,NEAR OCEAN --117.07,32.69,28.0,1485.0,275.0,820.0,283.0,4.069,153300.0,NEAR OCEAN --117.08,32.68,26.0,3071.0,615.0,2156.0,568.0,2.9318,112400.0,NEAR OCEAN --117.08,32.68,19.0,3635.0,1078.0,3127.0,1098.0,1.324,122600.0,NEAR OCEAN --117.09,32.68,20.0,2569.0,737.0,2341.0,705.0,2.0114,104900.0,NEAR OCEAN --117.07,32.67,28.0,2758.0,623.0,2179.0,631.0,2.3814,112300.0,NEAR OCEAN --117.08,32.67,31.0,3008.0,764.0,2088.0,757.0,2.5662,118200.0,NEAR OCEAN --117.09,32.66,46.0,844.0,147.0,423.0,161.0,3.375,136300.0,NEAR OCEAN --117.08,32.66,43.0,1004.0,236.0,839.0,235.0,2.81,103400.0,NEAR OCEAN --117.07,32.67,35.0,3200.0,725.0,1723.0,610.0,1.8977,95600.0,NEAR OCEAN --117.07,32.65,12.0,4131.0,891.0,2272.0,840.0,3.4701,204900.0,NEAR OCEAN --117.07,32.64,32.0,5135.0,1025.0,2152.0,944.0,4.1325,172800.0,NEAR OCEAN --117.08,32.64,43.0,1005.0,230.0,548.0,252.0,1.8672,145800.0,NEAR OCEAN --117.08,32.65,17.0,2633.0,712.0,1487.0,694.0,2.5392,147000.0,NEAR OCEAN --117.08,32.64,38.0,917.0,256.0,494.0,233.0,1.9241,150000.0,NEAR OCEAN --117.08,32.64,11.0,1651.0,533.0,947.0,515.0,1.6806,141700.0,NEAR OCEAN --117.09,32.65,20.0,1445.0,323.0,573.0,334.0,2.619,145800.0,NEAR OCEAN --117.09,32.65,25.0,3509.0,985.0,2359.0,899.0,2.6296,150000.0,NEAR OCEAN --117.08,32.65,28.0,2296.0,603.0,1277.0,550.0,2.3562,123800.0,NEAR OCEAN --117.09,32.64,38.0,2095.0,536.0,1240.0,550.0,2.7218,145900.0,NEAR OCEAN --117.09,32.64,30.0,3171.0,862.0,2126.0,800.0,2.507,142700.0,NEAR OCEAN --117.1,32.64,29.0,1578.0,460.0,1236.0,461.0,2.5658,134700.0,NEAR OCEAN --117.09,32.64,20.0,1999.0,651.0,1302.0,592.0,1.6321,57500.0,NEAR OCEAN --117.09,32.64,19.0,2571.0,791.0,1205.0,783.0,1.62,131300.0,NEAR OCEAN --117.09,32.63,27.0,2920.0,770.0,1935.0,746.0,2.4148,67500.0,NEAR OCEAN --117.11,32.64,23.0,1619.0,447.0,1025.0,415.0,1.858,67500.0,NEAR OCEAN --117.11,32.62,27.0,1846.0,509.0,1078.0,482.0,2.1719,131500.0,NEAR OCEAN --117.09,32.62,37.0,1538.0,298.0,867.0,285.0,3.0729,128700.0,NEAR OCEAN --117.09,32.62,37.0,1925.0,428.0,1344.0,426.0,2.4866,129700.0,NEAR OCEAN --117.09,32.62,34.0,1576.0,364.0,1153.0,381.0,2.1955,129700.0,NEAR OCEAN --117.08,32.63,33.0,2891.0,793.0,1607.0,754.0,2.1281,139800.0,NEAR OCEAN --117.09,32.64,24.0,3613.0,973.0,2002.0,931.0,1.947,147500.0,NEAR OCEAN --117.09,32.63,33.0,620.0,161.0,420.0,164.0,1.8417,150000.0,NEAR OCEAN --117.07,32.64,38.0,1486.0,269.0,745.0,295.0,4.6477,150400.0,NEAR OCEAN --117.07,32.63,37.0,2303.0,379.0,1026.0,357.0,3.455,156900.0,NEAR OCEAN --117.07,32.64,30.0,2873.0,774.0,1593.0,731.0,2.24,129500.0,NEAR OCEAN --117.06,32.63,37.0,1326.0,234.0,612.0,240.0,4.125,160200.0,NEAR OCEAN --117.06,32.62,36.0,786.0,125.0,408.0,138.0,3.9167,189700.0,NEAR OCEAN --117.07,32.63,40.0,1706.0,322.0,796.0,303.0,3.5583,154900.0,NEAR OCEAN --117.07,32.63,37.0,2372.0,444.0,1056.0,419.0,3.7583,145500.0,NEAR OCEAN --117.08,32.63,30.0,2504.0,559.0,1827.0,490.0,2.6146,159400.0,NEAR OCEAN --117.08,32.63,28.0,2080.0,427.0,1266.0,434.0,2.2788,146300.0,NEAR OCEAN --117.08,32.62,28.0,2468.0,506.0,1353.0,522.0,3.0771,158600.0,NEAR OCEAN --117.08,32.62,36.0,1674.0,309.0,818.0,307.0,3.4773,150400.0,NEAR OCEAN --117.09,32.61,23.0,1157.0,309.0,640.0,313.0,2.1548,118800.0,NEAR OCEAN --117.09,32.61,21.0,1945.0,430.0,1335.0,419.0,3.6467,113000.0,NEAR OCEAN --117.08,32.62,16.0,5192.0,1381.0,3261.0,1321.0,2.2685,151900.0,NEAR OCEAN --117.08,32.61,27.0,2264.0,525.0,1485.0,468.0,3.3514,149100.0,NEAR OCEAN --117.07,32.62,19.0,5016.0,1173.0,2750.0,1081.0,2.7838,155900.0,NEAR OCEAN --117.06,32.61,34.0,4325.0,1015.0,2609.0,979.0,2.8489,128300.0,NEAR OCEAN --117.07,32.61,22.0,5016.0,1331.0,3222.0,1196.0,2.1441,135500.0,NEAR OCEAN --117.07,32.6,18.0,2602.0,551.0,1042.0,550.0,1.9267,67500.0,NEAR OCEAN --117.07,32.59,21.0,1779.0,466.0,1327.0,488.0,1.6007,96200.0,NEAR OCEAN --117.08,32.59,30.0,144.0,52.0,220.0,48.0,2.3929,134400.0,NEAR OCEAN --117.08,32.6,24.0,1901.0,490.0,1334.0,476.0,2.2544,121900.0,NEAR OCEAN --117.07,32.61,10.0,1686.0,414.0,1000.0,391.0,2.1765,128400.0,NEAR OCEAN --117.06,32.61,24.0,4369.0,1353.0,3123.0,1247.0,2.0571,152300.0,NEAR OCEAN --117.06,32.61,23.0,1630.0,362.0,1267.0,418.0,2.5625,131100.0,NEAR OCEAN --117.07,32.6,13.0,1607.0,435.0,983.0,400.0,2.2903,106300.0,NEAR OCEAN --117.06,32.6,25.0,1075.0,238.0,434.0,234.0,1.7472,94600.0,NEAR OCEAN --117.06,32.6,24.0,1088.0,268.0,1095.0,246.0,2.4191,107300.0,NEAR OCEAN --117.06,32.6,33.0,905.0,205.0,989.0,222.0,2.7014,108200.0,NEAR OCEAN --117.05,32.63,31.0,4911.0,861.0,2334.0,843.0,4.1958,160100.0,NEAR OCEAN --117.05,32.62,34.0,3928.0,686.0,2315.0,681.0,4.2851,144500.0,NEAR OCEAN --117.04,32.62,26.0,3620.0,607.0,2000.0,593.0,4.9962,156000.0,NEAR OCEAN --117.05,32.61,31.0,4033.0,715.0,2585.0,715.0,3.5096,139900.0,NEAR OCEAN --117.05,32.61,21.0,6034.0,1205.0,3795.0,1146.0,3.2633,129700.0,NEAR OCEAN --117.05,32.61,26.0,1563.0,286.0,1145.0,313.0,3.8615,139300.0,NEAR OCEAN --117.04,32.6,20.0,8052.0,1461.0,5094.0,1430.0,4.2241,139800.0,NEAR OCEAN --117.04,32.6,18.0,4747.0,846.0,3002.0,872.0,3.9076,152900.0,NEAR OCEAN --117.05,32.59,16.0,4683.0,929.0,3073.0,865.0,3.0495,98300.0,NEAR OCEAN --117.04,32.63,26.0,2074.0,356.0,1228.0,335.0,4.1154,160200.0,NEAR OCEAN --117.04,32.62,27.0,1710.0,282.0,1089.0,297.0,4.6793,151900.0,NEAR OCEAN --117.03,32.61,23.0,1553.0,216.0,778.0,229.0,5.1538,171300.0,NEAR OCEAN --117.03,32.61,22.0,1028.0,148.0,523.0,152.0,6.0086,166900.0,NEAR OCEAN --117.03,32.6,26.0,1335.0,224.0,742.0,215.0,5.152,143400.0,NEAR OCEAN --117.02,32.59,19.0,1902.0,335.0,1102.0,313.0,3.0365,98100.0,NEAR OCEAN --116.98,32.62,6.0,7995.0,1458.0,4771.0,1376.0,4.7068,184300.0,NEAR OCEAN --117.06,32.64,30.0,4494.0,667.0,1883.0,680.0,5.766,186100.0,NEAR OCEAN --117.06,32.63,29.0,4168.0,742.0,2096.0,713.0,4.2204,169800.0,NEAR OCEAN --116.98,32.68,22.0,2346.0,380.0,1217.0,382.0,5.5248,156300.0,NEAR OCEAN --117.01,32.67,17.0,2319.0,348.0,1125.0,337.0,5.551,266900.0,NEAR OCEAN --117.0,32.67,16.0,2238.0,307.0,1002.0,303.0,6.6143,264100.0,NEAR OCEAN --117.02,32.67,20.0,1505.0,184.0,635.0,182.0,6.5772,245200.0,NEAR OCEAN --117.01,32.66,11.0,9992.0,1368.0,4495.0,1316.0,6.9664,293900.0,NEAR OCEAN --117.02,32.66,19.0,771.0,,376.0,108.0,6.6272,273600.0,NEAR OCEAN --116.97,32.65,4.0,16450.0,2833.0,7985.0,2683.0,5.6631,233400.0,NEAR OCEAN --116.99,32.64,15.0,4331.0,699.0,2046.0,627.0,3.9519,193500.0,NEAR OCEAN --117.04,32.65,8.0,8806.0,1401.0,3159.0,1059.0,4.2155,247800.0,NEAR OCEAN --117.03,32.65,14.0,1111.0,142.0,472.0,145.0,7.6344,290500.0,NEAR OCEAN --117.0,32.64,11.0,3098.0,490.0,1391.0,484.0,4.9792,170400.0,NEAR OCEAN --117.01,32.63,7.0,6483.0,976.0,3269.0,1005.0,5.7358,221600.0,NEAR OCEAN --117.04,32.64,5.0,2329.0,542.0,1213.0,514.0,4.0298,225600.0,NEAR OCEAN --117.02,32.64,5.0,260.0,41.0,157.0,42.0,6.5151,281700.0,NEAR OCEAN --117.03,32.63,13.0,2087.0,313.0,1165.0,330.0,5.7789,227700.0,NEAR OCEAN --117.03,32.63,14.0,2796.0,476.0,1466.0,464.0,5.2489,213700.0,NEAR OCEAN --117.04,32.63,26.0,2756.0,422.0,1166.0,398.0,5.1354,181600.0,NEAR OCEAN --116.99,32.74,17.0,3101.0,547.0,1410.0,486.0,3.1771,189900.0,<1H OCEAN --116.98,32.74,17.0,3943.0,843.0,1995.0,766.0,2.6944,158300.0,<1H OCEAN --116.98,32.74,24.0,977.0,147.0,454.0,169.0,4.9286,173700.0,<1H OCEAN --116.98,32.74,16.0,3361.0,537.0,1754.0,578.0,5.1098,162300.0,<1H OCEAN --116.98,32.72,15.0,4209.0,680.0,1914.0,641.0,4.5135,158300.0,<1H OCEAN --116.98,32.73,16.0,952.0,143.0,530.0,143.0,5.0864,175300.0,<1H OCEAN --116.98,32.72,4.0,1078.0,158.0,571.0,184.0,4.6667,223300.0,<1H OCEAN --116.97,32.74,14.0,7410.0,1344.0,3597.0,1274.0,4.2192,176100.0,<1H OCEAN --116.95,32.74,7.0,2722.0,578.0,1429.0,574.0,3.9583,141700.0,<1H OCEAN --116.96,32.71,18.0,2413.0,533.0,1129.0,551.0,2.4567,155000.0,<1H OCEAN --116.95,32.73,17.0,1635.0,272.0,960.0,279.0,5.2671,157100.0,<1H OCEAN --116.97,32.76,26.0,2460.0,313.0,838.0,299.0,5.9878,270700.0,<1H OCEAN --116.98,32.75,25.0,4137.0,662.0,1905.0,630.0,4.375,214000.0,<1H OCEAN --116.97,32.75,28.0,3519.0,583.0,1720.0,590.0,4.7973,186900.0,<1H OCEAN --116.98,32.75,18.0,1519.0,369.0,802.0,347.0,2.9886,170800.0,<1H OCEAN --116.97,32.76,33.0,3071.0,466.0,1348.0,513.0,6.1768,228900.0,<1H OCEAN --116.95,32.76,13.0,5543.0,857.0,2074.0,737.0,4.9528,266200.0,<1H OCEAN --116.94,32.75,4.0,14934.0,2479.0,6945.0,2418.0,5.1221,229700.0,<1H OCEAN --116.92,32.76,9.0,1859.0,307.0,947.0,304.0,5.9202,181300.0,<1H OCEAN --116.92,32.76,7.0,1659.0,237.0,862.0,242.0,5.2741,249400.0,<1H OCEAN --116.91,32.75,5.0,8710.0,1614.0,4372.0,1527.0,4.7813,240900.0,<1H OCEAN --117.0,32.76,31.0,1989.0,280.0,805.0,301.0,6.5645,189100.0,<1H OCEAN --116.99,32.76,21.0,3833.0,595.0,1645.0,589.0,4.625,273500.0,<1H OCEAN --116.99,32.74,18.0,3341.0,611.0,1952.0,602.0,3.9844,215300.0,<1H OCEAN --117.0,32.74,17.0,2357.0,599.0,1423.0,510.0,1.8856,118800.0,<1H OCEAN --116.99,32.73,30.0,1856.0,339.0,1103.0,379.0,4.0357,153800.0,<1H OCEAN --117.01,32.75,26.0,4038.0,706.0,2065.0,687.0,3.9545,178100.0,<1H OCEAN --117.01,32.75,34.0,2105.0,340.0,973.0,357.0,4.3088,152500.0,<1H OCEAN --117.01,32.74,31.0,3473.0,,2098.0,677.0,2.6973,135200.0,<1H OCEAN --117.01,32.73,22.0,2526.0,530.0,1556.0,529.0,2.8646,120800.0,NEAR OCEAN --117.0,32.73,17.0,6050.0,1143.0,3424.0,1131.0,3.7647,127600.0,<1H OCEAN --117.0,32.72,10.0,3817.0,943.0,2352.0,875.0,2.1362,143200.0,NEAR OCEAN --117.01,32.72,12.0,2914.0,734.0,2104.0,703.0,2.3068,132300.0,NEAR OCEAN --116.99,32.7,15.0,3660.0,622.0,2629.0,612.0,4.0444,150100.0,NEAR OCEAN --117.0,32.7,23.0,2785.0,468.0,1456.0,449.0,4.3714,131000.0,NEAR OCEAN --116.98,32.71,18.0,2355.0,444.0,1277.0,433.0,3.4551,121400.0,<1H OCEAN --116.99,32.71,21.0,3049.0,582.0,2355.0,585.0,3.8904,113800.0,NEAR OCEAN --117.0,32.71,22.0,2263.0,441.0,1395.0,416.0,3.725,123500.0,NEAR OCEAN --117.01,32.71,20.0,3506.0,692.0,1977.0,668.0,2.981,129100.0,NEAR OCEAN --116.99,32.72,15.0,825.0,130.0,334.0,131.0,4.0391,169500.0,<1H OCEAN --116.99,32.72,14.0,1771.0,301.0,1046.0,284.0,4.775,143300.0,<1H OCEAN --116.99,32.72,13.0,1330.0,216.0,719.0,215.0,3.8295,149600.0,<1H OCEAN --116.99,32.72,11.0,1112.0,164.0,441.0,174.0,4.7679,169500.0,<1H OCEAN --117.02,32.74,30.0,4205.0,772.0,2012.0,734.0,3.5,144700.0,NEAR OCEAN --117.03,32.73,34.0,2061.0,,1169.0,400.0,3.5096,142000.0,NEAR OCEAN --117.03,32.73,32.0,1750.0,333.0,997.0,335.0,3.4784,154400.0,NEAR OCEAN --117.03,32.74,37.0,821.0,150.0,404.0,135.0,3.0125,130400.0,NEAR OCEAN --117.02,32.73,22.0,5201.0,865.0,3280.0,817.0,4.7952,141400.0,NEAR OCEAN --117.02,32.72,36.0,2030.0,369.0,1142.0,357.0,3.7763,126900.0,NEAR OCEAN --117.03,32.73,38.0,3174.0,606.0,1557.0,619.0,3.5861,123600.0,NEAR OCEAN --117.03,32.72,38.0,886.0,176.0,505.0,188.0,3.5938,125400.0,NEAR OCEAN --117.03,32.72,37.0,2192.0,455.0,1515.0,446.0,3.0588,120600.0,NEAR OCEAN --117.04,32.72,24.0,5474.0,955.0,3020.0,904.0,4.0813,137000.0,NEAR OCEAN --117.04,32.73,36.0,2084.0,400.0,1097.0,398.0,3.2717,130700.0,NEAR OCEAN --117.04,32.73,25.0,1375.0,267.0,1032.0,278.0,3.5492,125400.0,NEAR OCEAN --117.05,32.72,35.0,3669.0,617.0,1694.0,585.0,3.9485,133900.0,NEAR OCEAN --117.05,32.73,27.0,3184.0,588.0,1763.0,571.0,3.5529,133900.0,NEAR OCEAN --117.03,32.74,35.0,1878.0,454.0,991.0,409.0,2.4345,129700.0,NEAR OCEAN --117.04,32.74,33.0,3880.0,770.0,2288.0,805.0,3.6848,140700.0,NEAR OCEAN --117.02,32.74,12.0,3301.0,963.0,2000.0,879.0,1.8594,119200.0,NEAR OCEAN --117.04,32.74,5.0,2878.0,785.0,1727.0,758.0,1.7179,132000.0,NEAR OCEAN --117.04,32.75,36.0,2297.0,418.0,1070.0,392.0,3.5192,144000.0,NEAR OCEAN --117.05,32.75,29.0,2767.0,612.0,1437.0,587.0,2.8306,142900.0,NEAR OCEAN --117.05,32.75,43.0,1718.0,344.0,826.0,336.0,2.7014,133700.0,NEAR OCEAN --117.03,32.77,34.0,1796.0,428.0,918.0,424.0,2.875,161200.0,<1H OCEAN --117.02,32.76,15.0,1204.0,326.0,543.0,326.0,1.0278,154200.0,<1H OCEAN --117.02,32.76,40.0,2523.0,488.0,976.0,470.0,3.11,185700.0,<1H OCEAN --117.02,32.75,33.0,3296.0,537.0,1345.0,556.0,5.2835,217100.0,<1H OCEAN --117.03,32.75,24.0,7879.0,1655.0,3898.0,1534.0,3.0897,187300.0,NEAR OCEAN --117.04,32.77,26.0,4263.0,1037.0,2199.0,1010.0,2.734,148900.0,<1H OCEAN --117.04,32.76,43.0,3171.0,665.0,1534.0,625.0,3.141,141400.0,NEAR OCEAN --117.05,32.76,37.0,4879.0,906.0,2076.0,871.0,3.6625,154800.0,NEAR OCEAN --117.04,32.76,37.0,2979.0,557.0,1285.0,564.0,3.7368,152200.0,NEAR OCEAN --117.04,32.77,16.0,7963.0,1881.0,3769.0,1804.0,2.9624,144700.0,<1H OCEAN --117.03,32.77,19.0,4819.0,1492.0,2572.0,1336.0,2.3393,118200.0,<1H OCEAN --117.05,32.78,37.0,1184.0,178.0,529.0,192.0,4.7941,161700.0,<1H OCEAN --117.03,32.78,17.0,5481.0,1618.0,2957.0,1537.0,2.5707,171300.0,<1H OCEAN --117.02,32.78,33.0,3481.0,708.0,1726.0,719.0,3.3675,158200.0,<1H OCEAN --117.03,32.79,31.0,2366.0,383.0,1077.0,387.0,4.2992,174400.0,<1H OCEAN --117.03,32.79,17.0,7352.0,1699.0,3331.0,1634.0,2.7006,166300.0,<1H OCEAN --117.0,32.77,30.0,1802.0,401.0,776.0,386.0,2.8125,173500.0,<1H OCEAN --117.01,32.76,22.0,3626.0,824.0,1800.0,769.0,2.8594,189600.0,<1H OCEAN --117.01,32.76,34.0,3415.0,608.0,1464.0,593.0,4.0549,223700.0,<1H OCEAN --117.01,32.77,24.0,2311.0,536.0,1005.0,525.0,2.9,185200.0,<1H OCEAN --117.01,32.77,34.0,3330.0,723.0,1592.0,656.0,2.6678,164200.0,<1H OCEAN --117.01,32.77,43.0,841.0,192.0,496.0,207.0,3.0179,149300.0,<1H OCEAN --117.01,32.79,31.0,3776.0,815.0,1886.0,799.0,3.4421,155300.0,<1H OCEAN --117.01,32.78,20.0,2616.0,597.0,1532.0,579.0,2.9896,235600.0,<1H OCEAN --117.02,32.78,31.0,2567.0,,1198.0,499.0,3.4659,163000.0,<1H OCEAN --117.02,32.79,36.0,2211.0,384.0,868.0,329.0,4.0491,147900.0,<1H OCEAN --116.99,32.79,33.0,2420.0,393.0,1003.0,397.0,4.0658,165100.0,<1H OCEAN --116.99,32.79,26.0,3623.0,703.0,1609.0,669.0,3.744,165800.0,<1H OCEAN --116.99,32.78,29.0,1114.0,163.0,385.0,154.0,5.4333,222800.0,<1H OCEAN --117.0,32.79,31.0,3256.0,726.0,1595.0,706.0,3.4773,155800.0,<1H OCEAN --116.99,32.77,35.0,2306.0,334.0,828.0,310.0,6.1103,301600.0,<1H OCEAN --116.98,32.77,29.0,3558.0,447.0,1097.0,445.0,8.093,379600.0,<1H OCEAN --117.0,32.76,31.0,2545.0,373.0,956.0,342.0,4.3977,226800.0,<1H OCEAN --117.0,32.77,35.0,2114.0,317.0,881.0,320.0,5.5,241400.0,<1H OCEAN --116.95,32.78,33.0,2432.0,443.0,1147.0,427.0,3.3906,138100.0,<1H OCEAN --116.96,32.78,26.0,2807.0,630.0,1785.0,580.0,2.1638,132800.0,<1H OCEAN --116.97,32.78,26.0,8902.0,1413.0,3941.0,1387.0,4.7943,226900.0,<1H OCEAN --116.92,32.78,21.0,4192.0,752.0,2101.0,710.0,4.4306,159100.0,<1H OCEAN --116.91,32.78,15.0,4058.0,511.0,1580.0,473.0,7.5,316400.0,<1H OCEAN --116.92,32.77,16.0,2770.0,406.0,1269.0,429.0,6.6783,275000.0,<1H OCEAN --116.9,32.77,8.0,3600.0,492.0,1421.0,482.0,6.2609,307100.0,<1H OCEAN --116.95,32.78,20.0,3425.0,448.0,1489.0,443.0,6.2552,296400.0,<1H OCEAN --116.95,32.77,25.0,3308.0,421.0,1201.0,414.0,6.3191,303400.0,<1H OCEAN --116.94,32.78,17.0,13559.0,2656.0,6990.0,2533.0,3.434,193200.0,<1H OCEAN --116.85,32.83,17.0,4234.0,770.0,2191.0,725.0,3.6445,197600.0,<1H OCEAN --116.88,32.81,35.0,2926.0,562.0,1590.0,506.0,4.2014,143200.0,<1H OCEAN --116.86,32.8,19.0,1747.0,291.0,848.0,290.0,4.875,187200.0,<1H OCEAN --116.83,32.83,6.0,3123.0,495.0,1513.0,480.0,5.4288,167800.0,<1H OCEAN --116.83,32.81,18.0,2367.0,402.0,1021.0,395.0,4.8125,210500.0,<1H OCEAN --116.92,32.79,24.0,4055.0,742.0,2123.0,744.0,4.5224,142000.0,<1H OCEAN --116.93,32.79,23.0,5759.0,1258.0,3108.0,1202.0,3.0927,140600.0,<1H OCEAN --116.91,32.8,32.0,1943.0,287.0,1081.0,292.0,5.6846,208800.0,<1H OCEAN --116.9,32.79,21.0,3770.0,491.0,1410.0,446.0,6.7685,294700.0,<1H OCEAN --116.94,32.8,21.0,7906.0,2292.0,4868.0,2117.0,1.8937,109800.0,<1H OCEAN --116.93,32.79,19.0,3354.0,,1948.0,682.0,3.0192,142300.0,<1H OCEAN --116.95,32.79,19.0,11391.0,3093.0,7178.0,2905.0,2.0326,123200.0,<1H OCEAN --116.96,32.8,16.0,3920.0,1094.0,2612.0,1023.0,1.3291,120800.0,<1H OCEAN --116.96,32.79,19.0,3008.0,693.0,2341.0,689.0,2.6087,123800.0,<1H OCEAN --116.96,32.79,35.0,1081.0,266.0,691.0,259.0,2.6324,133700.0,<1H OCEAN --116.96,32.8,24.0,2493.0,693.0,1420.0,643.0,1.8357,104200.0,<1H OCEAN --116.97,32.79,19.0,4108.0,1101.0,2971.0,1006.0,1.9893,112500.0,<1H OCEAN --116.96,32.79,17.0,5236.0,1325.0,3308.0,1233.0,2.3221,138800.0,<1H OCEAN --116.97,32.78,37.0,1255.0,238.0,671.0,278.0,3.7019,138600.0,<1H OCEAN --116.97,32.78,35.0,1113.0,236.0,681.0,246.0,2.9784,136400.0,<1H OCEAN --116.97,32.79,32.0,1255.0,338.0,782.0,302.0,2.6635,113600.0,<1H OCEAN --116.98,32.79,32.0,3756.0,662.0,1611.0,598.0,3.8667,189700.0,<1H OCEAN --116.98,32.8,28.0,5721.0,1029.0,2672.0,1054.0,3.963,164400.0,<1H OCEAN --116.99,32.8,34.0,3657.0,538.0,1513.0,562.0,5.2907,195800.0,<1H OCEAN --117.0,32.8,33.0,1816.0,325.0,768.0,316.0,4.5662,150300.0,<1H OCEAN --117.0,32.8,29.0,2045.0,398.0,912.0,368.0,3.0189,144100.0,<1H OCEAN --116.99,32.81,25.0,4436.0,758.0,1997.0,738.0,4.2386,201000.0,<1H OCEAN --116.99,32.81,18.0,10968.0,1521.0,4439.0,1501.0,6.2787,250000.0,<1H OCEAN --116.97,32.83,23.0,149.0,32.0,101.0,34.0,2.6458,112500.0,<1H OCEAN --116.97,32.81,19.0,1573.0,471.0,844.0,414.0,2.1422,125000.0,<1H OCEAN --116.97,32.8,15.0,3927.0,1018.0,2204.0,977.0,2.4367,111400.0,<1H OCEAN --116.94,32.81,22.0,4266.0,1010.0,2766.0,985.0,2.8175,135200.0,<1H OCEAN --116.94,32.8,28.0,3042.0,729.0,1964.0,703.0,2.4141,137500.0,<1H OCEAN --116.96,32.8,19.0,4574.0,1152.0,3045.0,1057.0,2.065,124100.0,<1H OCEAN --116.96,32.8,25.0,3421.0,803.0,1681.0,742.0,3.369,134400.0,<1H OCEAN --116.92,32.82,34.0,1765.0,284.0,772.0,282.0,5.0118,165300.0,<1H OCEAN --116.92,32.81,23.0,2668.0,528.0,1510.0,524.0,3.3669,158900.0,<1H OCEAN --116.93,32.82,26.0,4129.0,714.0,1820.0,718.0,4.2586,171000.0,<1H OCEAN --116.91,32.81,22.0,4331.0,637.0,1952.0,654.0,5.4834,232000.0,<1H OCEAN --116.92,32.8,33.0,1518.0,268.0,857.0,272.0,3.5586,160400.0,<1H OCEAN --116.92,32.81,17.0,1312.0,394.0,836.0,337.0,1.6686,112500.0,<1H OCEAN --116.93,32.8,19.0,1867.0,538.0,1219.0,468.0,2.0685,130000.0,<1H OCEAN --116.93,32.81,18.0,2447.0,466.0,1573.0,472.0,2.6429,125400.0,<1H OCEAN --116.95,32.82,19.0,5308.0,1058.0,2852.0,1092.0,2.9161,135700.0,<1H OCEAN --116.95,32.82,12.0,5535.0,1434.0,3112.0,1262.0,2.5949,108300.0,<1H OCEAN --116.95,32.81,31.0,1277.0,293.0,698.0,237.0,3.1106,147700.0,<1H OCEAN --116.96,32.81,8.0,2378.0,638.0,1410.0,623.0,2.9097,152500.0,<1H OCEAN --116.94,32.82,35.0,1737.0,285.0,826.0,294.0,3.2411,159200.0,<1H OCEAN --116.94,32.81,8.0,2517.0,632.0,1686.0,613.0,2.136,143500.0,<1H OCEAN --116.95,32.81,15.0,2619.0,599.0,1513.0,537.0,2.543,100000.0,<1H OCEAN --116.95,32.82,18.0,3038.0,592.0,1904.0,595.0,3.8024,144900.0,<1H OCEAN --116.97,32.83,17.0,6659.0,1402.0,3183.0,1378.0,2.949,117300.0,<1H OCEAN --116.99,32.83,20.0,6696.0,1326.0,3687.0,1291.0,3.1979,154600.0,<1H OCEAN --116.99,32.85,32.0,5211.0,949.0,3025.0,948.0,4.0931,134200.0,<1H OCEAN --116.98,32.85,12.0,3570.0,713.0,3321.0,666.0,4.0882,134500.0,<1H OCEAN --117.01,32.83,17.0,15401.0,3280.0,7302.0,3176.0,3.3067,121900.0,<1H OCEAN --117.01,32.84,23.0,1951.0,395.0,901.0,378.0,3.1023,143300.0,<1H OCEAN --117.02,32.84,17.0,4013.0,673.0,2263.0,661.0,5.131,148300.0,<1H OCEAN --116.96,32.85,11.0,9724.0,1796.0,5247.0,1777.0,4.1716,166100.0,<1H OCEAN --116.96,32.86,14.0,3064.0,496.0,1681.0,503.0,4.4347,160300.0,<1H OCEAN --116.96,32.87,17.0,4713.0,740.0,2531.0,723.0,4.8286,158500.0,<1H OCEAN --116.98,32.88,12.0,7320.0,1279.0,4048.0,1249.0,4.3952,151700.0,<1H OCEAN --116.98,32.86,19.0,2121.0,341.0,1236.0,353.0,4.7717,153200.0,<1H OCEAN --116.98,32.86,16.0,7718.0,1423.0,4383.0,1394.0,4.0693,146400.0,<1H OCEAN --117.0,32.87,18.0,11544.0,1979.0,6296.0,1923.0,4.4904,150400.0,<1H OCEAN --117.01,32.85,23.0,2592.0,414.0,1401.0,431.0,5.4903,151400.0,<1H OCEAN --117.0,32.85,24.0,1888.0,319.0,950.0,319.0,5.282,140800.0,<1H OCEAN --116.95,32.83,14.0,12517.0,2506.0,6389.0,2333.0,3.3081,168700.0,<1H OCEAN --116.95,32.84,31.0,1307.0,,752.0,231.0,3.4286,129400.0,<1H OCEAN --116.93,32.85,15.0,3273.0,895.0,1872.0,842.0,2.5388,119000.0,<1H OCEAN --116.93,32.85,5.0,4116.0,990.0,2770.0,905.0,3.1142,150000.0,<1H OCEAN --116.94,32.85,31.0,1293.0,232.0,599.0,228.0,4.7578,161000.0,<1H OCEAN --116.94,32.84,32.0,1607.0,253.0,778.0,262.0,4.5278,166300.0,<1H OCEAN --116.94,32.83,38.0,1701.0,317.0,872.0,304.0,3.7831,147800.0,<1H OCEAN --116.88,32.86,9.0,3049.0,471.0,1527.0,515.0,5.0733,196600.0,<1H OCEAN --116.86,32.87,17.0,5799.0,921.0,2630.0,843.0,5.0524,285400.0,<1H OCEAN --116.84,32.86,16.0,2502.0,532.0,1211.0,494.0,3.2516,202100.0,<1H OCEAN --116.89,32.85,16.0,1743.0,333.0,652.0,322.0,2.8906,158300.0,<1H OCEAN --116.91,32.87,14.0,3048.0,597.0,1690.0,576.0,4.3818,147100.0,<1H OCEAN --116.91,32.86,10.0,3699.0,838.0,2310.0,759.0,2.5365,139500.0,<1H OCEAN --116.91,32.86,15.0,3153.0,628.0,1633.0,527.0,3.6898,131000.0,<1H OCEAN --116.92,32.86,11.0,2204.0,518.0,1472.0,497.0,2.3693,127000.0,<1H OCEAN --116.93,32.83,19.0,3038.0,529.0,1463.0,509.0,3.944,172500.0,<1H OCEAN --116.93,32.83,21.0,1283.0,278.0,684.0,289.0,2.3203,163500.0,<1H OCEAN --116.92,32.82,17.0,2492.0,494.0,1278.0,439.0,2.8875,155700.0,<1H OCEAN --116.92,32.85,23.0,1378.0,269.0,767.0,266.0,4.0625,145000.0,<1H OCEAN --116.92,32.84,16.0,4675.0,834.0,2188.0,817.0,4.6674,178000.0,<1H OCEAN --116.91,32.83,16.0,5203.0,,2515.0,862.0,4.105,174400.0,<1H OCEAN --116.92,32.82,16.0,2784.0,468.0,1458.0,465.0,4.0048,184600.0,<1H OCEAN --116.91,32.85,21.0,4152.0,703.0,2255.0,697.0,4.5096,159500.0,<1H OCEAN --116.89,32.85,15.0,3560.0,593.0,1757.0,574.0,5.1185,185300.0,<1H OCEAN --116.9,32.84,18.0,3612.0,737.0,1864.0,713.0,2.7069,153800.0,<1H OCEAN --116.89,32.82,18.0,2515.0,443.0,1442.0,449.0,5.0201,154400.0,<1H OCEAN --116.9,32.84,18.0,4215.0,810.0,2104.0,773.0,4.0873,146900.0,<1H OCEAN --116.91,32.82,14.0,1978.0,424.0,1085.0,387.0,3.8073,170100.0,<1H OCEAN --116.96,32.9,16.0,3047.0,495.0,1507.0,499.0,5.3008,186500.0,<1H OCEAN --116.94,32.89,24.0,2541.0,381.0,1078.0,372.0,5.2542,227800.0,<1H OCEAN --116.94,32.87,24.0,2824.0,441.0,1480.0,471.0,5.2614,177200.0,<1H OCEAN --116.93,32.87,17.0,3722.0,670.0,1561.0,604.0,3.6027,211900.0,<1H OCEAN --116.9,32.9,19.0,3090.0,552.0,1621.0,520.0,4.0806,189200.0,<1H OCEAN --116.84,32.92,20.0,1066.0,219.0,536.0,173.0,3.1607,119300.0,<1H OCEAN --117.05,33.01,19.0,3558.0,588.0,1439.0,578.0,4.625,211100.0,<1H OCEAN --117.05,33.01,17.0,3430.0,425.0,1468.0,433.0,10.6186,429300.0,<1H OCEAN --117.04,33.01,28.0,922.0,107.0,314.0,97.0,8.4721,342300.0,<1H OCEAN --117.03,33.0,6.0,6139.0,793.0,2693.0,770.0,7.7569,387400.0,<1H OCEAN --117.04,32.99,6.0,9518.0,1418.0,4413.0,1275.0,6.6012,314900.0,<1H OCEAN --117.04,32.98,16.0,1332.0,196.0,640.0,193.0,6.0226,192900.0,<1H OCEAN --117.06,32.99,16.0,1306.0,196.0,713.0,222.0,6.2683,180700.0,<1H OCEAN --117.05,32.97,17.0,9911.0,1436.0,4763.0,1414.0,5.5882,194300.0,<1H OCEAN --117.05,32.96,18.0,3593.0,661.0,1992.0,626.0,4.8295,165800.0,<1H OCEAN --117.04,32.97,13.0,6711.0,1256.0,3683.0,1220.0,4.5746,175700.0,<1H OCEAN --117.03,32.97,16.0,3936.0,694.0,1935.0,659.0,4.5625,231200.0,<1H OCEAN --117.03,32.96,16.0,3424.0,698.0,1940.0,645.0,4.121,182100.0,<1H OCEAN --116.99,32.96,17.0,5509.0,866.0,2748.0,817.0,4.8854,181300.0,<1H OCEAN --117.02,32.95,25.0,1909.0,334.0,1043.0,322.0,3.7784,160100.0,<1H OCEAN --117.03,32.95,19.0,4500.0,815.0,2456.0,782.0,4.5032,168900.0,<1H OCEAN --117.05,32.95,17.0,3039.0,555.0,1297.0,552.0,3.9531,178600.0,<1H OCEAN --117.05,32.95,17.0,4814.0,1091.0,3013.0,1078.0,3.2369,167800.0,<1H OCEAN --117.06,33.02,24.0,830.0,190.0,279.0,196.0,1.9176,121100.0,<1H OCEAN --117.06,33.01,24.0,2618.0,485.0,726.0,443.0,3.5192,159100.0,<1H OCEAN --117.07,33.01,25.0,2120.0,381.0,588.0,359.0,3.1187,169400.0,<1H OCEAN --117.07,33.02,17.0,2863.0,665.0,715.0,467.0,2.6048,148200.0,<1H OCEAN --117.06,33.04,17.0,1785.0,255.0,667.0,277.0,5.7382,278000.0,<1H OCEAN --117.06,33.03,23.0,2023.0,309.0,678.0,340.0,7.0913,265400.0,<1H OCEAN --117.07,33.03,14.0,6665.0,1231.0,2026.0,1001.0,5.09,268500.0,<1H OCEAN --117.07,33.03,15.0,1095.0,158.0,361.0,176.0,6.8099,328200.0,<1H OCEAN --117.08,33.03,10.0,2296.0,450.0,818.0,405.0,4.3424,160600.0,<1H OCEAN --117.07,33.04,4.0,2271.0,578.0,926.0,391.0,3.6437,210100.0,<1H OCEAN --117.08,33.03,15.0,3023.0,623.0,1283.0,559.0,3.3724,137900.0,<1H OCEAN --117.08,33.03,17.0,987.0,142.0,463.0,152.0,5.8747,229300.0,<1H OCEAN --117.08,33.03,18.0,1339.0,284.0,761.0,290.0,5.3074,137200.0,<1H OCEAN --117.09,33.03,17.0,2786.0,396.0,1228.0,396.0,6.4211,220700.0,<1H OCEAN --117.08,33.04,10.0,2577.0,347.0,1193.0,365.0,6.53,264100.0,<1H OCEAN --117.15,33.02,4.0,15029.0,2279.0,5613.0,1696.0,7.2731,450400.0,NEAR OCEAN --117.1,32.97,17.0,3167.0,861.0,2098.0,828.0,2.4459,85800.0,<1H OCEAN --117.1,32.96,7.0,3619.0,770.0,1134.0,482.0,4.1279,167600.0,<1H OCEAN --117.05,33.05,6.0,7916.0,1293.0,2741.0,1204.0,5.6436,278600.0,<1H OCEAN --117.05,33.04,12.0,1840.0,254.0,580.0,234.0,6.7769,400000.0,<1H OCEAN --117.05,33.03,14.0,5180.0,1051.0,1639.0,991.0,4.5,222200.0,<1H OCEAN --117.05,33.03,16.0,87.0,20.0,32.0,21.0,4.3571,144600.0,<1H OCEAN --117.06,33.02,17.0,2635.0,389.0,994.0,359.0,5.8966,261500.0,<1H OCEAN --117.05,33.02,18.0,917.0,121.0,388.0,131.0,6.3517,260100.0,<1H OCEAN --117.01,33.04,13.0,4595.0,567.0,1643.0,544.0,7.7684,362300.0,<1H OCEAN --117.04,33.03,16.0,2852.0,435.0,1083.0,448.0,6.3761,296200.0,<1H OCEAN --117.01,32.99,8.0,3372.0,430.0,1536.0,448.0,8.4284,378300.0,<1H OCEAN --116.99,33.01,11.0,1412.0,185.0,529.0,166.0,7.7517,500001.0,<1H OCEAN --117.09,32.91,9.0,2012.0,316.0,802.0,289.0,6.5706,255700.0,<1H OCEAN --117.09,32.91,16.0,2005.0,266.0,827.0,270.0,7.0546,282200.0,<1H OCEAN --117.09,32.9,16.0,1989.0,290.0,814.0,291.0,6.2715,255100.0,<1H OCEAN --117.1,32.9,16.0,2994.0,445.0,1047.0,437.0,5.149,184300.0,<1H OCEAN --117.11,32.9,16.0,2043.0,388.0,705.0,352.0,4.4766,161500.0,<1H OCEAN --117.11,32.91,15.0,1840.0,235.0,855.0,241.0,7.5992,310600.0,<1H OCEAN --117.08,32.91,16.0,1653.0,228.0,690.0,224.0,6.5853,248400.0,<1H OCEAN --117.08,32.93,5.0,14944.0,2490.0,6600.0,2407.0,6.0857,308300.0,<1H OCEAN --117.08,32.91,9.0,1547.0,218.0,683.0,231.0,7.5604,327900.0,<1H OCEAN --117.07,33.01,5.0,5870.0,977.0,1917.0,842.0,5.1998,294100.0,<1H OCEAN --117.06,33.01,9.0,2470.0,417.0,904.0,427.0,4.4219,209200.0,<1H OCEAN --117.07,33.0,4.0,6242.0,1258.0,2211.0,1116.0,4.25,281600.0,<1H OCEAN --117.07,33.0,4.0,9153.0,1866.0,3775.0,1698.0,4.955,241500.0,<1H OCEAN --117.08,33.01,5.0,5659.0,931.0,2565.0,902.0,6.1949,238700.0,<1H OCEAN --117.09,32.99,16.0,2175.0,327.0,1037.0,326.0,5.1909,201400.0,<1H OCEAN --117.09,32.99,18.0,3215.0,588.0,1618.0,509.0,4.6028,216800.0,<1H OCEAN --117.09,32.98,23.0,1125.0,273.0,687.0,308.0,2.3182,268800.0,<1H OCEAN --117.12,32.96,16.0,3050.0,559.0,1444.0,512.0,5.2463,156300.0,<1H OCEAN --117.11,32.97,9.0,1531.0,242.0,850.0,240.0,6.0862,263600.0,<1H OCEAN --117.1,33.0,5.0,15502.0,2613.0,7417.0,2358.0,5.9094,261100.0,<1H OCEAN --117.11,32.95,11.0,4694.0,824.0,2223.0,783.0,4.9485,231800.0,<1H OCEAN --117.12,32.95,8.0,3670.0,536.0,1723.0,592.0,6.3542,218100.0,<1H OCEAN --117.12,32.96,15.0,2869.0,405.0,1526.0,402.0,6.0175,238300.0,<1H OCEAN --117.12,32.95,4.0,9018.0,1572.0,4438.0,1498.0,4.988,263700.0,<1H OCEAN --117.08,32.97,3.0,17466.0,3336.0,7644.0,2895.0,5.4584,246500.0,<1H OCEAN --117.06,32.97,17.0,4754.0,877.0,2412.0,832.0,4.3548,192300.0,<1H OCEAN --117.25,33.06,6.0,9859.0,1448.0,4194.0,1401.0,6.439,296200.0,NEAR OCEAN --117.25,33.05,16.0,2794.0,476.0,1387.0,442.0,4.3286,213400.0,NEAR OCEAN --117.26,33.05,14.0,2323.0,373.0,1057.0,372.0,6.2513,240900.0,NEAR OCEAN --117.26,33.06,11.0,2660.0,352.0,1226.0,366.0,7.6832,319800.0,NEAR OCEAN --117.24,33.05,15.0,3029.0,555.0,1559.0,546.0,5.3129,169200.0,NEAR OCEAN --117.24,33.05,11.0,5827.0,882.0,2588.0,842.0,6.4027,344200.0,NEAR OCEAN --117.2,33.07,5.0,10394.0,1617.0,4496.0,1553.0,5.9289,411300.0,NEAR OCEAN --117.16,33.06,16.0,1988.0,279.0,770.0,252.0,5.8661,404500.0,NEAR OCEAN --117.21,33.03,20.0,3370.0,433.0,1020.0,408.0,11.0911,500001.0,NEAR OCEAN --117.18,33.02,15.0,3540.0,453.0,1364.0,425.0,13.6623,500001.0,NEAR OCEAN --117.21,33.02,26.0,3194.0,454.0,1032.0,406.0,10.156,500001.0,NEAR OCEAN --117.23,33.01,18.0,3961.0,511.0,1541.0,470.0,11.1118,500001.0,NEAR OCEAN --117.26,32.97,25.0,2582.0,495.0,1088.0,471.0,6.4651,500001.0,NEAR OCEAN --117.26,32.96,36.0,1721.0,264.0,710.0,282.0,10.1768,500001.0,NEAR OCEAN --117.26,32.95,34.0,1651.0,273.0,650.0,271.0,5.6582,500001.0,NEAR OCEAN --117.26,32.95,22.0,5484.0,1227.0,1947.0,1012.0,4.4375,500001.0,NEAR OCEAN --117.3,32.96,30.0,1226.0,205.0,380.0,151.0,4.2875,500001.0,NEAR OCEAN --117.25,33.01,16.0,3892.0,520.0,1454.0,524.0,7.7317,396000.0,NEAR OCEAN --117.24,33.0,16.0,2512.0,356.0,795.0,353.0,7.5975,369100.0,NEAR OCEAN --117.23,32.99,17.0,2718.0,326.0,1011.0,319.0,15.0001,500001.0,NEAR OCEAN --117.25,32.99,10.0,4926.0,749.0,1478.0,634.0,7.472,439900.0,NEAR OCEAN --117.25,33.0,14.0,2518.0,458.0,931.0,414.0,5.8393,485300.0,NEAR OCEAN --117.26,33.0,31.0,2695.0,491.0,1059.0,451.0,4.7841,393500.0,NEAR OCEAN --117.27,33.0,36.0,2426.0,454.0,1085.0,420.0,5.1523,387800.0,NEAR OCEAN --117.31,33.0,30.0,1631.0,310.0,665.0,297.0,6.8443,492500.0,NEAR OCEAN --117.26,32.99,16.0,2127.0,512.0,1532.0,499.0,2.7348,231300.0,NEAR OCEAN --117.27,32.99,21.0,3318.0,578.0,1273.0,538.0,5.5922,382100.0,NEAR OCEAN --117.26,32.98,12.0,3900.0,977.0,1690.0,892.0,4.125,226900.0,NEAR OCEAN --117.31,32.98,17.0,2789.0,648.0,849.0,345.0,4.1012,244700.0,NEAR OCEAN --117.27,32.98,17.0,1853.0,392.0,351.0,208.0,5.2742,230700.0,NEAR OCEAN --117.32,33.01,29.0,3584.0,712.0,1619.0,667.0,4.125,394400.0,NEAR OCEAN --117.28,33.02,21.0,2736.0,585.0,1251.0,576.0,4.2356,347700.0,NEAR OCEAN --117.27,33.02,13.0,5723.0,1242.0,2450.0,1140.0,4.7179,376700.0,NEAR OCEAN --117.26,33.04,18.0,2229.0,346.0,1088.0,352.0,6.3525,278300.0,NEAR OCEAN --117.26,33.04,16.0,3109.0,450.0,1433.0,453.0,6.6319,269600.0,NEAR OCEAN --117.24,33.04,13.0,3498.0,663.0,1412.0,618.0,3.212,147600.0,NEAR OCEAN --117.25,33.03,6.0,3416.0,493.0,1319.0,467.0,6.9326,324600.0,NEAR OCEAN --117.27,33.03,25.0,1787.0,311.0,1108.0,311.0,3.9826,215800.0,NEAR OCEAN --117.27,33.03,16.0,2240.0,443.0,1104.0,416.0,3.5313,148700.0,NEAR OCEAN --117.26,33.02,9.0,4632.0,759.0,1724.0,685.0,6.3712,369800.0,NEAR OCEAN --117.27,33.03,19.0,2899.0,499.0,1356.0,512.0,4.87,220900.0,NEAR OCEAN --117.27,33.02,21.0,2144.0,340.0,928.0,344.0,5.798,286100.0,NEAR OCEAN --117.29,33.05,28.0,1146.0,338.0,672.0,292.0,3.1667,300000.0,NEAR OCEAN --117.28,33.04,12.0,4459.0,928.0,2471.0,888.0,3.5179,252700.0,NEAR OCEAN --117.27,33.04,27.0,1839.0,392.0,1302.0,404.0,3.55,214600.0,NEAR OCEAN --117.29,33.04,30.0,2750.0,555.0,1281.0,520.0,4.7333,286900.0,NEAR OCEAN --117.33,33.03,31.0,1171.0,321.0,603.0,267.0,2.8611,314300.0,NEAR OCEAN --117.3,33.07,14.0,2670.0,426.0,1034.0,407.0,6.4247,295100.0,NEAR OCEAN --117.29,33.08,18.0,3225.0,515.0,1463.0,476.0,5.7787,346700.0,NEAR OCEAN --117.27,33.08,7.0,2949.0,447.0,1335.0,426.0,6.0922,342400.0,NEAR OCEAN --117.29,33.06,20.0,2110.0,335.0,1008.0,325.0,6.1509,338700.0,NEAR OCEAN --117.28,33.06,8.0,4172.0,1022.0,2585.0,941.0,4.0118,245800.0,NEAR OCEAN --117.27,33.06,7.0,3686.0,733.0,1612.0,672.0,3.197,367100.0,NEAR OCEAN --117.27,33.05,15.0,3333.0,808.0,1371.0,737.0,2.9083,122400.0,NEAR OCEAN --117.3,33.08,24.0,2628.0,527.0,1389.0,520.0,4.0,343200.0,NEAR OCEAN --117.34,33.06,17.0,2718.0,518.0,815.0,403.0,4.3182,357100.0,NEAR OCEAN --117.31,33.07,21.0,2035.0,534.0,948.0,467.0,3.2984,369400.0,NEAR OCEAN --117.3,33.07,16.0,3147.0,765.0,2165.0,690.0,3.5585,284800.0,NEAR OCEAN --117.3,33.06,24.0,2171.0,511.0,870.0,442.0,3.194,276300.0,NEAR OCEAN --117.3,33.06,31.0,2128.0,520.0,1049.0,485.0,4.027,290000.0,NEAR OCEAN --117.3,33.05,34.0,1797.0,458.0,775.0,391.0,3.2308,331300.0,NEAR OCEAN --117.33,33.17,11.0,10923.0,2041.0,4773.0,1858.0,4.0791,281300.0,NEAR OCEAN --117.34,33.16,31.0,2851.0,458.0,1286.0,467.0,4.5694,243700.0,NEAR OCEAN --117.33,33.16,29.0,3559.0,552.0,1533.0,545.0,4.0585,245500.0,NEAR OCEAN --117.32,33.15,15.0,13245.0,2212.0,5495.0,2060.0,5.4904,262100.0,NEAR OCEAN --117.32,33.12,25.0,2670.0,527.0,936.0,461.0,2.7717,354000.0,NEAR OCEAN --117.31,33.1,15.0,2392.0,446.0,747.0,421.0,3.5341,500001.0,NEAR OCEAN --117.29,33.13,4.0,617.0,105.0,224.0,105.0,3.9205,183000.0,NEAR OCEAN --117.31,33.11,7.0,7974.0,1703.0,2904.0,1550.0,4.1282,188100.0,NEAR OCEAN --117.29,33.12,4.0,1380.0,322.0,755.0,286.0,4.7961,168800.0,NEAR OCEAN --117.29,33.1,6.0,6091.0,1018.0,2064.0,957.0,5.1837,259800.0,NEAR OCEAN --117.28,33.1,13.0,2644.0,422.0,1197.0,399.0,6.5338,267900.0,NEAR OCEAN --117.35,33.17,16.0,4595.0,1341.0,2849.0,1197.0,2.478,185600.0,NEAR OCEAN --117.34,33.16,24.0,1006.0,277.0,610.0,246.0,2.25,187500.0,NEAR OCEAN --117.34,33.15,19.0,5710.0,1423.0,4163.0,1406.0,3.0306,178500.0,NEAR OCEAN --117.35,33.16,22.0,1331.0,305.0,580.0,193.0,3.975,500001.0,NEAR OCEAN --117.35,33.16,10.0,1684.0,515.0,902.0,449.0,3.7891,206300.0,NEAR OCEAN --117.34,33.15,17.0,4505.0,1140.0,2111.0,1062.0,3.3536,283300.0,NEAR OCEAN --117.36,33.18,26.0,5550.0,1153.0,2372.0,1058.0,2.5509,181800.0,NEAR OCEAN --117.36,33.18,39.0,1546.0,291.0,833.0,308.0,2.8893,185400.0,NEAR OCEAN --117.35,33.17,36.0,1977.0,423.0,812.0,387.0,3.625,198000.0,NEAR OCEAN --117.36,33.17,24.0,2046.0,442.0,812.0,367.0,2.3182,500001.0,NEAR OCEAN --117.37,33.18,19.0,1931.0,509.0,855.0,394.0,2.6979,266700.0,NEAR OCEAN --117.37,33.19,23.0,4104.0,1274.0,4729.0,1187.0,1.8214,173800.0,NEAR OCEAN --117.37,33.19,33.0,2205.0,453.0,1138.0,439.0,2.8819,208600.0,NEAR OCEAN --117.37,33.19,18.0,975.0,382.0,650.0,286.0,1.9562,192500.0,NEAR OCEAN --117.37,33.19,38.0,861.0,213.0,486.0,204.0,4.1875,185000.0,NEAR OCEAN --117.38,33.19,35.0,928.0,264.0,538.0,248.0,2.4583,197900.0,NEAR OCEAN --117.38,33.14,14.0,5039.0,1373.0,1298.0,696.0,3.209,313300.0,NEAR OCEAN --117.38,33.19,26.0,4123.0,1145.0,1703.0,895.0,1.9891,500000.0,NEAR OCEAN --117.38,33.2,17.0,1877.0,581.0,1288.0,426.0,1.9386,106300.0,NEAR OCEAN --117.37,33.2,19.0,928.0,317.0,845.0,319.0,1.6318,187500.0,NEAR OCEAN --117.38,33.19,17.0,353.0,112.0,359.0,118.0,1.5625,162500.0,NEAR OCEAN --117.38,33.2,26.0,1427.0,386.0,974.0,317.0,1.3903,184400.0,NEAR OCEAN --117.36,33.2,19.0,1926.0,557.0,1190.0,483.0,1.3269,166100.0,NEAR OCEAN --117.36,33.2,19.0,2129.0,562.0,1323.0,525.0,2.9539,169900.0,NEAR OCEAN --117.36,33.2,26.0,2447.0,482.0,1405.0,486.0,3.2917,150800.0,NEAR OCEAN --117.35,33.2,23.0,3297.0,728.0,1793.0,622.0,2.5754,169700.0,NEAR OCEAN --117.35,33.21,24.0,1586.0,262.0,912.0,298.0,4.25,150300.0,NEAR OCEAN --117.34,33.21,23.0,2062.0,376.0,1302.0,379.0,4.0109,145700.0,NEAR OCEAN --117.35,33.2,32.0,1251.0,220.0,700.0,232.0,3.9875,142900.0,NEAR OCEAN --117.34,33.21,12.0,5963.0,1372.0,3015.0,1124.0,2.7386,216100.0,NEAR OCEAN --117.35,33.19,28.0,2823.0,476.0,1189.0,433.0,5.1733,198100.0,NEAR OCEAN --117.34,33.19,23.0,3546.0,553.0,1533.0,518.0,5.276,224500.0,NEAR OCEAN --117.33,33.19,15.0,3672.0,845.0,1827.0,796.0,2.9716,173600.0,NEAR OCEAN --117.34,33.19,19.0,3575.0,525.0,1654.0,559.0,5.7409,274100.0,NEAR OCEAN --117.29,33.24,5.0,3109.0,634.0,1823.0,578.0,3.1875,153800.0,<1H OCEAN --117.3,33.23,13.0,3619.0,791.0,1759.0,806.0,2.765,98500.0,<1H OCEAN --117.32,33.23,24.0,2580.0,604.0,982.0,569.0,1.6402,169300.0,NEAR OCEAN --117.31,33.24,6.0,1580.0,288.0,792.0,265.0,4.0469,162400.0,<1H OCEAN --117.32,33.22,15.0,4784.0,1039.0,1810.0,986.0,2.4375,108900.0,NEAR OCEAN --117.33,33.22,21.0,2868.0,602.0,855.0,559.0,2.7846,91200.0,NEAR OCEAN --117.32,33.22,16.0,1057.0,232.0,316.0,221.0,2.7417,91700.0,NEAR OCEAN --117.33,33.21,17.0,1246.0,300.0,424.0,288.0,2.2882,85800.0,NEAR OCEAN --117.3,33.22,4.0,14960.0,2988.0,6666.0,2612.0,3.7568,184100.0,NEAR OCEAN --117.31,33.19,11.0,20944.0,3753.0,8738.0,3441.0,4.3762,215500.0,NEAR OCEAN --117.29,33.2,16.0,2150.0,461.0,1428.0,407.0,2.4754,157300.0,NEAR OCEAN --117.31,33.18,16.0,1835.0,430.0,599.0,399.0,2.0147,87700.0,NEAR OCEAN --117.29,33.19,18.0,6235.0,1233.0,4127.0,1162.0,3.0704,151600.0,NEAR OCEAN --117.28,33.2,20.0,4835.0,854.0,2983.0,834.0,4.3428,152100.0,NEAR OCEAN --117.37,33.22,35.0,2204.0,482.0,1435.0,462.0,3.676,125600.0,NEAR OCEAN --117.35,33.23,4.0,1837.0,287.0,934.0,277.0,3.8958,189800.0,NEAR OCEAN --117.35,33.21,18.0,2971.0,606.0,2051.0,493.0,2.675,117100.0,NEAR OCEAN --117.38,33.21,31.0,1502.0,367.0,1514.0,342.0,2.6442,103300.0,NEAR OCEAN --117.37,33.2,29.0,1315.0,311.0,1425.0,306.0,2.0272,99600.0,NEAR OCEAN --117.28,33.28,13.0,6131.0,1040.0,4049.0,940.0,3.8156,150700.0,<1H OCEAN --117.25,33.3,14.0,2513.0,351.0,1151.0,357.0,6.3054,359000.0,<1H OCEAN --117.26,33.26,9.0,4609.0,798.0,2582.0,746.0,4.3429,173900.0,<1H OCEAN --117.3,33.26,23.0,1678.0,275.0,1227.0,264.0,4.1713,133800.0,<1H OCEAN --117.3,33.25,22.0,2329.0,419.0,1456.0,381.0,3.7933,131000.0,<1H OCEAN --117.31,33.25,14.0,3483.0,764.0,2140.0,687.0,3.125,102300.0,<1H OCEAN --117.31,33.25,13.0,3075.0,630.0,1843.0,674.0,2.8558,97100.0,<1H OCEAN --117.32,33.25,7.0,2499.0,420.0,1314.0,398.0,4.85,186900.0,<1H OCEAN --117.32,33.25,7.0,8206.0,1523.0,4399.0,1423.0,3.6301,170900.0,<1H OCEAN --117.34,33.23,11.0,3737.0,757.0,2212.0,727.0,3.1062,141000.0,NEAR OCEAN --117.33,33.23,15.0,2919.0,592.0,1130.0,579.0,2.5872,155600.0,NEAR OCEAN --117.33,33.23,15.0,1905.0,416.0,1258.0,388.0,3.33,127900.0,NEAR OCEAN --117.33,33.24,13.0,4543.0,881.0,2298.0,870.0,2.9386,143400.0,NEAR OCEAN --117.42,33.35,14.0,25135.0,4819.0,35682.0,4769.0,2.5729,134400.0,<1H OCEAN --117.24,33.34,17.0,2866.0,442.0,1354.0,431.0,4.5764,257300.0,<1H OCEAN --117.22,33.36,16.0,3165.0,482.0,1351.0,452.0,4.605,263300.0,<1H OCEAN --117.22,33.31,12.0,2924.0,433.0,1193.0,394.0,6.2475,331300.0,<1H OCEAN --117.21,33.34,10.0,5294.0,817.0,2312.0,810.0,5.4563,325700.0,<1H OCEAN --117.19,33.34,15.0,3310.0,488.0,1104.0,460.0,6.1009,314400.0,<1H OCEAN --117.17,33.34,15.0,3313.0,679.0,1022.0,564.0,2.7986,189900.0,<1H OCEAN --117.2,33.29,12.0,6358.0,1182.0,2778.0,1020.0,4.0357,295900.0,<1H OCEAN --117.17,33.28,16.0,1921.0,312.0,862.0,280.0,5.1786,376800.0,<1H OCEAN --117.25,33.38,16.0,3536.0,765.0,2007.0,687.0,3.0,146700.0,<1H OCEAN --117.24,33.4,16.0,2704.0,463.0,1322.0,424.0,3.7857,227000.0,<1H OCEAN --117.23,33.38,18.0,3339.0,704.0,1727.0,652.0,2.8393,173200.0,<1H OCEAN --117.24,33.38,16.0,2792.0,525.0,1696.0,516.0,3.668,171200.0,<1H OCEAN --117.25,33.38,17.0,1614.0,431.0,1031.0,389.0,2.0956,134400.0,<1H OCEAN --117.25,33.39,22.0,2699.0,543.0,1425.0,491.0,2.375,137300.0,<1H OCEAN --117.26,33.37,7.0,2221.0,548.0,1440.0,501.0,2.2368,154600.0,<1H OCEAN --117.25,33.37,8.0,1755.0,530.0,1687.0,511.0,1.995,146900.0,<1H OCEAN --117.24,33.37,14.0,4687.0,793.0,2436.0,779.0,4.5391,180900.0,<1H OCEAN --117.24,33.36,11.0,2786.0,480.0,1250.0,450.0,4.5,222600.0,<1H OCEAN --117.25,33.36,6.0,3725.0,960.0,2833.0,915.0,2.3214,247000.0,<1H OCEAN --117.34,33.46,14.0,1902.0,338.0,848.0,304.0,5.5395,273300.0,<1H OCEAN --117.19,33.41,16.0,3031.0,554.0,1301.0,518.0,4.0882,296100.0,<1H OCEAN --117.14,33.39,17.0,2889.0,587.0,1931.0,510.0,3.8547,208300.0,<1H OCEAN --117.2,33.38,14.0,5392.0,821.0,2350.0,810.0,5.0507,291500.0,<1H OCEAN --117.1,33.36,19.0,3518.0,658.0,2091.0,610.0,3.2614,168800.0,<1H OCEAN --116.95,33.31,16.0,2921.0,639.0,1838.0,540.0,2.2393,117000.0,<1H OCEAN --117.03,33.32,14.0,1088.0,209.0,601.0,193.0,3.8438,243800.0,<1H OCEAN --117.05,33.29,17.0,1800.0,312.0,891.0,281.0,7.0177,267600.0,<1H OCEAN --117.05,33.26,14.0,3103.0,569.0,1704.0,539.0,3.7644,264700.0,<1H OCEAN --117.12,33.27,11.0,3016.0,601.0,1727.0,541.0,4.9375,232800.0,<1H OCEAN --117.0,33.29,17.0,2073.0,313.0,573.0,221.0,8.2531,419200.0,<1H OCEAN --116.98,33.26,12.0,5898.0,1002.0,3129.0,945.0,4.7647,254100.0,<1H OCEAN --116.99,33.2,17.0,2980.0,539.0,1531.0,505.0,3.1553,250000.0,<1H OCEAN --116.9,33.22,11.0,4132.0,773.0,2012.0,703.0,3.1906,234500.0,<1H OCEAN --117.14,33.23,11.0,4068.0,829.0,918.0,500.0,3.1272,281300.0,<1H OCEAN --117.11,33.23,13.0,5819.0,919.0,2228.0,866.0,4.9335,298100.0,<1H OCEAN --117.08,33.23,14.0,3337.0,571.0,1385.0,512.0,4.15,272200.0,<1H OCEAN --117.2,33.24,12.0,4992.0,,2106.0,801.0,6.2079,307300.0,<1H OCEAN --117.15,33.2,16.0,2690.0,459.0,1253.0,393.0,4.0328,294600.0,<1H OCEAN --117.2,33.2,16.0,4409.0,629.0,1875.0,609.0,5.543,286400.0,<1H OCEAN --117.22,33.22,17.0,3675.0,672.0,1693.0,597.0,3.3882,190800.0,<1H OCEAN --117.22,33.22,16.0,2134.0,643.0,1555.0,560.0,1.7217,175000.0,<1H OCEAN --117.22,33.22,15.0,1430.0,343.0,704.0,322.0,1.9571,162500.0,<1H OCEAN --117.23,33.24,26.0,1991.0,330.0,1014.0,304.0,4.3068,240100.0,<1H OCEAN --117.24,33.23,13.0,3756.0,648.0,1767.0,614.0,4.0776,196000.0,<1H OCEAN --117.24,33.23,21.0,1718.0,308.0,1194.0,312.0,3.4359,150900.0,<1H OCEAN --117.23,33.23,13.0,2899.0,657.0,1946.0,579.0,2.9875,172000.0,<1H OCEAN --117.23,33.22,18.0,2334.0,573.0,962.0,557.0,1.808,97000.0,<1H OCEAN --117.23,33.22,16.0,3224.0,729.0,1036.0,608.0,2.0246,148800.0,<1H OCEAN --117.24,33.22,20.0,1962.0,334.0,1173.0,349.0,4.1316,162500.0,<1H OCEAN --117.24,33.21,9.0,2486.0,626.0,1938.0,525.0,2.1293,151400.0,<1H OCEAN --117.23,33.21,34.0,544.0,108.0,348.0,127.0,4.125,164600.0,<1H OCEAN --117.25,33.25,6.0,6160.0,993.0,2997.0,1029.0,4.6187,205000.0,<1H OCEAN --117.27,33.23,5.0,20908.0,3933.0,9690.0,3510.0,4.1405,198500.0,<1H OCEAN --117.27,33.22,5.0,2283.0,337.0,999.0,325.0,5.0249,196700.0,<1H OCEAN --117.27,33.22,16.0,1420.0,311.0,470.0,313.0,1.8849,90800.0,<1H OCEAN --117.28,33.22,13.0,2832.0,542.0,1065.0,531.0,2.3844,98600.0,<1H OCEAN --117.27,33.21,5.0,5764.0,996.0,3161.0,1012.0,4.4531,177500.0,<1H OCEAN --117.25,33.22,26.0,2010.0,347.0,1160.0,331.0,3.9815,142600.0,<1H OCEAN --117.25,33.22,19.0,2167.0,443.0,1654.0,435.0,3.5,135800.0,<1H OCEAN --117.26,33.21,26.0,1906.0,408.0,1325.0,427.0,3.0197,136000.0,<1H OCEAN --117.28,33.2,11.0,1472.0,261.0,1012.0,285.0,4.21,175600.0,NEAR OCEAN --117.27,33.2,23.0,2145.0,379.0,1360.0,404.0,4.2054,150700.0,<1H OCEAN --117.26,33.2,13.0,3163.0,725.0,1675.0,629.0,2.8214,121900.0,<1H OCEAN --117.27,33.2,34.0,1852.0,322.0,978.0,332.0,4.3542,156900.0,<1H OCEAN --117.27,33.19,8.0,973.0,289.0,663.0,209.0,2.724,139300.0,NEAR OCEAN --117.28,33.19,5.0,2697.0,639.0,1633.0,580.0,3.4456,165800.0,NEAR OCEAN --117.25,33.21,9.0,1944.0,488.0,1992.0,453.0,2.066,127200.0,<1H OCEAN --117.24,33.21,19.0,1872.0,489.0,1859.0,446.0,2.1875,121700.0,<1H OCEAN --117.24,33.21,18.0,1846.0,419.0,1581.0,387.0,3.0982,111300.0,<1H OCEAN --117.24,33.2,25.0,1631.0,415.0,1045.0,386.0,2.4505,147500.0,<1H OCEAN --117.24,33.2,26.0,1701.0,404.0,989.0,367.0,2.5119,171700.0,<1H OCEAN --117.25,33.2,22.0,2361.0,618.0,1472.0,596.0,2.0625,124500.0,<1H OCEAN --117.25,33.2,10.0,2050.0,473.0,1302.0,471.0,2.7961,131300.0,<1H OCEAN --117.25,33.21,13.0,1203.0,292.0,1035.0,293.0,2.6339,117000.0,<1H OCEAN --117.23,33.21,21.0,1934.0,386.0,861.0,381.0,3.6181,213800.0,<1H OCEAN --117.22,33.21,19.0,4400.0,828.0,1901.0,735.0,3.6375,198800.0,<1H OCEAN --117.22,33.2,31.0,1736.0,277.0,801.0,292.0,4.4844,205500.0,<1H OCEAN --117.23,33.2,29.0,3372.0,720.0,1770.0,693.0,3.5109,166000.0,<1H OCEAN --117.23,33.2,21.0,2284.0,360.0,999.0,356.0,4.8929,212500.0,<1H OCEAN --117.21,33.2,22.0,3337.0,518.0,1288.0,466.0,5.04,253700.0,<1H OCEAN --117.22,33.19,16.0,3004.0,656.0,1948.0,606.0,2.7019,216900.0,<1H OCEAN --117.27,33.18,4.0,3371.0,773.0,1481.0,627.0,2.9133,215700.0,NEAR OCEAN --117.26,33.19,4.0,2342.0,595.0,1518.0,545.0,2.9469,216100.0,NEAR OCEAN --117.26,33.19,2.0,2629.0,509.0,1044.0,522.0,4.2361,158500.0,NEAR OCEAN --117.25,33.19,18.0,1891.0,306.0,830.0,279.0,4.5764,207000.0,<1H OCEAN --117.24,33.19,19.0,1569.0,351.0,1035.0,352.0,2.9191,159400.0,<1H OCEAN --117.23,33.19,22.0,2554.0,447.0,1147.0,422.0,3.6346,192500.0,<1H OCEAN --117.24,33.18,19.0,3337.0,565.0,1646.0,554.0,5.0195,200200.0,<1H OCEAN --117.3,33.17,6.0,7880.0,1533.0,3760.0,1460.0,4.1807,182600.0,NEAR OCEAN --117.32,33.17,18.0,2143.0,299.0,828.0,283.0,4.2383,239000.0,NEAR OCEAN --117.31,33.17,7.0,2349.0,312.0,809.0,282.0,5.552,283900.0,NEAR OCEAN --117.31,33.16,4.0,5846.0,894.0,2282.0,801.0,5.5956,247800.0,NEAR OCEAN --117.31,33.16,17.0,1704.0,263.0,781.0,281.0,5.6605,224400.0,NEAR OCEAN --117.29,33.18,15.0,3780.0,792.0,1632.0,721.0,2.7644,111400.0,NEAR OCEAN --117.29,33.18,17.0,821.0,176.0,436.0,168.0,3.1667,160600.0,NEAR OCEAN --117.28,33.18,16.0,3002.0,591.0,842.0,538.0,2.1205,157300.0,NEAR OCEAN --117.28,33.18,14.0,676.0,118.0,384.0,126.0,6.2096,178100.0,NEAR OCEAN --117.26,33.18,9.0,4540.0,793.0,2235.0,746.0,4.5781,225600.0,NEAR OCEAN --117.27,33.15,4.0,23915.0,4135.0,10877.0,3958.0,4.6357,244900.0,NEAR OCEAN --117.29,33.15,11.0,2560.0,445.0,952.0,448.0,4.0625,87500.0,NEAR OCEAN --117.24,33.17,4.0,9998.0,1874.0,3925.0,1672.0,4.2826,237500.0,<1H OCEAN --117.22,33.17,6.0,1487.0,362.0,810.0,322.0,3.625,135700.0,<1H OCEAN --117.23,33.16,4.0,3066.0,625.0,1164.0,582.0,4.0,228100.0,NEAR OCEAN --117.23,33.16,2.0,4624.0,946.0,2091.0,808.0,3.6736,214500.0,NEAR OCEAN --117.22,33.18,13.0,4273.0,886.0,2328.0,801.0,3.3444,183900.0,<1H OCEAN --117.21,33.17,16.0,1787.0,361.0,1446.0,362.0,3.75,163800.0,<1H OCEAN --117.21,33.19,21.0,3765.0,612.0,1722.0,593.0,4.8152,218500.0,<1H OCEAN --117.19,33.18,7.0,3561.0,722.0,1921.0,657.0,4.1128,209700.0,<1H OCEAN --117.21,33.16,13.0,2937.0,698.0,1246.0,579.0,2.6487,196000.0,<1H OCEAN --117.2,33.16,13.0,4503.0,1137.0,3094.0,1091.0,2.3159,91600.0,<1H OCEAN --117.2,33.15,11.0,4091.0,864.0,1927.0,765.0,3.0139,199000.0,<1H OCEAN --117.2,33.14,19.0,2025.0,414.0,1663.0,403.0,3.8147,139200.0,<1H OCEAN --117.22,33.14,5.0,4576.0,848.0,2314.0,705.0,5.0123,210400.0,NEAR OCEAN --117.21,33.14,12.0,4839.0,954.0,1708.0,952.0,2.8586,163300.0,<1H OCEAN --117.21,33.13,15.0,1889.0,368.0,754.0,409.0,2.2278,132800.0,NEAR OCEAN --117.17,33.18,25.0,596.0,115.0,426.0,137.0,3.0221,214300.0,<1H OCEAN --117.18,33.16,15.0,5923.0,1206.0,3943.0,1006.0,3.1793,159900.0,<1H OCEAN --117.15,33.16,5.0,4750.0,962.0,2726.0,905.0,3.5839,158500.0,<1H OCEAN --117.14,33.16,16.0,1660.0,,733.0,214.0,5.6874,202700.0,<1H OCEAN --117.13,33.15,15.0,2241.0,381.0,997.0,390.0,3.4833,193200.0,<1H OCEAN --117.14,33.15,17.0,1149.0,182.0,702.0,192.0,5.5696,168400.0,<1H OCEAN --117.14,33.15,16.0,1129.0,198.0,758.0,178.0,5.0346,174600.0,<1H OCEAN --117.15,33.14,15.0,1070.0,208.0,470.0,217.0,2.3062,158900.0,<1H OCEAN --117.13,33.15,16.0,3907.0,671.0,1759.0,663.0,3.1776,172600.0,<1H OCEAN --117.13,33.14,16.0,1649.0,278.0,993.0,277.0,4.8526,170700.0,<1H OCEAN --117.13,33.14,5.0,2618.0,539.0,1320.0,512.0,4.1053,171400.0,<1H OCEAN --117.12,33.14,16.0,1710.0,272.0,1025.0,267.0,4.1641,163600.0,<1H OCEAN --117.12,33.14,12.0,2363.0,408.0,1211.0,396.0,3.8967,172600.0,<1H OCEAN --117.13,33.14,12.0,2258.0,456.0,1147.0,433.0,4.0495,153900.0,<1H OCEAN --117.19,33.14,12.0,3652.0,923.0,1677.0,728.0,2.3267,92000.0,<1H OCEAN --117.18,33.15,7.0,6225.0,1683.0,5410.0,1580.0,2.32,117500.0,<1H OCEAN --117.21,33.13,19.0,3068.0,596.0,912.0,554.0,3.775,168000.0,NEAR OCEAN --117.2,33.12,18.0,4372.0,736.0,1473.0,675.0,5.1194,247800.0,NEAR OCEAN --117.21,33.12,4.0,3261.0,689.0,926.0,561.0,4.3672,258900.0,NEAR OCEAN --117.18,33.11,16.0,3470.0,601.0,1197.0,552.0,5.1814,279900.0,NEAR OCEAN --117.25,33.12,8.0,8552.0,1437.0,3335.0,1323.0,5.311,255800.0,NEAR OCEAN --117.24,33.11,10.0,3487.0,545.0,1410.0,557.0,6.0336,240300.0,NEAR OCEAN --117.23,33.1,4.0,1862.0,291.0,685.0,248.0,7.745,237400.0,NEAR OCEAN --117.25,33.1,14.0,3676.0,720.0,1176.0,614.0,3.9464,171900.0,NEAR OCEAN --117.26,33.09,22.0,2398.0,407.0,349.0,169.0,7.0423,500001.0,NEAR OCEAN --117.26,33.09,13.0,3730.0,761.0,1335.0,603.0,4.1667,227100.0,NEAR OCEAN --117.23,33.09,7.0,5320.0,855.0,2015.0,768.0,6.3373,279600.0,NEAR OCEAN --117.25,33.08,13.0,3651.0,465.0,1311.0,435.0,7.5402,340300.0,NEAR OCEAN --117.25,33.08,14.0,7208.0,1012.0,3097.0,1014.0,6.617,285200.0,NEAR OCEAN --117.26,33.08,12.0,5080.0,814.0,1958.0,716.0,5.3905,299600.0,NEAR OCEAN --117.09,33.13,9.0,5685.0,1442.0,3773.0,1250.0,3.0426,129900.0,<1H OCEAN --117.08,33.14,15.0,1497.0,250.0,827.0,239.0,4.3846,154200.0,<1H OCEAN --117.08,33.14,11.0,1430.0,292.0,921.0,294.0,4.2357,160900.0,<1H OCEAN --117.07,33.14,16.0,2546.0,429.0,1683.0,408.0,4.7426,160600.0,<1H OCEAN --117.07,33.15,17.0,1893.0,297.0,936.0,287.0,5.1842,157700.0,<1H OCEAN --117.06,33.15,24.0,2155.0,379.0,1158.0,360.0,4.7941,147500.0,<1H OCEAN --117.11,33.19,15.0,3154.0,488.0,1656.0,429.0,5.0461,222400.0,<1H OCEAN --117.03,33.18,17.0,5391.0,886.0,2732.0,830.0,5.1771,212800.0,<1H OCEAN --117.06,33.17,4.0,5465.0,974.0,2844.0,950.0,4.4477,174800.0,<1H OCEAN --117.1,33.17,12.0,2465.0,412.0,1226.0,428.0,5.4819,183800.0,<1H OCEAN --117.08,33.16,11.0,6341.0,1030.0,2697.0,977.0,4.8554,206700.0,<1H OCEAN --117.07,33.15,15.0,2994.0,522.0,1231.0,503.0,3.2024,180400.0,<1H OCEAN --117.08,33.14,19.0,2629.0,494.0,1444.0,503.0,3.5462,156800.0,<1H OCEAN --117.09,33.15,13.0,3958.0,865.0,1981.0,840.0,3.4764,137500.0,<1H OCEAN --117.07,33.13,17.0,6817.0,1632.0,4526.0,1474.0,2.6152,135300.0,<1H OCEAN --117.07,33.13,33.0,555.0,165.0,612.0,176.0,2.1786,137500.0,<1H OCEAN --117.06,33.14,27.0,3819.0,674.0,2447.0,717.0,3.8185,137200.0,<1H OCEAN --117.05,33.13,20.0,7746.0,2035.0,5370.0,1838.0,2.3762,98500.0,<1H OCEAN --117.04,33.15,15.0,13814.0,2888.0,6583.0,2789.0,2.8247,150000.0,<1H OCEAN --117.05,33.14,16.0,4552.0,1166.0,2737.0,1051.0,2.25,136300.0,<1H OCEAN --117.06,33.13,12.0,8742.0,2114.0,4854.0,1957.0,2.8015,143500.0,<1H OCEAN --117.08,33.13,17.0,8466.0,2628.0,7014.0,2267.0,2.1437,113700.0,<1H OCEAN --117.08,33.12,43.0,107.0,44.0,107.0,48.0,0.7054,137500.0,<1H OCEAN --117.11,33.15,14.0,8374.0,1407.0,2916.0,1295.0,4.7019,191100.0,<1H OCEAN --117.1,33.15,5.0,3159.0,685.0,1398.0,581.0,3.1467,161100.0,<1H OCEAN --117.12,33.15,7.0,2810.0,464.0,1564.0,457.0,4.4655,182800.0,<1H OCEAN --117.14,33.18,11.0,5546.0,974.0,2300.0,970.0,3.7109,199800.0,<1H OCEAN --117.1,33.14,7.0,10665.0,2576.0,4917.0,2424.0,2.3171,159500.0,<1H OCEAN --117.11,33.14,10.0,3208.0,636.0,1395.0,582.0,3.4455,190500.0,<1H OCEAN --117.14,33.12,7.0,6126.0,1032.0,2662.0,923.0,4.9005,264000.0,<1H OCEAN --117.13,33.13,17.0,3164.0,652.0,1123.0,699.0,2.082,80000.0,<1H OCEAN --117.11,33.12,46.0,52.0,13.0,59.0,13.0,3.875,200000.0,<1H OCEAN --117.1,33.12,12.0,961.0,342.0,315.0,201.0,0.813,275000.0,<1H OCEAN --117.11,33.11,17.0,2641.0,627.0,1167.0,647.0,2.2875,132400.0,<1H OCEAN --117.14,33.07,12.0,9302.0,1603.0,4074.0,1504.0,4.3513,199600.0,<1H OCEAN --117.12,33.07,45.0,1032.0,235.0,363.0,177.0,3.6389,186600.0,<1H OCEAN --117.1,33.07,16.0,2402.0,336.0,1080.0,365.0,8.6803,347300.0,<1H OCEAN --117.07,33.07,8.0,2756.0,343.0,1045.0,340.0,8.5957,444100.0,<1H OCEAN --117.1,33.09,5.0,12045.0,2162.0,5640.0,1997.0,4.4375,353000.0,<1H OCEAN --117.08,33.08,23.0,3400.0,501.0,1383.0,488.0,4.9844,249100.0,<1H OCEAN --117.09,33.1,21.0,2876.0,539.0,1387.0,499.0,3.8292,177000.0,<1H OCEAN --117.08,33.09,23.0,3792.0,624.0,1988.0,658.0,4.7566,178300.0,<1H OCEAN --117.09,33.12,11.0,567.0,184.0,620.0,163.0,2.5284,122500.0,<1H OCEAN --117.08,33.11,31.0,1356.0,324.0,1301.0,331.0,2.5331,115100.0,<1H OCEAN --117.08,33.11,28.0,2094.0,585.0,1556.0,563.0,2.2,127700.0,<1H OCEAN --117.09,33.11,32.0,1713.0,321.0,891.0,286.0,3.1429,171600.0,<1H OCEAN --117.08,33.12,37.0,1060.0,268.0,823.0,229.0,1.8363,145500.0,<1H OCEAN --117.07,33.11,31.0,2055.0,473.0,1326.0,427.0,3.0915,139900.0,<1H OCEAN --117.08,33.11,31.0,1832.0,444.0,1669.0,463.0,2.2146,116700.0,<1H OCEAN --117.08,33.12,33.0,674.0,208.0,565.0,188.0,1.875,114300.0,<1H OCEAN --117.07,33.12,21.0,4578.0,927.0,2818.0,900.0,3.1458,187700.0,<1H OCEAN --117.07,33.12,32.0,2474.0,499.0,1224.0,461.0,2.7216,146300.0,<1H OCEAN --117.07,33.12,12.0,2453.0,599.0,1251.0,529.0,2.4122,127000.0,<1H OCEAN --117.07,33.11,17.0,5565.0,1237.0,3004.0,1139.0,3.0054,142300.0,<1H OCEAN --117.06,33.09,11.0,7483.0,1276.0,3516.0,1261.0,4.0484,262500.0,<1H OCEAN --117.03,33.13,15.0,7000.0,1185.0,3555.0,1118.0,4.7022,172800.0,<1H OCEAN --116.97,33.13,10.0,5149.0,851.0,2177.0,783.0,6.7957,287500.0,<1H OCEAN --117.05,33.13,17.0,2385.0,372.0,1118.0,369.0,4.2813,169900.0,<1H OCEAN --117.05,33.11,18.0,4393.0,642.0,2095.0,677.0,5.4786,223500.0,<1H OCEAN --117.05,33.13,22.0,2427.0,390.0,1099.0,362.0,5.2323,167500.0,<1H OCEAN --117.05,33.1,13.0,5516.0,746.0,2119.0,662.0,6.1868,320200.0,<1H OCEAN --117.03,33.12,25.0,3142.0,446.0,1286.0,419.0,5.4663,248300.0,<1H OCEAN --117.04,33.09,16.0,4677.0,581.0,1902.0,566.0,6.1834,335600.0,<1H OCEAN --116.93,33.06,16.0,3490.0,545.0,1628.0,535.0,4.8836,239900.0,<1H OCEAN --116.89,32.99,14.0,2816.0,501.0,1448.0,452.0,5.0278,210900.0,<1H OCEAN --116.95,32.96,18.0,2087.0,353.0,992.0,329.0,4.5,222600.0,<1H OCEAN --116.84,33.08,15.0,2755.0,519.0,1474.0,460.0,4.0408,225900.0,<1H OCEAN --116.77,33.08,13.0,1406.0,260.0,737.0,279.0,5.5842,239100.0,<1H OCEAN --116.78,33.0,7.0,12480.0,1946.0,5102.0,1697.0,5.5102,221000.0,<1H OCEAN --116.84,33.01,5.0,5673.0,855.0,2592.0,797.0,5.4155,199200.0,<1H OCEAN --116.88,33.05,11.0,7217.0,1583.0,4197.0,1502.0,2.8827,166700.0,<1H OCEAN --116.88,33.02,16.0,3204.0,541.0,1818.0,529.0,5.2596,171500.0,<1H OCEAN --116.9,33.03,11.0,3213.0,634.0,1975.0,579.0,3.475,167200.0,<1H OCEAN --116.86,33.05,17.0,9044.0,1689.0,5030.0,1596.0,3.6348,164500.0,<1H OCEAN --116.86,33.02,17.0,401.0,68.0,251.0,69.0,4.6518,170200.0,<1H OCEAN --116.84,33.02,11.0,1227.0,202.0,645.0,198.0,5.6674,209800.0,<1H OCEAN --116.74,33.33,17.0,4190.0,946.0,1802.0,673.0,2.4744,158200.0,INLAND --116.68,33.16,26.0,1820.0,374.0,1001.0,324.0,2.1797,156300.0,INLAND --116.6,33.06,23.0,1731.0,365.0,612.0,258.0,2.7813,172900.0,INLAND --116.58,33.09,36.0,992.0,224.0,334.0,126.0,3.0089,134400.0,INLAND --116.56,33.05,15.0,1985.0,361.0,536.0,209.0,4.125,148200.0,INLAND --116.61,33.04,11.0,2522.0,538.0,616.0,269.0,3.875,198100.0,INLAND --116.66,33.09,24.0,1378.0,272.0,532.0,188.0,1.5909,221900.0,INLAND --116.67,32.97,16.0,349.0,74.0,120.0,43.0,5.359,193800.0,<1H OCEAN --116.52,32.9,18.0,4454.0,852.0,1754.0,656.0,4.57,189900.0,INLAND --116.34,33.36,24.0,2746.0,514.0,731.0,295.0,3.3214,176400.0,INLAND --116.32,33.28,19.0,1791.0,367.0,327.0,185.0,3.3625,100000.0,INLAND --116.26,33.07,17.0,934.0,284.0,452.0,184.0,1.9875,83700.0,INLAND --116.28,32.84,18.0,382.0,128.0,194.0,69.0,2.5179,58800.0,INLAND --116.37,33.19,12.0,4890.0,1152.0,1289.0,570.0,2.5795,98700.0,INLAND --116.58,32.69,19.0,4085.0,876.0,2133.0,718.0,2.919,116500.0,INLAND --116.45,32.65,22.0,2680.0,643.0,1644.0,516.0,2.1949,127100.0,INLAND --116.35,32.74,16.0,2595.0,606.0,1046.0,367.0,1.7137,110700.0,INLAND --116.2,32.64,28.0,1608.0,409.0,567.0,254.0,1.4648,61800.0,INLAND --116.75,32.85,17.0,4863.0,845.0,2266.0,769.0,4.2321,217400.0,<1H OCEAN --116.79,32.84,12.0,4281.0,786.0,1891.0,721.0,3.5769,231800.0,<1H OCEAN --116.76,32.84,16.0,3311.0,702.0,1627.0,624.0,3.1196,187200.0,<1H OCEAN --116.77,32.82,16.0,3688.0,817.0,1969.0,767.0,2.875,222900.0,<1H OCEAN --116.75,32.82,17.0,3348.0,481.0,1222.0,443.0,6.6361,308600.0,<1H OCEAN --116.8,32.8,11.0,3874.0,565.0,1672.0,546.0,6.1481,274600.0,<1H OCEAN --116.62,32.86,18.0,4115.0,847.0,2032.0,745.0,4.0159,169100.0,<1H OCEAN --116.66,32.79,13.0,843.0,,918.0,152.0,6.2152,240600.0,<1H OCEAN --116.87,32.75,15.0,2053.0,321.0,993.0,309.0,5.5164,248900.0,<1H OCEAN --116.91,32.73,8.0,4630.0,624.0,2048.0,575.0,6.4745,300300.0,<1H OCEAN --116.87,32.72,13.0,3268.0,491.0,1431.0,503.0,5.7652,259900.0,<1H OCEAN --116.89,32.67,9.0,2652.0,393.0,1355.0,362.0,6.2578,293100.0,<1H OCEAN --116.76,32.74,14.0,4085.0,751.0,2129.0,688.0,4.7367,214500.0,<1H OCEAN --116.79,32.61,19.0,2652.0,520.0,1421.0,491.0,3.5227,206100.0,<1H OCEAN --122.41,37.81,25.0,1178.0,545.0,592.0,441.0,3.6728,500001.0,NEAR BAY --122.41,37.81,31.0,3991.0,1311.0,2305.0,1201.0,1.8981,500001.0,NEAR BAY --122.42,37.81,52.0,1314.0,317.0,473.0,250.0,4.3472,500001.0,NEAR BAY --122.42,37.8,52.0,2852.0,581.0,838.0,510.0,8.0755,500001.0,NEAR BAY --122.42,37.8,52.0,4985.0,1355.0,1848.0,1255.0,4.9211,500001.0,NEAR BAY --122.42,37.8,50.0,2494.0,731.0,958.0,712.0,3.2356,500001.0,NEAR BAY --122.42,37.8,52.0,741.0,170.0,277.0,165.0,4.4712,500001.0,NEAR BAY --122.41,37.8,52.0,2583.0,672.0,1335.0,613.0,3.1477,500001.0,NEAR BAY --122.41,37.8,52.0,2618.0,611.0,1328.0,559.0,4.1607,350000.0,NEAR BAY --122.41,37.8,52.0,3278.0,775.0,1279.0,709.0,5.4378,500001.0,NEAR BAY --122.41,37.8,52.0,812.0,252.0,629.0,247.0,2.5875,500001.0,NEAR BAY --122.41,37.8,52.0,4088.0,946.0,1906.0,863.0,3.6065,433300.0,NEAR BAY --122.41,37.8,52.0,1288.0,309.0,437.0,272.0,6.3245,500001.0,NEAR BAY --122.4,37.8,52.0,1860.0,575.0,679.0,448.0,4.775,500001.0,NEAR BAY --122.4,37.8,52.0,2094.0,568.0,920.0,503.0,4.2015,412500.0,NEAR BAY --122.4,37.81,12.0,1349.0,349.0,536.0,334.0,7.7852,250000.0,NEAR BAY --122.41,37.8,52.0,2450.0,741.0,1415.0,664.0,2.8229,375000.0,NEAR BAY --122.4,37.8,52.0,1642.0,570.0,1432.0,513.0,1.9063,300000.0,NEAR BAY --122.41,37.8,52.0,1394.0,395.0,1700.0,400.0,2.75,168800.0,NEAR BAY --122.41,37.8,52.0,1724.0,416.0,1016.0,395.0,3.3839,400000.0,NEAR BAY --122.41,37.8,52.0,1866.0,748.0,2957.0,710.0,1.8295,243800.0,NEAR BAY --122.41,37.8,30.0,1821.0,738.0,1648.0,684.0,0.8836,450000.0,NEAR BAY --122.41,37.8,52.0,3697.0,837.0,1446.0,711.0,5.866,500001.0,NEAR BAY --122.41,37.8,52.0,2892.0,751.0,1785.0,733.0,3.5746,350000.0,NEAR BAY --122.41,37.79,52.0,3598.0,1011.0,2062.0,966.0,2.9871,380000.0,NEAR BAY --122.42,37.8,52.0,2797.0,685.0,1156.0,651.0,4.3472,500001.0,NEAR BAY --122.42,37.8,52.0,3823.0,1040.0,1830.0,977.0,4.2458,450000.0,NEAR BAY --122.42,37.8,52.0,3321.0,1115.0,1576.0,1034.0,2.0987,458300.0,NEAR BAY --122.42,37.8,52.0,1777.0,486.0,932.0,427.0,3.3643,420000.0,NEAR BAY --122.42,37.8,52.0,3067.0,870.0,2122.0,850.0,2.5603,287500.0,NEAR BAY --122.42,37.79,52.0,3457.0,1021.0,2286.0,994.0,2.565,225000.0,NEAR BAY --122.42,37.79,52.0,3364.0,1100.0,2112.0,1045.0,2.1343,400000.0,NEAR BAY --122.42,37.79,52.0,3511.0,1232.0,2452.0,1131.0,2.5013,275000.0,NEAR BAY --122.41,37.79,52.0,2909.0,851.0,1711.0,830.0,3.0296,500001.0,NEAR BAY --122.41,37.79,52.0,3302.0,869.0,1178.0,727.0,3.3681,500001.0,NEAR BAY --122.41,37.79,52.0,2161.0,544.0,904.0,431.0,3.5066,350000.0,NEAR BAY --122.41,37.8,52.0,1999.0,642.0,1846.0,620.0,1.9145,225000.0,NEAR BAY --122.41,37.79,52.0,2302.0,938.0,1515.0,861.0,1.3668,55000.0,NEAR BAY --122.41,37.8,52.0,3260.0,1535.0,3260.0,1457.0,0.9,500001.0,NEAR BAY --122.39,37.8,25.0,4561.0,1474.0,1525.0,1169.0,4.5581,500001.0,NEAR BAY --122.4,37.79,52.0,1185.0,660.0,1007.0,623.0,1.4552,450000.0,NEAR BAY --122.41,37.79,52.0,1436.0,738.0,1688.0,662.0,1.5156,237500.0,NEAR BAY --122.41,37.79,52.0,3610.0,1286.0,1504.0,1047.0,3.2059,500001.0,NEAR BAY --122.41,37.79,52.0,6016.0,2509.0,3436.0,2119.0,2.5166,275000.0,NEAR BAY --122.42,37.79,52.0,2737.0,1241.0,1761.0,1029.0,1.8068,225000.0,NEAR BAY --122.41,37.79,52.0,5783.0,2747.0,4518.0,2538.0,1.724,225000.0,NEAR BAY --122.42,37.78,26.0,812.0,507.0,628.0,445.0,2.3304,500001.0,NEAR BAY --122.42,37.78,27.0,1728.0,884.0,1211.0,752.0,0.8543,500001.0,NEAR BAY --122.43,37.81,39.0,3275.0,837.0,1137.0,725.0,3.7679,500001.0,NEAR BAY --122.44,37.8,52.0,3830.0,,1310.0,963.0,3.4801,500001.0,NEAR BAY --122.44,37.8,52.0,1724.0,412.0,540.0,319.0,4.2857,500001.0,NEAR BAY --122.43,37.81,52.0,4309.0,942.0,1297.0,798.0,4.6781,500001.0,NEAR BAY --122.45,37.81,52.0,1375.0,322.0,287.0,184.0,3.9028,500001.0,NEAR BAY --122.44,37.8,52.0,2869.0,594.0,500.0,335.0,5.0376,500001.0,NEAR BAY --122.44,37.8,52.0,3257.0,735.0,1045.0,620.0,4.5523,500001.0,NEAR BAY --122.44,37.8,52.0,1580.0,470.0,714.0,448.0,3.2447,500001.0,NEAR BAY --122.44,37.8,52.0,1006.0,291.0,445.0,257.0,2.7717,500000.0,NEAR BAY --122.44,37.8,52.0,3149.0,719.0,1145.0,658.0,4.625,500001.0,NEAR BAY --122.44,37.8,52.0,3161.0,472.0,842.0,410.0,7.9761,500001.0,NEAR BAY --122.44,37.8,52.0,2865.0,593.0,1029.0,577.0,5.2539,500001.0,NEAR BAY --122.44,37.8,52.0,1603.0,487.0,727.0,464.0,3.9856,500001.0,NEAR BAY --122.43,37.8,52.0,3172.0,848.0,1259.0,806.0,4.1047,466700.0,NEAR BAY --122.43,37.8,52.0,2788.0,813.0,1302.0,764.0,4.199,400000.0,NEAR BAY --122.43,37.8,52.0,2994.0,821.0,1240.0,779.0,3.3715,500000.0,NEAR BAY --122.43,37.8,52.0,1976.0,726.0,1045.0,669.0,3.6893,475000.0,NEAR BAY --122.43,37.8,52.0,1006.0,251.0,349.0,233.0,3.2235,500000.0,NEAR BAY --122.43,37.8,52.0,1380.0,322.0,553.0,288.0,4.0417,500001.0,NEAR BAY --122.42,37.8,52.0,2657.0,772.0,1014.0,685.0,4.038,500001.0,NEAR BAY --122.43,37.8,52.0,2696.0,572.0,925.0,552.0,5.0365,500000.0,NEAR BAY --122.43,37.8,52.0,2520.0,649.0,959.0,607.0,5.7934,500001.0,NEAR BAY --122.43,37.8,52.0,2802.0,622.0,954.0,572.0,4.5399,500001.0,NEAR BAY --122.42,37.8,52.0,4079.0,1112.0,1466.0,1024.0,4.5913,500001.0,NEAR BAY --122.42,37.79,48.0,4506.0,1342.0,1980.0,1239.0,4.0156,500001.0,NEAR BAY --122.43,37.79,52.0,3565.0,892.0,1377.0,852.0,3.8068,500001.0,NEAR BAY --122.43,37.79,52.0,3486.0,847.0,1248.0,813.0,7.2623,500001.0,NEAR BAY --122.43,37.79,52.0,6186.0,1566.0,2065.0,1374.0,5.8543,500001.0,NEAR BAY --122.44,37.79,52.0,1979.0,359.0,648.0,370.0,5.3124,500001.0,NEAR BAY --122.44,37.79,52.0,1335.0,151.0,402.0,157.0,10.8783,500001.0,NEAR BAY --122.44,37.79,52.0,2045.0,353.0,722.0,327.0,8.0755,500001.0,NEAR BAY --122.44,37.79,52.0,1447.0,186.0,483.0,181.0,15.0001,500001.0,NEAR BAY --122.45,37.79,52.0,2196.0,280.0,668.0,291.0,10.0914,500001.0,NEAR BAY --122.45,37.79,52.0,3069.0,579.0,1107.0,536.0,5.5634,500001.0,NEAR BAY --122.45,37.79,52.0,1734.0,482.0,731.0,429.0,1.4804,425000.0,NEAR BAY --122.45,37.79,52.0,1457.0,215.0,495.0,208.0,10.7097,500001.0,NEAR BAY --122.46,37.79,52.0,899.0,96.0,304.0,110.0,14.2959,500001.0,NEAR BAY --122.46,37.79,52.0,2106.0,373.0,743.0,348.0,5.2909,500001.0,NEAR BAY --122.44,37.79,52.0,1817.0,535.0,800.0,487.0,3.975,500001.0,NEAR BAY --122.44,37.79,52.0,3640.0,840.0,1525.0,796.0,4.4375,500001.0,NEAR BAY --122.44,37.79,52.0,3785.0,808.0,1371.0,799.0,6.4209,500001.0,NEAR BAY --122.43,37.79,52.0,3522.0,938.0,1319.0,887.0,4.3986,500001.0,NEAR BAY --122.43,37.79,52.0,3219.0,969.0,1152.0,830.0,4.2042,500001.0,NEAR BAY --122.42,37.79,52.0,2511.0,895.0,1202.0,804.0,2.6607,87500.0,NEAR BAY --122.42,37.79,6.0,670.0,301.0,655.0,284.0,3.4423,117500.0,NEAR BAY --122.43,37.79,50.0,3312.0,1095.0,1475.0,997.0,2.7165,500001.0,NEAR BAY --122.43,37.79,52.0,3020.0,842.0,1294.0,769.0,3.4375,500001.0,NEAR BAY --122.43,37.79,25.0,1637.0,394.0,649.0,379.0,5.0049,460000.0,NEAR BAY --122.44,37.79,52.0,1903.0,461.0,831.0,433.0,4.4464,500001.0,NEAR BAY --122.44,37.79,52.0,2083.0,491.0,1224.0,483.0,4.0882,468800.0,NEAR BAY --122.44,37.79,52.0,1726.0,384.0,614.0,356.0,3.6812,500000.0,NEAR BAY --122.44,37.78,52.0,2695.0,657.0,1243.0,573.0,2.8569,372200.0,NEAR BAY --122.45,37.78,45.0,2747.0,699.0,1320.0,693.0,3.1576,333300.0,NEAR BAY --122.45,37.79,46.0,2009.0,464.0,761.0,453.0,3.7188,500001.0,NEAR BAY --122.45,37.78,52.0,3975.0,716.0,1515.0,691.0,5.0156,500001.0,NEAR BAY --122.43,37.79,24.0,2459.0,1001.0,1362.0,957.0,2.6782,450000.0,NEAR BAY --122.43,37.78,10.0,2380.0,843.0,1245.0,789.0,1.3062,220000.0,NEAR BAY --122.44,37.78,39.0,1181.0,310.0,901.0,281.0,1.4866,237500.0,NEAR BAY --122.45,37.78,52.0,1345.0,291.0,560.0,294.0,3.7159,494400.0,NEAR BAY --122.45,37.78,52.0,2686.0,606.0,1392.0,578.0,4.0,355300.0,NEAR BAY --122.46,37.78,47.0,1682.0,379.0,837.0,375.0,5.2806,400000.0,NEAR BAY --122.44,37.78,37.0,1235.0,314.0,481.0,297.0,3.6875,492300.0,NEAR BAY --122.44,37.78,52.0,3510.0,791.0,1703.0,657.0,2.8654,280000.0,NEAR BAY --122.44,37.78,44.0,1545.0,334.0,561.0,326.0,3.875,412500.0,NEAR BAY --122.45,37.78,43.0,1452.0,397.0,897.0,393.0,4.1319,322700.0,NEAR BAY --122.45,37.78,48.0,1013.0,194.0,464.0,205.0,3.2011,428300.0,NEAR BAY --122.45,37.78,52.0,2033.0,438.0,2198.0,418.0,3.6667,418400.0,NEAR BAY --122.44,37.78,16.0,883.0,236.0,601.0,219.0,2.151,146900.0,NEAR BAY --122.43,37.78,49.0,2246.0,587.0,1277.0,546.0,2.9792,350000.0,NEAR BAY --122.44,37.78,52.0,3017.0,851.0,1588.0,800.0,3.3882,471400.0,NEAR BAY --122.44,37.78,52.0,2747.0,736.0,1309.0,653.0,2.943,341700.0,NEAR BAY --122.44,37.78,52.0,1118.0,279.0,514.0,284.0,2.4196,346200.0,NEAR BAY --122.44,37.78,31.0,1364.0,386.0,707.0,379.0,3.1607,293800.0,NEAR BAY --122.43,37.78,26.0,3587.0,1034.0,1821.0,936.0,2.6392,287500.0,NEAR BAY --122.43,37.78,2.0,1205.0,468.0,577.0,363.0,3.6437,275000.0,NEAR BAY --122.42,37.78,19.0,4065.0,1645.0,2079.0,1470.0,3.1462,187500.0,NEAR BAY --122.42,37.78,17.0,1257.0,339.0,1093.0,384.0,1.8438,72500.0,NEAR BAY --122.43,37.78,17.0,2728.0,908.0,1670.0,893.0,1.077,115000.0,NEAR BAY --122.43,37.78,24.0,2037.0,696.0,1371.0,585.0,0.9355,112500.0,NEAR BAY --122.42,37.78,52.0,989.0,425.0,634.0,341.0,2.4414,275000.0,NEAR BAY --122.42,37.78,52.0,1254.0,469.0,895.0,456.0,2.1516,187500.0,NEAR BAY --122.43,37.78,29.0,1310.0,364.0,1009.0,379.0,1.3844,177500.0,NEAR BAY --122.43,37.78,52.0,1952.0,628.0,1284.0,576.0,2.105,316700.0,NEAR BAY --122.43,37.78,52.0,4014.0,1069.0,2070.0,927.0,2.8202,442900.0,NEAR BAY --122.43,37.77,52.0,3944.0,1072.0,1913.0,973.0,2.9567,425000.0,NEAR BAY --122.44,37.78,52.0,2911.0,753.0,1696.0,676.0,2.5721,475000.0,NEAR BAY --122.44,37.77,52.0,2705.0,647.0,1355.0,628.0,2.0161,364300.0,NEAR BAY --122.45,37.77,52.0,2339.0,548.0,1090.0,507.0,3.3679,350000.0,NEAR BAY --122.45,37.77,52.0,3188.0,708.0,1526.0,664.0,3.3068,500001.0,NEAR BAY --122.45,37.77,52.0,1722.0,465.0,885.0,437.0,3.0906,500001.0,NEAR BAY --122.44,37.77,52.0,3475.0,807.0,1518.0,777.0,3.6186,500001.0,NEAR BAY --122.45,37.77,52.0,2296.0,509.0,1039.0,472.0,4.1417,500000.0,NEAR BAY --122.45,37.77,52.0,2191.0,627.0,1100.0,585.0,3.0409,500000.0,NEAR BAY --122.45,37.77,52.0,2645.0,626.0,1275.0,553.0,3.35,492900.0,NEAR BAY --122.43,37.77,52.0,3563.0,832.0,1712.0,787.0,3.3702,335700.0,NEAR BAY --122.43,37.77,52.0,1760.0,366.0,742.0,318.0,4.445,400000.0,NEAR BAY --122.44,37.77,52.0,2002.0,520.0,939.0,501.0,3.2239,488900.0,NEAR BAY --122.44,37.77,52.0,2994.0,736.0,1428.0,700.0,3.0766,438900.0,NEAR BAY --122.42,37.77,52.0,1086.0,349.0,589.0,361.0,2.5186,250000.0,NEAR BAY --122.42,37.77,52.0,1925.0,568.0,867.0,515.0,2.879,450000.0,NEAR BAY --122.43,37.77,52.0,1567.0,482.0,654.0,425.0,2.6914,366700.0,NEAR BAY --122.43,37.77,52.0,2514.0,729.0,1428.0,597.0,2.3977,412500.0,NEAR BAY --122.43,37.77,52.0,2416.0,620.0,1188.0,591.0,2.3887,337500.0,NEAR BAY --122.43,37.77,52.0,1862.0,472.0,872.0,471.0,3.2981,222700.0,NEAR BAY --122.43,37.77,52.0,4397.0,1116.0,1939.0,1053.0,2.7587,354500.0,NEAR BAY --122.43,37.77,52.0,2685.0,629.0,1170.0,614.0,3.6894,418800.0,NEAR BAY --122.44,37.77,52.0,2537.0,559.0,849.0,530.0,5.1788,476900.0,NEAR BAY --122.44,37.77,52.0,5604.0,1268.0,2023.0,1196.0,4.4085,400000.0,NEAR BAY --122.44,37.76,38.0,2202.0,452.0,833.0,435.0,6.8939,455900.0,NEAR BAY --122.44,37.77,52.0,3225.0,667.0,1494.0,619.0,4.4875,500001.0,NEAR BAY --122.44,37.77,52.0,3505.0,745.0,1374.0,714.0,4.3667,500001.0,NEAR BAY --122.45,37.76,50.0,2518.0,507.0,979.0,516.0,4.6912,500001.0,NEAR BAY --122.45,37.76,52.0,1457.0,292.0,621.0,315.0,4.6477,450000.0,NEAR BAY --122.45,37.77,52.0,3095.0,682.0,1269.0,639.0,3.575,500001.0,NEAR BAY --122.45,37.77,52.0,3939.0,852.0,1737.0,797.0,4.5052,500001.0,NEAR BAY --122.41,37.78,52.0,1928.0,836.0,2124.0,739.0,1.1185,55000.0,NEAR BAY --122.41,37.78,52.0,1534.0,763.0,1520.0,614.0,1.4554,375000.0,NEAR BAY --122.41,37.78,52.0,254.0,72.0,153.0,29.0,3.8625,350000.0,NEAR BAY --122.41,37.77,52.0,361.0,76.0,168.0,55.0,3.2292,275000.0,NEAR BAY --122.41,37.77,52.0,1963.0,565.0,1628.0,524.0,2.6083,193800.0,NEAR BAY --122.4,37.78,32.0,352.0,132.0,313.0,105.0,2.5742,350000.0,NEAR BAY --122.41,37.77,52.0,849.0,276.0,582.0,222.0,3.4671,250000.0,NEAR BAY --122.41,37.78,52.0,1014.0,422.0,1055.0,382.0,1.8519,32500.0,NEAR BAY --122.39,37.78,3.0,3464.0,1179.0,1441.0,919.0,4.7105,275000.0,NEAR BAY --122.39,37.78,5.0,1405.0,515.0,725.0,392.0,3.6037,187500.0,NEAR BAY --122.39,37.79,52.0,94.0,24.0,113.0,27.0,4.6563,350000.0,NEAR BAY --122.37,37.81,26.0,5416.0,1045.0,4531.0,962.0,2.7909,250000.0,NEAR BAY --122.4,37.78,52.0,464.0,202.0,286.0,148.0,1.6125,112500.0,NEAR BAY --122.4,37.77,52.0,144.0,63.0,1061.0,68.0,4.3958,225000.0,NEAR BAY --122.42,37.77,52.0,759.0,323.0,421.0,255.0,2.0548,162500.0,NEAR BAY --122.42,37.77,52.0,1176.0,493.0,1136.0,436.0,1.375,312500.0,NEAR BAY --122.42,37.76,37.0,1291.0,588.0,1846.0,557.0,1.3365,225000.0,NEAR BAY --122.42,37.77,52.0,2185.0,656.0,1266.0,626.0,2.7794,350000.0,NEAR BAY --122.42,37.77,52.0,4226.0,1315.0,2619.0,1242.0,2.5755,325000.0,NEAR BAY --122.42,37.76,52.0,3587.0,1030.0,2259.0,979.0,2.5403,250000.0,NEAR BAY --122.43,37.77,52.0,2714.0,779.0,1438.0,733.0,3.6031,275000.0,NEAR BAY --122.43,37.76,52.0,1582.0,353.0,868.0,329.0,3.8261,250000.0,NEAR BAY --122.43,37.76,52.0,2250.0,566.0,1051.0,562.0,2.8458,350000.0,NEAR BAY --122.44,37.76,52.0,2959.0,683.0,1145.0,666.0,4.2222,361600.0,NEAR BAY --122.44,37.76,30.0,5089.0,1210.0,1935.0,1139.0,4.6053,386100.0,NEAR BAY --122.44,37.75,28.0,4930.0,1381.0,2232.0,1321.0,4.3232,316200.0,NEAR BAY --122.44,37.76,35.0,1581.0,422.0,580.0,388.0,4.05,423100.0,NEAR BAY --122.44,37.76,50.0,2589.0,569.0,945.0,544.0,5.2519,376600.0,NEAR BAY --122.45,37.76,51.0,2564.0,457.0,810.0,442.0,5.6235,500001.0,NEAR BAY --122.44,37.76,52.0,1968.0,472.0,784.0,430.0,3.3702,370000.0,NEAR BAY --122.44,37.76,52.0,2110.0,454.0,816.0,438.0,3.9079,370000.0,NEAR BAY --122.44,37.76,52.0,2509.0,496.0,855.0,478.0,5.0731,405400.0,NEAR BAY --122.43,37.76,52.0,3771.0,1017.0,1575.0,921.0,3.5655,427300.0,NEAR BAY --122.43,37.76,52.0,2242.0,459.0,751.0,464.0,4.75,500001.0,NEAR BAY --122.43,37.76,52.0,2356.0,501.0,909.0,481.0,4.2569,455400.0,NEAR BAY --122.43,37.76,52.0,3708.0,849.0,1531.0,822.0,3.3565,386400.0,NEAR BAY --122.42,37.76,52.0,4407.0,1192.0,2280.0,1076.0,3.3937,270000.0,NEAR BAY --122.42,37.76,52.0,4001.0,1084.0,2129.0,1037.0,3.5052,391200.0,NEAR BAY --122.42,37.76,52.0,2088.0,487.0,1082.0,488.0,2.6803,490000.0,NEAR BAY --122.42,37.76,52.0,1190.0,400.0,1270.0,332.0,2.0329,225000.0,NEAR BAY --122.42,37.76,52.0,2038.0,629.0,2007.0,596.0,2.5701,266700.0,NEAR BAY --122.42,37.76,52.0,1494.0,610.0,1630.0,590.0,1.65,265000.0,NEAR BAY --122.42,37.76,46.0,2150.0,817.0,2075.0,807.0,1.3824,212500.0,NEAR BAY --122.42,37.75,52.0,1855.0,611.0,1715.0,614.0,2.1289,250000.0,NEAR BAY --122.42,37.75,52.0,1207.0,302.0,1008.0,269.0,3.3816,262500.0,NEAR BAY --122.42,37.75,52.0,801.0,272.0,639.0,259.0,2.1971,275000.0,NEAR BAY --122.42,37.75,52.0,1609.0,510.0,1155.0,439.0,2.2328,250000.0,NEAR BAY --122.42,37.75,52.0,1974.0,525.0,935.0,465.0,2.7173,300000.0,NEAR BAY --122.42,37.75,52.0,2112.0,528.0,1227.0,513.0,3.5536,400000.0,NEAR BAY --122.42,37.75,52.0,2708.0,762.0,1460.0,741.0,2.9052,400000.0,NEAR BAY --122.42,37.75,52.0,1564.0,396.0,1162.0,374.0,3.0,275000.0,NEAR BAY --122.43,37.75,52.0,2700.0,595.0,1181.0,575.0,3.575,396800.0,NEAR BAY --122.43,37.75,52.0,1970.0,495.0,871.0,474.0,4.0625,355600.0,NEAR BAY --122.43,37.75,52.0,2459.0,507.0,1012.0,475.0,4.0568,387900.0,NEAR BAY --122.43,37.76,52.0,2332.0,434.0,861.0,406.0,4.4318,437500.0,NEAR BAY --122.43,37.75,52.0,2285.0,509.0,839.0,456.0,4.7946,355600.0,NEAR BAY --122.44,37.75,52.0,3114.0,637.0,1144.0,591.0,4.0,375000.0,NEAR BAY --122.44,37.75,52.0,2082.0,425.0,801.0,411.0,4.2708,368900.0,NEAR BAY --122.43,37.75,52.0,2721.0,581.0,1043.0,519.0,3.7545,383700.0,NEAR BAY --122.44,37.75,46.0,1519.0,291.0,573.0,289.0,4.2667,338800.0,NEAR BAY --122.44,37.75,52.0,1573.0,334.0,725.0,338.0,5.0505,380400.0,NEAR BAY --122.43,37.75,52.0,1615.0,393.0,633.0,378.0,3.5114,347500.0,NEAR BAY --122.43,37.75,52.0,3521.0,767.0,1415.0,687.0,4.875,362200.0,NEAR BAY --122.43,37.75,52.0,2960.0,623.0,1191.0,589.0,3.95,347700.0,NEAR BAY --122.42,37.75,52.0,2164.0,533.0,1122.0,469.0,3.2632,306000.0,NEAR BAY --122.42,37.74,52.0,2713.0,624.0,1370.0,594.0,4.6547,325700.0,NEAR BAY --122.42,37.74,52.0,1786.0,427.0,856.0,394.0,3.0833,328100.0,NEAR BAY --122.43,37.74,52.0,2229.0,498.0,1079.0,472.0,5.0196,324300.0,NEAR BAY --122.43,37.75,52.0,2155.0,468.0,962.0,490.0,3.775,325900.0,NEAR BAY --122.43,37.75,40.0,4850.0,977.0,1824.0,952.0,5.0519,356100.0,NEAR BAY --122.44,37.75,21.0,5457.0,1247.0,2304.0,1180.0,4.5469,409700.0,NEAR BAY --122.44,37.74,23.0,6291.0,1269.0,2818.0,1198.0,4.2672,391900.0,NEAR BAY --122.44,37.74,52.0,2074.0,366.0,909.0,394.0,4.8382,294900.0,NEAR BAY --122.44,37.74,23.0,184.0,44.0,118.0,40.0,4.5375,350000.0,NEAR BAY --122.43,37.74,52.0,3328.0,653.0,1260.0,614.0,4.7437,331000.0,NEAR BAY --122.43,37.74,52.0,2637.0,539.0,1159.0,497.0,3.8846,333100.0,NEAR BAY --122.43,37.74,52.0,1514.0,314.0,724.0,301.0,5.3292,300900.0,NEAR BAY --122.43,37.73,52.0,1142.0,224.0,494.0,206.0,5.0602,298900.0,NEAR BAY --122.43,37.73,52.0,1029.0,205.0,461.0,212.0,5.0782,310800.0,NEAR BAY --122.38,37.76,52.0,248.0,68.0,124.0,51.0,1.4886,450000.0,NEAR BAY --122.39,37.76,52.0,624.0,170.0,410.0,148.0,4.0042,208300.0,NEAR BAY --122.39,37.76,52.0,157.0,28.0,88.0,27.0,3.675,162500.0,NEAR BAY --122.39,37.76,52.0,1877.0,427.0,712.0,398.0,3.9722,290900.0,NEAR BAY --122.39,37.76,52.0,2316.0,468.0,1047.0,476.0,4.5057,321600.0,NEAR BAY --122.39,37.76,52.0,3390.0,691.0,1645.0,596.0,3.7051,253700.0,NEAR BAY --122.4,37.75,44.0,6848.0,1584.0,3269.0,1383.0,2.8679,243300.0,NEAR BAY --122.4,37.76,52.0,4265.0,912.0,1555.0,836.0,4.119,298300.0,NEAR BAY --122.4,37.76,52.0,1495.0,311.0,506.0,275.0,4.4375,320000.0,NEAR BAY --122.4,37.76,52.0,1185.0,246.0,480.0,253.0,4.4074,277300.0,NEAR BAY --122.41,37.76,52.0,1427.0,281.0,620.0,236.0,1.9944,262500.0,NEAR BAY --122.4,37.76,52.0,1529.0,385.0,1347.0,348.0,2.9312,239100.0,NEAR BAY --122.41,37.76,52.0,3452.0,784.0,2987.0,753.0,2.8135,260300.0,NEAR BAY --122.41,37.76,52.0,2064.0,496.0,1726.0,466.0,3.4028,233300.0,NEAR BAY --122.41,37.76,52.0,492.0,139.0,316.0,168.0,3.0865,225000.0,NEAR BAY --122.41,37.76,52.0,351.0,81.0,308.0,75.0,2.6667,325000.0,NEAR BAY --122.41,37.76,52.0,2479.0,515.0,1816.0,496.0,3.0774,300000.0,NEAR BAY --122.41,37.76,52.0,2605.0,678.0,2071.0,611.0,3.2964,265000.0,NEAR BAY --122.4,37.75,52.0,1182.0,307.0,1029.0,306.0,2.0577,214600.0,NEAR BAY --122.41,37.75,52.0,1057.0,276.0,837.0,292.0,2.4531,229000.0,NEAR BAY --122.41,37.75,52.0,1919.0,404.0,1483.0,421.0,3.4063,253900.0,NEAR BAY --122.41,37.75,52.0,1892.0,415.0,1442.0,371.0,4.2891,230000.0,NEAR BAY --122.41,37.75,52.0,1678.0,386.0,1220.0,357.0,2.5809,255300.0,NEAR BAY --122.41,37.75,52.0,2164.0,606.0,2034.0,513.0,2.0325,178100.0,NEAR BAY --122.41,37.75,52.0,2452.0,623.0,1932.0,549.0,2.3903,236100.0,NEAR BAY --122.41,37.75,9.0,1282.0,334.0,1176.0,305.0,2.6538,206300.0,NEAR BAY --122.39,37.74,42.0,4110.0,846.0,2147.0,674.0,2.5694,201000.0,NEAR BAY --122.39,37.73,43.0,4864.0,972.0,3134.0,959.0,4.3393,217300.0,NEAR BAY --122.4,37.73,45.0,3490.0,712.0,2337.0,781.0,3.4472,225400.0,NEAR BAY --122.4,37.74,45.0,2462.0,509.0,1587.0,450.0,2.59,211800.0,NEAR BAY --122.38,37.73,18.0,4037.0,990.0,2722.0,834.0,1.4282,140400.0,NEAR BAY --122.38,37.73,15.0,6804.0,1664.0,4737.0,1581.0,1.4133,203400.0,NEAR BAY --122.39,37.74,45.0,1462.0,308.0,924.0,302.0,2.1767,185300.0,NEAR BAY --122.38,37.73,20.0,120.0,27.0,55.0,19.0,2.625,187500.0,NEAR BAY --122.38,37.73,40.0,543.0,,259.0,89.0,2.2167,193800.0,NEAR BAY --122.38,37.73,38.0,1388.0,276.0,871.0,265.0,2.1667,193800.0,NEAR BAY --122.39,37.73,46.0,1517.0,299.0,879.0,309.0,2.2222,195100.0,NEAR BAY --122.39,37.73,52.0,1931.0,329.0,1025.0,293.0,2.9063,192000.0,NEAR BAY --122.39,37.73,52.0,1070.0,224.0,567.0,207.0,2.8603,189000.0,NEAR BAY --122.4,37.73,48.0,1489.0,326.0,1115.0,356.0,2.6364,199300.0,NEAR BAY --122.39,37.72,28.0,1609.0,340.0,1064.0,290.0,1.1125,206300.0,NEAR BAY --122.39,37.72,45.0,2893.0,570.0,1923.0,535.0,3.6607,192300.0,NEAR BAY --122.39,37.72,52.0,135.0,34.0,93.0,26.0,2.1484,181300.0,NEAR BAY --122.41,37.75,52.0,3065.0,622.0,1405.0,606.0,3.7813,275900.0,NEAR BAY --122.41,37.74,38.0,1754.0,382.0,928.0,354.0,4.1417,270800.0,NEAR BAY --122.41,37.74,34.0,1403.0,262.0,839.0,255.0,4.7031,255200.0,NEAR BAY --122.41,37.75,52.0,2524.0,559.0,1430.0,476.0,3.4073,254700.0,NEAR BAY --122.41,37.75,52.0,2515.0,576.0,1209.0,540.0,3.5912,284900.0,NEAR BAY --122.41,37.74,48.0,409.0,86.0,148.0,70.0,3.6687,335000.0,NEAR BAY --122.41,37.74,52.0,831.0,175.0,415.0,159.0,1.9464,249000.0,NEAR BAY --122.41,37.74,52.0,1842.0,339.0,1032.0,357.0,5.5563,250800.0,NEAR BAY --122.42,37.74,52.0,2019.0,418.0,999.0,448.0,4.2212,271300.0,NEAR BAY --122.42,37.74,52.0,1916.0,432.0,889.0,424.0,4.0391,279900.0,NEAR BAY --122.42,37.74,52.0,1674.0,346.0,734.0,335.0,3.8864,281300.0,NEAR BAY --122.42,37.74,52.0,1271.0,353.0,1076.0,324.0,2.9911,263900.0,NEAR BAY --122.42,37.75,52.0,2163.0,607.0,1447.0,546.0,3.3555,275000.0,NEAR BAY --122.41,37.74,43.0,1663.0,330.0,935.0,335.0,4.1552,240900.0,NEAR BAY --122.41,37.74,47.0,1728.0,398.0,1178.0,315.0,3.2813,229600.0,NEAR BAY --122.41,37.74,52.0,2058.0,399.0,1208.0,399.0,3.6429,230000.0,NEAR BAY --122.42,37.73,50.0,3426.0,769.0,2261.0,671.0,2.888,246400.0,NEAR BAY --122.42,37.74,52.0,1651.0,351.0,973.0,366.0,3.4583,240900.0,NEAR BAY --122.42,37.74,52.0,2084.0,550.0,1438.0,516.0,2.3087,258600.0,NEAR BAY --122.42,37.74,52.0,1540.0,370.0,1136.0,363.0,4.3125,243000.0,NEAR BAY --122.42,37.73,52.0,3230.0,654.0,1765.0,611.0,3.3333,292300.0,NEAR BAY --122.43,37.73,52.0,1583.0,347.0,935.0,341.0,4.6786,263200.0,NEAR BAY --122.43,37.73,49.0,1435.0,322.0,1008.0,329.0,4.0,264000.0,NEAR BAY --122.43,37.73,52.0,1386.0,276.0,729.0,274.0,3.6694,275500.0,NEAR BAY --122.43,37.72,48.0,1289.0,280.0,782.0,235.0,3.6719,259800.0,NEAR BAY --122.44,37.72,52.0,1775.0,347.0,1102.0,367.0,4.3125,267200.0,NEAR BAY --122.44,37.73,52.0,2381.0,492.0,1485.0,447.0,4.3898,270000.0,NEAR BAY --122.44,37.73,52.0,866.0,205.0,587.0,171.0,5.0224,261900.0,NEAR BAY --122.42,37.73,46.0,1819.0,411.0,1534.0,406.0,4.0132,229400.0,NEAR BAY --122.42,37.73,35.0,1871.0,342.0,1055.0,310.0,4.625,279300.0,NEAR BAY --122.42,37.73,35.0,1791.0,322.0,988.0,304.0,4.5769,254500.0,NEAR BAY --122.43,37.73,52.0,1985.0,401.0,1337.0,424.0,4.1071,240900.0,NEAR BAY --122.41,37.73,42.0,2604.0,573.0,1703.0,507.0,3.4231,230200.0,NEAR BAY --122.4,37.73,50.0,1947.0,411.0,1170.0,384.0,3.4769,238700.0,NEAR BAY --122.4,37.73,42.0,1413.0,406.0,1027.0,362.0,2.3625,233000.0,NEAR BAY --122.41,37.73,52.0,1931.0,358.0,1092.0,356.0,3.7835,271300.0,NEAR BAY --122.41,37.73,41.0,2115.0,378.0,1168.0,365.0,4.0642,272500.0,NEAR BAY --122.42,37.73,48.0,1474.0,308.0,998.0,330.0,4.0781,250300.0,NEAR BAY --122.4,37.72,47.0,1465.0,306.0,1119.0,315.0,4.2672,219400.0,NEAR BAY --122.4,37.72,37.0,971.0,248.0,647.0,208.0,2.1187,239300.0,NEAR BAY --122.41,37.73,33.0,2789.0,567.0,1682.0,552.0,3.8643,276200.0,NEAR BAY --122.41,37.72,35.0,2104.0,434.0,1225.0,410.0,4.8214,242900.0,NEAR BAY --122.41,37.72,32.0,1650.0,316.0,904.0,295.0,4.0583,236200.0,NEAR BAY --122.42,37.72,37.0,2638.0,546.0,1789.0,521.0,4.0071,244700.0,NEAR BAY --122.43,37.72,50.0,2912.0,562.0,1989.0,537.0,3.6667,252600.0,NEAR BAY --122.43,37.72,49.0,3427.0,696.0,2363.0,661.0,3.6885,254000.0,NEAR BAY --122.43,37.72,52.0,2206.0,478.0,1583.0,456.0,3.7105,250500.0,NEAR BAY --122.44,37.72,52.0,2890.0,571.0,1769.0,541.0,3.8274,252000.0,NEAR BAY --122.43,37.72,52.0,3351.0,719.0,2101.0,706.0,3.0107,242000.0,NEAR BAY --122.43,37.73,52.0,3602.0,738.0,2270.0,647.0,3.8934,251800.0,NEAR BAY --122.43,37.73,52.0,1494.0,306.0,1463.0,360.0,3.1786,222600.0,NEAR BAY --122.44,37.72,49.0,1557.0,405.0,1173.0,385.0,3.4605,265000.0,NEAR BAY --122.44,37.72,48.0,2675.0,585.0,1773.0,540.0,3.9565,268500.0,NEAR BAY --122.45,37.72,52.0,1729.0,319.0,890.0,300.0,4.3036,261800.0,NEAR BAY --122.44,37.72,52.0,1380.0,272.0,847.0,284.0,3.7143,260000.0,NEAR BAY --122.45,37.71,46.0,2559.0,506.0,1562.0,498.0,4.3846,270600.0,NEAR OCEAN --122.45,37.71,52.0,1658.0,322.0,1086.0,326.0,3.8583,261600.0,NEAR OCEAN --122.45,37.71,41.0,1578.0,351.0,1159.0,299.0,3.9167,243600.0,NEAR OCEAN --122.46,37.71,52.0,1580.0,337.0,1425.0,330.0,4.0547,246200.0,NEAR OCEAN --122.46,37.71,47.0,1527.0,283.0,1102.0,282.0,4.0,231600.0,NEAR OCEAN --122.43,37.71,35.0,2878.0,564.0,1633.0,528.0,4.5,266900.0,NEAR BAY --122.43,37.71,52.0,1508.0,278.0,1138.0,304.0,4.0234,266500.0,NEAR BAY --122.43,37.71,52.0,1410.0,286.0,879.0,282.0,3.1908,255600.0,NEAR BAY --122.44,37.72,52.0,1507.0,282.0,929.0,281.0,3.8958,247700.0,NEAR BAY --122.44,37.71,52.0,2711.0,591.0,1848.0,524.0,3.9567,251500.0,NEAR BAY --122.44,37.71,46.0,1230.0,247.0,895.0,257.0,5.3913,248900.0,NEAR BAY --122.44,37.71,31.0,2370.0,441.0,1524.0,470.0,5.0201,264100.0,NEAR BAY --122.45,37.71,34.0,3131.0,669.0,2204.0,600.0,3.5536,251000.0,NEAR OCEAN --122.4,37.72,40.0,1948.0,413.0,1434.0,396.0,3.0313,219100.0,NEAR BAY --122.4,37.71,40.0,1883.0,397.0,1411.0,438.0,3.0469,238000.0,NEAR BAY --122.41,37.71,47.0,2289.0,481.0,1697.0,465.0,3.4773,226300.0,NEAR BAY --122.41,37.71,28.0,5015.0,1240.0,3900.0,1029.0,1.2269,181900.0,NEAR BAY --122.41,37.71,40.0,2054.0,433.0,1738.0,429.0,4.9926,213900.0,NEAR BAY --122.41,37.71,49.0,1852.0,429.0,1615.0,447.0,3.495,217800.0,NEAR BAY --122.4,37.72,41.0,1975.0,440.0,1528.0,424.0,3.8625,218300.0,NEAR BAY --122.4,37.72,47.0,1167.0,250.0,953.0,253.0,4.2727,241900.0,NEAR BAY --122.45,37.77,52.0,2602.0,,1330.0,647.0,3.5435,278600.0,NEAR BAY --122.46,37.76,52.0,2236.0,545.0,1186.0,532.0,3.4531,414300.0,NEAR BAY --122.46,37.77,52.0,1824.0,388.0,799.0,363.0,3.75,435700.0,NEAR BAY --122.46,37.76,52.0,1817.0,449.0,948.0,380.0,3.93,390000.0,NEAR BAY --122.45,37.76,31.0,5283.0,1330.0,2659.0,1269.0,3.5744,500000.0,NEAR BAY --122.46,37.76,28.0,1072.0,165.0,363.0,168.0,6.1636,367700.0,NEAR BAY --122.46,37.75,26.0,2192.0,438.0,954.0,456.0,4.5352,374200.0,NEAR BAY --122.47,37.76,52.0,2941.0,783.0,1545.0,726.0,2.9899,406500.0,NEAR BAY --122.47,37.76,52.0,2680.0,740.0,1587.0,713.0,2.5933,359600.0,NEAR BAY --122.47,37.76,49.0,2842.0,670.0,1396.0,648.0,3.2679,345700.0,NEAR BAY --122.47,37.76,52.0,2465.0,489.0,1170.0,498.0,4.0793,306700.0,NEAR BAY --122.47,37.76,48.0,2064.0,484.0,1055.0,467.0,2.8711,329600.0,NEAR BAY --122.47,37.76,40.0,3525.0,941.0,1675.0,857.0,3.2083,330000.0,NEAR BAY --122.47,37.76,52.0,4001.0,809.0,1886.0,756.0,3.3239,350000.0,NEAR BAY --122.47,37.76,39.0,3200.0,689.0,1391.0,618.0,3.6346,338000.0,NEAR BAY --122.47,37.75,45.0,2399.0,426.0,911.0,423.0,4.4312,361000.0,NEAR BAY --122.47,37.75,51.0,2413.0,431.0,1095.0,437.0,4.0089,357000.0,NEAR BAY --122.47,37.75,49.0,2747.0,472.0,1281.0,448.0,5.482,366300.0,NEAR BAY --122.47,37.76,34.0,2807.0,487.0,1152.0,445.0,5.1893,420300.0,NEAR BAY --122.47,37.76,48.0,2464.0,459.0,1179.0,458.0,4.4946,358600.0,NEAR BAY --122.46,37.75,52.0,1590.0,236.0,622.0,232.0,5.8151,500001.0,NEAR BAY --122.46,37.75,52.0,1207.0,152.0,465.0,162.0,10.7569,500001.0,NEAR BAY --122.47,37.75,51.0,2713.0,396.0,1090.0,401.0,9.3603,500001.0,NEAR BAY --122.47,37.75,46.0,3238.0,544.0,1293.0,470.0,6.1592,381700.0,NEAR BAY --122.47,37.75,52.0,1598.0,285.0,689.0,265.0,4.6071,337400.0,NEAR BAY --122.47,37.74,52.0,1538.0,305.0,819.0,319.0,4.0846,333600.0,NEAR BAY --122.45,37.75,36.0,2303.0,381.0,862.0,371.0,6.0274,349000.0,NEAR BAY --122.45,37.75,36.0,1997.0,356.0,772.0,348.0,4.95,322600.0,NEAR BAY --122.45,37.75,35.0,1363.0,302.0,1786.0,301.0,3.0804,313400.0,NEAR BAY --122.46,37.75,52.0,1849.0,287.0,695.0,258.0,6.5372,394000.0,NEAR BAY --122.45,37.74,52.0,1596.0,276.0,642.0,273.0,4.375,349500.0,NEAR BAY --122.46,37.74,51.0,1905.0,291.0,707.0,284.0,6.2561,431000.0,NEAR BAY --122.45,37.74,46.0,6429.0,1093.0,2535.0,1109.0,5.0887,335100.0,NEAR BAY --122.44,37.73,43.0,3700.0,684.0,1488.0,623.0,5.5622,313600.0,NEAR BAY --122.45,37.74,38.0,5688.0,930.0,2263.0,908.0,6.203,346800.0,NEAR BAY --122.46,37.74,52.0,2180.0,326.0,856.0,326.0,5.3961,416900.0,NEAR BAY --122.46,37.74,52.0,2053.0,281.0,791.0,287.0,10.959,500001.0,NEAR BAY --122.47,37.74,52.0,2055.0,265.0,735.0,252.0,8.1189,500001.0,NEAR BAY --122.47,37.74,52.0,3797.0,668.0,1633.0,658.0,5.6787,363600.0,NEAR BAY --122.47,37.74,52.0,3688.0,640.0,1605.0,567.0,4.9537,365600.0,NEAR BAY --122.46,37.73,52.0,2673.0,349.0,876.0,338.0,7.8476,500001.0,NEAR BAY --122.46,37.73,52.0,3547.0,506.0,1276.0,491.0,8.0069,426800.0,NEAR BAY --122.46,37.72,52.0,2951.0,406.0,1115.0,397.0,6.7228,405200.0,NEAR OCEAN --122.47,37.73,52.0,2134.0,277.0,936.0,285.0,5.9245,484600.0,NEAR OCEAN --122.47,37.73,52.0,2151.0,280.0,762.0,274.0,10.7309,500001.0,NEAR OCEAN --122.47,37.73,50.0,1653.0,252.0,641.0,224.0,10.6605,500001.0,NEAR OCEAN --122.47,37.72,46.0,1836.0,319.0,767.0,302.0,5.9114,399000.0,NEAR OCEAN --122.46,37.73,52.0,2401.0,346.0,812.0,328.0,6.8322,394100.0,NEAR BAY --122.45,37.73,52.0,2510.0,438.0,1153.0,407.0,5.1238,335100.0,NEAR BAY --122.46,37.73,52.0,2857.0,469.0,1431.0,496.0,5.2088,344200.0,NEAR BAY --122.44,37.73,39.0,1912.0,,970.0,406.0,4.7813,275500.0,NEAR BAY --122.44,37.73,52.0,2838.0,567.0,1411.0,526.0,3.8304,261400.0,NEAR BAY --122.45,37.73,52.0,1350.0,241.0,752.0,246.0,3.2448,266200.0,NEAR BAY --122.45,37.73,52.0,2035.0,424.0,1193.0,430.0,5.0634,264200.0,NEAR BAY --122.44,37.73,46.0,3581.0,758.0,1670.0,703.0,4.1932,269200.0,NEAR BAY --122.45,37.72,52.0,982.0,197.0,653.0,171.0,4.2167,231900.0,NEAR BAY --122.45,37.72,46.0,1406.0,235.0,771.0,239.0,4.7143,219300.0,NEAR BAY --122.45,37.72,47.0,1773.0,345.0,1083.0,315.0,4.475,221200.0,NEAR BAY --122.45,37.72,51.0,2690.0,554.0,1795.0,539.0,3.6581,225000.0,NEAR BAY --122.46,37.72,47.0,1723.0,389.0,1216.0,399.0,3.3208,238600.0,NEAR OCEAN --122.46,37.72,49.0,1207.0,255.0,658.0,220.0,4.0859,228600.0,NEAR OCEAN --122.46,37.72,48.0,1690.0,339.0,962.0,317.0,3.2875,221500.0,NEAR OCEAN --122.46,37.72,45.0,2399.0,419.0,1225.0,399.0,4.0855,244100.0,NEAR OCEAN --122.46,37.72,39.0,2254.0,,1388.0,404.0,2.9688,232000.0,NEAR OCEAN --122.47,37.71,44.0,2547.0,511.0,1577.0,516.0,4.1939,237900.0,NEAR OCEAN --122.47,37.71,42.0,1961.0,427.0,1211.0,409.0,3.5156,239400.0,NEAR OCEAN --122.47,37.72,43.0,968.0,199.0,434.0,162.0,2.5333,239300.0,NEAR OCEAN --122.47,37.72,46.0,1453.0,306.0,817.0,310.0,3.0,246700.0,NEAR OCEAN --122.47,37.72,49.0,1690.0,307.0,770.0,294.0,4.5913,259700.0,NEAR OCEAN --122.45,37.72,45.0,964.0,173.0,613.0,201.0,2.9119,228900.0,NEAR BAY --122.45,37.71,45.0,2253.0,431.0,1382.0,392.0,4.2562,221600.0,NEAR OCEAN --122.46,37.71,52.0,1642.0,351.0,1138.0,340.0,4.1406,219500.0,NEAR OCEAN --122.46,37.71,49.0,1711.0,348.0,1138.0,325.0,2.875,225000.0,NEAR OCEAN --122.46,37.72,37.0,1833.0,388.0,1093.0,363.0,3.0703,211800.0,NEAR OCEAN --122.48,37.76,48.0,2660.0,616.0,1491.0,602.0,3.9758,348600.0,NEAR BAY --122.48,37.76,48.0,2304.0,558.0,1273.0,512.0,3.275,332100.0,NEAR BAY --122.48,37.76,52.0,2684.0,574.0,1395.0,549.0,3.9097,323800.0,NEAR BAY --122.48,37.76,50.0,2236.0,484.0,1171.0,467.0,4.0977,322100.0,NEAR BAY --122.48,37.76,52.0,1845.0,336.0,1015.0,337.0,4.1397,331300.0,NEAR BAY --122.48,37.76,52.0,3260.0,653.0,1594.0,632.0,4.4094,336100.0,NEAR BAY --122.49,37.76,52.0,1382.0,230.0,708.0,279.0,5.8096,339800.0,NEAR BAY --122.49,37.76,52.0,2564.0,502.0,1092.0,459.0,3.5302,329600.0,NEAR BAY --122.49,37.76,52.0,2245.0,425.0,1091.0,409.0,3.5909,331200.0,NEAR BAY --122.49,37.76,52.0,1792.0,305.0,782.0,287.0,4.0391,332700.0,NEAR BAY --122.49,37.76,48.0,1351.0,270.0,650.0,265.0,3.5278,339800.0,NEAR BAY --122.49,37.76,49.0,1724.0,295.0,795.0,297.0,4.3977,353600.0,NEAR BAY --122.49,37.76,49.0,1637.0,304.0,729.0,281.0,4.3281,323100.0,NEAR BAY --122.48,37.75,51.0,2095.0,410.0,1126.0,429.0,4.4,318400.0,NEAR BAY --122.48,37.75,52.0,2515.0,494.0,1583.0,477.0,4.3393,317600.0,NEAR BAY --122.48,37.74,52.0,2453.0,508.0,1056.0,453.0,3.6859,311800.0,NEAR OCEAN --122.48,37.75,49.0,2203.0,407.0,1052.0,405.0,4.4375,329200.0,NEAR BAY --122.48,37.75,48.0,2555.0,548.0,1285.0,482.0,3.7734,314700.0,NEAR BAY --122.48,37.75,52.0,2074.0,401.0,1136.0,409.0,4.7703,331000.0,NEAR BAY --122.49,37.75,48.0,2181.0,419.0,1041.0,379.0,3.7361,320200.0,NEAR OCEAN --122.49,37.75,47.0,2140.0,425.0,1105.0,401.0,3.7054,308500.0,NEAR OCEAN --122.49,37.75,45.0,2341.0,461.0,1092.0,438.0,4.8036,297800.0,NEAR OCEAN --122.49,37.75,43.0,2044.0,393.0,979.0,378.0,3.9205,319100.0,NEAR OCEAN --122.49,37.75,48.0,2387.0,424.0,1041.0,408.0,3.7562,321200.0,NEAR OCEAN --122.49,37.75,52.0,2226.0,385.0,1177.0,416.0,4.8516,323800.0,NEAR OCEAN --122.49,37.74,52.0,2189.0,433.0,1147.0,420.0,3.4583,321300.0,NEAR OCEAN --122.48,37.74,52.0,2285.0,435.0,1211.0,442.0,4.0208,323100.0,NEAR OCEAN --122.48,37.74,52.0,2166.0,423.0,1072.0,370.0,4.131,314300.0,NEAR OCEAN --122.48,37.74,52.0,2841.0,517.0,1372.0,517.0,3.9236,335000.0,NEAR OCEAN --122.49,37.73,48.0,1190.0,182.0,497.0,199.0,6.2642,438500.0,NEAR OCEAN --122.49,37.74,48.0,1186.0,213.0,487.0,207.0,3.8333,340800.0,NEAR OCEAN --122.49,37.74,52.0,2442.0,449.0,1188.0,436.0,4.3909,317700.0,NEAR OCEAN --122.49,37.74,52.0,2302.0,457.0,1154.0,424.0,4.5744,315200.0,NEAR OCEAN --122.48,37.73,52.0,1597.0,240.0,566.0,231.0,5.1681,500001.0,NEAR OCEAN --122.48,37.73,47.0,2382.0,392.0,867.0,376.0,5.2598,371500.0,NEAR OCEAN --122.49,37.73,39.0,1937.0,336.0,742.0,307.0,5.1991,369400.0,NEAR OCEAN --122.49,37.73,37.0,1399.0,224.0,530.0,235.0,3.9219,433300.0,NEAR OCEAN --122.49,37.73,36.0,1821.0,292.0,742.0,298.0,5.6204,406200.0,NEAR OCEAN --122.48,37.73,38.0,3195.0,828.0,2410.0,778.0,3.1359,350000.0,NEAR OCEAN --122.47,37.72,47.0,1176.0,286.0,564.0,258.0,3.2059,350000.0,NEAR OCEAN --122.48,37.71,43.0,3850.0,1018.0,1497.0,829.0,3.5296,400000.0,NEAR OCEAN --122.48,37.72,45.0,1405.0,338.0,733.0,342.0,4.1116,187500.0,NEAR OCEAN --122.48,37.72,46.0,2403.0,638.0,1281.0,603.0,3.2321,112500.0,NEAR OCEAN --122.5,37.76,52.0,2018.0,422.0,1142.0,463.0,3.7083,307700.0,NEAR OCEAN --122.5,37.76,43.0,2108.0,456.0,1299.0,447.0,3.1406,316200.0,NEAR OCEAN --122.5,37.76,50.0,1993.0,410.0,1009.0,374.0,3.9464,295600.0,NEAR OCEAN --122.5,37.76,48.0,1408.0,295.0,891.0,269.0,3.8333,296300.0,NEAR OCEAN --122.5,37.76,46.0,1491.0,285.0,841.0,306.0,4.5329,278800.0,NEAR OCEAN --122.5,37.75,45.0,1672.0,344.0,838.0,314.0,4.1419,291500.0,NEAR OCEAN --122.5,37.75,43.0,2373.0,481.0,1247.0,454.0,4.0985,283200.0,NEAR OCEAN --122.51,37.76,43.0,2345.0,624.0,1439.0,614.0,2.8448,268900.0,NEAR OCEAN --122.51,37.76,43.0,2527.0,619.0,1332.0,558.0,3.0465,274200.0,NEAR OCEAN --122.51,37.76,40.0,2320.0,562.0,1499.0,521.0,3.2792,260800.0,NEAR OCEAN --122.5,37.76,46.0,2226.0,480.0,1272.0,468.0,4.2644,284100.0,NEAR OCEAN --122.5,37.76,45.0,1673.0,377.0,1078.0,393.0,3.3393,272300.0,NEAR OCEAN --122.5,37.75,45.0,1620.0,,941.0,328.0,4.3859,270200.0,NEAR OCEAN --122.5,37.75,44.0,1819.0,,1137.0,354.0,3.4919,271800.0,NEAR OCEAN --122.54,37.76,45.0,1592.0,325.0,920.0,322.0,3.96,272200.0,NEAR OCEAN --122.5,37.75,44.0,1739.0,343.0,872.0,330.0,2.9632,286300.0,NEAR OCEAN --122.5,37.74,40.0,2310.0,445.0,1266.0,490.0,3.7969,297800.0,NEAR OCEAN --122.5,37.74,45.0,1771.0,349.0,1098.0,342.0,3.7552,296600.0,NEAR OCEAN --122.49,37.74,44.0,1472.0,275.0,820.0,310.0,5.6826,300000.0,NEAR OCEAN --122.5,37.74,44.0,2374.0,496.0,1087.0,426.0,3.5,275700.0,NEAR OCEAN --122.5,37.74,44.0,2527.0,518.0,1434.0,444.0,3.875,275700.0,NEAR OCEAN --122.5,37.75,46.0,2298.0,457.0,1429.0,477.0,4.0217,272400.0,NEAR OCEAN --122.5,37.74,44.0,2792.0,615.0,1640.0,579.0,4.0625,272800.0,NEAR OCEAN --122.5,37.74,42.0,1667.0,395.0,1041.0,387.0,3.9583,273700.0,NEAR OCEAN --122.5,37.74,44.0,2082.0,470.0,1154.0,403.0,4.3611,268100.0,NEAR OCEAN --122.54,37.74,42.0,2006.0,415.0,1230.0,435.0,4.1786,271100.0,NEAR OCEAN --122.46,37.79,52.0,2005.0,359.0,847.0,356.0,4.1029,500001.0,NEAR BAY --122.46,37.78,52.0,2165.0,580.0,1067.0,530.0,2.9293,350000.0,NEAR BAY --122.46,37.78,52.0,2594.0,622.0,1421.0,593.0,3.0265,350000.0,NEAR BAY --122.46,37.79,52.0,2059.0,416.0,999.0,402.0,3.7419,500001.0,NEAR BAY --122.46,37.78,52.0,3429.0,773.0,1584.0,696.0,3.7887,500001.0,NEAR BAY --122.47,37.78,51.0,1485.0,386.0,880.0,385.0,2.7431,307100.0,NEAR BAY --122.47,37.78,52.0,2635.0,587.0,1302.0,577.0,3.7292,416700.0,NEAR BAY --122.47,37.79,52.0,2844.0,623.0,1380.0,596.0,4.75,500001.0,NEAR BAY --122.47,37.79,52.0,437.0,105.0,194.0,87.0,2.8125,500001.0,NEAR BAY --122.47,37.79,52.0,2383.0,477.0,990.0,464.0,3.9688,483300.0,NEAR BAY --122.47,37.78,52.0,2388.0,507.0,1078.0,494.0,3.5221,443300.0,NEAR BAY --122.47,37.78,52.0,1941.0,436.0,955.0,425.0,4.1339,396400.0,NEAR BAY --122.48,37.78,48.0,2835.0,728.0,1674.0,684.0,3.129,375000.0,NEAR BAY --122.48,37.79,52.0,4683.0,1055.0,2246.0,975.0,4.1148,457800.0,NEAR BAY --122.48,37.78,44.0,3371.0,794.0,1738.0,753.0,3.1653,335300.0,NEAR BAY --122.49,37.78,32.0,3028.0,815.0,1704.0,718.0,3.2028,322900.0,NEAR BAY --122.49,37.78,46.0,3304.0,792.0,1783.0,777.0,3.6148,352200.0,NEAR BAY --122.48,37.79,52.0,1647.0,236.0,546.0,227.0,9.1881,500001.0,NEAR BAY --122.49,37.79,52.0,3146.0,478.0,1143.0,455.0,6.1407,500001.0,NEAR BAY --122.49,37.79,52.0,2488.0,281.0,805.0,295.0,10.7058,500001.0,NEAR BAY --122.46,37.78,52.0,4140.0,984.0,2030.0,892.0,3.4236,376800.0,NEAR BAY --122.46,37.78,52.0,2632.0,542.0,1364.0,544.0,3.4605,441700.0,NEAR BAY --122.46,37.78,52.0,2051.0,552.0,1400.0,510.0,3.2396,375000.0,NEAR BAY --122.46,37.78,52.0,3088.0,727.0,1636.0,662.0,2.8553,360700.0,NEAR BAY --122.46,37.77,52.0,3193.0,688.0,2099.0,681.0,3.9375,402900.0,NEAR BAY --122.47,37.77,52.0,2241.0,443.0,1042.0,377.0,4.1635,398400.0,NEAR BAY --122.47,37.78,52.0,2275.0,412.0,1166.0,424.0,4.0652,421300.0,NEAR BAY --122.47,37.78,52.0,2169.0,522.0,1220.0,505.0,3.1989,446900.0,NEAR BAY --122.47,37.78,52.0,2951.0,647.0,1448.0,591.0,3.1392,422400.0,NEAR BAY --122.47,37.78,52.0,3021.0,569.0,1479.0,514.0,4.0208,414600.0,NEAR BAY --122.47,37.78,52.0,2042.0,378.0,1153.0,408.0,4.1856,404700.0,NEAR BAY --122.47,37.77,52.0,3143.0,635.0,1350.0,623.0,3.8571,366700.0,NEAR BAY --122.48,37.78,52.0,3047.0,641.0,1427.0,620.0,3.4883,337200.0,NEAR BAY --122.48,37.78,52.0,2666.0,515.0,1362.0,494.0,4.218,393800.0,NEAR BAY --122.48,37.77,52.0,2556.0,595.0,1202.0,568.0,3.8899,348500.0,NEAR BAY --122.48,37.78,50.0,2159.0,437.0,1111.0,417.0,3.5588,346400.0,NEAR BAY --122.48,37.78,52.0,2910.0,611.0,1508.0,515.0,3.5865,311400.0,NEAR BAY --122.49,37.78,47.0,2695.0,643.0,1505.0,644.0,3.0877,329100.0,NEAR BAY --122.49,37.78,52.0,3440.0,722.0,1663.0,665.0,3.0278,356300.0,NEAR BAY --122.49,37.77,52.0,2342.0,458.0,1170.0,458.0,3.7036,369200.0,NEAR BAY --122.5,37.77,52.0,2433.0,454.0,1070.0,420.0,4.125,359500.0,NEAR BAY --122.49,37.78,52.0,2050.0,439.0,1109.0,437.0,2.6719,318500.0,NEAR BAY --122.49,37.78,42.0,2723.0,579.0,1419.0,519.0,3.6429,328400.0,NEAR BAY --122.49,37.78,49.0,2176.0,441.0,1040.0,448.0,4.2414,500001.0,NEAR BAY --122.5,37.78,50.0,1922.0,427.0,1049.0,443.0,3.5833,348500.0,NEAR BAY --122.5,37.77,52.0,1769.0,414.0,1032.0,380.0,3.9954,324700.0,NEAR BAY --122.5,37.77,52.0,2299.0,441.0,1252.0,415.0,5.0562,336700.0,NEAR BAY --122.5,37.77,52.0,2739.0,569.0,1312.0,531.0,3.5833,322900.0,NEAR BAY --122.5,37.78,46.0,2646.0,607.0,1418.0,563.0,3.7167,332800.0,NEAR BAY --122.51,37.78,45.0,2564.0,499.0,1056.0,460.0,4.7328,351100.0,NEAR BAY --122.51,37.78,47.0,2496.0,494.0,1201.0,454.0,4.0353,342200.0,NEAR BAY --122.55,37.79,32.0,2131.0,625.0,1229.0,572.0,2.9201,322200.0,NEAR OCEAN --122.47,37.81,45.0,6927.0,1258.0,4715.0,1165.0,3.4051,500001.0,NEAR BAY --122.5,37.79,52.0,8.0,1.0,13.0,1.0,15.0001,500001.0,NEAR BAY --122.54,37.72,17.0,2975.0,968.0,1453.0,828.0,3.527,318900.0,NEAR OCEAN --122.42,37.72,42.0,4219.0,1125.0,3549.0,993.0,1.2387,212800.0,NEAR BAY --122.36,37.72,10.0,479.0,125.0,355.0,108.0,2.7083,180400.0,NEAR BAY --122.39,37.74,52.0,126.0,24.0,37.0,27.0,10.2264,225000.0,NEAR BAY --122.4,37.75,26.0,54.0,9.0,23.0,9.0,6.1359,225000.0,NEAR BAY --122.38,37.71,47.0,1088.0,190.0,558.0,166.0,4.2708,207100.0,NEAR BAY --122.4,37.71,47.0,1649.0,328.0,1183.0,356.0,3.3625,223700.0,NEAR BAY --121.28,37.96,28.0,1942.0,724.0,1618.0,638.0,0.9365,52500.0,INLAND --121.28,37.95,49.0,1200.0,364.0,1448.0,318.0,1.1094,52500.0,INLAND --121.28,37.95,46.0,1026.0,330.0,1109.0,333.0,1.2904,63300.0,INLAND --121.29,37.96,52.0,888.0,324.0,630.0,258.0,1.2411,112500.0,INLAND --121.29,37.96,52.0,287.0,119.0,154.0,85.0,0.8738,75000.0,INLAND --121.29,37.95,16.0,761.0,306.0,438.0,282.0,0.7714,87500.0,INLAND --121.3,37.95,9.0,674.0,242.0,575.0,193.0,2.2024,45000.0,INLAND --121.29,37.95,52.0,107.0,79.0,167.0,53.0,0.7917,22500.0,INLAND --121.3,37.96,24.0,1212.0,366.0,1202.0,343.0,1.7875,76800.0,INLAND --121.31,37.96,48.0,1112.0,227.0,583.0,216.0,2.3393,77600.0,INLAND --121.29,37.97,52.0,1610.0,480.0,1025.0,440.0,1.2962,110200.0,INLAND --121.29,37.96,48.0,1778.0,541.0,1237.0,462.0,1.3438,103100.0,INLAND --121.29,37.96,50.0,1669.0,558.0,1340.0,484.0,1.3191,92300.0,INLAND --121.3,37.96,31.0,2668.0,812.0,1398.0,721.0,1.125,110400.0,INLAND --121.3,37.96,52.0,1475.0,238.0,736.0,260.0,3.6591,105100.0,INLAND --121.3,37.96,52.0,1354.0,314.0,679.0,311.0,1.7788,97400.0,INLAND --121.31,37.96,52.0,2654.0,468.0,1157.0,494.0,3.226,107600.0,INLAND --121.31,37.96,52.0,1829.0,301.0,694.0,319.0,3.3466,92600.0,INLAND --121.28,37.97,47.0,2348.0,507.0,1455.0,479.0,1.65,66000.0,INLAND --121.27,37.96,43.0,1624.0,448.0,1805.0,440.0,1.425,61300.0,INLAND --121.27,37.95,43.0,557.0,165.0,573.0,144.0,1.7212,59000.0,INLAND --121.27,37.95,52.0,1318.0,308.0,1368.0,310.0,1.8261,54600.0,INLAND --121.27,37.94,38.0,512.0,133.0,676.0,124.0,1.7386,52000.0,INLAND --121.28,37.94,44.0,1406.0,357.0,1489.0,386.0,1.4688,56800.0,INLAND --121.28,37.94,48.0,1766.0,444.0,1406.0,421.0,1.7039,52700.0,INLAND --121.29,37.95,52.0,288.0,86.0,272.0,54.0,0.696,42500.0,INLAND --121.29,37.94,40.0,2827.0,655.0,2037.0,574.0,2.0303,63800.0,INLAND --121.32,37.95,40.0,964.0,230.0,742.0,209.0,1.2625,43000.0,INLAND --121.31,37.94,41.0,375.0,108.0,323.0,98.0,1.9531,45000.0,INLAND --121.3,37.94,40.0,452.0,109.0,412.0,97.0,1.3417,60800.0,INLAND --121.3,37.94,52.0,24.0,6.0,23.0,5.0,2.375,67500.0,INLAND --121.32,37.94,36.0,40.0,10.0,64.0,14.0,2.625,55000.0,INLAND --121.31,37.96,52.0,1938.0,332.0,788.0,320.0,3.6094,118400.0,INLAND --121.32,37.96,47.0,1700.0,344.0,922.0,357.0,3.1845,87200.0,INLAND --121.32,37.96,46.0,1832.0,365.0,975.0,373.0,2.0398,88100.0,INLAND --121.33,37.96,42.0,1619.0,340.0,906.0,339.0,2.5488,80300.0,INLAND --121.34,37.96,27.0,1839.0,442.0,2010.0,416.0,2.1284,59400.0,INLAND --121.32,37.95,36.0,747.0,189.0,338.0,145.0,1.7885,62100.0,INLAND --121.32,37.96,5.0,123.0,21.0,50.0,20.0,2.7656,50000.0,INLAND --121.34,37.97,33.0,2493.0,454.0,1203.0,436.0,3.765,94600.0,INLAND --121.34,37.96,23.0,2830.0,659.0,1554.0,654.0,3.0354,113700.0,INLAND --121.35,37.97,33.0,3656.0,681.0,1698.0,671.0,3.1406,93900.0,INLAND --121.36,37.96,32.0,614.0,95.0,227.0,107.0,3.9922,247400.0,INLAND --121.35,37.96,21.0,1343.0,183.0,462.0,193.0,5.8995,189900.0,INLAND --121.32,37.98,37.0,3247.0,643.0,1737.0,665.0,3.066,94100.0,INLAND --121.33,37.98,36.0,3113.0,576.0,1746.0,544.0,3.4625,84600.0,INLAND --121.33,37.97,38.0,3166.0,575.0,1351.0,561.0,3.5404,91600.0,INLAND --121.32,37.97,46.0,2270.0,427.0,1097.0,453.0,3.3235,87800.0,INLAND --121.32,37.97,43.0,2453.0,490.0,1093.0,438.0,2.9107,88800.0,INLAND --121.33,37.96,20.0,1727.0,386.0,730.0,342.0,2.5195,92600.0,INLAND --121.33,37.97,43.0,1511.0,292.0,721.0,320.0,3.5703,87400.0,INLAND --121.33,37.97,36.0,1953.0,492.0,999.0,371.0,2.0043,90800.0,INLAND --121.31,37.98,47.0,3386.0,663.0,1228.0,619.0,3.0625,141500.0,INLAND --121.3,37.97,52.0,2980.0,537.0,1128.0,510.0,4.061,113600.0,INLAND --121.31,37.97,42.0,1824.0,277.0,720.0,309.0,5.1915,183700.0,INLAND --121.31,37.97,45.0,2604.0,454.0,988.0,442.0,3.6667,123100.0,INLAND --121.29,37.98,42.0,625.0,143.0,533.0,159.0,2.625,65400.0,INLAND --121.29,37.97,52.0,2995.0,555.0,1392.0,503.0,1.7794,98800.0,INLAND --121.29,37.98,49.0,2501.0,565.0,1171.0,550.0,2.5043,76700.0,INLAND --121.3,37.98,47.0,2373.0,461.0,990.0,444.0,4.175,98300.0,INLAND --121.3,37.97,52.0,2259.0,417.0,766.0,385.0,2.2981,105400.0,INLAND --121.29,37.99,41.0,930.0,191.0,463.0,185.0,3.4141,90600.0,INLAND --121.29,37.99,30.0,1271.0,528.0,2019.0,524.0,1.5152,81300.0,INLAND --121.3,37.99,38.0,2375.0,494.0,1167.0,471.0,2.6673,87500.0,INLAND --121.3,37.98,39.0,3375.0,659.0,1388.0,631.0,2.6364,93800.0,INLAND --121.28,37.99,42.0,495.0,116.0,284.0,97.0,2.8854,55700.0,INLAND --121.26,37.98,32.0,3274.0,820.0,2050.0,738.0,2.1265,55700.0,INLAND --121.27,37.98,43.0,2608.0,516.0,1322.0,528.0,2.5714,70000.0,INLAND --121.27,37.98,43.0,1005.0,200.0,492.0,172.0,2.6812,72800.0,INLAND --121.28,37.98,52.0,941.0,184.0,414.0,171.0,2.1429,69900.0,INLAND --121.29,37.99,45.0,965.0,198.0,498.0,195.0,1.6944,75200.0,INLAND --121.27,37.97,39.0,1023.0,243.0,550.0,224.0,1.1141,54400.0,INLAND --121.26,37.96,43.0,527.0,133.0,367.0,152.0,2.5,63600.0,INLAND --121.27,37.96,43.0,948.0,221.0,749.0,208.0,1.962,52700.0,INLAND --121.27,37.96,52.0,583.0,114.0,310.0,93.0,2.5625,54200.0,INLAND --121.26,37.98,41.0,1633.0,433.0,885.0,413.0,0.9782,54200.0,INLAND --121.25,37.98,39.0,1765.0,414.0,1056.0,414.0,1.5329,48300.0,INLAND --121.26,37.97,31.0,1189.0,295.0,891.0,292.0,2.5536,50500.0,INLAND --121.25,37.97,34.0,1288.0,344.0,846.0,293.0,1.7895,63100.0,INLAND --121.26,37.96,43.0,940.0,208.0,690.0,181.0,2.3056,62300.0,INLAND --121.26,37.97,41.0,2398.0,448.0,1143.0,444.0,3.0352,69800.0,INLAND --121.25,37.97,41.0,855.0,189.0,716.0,206.0,2.0375,75000.0,INLAND --121.26,37.96,35.0,1511.0,316.0,892.0,304.0,1.7898,63500.0,INLAND --121.25,37.95,40.0,1703.0,362.0,1208.0,373.0,2.0817,55300.0,INLAND --121.26,37.95,44.0,819.0,184.0,677.0,183.0,1.725,59300.0,INLAND --121.26,37.95,39.0,1841.0,428.0,1368.0,390.0,2.1583,62000.0,INLAND --121.27,37.96,41.0,461.0,101.0,382.0,79.0,1.275,54000.0,INLAND --121.26,37.96,40.0,535.0,105.0,335.0,102.0,2.5234,62800.0,INLAND --121.25,37.96,26.0,2205.0,478.0,1730.0,472.0,2.4866,68300.0,INLAND --121.24,37.96,29.0,874.0,217.0,788.0,222.0,1.9187,57700.0,INLAND --121.25,37.95,46.0,2001.0,428.0,1384.0,401.0,1.9402,62200.0,INLAND --121.24,37.95,36.0,361.0,63.0,169.0,62.0,3.7734,63800.0,INLAND --121.25,37.94,30.0,1509.0,308.0,967.0,278.0,1.7798,65900.0,INLAND --121.24,37.94,5.0,2232.0,488.0,1857.0,435.0,2.8705,113600.0,INLAND --121.24,37.93,21.0,1185.0,237.0,960.0,245.0,2.0893,65000.0,INLAND --121.25,37.94,28.0,964.0,232.0,782.0,218.0,2.3269,55900.0,INLAND --121.25,37.93,31.0,1673.0,382.0,1734.0,400.0,2.0833,48300.0,INLAND --121.26,37.93,33.0,2109.0,531.0,2248.0,588.0,1.4583,53000.0,INLAND --121.26,37.94,43.0,1610.0,412.0,1409.0,365.0,1.7574,51700.0,INLAND --121.27,37.93,24.0,1451.0,320.0,1413.0,283.0,2.125,61200.0,INLAND --121.28,37.94,35.0,2680.0,634.0,2188.0,611.0,1.9375,56700.0,INLAND --121.28,37.92,36.0,499.0,115.0,451.0,124.0,2.1705,60300.0,INLAND --121.28,37.94,40.0,2806.0,685.0,2268.0,635.0,1.8814,57700.0,INLAND --121.29,37.93,37.0,2488.0,578.0,1854.0,514.0,2.551,59100.0,INLAND --121.29,37.93,24.0,1438.0,351.0,1294.0,342.0,2.7829,61800.0,INLAND --121.28,37.93,23.0,1491.0,346.0,1223.0,343.0,2.1591,67800.0,INLAND --121.28,37.92,30.0,1061.0,230.0,851.0,195.0,2.4412,61600.0,INLAND --121.29,37.92,12.0,1096.0,240.0,1175.0,278.0,3.1053,73100.0,INLAND --121.28,37.91,31.0,820.0,179.0,576.0,155.0,1.69,65900.0,INLAND --121.31,37.93,21.0,1556.0,314.0,1140.0,304.0,2.4667,81400.0,INLAND --121.3,37.92,28.0,3308.0,766.0,3201.0,720.0,1.7694,73900.0,INLAND --121.24,37.98,33.0,450.0,123.0,236.0,103.0,1.1964,80400.0,INLAND --121.24,37.97,47.0,886.0,196.0,517.0,188.0,2.1991,67200.0,INLAND --121.24,37.96,37.0,1175.0,260.0,951.0,267.0,2.875,57700.0,INLAND --121.23,37.96,37.0,2351.0,564.0,1591.0,549.0,1.6563,57200.0,INLAND --121.23,37.96,44.0,2204.0,473.0,1277.0,435.0,1.5539,59200.0,INLAND --121.23,37.95,36.0,811.0,168.0,514.0,152.0,2.625,89200.0,INLAND --121.22,37.97,37.0,1514.0,337.0,1121.0,337.0,2.401,58400.0,INLAND --121.22,37.96,30.0,1737.0,381.0,1177.0,347.0,1.9875,56400.0,INLAND --121.22,37.96,31.0,1484.0,314.0,1163.0,336.0,2.625,72100.0,INLAND --121.25,37.92,19.0,2109.0,427.0,1742.0,426.0,2.4097,66000.0,INLAND --121.23,37.92,28.0,590.0,129.0,315.0,99.0,1.8958,85700.0,INLAND --121.36,38.0,17.0,4535.0,762.0,1562.0,743.0,5.3224,225800.0,INLAND --121.35,38.0,22.0,3564.0,730.0,1539.0,699.0,3.675,152400.0,INLAND --121.35,38.0,6.0,1649.0,369.0,732.0,350.0,3.4231,123800.0,INLAND --121.37,38.01,15.0,2430.0,315.0,1016.0,314.0,10.0088,242000.0,INLAND --121.35,38.01,15.0,2682.0,599.0,1520.0,601.0,3.5982,94400.0,INLAND --121.36,38.01,16.0,926.0,230.0,451.0,198.0,4.0221,173300.0,INLAND --121.36,38.01,16.0,2178.0,667.0,1192.0,579.0,2.3339,87100.0,INLAND --121.36,38.01,16.0,1080.0,166.0,507.0,182.0,4.5278,166900.0,INLAND --121.34,38.01,17.0,2033.0,452.0,1114.0,446.0,3.2872,175000.0,INLAND --121.33,38.01,27.0,1612.0,234.0,630.0,255.0,5.318,155100.0,INLAND --121.34,38.0,32.0,3877.0,687.0,1642.0,647.0,4.0444,129200.0,INLAND --121.33,38.0,32.0,4474.0,929.0,2177.0,884.0,3.2889,98900.0,INLAND --121.33,38.01,36.0,1383.0,207.0,531.0,203.0,5.9191,151900.0,INLAND --121.32,38.01,20.0,1903.0,395.0,919.0,359.0,2.6765,96400.0,INLAND --121.32,38.01,36.0,391.0,74.0,171.0,79.0,2.7045,102800.0,INLAND --121.32,38.0,21.0,1795.0,482.0,1114.0,472.0,2.0091,101500.0,INLAND --121.32,38.0,22.0,2105.0,521.0,781.0,483.0,2.213,87500.0,INLAND --121.33,38.0,14.0,3731.0,772.0,1679.0,750.0,3.1369,119600.0,INLAND --121.33,37.99,15.0,4472.0,1079.0,1837.0,976.0,2.5,175900.0,INLAND --121.34,37.99,11.0,4487.0,868.0,2195.0,780.0,3.9615,194600.0,INLAND --121.34,37.99,14.0,3111.0,498.0,1178.0,525.0,6.556,234700.0,INLAND --121.31,37.99,15.0,3103.0,965.0,3061.0,861.0,1.3729,110300.0,INLAND --121.32,37.98,20.0,1591.0,589.0,1916.0,536.0,1.3531,94600.0,INLAND --121.33,37.98,9.0,2370.0,424.0,1129.0,386.0,5.143,176500.0,INLAND --121.33,37.98,10.0,1564.0,397.0,643.0,347.0,2.7031,150000.0,INLAND --121.36,37.99,8.0,1801.0,380.0,684.0,350.0,4.2589,134900.0,INLAND --121.34,37.98,8.0,2628.0,428.0,1158.0,393.0,5.3002,191700.0,INLAND --121.33,38.02,33.0,2854.0,489.0,1109.0,452.0,4.3008,136400.0,INLAND --121.34,38.02,30.0,4375.0,689.0,2038.0,709.0,5.1202,133800.0,INLAND --121.33,38.02,31.0,1466.0,,608.0,254.0,3.1827,162100.0,INLAND --121.33,38.02,37.0,1964.0,315.0,915.0,335.0,4.3008,119800.0,INLAND --121.34,38.03,20.0,4213.0,751.0,2071.0,714.0,4.4063,130800.0,INLAND --121.33,38.03,19.0,1708.0,291.0,906.0,288.0,4.918,130600.0,INLAND --121.36,38.04,4.0,2477.0,359.0,1234.0,377.0,5.5427,162100.0,INLAND --121.35,38.04,5.0,4303.0,613.0,2206.0,621.0,5.5842,159100.0,INLAND --121.35,38.04,12.0,6217.0,1019.0,3771.0,961.0,3.7206,146000.0,INLAND --121.36,38.04,9.0,2167.0,370.0,1290.0,351.0,5.0285,148200.0,INLAND --121.34,38.05,16.0,667.0,92.0,267.0,90.0,5.6147,244700.0,INLAND --121.34,38.04,16.0,3295.0,565.0,2279.0,576.0,3.6083,146400.0,INLAND --121.33,38.04,15.0,1933.0,280.0,965.0,260.0,4.6477,142700.0,INLAND --121.33,38.03,10.0,629.0,140.0,635.0,146.0,2.2961,126700.0,INLAND --121.32,38.03,16.0,4045.0,623.0,1862.0,625.0,4.875,143100.0,INLAND --121.33,38.04,15.0,2903.0,440.0,1325.0,423.0,4.5179,145600.0,INLAND --121.33,38.04,10.0,1421.0,204.0,657.0,209.0,5.1878,153900.0,INLAND --121.35,38.03,8.0,1904.0,255.0,895.0,242.0,5.7201,155700.0,INLAND --121.34,38.03,12.0,2707.0,433.0,1200.0,380.0,4.9861,133500.0,INLAND --121.35,38.02,16.0,1665.0,311.0,1301.0,259.0,2.8403,132300.0,INLAND --121.35,38.03,16.0,3158.0,515.0,1596.0,528.0,4.1739,131300.0,INLAND --121.36,38.03,14.0,2356.0,438.0,1378.0,481.0,3.7375,138800.0,INLAND --121.35,38.02,15.0,3583.0,644.0,2183.0,643.0,3.428,140700.0,INLAND --121.36,38.02,5.0,2229.0,543.0,1010.0,474.0,4.1719,206100.0,INLAND --121.36,38.03,7.0,3461.0,859.0,1518.0,741.0,3.5684,78700.0,INLAND --121.32,38.04,30.0,249.0,44.0,167.0,45.0,4.5,92800.0,INLAND --121.31,38.03,24.0,3050.0,568.0,1743.0,549.0,3.7413,105300.0,INLAND --121.32,38.03,25.0,2474.0,513.0,1947.0,524.0,2.5742,98400.0,INLAND --121.32,38.02,26.0,2851.0,533.0,1544.0,499.0,3.5379,99100.0,INLAND --121.31,38.03,18.0,4893.0,1008.0,3036.0,997.0,2.5212,110000.0,INLAND --121.29,38.0,12.0,4038.0,1074.0,3440.0,942.0,1.9698,112300.0,INLAND --121.31,37.99,23.0,3135.0,707.0,1650.0,680.0,1.886,105300.0,INLAND --121.3,38.0,23.0,3706.0,1106.0,3785.0,1019.0,1.7774,100000.0,INLAND --121.3,38.01,29.0,2289.0,449.0,1215.0,435.0,3.2788,100000.0,INLAND --121.3,38.0,27.0,2918.0,580.0,1338.0,544.0,2.6495,116200.0,INLAND --121.31,38.0,35.0,2097.0,351.0,977.0,358.0,4.3958,108400.0,INLAND --121.31,38.0,19.0,908.0,158.0,306.0,154.0,3.9792,131900.0,INLAND --121.31,38.02,24.0,4157.0,951.0,2734.0,879.0,2.7981,92100.0,INLAND --121.3,38.01,30.0,2547.0,485.0,1547.0,501.0,3.994,95500.0,INLAND --121.32,38.02,23.0,3251.0,689.0,1890.0,668.0,3.0729,104800.0,INLAND --121.31,38.01,22.0,2101.0,514.0,1304.0,511.0,2.8348,101600.0,INLAND --121.31,38.01,22.0,2575.0,680.0,1367.0,645.0,1.4274,90500.0,INLAND --121.3,38.04,8.0,2668.0,447.0,1713.0,444.0,4.0156,117600.0,INLAND --121.3,38.03,13.0,1014.0,200.0,712.0,197.0,3.1471,102800.0,INLAND --121.3,38.03,10.0,1409.0,248.0,782.0,222.0,4.0227,107700.0,INLAND --121.29,38.04,16.0,2128.0,441.0,1860.0,459.0,3.1779,97300.0,INLAND --121.29,38.03,16.0,4356.0,881.0,1629.0,818.0,2.2672,91100.0,INLAND --121.28,38.03,11.0,3585.0,729.0,2769.0,715.0,3.0907,94100.0,INLAND --121.29,38.03,7.0,2021.0,441.0,1615.0,406.0,2.5842,111300.0,INLAND --121.28,38.03,11.0,826.0,150.0,684.0,166.0,3.9265,107400.0,INLAND --121.29,38.02,12.0,2006.0,426.0,1849.0,396.0,2.5437,99000.0,INLAND --121.3,38.02,16.0,2717.0,621.0,3343.0,643.0,2.5473,106300.0,INLAND --121.3,38.03,11.0,2866.0,654.0,1404.0,525.0,2.505,95000.0,INLAND --121.3,38.02,4.0,1515.0,384.0,491.0,348.0,2.8523,87500.0,INLAND --121.29,38.0,4.0,1392.0,322.0,1784.0,309.0,2.375,124500.0,INLAND --121.29,38.01,2.0,6403.0,1116.0,3327.0,957.0,4.4871,137900.0,INLAND --121.28,38.02,8.0,1868.0,392.0,1258.0,389.0,3.175,95900.0,INLAND --121.29,38.01,10.0,69.0,16.0,50.0,20.0,3.75,120800.0,INLAND --121.27,38.05,26.0,378.0,75.0,164.0,65.0,3.4107,82800.0,INLAND --121.27,38.02,32.0,342.0,58.0,138.0,52.0,2.9821,155000.0,INLAND --121.3,38.05,52.0,122.0,26.0,62.0,25.0,1.15,112500.0,INLAND --121.25,38.05,25.0,1967.0,362.0,1035.0,361.0,3.5735,106800.0,INLAND --121.25,38.04,26.0,3080.0,473.0,1257.0,465.0,4.9861,201800.0,INLAND --121.25,38.01,16.0,2397.0,501.0,1053.0,557.0,2.6994,112500.0,INLAND --121.23,38.04,32.0,1829.0,262.0,677.0,243.0,6.1805,247900.0,INLAND --121.22,38.04,42.0,343.0,50.0,116.0,49.0,5.5376,212500.0,INLAND --121.25,38.03,29.0,2465.0,327.0,859.0,315.0,6.6605,220700.0,INLAND --121.22,38.0,35.0,1841.0,300.0,783.0,285.0,2.8167,162100.0,INLAND --121.24,38.01,22.0,1526.0,299.0,790.0,300.0,2.4342,125000.0,INLAND --121.25,38.0,21.0,446.0,73.0,182.0,57.0,2.8958,135000.0,INLAND --121.26,37.99,27.0,429.0,102.0,179.0,90.0,2.3333,87500.0,INLAND --121.24,38.0,25.0,1471.0,300.0,721.0,304.0,2.4688,126800.0,INLAND --121.23,37.99,38.0,523.0,80.0,226.0,72.0,5.5693,153100.0,INLAND --121.23,37.98,27.0,849.0,137.0,373.0,131.0,5.0362,181300.0,INLAND --121.2,37.97,39.0,440.0,83.0,270.0,97.0,6.0582,157700.0,INLAND --121.19,38.04,35.0,703.0,117.0,290.0,107.0,3.225,177100.0,INLAND --121.16,38.03,28.0,253.0,50.0,201.0,51.0,1.4732,156300.0,INLAND --121.2,38.02,44.0,608.0,108.0,287.0,83.0,3.3882,125000.0,INLAND --121.18,37.99,31.0,2450.0,559.0,1459.0,478.0,2.4674,130900.0,INLAND --121.17,37.97,28.0,1374.0,248.0,769.0,229.0,3.6389,130400.0,INLAND --121.23,37.95,32.0,2081.0,472.0,1342.0,411.0,2.7958,59000.0,INLAND --121.19,37.93,27.0,1621.0,363.0,909.0,345.0,2.1513,99700.0,INLAND --121.23,37.94,20.0,268.0,78.0,77.0,49.0,1.125,150000.0,INLAND --121.22,37.93,21.0,336.0,68.0,206.0,73.0,4.75,121400.0,INLAND --121.22,37.95,30.0,1055.0,211.0,629.0,170.0,2.8676,76900.0,INLAND --121.18,37.96,35.0,411.0,74.0,193.0,59.0,2.5625,146900.0,INLAND --121.24,37.9,16.0,50.0,10.0,20.0,6.0,2.625,137500.0,INLAND --121.26,37.88,42.0,465.0,93.0,256.0,93.0,3.1719,158300.0,INLAND --121.28,37.9,28.0,371.0,71.0,171.0,70.0,0.9614,55700.0,INLAND --121.27,37.88,43.0,968.0,249.0,664.0,240.0,1.6458,83600.0,INLAND --121.27,37.87,34.0,1010.0,206.0,678.0,234.0,2.9531,104000.0,INLAND --121.31,37.9,38.0,226.0,44.0,125.0,38.0,2.9,125000.0,INLAND --121.29,37.89,26.0,161.0,27.0,1542.0,30.0,5.7485,162500.0,INLAND --121.29,37.87,29.0,488.0,108.0,308.0,115.0,2.6563,103100.0,INLAND --121.23,37.87,49.0,98.0,24.0,59.0,26.0,3.65,162500.0,INLAND --121.49,37.94,31.0,1860.0,394.0,1848.0,293.0,2.2891,162500.0,INLAND --121.38,37.88,44.0,1158.0,226.0,1094.0,224.0,2.6842,156300.0,INLAND --121.47,38.13,13.0,3192.0,715.0,1768.0,626.0,2.2619,123500.0,INLAND --121.42,38.22,35.0,1507.0,313.0,868.0,283.0,2.0284,96300.0,INLAND --121.36,38.15,42.0,2051.0,334.0,878.0,318.0,4.3553,185700.0,INLAND --121.32,38.16,14.0,2049.0,398.0,1071.0,369.0,3.5,240800.0,INLAND --121.32,38.13,5.0,3136.0,501.0,1327.0,467.0,5.5942,186900.0,INLAND --121.35,38.09,32.0,1706.0,292.0,923.0,284.0,5.5057,147200.0,INLAND --121.32,38.15,5.0,5428.0,994.0,2725.0,902.0,3.9323,130100.0,INLAND --121.23,38.12,22.0,393.0,58.0,134.0,57.0,3.95,178100.0,INLAND --121.23,38.11,48.0,561.0,81.0,240.0,69.0,3.6312,202800.0,INLAND --121.23,38.09,23.0,633.0,91.0,236.0,83.0,6.4562,230000.0,INLAND --121.26,38.09,35.0,930.0,186.0,525.0,201.0,2.0625,155000.0,INLAND --121.3,38.09,31.0,335.0,53.0,154.0,55.0,2.0694,175000.0,INLAND --121.29,38.07,21.0,1185.0,207.0,533.0,213.0,3.1917,204500.0,INLAND --121.25,38.07,28.0,2103.0,422.0,1167.0,391.0,3.0592,152800.0,INLAND --121.29,38.14,27.0,836.0,132.0,303.0,133.0,3.875,127400.0,INLAND --121.3,38.14,17.0,3507.0,696.0,1867.0,709.0,3.2123,120700.0,INLAND --121.29,38.14,34.0,2770.0,544.0,1409.0,535.0,3.2338,101800.0,INLAND --121.29,38.14,34.0,1500.0,337.0,674.0,282.0,2.515,110800.0,INLAND --121.29,38.13,31.0,1008.0,212.0,453.0,195.0,2.3917,113500.0,INLAND --121.3,38.13,27.0,1004.0,192.0,470.0,192.0,2.8942,116700.0,INLAND --121.3,38.13,23.0,2864.0,504.0,1298.0,499.0,3.2303,131800.0,INLAND --121.29,38.15,23.0,4183.0,633.0,1886.0,628.0,4.8787,175300.0,INLAND --121.28,38.14,37.0,3278.0,623.0,1431.0,575.0,3.3987,99500.0,INLAND --121.27,38.14,33.0,3557.0,894.0,2659.0,894.0,2.2883,86900.0,INLAND --121.27,38.14,40.0,929.0,257.0,576.0,229.0,2.125,137500.0,INLAND --121.28,38.14,38.0,2803.0,500.0,1223.0,509.0,4.119,128800.0,INLAND --121.28,38.13,48.0,1892.0,333.0,804.0,352.0,4.0625,143200.0,INLAND --121.27,38.13,52.0,1081.0,257.0,437.0,225.0,2.1979,114100.0,INLAND --121.27,38.13,40.0,2402.0,509.0,1197.0,486.0,2.1771,98200.0,INLAND --121.28,38.13,32.0,3366.0,676.0,1916.0,697.0,2.5401,125400.0,INLAND --121.28,38.12,34.0,3268.0,640.0,1906.0,628.0,2.8237,110700.0,INLAND --121.27,38.12,44.0,2356.0,482.0,1043.0,443.0,2.4949,108000.0,INLAND --121.29,38.13,20.0,3168.0,514.0,1390.0,490.0,5.0,154800.0,INLAND --121.3,38.13,26.0,2256.0,360.0,937.0,372.0,5.0528,153700.0,INLAND --121.29,38.12,18.0,1534.0,275.0,741.0,263.0,3.9607,132500.0,INLAND --121.3,38.12,11.0,1792.0,252.0,767.0,263.0,7.6889,229300.0,INLAND --121.3,38.11,5.0,5979.0,1190.0,2679.0,1084.0,4.196,171700.0,INLAND --121.27,38.11,11.0,3163.0,794.0,2106.0,762.0,2.4482,103000.0,INLAND --121.28,38.11,10.0,2974.0,588.0,1559.0,568.0,3.8825,136800.0,INLAND --121.27,38.11,15.0,2039.0,384.0,1178.0,375.0,3.8672,120100.0,INLAND --121.28,38.1,13.0,2432.0,586.0,1441.0,606.0,2.5556,133100.0,INLAND --121.29,38.1,14.0,1551.0,297.0,785.0,281.0,3.775,163300.0,INLAND --121.27,38.13,39.0,2614.0,634.0,1862.0,654.0,1.9238,70700.0,INLAND --121.27,38.12,37.0,2232.0,504.0,1455.0,471.0,2.5587,87800.0,INLAND --121.26,38.13,38.0,1419.0,411.0,1226.0,397.0,2.2188,68800.0,INLAND --121.26,38.12,27.0,1818.0,459.0,1182.0,428.0,1.8575,73800.0,INLAND --121.25,38.13,25.0,1305.0,270.0,789.0,235.0,3.2993,91100.0,INLAND --121.26,38.11,4.0,2058.0,366.0,933.0,316.0,4.2448,150900.0,INLAND --121.26,38.11,8.0,2770.0,642.0,1611.0,633.0,3.1284,115100.0,INLAND --121.25,38.14,16.0,1174.0,242.0,464.0,261.0,2.3,133300.0,INLAND --121.26,38.14,10.0,3371.0,665.0,1823.0,654.0,3.5333,116800.0,INLAND --121.27,38.13,35.0,2607.0,685.0,2016.0,618.0,1.75,82900.0,INLAND --121.26,38.13,25.0,2549.0,675.0,2053.0,648.0,2.0875,83100.0,INLAND --121.24,38.22,28.0,2593.0,487.0,1365.0,457.0,3.3929,113000.0,INLAND --121.22,38.16,24.0,4411.0,776.0,2038.0,732.0,3.475,151200.0,INLAND --121.28,38.17,19.0,1337.0,236.0,744.0,225.0,4.0924,244200.0,INLAND --121.32,38.21,27.0,2643.0,467.0,1455.0,444.0,3.6398,146700.0,INLAND --121.16,38.16,31.0,1953.0,366.0,999.0,316.0,2.4906,122500.0,INLAND --121.14,38.16,14.0,2591.0,497.0,1371.0,479.0,3.5774,113900.0,INLAND --121.06,38.25,13.0,651.0,102.0,301.0,104.0,3.6528,200000.0,INLAND --121.15,38.21,18.0,4176.0,700.0,2164.0,699.0,4.0365,174200.0,INLAND --121.05,38.14,19.0,3326.0,561.0,1544.0,511.0,2.9875,166300.0,INLAND --121.09,38.19,23.0,762.0,140.0,358.0,141.0,2.4545,105000.0,INLAND --121.19,38.13,27.0,2400.0,435.0,1085.0,444.0,3.7687,165200.0,INLAND --121.18,38.07,21.0,2333.0,377.0,1073.0,332.0,4.8125,161100.0,INLAND --120.97,38.0,27.0,1683.0,288.0,873.0,258.0,4.7069,176900.0,INLAND --121.05,37.93,17.0,2474.0,480.0,1649.0,453.0,3.275,156500.0,INLAND --121.11,38.04,32.0,1083.0,188.0,471.0,178.0,2.9241,187500.0,INLAND --121.09,38.03,21.0,2064.0,342.0,1021.0,359.0,4.517,152200.0,INLAND --121.12,38.0,36.0,683.0,159.0,505.0,141.0,3.4265,158900.0,INLAND --120.99,37.8,32.0,2564.0,513.0,1198.0,459.0,2.9083,113400.0,INLAND --121.0,37.8,13.0,4030.0,744.0,2248.0,766.0,3.6107,141300.0,INLAND --120.98,37.79,20.0,2458.0,491.0,1227.0,481.0,2.7857,110900.0,INLAND --120.97,37.84,28.0,2368.0,430.0,1231.0,403.0,2.883,141900.0,INLAND --120.96,37.77,32.0,2262.0,416.0,1156.0,404.0,3.8534,157600.0,INLAND --121.04,37.78,32.0,2916.0,528.0,1466.0,473.0,2.5643,200000.0,INLAND --121.06,37.86,24.0,1713.0,328.0,1258.0,324.0,2.683,169400.0,INLAND --121.13,37.74,31.0,677.0,144.0,523.0,159.0,2.4598,97100.0,INLAND --121.13,37.74,28.0,409.0,104.0,244.0,98.0,3.4643,90900.0,INLAND --121.12,37.73,35.0,1107.0,227.0,573.0,210.0,2.3924,102200.0,INLAND --121.13,37.74,21.0,2376.0,475.0,1175.0,441.0,3.6016,134600.0,INLAND --121.13,37.73,40.0,1126.0,220.0,667.0,235.0,3.3158,125900.0,INLAND --121.11,37.74,11.0,3886.0,599.0,1605.0,529.0,4.4213,182700.0,INLAND --121.1,37.8,35.0,1853.0,331.0,958.0,340.0,3.3578,149000.0,INLAND --121.11,37.76,22.0,2606.0,411.0,1252.0,397.0,4.1833,192100.0,INLAND --121.16,37.73,7.0,4956.0,941.0,3006.0,915.0,3.4426,139000.0,INLAND --121.25,37.76,22.0,2430.0,417.0,1292.0,391.0,3.4009,182400.0,INLAND --121.22,37.72,34.0,2123.0,387.0,1310.0,368.0,2.6368,165600.0,INLAND --121.22,37.81,17.0,2879.0,542.0,1802.0,530.0,3.6378,126100.0,INLAND --121.22,37.8,28.0,2608.0,576.0,1719.0,554.0,2.1186,94400.0,INLAND --121.22,37.8,37.0,1038.0,222.0,521.0,211.0,2.125,91900.0,INLAND --121.21,37.81,18.0,2404.0,498.0,1531.0,506.0,2.995,124300.0,INLAND --121.21,37.8,31.0,699.0,186.0,460.0,170.0,2.7443,94200.0,INLAND --121.21,37.8,44.0,300.0,72.0,160.0,73.0,2.1786,120800.0,INLAND --121.21,37.8,45.0,370.0,84.0,167.0,70.0,1.4853,101800.0,INLAND --121.21,37.79,33.0,811.0,185.0,446.0,198.0,1.6724,96900.0,INLAND --121.21,37.8,33.0,1862.0,429.0,971.0,389.0,2.6053,99200.0,INLAND --121.21,37.81,8.0,1883.0,298.0,999.0,301.0,5.193,172100.0,INLAND --121.2,37.8,28.0,3264.0,576.0,1512.0,567.0,3.7546,135300.0,INLAND --121.2,37.8,24.0,1698.0,344.0,927.0,313.0,3.5625,130800.0,INLAND --121.2,37.79,36.0,866.0,160.0,502.0,149.0,2.4798,101500.0,INLAND --121.2,37.8,37.0,311.0,61.0,171.0,54.0,4.0972,101800.0,INLAND --121.21,37.81,12.0,3667.0,640.0,2173.0,652.0,5.0369,163900.0,INLAND --121.17,37.88,22.0,1283.0,256.0,3082.0,239.0,3.5365,111800.0,INLAND --121.17,37.82,35.0,2506.0,406.0,1316.0,398.0,3.8472,197600.0,INLAND --121.2,37.83,18.0,3415.0,580.0,1912.0,562.0,4.4423,161400.0,INLAND --121.2,37.81,26.0,395.0,74.0,193.0,72.0,7.3718,212500.0,INLAND --121.19,37.81,8.0,4019.0,857.0,1959.0,782.0,2.7321,175000.0,INLAND --121.18,37.79,16.0,1326.0,286.0,509.0,297.0,1.9464,112500.0,INLAND --121.2,37.78,4.0,58.0,29.0,79.0,29.0,3.375,106300.0,INLAND --121.23,37.78,20.0,273.0,49.0,149.0,49.0,4.8229,158300.0,INLAND --121.24,37.79,7.0,5151.0,867.0,2553.0,805.0,4.075,195000.0,INLAND --121.27,37.79,16.0,1853.0,390.0,1013.0,362.0,2.7083,173900.0,INLAND --121.22,37.8,13.0,335.0,89.0,247.0,77.0,1.6111,74100.0,INLAND --121.22,37.79,36.0,1052.0,221.0,712.0,212.0,1.7228,105000.0,INLAND --121.22,37.79,38.0,2152.0,451.0,1320.0,457.0,2.5025,101900.0,INLAND --121.23,37.79,21.0,1922.0,373.0,1130.0,372.0,4.0815,117900.0,INLAND --121.22,37.79,5.0,3107.0,477.0,1549.0,443.0,4.4766,169400.0,INLAND --121.23,37.79,23.0,1985.0,424.0,1198.0,389.0,2.7734,116800.0,INLAND --121.23,37.8,11.0,2451.0,665.0,1155.0,533.0,2.2254,130800.0,INLAND --121.24,37.81,6.0,3883.0,800.0,2319.0,787.0,3.5595,161000.0,INLAND --121.23,37.81,15.0,2906.0,537.0,1886.0,557.0,4.2431,137100.0,INLAND --121.22,37.81,20.0,1811.0,352.0,1191.0,327.0,4.0125,121500.0,INLAND --121.22,37.82,13.0,4452.0,949.0,2740.0,937.0,3.1964,141500.0,INLAND --121.23,37.81,16.0,2085.0,342.0,1236.0,345.0,5.5591,149300.0,INLAND --121.23,37.82,8.0,1289.0,235.0,867.0,239.0,4.6821,138500.0,INLAND --121.23,37.82,14.0,1847.0,325.0,1030.0,309.0,4.9271,155300.0,INLAND --121.23,37.84,28.0,1347.0,241.0,713.0,225.0,4.0208,155700.0,INLAND --121.24,37.82,9.0,6169.0,959.0,3378.0,945.0,5.1047,157900.0,INLAND --121.3,37.85,35.0,1034.0,206.0,604.0,192.0,2.2391,120000.0,INLAND --121.31,37.81,36.0,284.0,53.0,130.0,47.0,3.1429,179200.0,INLAND --121.29,37.8,6.0,110.0,26.0,69.0,24.0,3.7292,475000.0,INLAND --121.27,37.82,26.0,1170.0,238.0,830.0,216.0,2.6458,127500.0,INLAND --121.28,37.83,32.0,696.0,151.0,443.0,144.0,2.5156,86300.0,INLAND --121.28,37.82,10.0,9205.0,1774.0,5935.0,1673.0,3.65,119400.0,INLAND --121.37,37.77,19.0,2610.0,474.0,1290.0,452.0,4.1298,222800.0,INLAND --121.4,37.74,20.0,2706.0,477.0,1236.0,474.0,4.15,322400.0,INLAND --121.43,37.78,24.0,807.0,174.0,585.0,166.0,2.6181,163500.0,INLAND --121.48,37.77,19.0,2364.0,373.0,1264.0,390.0,5.0176,274200.0,INLAND --121.52,37.75,18.0,1544.0,272.0,825.0,286.0,4.3229,327300.0,INLAND --121.46,37.73,20.0,2039.0,373.0,862.0,330.0,5.1629,222900.0,INLAND --121.45,37.72,2.0,2239.0,321.0,766.0,219.0,5.75,240200.0,INLAND --121.44,37.7,5.0,1365.0,196.0,591.0,156.0,6.0389,215100.0,INLAND --121.42,37.71,7.0,8297.0,1433.0,4189.0,1271.0,4.3696,170700.0,INLAND --121.42,37.76,18.0,5501.0,1051.0,2964.0,1009.0,4.1855,162100.0,INLAND --121.42,37.75,33.0,1999.0,368.0,1061.0,390.0,3.5242,121400.0,INLAND --121.42,37.74,45.0,818.0,144.0,340.0,138.0,4.8021,133500.0,INLAND --121.42,37.74,38.0,773.0,147.0,320.0,134.0,2.825,152500.0,INLAND --121.42,37.74,35.0,796.0,132.0,313.0,152.0,3.15,153200.0,INLAND --121.42,37.75,33.0,1329.0,266.0,683.0,233.0,4.3687,128700.0,INLAND --121.43,37.75,34.0,1280.0,268.0,754.0,294.0,3.1333,132000.0,INLAND --121.43,37.75,41.0,1717.0,325.0,855.0,303.0,2.75,127300.0,INLAND --121.43,37.75,42.0,1207.0,278.0,699.0,279.0,3.3611,117600.0,INLAND --121.43,37.74,52.0,876.0,170.0,426.0,179.0,3.0865,119800.0,INLAND --121.43,37.74,40.0,859.0,196.0,427.0,176.0,3.5789,110400.0,INLAND --121.43,37.75,30.0,1912.0,451.0,1065.0,388.0,2.1424,125000.0,INLAND --121.43,37.76,7.0,2125.0,508.0,1358.0,464.0,3.6312,147600.0,INLAND --121.44,37.76,5.0,7264.0,1285.0,3670.0,1146.0,5.0443,194800.0,INLAND --121.45,37.75,15.0,3846.0,677.0,2360.0,635.0,4.6173,164800.0,INLAND --121.44,37.74,33.0,1875.0,363.0,970.0,381.0,3.5096,141700.0,INLAND --121.44,37.75,29.0,918.0,159.0,417.0,166.0,4.2768,151300.0,INLAND --121.44,37.75,16.0,2229.0,458.0,1199.0,445.0,3.4821,170600.0,INLAND --121.42,37.74,19.0,1393.0,367.0,915.0,355.0,1.1957,103100.0,INLAND --121.43,37.74,52.0,966.0,247.0,589.0,228.0,1.6937,108300.0,INLAND --121.43,37.74,52.0,994.0,258.0,623.0,264.0,1.725,111500.0,INLAND --121.44,37.74,25.0,456.0,116.0,370.0,106.0,3.1319,112500.0,INLAND --121.44,37.73,7.0,8363.0,1314.0,3907.0,1068.0,5.3321,208100.0,INLAND --121.43,37.73,40.0,1718.0,391.0,1312.0,388.0,2.9955,134700.0,INLAND --121.42,37.73,2.0,2682.0,393.0,883.0,271.0,5.9934,196700.0,INLAND --121.29,37.72,22.0,1630.0,404.0,4402.0,358.0,1.9792,63000.0,INLAND --121.32,37.67,21.0,1494.0,271.0,781.0,255.0,4.3015,250000.0,INLAND --121.47,37.58,14.0,1594.0,292.0,887.0,287.0,4.6625,294000.0,INLAND --120.9,35.69,14.0,5020.0,909.0,2105.0,796.0,3.8158,248700.0,<1H OCEAN --120.93,35.76,11.0,8997.0,1698.0,1825.0,756.0,3.23,154300.0,<1H OCEAN --120.7,35.76,15.0,1914.0,425.0,1130.0,421.0,2.2165,90600.0,<1H OCEAN --120.69,35.65,14.0,3487.0,889.0,2352.0,796.0,1.6303,144900.0,<1H OCEAN --120.69,35.64,38.0,2564.0,546.0,1301.0,481.0,2.0076,114000.0,<1H OCEAN --120.69,35.62,43.0,3044.0,652.0,1456.0,608.0,2.4567,140000.0,<1H OCEAN --120.69,35.62,35.0,3451.0,713.0,1550.0,653.0,2.9167,161700.0,<1H OCEAN --120.72,35.63,31.0,3476.0,644.0,1476.0,567.0,3.3472,195200.0,<1H OCEAN --120.67,35.63,8.0,2690.0,410.0,1085.0,381.0,4.2841,256700.0,<1H OCEAN --120.67,35.62,6.0,12779.0,2441.0,6085.0,2157.0,3.8661,168100.0,<1H OCEAN --120.63,35.59,9.0,5782.0,1184.0,3026.0,1130.0,2.6528,113500.0,<1H OCEAN --120.64,35.65,9.0,3466.0,673.0,2356.0,619.0,2.9926,158200.0,<1H OCEAN --120.47,35.74,9.0,4267.0,785.0,2065.0,691.0,3.7303,162700.0,<1H OCEAN --120.29,35.56,15.0,4760.0,871.0,2459.0,734.0,2.811,142100.0,<1H OCEAN --120.6,35.6,13.0,4461.0,764.0,1795.0,640.0,4.475,206900.0,<1H OCEAN --121.11,35.52,9.0,6044.0,1222.0,2239.0,972.0,3.24,264600.0,NEAR OCEAN --121.14,35.55,13.0,5383.0,1070.0,1880.0,796.0,3.8019,271200.0,NEAR OCEAN --121.12,35.58,16.0,4109.0,798.0,1298.0,626.0,3.4799,320800.0,NEAR OCEAN --120.92,35.4,23.0,2059.0,354.0,636.0,278.0,3.6908,278800.0,NEAR OCEAN --120.85,35.38,27.0,3493.0,909.0,1481.0,666.0,2.3075,184200.0,NEAR OCEAN --120.86,35.39,23.0,1664.0,355.0,629.0,279.0,2.7344,188300.0,NEAR OCEAN --120.86,35.4,21.0,2787.0,641.0,1106.0,501.0,2.7043,186200.0,NEAR OCEAN --120.87,35.41,16.0,2168.0,444.0,782.0,374.0,3.0187,278100.0,NEAR OCEAN --120.94,35.42,18.0,3418.0,686.0,970.0,453.0,3.7738,279400.0,NEAR OCEAN --120.95,35.44,30.0,6346.0,1410.0,1769.0,887.0,2.6864,283600.0,NEAR OCEAN --120.85,35.37,21.0,1033.0,195.0,588.0,187.0,2.8173,226900.0,NEAR OCEAN --120.83,35.36,28.0,4323.0,886.0,1650.0,705.0,2.7266,266800.0,NEAR OCEAN --120.84,35.35,27.0,2863.0,711.0,930.0,533.0,2.6205,221100.0,NEAR OCEAN --120.84,35.37,34.0,3279.0,714.0,1397.0,646.0,2.5552,200000.0,NEAR OCEAN --120.89,35.37,29.0,2046.0,588.0,846.0,410.0,1.65,227300.0,NEAR OCEAN --120.84,35.33,15.0,3276.0,670.0,1520.0,613.0,3.6412,207800.0,NEAR OCEAN --120.83,35.33,14.0,4155.0,787.0,2112.0,755.0,4.4766,192700.0,NEAR OCEAN --120.82,35.32,12.0,3522.0,683.0,1780.0,662.0,3.3958,215800.0,NEAR OCEAN --120.83,35.32,11.0,3252.0,701.0,1814.0,660.0,3.2226,183200.0,NEAR OCEAN --120.84,35.32,15.0,2419.0,538.0,1279.0,522.0,3.4762,189600.0,NEAR OCEAN --120.9,35.33,16.0,1576.0,287.0,595.0,262.0,3.588,266300.0,NEAR OCEAN --120.84,35.32,17.0,4197.0,802.0,1656.0,732.0,3.526,183900.0,NEAR OCEAN --120.84,35.31,23.0,3100.0,603.0,1515.0,609.0,2.8493,196100.0,NEAR OCEAN --120.84,35.3,15.0,2062.0,327.0,781.0,316.0,4.9359,317700.0,NEAR OCEAN --120.82,35.31,16.0,3924.0,699.0,1325.0,638.0,2.5172,293900.0,NEAR OCEAN --120.8,35.33,20.0,2200.0,393.0,996.0,365.0,3.587,330000.0,NEAR OCEAN --121.1,35.6,20.0,3389.0,704.0,1309.0,520.0,3.2112,204500.0,NEAR OCEAN --120.65,35.29,36.0,1940.0,315.0,850.0,298.0,3.1818,249600.0,NEAR OCEAN --120.66,35.29,23.0,1932.0,487.0,1380.0,472.0,1.9647,253600.0,NEAR OCEAN --120.66,35.29,16.0,2272.0,629.0,1689.0,649.0,1.7031,195000.0,NEAR OCEAN --120.67,35.3,19.0,1540.0,715.0,1799.0,635.0,0.7025,500001.0,NEAR OCEAN --120.65,35.32,20.0,626.0,212.0,3574.0,261.0,1.0298,300000.0,NEAR OCEAN --120.62,35.28,28.0,3952.0,592.0,1469.0,571.0,6.3144,328800.0,NEAR OCEAN --120.65,35.29,29.0,1785.0,481.0,1344.0,472.0,1.4492,222900.0,NEAR OCEAN --120.65,35.28,32.0,896.0,240.0,548.0,231.0,2.5455,165900.0,NEAR OCEAN --120.65,35.27,27.0,2034.0,341.0,768.0,316.0,4.2411,258900.0,NEAR OCEAN --120.65,35.27,15.0,2365.0,538.0,1446.0,490.0,2.5129,225900.0,NEAR OCEAN --120.64,35.26,21.0,3298.0,716.0,1862.0,687.0,2.1507,221500.0,NEAR OCEAN --120.63,35.27,23.0,1630.0,253.0,704.0,263.0,5.156,251300.0,NEAR OCEAN --120.66,35.29,39.0,2163.0,652.0,1153.0,599.0,2.084,233300.0,NEAR OCEAN --120.66,35.28,31.0,2773.0,844.0,1358.0,794.0,1.4036,209600.0,NEAR OCEAN --120.66,35.28,46.0,2054.0,502.0,1170.0,494.0,2.1786,206300.0,NEAR OCEAN --120.65,35.27,52.0,2254.0,642.0,1237.0,590.0,2.6208,227100.0,NEAR OCEAN --120.66,35.27,46.0,2217.0,544.0,1107.0,527.0,2.8009,192600.0,NEAR OCEAN --120.66,35.27,33.0,1664.0,455.0,1077.0,461.0,1.6875,174200.0,NEAR OCEAN --120.66,35.27,17.0,2719.0,589.0,1386.0,570.0,3.7337,208200.0,NEAR OCEAN --120.66,35.26,15.0,5540.0,1319.0,2383.0,1165.0,2.2656,226200.0,NEAR OCEAN --120.67,35.3,32.0,4202.0,986.0,2309.0,956.0,2.2165,231700.0,NEAR OCEAN --120.7,35.31,24.0,3504.0,521.0,1490.0,506.0,4.6719,337000.0,NEAR OCEAN --120.68,35.29,37.0,1354.0,293.0,753.0,290.0,3.25,225000.0,NEAR OCEAN --120.69,35.28,26.0,4225.0,886.0,1795.0,704.0,2.2847,247000.0,NEAR OCEAN --120.67,35.29,44.0,2236.0,411.0,1036.0,437.0,3.0833,219300.0,NEAR OCEAN --120.69,35.26,20.0,1248.0,231.0,722.0,225.0,4.625,221800.0,NEAR OCEAN --120.7,35.28,14.0,3768.0,682.0,1884.0,664.0,4.6071,239900.0,NEAR OCEAN --120.71,35.27,9.0,2568.0,421.0,1149.0,398.0,5.4287,331600.0,NEAR OCEAN --120.68,35.26,26.0,1704.0,315.0,918.0,310.0,3.2464,208000.0,NEAR OCEAN --120.69,35.25,15.0,4210.0,899.0,1933.0,867.0,2.794,262500.0,NEAR OCEAN --120.7,35.32,46.0,118.0,17.0,6532.0,13.0,4.2639,350000.0,NEAR OCEAN --120.52,35.24,5.0,4413.0,804.0,2003.0,725.0,5.0267,253300.0,<1H OCEAN --120.68,35.25,16.0,4208.0,897.0,1634.0,806.0,2.2868,233700.0,NEAR OCEAN --120.69,35.34,16.0,164.0,30.0,542.0,32.0,1.6563,42500.0,NEAR OCEAN --120.81,35.19,14.0,3414.0,802.0,1236.0,632.0,3.7635,336200.0,NEAR OCEAN --120.66,35.2,13.0,5138.0,713.0,1838.0,645.0,5.9676,380000.0,NEAR OCEAN --120.7,35.14,17.0,5805.0,1097.0,1919.0,932.0,3.5352,357800.0,NEAR OCEAN --120.68,35.14,34.0,3100.0,617.0,1155.0,542.0,3.0938,245900.0,NEAR OCEAN --120.66,35.13,41.0,2666.0,751.0,940.0,507.0,1.9653,236100.0,<1H OCEAN --120.63,35.13,16.0,2680.0,704.0,975.0,619.0,1.7878,55000.0,<1H OCEAN --120.64,35.15,7.0,7922.0,1442.0,2863.0,1197.0,4.849,275000.0,<1H OCEAN --120.59,35.13,8.0,6638.0,1054.0,2710.0,966.0,4.6776,295500.0,<1H OCEAN --120.56,35.13,15.0,5818.0,924.0,2324.0,845.0,4.4033,267600.0,<1H OCEAN --120.57,35.12,39.0,1656.0,333.0,866.0,317.0,2.8824,195200.0,<1H OCEAN --120.57,35.11,18.0,2920.0,556.0,1068.0,552.0,3.5242,156800.0,<1H OCEAN --120.59,35.11,25.0,3642.0,726.0,1729.0,673.0,3.155,205400.0,<1H OCEAN --120.6,35.12,22.0,3342.0,644.0,1342.0,593.0,3.4509,217700.0,<1H OCEAN --120.61,35.12,16.0,1671.0,354.0,935.0,340.0,2.5792,163800.0,<1H OCEAN --120.59,35.12,27.0,3055.0,677.0,1407.0,610.0,2.1702,179700.0,<1H OCEAN --120.6,35.11,17.0,2495.0,524.0,1292.0,501.0,2.2625,153000.0,<1H OCEAN --120.59,35.11,20.0,3098.0,571.0,1449.0,611.0,3.5744,197800.0,<1H OCEAN --120.61,35.12,31.0,1486.0,345.0,823.0,322.0,2.6974,165400.0,<1H OCEAN --120.61,35.13,16.0,3431.0,721.0,1777.0,701.0,2.7301,190400.0,<1H OCEAN --120.61,35.12,12.0,3430.0,793.0,1840.0,720.0,2.9821,162000.0,<1H OCEAN --120.61,35.11,11.0,3733.0,831.0,1839.0,739.0,3.3062,158500.0,<1H OCEAN --120.65,35.12,19.0,2949.0,662.0,1425.0,548.0,2.9615,178100.0,<1H OCEAN --120.62,35.13,26.0,3971.0,803.0,1792.0,723.0,2.7128,209900.0,<1H OCEAN --120.62,35.11,18.0,2241.0,544.0,1521.0,509.0,2.0292,155800.0,<1H OCEAN --120.62,35.12,22.0,1240.0,294.0,768.0,288.0,2.655,160000.0,<1H OCEAN --120.66,35.1,19.0,1583.0,392.0,704.0,269.0,2.1042,268300.0,<1H OCEAN --120.61,35.1,14.0,2919.0,691.0,1896.0,577.0,2.4003,142100.0,<1H OCEAN --120.61,35.1,17.0,2799.0,637.0,2015.0,592.0,3.0536,143600.0,<1H OCEAN --120.6,35.1,16.0,3290.0,686.0,1497.0,655.0,2.6875,178200.0,<1H OCEAN --120.58,35.0,37.0,523.0,119.0,374.0,95.0,1.4726,106300.0,<1H OCEAN --120.61,35.06,13.0,2364.0,421.0,1257.0,380.0,4.6167,273100.0,<1H OCEAN --120.56,35.07,14.0,6788.0,1216.0,2866.0,1036.0,3.3603,280200.0,<1H OCEAN --120.52,35.06,11.0,1317.0,234.0,655.0,243.0,4.3611,329700.0,<1H OCEAN --120.3,35.1,16.0,2819.0,479.0,1068.0,365.0,4.5461,270800.0,<1H OCEAN --120.43,35.17,16.0,947.0,163.0,477.0,137.0,3.851,315000.0,<1H OCEAN --120.57,35.18,16.0,5209.0,917.0,2284.0,809.0,4.0403,346100.0,<1H OCEAN --120.48,35.05,24.0,2314.0,468.0,1549.0,463.0,2.8203,152600.0,<1H OCEAN --120.47,35.04,29.0,1315.0,279.0,926.0,249.0,2.9375,144800.0,<1H OCEAN --120.5,35.03,10.0,10463.0,1756.0,4660.0,1715.0,3.5682,277300.0,<1H OCEAN --120.48,35.02,17.0,2721.0,477.0,1672.0,492.0,2.9798,204800.0,<1H OCEAN --120.69,35.52,26.0,2758.0,571.0,1291.0,522.0,2.925,181400.0,<1H OCEAN --120.68,35.51,17.0,1701.0,298.0,941.0,293.0,4.3218,209100.0,<1H OCEAN --120.68,35.5,19.0,3369.0,673.0,1834.0,646.0,3.7672,173800.0,<1H OCEAN --120.67,35.5,15.0,2752.0,546.0,1422.0,545.0,3.2813,175000.0,<1H OCEAN --120.66,35.5,19.0,1861.0,364.0,1040.0,363.0,3.3125,163900.0,<1H OCEAN --120.66,35.49,17.0,4422.0,945.0,2307.0,885.0,2.8285,171300.0,<1H OCEAN --120.65,35.48,19.0,2310.0,471.0,1341.0,441.0,3.225,166900.0,<1H OCEAN --120.64,35.46,6.0,5876.0,1406.0,2877.0,1304.0,2.5437,146400.0,<1H OCEAN --120.69,35.49,16.0,2666.0,450.0,1203.0,429.0,4.1375,222400.0,<1H OCEAN --120.68,35.48,15.0,2608.0,525.0,1351.0,502.0,2.7798,205800.0,<1H OCEAN --120.67,35.48,18.0,2339.0,443.0,1097.0,416.0,3.3438,176100.0,<1H OCEAN --120.66,35.47,18.0,2474.0,449.0,1269.0,431.0,3.9063,184800.0,<1H OCEAN --120.66,35.46,17.0,3748.0,609.0,1860.0,612.0,4.5179,225600.0,<1H OCEAN --120.7,35.55,10.0,3979.0,761.0,1834.0,671.0,3.5,172100.0,<1H OCEAN --120.76,35.52,7.0,9613.0,1666.0,4487.0,1653.0,3.6667,250600.0,<1H OCEAN --120.71,35.5,12.0,3098.0,453.0,1433.0,434.0,5.2508,292900.0,<1H OCEAN --120.56,35.48,12.0,4161.0,731.0,1609.0,615.0,5.0947,267500.0,<1H OCEAN --119.93,35.2,29.0,1649.0,342.0,671.0,264.0,3.0602,69800.0,INLAND --120.49,35.35,17.0,3043.0,608.0,1457.0,545.0,3.1641,158600.0,<1H OCEAN --120.65,35.41,15.0,6725.0,1111.0,3139.0,1029.0,4.1875,261600.0,<1H OCEAN --120.64,35.47,8.0,416.0,121.0,936.0,97.0,2.1154,117200.0,<1H OCEAN --122.4,37.68,36.0,3595.0,815.0,1649.0,755.0,3.3816,253400.0,NEAR BAY --122.4,37.68,41.0,2267.0,486.0,1045.0,459.0,4.1146,272200.0,NEAR BAY --122.32,37.69,48.0,592.0,122.0,340.0,143.0,5.966,315200.0,NEAR BAY --122.41,37.7,23.0,1817.0,400.0,1376.0,382.0,2.4113,214200.0,NEAR BAY --122.42,37.71,44.0,2080.0,489.0,1781.0,478.0,3.6827,215300.0,NEAR BAY --122.43,37.71,24.0,4299.0,857.0,2249.0,788.0,4.6098,290400.0,NEAR BAY --122.43,37.7,19.0,1733.0,354.0,959.0,348.0,4.7708,281700.0,NEAR BAY --122.44,37.7,6.0,3523.0,664.0,1705.0,608.0,4.9318,258100.0,NEAR OCEAN --122.45,37.7,46.0,2193.0,499.0,1814.0,489.0,4.0125,230100.0,NEAR OCEAN --122.45,37.71,50.0,1441.0,283.0,1159.0,286.0,4.5417,233700.0,NEAR OCEAN --122.45,37.71,49.0,2244.0,442.0,1948.0,423.0,4.7639,251500.0,NEAR OCEAN --122.45,37.7,16.0,6457.0,1336.0,4375.0,1231.0,5.1788,267000.0,NEAR OCEAN --122.46,37.7,37.0,1028.0,275.0,904.0,261.0,3.5035,238600.0,NEAR OCEAN --122.46,37.69,35.0,1983.0,385.0,1577.0,414.0,4.0833,266700.0,NEAR OCEAN --122.46,37.7,37.0,3029.0,738.0,2436.0,700.0,3.3214,243200.0,NEAR OCEAN --122.47,37.7,45.0,3290.0,693.0,2466.0,666.0,3.6588,238600.0,NEAR OCEAN --122.46,37.71,44.0,364.0,102.0,339.0,98.0,2.483,214300.0,NEAR OCEAN --122.46,37.71,45.0,1799.0,394.0,1436.0,389.0,3.65,239900.0,NEAR OCEAN --122.46,37.7,42.0,876.0,216.0,713.0,203.0,3.84,235900.0,NEAR OCEAN --122.47,37.7,44.0,2034.0,423.0,1491.0,373.0,4.5341,236500.0,NEAR OCEAN --122.47,37.71,37.0,1046.0,251.0,822.0,239.0,3.5,224400.0,NEAR OCEAN --122.46,37.71,39.0,2076.0,482.0,1738.0,445.0,3.1958,232100.0,NEAR OCEAN --122.48,37.7,33.0,4167.0,1398.0,2923.0,1314.0,3.049,307000.0,NEAR OCEAN --122.48,37.7,33.0,4492.0,,3477.0,1537.0,3.0546,297900.0,NEAR OCEAN --122.48,37.71,39.0,3615.0,632.0,1571.0,615.0,5.1149,314200.0,NEAR OCEAN --122.48,37.71,29.0,1048.0,150.0,455.0,152.0,6.1278,417600.0,NEAR OCEAN --122.54,37.7,36.0,3988.0,732.0,1793.0,708.0,4.2472,292500.0,NEAR OCEAN --122.49,37.67,35.0,5275.0,903.0,2892.0,842.0,4.6771,266400.0,NEAR OCEAN --122.49,37.68,35.0,2405.0,461.0,1583.0,471.0,5.0659,238000.0,NEAR OCEAN --122.49,37.67,29.0,3795.0,675.0,2494.0,696.0,5.2848,260300.0,NEAR OCEAN --122.49,37.7,36.0,1946.0,340.0,828.0,313.0,5.2811,287700.0,NEAR OCEAN --122.49,37.69,36.0,1344.0,258.0,782.0,265.0,4.5,275600.0,NEAR OCEAN --122.48,37.69,33.0,2347.0,512.0,1259.0,481.0,3.4492,264300.0,NEAR OCEAN --122.49,37.69,35.0,2644.0,456.0,1465.0,430.0,4.9375,277000.0,NEAR OCEAN --122.49,37.69,35.0,2576.0,443.0,1273.0,433.0,4.7391,272800.0,NEAR OCEAN --122.47,37.7,47.0,737.0,126.0,370.0,136.0,3.775,281300.0,NEAR OCEAN --122.47,37.69,27.0,2447.0,720.0,2104.0,657.0,3.449,239100.0,NEAR OCEAN --122.47,37.69,30.0,837.0,213.0,606.0,199.0,4.875,258800.0,NEAR OCEAN --122.48,37.69,42.0,2993.0,512.0,1594.0,546.0,4.4821,252400.0,NEAR OCEAN --122.48,37.69,43.0,2661.0,455.0,1384.0,456.0,4.2421,257500.0,NEAR OCEAN --122.46,37.69,26.0,4302.0,1125.0,3320.0,1100.0,3.4375,277700.0,NEAR OCEAN --122.46,37.68,23.0,2812.0,769.0,1983.0,681.0,2.9413,229400.0,NEAR OCEAN --122.47,37.69,35.0,1720.0,421.0,1452.0,425.0,3.5909,256100.0,NEAR OCEAN --122.47,37.69,34.0,1954.0,357.0,1130.0,367.0,4.6447,304500.0,NEAR OCEAN --122.47,37.68,31.0,4077.0,777.0,2544.0,738.0,4.5337,306700.0,NEAR OCEAN --122.48,37.68,31.0,3506.0,653.0,2296.0,645.0,5.5647,268700.0,NEAR OCEAN --122.48,37.67,15.0,2897.0,728.0,2340.0,720.0,3.3906,303700.0,NEAR OCEAN --122.48,37.67,31.0,2609.0,433.0,1746.0,464.0,5.1054,294500.0,NEAR OCEAN --122.49,37.68,34.0,3718.0,676.0,2510.0,632.0,5.3311,270800.0,NEAR OCEAN --122.48,37.67,14.0,3395.0,1059.0,2258.0,945.0,2.964,319700.0,NEAR OCEAN --122.45,37.69,17.0,2359.0,501.0,884.0,504.0,3.0625,87500.0,NEAR OCEAN --122.45,37.67,35.0,491.0,98.0,274.0,97.0,4.4286,238600.0,NEAR OCEAN --122.47,37.67,20.0,5689.0,992.0,3752.0,1002.0,5.5845,304300.0,NEAR OCEAN --122.47,37.66,18.0,4172.0,806.0,3226.0,790.0,5.7535,297900.0,NEAR OCEAN --122.46,37.67,16.0,3372.0,1101.0,2049.0,1021.0,4.1303,146500.0,NEAR OCEAN --122.46,37.66,15.0,6082.0,1284.0,3861.0,1198.0,5.4221,284700.0,NEAR OCEAN --122.46,37.65,21.0,2751.0,502.0,2027.0,491.0,5.2573,322900.0,NEAR OCEAN --122.45,37.67,36.0,1664.0,326.0,963.0,322.0,4.7813,246400.0,NEAR OCEAN --122.45,37.66,35.0,2738.0,509.0,1545.0,493.0,5.3446,263300.0,NEAR OCEAN --122.46,37.66,36.0,2535.0,451.0,1390.0,436.0,5.3398,260900.0,NEAR OCEAN --122.45,37.66,36.0,5456.0,926.0,2761.0,916.0,4.7755,280700.0,NEAR OCEAN --122.44,37.65,38.0,5277.0,1008.0,2695.0,997.0,3.9722,276200.0,NEAR OCEAN --122.43,37.66,29.0,3541.0,786.0,2259.0,770.0,4.3039,278400.0,NEAR OCEAN --122.44,37.66,21.0,5108.0,1510.0,3288.0,1405.0,3.1927,252600.0,NEAR OCEAN --122.44,37.66,36.0,1447.0,276.0,799.0,275.0,4.7639,265600.0,NEAR OCEAN --122.44,37.67,35.0,1814.0,365.0,1025.0,384.0,4.425,268400.0,NEAR OCEAN --122.42,37.67,42.0,2274.0,429.0,1255.0,397.0,5.1205,226300.0,NEAR OCEAN --122.41,37.66,37.0,2155.0,446.0,1255.0,428.0,3.8438,250700.0,NEAR OCEAN --122.42,37.66,41.0,2189.0,414.0,1063.0,409.0,4.7361,302600.0,NEAR OCEAN --122.42,37.66,28.0,3520.0,672.0,1746.0,602.0,4.9236,273500.0,NEAR OCEAN --122.42,37.66,36.0,725.0,121.0,335.0,140.0,4.125,327600.0,NEAR OCEAN --122.41,37.66,32.0,1385.0,356.0,1096.0,353.0,4.475,246700.0,NEAR OCEAN --122.41,37.66,34.0,1075.0,318.0,906.0,294.0,3.0052,242500.0,NEAR OCEAN --122.41,37.66,40.0,1294.0,308.0,1177.0,301.0,3.6667,218800.0,NEAR OCEAN --122.41,37.66,37.0,694.0,188.0,658.0,225.0,4.6103,237500.0,NEAR OCEAN --122.41,37.66,44.0,431.0,195.0,682.0,212.0,3.2833,233300.0,NEAR OCEAN --122.41,37.65,32.0,3436.0,868.0,2583.0,817.0,3.5039,232400.0,NEAR OCEAN --122.42,37.66,26.0,3253.0,932.0,2246.0,855.0,2.6631,244000.0,NEAR OCEAN --122.43,37.66,43.0,1769.0,387.0,1102.0,377.0,4.5493,281500.0,NEAR OCEAN --122.42,37.65,39.0,4402.0,894.0,2941.0,887.0,3.8565,239800.0,NEAR OCEAN --122.43,37.64,34.0,8400.0,1812.0,4101.0,1717.0,4.1033,301000.0,NEAR OCEAN --122.43,37.64,42.0,4091.0,757.0,1861.0,771.0,4.207,272700.0,NEAR OCEAN --122.45,37.64,19.0,6326.0,1025.0,3444.0,984.0,6.2498,353300.0,NEAR OCEAN --122.46,37.64,26.0,2806.0,375.0,1617.0,396.0,5.3922,353700.0,NEAR OCEAN --122.46,37.65,16.0,8676.0,1633.0,5130.0,1574.0,4.8096,262000.0,NEAR OCEAN --122.46,37.64,17.0,3523.0,669.0,2150.0,666.0,4.5938,251200.0,NEAR OCEAN --122.47,37.65,27.0,8103.0,1655.0,5023.0,1605.0,4.6452,236200.0,NEAR OCEAN --122.53,37.66,25.0,7778.0,1493.0,4674.0,1451.0,5.4694,272400.0,NEAR OCEAN --122.53,37.65,20.0,4582.0,1124.0,2325.0,1040.0,4.0556,275000.0,NEAR OCEAN --122.48,37.65,39.0,3348.0,666.0,1817.0,668.0,4.2593,227400.0,NEAR OCEAN --122.49,37.63,31.0,3109.0,621.0,1472.0,618.0,5.155,263900.0,NEAR OCEAN --122.49,37.63,34.0,696.0,145.0,398.0,162.0,3.525,254100.0,NEAR OCEAN --122.49,37.63,31.0,1256.0,328.0,785.0,297.0,3.2446,234600.0,NEAR OCEAN --122.53,37.63,27.0,2589.0,658.0,1386.0,608.0,2.9087,228200.0,NEAR OCEAN --122.48,37.64,7.0,120.0,21.0,50.0,27.0,12.5,281000.0,NEAR OCEAN --122.47,37.61,34.0,4551.0,837.0,2208.0,834.0,5.4364,279300.0,NEAR OCEAN --122.54,37.62,35.0,1481.0,277.0,747.0,254.0,4.4286,262100.0,NEAR OCEAN --122.49,37.59,35.0,2683.0,475.0,1498.0,484.0,5.1282,262500.0,NEAR OCEAN --122.5,37.59,36.0,1521.0,253.0,736.0,241.0,4.3542,237500.0,NEAR OCEAN --122.5,37.6,35.0,2197.0,369.0,971.0,326.0,4.25,241700.0,NEAR OCEAN --122.55,37.59,31.0,1331.0,245.0,598.0,225.0,4.1827,345500.0,NEAR OCEAN --122.51,37.58,20.0,64.0,21.0,59.0,21.0,2.2375,450000.0,NEAR OCEAN --122.49,37.6,33.0,3507.0,669.0,1697.0,660.0,4.0795,270600.0,NEAR OCEAN --122.48,37.59,29.0,5889.0,959.0,2784.0,923.0,5.3991,273000.0,NEAR OCEAN --122.48,37.57,34.0,4648.0,806.0,2282.0,814.0,4.5556,249000.0,NEAR OCEAN --122.46,37.59,21.0,12902.0,2118.0,6160.0,2082.0,5.7653,325800.0,NEAR OCEAN --122.46,37.63,22.0,6728.0,1382.0,3783.0,1310.0,5.0479,280400.0,NEAR OCEAN --122.45,37.62,26.0,3507.0,512.0,1712.0,509.0,6.7206,344600.0,NEAR OCEAN --122.45,37.63,28.0,4946.0,848.0,2683.0,824.0,5.748,302100.0,NEAR OCEAN --122.44,37.63,35.0,5113.0,959.0,3004.0,964.0,4.7625,281300.0,NEAR OCEAN --122.43,37.63,34.0,4135.0,687.0,2154.0,742.0,4.9732,342300.0,NEAR OCEAN --122.43,37.61,21.0,10252.0,2595.0,4790.0,2428.0,4.1692,344500.0,NEAR OCEAN --122.41,37.62,49.0,1464.0,302.0,636.0,259.0,4.25,284100.0,NEAR OCEAN --122.41,37.61,46.0,2975.0,643.0,1479.0,577.0,3.8214,273600.0,NEAR OCEAN --122.42,37.61,37.0,1866.0,300.0,822.0,305.0,4.7,341300.0,NEAR OCEAN --122.42,37.62,39.0,1355.0,214.0,682.0,246.0,6.3443,324700.0,NEAR OCEAN --122.42,37.62,40.0,1545.0,264.0,756.0,282.0,4.4643,308100.0,NEAR OCEAN --122.42,37.61,17.0,1040.0,432.0,669.0,405.0,4.1513,137500.0,NEAR OCEAN --122.42,37.63,46.0,1811.0,337.0,796.0,333.0,3.43,292900.0,NEAR OCEAN --122.42,37.62,43.0,2367.0,409.0,1141.0,400.0,4.8295,319000.0,NEAR OCEAN --122.42,37.62,36.0,1017.0,165.0,407.0,159.0,4.8,306800.0,NEAR OCEAN --122.42,37.62,36.0,1538.0,256.0,671.0,247.0,4.4091,317900.0,NEAR OCEAN --122.41,37.62,39.0,3119.0,758.0,1807.0,696.0,3.2216,242700.0,NEAR OCEAN --122.4,37.62,32.0,3586.0,921.0,2249.0,911.0,3.1058,253000.0,NEAR OCEAN --122.41,37.63,39.0,4220.0,1055.0,2720.0,1046.0,2.639,242500.0,NEAR OCEAN --122.42,37.64,41.0,98.0,20.0,68.0,19.0,2.225,212500.0,NEAR OCEAN --122.43,37.63,15.0,2748.0,997.0,1447.0,901.0,3.5214,144200.0,NEAR OCEAN --122.42,37.63,46.0,66.0,11.0,30.0,12.0,2.375,275000.0,NEAR OCEAN --122.41,37.63,37.0,1252.0,275.0,878.0,287.0,4.2262,228500.0,NEAR OCEAN --122.41,37.63,35.0,865.0,226.0,602.0,217.0,3.0,229100.0,NEAR OCEAN --122.4,37.62,44.0,1619.0,362.0,1064.0,335.0,4.0238,224200.0,NEAR OCEAN --122.41,37.64,38.0,1204.0,268.0,921.0,247.0,4.4464,215400.0,NEAR OCEAN --122.4,37.61,35.0,2084.0,549.0,1077.0,545.0,3.1628,318400.0,NEAR OCEAN --122.38,37.6,33.0,2577.0,590.0,1867.0,566.0,3.3632,265100.0,NEAR OCEAN --122.39,37.6,36.0,1770.0,499.0,1225.0,459.0,2.56,273100.0,NEAR OCEAN --122.41,37.61,42.0,1602.0,262.0,705.0,255.0,5.7398,336400.0,NEAR OCEAN --122.41,37.61,43.0,1934.0,303.0,847.0,300.0,4.7381,347400.0,NEAR OCEAN --122.41,37.6,31.0,4424.0,834.0,1915.0,817.0,4.1364,412000.0,NEAR OCEAN --122.42,37.6,34.0,3562.0,565.0,1542.0,563.0,5.8783,405100.0,NEAR OCEAN --122.41,37.6,26.0,2754.0,402.0,1128.0,395.0,6.3719,466900.0,NEAR OCEAN --122.41,37.59,34.0,3931.0,622.0,1717.0,621.0,6.2946,450000.0,NEAR OCEAN --122.41,37.59,40.0,2401.0,383.0,894.0,356.0,5.6493,422400.0,NEAR OCEAN --122.4,37.6,30.0,5351.0,1134.0,2558.0,1074.0,3.5817,369300.0,NEAR OCEAN --122.4,37.6,52.0,1380.0,203.0,530.0,210.0,6.221,420300.0,NEAR OCEAN --122.39,37.6,44.0,2304.0,384.0,986.0,379.0,4.652,387100.0,NEAR OCEAN --122.39,37.6,34.0,707.0,,381.0,156.0,4.375,340900.0,NEAR OCEAN --122.39,37.59,32.0,4497.0,,1846.0,715.0,6.1323,500001.0,NEAR OCEAN --122.4,37.59,22.0,2754.0,477.0,1163.0,479.0,6.2306,500001.0,NEAR OCEAN --122.38,37.59,31.0,3052.0,844.0,1581.0,788.0,3.0744,457700.0,NEAR OCEAN --122.38,37.59,44.0,2089.0,348.0,837.0,317.0,4.6628,459200.0,NEAR OCEAN --122.39,37.58,36.0,6026.0,852.0,2314.0,892.0,7.8997,500001.0,NEAR OCEAN --122.4,37.58,26.0,3281.0,,1145.0,480.0,6.358,500001.0,NEAR OCEAN --122.39,37.59,33.0,2064.0,299.0,813.0,303.0,6.0374,500001.0,NEAR OCEAN --122.39,37.57,35.0,520.0,83.0,185.0,76.0,6.4865,450000.0,NEAR OCEAN --122.37,37.6,26.0,15.0,3.0,11.0,3.0,5.048,350000.0,NEAR OCEAN --122.37,37.59,39.0,4645.0,1196.0,2156.0,1113.0,3.4412,353800.0,NEAR OCEAN --122.38,37.59,49.0,1657.0,266.0,613.0,270.0,5.7837,378100.0,NEAR OCEAN --122.37,37.59,52.0,2272.0,403.0,963.0,376.0,5.7245,500000.0,NEAR OCEAN --122.37,37.58,52.0,2188.0,361.0,917.0,357.0,4.4,500000.0,NEAR OCEAN --122.38,37.58,52.0,1704.0,226.0,671.0,243.0,8.4704,500001.0,NEAR OCEAN --122.38,37.58,52.0,2039.0,299.0,772.0,303.0,6.471,500001.0,NEAR OCEAN --122.36,37.58,52.0,3084.0,595.0,1324.0,571.0,5.0756,374200.0,NEAR OCEAN --122.36,37.58,37.0,3325.0,734.0,1468.0,692.0,4.0987,434000.0,NEAR OCEAN --122.37,37.58,43.0,2506.0,432.0,967.0,428.0,4.7404,500001.0,NEAR OCEAN --122.37,37.58,52.0,1900.0,290.0,665.0,276.0,4.5486,500001.0,NEAR OCEAN --122.34,37.59,44.0,1395.0,269.0,736.0,288.0,5.6206,386400.0,NEAR OCEAN --122.33,37.58,40.0,2362.0,468.0,992.0,425.0,4.7917,359900.0,NEAR OCEAN --122.34,37.58,50.0,2784.0,743.0,1622.0,698.0,3.8413,372200.0,NEAR OCEAN --122.35,37.58,52.0,2495.0,458.0,1081.0,471.0,4.0855,410800.0,NEAR OCEAN --122.36,37.59,20.0,2638.0,854.0,1352.0,718.0,3.5125,350600.0,NEAR OCEAN --122.35,37.58,30.0,5039.0,1564.0,2129.0,1536.0,3.3469,345000.0,NEAR OCEAN --122.35,37.58,26.0,854.0,246.0,396.0,231.0,2.8393,375000.0,NEAR OCEAN --122.34,37.57,39.0,2647.0,616.0,1254.0,555.0,4.2407,433800.0,NEAR OCEAN --122.35,37.57,52.0,2059.0,345.0,800.0,308.0,4.97,500001.0,NEAR OCEAN --122.37,37.58,34.0,2697.0,313.0,810.0,279.0,12.4291,500001.0,NEAR OCEAN --122.36,37.57,35.0,1774.0,205.0,588.0,207.0,10.7339,500001.0,NEAR OCEAN --122.36,37.56,32.0,4684.0,540.0,1512.0,511.0,15.0001,500001.0,NEAR OCEAN --122.37,37.56,21.0,7189.0,874.0,2440.0,846.0,11.6833,500001.0,NEAR OCEAN --122.34,37.56,39.0,3562.0,391.0,1139.0,391.0,12.6417,500001.0,NEAR OCEAN --122.34,37.55,25.0,4470.0,518.0,1507.0,504.0,13.3913,500001.0,NEAR OCEAN --122.36,37.54,23.0,6184.0,747.0,2165.0,700.0,10.1675,500001.0,NEAR OCEAN --122.35,37.56,52.0,1659.0,191.0,519.0,201.0,14.4219,500001.0,NEAR OCEAN --122.34,37.57,52.0,2635.0,408.0,967.0,374.0,7.0422,500001.0,NEAR OCEAN --122.34,37.57,52.0,2547.0,373.0,876.0,359.0,8.2598,500001.0,NEAR OCEAN --122.35,37.57,52.0,2170.0,269.0,784.0,274.0,10.4286,500001.0,NEAR OCEAN --122.34,37.57,28.0,3751.0,949.0,1691.0,846.0,3.9728,300000.0,NEAR OCEAN --122.33,37.57,43.0,2543.0,621.0,1301.0,606.0,3.1111,318400.0,NEAR OCEAN --122.33,37.57,27.0,3085.0,876.0,1453.0,896.0,3.4333,290000.0,NEAR OCEAN --122.33,37.58,27.0,5144.0,1481.0,2518.0,1447.0,3.4836,287900.0,NEAR OCEAN --122.33,37.58,28.0,2784.0,736.0,1534.0,685.0,3.38,285400.0,NEAR OCEAN --122.31,37.6,34.0,3225.0,726.0,1958.0,656.0,3.6811,273000.0,NEAR BAY --122.31,37.58,44.0,1990.0,442.0,1141.0,424.0,3.9696,258300.0,NEAR BAY --122.31,37.57,45.0,1165.0,236.0,845.0,251.0,4.1875,267300.0,NEAR OCEAN --122.33,37.58,43.0,1772.0,422.0,1573.0,401.0,2.7474,233100.0,NEAR OCEAN --122.32,37.57,42.0,2574.0,614.0,2377.0,588.0,3.2891,237900.0,NEAR OCEAN --122.32,37.57,33.0,3384.0,819.0,2626.0,793.0,3.2285,234800.0,NEAR OCEAN --122.32,37.57,52.0,499.0,148.0,318.0,145.0,2.9934,256300.0,NEAR OCEAN --122.31,37.57,42.0,3157.0,676.0,1603.0,629.0,3.7422,292600.0,NEAR OCEAN --122.32,37.56,44.0,537.0,173.0,355.0,194.0,2.8571,250000.0,NEAR OCEAN --122.33,37.57,20.0,2126.0,643.0,1112.0,597.0,3.625,283300.0,NEAR OCEAN --122.32,37.56,9.0,1150.0,287.0,377.0,243.0,3.8317,237500.0,NEAR OCEAN --122.33,37.56,34.0,6394.0,1619.0,2400.0,1496.0,3.4902,500001.0,NEAR OCEAN --122.32,37.56,49.0,2016.0,299.0,691.0,288.0,5.549,500001.0,NEAR OCEAN --122.32,37.56,26.0,2339.0,704.0,1283.0,654.0,3.162,415000.0,NEAR OCEAN --122.33,37.56,50.0,1975.0,245.0,644.0,251.0,10.0743,500001.0,NEAR OCEAN --122.32,37.55,50.0,2501.0,433.0,1050.0,410.0,4.6406,500001.0,NEAR OCEAN --122.33,37.55,51.0,2565.0,332.0,870.0,309.0,9.3694,500001.0,NEAR OCEAN --122.34,37.55,44.0,2465.0,328.0,843.0,324.0,6.9533,500001.0,NEAR OCEAN --122.31,37.56,52.0,2351.0,494.0,1126.0,482.0,3.9688,356900.0,NEAR OCEAN --122.31,37.55,52.0,900.0,183.0,371.0,166.0,3.25,296400.0,NEAR OCEAN --122.32,37.55,46.0,1437.0,266.0,607.0,263.0,4.8068,369700.0,NEAR OCEAN --122.32,37.55,44.0,2151.0,411.0,849.0,370.0,4.4583,397100.0,NEAR OCEAN --122.33,37.55,33.0,2199.0,312.0,827.0,319.0,6.1349,500001.0,NEAR OCEAN --122.32,37.54,34.0,3661.0,692.0,1608.0,656.0,5.0774,407200.0,NEAR OCEAN --122.34,37.53,27.0,3339.0,481.0,1354.0,458.0,7.3081,464600.0,NEAR OCEAN --122.33,37.53,18.0,4493.0,760.0,1784.0,725.0,6.7042,413000.0,NEAR OCEAN --122.35,37.53,27.0,2169.0,305.0,905.0,319.0,7.7743,453100.0,NEAR OCEAN --122.34,37.52,34.0,3559.0,560.0,1747.0,550.0,6.6959,411200.0,NEAR OCEAN --122.33,37.53,25.0,1729.0,383.0,769.0,352.0,4.0417,458500.0,NEAR OCEAN --122.32,37.52,17.0,6645.0,1034.0,2557.0,1032.0,6.3892,480800.0,NEAR OCEAN --122.3,37.53,37.0,1338.0,215.0,535.0,221.0,5.4351,376600.0,NEAR OCEAN --122.3,37.53,40.0,1833.0,308.0,751.0,306.0,6.0,384200.0,NEAR OCEAN --122.3,37.53,38.0,984.0,171.0,429.0,157.0,5.3261,376800.0,NEAR OCEAN --122.31,37.52,35.0,1817.0,262.0,659.0,262.0,6.8336,457200.0,NEAR OCEAN --122.31,37.53,39.0,1160.0,191.0,508.0,185.0,5.9539,379100.0,NEAR OCEAN --122.3,37.54,39.0,4292.0,1097.0,1758.0,987.0,2.9405,340500.0,NEAR OCEAN --122.3,37.53,43.0,1748.0,366.0,984.0,371.0,4.5116,337800.0,NEAR OCEAN --122.29,37.53,41.0,839.0,190.0,419.0,215.0,5.012,368200.0,NEAR OCEAN --122.31,37.54,45.0,1222.0,220.0,492.0,205.0,5.539,396900.0,NEAR OCEAN --122.31,37.54,46.0,2444.0,397.0,952.0,402.0,4.75,388200.0,NEAR OCEAN --122.31,37.53,41.0,1608.0,269.0,676.0,267.0,4.6125,361700.0,NEAR OCEAN --122.32,37.53,39.0,2795.0,464.0,1183.0,443.0,5.779,387100.0,NEAR OCEAN --122.31,37.55,27.0,3931.0,933.0,1877.0,851.0,3.9722,354100.0,NEAR OCEAN --122.31,37.54,49.0,1340.0,281.0,660.0,284.0,4.163,393800.0,NEAR OCEAN --122.31,37.54,38.0,1946.0,407.0,975.0,417.0,4.0726,385400.0,NEAR OCEAN --122.31,37.54,42.0,1159.0,261.0,465.0,247.0,3.1842,352800.0,NEAR OCEAN --122.3,37.55,35.0,3675.0,735.0,1930.0,715.0,3.9833,342800.0,NEAR OCEAN --122.31,37.55,45.0,507.0,140.0,305.0,139.0,2.6159,272900.0,NEAR OCEAN --122.31,37.56,45.0,1685.0,321.0,815.0,314.0,4.2955,309700.0,NEAR OCEAN --122.31,37.56,36.0,1727.0,340.0,952.0,337.0,4.7917,316000.0,NEAR OCEAN --122.31,37.56,45.0,1792.0,301.0,829.0,318.0,4.9013,330100.0,NEAR OCEAN --122.31,37.56,40.0,1351.0,330.0,701.0,297.0,3.32,292900.0,NEAR OCEAN --122.31,37.57,37.0,1437.0,305.0,979.0,331.0,4.0,273700.0,NEAR OCEAN --122.31,37.57,31.0,2197.0,477.0,1193.0,394.0,4.6371,271100.0,NEAR OCEAN --122.3,37.57,36.0,1973.0,352.0,1169.0,370.0,5.033,270900.0,NEAR BAY --122.3,37.56,37.0,1962.0,367.0,1267.0,382.0,4.7344,271800.0,NEAR OCEAN --122.3,37.57,36.0,2406.0,436.0,1189.0,403.0,4.7917,276100.0,NEAR BAY --122.29,37.56,34.0,1693.0,281.0,846.0,291.0,5.3683,339400.0,NEAR BAY --122.3,37.56,36.0,1379.0,228.0,750.0,227.0,5.5381,282000.0,NEAR OCEAN --122.29,37.56,36.0,805.0,140.0,445.0,139.0,5.8221,289400.0,NEAR BAY --122.3,37.56,35.0,1873.0,351.0,945.0,333.0,5.5184,274800.0,NEAR OCEAN --122.29,37.56,12.0,6474.0,1467.0,2516.0,1390.0,5.0353,305800.0,NEAR BAY --122.26,37.55,17.0,4576.0,814.0,1941.0,807.0,5.9572,443800.0,NEAR BAY --122.26,37.55,17.0,1321.0,425.0,683.0,408.0,4.7045,500001.0,NEAR BAY --122.27,37.55,16.0,4789.0,816.0,1840.0,763.0,6.7474,338200.0,NEAR BAY --122.26,37.54,16.0,2118.0,333.0,770.0,318.0,7.2477,376000.0,NEAR BAY --122.27,37.55,15.0,1958.0,282.0,811.0,284.0,8.1221,483300.0,NEAR BAY --122.28,37.55,17.0,4199.0,629.0,2020.0,630.0,6.1228,375700.0,NEAR BAY --122.27,37.56,17.0,3211.0,847.0,1553.0,812.0,4.9434,292100.0,NEAR BAY --122.27,37.56,5.0,4921.0,1179.0,1810.0,1073.0,5.6936,322200.0,NEAR BAY --122.26,37.54,13.0,1422.0,295.0,395.0,195.0,5.3247,327800.0,NEAR BAY --122.26,37.54,5.0,3264.0,442.0,1607.0,453.0,9.1415,500001.0,NEAR BAY --122.26,37.54,5.0,1649.0,388.0,779.0,376.0,6.9635,417300.0,NEAR BAY --122.27,37.54,5.0,2140.0,420.0,990.0,394.0,6.035,438800.0,NEAR BAY --122.27,37.54,16.0,3913.0,565.0,1752.0,557.0,7.3644,419700.0,NEAR BAY --122.27,37.54,15.0,2126.0,310.0,905.0,306.0,8.9083,500001.0,NEAR BAY --122.26,37.56,23.0,7283.0,1342.0,3399.0,1298.0,5.6683,391000.0,NEAR BAY --122.26,37.57,23.0,7995.0,1254.0,3484.0,1198.0,6.5948,404000.0,NEAR BAY --122.25,37.56,19.0,7976.0,1406.0,3437.0,1338.0,5.6396,430300.0,NEAR BAY --122.29,37.55,27.0,3789.0,874.0,2243.0,866.0,4.39,270100.0,NEAR OCEAN --122.28,37.54,24.0,5114.0,1357.0,3169.0,1268.0,3.9699,293200.0,NEAR OCEAN --122.29,37.54,43.0,2268.0,438.0,1151.0,449.0,4.9091,293200.0,NEAR OCEAN --122.28,37.54,37.0,991.0,180.0,463.0,177.0,5.1701,294200.0,NEAR OCEAN --122.29,37.54,39.0,1459.0,285.0,761.0,291.0,5.0081,298100.0,NEAR OCEAN --122.29,37.54,41.0,1743.0,349.0,811.0,349.0,4.9464,282400.0,NEAR OCEAN --122.29,37.53,35.0,2043.0,511.0,1089.0,504.0,3.0278,310600.0,NEAR OCEAN --122.28,37.53,15.0,5417.0,1199.0,2593.0,1098.0,4.8047,438000.0,NEAR OCEAN --122.28,37.53,34.0,1980.0,385.0,970.0,391.0,5.1207,310900.0,NEAR OCEAN --122.27,37.53,43.0,1145.0,230.0,586.0,254.0,3.5,267400.0,NEAR OCEAN --122.28,37.53,25.0,3710.0,1015.0,2068.0,958.0,3.5445,286700.0,NEAR OCEAN --122.29,37.52,33.0,4104.0,751.0,1837.0,771.0,5.3506,388100.0,NEAR OCEAN --122.28,37.52,27.0,2958.0,655.0,1285.0,577.0,4.0801,397800.0,NEAR OCEAN --122.28,37.52,29.0,1526.0,355.0,724.0,315.0,4.0313,435200.0,NEAR OCEAN --122.28,37.52,38.0,2197.0,357.0,1228.0,373.0,5.4719,397900.0,NEAR OCEAN --122.29,37.52,38.0,3767.0,603.0,1455.0,615.0,6.8787,386800.0,NEAR OCEAN --122.3,37.52,38.0,2769.0,387.0,994.0,395.0,5.5902,417000.0,NEAR OCEAN --122.3,37.51,35.0,2789.0,445.0,1156.0,404.0,5.4322,391000.0,NEAR OCEAN --122.3,37.52,32.0,2297.0,347.0,871.0,342.0,8.1039,382200.0,NEAR OCEAN --122.31,37.52,24.0,2328.0,335.0,969.0,354.0,7.7364,435800.0,NEAR OCEAN --122.32,37.52,26.0,4042.0,591.0,1611.0,578.0,8.4693,419200.0,NEAR OCEAN --122.31,37.5,22.0,14034.0,3020.0,6266.0,2952.0,4.3939,491200.0,NEAR OCEAN --122.27,37.52,35.0,1051.0,259.0,517.0,234.0,3.7,339700.0,NEAR OCEAN --122.27,37.51,36.0,1406.0,224.0,598.0,237.0,5.8964,414800.0,NEAR OCEAN --122.29,37.51,35.0,3040.0,520.0,1374.0,518.0,6.1004,426400.0,NEAR OCEAN --122.26,37.52,34.0,483.0,131.0,291.0,157.0,3.0833,256300.0,NEAR OCEAN --122.26,37.51,46.0,672.0,149.0,351.0,136.0,5.3264,258100.0,NEAR OCEAN --122.25,37.51,45.0,989.0,174.0,504.0,180.0,4.8382,289400.0,NEAR OCEAN --122.25,37.5,44.0,348.0,79.0,154.0,73.0,4.7708,253800.0,NEAR OCEAN --122.27,37.51,39.0,3996.0,793.0,1744.0,761.0,4.5075,364900.0,NEAR OCEAN --122.26,37.51,29.0,3703.0,1075.0,1611.0,1025.0,2.7075,323800.0,NEAR OCEAN --122.26,37.5,24.0,2307.0,510.0,842.0,507.0,3.6111,341500.0,NEAR OCEAN --122.26,37.5,52.0,878.0,186.0,393.0,186.0,3.7045,360500.0,NEAR OCEAN --122.25,37.5,45.0,1812.0,336.0,752.0,329.0,4.95,345000.0,NEAR OCEAN --122.25,37.49,43.0,2607.0,477.0,1225.0,461.0,4.224,349600.0,NEAR OCEAN --122.25,37.49,40.0,2709.0,521.0,1156.0,510.0,4.6366,395500.0,NEAR OCEAN --122.25,37.49,44.0,4420.0,743.0,1790.0,735.0,6.142,394700.0,NEAR OCEAN --122.26,37.5,44.0,6983.0,1131.0,2818.0,1115.0,5.6271,374800.0,NEAR OCEAN --122.28,37.51,33.0,4719.0,,1980.0,757.0,6.1064,405000.0,NEAR OCEAN --122.28,37.5,33.0,6499.0,998.0,2694.0,957.0,7.4787,431300.0,NEAR OCEAN --122.28,37.49,25.0,7335.0,1157.0,2626.0,1049.0,6.5475,500001.0,NEAR OCEAN --122.28,37.49,29.0,4148.0,635.0,1638.0,627.0,6.912,457200.0,NEAR OCEAN --122.27,37.48,26.0,3542.0,507.0,1392.0,524.0,8.5184,500001.0,NEAR OCEAN --122.26,37.48,34.0,4453.0,682.0,1805.0,672.0,5.6038,451300.0,NEAR OCEAN --122.29,37.48,15.0,5480.0,892.0,2009.0,831.0,7.4678,500001.0,NEAR OCEAN --122.27,37.47,44.0,3022.0,473.0,1235.0,477.0,6.7058,495900.0,NEAR OCEAN --122.26,37.46,26.0,5067.0,750.0,1996.0,728.0,7.0001,500001.0,NEAR OCEAN --122.28,37.47,44.0,863.0,114.0,281.0,99.0,6.8879,500001.0,NEAR OCEAN --122.24,37.47,41.0,1183.0,203.0,455.0,171.0,5.1071,314100.0,NEAR OCEAN --122.25,37.48,37.0,3507.0,569.0,1663.0,608.0,5.0863,440300.0,NEAR OCEAN --122.24,37.47,40.0,1504.0,270.0,689.0,287.0,6.1244,308800.0,NEAR OCEAN --122.25,37.47,38.0,645.0,124.0,265.0,103.0,5.4688,305000.0,NEAR OCEAN --122.25,37.47,35.0,3183.0,515.0,1313.0,487.0,5.9062,383200.0,NEAR OCEAN --122.25,37.48,45.0,2743.0,390.0,974.0,400.0,7.1621,500001.0,NEAR OCEAN --122.24,37.48,45.0,4126.0,696.0,1722.0,668.0,4.8966,362100.0,NEAR OCEAN --122.24,37.48,40.0,4459.0,1027.0,2080.0,982.0,3.5322,361900.0,NEAR OCEAN --122.24,37.48,47.0,2423.0,407.0,1010.0,407.0,6.2154,362700.0,NEAR OCEAN --122.24,37.49,30.0,2956.0,590.0,1191.0,594.0,3.7463,427600.0,NEAR OCEAN --122.24,37.49,38.0,4105.0,950.0,2561.0,909.0,3.8684,265600.0,NEAR OCEAN --122.21,37.48,39.0,1535.0,340.0,1204.0,370.0,2.8482,247200.0,NEAR BAY --122.23,37.49,11.0,840.0,329.0,1338.0,345.0,2.3333,241700.0,NEAR OCEAN --122.21,37.49,24.0,2528.0,947.0,2437.0,861.0,2.2746,225000.0,NEAR BAY --122.22,37.48,47.0,2570.0,783.0,3107.0,724.0,2.8058,229500.0,NEAR OCEAN --122.22,37.48,34.0,1541.0,584.0,1564.0,558.0,2.56,250000.0,NEAR OCEAN --122.24,37.49,19.0,322.0,112.0,191.0,102.0,2.5833,500001.0,NEAR OCEAN --122.24,37.55,3.0,6164.0,1175.0,2198.0,975.0,6.7413,435900.0,NEAR BAY --122.25,37.53,16.0,4428.0,664.0,1677.0,623.0,7.6864,422500.0,NEAR BAY --122.26,37.53,4.0,5233.0,1109.0,1690.0,907.0,6.2007,311800.0,NEAR BAY --122.25,37.52,14.0,1472.0,291.0,876.0,292.0,4.3594,366000.0,NEAR BAY --122.21,37.52,18.0,2962.0,945.0,1639.0,851.0,2.7399,87500.0,NEAR BAY --122.19,37.48,35.0,7067.0,1646.0,5380.0,1597.0,4.1776,265300.0,NEAR BAY --122.21,37.48,20.0,505.0,216.0,326.0,216.0,2.9286,237500.0,NEAR BAY --122.21,37.48,37.0,1326.0,335.0,1771.0,335.0,3.0147,218100.0,NEAR BAY --122.2,37.48,32.0,640.0,166.0,991.0,160.0,1.9844,270000.0,NEAR BAY --122.2,37.48,41.0,733.0,155.0,652.0,140.0,5.1654,233600.0,NEAR BAY --122.2,37.48,30.0,1170.0,258.0,610.0,243.0,3.4427,263500.0,NEAR BAY --122.19,37.48,45.0,886.0,165.0,492.0,173.0,4.2708,267000.0,NEAR BAY --122.19,37.48,38.0,1300.0,269.0,608.0,292.0,4.5568,286900.0,NEAR BAY --122.19,37.47,44.0,1371.0,263.0,589.0,301.0,4.8068,312300.0,NEAR BAY --122.2,37.47,44.0,1927.0,332.0,846.0,362.0,4.2083,278200.0,NEAR BAY --122.2,37.47,37.0,1053.0,266.0,939.0,267.0,3.1989,320800.0,NEAR BAY --122.2,37.47,37.0,1403.0,369.0,1587.0,331.0,2.8258,232800.0,NEAR BAY --122.21,37.47,33.0,1266.0,415.0,1991.0,334.0,2.92,202800.0,NEAR OCEAN --122.21,37.47,26.0,1777.0,555.0,1966.0,497.0,3.0472,211000.0,NEAR OCEAN --122.21,37.47,43.0,733.0,162.0,497.0,175.0,3.2708,255300.0,NEAR OCEAN --122.22,37.47,23.0,7740.0,1943.0,4124.0,1743.0,3.3268,322800.0,NEAR OCEAN --122.22,37.47,35.0,367.0,113.0,398.0,109.0,2.5,166700.0,NEAR OCEAN --122.22,37.47,28.0,5956.0,1612.0,3571.0,1549.0,3.1864,272800.0,NEAR OCEAN --122.23,37.48,33.0,3108.0,805.0,1895.0,717.0,3.3015,267700.0,NEAR OCEAN --122.23,37.47,39.0,5264.0,1259.0,3057.0,1265.0,3.623,276600.0,NEAR OCEAN --122.23,37.48,38.0,1578.0,399.0,879.0,388.0,2.7969,298400.0,NEAR OCEAN --122.24,37.47,35.0,2283.0,491.0,1148.0,436.0,4.5556,318600.0,NEAR OCEAN --122.24,37.47,36.0,2021.0,433.0,1117.0,432.0,3.929,303100.0,NEAR OCEAN --122.23,37.46,33.0,2643.0,464.0,1015.0,427.0,4.2232,363700.0,NEAR OCEAN --122.23,37.46,26.0,4670.0,1039.0,2103.0,933.0,4.4167,333800.0,NEAR OCEAN --122.25,37.46,33.0,6841.0,950.0,2681.0,980.0,7.1088,443300.0,NEAR OCEAN --122.24,37.46,36.0,4686.0,781.0,2254.0,845.0,6.1043,343500.0,NEAR OCEAN --122.26,37.45,17.0,2742.0,441.0,986.0,421.0,5.9285,496000.0,NEAR OCEAN --122.23,37.46,36.0,6090.0,1057.0,3081.0,1075.0,5.6629,343600.0,NEAR OCEAN --122.22,37.46,37.0,2586.0,495.0,1208.0,502.0,4.3214,342700.0,NEAR OCEAN --122.23,37.45,34.0,4177.0,723.0,1586.0,660.0,5.0457,395100.0,NEAR OCEAN --122.23,37.45,29.0,1617.0,235.0,758.0,246.0,7.7932,469900.0,NEAR OCEAN --122.22,37.46,13.0,2888.0,546.0,1182.0,504.0,6.0255,409300.0,NEAR OCEAN --122.2,37.46,40.0,1723.0,208.0,976.0,209.0,9.8892,500001.0,NEAR OCEAN --122.2,37.44,31.0,2328.0,270.0,722.0,247.0,15.0001,500001.0,NEAR OCEAN --122.22,37.44,32.0,4281.0,501.0,1318.0,484.0,15.0001,500001.0,NEAR OCEAN --122.21,37.46,48.0,2560.0,322.0,921.0,301.0,10.8758,500001.0,NEAR OCEAN --122.21,37.46,40.0,1777.0,207.0,577.0,207.0,15.0001,500001.0,NEAR OCEAN --122.18,37.46,40.0,2529.0,293.0,831.0,258.0,15.0001,500001.0,NEAR BAY --122.2,37.47,40.0,2959.0,389.0,985.0,365.0,9.9025,500001.0,NEAR BAY --122.18,37.47,37.0,2848.0,328.0,852.0,327.0,13.367,500001.0,NEAR BAY --122.16,37.47,44.0,2581.0,437.0,1006.0,414.0,5.397,341700.0,NEAR BAY --122.17,37.48,39.0,2427.0,401.0,1178.0,408.0,5.9629,352700.0,NEAR BAY --122.16,37.47,33.0,3687.0,852.0,3091.0,852.0,2.6506,162600.0,NEAR BAY --122.16,37.48,36.0,2238.0,479.0,1949.0,457.0,2.3769,157300.0,NEAR BAY --122.14,37.5,46.0,30.0,4.0,13.0,5.0,15.0001,500001.0,NEAR BAY --122.14,37.48,36.0,1210.0,236.0,981.0,239.0,4.0039,148900.0,NEAR BAY --122.14,37.47,36.0,2081.0,412.0,1931.0,373.0,3.7917,160600.0,NEAR BAY --122.12,37.48,36.0,880.0,177.0,795.0,188.0,3.8194,159400.0,NEAR BAY --122.13,37.47,25.0,1630.0,353.0,1546.0,371.0,5.0893,173400.0,NEAR BAY --122.13,37.46,37.0,1576.0,334.0,1385.0,323.0,2.5294,159400.0,NEAR BAY --122.13,37.46,35.0,1321.0,300.0,1133.0,287.0,3.7312,159600.0,NEAR BAY --122.12,37.45,38.0,1276.0,314.0,955.0,287.0,2.0096,155700.0,NEAR BAY --122.13,37.46,31.0,2247.0,573.0,1711.0,511.0,3.2642,185600.0,NEAR BAY --122.13,37.47,30.0,1480.0,294.0,1126.0,301.0,4.983,166700.0,NEAR BAY --122.14,37.47,37.0,3373.0,815.0,2909.0,705.0,2.8868,156600.0,NEAR BAY --122.15,37.47,37.0,1844.0,382.0,1634.0,417.0,2.7993,145500.0,NEAR BAY --122.15,37.47,38.0,1560.0,301.0,1331.0,316.0,3.0521,151500.0,NEAR BAY --122.15,37.46,30.0,4198.0,1244.0,2678.0,1147.0,3.6712,308600.0,NEAR BAY --122.14,37.46,27.0,5580.0,2009.0,4165.0,1763.0,2.4375,189000.0,NEAR BAY --122.15,37.47,39.0,1295.0,239.0,566.0,242.0,5.6407,326400.0,NEAR BAY --122.15,37.46,42.0,1995.0,412.0,794.0,374.0,5.6234,379600.0,NEAR BAY --122.16,37.46,45.0,2068.0,348.0,844.0,366.0,6.227,417800.0,NEAR BAY --122.16,37.45,50.0,196.0,41.0,76.0,42.0,7.6129,412500.0,NEAR BAY --122.16,37.46,32.0,2663.0,661.0,1403.0,733.0,4.2667,410200.0,NEAR BAY --122.17,37.46,47.0,2312.0,332.0,1044.0,282.0,9.459,500001.0,NEAR BAY --122.19,37.46,34.0,5419.0,1183.0,2002.0,1138.0,4.1985,500001.0,NEAR BAY --122.17,37.45,33.0,1828.0,396.0,766.0,378.0,4.4531,500001.0,NEAR BAY --122.17,37.45,35.0,1025.0,242.0,388.0,232.0,5.1995,500001.0,NEAR BAY --122.18,37.45,43.0,2061.0,437.0,817.0,385.0,4.4688,460200.0,NEAR BAY --122.18,37.45,37.0,5257.0,1360.0,2128.0,1264.0,4.0,394300.0,NEAR BAY --122.19,37.45,18.0,1636.0,414.0,853.0,439.0,5.1032,464600.0,NEAR OCEAN --122.18,37.44,44.0,2237.0,347.0,948.0,346.0,8.2436,500001.0,NEAR OCEAN --122.19,37.44,38.0,3383.0,456.0,1203.0,465.0,9.3198,500001.0,NEAR OCEAN --122.19,37.44,39.0,4402.0,618.0,1616.0,631.0,8.9955,500001.0,NEAR OCEAN --122.2,37.43,38.0,3626.0,528.0,1350.0,532.0,7.3681,500001.0,NEAR OCEAN --122.21,37.44,35.0,1140.0,193.0,486.0,199.0,4.6908,500001.0,NEAR OCEAN --122.2,37.43,40.0,2223.0,412.0,1050.0,417.0,5.2421,444500.0,NEAR OCEAN --122.19,37.43,39.0,2392.0,420.0,937.0,406.0,6.6136,472800.0,NEAR OCEAN --122.2,37.43,22.0,3294.0,744.0,1337.0,655.0,5.2391,500001.0,NEAR OCEAN --122.21,37.43,33.0,1606.0,254.0,727.0,271.0,8.6963,500001.0,NEAR OCEAN --122.21,37.43,23.0,5741.0,1012.0,1843.0,888.0,5.7211,500001.0,NEAR OCEAN --122.23,37.42,16.0,1945.0,320.0,512.0,300.0,7.4542,500001.0,NEAR OCEAN --122.19,37.42,47.0,932.0,167.0,295.0,116.0,8.4375,500001.0,NEAR OCEAN --122.21,37.43,20.0,975.0,134.0,324.0,146.0,9.7796,500001.0,NEAR OCEAN --122.21,37.42,28.0,564.0,72.0,191.0,79.0,11.9666,500001.0,NEAR OCEAN --122.2,37.4,37.0,1296.0,194.0,540.0,192.0,8.2782,500001.0,NEAR OCEAN --122.2,37.4,30.0,2612.0,338.0,980.0,324.0,10.0481,500001.0,NEAR OCEAN --122.21,37.38,28.0,4518.0,578.0,1489.0,559.0,11.3176,500001.0,NEAR OCEAN --122.2,37.35,17.0,3095.0,442.0,1173.0,424.0,13.2986,500001.0,NEAR BAY --122.21,37.37,34.0,1476.0,217.0,613.0,223.0,8.2883,500001.0,NEAR OCEAN --122.22,37.37,26.0,440.0,202.0,322.0,218.0,5.1831,350000.0,NEAR OCEAN --122.22,37.36,34.0,1559.0,243.0,600.0,242.0,8.7382,500001.0,NEAR OCEAN --122.22,37.4,32.0,2297.0,287.0,814.0,283.0,15.0001,500001.0,NEAR OCEAN --122.25,37.45,34.0,2999.0,365.0,927.0,369.0,10.2811,500001.0,NEAR OCEAN --122.27,37.45,41.0,830.0,136.0,353.0,153.0,6.3824,500001.0,NEAR OCEAN --122.24,37.43,36.0,2410.0,361.0,934.0,377.0,7.652,500001.0,NEAR OCEAN --122.27,37.43,33.0,1601.0,223.0,629.0,215.0,15.0001,500001.0,NEAR OCEAN --122.25,37.39,33.0,370.0,42.0,153.0,53.0,10.6514,500001.0,NEAR OCEAN --122.26,37.38,28.0,1103.0,164.0,415.0,154.0,7.8633,500001.0,NEAR OCEAN --122.29,37.41,30.0,6373.0,854.0,2149.0,798.0,10.6868,500001.0,NEAR OCEAN --122.46,37.51,23.0,949.0,151.0,399.0,149.0,5.6286,411300.0,NEAR OCEAN --122.47,37.5,18.0,2297.0,416.0,1086.0,381.0,4.875,334600.0,NEAR OCEAN --122.47,37.5,25.0,950.0,259.0,404.0,195.0,3.1937,319200.0,NEAR OCEAN --122.48,37.51,22.0,1564.0,278.0,761.0,270.0,4.7578,318500.0,NEAR OCEAN --122.47,37.51,15.0,4974.0,764.0,2222.0,774.0,6.7606,364300.0,NEAR OCEAN --122.44,37.52,16.0,7077.0,1179.0,3502.0,1148.0,5.9919,345100.0,NEAR OCEAN --122.53,37.5,19.0,4768.0,807.0,2199.0,805.0,6.1896,331100.0,NEAR OCEAN --122.49,37.54,15.0,3456.0,545.0,1527.0,535.0,6.3256,368000.0,NEAR OCEAN --122.51,37.53,17.0,1574.0,262.0,672.0,241.0,7.2929,355800.0,NEAR OCEAN --122.5,37.51,11.0,749.0,137.0,355.0,124.0,8.2364,371800.0,NEAR OCEAN --122.49,37.5,21.0,1209.0,309.0,801.0,259.0,4.5625,500000.0,NEAR OCEAN --122.43,37.43,17.0,11999.0,2249.0,5467.0,1989.0,4.8405,354300.0,NEAR OCEAN --122.34,37.46,21.0,1799.0,293.0,576.0,277.0,7.439,500001.0,NEAR OCEAN --122.38,37.34,33.0,1054.0,209.0,400.0,161.0,7.7773,456300.0,NEAR OCEAN --122.33,37.39,52.0,573.0,102.0,232.0,92.0,6.2263,500001.0,NEAR OCEAN --122.27,37.32,37.0,2607.0,534.0,1346.0,507.0,5.3951,277700.0,NEAR OCEAN --122.27,37.24,30.0,2762.0,593.0,1581.0,502.0,5.1002,319400.0,NEAR OCEAN --122.38,37.18,52.0,1746.0,315.0,941.0,220.0,3.3047,286100.0,NEAR OCEAN --119.77,34.44,24.0,5652.0,1313.0,2312.0,1294.0,2.4717,295300.0,NEAR OCEAN --119.78,34.45,9.0,1830.0,353.0,1515.0,220.0,4.2109,450000.0,NEAR OCEAN --119.79,34.45,24.0,2746.0,433.0,1076.0,380.0,5.8635,348700.0,NEAR OCEAN --119.75,34.45,26.0,3578.0,677.0,1504.0,618.0,4.1375,395000.0,NEAR OCEAN --119.75,34.44,28.0,1080.0,298.0,524.0,251.0,1.8432,327300.0,NEAR OCEAN --119.76,34.44,28.0,1985.0,582.0,1092.0,548.0,2.4701,290900.0,NEAR OCEAN --119.75,34.45,6.0,2864.0,,1404.0,603.0,5.5073,263800.0,NEAR OCEAN --119.78,34.48,21.0,2377.0,322.0,1007.0,328.0,7.9248,500001.0,NEAR OCEAN --119.75,34.5,26.0,3563.0,579.0,1479.0,575.0,5.9522,438400.0,<1H OCEAN --119.78,34.45,23.0,2077.0,306.0,705.0,256.0,6.4744,500001.0,NEAR OCEAN --119.73,34.44,38.0,1729.0,,801.0,395.0,3.1364,357500.0,NEAR OCEAN --119.73,34.43,35.0,2703.0,654.0,1383.0,631.0,4.5278,340400.0,NEAR OCEAN --119.74,34.44,26.0,4257.0,1031.0,1861.0,950.0,3.4047,294500.0,NEAR OCEAN --119.72,34.43,30.0,2491.0,656.0,1091.0,576.0,2.5139,279500.0,<1H OCEAN --119.72,34.43,27.0,984.0,299.0,777.0,313.0,2.5694,275000.0,<1H OCEAN --119.72,34.43,46.0,1332.0,329.0,746.0,310.0,3.6719,357400.0,<1H OCEAN --119.72,34.43,36.0,1156.0,309.0,521.0,304.0,2.6014,320600.0,<1H OCEAN --119.72,34.43,33.0,1028.0,377.0,753.0,356.0,2.3454,243800.0,<1H OCEAN --119.71,34.43,18.0,1170.0,372.0,681.0,346.0,2.1974,255000.0,<1H OCEAN --119.71,34.42,31.0,1643.0,499.0,1253.0,499.0,3.1563,267000.0,<1H OCEAN --119.71,34.43,47.0,1572.0,417.0,790.0,384.0,2.6429,279200.0,<1H OCEAN --119.72,34.44,50.0,3265.0,509.0,1256.0,443.0,6.3997,500001.0,<1H OCEAN --119.71,34.44,52.0,1837.0,343.0,711.0,355.0,4.1316,443000.0,<1H OCEAN --119.7,34.43,37.0,1462.0,306.0,678.0,322.0,5.1545,418400.0,<1H OCEAN --119.71,34.43,48.0,2408.0,536.0,1005.0,497.0,3.5213,458600.0,<1H OCEAN --119.7,34.43,39.0,1486.0,467.0,758.0,409.0,2.6875,320600.0,<1H OCEAN --119.7,34.43,52.0,977.0,289.0,412.0,272.0,2.125,300000.0,<1H OCEAN --119.7,34.47,32.0,3725.0,569.0,1304.0,527.0,7.7261,500001.0,<1H OCEAN --119.72,34.47,34.0,3262.0,533.0,1265.0,502.0,5.8411,381800.0,<1H OCEAN --119.71,34.45,35.0,2183.0,363.0,988.0,351.0,5.5922,384400.0,<1H OCEAN --119.71,34.44,41.0,2220.0,367.0,927.0,355.0,5.3184,376000.0,<1H OCEAN --119.72,34.44,43.0,1781.0,342.0,663.0,358.0,4.7,293800.0,<1H OCEAN --119.72,34.44,39.0,1489.0,304.0,700.0,268.0,3.8819,289900.0,<1H OCEAN --119.73,34.44,48.0,2114.0,390.0,973.0,367.0,4.8021,351100.0,NEAR OCEAN --119.73,34.45,44.0,2261.0,328.0,763.0,294.0,6.7449,415600.0,<1H OCEAN --119.74,34.44,27.0,1251.0,282.0,503.0,283.0,2.8,353000.0,NEAR OCEAN --119.74,34.45,29.0,2526.0,388.0,1092.0,409.0,6.0597,383100.0,<1H OCEAN --119.69,34.44,41.0,1989.0,271.0,666.0,269.0,6.8406,500001.0,<1H OCEAN --119.69,34.43,44.0,2440.0,485.0,1011.0,442.0,4.149,443600.0,<1H OCEAN --119.7,34.43,35.0,1402.0,369.0,654.0,385.0,2.6205,318800.0,<1H OCEAN --119.69,34.43,43.0,1257.0,311.0,671.0,263.0,2.875,280600.0,<1H OCEAN --119.69,34.43,37.0,2801.0,497.0,1150.0,476.0,5.8311,387700.0,<1H OCEAN --119.68,34.44,23.0,2600.0,398.0,917.0,374.0,8.7394,500001.0,<1H OCEAN --119.67,34.47,35.0,2700.0,422.0,1995.0,383.0,4.9757,500001.0,<1H OCEAN --119.66,34.44,26.0,2790.0,413.0,1014.0,397.0,6.5631,500001.0,<1H OCEAN --119.66,34.43,27.0,5509.0,1059.0,2591.0,979.0,3.8456,500001.0,<1H OCEAN --119.67,34.44,32.0,3202.0,537.0,1316.0,538.0,5.2888,463800.0,<1H OCEAN --119.69,34.43,30.0,1273.0,343.0,1082.0,325.0,2.5104,228100.0,<1H OCEAN --119.68,34.43,33.0,1961.0,462.0,1693.0,445.0,2.9896,236000.0,<1H OCEAN --119.68,34.43,49.0,1785.0,386.0,1267.0,380.0,3.5208,251200.0,<1H OCEAN --119.67,34.38,28.0,1814.0,526.0,849.0,420.0,3.1625,364300.0,<1H OCEAN --119.68,34.42,38.0,1452.0,354.0,1139.0,340.0,2.707,236800.0,<1H OCEAN --119.67,34.43,39.0,1467.0,381.0,1404.0,374.0,2.3681,241400.0,<1H OCEAN --119.67,34.42,37.0,1673.0,444.0,1477.0,446.0,2.0643,246700.0,<1H OCEAN --119.67,34.42,23.0,1333.0,393.0,1369.0,381.0,2.5947,232600.0,<1H OCEAN --119.7,34.43,52.0,1364.0,460.0,804.0,400.0,2.375,293800.0,<1H OCEAN --119.7,34.42,52.0,329.0,109.0,291.0,102.0,1.4722,350000.0,<1H OCEAN --119.7,34.42,41.0,725.0,239.0,582.0,214.0,3.1667,362500.0,<1H OCEAN --119.69,34.42,17.0,1826.0,544.0,1325.0,532.0,1.2762,253600.0,<1H OCEAN --119.69,34.42,52.0,302.0,112.0,392.0,114.0,2.5978,258300.0,<1H OCEAN --119.71,34.42,52.0,1838.0,692.0,851.0,576.0,1.4851,237500.0,<1H OCEAN --119.71,34.42,49.0,1560.0,436.0,1041.0,411.0,2.925,246900.0,<1H OCEAN --119.71,34.42,39.0,1172.0,322.0,606.0,316.0,2.16,259100.0,<1H OCEAN --119.71,34.42,50.0,840.0,279.0,488.0,270.0,2.2097,258300.0,<1H OCEAN --119.7,34.42,43.0,1802.0,557.0,1490.0,538.0,2.675,247900.0,<1H OCEAN --119.7,34.41,52.0,1526.0,458.0,1633.0,449.0,2.2069,226500.0,NEAR OCEAN --119.72,34.42,37.0,1635.0,427.0,1027.0,408.0,3.5905,264700.0,NEAR OCEAN --119.72,34.42,31.0,1524.0,383.0,1257.0,398.0,2.6019,250000.0,NEAR OCEAN --119.72,34.42,49.0,1610.0,370.0,961.0,351.0,2.6983,260100.0,NEAR OCEAN --119.72,34.42,52.0,1759.0,387.0,980.0,402.0,4.0125,261000.0,NEAR OCEAN --119.71,34.42,52.0,1411.0,324.0,1091.0,306.0,4.1062,252900.0,<1H OCEAN --119.71,34.42,23.0,2068.0,658.0,1898.0,570.0,2.5506,230800.0,<1H OCEAN --119.71,34.41,31.0,1034.0,319.0,997.0,308.0,2.6538,231800.0,NEAR OCEAN --119.73,34.35,20.0,1648.0,319.0,905.0,307.0,4.375,335200.0,NEAR OCEAN --119.71,34.36,34.0,1706.0,276.0,628.0,243.0,4.1842,364000.0,NEAR OCEAN --119.7,34.36,35.0,1604.0,334.0,904.0,337.0,4.7411,336400.0,NEAR OCEAN --119.71,34.4,36.0,1846.0,358.0,748.0,329.0,4.2283,326800.0,NEAR OCEAN --119.7,34.4,25.0,1858.0,493.0,865.0,460.0,3.0938,312500.0,NEAR OCEAN --119.72,34.41,35.0,871.0,145.0,354.0,154.0,4.3214,341800.0,NEAR OCEAN --119.71,34.4,27.0,3782.0,771.0,1742.0,751.0,4.0451,395100.0,NEAR OCEAN --119.71,34.41,18.0,1225.0,317.0,694.0,306.0,3.6823,255000.0,NEAR OCEAN --119.7,34.41,19.0,1215.0,360.0,1349.0,423.0,2.6607,226500.0,NEAR OCEAN --119.7,34.41,19.0,2086.0,575.0,1701.0,530.0,2.8042,236100.0,NEAR OCEAN --119.69,34.38,39.0,1383.0,459.0,677.0,362.0,2.25,281300.0,NEAR OCEAN --119.69,34.41,44.0,1208.0,357.0,603.0,297.0,2.6103,500000.0,<1H OCEAN --119.75,34.43,23.0,2982.0,837.0,1317.0,787.0,3.3776,283200.0,NEAR OCEAN --119.74,34.43,26.0,3119.0,562.0,1459.0,562.0,5.0434,340400.0,NEAR OCEAN --119.75,34.4,31.0,1997.0,299.0,826.0,301.0,6.8927,500001.0,NEAR OCEAN --119.73,34.43,27.0,1448.0,404.0,978.0,338.0,2.303,261000.0,NEAR OCEAN --119.73,34.42,23.0,1364.0,227.0,638.0,238.0,5.3279,413900.0,NEAR OCEAN --119.73,34.42,25.0,2024.0,312.0,907.0,335.0,5.4127,392800.0,NEAR OCEAN --119.72,34.41,35.0,1853.0,375.0,878.0,338.0,4.9044,335300.0,NEAR OCEAN --119.74,34.41,30.0,2365.0,417.0,1053.0,409.0,5.5959,346200.0,NEAR OCEAN --119.73,34.41,29.0,1769.0,297.0,703.0,269.0,4.4375,350000.0,NEAR OCEAN --119.72,34.41,26.0,1648.0,378.0,954.0,405.0,3.2895,335000.0,NEAR OCEAN --119.74,34.35,34.0,1664.0,292.0,705.0,257.0,5.0,329400.0,NEAR OCEAN --119.74,34.38,32.0,1479.0,287.0,830.0,288.0,5.345,322600.0,NEAR OCEAN --119.63,34.42,42.0,1765.0,263.0,753.0,260.0,8.5608,500001.0,<1H OCEAN --119.64,34.43,34.0,3045.0,570.0,1002.0,488.0,5.623,500001.0,<1H OCEAN --119.63,34.4,29.0,3865.0,814.0,1266.0,613.0,6.0069,500001.0,<1H OCEAN --119.64,34.43,32.0,1872.0,318.0,749.0,296.0,4.625,500001.0,<1H OCEAN --119.61,34.45,33.0,3597.0,519.0,1207.0,479.0,5.3963,500001.0,<1H OCEAN --119.63,34.44,37.0,3188.0,442.0,984.0,376.0,9.4522,500001.0,<1H OCEAN --119.61,34.43,16.0,2665.0,391.0,794.0,311.0,9.0267,500001.0,<1H OCEAN --119.53,34.41,8.0,1705.0,400.0,886.0,391.0,3.9659,297400.0,<1H OCEAN --119.52,34.41,20.0,4489.0,800.0,2867.0,765.0,4.806,279700.0,<1H OCEAN --119.51,34.4,24.0,3422.0,596.0,1763.0,601.0,5.2039,301300.0,NEAR OCEAN --119.51,34.4,15.0,1112.0,256.0,411.0,245.0,2.0625,314300.0,NEAR OCEAN --119.52,34.39,23.0,1414.0,365.0,889.0,345.0,2.6397,250000.0,NEAR OCEAN --119.51,34.39,32.0,1921.0,394.0,951.0,334.0,3.233,346000.0,NEAR OCEAN --119.52,34.4,20.0,1834.0,477.0,1305.0,417.0,3.2125,251000.0,NEAR OCEAN --119.53,34.38,22.0,2323.0,727.0,1301.0,478.0,2.7864,300000.0,NEAR OCEAN --119.53,34.4,14.0,1671.0,383.0,1079.0,365.0,3.1389,248700.0,<1H OCEAN --119.51,34.46,28.0,3506.0,563.0,1362.0,483.0,6.091,500001.0,<1H OCEAN --119.55,34.38,17.0,1951.0,368.0,681.0,350.0,2.7275,500001.0,<1H OCEAN --119.57,34.38,22.0,2512.0,426.0,919.0,341.0,5.759,425000.0,<1H OCEAN --119.59,34.43,28.0,2718.0,542.0,1066.0,442.0,4.2059,500001.0,<1H OCEAN --119.59,34.39,35.0,622.0,170.0,278.0,139.0,3.6969,335000.0,<1H OCEAN --119.5,34.35,39.0,308.0,38.0,59.0,21.0,11.7794,500001.0,NEAR OCEAN --119.49,34.39,17.0,4617.0,982.0,2303.0,923.0,3.9224,230600.0,NEAR OCEAN --119.72,34.77,35.0,2469.0,553.0,1168.0,427.0,2.4583,62100.0,<1H OCEAN --120.18,34.75,17.0,2074.0,382.0,1035.0,359.0,3.7958,400000.0,<1H OCEAN --120.27,34.72,14.0,1289.0,277.0,693.0,237.0,3.2569,230800.0,<1H OCEAN --120.18,34.62,25.0,1337.0,219.0,671.0,225.0,3.1912,226400.0,NEAR OCEAN --120.2,34.63,14.0,2647.0,515.0,1487.0,488.0,4.4519,227900.0,NEAR OCEAN --120.2,34.61,15.0,2958.0,690.0,1348.0,617.0,3.8582,215200.0,NEAR OCEAN --120.13,34.63,11.0,2137.0,339.0,916.0,338.0,5.5221,394900.0,NEAR OCEAN --120.12,34.6,10.0,2426.0,426.0,966.0,419.0,5.5106,290900.0,NEAR OCEAN --120.14,34.6,22.0,2136.0,465.0,1143.0,409.0,2.9479,243100.0,NEAR OCEAN --120.16,34.61,17.0,921.0,189.0,434.0,219.0,3.0185,500001.0,NEAR OCEAN --120.14,34.59,9.0,2536.0,499.0,832.0,385.0,2.5743,309800.0,NEAR OCEAN --120.14,34.59,24.0,1601.0,282.0,731.0,285.0,4.2026,259800.0,NEAR OCEAN --120.04,34.72,13.0,3942.0,585.0,1542.0,515.0,6.6054,500001.0,NEAR OCEAN --120.11,34.66,18.0,1348.0,238.0,631.0,247.0,5.3154,289400.0,NEAR OCEAN --120.08,34.64,18.0,2375.0,429.0,1048.0,369.0,4.2222,375000.0,NEAR OCEAN --120.08,34.62,11.0,3478.0,588.0,1693.0,582.0,4.6554,272300.0,NEAR OCEAN --120.09,34.62,18.0,2708.0,382.0,988.0,359.0,5.5194,367000.0,NEAR OCEAN --120.11,34.62,16.0,2943.0,394.0,959.0,359.0,6.2094,440000.0,NEAR OCEAN --120.09,34.61,11.0,586.0,125.0,317.0,74.0,2.8906,84400.0,NEAR OCEAN --120.08,34.59,24.0,1874.0,319.0,820.0,315.0,5.1909,390200.0,NEAR OCEAN --120.01,34.54,30.0,2992.0,609.0,1288.0,465.0,3.9375,292900.0,NEAR OCEAN --120.44,34.91,12.0,3189.0,463.0,1200.0,442.0,5.299,226800.0,<1H OCEAN --120.45,34.91,16.0,712.0,147.0,355.0,162.0,2.56,150000.0,<1H OCEAN --120.48,34.9,20.0,3842.0,630.0,2490.0,662.0,3.0559,120100.0,<1H OCEAN --120.45,34.88,15.0,2143.0,286.0,929.0,315.0,5.7306,269700.0,<1H OCEAN --120.44,34.88,9.0,3124.0,415.0,1169.0,407.0,6.7694,275100.0,<1H OCEAN --120.45,34.87,4.0,1533.0,221.0,545.0,191.0,7.5696,328700.0,<1H OCEAN --120.44,34.87,13.0,2312.0,352.0,1084.0,388.0,5.038,194000.0,<1H OCEAN --120.45,34.86,23.0,3415.0,778.0,1492.0,633.0,2.2791,114800.0,NEAR OCEAN --120.4,34.86,11.0,1633.0,348.0,504.0,327.0,2.0508,275000.0,<1H OCEAN --120.4,34.85,26.0,2384.0,385.0,1323.0,400.0,4.8185,157900.0,<1H OCEAN --120.41,34.86,15.0,978.0,187.0,407.0,182.0,4.375,158000.0,<1H OCEAN --120.43,34.86,17.0,3172.0,506.0,1538.0,473.0,4.3125,168100.0,<1H OCEAN --120.43,34.86,17.0,1932.0,347.0,874.0,312.0,3.8203,141500.0,<1H OCEAN --120.37,34.9,17.0,2649.0,386.0,1057.0,362.0,4.7813,326800.0,<1H OCEAN --120.33,34.87,24.0,2590.0,404.0,1093.0,338.0,3.9375,341200.0,<1H OCEAN --120.42,34.91,4.0,6986.0,1217.0,2801.0,1212.0,3.2135,212700.0,<1H OCEAN --120.43,34.9,27.0,2019.0,354.0,1029.0,346.0,3.5391,144700.0,<1H OCEAN --120.43,34.9,30.0,2388.0,393.0,1117.0,375.0,4.1058,164000.0,<1H OCEAN --120.41,34.88,8.0,3119.0,620.0,1159.0,544.0,3.5288,165500.0,<1H OCEAN --120.42,34.89,24.0,2020.0,307.0,855.0,283.0,5.0099,162500.0,<1H OCEAN --120.43,34.89,30.0,1979.0,342.0,999.0,320.0,5.0286,158000.0,<1H OCEAN --120.43,34.89,28.0,2862.0,478.0,1384.0,463.0,4.6694,158200.0,<1H OCEAN --120.43,34.88,22.0,2580.0,381.0,1149.0,372.0,5.0113,158600.0,<1H OCEAN --120.42,34.87,18.0,2505.0,376.0,1162.0,382.0,4.8359,195700.0,<1H OCEAN --120.43,34.87,21.0,2131.0,329.0,1094.0,353.0,4.6648,193000.0,<1H OCEAN --120.43,34.87,26.0,1699.0,272.0,799.0,266.0,3.9871,157700.0,<1H OCEAN --120.41,34.88,4.0,3680.0,559.0,1678.0,569.0,5.0639,201700.0,<1H OCEAN --120.4,34.87,10.0,2197.0,329.0,1064.0,319.0,4.9766,199600.0,<1H OCEAN --120.41,34.87,32.0,1997.0,317.0,866.0,281.0,5.062,158900.0,<1H OCEAN --120.41,34.87,15.0,1534.0,251.0,761.0,240.0,4.9028,193600.0,<1H OCEAN --120.42,34.95,52.0,1391.0,287.0,632.0,276.0,1.7431,131500.0,<1H OCEAN --120.42,34.95,33.0,3404.0,711.0,1579.0,639.0,3.1078,146700.0,<1H OCEAN --120.43,34.95,50.0,1966.0,413.0,985.0,403.0,2.3506,136100.0,<1H OCEAN --120.43,34.95,43.0,2020.0,344.0,692.0,310.0,3.6815,181800.0,<1H OCEAN --120.42,34.94,32.0,2844.0,551.0,1337.0,516.0,2.7188,133700.0,<1H OCEAN --120.43,34.93,4.0,2866.0,648.0,1311.0,578.0,2.8649,186500.0,<1H OCEAN --120.43,34.93,10.0,2980.0,585.0,1593.0,562.0,3.285,218300.0,<1H OCEAN --120.43,34.98,21.0,2725.0,514.0,1466.0,488.0,3.6639,128600.0,<1H OCEAN --120.43,34.97,28.0,1433.0,270.0,1001.0,278.0,4.0125,130100.0,<1H OCEAN --120.42,34.96,20.0,1678.0,307.0,840.0,316.0,4.4342,160700.0,<1H OCEAN --120.43,34.96,24.0,2739.0,414.0,1171.0,413.0,4.8155,162900.0,<1H OCEAN --120.43,34.96,24.0,1799.0,470.0,1416.0,408.0,2.0673,136900.0,<1H OCEAN --120.42,34.96,31.0,3518.0,608.0,1386.0,572.0,3.6212,151400.0,<1H OCEAN --120.42,34.96,19.0,2298.0,511.0,1246.0,513.0,2.212,132000.0,<1H OCEAN --120.43,34.96,19.0,2350.0,631.0,1291.0,515.0,1.0349,130800.0,<1H OCEAN --120.42,34.97,18.0,1932.0,350.0,1071.0,346.0,4.125,139800.0,<1H OCEAN --120.41,34.96,16.0,2299.0,403.0,1245.0,395.0,4.2125,148300.0,<1H OCEAN --120.42,34.96,14.0,2069.0,343.0,1240.0,338.0,4.5066,149800.0,<1H OCEAN --120.38,34.96,9.0,2813.0,492.0,1144.0,490.0,4.0431,226800.0,<1H OCEAN --120.41,34.96,21.0,1774.0,263.0,724.0,237.0,4.65,152500.0,<1H OCEAN --120.41,34.96,9.0,2712.0,428.0,1116.0,415.0,4.5536,190100.0,<1H OCEAN --120.4,34.95,8.0,1885.0,286.0,835.0,290.0,5.0206,261000.0,<1H OCEAN --120.47,34.98,6.0,5762.0,1115.0,2551.0,919.0,3.0723,137300.0,<1H OCEAN --120.44,34.97,22.0,1619.0,360.0,1509.0,384.0,1.7941,110300.0,<1H OCEAN --120.44,34.97,26.0,1705.0,344.0,1605.0,307.0,3.7589,113700.0,<1H OCEAN --120.45,34.97,25.0,1920.0,380.0,1434.0,388.0,3.0368,129300.0,<1H OCEAN --120.45,34.97,10.0,1897.0,354.0,1353.0,357.0,3.7679,131300.0,<1H OCEAN --120.44,34.96,29.0,2374.0,562.0,1617.0,463.0,2.6531,108300.0,<1H OCEAN --120.44,34.96,30.0,1685.0,315.0,1290.0,368.0,3.4722,112500.0,<1H OCEAN --120.45,34.96,21.0,2121.0,445.0,2211.0,463.0,4.0603,117600.0,<1H OCEAN --120.45,34.96,11.0,1299.0,280.0,1158.0,223.0,2.5556,129200.0,<1H OCEAN --120.44,34.96,39.0,1228.0,379.0,851.0,341.0,1.899,113300.0,<1H OCEAN --120.44,34.96,34.0,1248.0,284.0,986.0,272.0,2.9167,104200.0,<1H OCEAN --120.45,34.96,26.0,1949.0,396.0,1575.0,377.0,2.875,121400.0,<1H OCEAN --120.45,34.95,32.0,1574.0,447.0,1772.0,463.0,1.8625,90200.0,<1H OCEAN --120.44,34.94,24.0,2481.0,476.0,1101.0,474.0,3.1576,147200.0,<1H OCEAN --120.47,34.94,17.0,1368.0,308.0,642.0,303.0,1.8633,109400.0,<1H OCEAN --120.44,34.93,15.0,868.0,244.0,1133.0,253.0,2.0995,87500.0,<1H OCEAN --120.44,34.93,16.0,2098.0,558.0,1252.0,492.0,2.1509,67500.0,<1H OCEAN --120.44,34.95,38.0,3004.0,794.0,2601.0,747.0,2.2743,106400.0,<1H OCEAN --120.45,34.95,10.0,2207.0,644.0,2232.0,543.0,2.375,98500.0,<1H OCEAN --120.44,34.94,29.0,1877.0,516.0,1634.0,492.0,1.6875,122700.0,<1H OCEAN --120.45,34.95,7.0,1479.0,532.0,1057.0,459.0,2.2538,162500.0,<1H OCEAN --120.45,34.94,26.0,1058.0,232.0,891.0,243.0,3.6422,120600.0,<1H OCEAN --120.45,34.94,24.0,1702.0,447.0,1240.0,417.0,2.4091,115500.0,<1H OCEAN --120.54,34.97,23.0,1353.0,345.0,1322.0,336.0,1.8185,97800.0,<1H OCEAN --120.57,34.96,27.0,1401.0,294.0,1306.0,286.0,2.5809,83200.0,NEAR OCEAN --120.57,34.96,38.0,1145.0,297.0,1107.0,296.0,2.1776,89100.0,NEAR OCEAN --120.64,34.97,5.0,2090.0,469.0,1911.0,482.0,2.4318,86100.0,NEAR OCEAN --120.6,34.91,44.0,711.0,140.0,384.0,116.0,2.1094,73800.0,NEAR OCEAN --120.59,34.7,29.0,17738.0,3114.0,12427.0,2826.0,2.7377,28300.0,NEAR OCEAN --120.48,34.7,26.0,3069.0,518.0,1524.0,539.0,4.3162,136400.0,NEAR OCEAN --120.46,34.64,11.0,562.0,164.0,504.0,147.0,2.0161,118800.0,NEAR OCEAN --120.46,34.65,22.0,1298.0,358.0,1272.0,363.0,1.6488,117500.0,NEAR OCEAN --120.46,34.64,26.0,2364.0,604.0,1520.0,529.0,1.9444,129400.0,NEAR OCEAN --120.47,34.64,8.0,2482.0,586.0,1427.0,540.0,3.071,120400.0,NEAR OCEAN --120.47,34.65,31.0,1438.0,320.0,816.0,270.0,2.4583,128100.0,NEAR OCEAN --120.46,34.64,16.0,686.0,217.0,614.0,200.0,0.8106,83300.0,NEAR OCEAN --120.44,34.64,8.0,787.0,126.0,446.0,133.0,4.6023,163400.0,NEAR OCEAN --120.45,34.64,30.0,2330.0,422.0,1255.0,449.0,3.8512,134600.0,NEAR OCEAN --120.45,34.64,27.0,2696.0,622.0,1322.0,543.0,3.0352,135400.0,NEAR OCEAN --120.45,34.64,40.0,1051.0,235.0,574.0,201.0,2.0865,111500.0,NEAR OCEAN --120.46,34.65,10.0,2143.0,593.0,1167.0,548.0,2.0819,103300.0,NEAR OCEAN --120.46,34.65,14.0,885.0,223.0,533.0,224.0,2.5966,109300.0,NEAR OCEAN --120.47,34.65,32.0,2193.0,430.0,1074.0,377.0,2.3333,130200.0,NEAR OCEAN --120.47,34.65,16.0,2549.0,428.0,1486.0,432.0,4.2875,150700.0,NEAR OCEAN --120.45,34.65,27.0,2253.0,382.0,1197.0,384.0,3.3203,134700.0,NEAR OCEAN --120.44,34.65,30.0,2265.0,512.0,1402.0,471.0,1.975,134000.0,NEAR OCEAN --120.45,34.65,27.0,2215.0,578.0,1544.0,527.0,1.9257,135300.0,NEAR OCEAN --120.45,34.65,21.0,1182.0,243.0,733.0,251.0,3.1442,131600.0,NEAR OCEAN --120.45,34.65,25.0,980.0,276.0,896.0,245.0,2.0,87500.0,NEAR OCEAN --120.46,34.63,48.0,1408.0,301.0,682.0,279.0,2.9271,146600.0,NEAR OCEAN --120.46,34.64,37.0,1697.0,334.0,740.0,272.0,2.3804,148000.0,NEAR OCEAN --120.47,34.64,16.0,1912.0,406.0,1009.0,417.0,3.4063,138000.0,NEAR OCEAN --120.45,34.64,17.0,1226.0,277.0,484.0,224.0,3.2167,112500.0,NEAR OCEAN --120.45,34.64,34.0,2571.0,499.0,1105.0,451.0,3.7778,150000.0,NEAR OCEAN --120.45,34.63,32.0,1840.0,309.0,828.0,333.0,4.5486,172400.0,NEAR OCEAN --120.44,34.66,22.0,3231.0,549.0,1739.0,581.0,4.5417,142400.0,NEAR OCEAN --120.45,34.66,7.0,3329.0,504.0,1462.0,452.0,4.7875,198300.0,NEAR OCEAN --120.46,34.66,5.0,2904.0,702.0,1302.0,618.0,3.0081,135200.0,NEAR OCEAN --120.47,34.66,4.0,3376.0,525.0,1684.0,535.0,4.9237,166600.0,NEAR OCEAN --120.39,34.52,40.0,2162.0,395.0,1010.0,332.0,2.5667,239300.0,NEAR OCEAN --120.48,34.66,4.0,1897.0,331.0,915.0,336.0,4.1563,172600.0,NEAR OCEAN --120.48,34.65,26.0,1933.0,316.0,1001.0,319.0,4.4628,134400.0,NEAR OCEAN --120.45,34.63,25.0,2445.0,368.0,983.0,363.0,4.9286,180100.0,NEAR OCEAN --120.47,34.63,23.0,2441.0,463.0,1392.0,434.0,3.7917,142200.0,NEAR OCEAN --120.46,34.74,15.0,2185.0,386.0,827.0,336.0,5.3765,223100.0,NEAR OCEAN --120.45,34.71,21.0,1868.0,268.0,522.0,255.0,6.4678,249300.0,NEAR OCEAN --120.46,34.71,17.0,2830.0,430.0,1035.0,416.0,4.9292,207200.0,NEAR OCEAN --120.47,34.7,24.0,2387.0,385.0,1051.0,382.0,4.4595,152700.0,NEAR OCEAN --120.47,34.71,21.0,2535.0,383.0,1012.0,368.0,5.6177,183800.0,NEAR OCEAN --120.37,34.69,18.0,1868.0,315.0,747.0,265.0,4.7946,290600.0,NEAR OCEAN --120.43,34.7,26.0,2353.0,389.0,1420.0,389.0,3.87,125800.0,NEAR OCEAN --120.43,34.69,33.0,2054.0,373.0,1067.0,358.0,3.6023,128300.0,NEAR OCEAN --120.44,34.68,6.0,2187.0,277.0,697.0,273.0,6.2685,307400.0,NEAR OCEAN --119.86,34.42,23.0,1450.0,642.0,1258.0,607.0,1.179,225000.0,NEAR OCEAN --119.88,34.4,25.0,2741.0,623.0,2272.0,624.0,2.2647,216700.0,NEAR OCEAN --119.85,34.4,14.0,2307.0,650.0,5723.0,615.0,2.1652,37500.0,NEAR OCEAN --119.88,34.43,14.0,2472.0,685.0,1292.0,621.0,3.3026,229500.0,NEAR OCEAN --119.88,34.43,16.0,1734.0,365.0,962.0,391.0,4.4777,282500.0,NEAR OCEAN --119.88,34.43,16.0,2206.0,541.0,1227.0,554.0,3.75,223100.0,NEAR OCEAN --119.88,34.42,22.0,2367.0,492.0,1333.0,488.0,3.6304,312200.0,NEAR OCEAN --119.91,34.4,24.0,2001.0,365.0,1170.0,330.0,6.0992,268800.0,NEAR OCEAN --119.83,34.45,24.0,2168.0,373.0,934.0,366.0,5.4197,280900.0,NEAR OCEAN --119.84,34.44,28.0,977.0,162.0,537.0,159.0,4.2404,274300.0,NEAR OCEAN --119.84,34.45,26.0,4424.0,616.0,1839.0,601.0,6.3654,331200.0,NEAR OCEAN --119.85,34.44,28.0,1765.0,301.0,1173.0,297.0,6.0256,276800.0,NEAR OCEAN --119.81,34.47,26.0,4382.0,618.0,1728.0,587.0,7.4734,432200.0,NEAR OCEAN --119.81,34.46,22.0,3488.0,452.0,1479.0,458.0,7.1687,384400.0,NEAR OCEAN --119.85,34.48,23.0,1915.0,277.0,724.0,267.0,6.2987,348200.0,NEAR OCEAN --119.88,34.44,27.0,4724.0,793.0,2394.0,738.0,5.5954,261400.0,NEAR OCEAN --119.89,34.44,25.0,2786.0,470.0,1669.0,462.0,5.5184,268300.0,NEAR OCEAN --119.89,34.44,25.0,3160.0,507.0,1514.0,523.0,5.0767,271200.0,NEAR OCEAN --119.92,34.44,17.0,2143.0,324.0,1073.0,330.0,6.0321,402600.0,NEAR OCEAN --120.05,34.47,21.0,1241.0,248.0,746.0,211.0,3.8056,425000.0,NEAR OCEAN --119.86,34.38,28.0,1062.0,309.0,1058.0,305.0,1.5071,316700.0,NEAR OCEAN --119.86,34.41,24.0,1576.0,580.0,1630.0,531.0,1.24,325000.0,NEAR OCEAN --119.86,34.38,26.0,1626.0,375.0,1580.0,359.0,2.1471,187500.0,NEAR OCEAN --119.81,34.45,24.0,3678.0,567.0,1554.0,570.0,6.5173,334000.0,NEAR OCEAN --119.81,34.44,23.0,3172.0,588.0,1467.0,559.0,4.6806,288900.0,NEAR OCEAN --119.82,34.45,24.0,3592.0,533.0,1683.0,528.0,6.7247,333800.0,NEAR OCEAN --119.83,34.44,26.0,1739.0,402.0,599.0,368.0,3.0875,198400.0,NEAR OCEAN --119.82,34.44,22.0,2239.0,475.0,1016.0,434.0,4.875,295400.0,NEAR OCEAN --119.81,34.44,14.0,961.0,305.0,662.0,286.0,3.2115,206300.0,NEAR OCEAN --119.82,34.43,15.0,1482.0,345.0,669.0,379.0,3.0773,112500.0,NEAR OCEAN --119.82,34.44,16.0,1414.0,463.0,793.0,439.0,3.6034,150000.0,NEAR OCEAN --119.82,34.44,28.0,1992.0,531.0,1622.0,509.0,2.7689,228200.0,NEAR OCEAN --119.83,34.44,35.0,796.0,281.0,567.0,257.0,2.1389,260000.0,NEAR OCEAN --119.83,34.43,31.0,798.0,346.0,699.0,301.0,2.1417,205000.0,NEAR OCEAN --119.77,34.43,22.0,2552.0,443.0,1066.0,424.0,5.1271,342500.0,NEAR OCEAN --119.77,34.43,28.0,3318.0,441.0,1604.0,404.0,9.7821,500001.0,NEAR OCEAN --119.79,34.4,20.0,3104.0,415.0,1061.0,380.0,9.6885,500001.0,NEAR OCEAN --119.8,34.44,27.0,2674.0,419.0,1176.0,416.0,5.0294,280200.0,NEAR OCEAN --119.8,34.43,27.0,3143.0,537.0,1760.0,570.0,4.6957,271500.0,NEAR OCEAN --119.8,34.43,22.0,2845.0,500.0,1456.0,454.0,5.6604,276400.0,NEAR OCEAN --119.79,34.44,25.0,1479.0,314.0,977.0,309.0,4.1797,271800.0,NEAR OCEAN --119.78,34.44,28.0,2864.0,495.0,1364.0,482.0,4.835,353400.0,NEAR OCEAN --119.79,34.43,26.0,3611.0,563.0,2089.0,540.0,5.1615,276200.0,NEAR OCEAN --121.9,37.36,38.0,1141.0,333.0,1028.0,291.0,2.7333,182500.0,<1H OCEAN --121.89,37.36,37.0,1525.0,363.0,1075.0,374.0,2.8971,186100.0,<1H OCEAN --121.88,37.36,30.0,2453.0,573.0,1845.0,530.0,3.7396,210700.0,<1H OCEAN --121.89,37.35,44.0,1668.0,380.0,1143.0,365.0,3.2083,181900.0,<1H OCEAN --121.9,37.36,47.0,1007.0,245.0,581.0,240.0,2.9545,237500.0,<1H OCEAN --121.9,37.35,52.0,1034.0,239.0,531.0,223.0,2.7411,227100.0,<1H OCEAN --121.9,37.35,42.0,2082.0,626.0,1396.0,610.0,3.25,185300.0,<1H OCEAN --121.9,37.34,50.0,1345.0,287.0,791.0,254.0,3.5966,245800.0,<1H OCEAN --121.9,37.34,52.0,241.0,69.0,385.0,64.0,2.619,212500.0,<1H OCEAN --121.92,37.34,35.0,357.0,120.0,377.0,99.0,3.0139,204200.0,<1H OCEAN --121.92,37.34,42.0,2101.0,524.0,1212.0,526.0,3.6389,239200.0,<1H OCEAN --121.92,37.34,52.0,2584.0,491.0,1087.0,433.0,4.4,391300.0,<1H OCEAN --121.92,37.33,52.0,2009.0,338.0,841.0,338.0,5.5259,295800.0,<1H OCEAN --121.92,37.33,52.0,2962.0,557.0,1215.0,506.0,4.7768,301100.0,<1H OCEAN --121.93,37.33,44.0,1449.0,291.0,676.0,282.0,3.575,292200.0,<1H OCEAN --121.93,37.33,44.0,2142.0,358.0,846.0,375.0,5.4273,421000.0,<1H OCEAN --121.94,37.33,34.0,1809.0,317.0,863.0,302.0,4.3,330500.0,<1H OCEAN --121.91,37.34,35.0,2189.0,607.0,1193.0,562.0,2.8042,240900.0,<1H OCEAN --121.91,37.33,28.0,454.0,147.0,366.0,140.0,2.9853,187500.0,<1H OCEAN --121.91,37.33,52.0,2562.0,410.0,973.0,398.0,4.8854,330600.0,<1H OCEAN --121.92,37.33,52.0,2125.0,382.0,930.0,387.0,5.2831,299500.0,<1H OCEAN --121.9,37.33,34.0,197.0,44.0,152.0,47.0,4.05,200000.0,<1H OCEAN --121.91,37.33,52.0,2212.0,563.0,1195.0,532.0,2.894,209500.0,<1H OCEAN --121.89,37.33,49.0,658.0,318.0,467.0,316.0,0.7068,200000.0,<1H OCEAN --121.9,37.33,11.0,1283.0,390.0,718.0,345.0,4.226,166700.0,<1H OCEAN --121.9,37.33,52.0,1009.0,231.0,929.0,210.0,2.5,162500.0,<1H OCEAN --121.88,37.34,40.0,1547.0,625.0,1493.0,543.0,1.2887,212500.0,<1H OCEAN --121.89,37.33,6.0,1495.0,552.0,1087.0,557.0,2.8798,225000.0,<1H OCEAN --121.88,37.33,36.0,1904.0,689.0,3561.0,632.0,2.0972,187500.0,<1H OCEAN --121.89,37.35,48.0,1562.0,439.0,1469.0,424.0,2.5673,177500.0,<1H OCEAN --121.89,37.34,46.0,1197.0,416.0,898.0,370.0,2.1714,190600.0,<1H OCEAN --121.89,37.34,20.0,1106.0,494.0,851.0,448.0,0.8894,350000.0,<1H OCEAN --121.89,37.34,43.0,1423.0,467.0,1013.0,428.0,1.6708,204200.0,<1H OCEAN --121.88,37.34,52.0,1390.0,365.0,921.0,352.0,2.1442,188900.0,<1H OCEAN --121.88,37.36,42.0,2087.0,402.0,1342.0,423.0,4.2149,199000.0,<1H OCEAN --121.88,37.35,49.0,1728.0,350.0,1146.0,391.0,3.5781,193000.0,<1H OCEAN --121.89,37.35,47.0,2879.0,631.0,2229.0,606.0,3.2599,183100.0,<1H OCEAN --121.89,37.35,43.0,1185.0,296.0,933.0,244.0,2.925,170800.0,<1H OCEAN --121.89,37.35,44.0,2019.0,615.0,1243.0,518.0,2.0549,193800.0,<1H OCEAN --121.88,37.35,43.0,1086.0,219.0,715.0,226.0,4.2381,193500.0,<1H OCEAN --121.87,37.35,37.0,1566.0,375.0,1223.0,346.0,3.2793,174500.0,<1H OCEAN --121.88,37.34,44.0,1267.0,353.0,1018.0,327.0,2.4196,194400.0,<1H OCEAN --121.88,37.35,52.0,1704.0,418.0,1336.0,411.0,2.8167,183500.0,<1H OCEAN --121.87,37.34,52.0,1170.0,215.0,604.0,207.0,2.6667,325900.0,<1H OCEAN --121.87,37.34,52.0,1087.0,166.0,650.0,194.0,6.6345,309000.0,<1H OCEAN --121.87,37.34,39.0,2479.0,541.0,1990.0,506.0,2.4306,289100.0,<1H OCEAN --121.88,37.34,52.0,867.0,232.0,1264.0,227.0,2.6312,302900.0,<1H OCEAN --121.87,37.35,27.0,3500.0,1036.0,3019.0,955.0,2.9222,153700.0,<1H OCEAN --121.86,37.35,46.0,1448.0,330.0,1094.0,331.0,2.4968,174100.0,<1H OCEAN --121.87,37.35,52.0,1557.0,424.0,1580.0,434.0,2.3277,183700.0,<1H OCEAN --121.86,37.34,29.0,5274.0,1625.0,6234.0,1639.0,2.5947,177300.0,<1H OCEAN --121.86,37.34,40.0,2277.0,508.0,1718.0,434.0,3.0089,185200.0,<1H OCEAN --121.88,37.33,41.0,395.0,164.0,549.0,184.0,2.375,175000.0,<1H OCEAN --121.88,37.33,35.0,3300.0,1154.0,3120.0,1075.0,1.473,213600.0,<1H OCEAN --121.87,37.33,37.0,3137.0,685.0,2048.0,651.0,3.0156,270300.0,<1H OCEAN --121.88,37.33,45.0,1192.0,371.0,1084.0,345.0,2.8594,205900.0,<1H OCEAN --121.89,37.33,42.0,1279.0,358.0,1254.0,340.0,2.2583,192500.0,<1H OCEAN --121.89,37.32,34.0,1014.0,246.0,952.0,215.0,2.8864,172500.0,<1H OCEAN --121.88,37.32,30.0,1242.0,338.0,1438.0,325.0,2.6607,169300.0,<1H OCEAN --121.88,37.32,40.0,1331.0,374.0,1276.0,389.0,2.7546,172500.0,<1H OCEAN --121.89,37.32,43.0,1105.0,241.0,982.0,206.0,2.1149,184900.0,<1H OCEAN --121.89,37.32,41.0,977.0,265.0,865.0,253.0,3.2317,184800.0,<1H OCEAN --121.89,37.31,52.0,1994.0,404.0,1014.0,389.0,4.3882,223600.0,<1H OCEAN --121.9,37.31,52.0,2125.0,431.0,1014.0,443.0,5.8186,281100.0,<1H OCEAN --121.9,37.32,48.0,1274.0,313.0,971.0,291.0,3.7738,220600.0,<1H OCEAN --121.91,37.32,42.0,1067.0,256.0,608.0,280.0,3.0096,180800.0,<1H OCEAN --121.91,37.31,16.0,2962.0,898.0,1555.0,795.0,2.5804,216300.0,<1H OCEAN --121.93,37.32,52.0,1460.0,492.0,1165.0,455.0,2.5833,167500.0,<1H OCEAN --121.94,37.33,37.0,818.0,269.0,576.0,261.0,2.1902,250000.0,<1H OCEAN --121.94,37.32,46.0,2451.0,472.0,1163.0,448.0,4.8519,225800.0,<1H OCEAN --121.93,37.32,51.0,2711.0,728.0,1607.0,724.0,3.0,184700.0,<1H OCEAN --121.92,37.32,39.0,836.0,254.0,704.0,272.0,3.5256,192600.0,<1H OCEAN --121.92,37.32,31.0,1902.0,554.0,1485.0,494.0,2.4207,165600.0,<1H OCEAN --121.92,37.32,28.0,2089.0,641.0,1666.0,587.0,2.3633,198400.0,<1H OCEAN --121.93,37.32,50.0,1135.0,215.0,500.0,207.0,4.2614,211300.0,<1H OCEAN --121.94,37.31,5.0,2364.0,578.0,1102.0,502.0,5.2642,246400.0,<1H OCEAN --121.94,37.31,30.0,1680.0,312.0,858.0,310.0,4.0474,280500.0,<1H OCEAN --121.94,37.3,26.0,4348.0,814.0,2347.0,810.0,4.7275,293000.0,<1H OCEAN --121.93,37.3,16.0,1111.0,226.0,317.0,199.0,2.7153,233300.0,<1H OCEAN --121.93,37.31,26.0,2182.0,704.0,1638.0,704.0,2.8981,229800.0,<1H OCEAN --121.92,37.31,34.0,876.0,150.0,424.0,163.0,5.2769,241100.0,<1H OCEAN --121.92,37.31,26.0,3242.0,780.0,2100.0,741.0,3.1107,247900.0,<1H OCEAN --121.93,37.3,16.0,2111.0,485.0,1285.0,499.0,5.0477,292500.0,<1H OCEAN --121.93,37.31,29.0,1377.0,430.0,969.0,399.0,2.6573,252800.0,<1H OCEAN --121.92,37.31,13.0,6035.0,1551.0,2946.0,1481.0,4.0524,213900.0,<1H OCEAN --121.93,37.3,14.0,6277.0,1742.0,3025.0,1630.0,4.0653,234200.0,<1H OCEAN --121.92,37.3,36.0,2088.0,358.0,772.0,347.0,4.2762,310100.0,<1H OCEAN --121.92,37.3,35.0,1335.0,296.0,635.0,296.0,3.6053,345800.0,<1H OCEAN --121.91,37.31,28.0,3104.0,811.0,1488.0,754.0,3.6429,332600.0,<1H OCEAN --121.91,37.31,46.0,3052.0,587.0,1373.0,590.0,4.7287,340000.0,<1H OCEAN --121.9,37.3,39.0,3627.0,666.0,1531.0,635.0,4.537,345900.0,<1H OCEAN --121.91,37.3,43.0,828.0,151.0,446.0,145.0,4.4375,327600.0,<1H OCEAN --121.91,37.3,31.0,2095.0,427.0,829.0,405.0,3.6563,344700.0,<1H OCEAN --121.91,37.3,31.0,616.0,131.0,185.0,107.0,3.625,265000.0,<1H OCEAN --121.89,37.31,40.0,1844.0,340.0,719.0,305.0,3.3682,235200.0,<1H OCEAN --121.88,37.31,28.0,3085.0,552.0,1277.0,512.0,4.5795,262800.0,<1H OCEAN --121.89,37.3,47.0,1604.0,284.0,639.0,278.0,5.8415,283300.0,<1H OCEAN --121.89,37.3,52.0,2071.0,362.0,825.0,364.0,4.2414,284800.0,<1H OCEAN --121.89,37.31,47.0,2986.0,627.0,1399.0,613.0,3.7455,247400.0,<1H OCEAN --121.9,37.3,52.0,1456.0,269.0,582.0,277.0,5.036,296600.0,<1H OCEAN --121.9,37.3,52.0,1575.0,284.0,629.0,284.0,5.6437,312000.0,<1H OCEAN --121.88,37.3,42.0,1867.0,398.0,927.0,389.0,4.325,247000.0,<1H OCEAN --121.88,37.29,44.0,2026.0,396.0,908.0,383.0,4.1406,274100.0,<1H OCEAN --121.89,37.3,47.0,2355.0,426.0,961.0,428.0,5.3955,282300.0,<1H OCEAN --121.89,37.3,46.0,2639.0,448.0,938.0,424.0,5.0662,331600.0,<1H OCEAN --121.89,37.29,38.0,1568.0,351.0,710.0,339.0,2.7042,286600.0,<1H OCEAN --121.9,37.29,26.0,1797.0,244.0,626.0,244.0,7.8575,424600.0,<1H OCEAN --121.9,37.29,36.0,1389.0,225.0,623.0,223.0,6.6331,283300.0,<1H OCEAN --121.92,37.29,34.0,943.0,135.0,378.0,139.0,5.1765,344600.0,<1H OCEAN --121.91,37.29,36.0,945.0,149.0,371.0,158.0,5.6266,320500.0,<1H OCEAN --121.92,37.29,35.0,2189.0,307.0,800.0,320.0,7.6659,426900.0,<1H OCEAN --121.91,37.29,18.0,3597.0,664.0,1321.0,593.0,5.3077,351400.0,<1H OCEAN --121.93,37.29,36.0,2241.0,437.0,989.0,442.0,3.9625,288200.0,<1H OCEAN --121.92,37.29,32.0,1260.0,199.0,560.0,207.0,6.5858,346700.0,<1H OCEAN --121.93,37.28,34.0,2422.0,370.0,1010.0,395.0,5.6494,376200.0,<1H OCEAN --121.93,37.28,10.0,3163.0,832.0,1537.0,797.0,4.1674,214000.0,<1H OCEAN --121.94,37.28,18.0,4356.0,1334.0,1968.0,1245.0,3.6294,240000.0,<1H OCEAN --121.94,37.28,27.0,2859.0,464.0,1144.0,430.0,5.0822,327500.0,<1H OCEAN --121.93,37.27,30.0,2862.0,544.0,1387.0,542.0,5.1104,278100.0,<1H OCEAN --121.94,37.27,23.0,1932.0,552.0,997.0,482.0,3.662,211900.0,<1H OCEAN --121.94,37.27,39.0,1030.0,191.0,537.0,175.0,3.9265,236900.0,<1H OCEAN --121.94,37.26,43.0,2104.0,388.0,1137.0,403.0,4.9236,238000.0,<1H OCEAN --121.94,37.26,21.0,3843.0,716.0,1850.0,705.0,4.6758,264200.0,<1H OCEAN --121.95,37.26,10.0,3611.0,803.0,1599.0,716.0,5.2,248700.0,<1H OCEAN --121.95,37.26,34.0,1482.0,255.0,584.0,246.0,5.5121,264700.0,<1H OCEAN --121.94,37.25,16.0,3942.0,749.0,1894.0,737.0,5.2894,332800.0,<1H OCEAN --121.93,37.26,39.0,1103.0,175.0,446.0,163.0,2.8125,291300.0,<1H OCEAN --121.92,37.26,33.0,1306.0,259.0,762.0,237.0,4.5208,230700.0,<1H OCEAN --121.92,37.25,36.0,3874.0,656.0,1826.0,639.0,4.9662,258500.0,<1H OCEAN --121.91,37.25,31.0,1944.0,343.0,975.0,334.0,4.9205,240500.0,<1H OCEAN --121.92,37.28,27.0,3028.0,486.0,1284.0,498.0,4.5833,308800.0,<1H OCEAN --121.92,37.27,33.0,3280.0,569.0,1583.0,559.0,4.5625,253500.0,<1H OCEAN --121.93,37.27,35.0,1855.0,345.0,985.0,329.0,6.0196,255100.0,<1H OCEAN --121.93,37.27,28.0,3428.0,753.0,1753.0,729.0,4.1033,281000.0,<1H OCEAN --121.92,37.28,26.0,6201.0,783.0,2381.0,819.0,7.9819,397000.0,<1H OCEAN --121.92,37.27,29.0,5536.0,862.0,2651.0,881.0,5.6358,282100.0,<1H OCEAN --121.91,37.27,30.0,4412.0,862.0,2168.0,772.0,5.0062,232000.0,<1H OCEAN --121.91,37.28,29.0,5650.0,817.0,2098.0,813.0,6.4285,337300.0,<1H OCEAN --121.9,37.28,26.0,3756.0,,1408.0,535.0,5.6427,320000.0,<1H OCEAN --121.9,37.27,33.0,3410.0,583.0,1739.0,588.0,5.0714,255600.0,<1H OCEAN --121.9,37.25,28.0,2714.0,502.0,1389.0,490.0,5.7385,240400.0,<1H OCEAN --121.9,37.25,20.0,5483.0,1079.0,2892.0,1057.0,4.6845,250000.0,<1H OCEAN --121.9,37.27,28.0,4538.0,685.0,1996.0,667.0,5.4609,263600.0,<1H OCEAN --121.9,37.26,20.0,4447.0,661.0,2062.0,660.0,6.8088,283300.0,<1H OCEAN --121.91,37.26,25.0,4258.0,719.0,2290.0,743.0,5.1461,267200.0,<1H OCEAN --121.91,37.26,32.0,3776.0,620.0,1790.0,612.0,5.4675,261100.0,<1H OCEAN --121.91,37.26,32.0,3983.0,876.0,1989.0,794.0,3.5625,255200.0,<1H OCEAN --121.89,37.25,23.0,2705.0,449.0,1180.0,442.0,6.0791,316500.0,<1H OCEAN --121.89,37.26,26.0,1864.0,331.0,956.0,325.0,5.5,231700.0,<1H OCEAN --121.88,37.26,25.0,3025.0,689.0,1755.0,661.0,3.8893,218600.0,<1H OCEAN --121.88,37.26,13.0,1893.0,487.0,1018.0,464.0,3.8047,204700.0,<1H OCEAN --121.88,37.26,13.0,1676.0,471.0,710.0,406.0,3.8936,225900.0,<1H OCEAN --121.88,37.25,24.0,968.0,240.0,631.0,250.0,2.8636,240300.0,<1H OCEAN --121.89,37.25,21.0,2080.0,352.0,1040.0,325.0,5.2887,264500.0,<1H OCEAN --121.89,37.25,26.0,1741.0,323.0,1007.0,339.0,4.7069,234800.0,<1H OCEAN --121.89,37.29,36.0,2959.0,529.0,1125.0,520.0,4.2614,268800.0,<1H OCEAN --121.89,37.28,35.0,2418.0,375.0,988.0,374.0,6.0936,365400.0,<1H OCEAN --121.9,37.28,34.0,4613.0,749.0,2050.0,725.0,5.3922,302900.0,<1H OCEAN --121.88,37.28,33.0,2951.0,529.0,1288.0,521.0,4.1554,313100.0,<1H OCEAN --121.89,37.28,32.0,4308.0,717.0,2002.0,695.0,4.1645,281900.0,<1H OCEAN --121.88,37.27,27.0,2019.0,335.0,1020.0,351.0,5.8178,267400.0,<1H OCEAN --121.88,37.27,24.0,4567.0,688.0,2102.0,695.0,5.6895,289000.0,<1H OCEAN --121.89,37.26,25.0,3319.0,531.0,1560.0,502.0,5.8479,263300.0,<1H OCEAN --121.89,37.27,28.0,1481.0,256.0,688.0,221.0,5.2088,240900.0,<1H OCEAN --121.87,37.32,39.0,1839.0,471.0,1528.0,456.0,2.6818,184900.0,<1H OCEAN --121.87,37.32,36.0,1471.0,360.0,1182.0,326.0,2.7031,175800.0,<1H OCEAN --121.88,37.32,38.0,1787.0,508.0,2113.0,530.0,2.6386,177600.0,<1H OCEAN --121.88,37.32,45.0,2213.0,564.0,1920.0,514.0,3.2806,164200.0,<1H OCEAN --121.86,37.31,24.0,1939.0,652.0,1808.0,625.0,2.2259,112500.0,<1H OCEAN --121.87,37.3,28.0,859.0,199.0,455.0,211.0,2.3293,215900.0,<1H OCEAN --121.87,37.31,6.0,3797.0,984.0,2437.0,904.0,3.6802,152400.0,<1H OCEAN --121.87,37.3,14.0,360.0,124.0,134.0,84.0,2.7411,112500.0,<1H OCEAN --121.88,37.3,16.0,2692.0,749.0,1674.0,681.0,2.6763,191100.0,<1H OCEAN --121.86,37.32,13.0,2519.0,581.0,2094.0,530.0,4.3621,173400.0,<1H OCEAN --121.85,37.33,19.0,2228.0,559.0,2845.0,551.0,2.6,172800.0,<1H OCEAN --121.84,37.32,14.0,5762.0,1538.0,3979.0,1389.0,3.6953,192600.0,<1H OCEAN --121.85,37.33,16.0,2987.0,874.0,4241.0,841.0,2.8024,127900.0,<1H OCEAN --121.85,37.33,19.0,735.0,158.0,597.0,134.0,4.5208,188100.0,<1H OCEAN --121.84,37.32,22.0,3015.0,581.0,2491.0,530.0,4.3419,176300.0,<1H OCEAN --121.84,37.32,16.0,1866.0,364.0,1835.0,412.0,5.3363,212800.0,<1H OCEAN --121.87,37.29,18.0,1892.0,568.0,974.0,553.0,2.3715,228000.0,<1H OCEAN --121.87,37.28,21.0,3305.0,749.0,2459.0,701.0,3.9688,249600.0,<1H OCEAN --121.86,37.29,14.0,6160.0,1222.0,2472.0,1204.0,4.1444,178400.0,<1H OCEAN --121.85,37.28,17.0,4208.0,954.0,1476.0,904.0,2.3971,87500.0,<1H OCEAN --121.83,37.3,16.0,5684.0,1386.0,4203.0,1318.0,3.1964,185800.0,<1H OCEAN --121.85,37.3,19.0,6275.0,1546.0,4312.0,1466.0,2.7768,178600.0,<1H OCEAN --121.84,37.29,24.0,3403.0,656.0,2829.0,612.0,4.775,191900.0,<1H OCEAN --121.84,37.29,4.0,2937.0,648.0,1780.0,665.0,4.3851,160400.0,<1H OCEAN --121.84,37.28,18.0,2749.0,633.0,1779.0,561.0,3.925,166100.0,<1H OCEAN --121.83,37.31,19.0,11181.0,1895.0,7817.0,1853.0,5.6058,232700.0,<1H OCEAN --121.83,37.3,17.0,1299.0,211.0,825.0,217.0,4.5,235800.0,<1H OCEAN --121.81,37.29,15.0,5957.0,1037.0,3838.0,997.0,6.2907,253100.0,<1H OCEAN --121.81,37.28,17.0,2277.0,428.0,1887.0,422.0,5.7078,217000.0,<1H OCEAN --121.82,37.28,33.0,2873.0,489.0,1946.0,475.0,5.0709,176400.0,<1H OCEAN --121.83,37.29,10.0,1828.0,453.0,1356.0,409.0,4.5943,123500.0,<1H OCEAN --121.83,37.29,20.0,1649.0,408.0,1729.0,362.0,3.3833,115200.0,<1H OCEAN --121.83,37.28,33.0,1115.0,250.0,1168.0,261.0,3.9009,178600.0,<1H OCEAN --121.83,37.28,19.0,2644.0,833.0,2317.0,780.0,3.1042,183100.0,<1H OCEAN --121.82,37.28,31.0,1340.0,235.0,1336.0,270.0,4.2361,179500.0,<1H OCEAN --121.83,37.29,20.0,2308.0,461.0,2223.0,456.0,4.2589,191000.0,<1H OCEAN --121.82,37.29,16.0,2085.0,394.0,1705.0,391.0,5.0225,222800.0,<1H OCEAN --121.83,37.32,17.0,1887.0,664.0,1906.0,597.0,2.5652,165300.0,<1H OCEAN --121.82,37.31,22.0,2044.0,402.0,1925.0,429.0,3.7102,177500.0,<1H OCEAN --121.82,37.31,15.0,1504.0,294.0,1267.0,291.0,5.5145,219400.0,<1H OCEAN --121.81,37.31,14.0,2731.0,578.0,1109.0,551.0,3.1382,139700.0,<1H OCEAN --121.81,37.31,15.0,1898.0,395.0,1527.0,381.0,4.4792,212500.0,<1H OCEAN --121.81,37.32,26.0,2528.0,511.0,2677.0,512.0,4.1165,164900.0,<1H OCEAN --121.82,37.32,10.0,2506.0,623.0,2634.0,622.0,3.135,231400.0,<1H OCEAN --121.82,37.33,23.0,3279.0,647.0,2582.0,630.0,4.3782,175800.0,<1H OCEAN --121.83,37.32,26.0,1125.0,210.0,943.0,214.0,4.825,181000.0,<1H OCEAN --121.81,37.33,4.0,5532.0,778.0,3651.0,770.0,7.2982,343000.0,<1H OCEAN --121.8,37.34,25.0,1642.0,297.0,1146.0,279.0,5.2088,231400.0,<1H OCEAN --121.8,37.34,20.0,2686.0,414.0,1507.0,405.0,5.8068,263900.0,<1H OCEAN --121.79,37.34,20.0,2018.0,328.0,1196.0,323.0,4.9318,262400.0,<1H OCEAN --121.8,37.35,15.0,2781.0,498.0,1389.0,475.0,5.614,223300.0,<1H OCEAN --121.78,37.34,21.0,1959.0,292.0,891.0,300.0,7.375,338400.0,<1H OCEAN --121.75,37.35,18.0,1947.0,250.0,605.0,184.0,8.1871,500001.0,<1H OCEAN --121.77,37.33,8.0,3088.0,474.0,1799.0,456.0,7.2707,355300.0,<1H OCEAN --121.77,37.33,9.0,3160.0,468.0,1675.0,470.0,7.5443,348400.0,<1H OCEAN --121.78,37.34,11.0,3195.0,410.0,1774.0,418.0,7.0671,378200.0,<1H OCEAN --121.79,37.33,13.0,2978.0,505.0,1794.0,485.0,6.6813,277800.0,<1H OCEAN --121.79,37.33,18.0,3611.0,614.0,2381.0,642.0,5.6345,231000.0,<1H OCEAN --121.79,37.33,10.0,3283.0,550.0,2491.0,522.0,6.6633,283700.0,<1H OCEAN --121.78,37.33,10.0,2829.0,394.0,1510.0,386.0,6.68,359500.0,<1H OCEAN --121.8,37.32,20.0,2473.0,476.0,2228.0,501.0,5.6817,224200.0,<1H OCEAN --121.8,37.32,23.0,1829.0,346.0,1277.0,324.0,4.8092,217400.0,<1H OCEAN --121.8,37.32,14.0,4412.0,924.0,2698.0,891.0,4.7027,227600.0,<1H OCEAN --121.79,37.32,6.0,2850.0,561.0,2160.0,581.0,5.5336,241900.0,<1H OCEAN --121.79,37.32,20.0,3034.0,451.0,1669.0,430.0,6.2742,241300.0,<1H OCEAN --121.76,37.33,5.0,4153.0,719.0,2435.0,697.0,5.6306,286200.0,<1H OCEAN --121.81,37.3,14.0,1870.0,348.0,1214.0,347.0,4.9769,186500.0,<1H OCEAN --121.81,37.31,15.0,1794.0,366.0,1533.0,371.0,5.7843,209900.0,<1H OCEAN --121.8,37.31,15.0,1807.0,378.0,1277.0,341.0,4.5045,164500.0,<1H OCEAN --121.8,37.3,16.0,906.0,149.0,605.0,148.0,4.8173,235600.0,<1H OCEAN --121.81,37.3,15.0,1929.0,345.0,1683.0,347.0,5.5248,235600.0,<1H OCEAN --121.8,37.31,21.0,2630.0,446.0,1789.0,389.0,5.0543,232000.0,<1H OCEAN --121.79,37.31,22.0,2199.0,361.0,1270.0,386.0,5.1149,235700.0,<1H OCEAN --121.78,37.31,25.0,2093.0,297.0,983.0,338.0,6.4664,271500.0,<1H OCEAN --121.79,37.3,10.0,5469.0,950.0,3083.0,906.0,5.9399,241900.0,<1H OCEAN --121.76,37.28,17.0,660.0,129.0,431.0,123.0,4.9097,241000.0,<1H OCEAN --121.74,37.3,12.0,1961.0,280.0,985.0,269.0,6.7159,362700.0,<1H OCEAN --121.78,37.31,7.0,1973.0,328.0,1047.0,303.0,6.234,292200.0,<1H OCEAN --121.77,37.31,16.0,1649.0,228.0,769.0,230.0,6.6455,302600.0,<1H OCEAN --121.76,37.29,15.0,2267.0,348.0,1150.0,327.0,7.1267,277900.0,<1H OCEAN --121.76,37.3,6.0,3526.0,559.0,1378.0,491.0,6.1463,335500.0,<1H OCEAN --121.75,37.3,23.0,1801.0,415.0,548.0,393.0,2.5052,133700.0,<1H OCEAN --121.74,37.29,6.0,7292.0,1295.0,2468.0,1262.0,5.6411,294700.0,<1H OCEAN --121.75,37.29,15.0,1486.0,310.0,455.0,296.0,4.3365,221000.0,<1H OCEAN --121.84,37.34,33.0,1019.0,191.0,938.0,215.0,4.0929,165000.0,<1H OCEAN --121.84,37.33,28.0,1535.0,330.0,1937.0,317.0,4.1146,160100.0,<1H OCEAN --121.84,37.33,26.0,1934.0,408.0,2059.0,416.0,3.6765,163600.0,<1H OCEAN --121.83,37.32,21.0,4559.0,1163.0,5124.0,1124.0,3.2052,179000.0,<1H OCEAN --121.82,37.35,24.0,2298.0,575.0,2409.0,569.0,3.4509,182400.0,<1H OCEAN --121.82,37.34,23.0,7609.0,1446.0,6034.0,1414.0,4.8424,195300.0,<1H OCEAN --121.81,37.35,28.0,3477.0,671.0,2990.0,648.0,4.4671,172600.0,<1H OCEAN --121.81,37.35,29.0,2396.0,452.0,2000.0,481.0,4.375,185500.0,<1H OCEAN --121.8,37.35,27.0,2358.0,415.0,1562.0,383.0,5.2297,192800.0,<1H OCEAN --121.8,37.35,17.0,2529.0,423.0,1756.0,429.0,5.1017,240700.0,<1H OCEAN --121.84,37.34,27.0,2512.0,526.0,3033.0,526.0,4.25,162900.0,<1H OCEAN --121.83,37.33,27.0,3127.0,610.0,3257.0,604.0,4.6333,173600.0,<1H OCEAN --121.83,37.34,21.0,6404.0,1232.0,6047.0,1235.0,4.2098,193400.0,<1H OCEAN --121.83,37.34,26.0,1848.0,339.0,1952.0,327.0,4.087,182500.0,<1H OCEAN --121.87,37.36,34.0,938.0,242.0,769.0,226.0,3.5625,194500.0,<1H OCEAN --121.86,37.35,35.0,2391.0,605.0,1886.0,595.0,2.5551,182100.0,<1H OCEAN --121.86,37.35,43.0,1536.0,371.0,1256.0,357.0,2.8,153300.0,<1H OCEAN --121.85,37.34,27.0,1481.0,409.0,1505.0,391.0,2.5769,137500.0,<1H OCEAN --121.84,37.35,22.0,2914.0,768.0,2962.0,762.0,2.2031,164000.0,<1H OCEAN --121.85,37.35,29.0,3515.0,807.0,3572.0,776.0,2.7562,160100.0,<1H OCEAN --121.84,37.35,20.0,3375.0,867.0,4610.0,860.0,2.6894,182200.0,<1H OCEAN --121.86,37.37,15.0,8162.0,2124.0,8793.0,2086.0,3.3306,210300.0,<1H OCEAN --121.84,37.37,15.0,3315.0,1042.0,2749.0,1059.0,2.3199,140100.0,<1H OCEAN --121.85,37.36,15.0,3148.0,1116.0,3556.0,1037.0,3.0466,159600.0,<1H OCEAN --121.85,37.36,18.0,1525.0,485.0,1705.0,448.0,3.7198,128600.0,<1H OCEAN --121.85,37.36,11.0,2109.0,592.0,2744.0,607.0,4.0452,205900.0,<1H OCEAN --121.86,37.36,31.0,1602.0,358.0,1179.0,354.0,4.4896,156800.0,<1H OCEAN --121.84,37.38,34.0,762.0,182.0,611.0,193.0,3.5625,201800.0,<1H OCEAN --121.85,37.38,12.0,12980.0,2568.0,8190.0,2515.0,5.2415,286500.0,<1H OCEAN --121.84,37.39,31.0,5524.0,914.0,2848.0,879.0,5.5592,229900.0,<1H OCEAN --121.83,37.38,15.0,4430.0,992.0,3278.0,1018.0,4.5533,209900.0,<1H OCEAN --121.84,37.38,33.0,835.0,181.0,781.0,169.0,5.1082,195800.0,<1H OCEAN --121.83,37.38,31.0,3633.0,843.0,2677.0,797.0,3.2222,184800.0,<1H OCEAN --121.83,37.37,43.0,821.0,149.0,370.0,135.0,4.25,209100.0,<1H OCEAN --121.83,37.37,43.0,1461.0,284.0,800.0,258.0,3.2279,182400.0,<1H OCEAN --121.84,37.37,42.0,1237.0,232.0,900.0,241.0,3.8571,187500.0,<1H OCEAN --121.84,37.37,28.0,1579.0,339.0,1252.0,353.0,4.1615,214800.0,<1H OCEAN --121.82,37.37,40.0,802.0,149.0,445.0,143.0,4.0446,196300.0,<1H OCEAN --121.83,37.36,29.0,4045.0,885.0,3036.0,845.0,3.1982,171700.0,<1H OCEAN --121.83,37.36,22.0,3936.0,860.0,3508.0,877.0,4.2312,183800.0,<1H OCEAN --121.83,37.35,31.0,2914.0,715.0,3547.0,645.0,3.7143,178600.0,<1H OCEAN --121.82,37.37,41.0,1558.0,281.0,970.0,304.0,4.4167,215200.0,<1H OCEAN --121.81,37.37,26.0,2987.0,539.0,1931.0,518.0,5.1099,213100.0,<1H OCEAN --121.82,37.36,33.0,1624.0,337.0,1412.0,323.0,4.0385,167600.0,<1H OCEAN --121.82,37.36,34.0,1834.0,377.0,1450.0,347.0,3.7188,161500.0,<1H OCEAN --121.82,37.37,42.0,2913.0,577.0,1873.0,580.0,3.7214,167900.0,<1H OCEAN --121.81,37.39,34.0,2218.0,286.0,827.0,299.0,7.4559,456500.0,<1H OCEAN --121.82,37.39,37.0,4137.0,636.0,1569.0,578.0,6.1008,286200.0,<1H OCEAN --121.82,37.38,32.0,3747.0,665.0,1687.0,649.0,5.4949,330800.0,<1H OCEAN --121.81,37.38,29.0,570.0,76.0,244.0,72.0,12.3292,416700.0,<1H OCEAN --121.82,37.38,32.0,1650.0,246.0,768.0,263.0,6.8462,320900.0,<1H OCEAN --121.81,37.37,24.0,962.0,146.0,492.0,155.0,7.2861,328000.0,<1H OCEAN --121.79,37.38,22.0,3650.0,527.0,1637.0,520.0,5.3774,325600.0,<1H OCEAN --121.81,37.36,20.0,3189.0,420.0,1234.0,389.0,7.5813,374100.0,<1H OCEAN --121.87,37.39,9.0,2522.0,547.0,1591.0,481.0,4.9091,259700.0,<1H OCEAN --121.87,37.39,16.0,2655.0,487.0,1862.0,448.0,6.057,246800.0,<1H OCEAN --121.87,37.38,16.0,1050.0,245.0,722.0,228.0,4.5187,163500.0,<1H OCEAN --121.87,37.38,16.0,3275.0,529.0,1863.0,527.0,5.5429,269100.0,<1H OCEAN --121.88,37.39,13.0,3334.0,565.0,2240.0,561.0,7.105,273900.0,<1H OCEAN --121.87,37.41,17.0,3719.0,588.0,2089.0,561.0,6.7867,273700.0,<1H OCEAN --121.87,37.4,16.0,1767.0,268.0,1061.0,280.0,6.9584,351600.0,<1H OCEAN --121.86,37.4,19.0,4043.0,764.0,2196.0,708.0,6.1504,268400.0,<1H OCEAN --121.87,37.39,16.0,1334.0,389.0,1103.0,415.0,3.7153,229800.0,<1H OCEAN --121.86,37.39,17.0,1777.0,328.0,1235.0,329.0,5.4225,258100.0,<1H OCEAN --121.85,37.39,15.0,8748.0,1547.0,4784.0,1524.0,5.8322,276600.0,<1H OCEAN --121.82,37.42,13.0,3752.0,572.0,1581.0,526.0,6.1091,329400.0,<1H OCEAN --121.81,37.41,25.0,2496.0,351.0,1034.0,367.0,7.0544,320700.0,<1H OCEAN --121.84,37.4,25.0,1866.0,271.0,840.0,275.0,6.8677,288500.0,<1H OCEAN --121.83,37.4,27.0,1145.0,150.0,492.0,160.0,5.716,348300.0,<1H OCEAN --121.9,37.4,16.0,2998.0,603.0,1606.0,615.0,3.7622,150000.0,<1H OCEAN --121.9,37.39,42.0,42.0,14.0,26.0,14.0,1.7361,500001.0,<1H OCEAN --121.9,37.37,20.0,78.0,72.0,120.0,69.0,1.0938,187500.0,<1H OCEAN --121.88,37.37,14.0,6016.0,1404.0,3258.0,1316.0,3.5745,333700.0,<1H OCEAN --121.87,37.38,14.0,3851.0,534.0,2052.0,478.0,7.0735,335600.0,<1H OCEAN --121.86,37.38,15.0,2052.0,405.0,1380.0,409.0,5.8686,181100.0,<1H OCEAN --121.89,37.39,2.0,1136.0,365.0,535.0,257.0,4.375,425000.0,<1H OCEAN --121.88,37.4,9.0,6751.0,,4240.0,1438.0,5.34,257400.0,<1H OCEAN --121.89,37.38,3.0,4778.0,1047.0,2522.0,990.0,5.7695,271400.0,<1H OCEAN --121.88,37.37,3.0,4430.0,841.0,2559.0,801.0,6.0959,272700.0,<1H OCEAN --121.86,37.4,16.0,2391.0,369.0,1419.0,373.0,5.8721,267800.0,<1H OCEAN --121.86,37.4,21.0,1386.0,260.0,946.0,257.0,6.5226,258500.0,<1H OCEAN --121.85,37.41,25.0,1837.0,278.0,1006.0,271.0,6.6842,265300.0,<1H OCEAN --121.85,37.4,23.0,1793.0,319.0,1145.0,310.0,5.5968,243200.0,<1H OCEAN --121.86,37.41,16.0,2938.0,589.0,1718.0,568.0,5.5073,178900.0,<1H OCEAN --121.85,37.41,17.0,2156.0,435.0,1400.0,393.0,5.6096,199100.0,<1H OCEAN --121.86,37.41,16.0,1603.0,287.0,1080.0,296.0,6.1256,266900.0,<1H OCEAN --121.86,37.41,16.0,1489.0,262.0,945.0,263.0,7.3861,267000.0,<1H OCEAN --121.86,37.41,16.0,2411.0,420.0,1671.0,442.0,6.5004,263600.0,<1H OCEAN --121.9,37.44,12.0,4228.0,734.0,2594.0,732.0,6.6086,299400.0,<1H OCEAN --121.9,37.44,4.0,1646.0,408.0,853.0,410.0,5.0821,265500.0,<1H OCEAN --121.9,37.44,9.0,957.0,139.0,532.0,142.0,8.6675,441000.0,<1H OCEAN --121.89,37.44,8.0,2534.0,,1527.0,364.0,7.8532,422800.0,<1H OCEAN --121.88,37.43,17.0,3469.0,896.0,2762.0,808.0,3.3884,245800.0,<1H OCEAN --121.88,37.43,31.0,2573.0,474.0,1898.0,475.0,5.6651,204100.0,<1H OCEAN --121.87,37.43,22.0,3805.0,596.0,2118.0,621.0,6.2892,254200.0,<1H OCEAN --121.85,37.44,8.0,426.0,61.0,241.0,55.0,7.309,367900.0,<1H OCEAN --121.87,37.42,19.0,12128.0,2112.0,6810.0,2040.0,6.4419,264500.0,<1H OCEAN --121.87,37.41,24.0,3308.0,548.0,1891.0,544.0,5.6683,248700.0,<1H OCEAN --121.88,37.41,23.0,3224.0,652.0,2183.0,655.0,4.3807,226900.0,<1H OCEAN --121.86,37.42,20.0,5032.0,808.0,2695.0,801.0,6.6227,264800.0,<1H OCEAN --121.87,37.42,25.0,4430.0,729.0,2685.0,721.0,5.6965,261100.0,<1H OCEAN --121.88,37.44,17.0,1621.0,299.0,1028.0,293.0,5.2722,186900.0,<1H OCEAN --121.88,37.44,20.0,1351.0,372.0,1427.0,394.0,4.4712,144000.0,<1H OCEAN --121.88,37.44,26.0,1471.0,348.0,1089.0,320.0,5.3057,226400.0,<1H OCEAN --121.88,37.44,23.0,1310.0,267.0,910.0,261.0,5.3994,237900.0,<1H OCEAN --121.89,37.46,5.0,1519.0,186.0,705.0,186.0,10.3798,500001.0,<1H OCEAN --121.88,37.46,5.0,1819.0,245.0,802.0,228.0,10.9722,500001.0,<1H OCEAN --121.89,37.45,15.0,2428.0,513.0,1687.0,519.0,4.75,254400.0,<1H OCEAN --121.88,37.44,14.0,2073.0,343.0,1107.0,330.0,6.7093,311200.0,<1H OCEAN --121.87,37.46,43.0,91.0,12.0,58.0,16.0,15.0001,500001.0,<1H OCEAN --121.9,37.46,29.0,2385.0,513.0,1788.0,510.0,3.8421,220700.0,<1H OCEAN --121.91,37.46,26.0,2762.0,496.0,1716.0,459.0,5.6062,226800.0,<1H OCEAN --121.9,37.45,18.0,4900.0,814.0,2984.0,758.0,6.6176,276200.0,<1H OCEAN --121.9,37.45,16.0,2952.0,446.0,1525.0,460.0,5.6063,320500.0,<1H OCEAN --121.91,37.42,19.0,1684.0,387.0,1224.0,376.0,4.1389,174100.0,<1H OCEAN --121.9,37.41,24.0,4759.0,921.0,3188.0,902.0,5.6344,228700.0,<1H OCEAN --121.89,37.42,26.0,40.0,8.0,52.0,7.0,7.7197,225000.0,<1H OCEAN --121.92,37.45,10.0,3937.0,1054.0,2032.0,1002.0,3.2617,252200.0,<1H OCEAN --121.91,37.44,26.0,1669.0,276.0,951.0,278.0,4.7794,225800.0,<1H OCEAN --121.91,37.44,19.0,2174.0,484.0,1645.0,484.0,5.0362,255100.0,<1H OCEAN --121.91,37.44,24.0,1212.0,251.0,799.0,242.0,5.0808,212500.0,<1H OCEAN --121.91,37.43,33.0,2791.0,496.0,1714.0,485.0,4.8304,224900.0,<1H OCEAN --122.07,37.44,21.0,4599.0,986.0,2756.0,943.0,2.9817,225000.0,NEAR BAY --121.96,37.43,18.0,2514.0,578.0,2205.0,545.0,3.3859,158000.0,<1H OCEAN --121.97,37.44,17.0,127.0,28.0,219.0,22.0,4.5179,112500.0,<1H OCEAN --121.99,37.4,24.0,3217.0,689.0,1196.0,684.0,3.4896,226700.0,<1H OCEAN --121.99,37.4,35.0,1845.0,325.0,1343.0,317.0,5.3912,235300.0,<1H OCEAN --121.99,37.39,25.0,3495.0,834.0,2484.0,797.0,4.8145,230700.0,<1H OCEAN --122.02,37.4,33.0,2015.0,484.0,1285.0,419.0,4.0655,226800.0,<1H OCEAN --122.01,37.4,14.0,4841.0,1130.0,813.0,517.0,3.7614,137500.0,<1H OCEAN --122.0,37.4,17.0,5121.0,1017.0,1470.0,968.0,2.9706,81300.0,<1H OCEAN --122.0,37.4,17.0,4324.0,854.0,1656.0,885.0,3.6619,232400.0,<1H OCEAN --122.0,37.4,35.0,1542.0,298.0,1164.0,318.0,5.9145,236900.0,<1H OCEAN --122.01,37.4,24.0,1297.0,297.0,441.0,282.0,3.1439,47500.0,<1H OCEAN --122.0,37.39,33.0,2154.0,405.0,1655.0,434.0,5.7962,229800.0,<1H OCEAN --121.96,37.41,17.0,3208.0,617.0,2286.0,602.0,5.2937,238000.0,<1H OCEAN --121.97,37.4,17.0,2937.0,558.0,1662.0,533.0,5.8792,255500.0,<1H OCEAN --121.96,37.39,20.0,1032.0,229.0,658.0,238.0,4.5062,219300.0,<1H OCEAN --121.95,37.39,24.0,5230.0,934.0,3795.0,970.0,5.4228,264100.0,<1H OCEAN --121.95,37.38,22.0,765.0,198.0,390.0,176.0,3.1812,87500.0,<1H OCEAN --121.95,37.41,13.0,2164.0,412.0,1087.0,411.0,4.7625,137500.0,<1H OCEAN --121.94,37.42,16.0,3936.0,788.0,1910.0,769.0,4.7049,112500.0,<1H OCEAN --121.93,37.4,34.0,148.0,28.0,132.0,13.0,3.375,67500.0,<1H OCEAN --121.91,37.36,42.0,3224.0,708.0,1940.0,674.0,3.2153,199700.0,<1H OCEAN --121.92,37.36,42.0,198.0,32.0,158.0,32.0,3.1563,137500.0,<1H OCEAN --121.95,37.37,39.0,446.0,129.0,317.0,127.0,3.0357,208300.0,<1H OCEAN --121.95,37.36,27.0,3236.0,832.0,2230.0,798.0,3.5625,208600.0,<1H OCEAN --121.95,37.36,25.0,3472.0,956.0,2267.0,944.0,2.7727,235600.0,<1H OCEAN --121.93,37.35,36.0,1823.0,410.0,1589.0,387.0,3.1065,234100.0,<1H OCEAN --121.93,37.34,48.0,2068.0,495.0,946.0,452.0,3.0375,218500.0,<1H OCEAN --121.98,37.37,36.0,1651.0,344.0,1062.0,331.0,4.575,215400.0,<1H OCEAN --121.98,37.36,32.0,1199.0,229.0,814.0,238.0,4.6719,252100.0,<1H OCEAN --121.98,37.37,35.0,995.0,202.0,615.0,199.0,5.0942,217500.0,<1H OCEAN --121.99,37.37,27.0,1797.0,538.0,1610.0,531.0,4.2422,237500.0,<1H OCEAN --121.97,37.36,24.0,4841.0,894.0,2656.0,920.0,6.0573,254500.0,<1H OCEAN --121.97,37.36,34.0,884.0,153.0,534.0,154.0,6.0116,271200.0,<1H OCEAN --121.97,37.35,35.0,1880.0,370.0,926.0,321.0,4.2273,269900.0,<1H OCEAN --121.96,37.36,16.0,5040.0,1325.0,3150.0,1196.0,4.2837,264500.0,<1H OCEAN --121.96,37.36,33.0,2581.0,623.0,1598.0,628.0,3.5199,261400.0,<1H OCEAN --121.97,37.35,36.0,815.0,126.0,353.0,122.0,6.3191,258300.0,<1H OCEAN --121.97,37.36,36.0,765.0,134.0,306.0,136.0,4.575,247600.0,<1H OCEAN --121.98,37.36,34.0,1735.0,318.0,1019.0,301.0,4.5625,242700.0,<1H OCEAN --121.98,37.36,33.0,1582.0,272.0,809.0,267.0,5.7059,287200.0,<1H OCEAN --121.98,37.36,35.0,1293.0,223.0,701.0,216.0,7.8543,281900.0,<1H OCEAN --121.98,37.36,35.0,1440.0,267.0,743.0,259.0,5.0866,254600.0,<1H OCEAN --121.99,37.36,32.0,1754.0,324.0,917.0,330.0,4.6761,298300.0,<1H OCEAN --121.99,37.36,33.0,2321.0,480.0,1230.0,451.0,4.9091,270300.0,<1H OCEAN --121.99,37.36,33.0,2677.0,644.0,1469.0,633.0,3.2048,261800.0,<1H OCEAN --121.99,37.36,33.0,2545.0,467.0,1287.0,458.0,5.5,282200.0,<1H OCEAN --121.98,37.35,41.0,1150.0,249.0,729.0,260.0,3.5491,261100.0,<1H OCEAN --121.99,37.35,18.0,1712.0,509.0,972.0,467.0,4.3971,238900.0,<1H OCEAN --121.99,37.35,16.0,3249.0,947.0,1637.0,841.0,4.5427,198400.0,<1H OCEAN --121.99,37.35,25.0,1527.0,325.0,707.0,339.0,4.375,212200.0,<1H OCEAN --121.98,37.35,36.0,1054.0,193.0,546.0,187.0,4.5625,240000.0,<1H OCEAN --121.97,37.35,30.0,1955.0,,999.0,386.0,4.6328,287100.0,<1H OCEAN --121.98,37.34,33.0,3570.0,776.0,1922.0,761.0,4.9562,238700.0,<1H OCEAN --121.98,37.34,18.0,6649.0,1712.0,3604.0,1651.0,4.5368,307400.0,<1H OCEAN --121.99,37.34,26.0,3637.0,933.0,2249.0,905.0,3.9625,262900.0,<1H OCEAN --121.96,37.35,37.0,1755.0,325.0,699.0,321.0,3.925,251300.0,<1H OCEAN --121.97,37.34,33.0,3162.0,,1553.0,686.0,3.6682,266100.0,<1H OCEAN --121.97,37.35,35.0,1249.0,232.0,556.0,247.0,3.925,287100.0,<1H OCEAN --121.96,37.35,32.0,1484.0,274.0,673.0,272.0,5.2019,279900.0,<1H OCEAN --121.95,37.35,36.0,832.0,211.0,545.0,211.0,3.2813,244400.0,<1H OCEAN --121.94,37.35,52.0,906.0,227.0,1662.0,219.0,3.1667,231600.0,<1H OCEAN --121.94,37.35,18.0,1922.0,561.0,1096.0,545.0,2.3713,244000.0,<1H OCEAN --121.95,37.35,48.0,1246.0,294.0,697.0,284.0,3.6118,235500.0,<1H OCEAN --121.95,37.35,42.0,1421.0,330.0,659.0,303.0,3.3333,237900.0,<1H OCEAN --121.95,37.35,52.0,2382.0,523.0,1096.0,492.0,4.2656,236100.0,<1H OCEAN --121.94,37.34,42.0,2174.0,420.0,1304.0,464.0,3.1429,286500.0,<1H OCEAN --121.94,37.34,29.0,3377.0,853.0,1674.0,792.0,3.4233,229300.0,<1H OCEAN --121.94,37.34,41.0,2151.0,473.0,1092.0,469.0,3.7321,250000.0,<1H OCEAN --121.94,37.33,36.0,1893.0,359.0,797.0,360.0,3.6818,257600.0,<1H OCEAN --121.94,37.33,37.0,1822.0,329.0,845.0,348.0,4.75,251100.0,<1H OCEAN --121.94,37.34,36.0,3142.0,632.0,1372.0,560.0,5.0175,246100.0,<1H OCEAN --121.95,37.34,25.0,5236.0,1320.0,2529.0,1213.0,3.1702,256100.0,<1H OCEAN --121.95,37.33,31.0,1866.0,465.0,821.0,447.0,2.3547,275900.0,<1H OCEAN --121.95,37.33,36.0,1683.0,286.0,740.0,324.0,4.7604,294700.0,<1H OCEAN --121.96,37.33,26.0,3269.0,788.0,1427.0,696.0,4.2136,288300.0,<1H OCEAN --121.96,37.33,35.0,2294.0,411.0,1054.0,449.0,4.0667,276900.0,<1H OCEAN --121.96,37.34,42.0,2001.0,402.0,942.0,375.0,4.4453,255400.0,<1H OCEAN --121.96,37.34,36.0,844.0,153.0,373.0,160.0,5.791,254100.0,<1H OCEAN --121.96,37.34,18.0,4438.0,939.0,1901.0,895.0,5.3873,288300.0,<1H OCEAN --121.96,37.34,34.0,1461.0,299.0,739.0,276.0,3.4375,252600.0,<1H OCEAN --121.96,37.34,37.0,663.0,127.0,293.0,132.0,3.7813,247800.0,<1H OCEAN --121.98,37.33,30.0,2645.0,462.0,1506.0,480.0,6.3716,330500.0,<1H OCEAN --121.98,37.33,30.0,3742.0,633.0,1721.0,631.0,6.1388,302400.0,<1H OCEAN --121.99,37.34,27.0,3353.0,653.0,1571.0,621.0,5.273,315600.0,<1H OCEAN --121.97,37.33,21.0,8275.0,1566.0,3636.0,1524.0,5.1506,302100.0,<1H OCEAN --121.98,37.33,25.0,3223.0,612.0,1529.0,602.0,5.121,287600.0,<1H OCEAN --121.98,37.33,35.0,1907.0,326.0,912.0,313.0,5.9567,294300.0,<1H OCEAN --121.99,37.33,35.0,1802.0,291.0,841.0,315.0,4.8365,313900.0,<1H OCEAN --121.99,37.33,33.0,2023.0,425.0,1016.0,405.0,3.9417,285800.0,<1H OCEAN --121.98,37.31,28.0,3840.0,629.0,1883.0,662.0,6.4095,335900.0,<1H OCEAN --121.99,37.3,28.0,4863.0,901.0,2110.0,868.0,5.1483,342000.0,<1H OCEAN --122.0,37.3,28.0,5096.0,1011.0,2588.0,954.0,5.357,355200.0,<1H OCEAN --121.98,37.32,17.0,9789.0,2552.0,4748.0,2206.0,4.2531,279800.0,<1H OCEAN --121.99,37.32,20.0,4461.0,864.0,2042.0,808.0,4.7083,217700.0,<1H OCEAN --121.98,37.31,32.0,2248.0,460.0,1191.0,419.0,5.606,288900.0,<1H OCEAN --121.98,37.31,34.0,2034.0,359.0,1016.0,375.0,5.8127,288300.0,<1H OCEAN --121.99,37.31,26.0,3285.0,502.0,1443.0,530.0,5.7833,339600.0,<1H OCEAN --121.97,37.32,19.0,4620.0,1404.0,2672.0,1308.0,3.699,237500.0,<1H OCEAN --121.96,37.32,11.0,1711.0,493.0,1094.0,543.0,3.73,227700.0,<1H OCEAN --121.95,37.32,39.0,1164.0,199.0,619.0,231.0,4.6304,263200.0,<1H OCEAN --121.95,37.32,20.0,1145.0,198.0,431.0,173.0,3.1103,281900.0,<1H OCEAN --121.95,37.31,27.0,4140.0,,2135.0,893.0,3.6292,264600.0,<1H OCEAN --121.96,37.31,26.0,4310.0,678.0,1819.0,686.0,7.0469,365500.0,<1H OCEAN --121.96,37.31,31.0,3890.0,711.0,1898.0,717.0,5.2534,290900.0,<1H OCEAN --121.97,37.31,21.0,7628.0,2166.0,3637.0,1749.0,3.6401,267500.0,<1H OCEAN --121.97,37.31,25.0,5775.0,1225.0,3580.0,1138.0,3.9187,314900.0,<1H OCEAN --121.97,37.3,25.0,5463.0,1351.0,2758.0,1310.0,3.0079,277300.0,<1H OCEAN --121.95,37.32,33.0,726.0,168.0,351.0,147.0,3.1458,270500.0,<1H OCEAN --121.94,37.31,30.0,4238.0,1010.0,1914.0,972.0,3.7632,307000.0,<1H OCEAN --121.95,37.31,27.0,2462.0,570.0,1278.0,565.0,3.5652,329500.0,<1H OCEAN --121.94,37.3,30.0,1758.0,248.0,814.0,256.0,6.623,332500.0,<1H OCEAN --121.95,37.3,21.0,4193.0,1068.0,2487.0,1011.0,3.7188,293000.0,<1H OCEAN --121.94,37.3,25.0,1455.0,370.0,734.0,331.0,3.2727,262500.0,<1H OCEAN --121.95,37.3,25.0,5641.0,1517.0,3786.0,1410.0,3.3958,267500.0,<1H OCEAN --121.96,37.3,20.0,4228.0,1006.0,2334.0,1007.0,4.3081,227300.0,<1H OCEAN --121.94,37.29,22.0,2593.0,637.0,1249.0,623.0,3.75,212500.0,<1H OCEAN --121.94,37.29,20.0,710.0,188.0,363.0,176.0,4.0962,214100.0,<1H OCEAN --121.95,37.27,17.0,1330.0,271.0,408.0,258.0,1.7171,181300.0,<1H OCEAN --121.95,37.28,52.0,777.0,148.0,362.0,144.0,4.0208,262500.0,<1H OCEAN --121.95,37.29,9.0,1503.0,381.0,715.0,349.0,4.6371,234300.0,<1H OCEAN --121.95,37.29,30.0,3734.0,813.0,1834.0,824.0,3.4505,260000.0,<1H OCEAN --121.95,37.28,19.0,7027.0,1847.0,3759.0,1753.0,3.1509,242900.0,<1H OCEAN --121.98,37.3,30.0,3404.0,693.0,1794.0,633.0,4.6312,283200.0,<1H OCEAN --121.98,37.29,33.0,2120.0,349.0,907.0,336.0,7.5443,283000.0,<1H OCEAN --121.98,37.29,31.0,2750.0,664.0,1459.0,660.0,3.2287,264900.0,<1H OCEAN --121.96,37.28,33.0,1940.0,327.0,877.0,314.0,5.4386,280400.0,<1H OCEAN --121.97,37.28,25.0,4707.0,695.0,1995.0,642.0,6.6437,296100.0,<1H OCEAN --121.97,37.28,27.0,2427.0,403.0,1301.0,438.0,5.0385,277300.0,<1H OCEAN --121.98,37.28,26.0,1182.0,309.0,620.0,306.0,3.3922,269100.0,<1H OCEAN --121.98,37.28,28.0,3688.0,633.0,1877.0,620.0,5.7251,272600.0,<1H OCEAN --121.98,37.28,27.0,3526.0,589.0,1725.0,553.0,5.7812,275000.0,<1H OCEAN --121.99,37.27,27.0,2937.0,497.0,1454.0,511.0,5.4051,273500.0,<1H OCEAN --121.99,37.29,32.0,2930.0,481.0,1336.0,481.0,6.4631,344100.0,<1H OCEAN --121.96,37.3,23.0,4040.0,843.0,2181.0,843.0,4.0403,303400.0,<1H OCEAN --121.97,37.3,31.0,3340.0,735.0,1891.0,686.0,4.8542,275000.0,<1H OCEAN --121.96,37.29,24.0,1240.0,263.0,690.0,276.0,5.0,283000.0,<1H OCEAN --121.97,37.29,25.0,4096.0,743.0,2027.0,741.0,5.3294,300300.0,<1H OCEAN --121.97,37.29,29.0,2721.0,682.0,1602.0,646.0,3.337,265300.0,<1H OCEAN --121.99,37.27,17.0,1527.0,267.0,775.0,260.0,5.9658,278000.0,<1H OCEAN --121.98,37.27,25.0,3075.0,564.0,1633.0,543.0,5.2528,269400.0,<1H OCEAN --121.98,37.27,29.0,2658.0,484.0,1318.0,498.0,5.3561,298900.0,<1H OCEAN --121.96,37.28,28.0,5018.0,1066.0,2846.0,998.0,4.0174,273900.0,<1H OCEAN --121.96,37.27,22.0,6114.0,1211.0,2983.0,1163.0,5.2533,269100.0,<1H OCEAN --121.96,37.27,31.0,3347.0,589.0,1566.0,597.0,5.5151,286800.0,<1H OCEAN --121.97,37.26,19.0,2174.0,454.0,998.0,426.0,4.6827,255100.0,<1H OCEAN --121.96,37.26,22.0,1408.0,351.0,636.0,294.0,1.8542,333300.0,<1H OCEAN --121.95,37.25,30.0,3298.0,634.0,1532.0,602.0,5.0863,332000.0,<1H OCEAN --121.95,37.24,37.0,3109.0,541.0,1566.0,544.0,6.0235,413500.0,<1H OCEAN --121.95,37.24,32.0,1382.0,239.0,705.0,251.0,6.0957,405400.0,<1H OCEAN --121.96,37.24,26.0,3032.0,605.0,1208.0,562.0,5.4683,430900.0,<1H OCEAN --121.96,37.25,35.0,1018.0,169.0,484.0,174.0,6.1648,371900.0,<1H OCEAN --121.95,37.25,34.0,2906.0,544.0,1282.0,522.0,5.5127,268200.0,<1H OCEAN --121.93,37.25,36.0,1089.0,182.0,535.0,170.0,4.69,252600.0,<1H OCEAN --121.93,37.25,21.0,1354.0,289.0,639.0,273.0,4.5333,234200.0,<1H OCEAN --121.92,37.25,34.0,2231.0,360.0,1035.0,365.0,4.7917,243200.0,<1H OCEAN --121.93,37.25,32.0,1555.0,287.0,779.0,284.0,6.0358,260100.0,<1H OCEAN --121.94,37.24,35.0,1484.0,244.0,664.0,238.0,4.675,245300.0,<1H OCEAN --121.91,37.24,24.0,5046.0,1001.0,2449.0,968.0,4.7118,274600.0,<1H OCEAN --121.91,37.24,30.0,2327.0,419.0,1114.0,372.0,4.7279,272000.0,<1H OCEAN --121.92,37.24,26.0,6777.0,1051.0,3319.0,1061.0,6.3663,279400.0,<1H OCEAN --121.94,37.24,19.0,1741.0,294.0,632.0,279.0,5.5944,290500.0,<1H OCEAN --121.94,37.24,26.0,2561.0,388.0,1165.0,393.0,7.3522,363800.0,<1H OCEAN --121.93,37.24,26.0,2574.0,414.0,1096.0,428.0,6.0738,335900.0,<1H OCEAN --121.92,37.24,27.0,1265.0,216.0,660.0,232.0,5.3911,281200.0,<1H OCEAN --121.91,37.23,22.0,2614.0,453.0,1240.0,462.0,6.0712,271800.0,<1H OCEAN --121.91,37.23,27.0,4866.0,668.0,1956.0,659.0,7.3843,405000.0,<1H OCEAN --121.93,37.22,21.0,4872.0,594.0,1811.0,560.0,9.3834,500001.0,<1H OCEAN --121.96,37.23,36.0,4423.0,632.0,1719.0,608.0,7.8407,476400.0,<1H OCEAN --121.97,37.23,22.0,2781.0,523.0,1291.0,516.0,4.6065,445900.0,<1H OCEAN --121.98,37.22,46.0,10088.0,1910.0,3728.0,1781.0,5.2321,500001.0,<1H OCEAN --121.96,37.22,35.0,4709.0,723.0,1866.0,694.0,8.492,500001.0,<1H OCEAN --121.95,37.21,20.0,2345.0,322.0,890.0,276.0,10.0187,500001.0,<1H OCEAN --121.97,37.24,35.0,2553.0,533.0,1117.0,498.0,4.4063,436100.0,<1H OCEAN --121.98,37.23,33.0,3585.0,935.0,1511.0,835.0,3.1176,396300.0,<1H OCEAN --122.0,37.23,36.0,3191.0,430.0,1234.0,440.0,9.0704,500001.0,<1H OCEAN --121.96,37.25,19.0,1858.0,359.0,790.0,347.0,4.5156,339300.0,<1H OCEAN --121.97,37.25,32.0,2892.0,496.0,1193.0,492.0,6.131,367800.0,<1H OCEAN --121.98,37.26,27.0,2331.0,461.0,1178.0,447.0,4.6654,340700.0,<1H OCEAN --121.99,37.27,21.0,1214.0,192.0,500.0,185.0,7.598,347800.0,<1H OCEAN --121.99,37.26,17.0,4034.0,611.0,1158.0,560.0,8.2069,442500.0,<1H OCEAN --121.98,37.25,19.0,755.0,93.0,267.0,99.0,15.0,500001.0,<1H OCEAN --121.99,37.25,25.0,1743.0,212.0,604.0,200.0,10.7582,500001.0,<1H OCEAN --121.97,37.25,21.0,2775.0,389.0,856.0,350.0,7.9135,496400.0,<1H OCEAN --121.99,37.25,22.0,4240.0,532.0,1480.0,514.0,11.2463,500001.0,<1H OCEAN --121.98,37.24,35.0,3574.0,485.0,1325.0,476.0,8.5425,500001.0,<1H OCEAN --122.0,37.27,33.0,1664.0,271.0,759.0,272.0,5.7876,415800.0,<1H OCEAN --122.01,37.27,27.0,3340.0,451.0,1220.0,447.0,8.8178,500001.0,<1H OCEAN --122.02,37.26,24.0,2411.0,299.0,847.0,299.0,10.2666,500001.0,<1H OCEAN --122.02,37.26,34.0,1764.0,243.0,692.0,223.0,8.0331,500001.0,<1H OCEAN --122.01,37.25,31.0,1574.0,193.0,551.0,191.0,10.2311,500001.0,<1H OCEAN --121.99,37.26,29.0,2718.0,365.0,982.0,339.0,7.9234,500001.0,<1H OCEAN --122.01,37.26,14.0,2561.0,404.0,1172.0,378.0,7.6107,500001.0,<1H OCEAN --122.03,37.25,34.0,2892.0,413.0,903.0,365.0,7.8711,500001.0,<1H OCEAN --122.04,37.24,24.0,1521.0,209.0,539.0,192.0,11.1557,500001.0,<1H OCEAN --122.02,37.24,28.0,2796.0,365.0,1085.0,363.0,10.6834,500001.0,<1H OCEAN --122.03,37.29,22.0,3118.0,438.0,1147.0,425.0,10.3653,500001.0,<1H OCEAN --122.02,37.29,18.0,2550.0,312.0,999.0,320.0,8.7939,500001.0,<1H OCEAN --122.02,37.29,25.0,3845.0,492.0,1461.0,475.0,10.3979,500001.0,<1H OCEAN --122.01,37.29,31.0,3136.0,431.0,1190.0,412.0,7.5,500001.0,<1H OCEAN --122.01,37.28,22.0,2038.0,260.0,773.0,281.0,9.1569,500001.0,<1H OCEAN --122.0,37.28,35.0,3133.0,541.0,1449.0,555.0,5.7295,346100.0,<1H OCEAN --122.0,37.28,33.0,2170.0,311.0,854.0,303.0,8.3605,500001.0,<1H OCEAN --122.0,37.28,32.0,2782.0,495.0,1092.0,455.0,5.4103,335900.0,<1H OCEAN --122.03,37.27,32.0,4350.0,645.0,1551.0,609.0,7.8279,500001.0,<1H OCEAN --122.03,37.28,29.0,3752.0,468.0,1320.0,471.0,9.8937,500001.0,<1H OCEAN --122.02,37.28,25.0,3437.0,428.0,1198.0,411.0,9.3464,500001.0,<1H OCEAN --122.01,37.27,28.0,3825.0,473.0,1415.0,480.0,10.675,500001.0,<1H OCEAN --122.06,37.27,16.0,1612.0,221.0,567.0,208.0,10.5793,500001.0,<1H OCEAN --122.04,37.29,19.0,3625.0,432.0,1252.0,409.0,12.2145,500001.0,<1H OCEAN --122.03,37.27,25.0,4460.0,553.0,1608.0,561.0,10.7958,500001.0,<1H OCEAN --122.04,37.26,24.0,4973.0,709.0,1692.0,696.0,7.8627,500001.0,<1H OCEAN --122.06,37.33,29.0,1945.0,269.0,826.0,275.0,8.248,498800.0,<1H OCEAN --122.06,37.32,30.0,3033.0,540.0,1440.0,507.0,6.2182,380800.0,<1H OCEAN --122.05,37.31,25.0,4601.0,696.0,2003.0,666.0,8.0727,455500.0,<1H OCEAN --122.05,37.31,25.0,4111.0,538.0,1585.0,568.0,9.2298,500001.0,<1H OCEAN --122.06,37.3,11.0,5488.0,706.0,1947.0,641.0,10.7326,500001.0,<1H OCEAN --122.07,37.33,13.0,2173.0,349.0,891.0,345.0,8.0158,420000.0,<1H OCEAN --122.06,37.33,23.0,4507.0,751.0,2167.0,722.0,7.0102,500001.0,<1H OCEAN --122.07,37.31,24.0,4401.0,698.0,1818.0,685.0,7.2986,500001.0,<1H OCEAN --122.08,37.3,30.0,2268.0,404.0,1197.0,372.0,7.0813,485300.0,<1H OCEAN --122.08,37.31,17.0,2560.0,396.0,959.0,400.0,7.8528,368900.0,<1H OCEAN --122.04,37.34,20.0,4475.0,1048.0,2271.0,1021.0,4.8836,396200.0,<1H OCEAN --122.06,37.34,13.0,2057.0,466.0,790.0,436.0,5.0081,288300.0,<1H OCEAN --122.05,37.33,21.0,2052.0,346.0,933.0,351.0,5.3167,416300.0,<1H OCEAN --122.04,37.33,26.0,2690.0,401.0,1264.0,429.0,7.7643,474700.0,<1H OCEAN --122.05,37.33,17.0,3674.0,824.0,1364.0,694.0,6.3131,436400.0,<1H OCEAN --122.04,37.33,22.0,4011.0,963.0,2206.0,879.0,4.5721,351200.0,<1H OCEAN --122.04,37.32,27.0,2826.0,451.0,1259.0,439.0,5.7528,431400.0,<1H OCEAN --122.04,37.31,29.0,2476.0,434.0,1217.0,416.0,6.2045,393800.0,<1H OCEAN --122.04,37.31,24.0,3388.0,633.0,1627.0,585.0,5.154,355100.0,<1H OCEAN --122.04,37.3,26.0,1714.0,270.0,778.0,262.0,6.075,417000.0,<1H OCEAN --122.04,37.3,25.0,2366.0,417.0,1076.0,398.0,6.9238,345900.0,<1H OCEAN --122.03,37.31,25.0,2131.0,410.0,1132.0,395.0,5.3508,409100.0,<1H OCEAN --122.04,37.3,25.0,3807.0,600.0,1678.0,600.0,6.6818,411300.0,<1H OCEAN --122.01,37.3,25.0,4044.0,551.0,1699.0,533.0,8.0837,380600.0,<1H OCEAN --122.01,37.31,23.0,6846.0,1078.0,2951.0,1063.0,6.3702,332000.0,<1H OCEAN --122.0,37.31,28.0,3811.0,585.0,1795.0,581.0,7.8383,372700.0,<1H OCEAN --122.0,37.3,29.0,3429.0,524.0,1518.0,520.0,7.218,400700.0,<1H OCEAN --122.03,37.31,19.0,2885.0,859.0,1520.0,784.0,3.375,275700.0,<1H OCEAN --122.03,37.3,30.0,3007.0,554.0,1551.0,616.0,5.8521,326300.0,<1H OCEAN --122.03,37.3,22.0,3583.0,758.0,1792.0,695.0,5.4842,335300.0,<1H OCEAN --122.02,37.31,34.0,2629.0,433.0,1301.0,431.0,6.083,341400.0,<1H OCEAN --122.02,37.31,35.0,2355.0,384.0,1248.0,378.0,5.9714,332500.0,<1H OCEAN --122.02,37.3,26.0,1983.0,301.0,924.0,297.0,6.7123,354600.0,<1H OCEAN --122.02,37.3,32.0,2134.0,328.0,903.0,322.0,6.359,341900.0,<1H OCEAN --122.02,37.32,27.0,4336.0,754.0,2009.0,734.0,6.3923,348300.0,<1H OCEAN --122.02,37.31,33.0,2563.0,434.0,1230.0,418.0,6.3197,340100.0,<1H OCEAN --122.03,37.32,15.0,5132.0,1059.0,2156.0,982.0,5.6511,404800.0,<1H OCEAN --122.0,37.32,34.0,3450.0,731.0,1915.0,689.0,4.7402,244500.0,<1H OCEAN --122.01,37.31,26.0,1391.0,241.0,700.0,236.0,6.6766,332700.0,<1H OCEAN --122.01,37.32,32.0,3108.0,613.0,1577.0,603.0,4.6613,284000.0,<1H OCEAN --122.0,37.31,33.0,4211.0,918.0,2389.0,861.0,4.7235,242200.0,<1H OCEAN --122.02,37.33,25.0,3823.0,584.0,1689.0,571.0,7.3693,373600.0,<1H OCEAN --122.03,37.33,23.0,4221.0,671.0,1782.0,641.0,7.4863,412300.0,<1H OCEAN --122.03,37.34,16.0,1755.0,410.0,674.0,410.0,5.1602,231200.0,<1H OCEAN --122.02,37.34,30.0,1036.0,151.0,467.0,156.0,6.448,360600.0,<1H OCEAN --122.0,37.33,30.0,4033.0,794.0,1788.0,807.0,5.6932,338700.0,<1H OCEAN --122.02,37.35,26.0,2785.0,418.0,1221.0,422.0,8.1078,365700.0,<1H OCEAN --122.02,37.35,22.0,3219.0,756.0,1479.0,667.0,4.1473,354400.0,<1H OCEAN --122.02,37.34,26.0,1992.0,328.0,980.0,342.0,6.2475,350000.0,<1H OCEAN --122.02,37.34,28.0,2488.0,396.0,1190.0,410.0,5.7881,344700.0,<1H OCEAN --122.03,37.34,25.0,5404.0,906.0,2338.0,883.0,6.0577,451800.0,<1H OCEAN --122.03,37.35,25.0,3095.0,514.0,1251.0,507.0,5.5388,352100.0,<1H OCEAN --122.01,37.35,33.0,2517.0,496.0,1158.0,443.0,5.0785,289500.0,<1H OCEAN --122.0,37.35,20.0,4304.0,851.0,2059.0,835.0,5.1674,333000.0,<1H OCEAN --122.0,37.34,27.0,1716.0,290.0,817.0,301.0,5.9158,343100.0,<1H OCEAN --122.0,37.34,31.0,3344.0,620.0,1604.0,572.0,5.2108,351500.0,<1H OCEAN --122.01,37.34,31.0,3080.0,526.0,1493.0,582.0,6.3052,344200.0,<1H OCEAN --122.05,37.35,34.0,2494.0,375.0,1399.0,382.0,7.3753,388100.0,<1H OCEAN --122.05,37.34,34.0,2515.0,401.0,1079.0,399.0,7.7865,423900.0,<1H OCEAN --122.05,37.34,31.0,1443.0,215.0,627.0,222.0,6.6087,416500.0,<1H OCEAN --122.06,37.34,20.0,3435.0,593.0,1293.0,553.0,6.7578,451400.0,<1H OCEAN --122.04,37.35,28.0,3250.0,485.0,1328.0,473.0,7.4729,431600.0,<1H OCEAN --122.04,37.34,28.0,3081.0,460.0,1260.0,461.0,7.5372,432600.0,<1H OCEAN --122.03,37.35,16.0,1156.0,198.0,455.0,216.0,7.2779,292900.0,<1H OCEAN --122.04,37.35,28.0,1582.0,264.0,696.0,270.0,5.678,370100.0,<1H OCEAN --122.04,37.34,25.0,1994.0,287.0,704.0,283.0,7.7799,447300.0,<1H OCEAN --122.03,37.34,17.0,1165.0,278.0,598.0,287.0,4.0129,342400.0,<1H OCEAN --122.04,37.34,23.0,2590.0,725.0,1795.0,680.0,3.16,225000.0,<1H OCEAN --122.04,37.34,19.0,3694.0,1036.0,2496.0,986.0,3.6991,271500.0,<1H OCEAN --122.05,37.37,35.0,1365.0,256.0,662.0,262.0,5.6533,291400.0,<1H OCEAN --122.05,37.36,34.0,2400.0,419.0,1017.0,384.0,4.1369,316900.0,<1H OCEAN --122.05,37.36,27.0,2621.0,513.0,1063.0,523.0,3.9848,409700.0,<1H OCEAN --122.06,37.35,31.0,1795.0,281.0,872.0,282.0,8.0599,381800.0,<1H OCEAN --122.06,37.36,35.0,2693.0,493.0,1343.0,455.0,6.0777,327500.0,<1H OCEAN --122.06,37.37,32.0,2510.0,578.0,1160.0,581.0,4.9087,322700.0,<1H OCEAN --122.04,37.37,23.0,5135.0,911.0,2351.0,863.0,5.2319,430100.0,<1H OCEAN --122.03,37.36,28.0,2490.0,345.0,948.0,361.0,6.4913,411900.0,<1H OCEAN --122.04,37.35,20.0,2016.0,313.0,767.0,310.0,6.837,383000.0,<1H OCEAN --122.05,37.36,29.0,1733.0,255.0,679.0,278.0,7.5337,406800.0,<1H OCEAN --122.04,37.36,26.0,3298.0,460.0,1241.0,472.0,6.8753,403000.0,<1H OCEAN --122.05,37.37,27.0,3885.0,661.0,1537.0,606.0,6.6085,344700.0,<1H OCEAN --122.03,37.36,16.0,2697.0,803.0,1369.0,723.0,4.4699,367400.0,<1H OCEAN --122.02,37.35,17.0,2975.0,608.0,1465.0,577.0,5.8779,362200.0,<1H OCEAN --122.02,37.35,18.0,1221.0,255.0,507.0,271.0,5.3679,228400.0,<1H OCEAN --122.03,37.35,19.0,3811.0,1227.0,1930.0,1153.0,3.5154,311400.0,<1H OCEAN --122.03,37.37,16.0,3402.0,1193.0,1479.0,1043.0,3.5861,500001.0,<1H OCEAN --122.02,37.36,21.0,2471.0,677.0,1486.0,689.0,3.9038,243800.0,<1H OCEAN --122.02,37.36,25.0,2074.0,387.0,1273.0,383.0,4.7609,378000.0,<1H OCEAN --122.01,37.36,16.0,1105.0,354.0,499.0,324.0,4.2061,253600.0,<1H OCEAN --122.02,37.36,24.0,1709.0,437.0,892.0,408.0,4.9671,335200.0,<1H OCEAN --122.01,37.36,25.0,2796.0,429.0,1267.0,426.0,6.6329,349000.0,<1H OCEAN --122.01,37.36,21.0,2483.0,396.0,1194.0,424.0,7.1273,346300.0,<1H OCEAN --122.01,37.35,16.0,3716.0,916.0,1551.0,759.0,4.5,323600.0,<1H OCEAN --122.0,37.36,19.0,2237.0,433.0,1158.0,426.0,6.7718,368300.0,<1H OCEAN --122.0,37.36,17.0,2070.0,,797.0,275.0,8.6155,411200.0,<1H OCEAN --122.0,37.36,25.0,3534.0,949.0,1880.0,849.0,3.4238,337000.0,<1H OCEAN --122.0,37.36,17.0,6012.0,1737.0,3539.0,1625.0,3.8464,239400.0,<1H OCEAN --122.03,37.37,9.0,2966.0,770.0,1430.0,740.0,3.0047,256000.0,<1H OCEAN --122.03,37.37,41.0,2123.0,425.0,1032.0,435.0,4.6957,284800.0,<1H OCEAN --122.03,37.37,30.0,1269.0,290.0,556.0,266.0,3.8125,325000.0,<1H OCEAN --122.04,37.37,42.0,1125.0,273.0,616.0,258.0,3.6765,252800.0,<1H OCEAN --122.04,37.37,33.0,2757.0,489.0,1201.0,481.0,5.0453,311600.0,<1H OCEAN --122.04,37.38,38.0,2850.0,550.0,1518.0,514.0,4.2028,273600.0,<1H OCEAN --122.03,37.38,21.0,2667.0,798.0,1433.0,727.0,3.8732,252400.0,<1H OCEAN --122.02,37.38,43.0,1261.0,317.0,836.0,333.0,4.0911,224600.0,<1H OCEAN --122.01,37.38,32.0,726.0,204.0,538.0,203.0,4.505,230400.0,<1H OCEAN --122.02,37.37,8.0,5686.0,1489.0,3250.0,1329.0,4.2782,327700.0,<1H OCEAN --122.01,37.37,11.0,2559.0,694.0,1309.0,668.0,4.1847,167300.0,<1H OCEAN --122.01,37.37,25.0,2213.0,360.0,1066.0,390.0,7.2165,360900.0,<1H OCEAN --122.0,37.37,16.0,1434.0,372.0,804.0,361.0,3.7045,178100.0,<1H OCEAN --122.03,37.39,22.0,3280.0,933.0,1842.0,795.0,4.4107,232700.0,<1H OCEAN --122.02,37.38,32.0,1889.0,487.0,1321.0,508.0,3.2574,254400.0,<1H OCEAN --122.01,37.39,26.0,2500.0,962.0,2374.0,879.0,3.5586,222200.0,<1H OCEAN --122.01,37.39,36.0,1976.0,361.0,1348.0,371.0,5.6447,252600.0,<1H OCEAN --122.0,37.39,36.0,1236.0,229.0,880.0,247.0,5.791,239400.0,<1H OCEAN --122.03,37.39,34.0,2600.0,650.0,1994.0,650.0,4.0223,250200.0,<1H OCEAN --122.02,37.4,35.0,2348.0,531.0,1475.0,498.0,4.35,261000.0,<1H OCEAN --122.01,37.39,16.0,3015.0,829.0,1769.0,807.0,4.0068,249500.0,<1H OCEAN --122.02,37.39,35.0,2297.0,497.0,1428.0,497.0,4.7431,239700.0,<1H OCEAN --122.04,37.39,5.0,8745.0,2211.0,3959.0,2019.0,4.7685,280100.0,<1H OCEAN --122.05,37.38,23.0,3200.0,907.0,2029.0,866.0,3.5649,450000.0,<1H OCEAN --122.05,37.38,24.0,2424.0,501.0,1367.0,507.0,4.072,364200.0,<1H OCEAN --122.05,37.38,29.0,1875.0,340.0,816.0,350.0,5.4351,336500.0,<1H OCEAN --122.06,37.38,20.0,4293.0,1272.0,2389.0,1210.0,4.2719,270800.0,NEAR BAY --122.05,37.37,27.0,2687.0,768.0,1362.0,725.0,3.4028,324200.0,<1H OCEAN --122.05,37.39,25.0,347.0,82.0,148.0,77.0,4.4531,350000.0,<1H OCEAN --122.06,37.4,21.0,12855.0,3226.0,7273.0,3052.0,4.3351,267400.0,NEAR BAY --122.06,37.39,26.0,18.0,4.0,8.0,4.0,3.75,375000.0,NEAR BAY --122.06,37.39,22.0,1236.0,290.0,413.0,274.0,3.6875,40000.0,NEAR BAY --122.06,37.38,20.0,3401.0,768.0,1497.0,747.0,4.2188,500001.0,NEAR BAY --122.06,37.38,21.0,1798.0,399.0,837.0,410.0,5.6999,470000.0,NEAR BAY --122.06,37.37,18.0,3058.0,661.0,1377.0,675.0,6.1299,500001.0,<1H OCEAN --122.06,37.38,20.0,2976.0,766.0,1227.0,634.0,4.8625,262500.0,NEAR BAY --122.07,37.39,19.0,1465.0,342.0,646.0,345.0,4.712,289300.0,NEAR BAY --122.08,37.4,23.0,806.0,158.0,373.0,156.0,5.9291,284600.0,NEAR BAY --122.07,37.4,16.0,3352.0,813.0,1440.0,729.0,3.7359,262500.0,NEAR BAY --122.07,37.41,26.0,1184.0,225.0,815.0,218.0,5.7657,322300.0,NEAR BAY --122.07,37.4,15.0,2940.0,910.0,943.0,711.0,4.359,192200.0,NEAR BAY --122.08,37.4,19.0,3565.0,858.0,1639.0,744.0,4.1544,277000.0,NEAR BAY --122.08,37.4,25.0,1750.0,341.0,999.0,319.0,5.806,308700.0,NEAR BAY --122.08,37.41,20.0,1896.0,456.0,1069.0,436.0,4.6875,288900.0,NEAR BAY --122.09,37.4,36.0,1575.0,379.0,1036.0,382.0,5.1408,264700.0,NEAR BAY --122.1,37.41,33.0,6277.0,1274.0,3025.0,1211.0,5.4721,343300.0,NEAR BAY --122.09,37.41,8.0,1480.0,414.0,856.0,445.0,2.8203,284100.0,NEAR BAY --122.09,37.41,14.0,753.0,193.0,421.0,153.0,4.2463,266700.0,NEAR BAY --122.09,37.41,18.0,1476.0,473.0,838.0,415.0,3.575,274000.0,NEAR BAY --122.09,37.4,22.0,1489.0,436.0,662.0,470.0,3.5179,197200.0,NEAR BAY --122.09,37.4,17.0,748.0,184.0,412.0,180.0,3.4375,290600.0,NEAR BAY --122.09,37.42,23.0,4874.0,1251.0,2699.0,1163.0,3.8003,229800.0,NEAR BAY --122.11,37.41,27.0,5110.0,1599.0,2764.0,1482.0,3.4198,351900.0,NEAR BAY --122.09,37.4,26.0,3218.0,1021.0,2087.0,964.0,3.2875,182700.0,NEAR BAY --122.1,37.4,27.0,3410.0,1156.0,2314.0,1086.0,3.4868,165600.0,NEAR BAY --122.1,37.4,23.0,1755.0,508.0,1374.0,506.0,4.3077,293500.0,NEAR BAY --122.1,37.4,19.0,1085.0,288.0,1009.0,305.0,3.9091,276000.0,NEAR BAY --122.11,37.4,16.0,1994.0,489.0,1173.0,472.0,4.1875,266400.0,NEAR BAY --122.11,37.4,15.0,255.0,63.0,138.0,74.0,4.6591,175000.0,NEAR BAY --122.1,37.4,23.0,514.0,210.0,367.0,206.0,3.1736,181300.0,NEAR BAY --122.08,37.4,52.0,766.0,203.0,448.0,196.0,2.5208,316700.0,NEAR BAY --122.09,37.39,43.0,2065.0,535.0,1029.0,500.0,3.7318,327700.0,NEAR BAY --122.09,37.39,30.0,1722.0,490.0,1057.0,517.0,3.725,261300.0,NEAR BAY --122.09,37.4,24.0,3983.0,1126.0,2645.0,1072.0,3.6742,275000.0,NEAR BAY --122.08,37.39,44.0,1498.0,430.0,848.0,400.0,2.8438,307100.0,NEAR BAY --122.08,37.39,46.0,1115.0,248.0,543.0,248.0,3.2083,334300.0,NEAR BAY --122.08,37.39,4.0,2292.0,,1050.0,584.0,4.8036,340000.0,NEAR BAY --122.07,37.39,30.0,1695.0,480.0,932.0,447.0,3.5045,352500.0,NEAR BAY --122.07,37.39,37.0,1169.0,239.0,589.0,249.0,5.0131,330300.0,NEAR BAY --122.07,37.38,26.0,1272.0,306.0,562.0,284.0,4.5644,280200.0,NEAR BAY --122.08,37.39,39.0,2210.0,483.0,1023.0,450.0,4.5833,342400.0,NEAR BAY --122.1,37.39,31.0,1117.0,304.0,591.0,302.0,3.5909,353100.0,NEAR BAY --122.1,37.39,36.0,1860.0,367.0,794.0,366.0,5.0871,354500.0,NEAR BAY --122.09,37.39,34.0,1508.0,483.0,774.0,443.0,2.7279,365600.0,NEAR BAY --122.09,37.39,36.0,1035.0,196.0,475.0,205.0,5.5385,359000.0,NEAR BAY --122.09,37.38,34.0,1959.0,342.0,849.0,357.0,6.2884,414700.0,NEAR BAY --122.09,37.38,36.0,2587.0,416.0,1055.0,410.0,6.1995,407200.0,NEAR BAY --122.08,37.38,33.0,2771.0,659.0,1496.0,581.0,3.4042,353600.0,NEAR BAY --122.08,37.38,36.0,857.0,156.0,448.0,168.0,5.0086,366700.0,NEAR BAY --122.08,37.38,36.0,1199.0,198.0,485.0,199.0,5.0796,373400.0,NEAR BAY --122.08,37.38,36.0,782.0,130.0,348.0,128.0,6.828,383900.0,NEAR BAY --122.08,37.37,29.0,1229.0,,707.0,194.0,7.1108,465000.0,NEAR BAY --122.09,37.37,27.0,1269.0,186.0,464.0,182.0,6.8374,500001.0,NEAR BAY --122.09,37.37,34.0,2165.0,355.0,776.0,339.0,5.2971,442100.0,NEAR BAY --122.08,37.38,25.0,830.0,228.0,368.0,174.0,3.3917,342900.0,NEAR BAY --122.07,37.37,22.0,3770.0,727.0,1657.0,762.0,4.8021,457500.0,NEAR BAY --122.07,37.37,30.0,2937.0,407.0,1097.0,407.0,7.9813,473500.0,NEAR BAY --122.07,37.36,21.0,3244.0,426.0,1158.0,415.0,7.5,500001.0,<1H OCEAN --122.06,37.36,34.0,1747.0,250.0,662.0,257.0,6.8268,500001.0,<1H OCEAN --122.07,37.36,28.0,4612.0,608.0,1686.0,567.0,10.0346,500001.0,<1H OCEAN --122.08,37.36,31.0,2717.0,376.0,1001.0,381.0,9.281,500001.0,NEAR BAY --122.09,37.36,37.0,1550.0,238.0,805.0,250.0,5.0222,500001.0,NEAR BAY --122.09,37.36,37.0,2269.0,325.0,930.0,321.0,7.5274,500001.0,NEAR BAY --122.08,37.36,28.0,2181.0,284.0,728.0,238.0,8.2266,500001.0,NEAR BAY --122.06,37.35,30.0,2040.0,294.0,787.0,278.0,8.758,500001.0,<1H OCEAN --122.07,37.34,33.0,1208.0,198.0,495.0,216.0,5.4659,500001.0,<1H OCEAN --122.07,37.34,35.0,1172.0,184.0,512.0,175.0,7.3561,500001.0,<1H OCEAN --122.07,37.35,35.0,1447.0,205.0,619.0,206.0,9.8144,500001.0,<1H OCEAN --122.07,37.35,35.0,1579.0,210.0,570.0,196.0,8.5888,500001.0,<1H OCEAN --122.08,37.35,35.0,1347.0,207.0,548.0,189.0,7.7068,500001.0,NEAR BAY --122.07,37.34,30.0,1851.0,238.0,631.0,236.0,10.1007,500001.0,<1H OCEAN --122.08,37.34,23.0,2597.0,335.0,922.0,338.0,10.5142,500001.0,<1H OCEAN --122.08,37.34,28.0,1643.0,216.0,594.0,205.0,12.367,500001.0,<1H OCEAN --122.08,37.35,33.0,2398.0,317.0,832.0,314.0,10.3591,500001.0,NEAR BAY --122.1,37.38,37.0,4167.0,612.0,1577.0,597.0,7.5655,500001.0,NEAR BAY --122.1,37.37,37.0,2511.0,354.0,945.0,348.0,8.3924,500001.0,NEAR BAY --122.1,37.37,40.0,2224.0,354.0,929.0,345.0,8.1064,500001.0,NEAR BAY --122.11,37.37,22.0,1477.0,195.0,520.0,187.0,10.3329,500001.0,NEAR BAY --122.11,37.38,36.0,3598.0,500.0,1296.0,533.0,7.8177,500001.0,NEAR BAY --122.11,37.38,22.0,3638.0,719.0,1329.0,650.0,5.0804,500001.0,NEAR BAY --122.11,37.37,49.0,1068.0,190.0,410.0,171.0,7.2045,500001.0,NEAR BAY --122.12,37.37,18.0,1617.0,231.0,555.0,222.0,8.9021,500001.0,NEAR BAY --122.11,37.4,31.0,2836.0,490.0,1138.0,481.0,4.9519,500001.0,NEAR BAY --122.11,37.39,36.0,1660.0,261.0,655.0,249.0,6.3967,500001.0,NEAR BAY --122.1,37.39,35.0,2471.0,349.0,881.0,342.0,7.6229,500001.0,NEAR BAY --122.12,37.4,31.0,2356.0,405.0,921.0,358.0,7.0245,500001.0,NEAR BAY --122.12,37.39,34.0,3561.0,497.0,1336.0,501.0,8.9172,500001.0,NEAR BAY --122.12,37.38,34.0,1443.0,218.0,504.0,200.0,8.4709,500001.0,NEAR BAY --122.12,37.4,32.0,3514.0,473.0,1583.0,480.0,10.3894,500001.0,NEAR BAY --122.13,37.4,29.0,6027.0,1195.0,2687.0,1171.0,5.1335,461200.0,NEAR BAY --122.13,37.41,36.0,4787.0,900.0,2039.0,890.0,5.4063,440900.0,NEAR BAY --122.14,37.41,35.0,2419.0,426.0,949.0,433.0,6.4588,437100.0,NEAR BAY --122.14,37.42,46.0,206.0,44.0,134.0,51.0,4.15,265000.0,NEAR BAY --122.13,37.42,36.0,3982.0,1045.0,2251.0,995.0,3.5364,314100.0,NEAR BAY --122.12,37.41,33.0,2892.0,617.0,1250.0,581.0,5.3727,360900.0,NEAR BAY --122.11,37.43,35.0,3584.0,535.0,1405.0,538.0,7.3023,451300.0,NEAR BAY --122.11,37.43,35.0,3905.0,565.0,1562.0,553.0,7.313,463700.0,NEAR BAY --122.11,37.42,32.0,3058.0,595.0,1267.0,540.0,6.4949,417800.0,NEAR BAY --122.11,37.41,35.0,2712.0,428.0,1084.0,425.0,7.1382,443800.0,NEAR BAY --122.11,37.41,33.0,1641.0,284.0,659.0,282.0,6.0884,432900.0,NEAR BAY --122.12,37.42,35.0,2445.0,533.0,1187.0,519.0,5.2803,362100.0,NEAR BAY --122.12,37.42,36.0,2607.0,551.0,1165.0,523.0,5.1524,373100.0,NEAR BAY --122.13,37.43,40.0,3454.0,648.0,1498.0,647.0,5.2114,438400.0,NEAR BAY --122.13,37.43,32.0,4398.0,878.0,1799.0,792.0,4.7375,431900.0,NEAR BAY --122.12,37.43,36.0,3212.0,553.0,1455.0,574.0,6.46,425500.0,NEAR BAY --122.12,37.44,33.0,2974.0,623.0,1435.0,588.0,5.485,406300.0,NEAR BAY --122.13,37.44,42.0,2390.0,462.0,1146.0,468.0,6.3111,397400.0,NEAR BAY --122.12,37.44,33.0,1509.0,303.0,748.0,268.0,4.875,373400.0,NEAR BAY --122.11,37.44,35.0,2016.0,349.0,1023.0,376.0,5.6413,376600.0,NEAR BAY --122.12,37.43,33.0,3262.0,668.0,1411.0,626.0,5.316,398100.0,NEAR BAY --122.13,37.45,37.0,2295.0,332.0,933.0,332.0,6.7257,500001.0,NEAR BAY --122.13,37.45,37.0,1287.0,197.0,510.0,206.0,7.9029,500001.0,NEAR BAY --122.13,37.45,41.0,3233.0,540.0,1251.0,506.0,6.6354,500001.0,NEAR BAY --122.13,37.44,43.0,3004.0,440.0,1088.0,427.0,9.1508,500001.0,NEAR BAY --122.13,37.44,38.0,2835.0,447.0,1148.0,446.0,5.9277,446600.0,NEAR BAY --122.15,37.46,39.0,906.0,109.0,353.0,112.0,10.3942,500001.0,NEAR BAY --122.16,37.45,52.0,1135.0,219.0,441.0,200.0,7.5418,492000.0,NEAR BAY --122.15,37.46,52.0,1803.0,257.0,683.0,259.0,10.9508,500001.0,NEAR BAY --122.14,37.45,52.0,3841.0,537.0,1391.0,540.0,7.8647,500001.0,NEAR BAY --122.15,37.45,52.0,2117.0,353.0,734.0,328.0,6.767,500001.0,NEAR BAY --122.14,37.45,48.0,2074.0,297.0,700.0,279.0,8.7051,500001.0,NEAR BAY --122.15,37.45,52.0,568.0,91.0,219.0,75.0,6.1575,500001.0,NEAR BAY --122.16,37.45,47.0,4234.0,,1808.0,1093.0,4.2297,425000.0,NEAR BAY --122.16,37.45,19.0,2207.0,810.0,1304.0,775.0,2.1406,402500.0,NEAR BAY --122.16,37.45,37.0,2926.0,874.0,1363.0,815.0,4.5987,356000.0,NEAR BAY --122.16,37.44,34.0,2199.0,529.0,1193.0,532.0,4.2972,405900.0,NEAR BAY --122.15,37.44,52.0,2063.0,320.0,774.0,309.0,7.2543,500001.0,NEAR BAY --122.15,37.44,52.0,1400.0,217.0,522.0,227.0,4.9861,500001.0,NEAR BAY --122.15,37.44,52.0,1945.0,293.0,708.0,275.0,6.1655,500001.0,NEAR BAY --122.14,37.44,52.0,3117.0,468.0,1114.0,421.0,6.6756,500001.0,NEAR BAY --122.14,37.43,52.0,1944.0,308.0,696.0,293.0,8.2664,500001.0,NEAR BAY --122.14,37.43,52.0,1327.0,190.0,467.0,189.0,12.5902,500001.0,NEAR BAY --122.14,37.43,52.0,1383.0,227.0,551.0,249.0,6.5829,500001.0,NEAR BAY --122.15,37.43,47.0,2600.0,490.0,1149.0,465.0,5.0203,476300.0,NEAR BAY --122.15,37.42,44.0,3558.0,839.0,1779.0,832.0,3.9243,404800.0,NEAR BAY --122.14,37.43,18.0,2060.0,563.0,1144.0,600.0,4.0686,378600.0,NEAR BAY --122.15,37.43,20.0,11709.0,,7604.0,3589.0,1.9045,375000.0,NEAR BAY --122.16,37.42,34.0,4448.0,610.0,2571.0,581.0,11.0492,500001.0,NEAR OCEAN --122.15,37.41,15.0,2577.0,360.0,979.0,364.0,10.476,500001.0,NEAR BAY --122.17,37.43,24.0,3924.0,1142.0,7174.0,950.0,4.0972,387500.0,NEAR OCEAN --122.15,37.41,29.0,473.0,103.0,359.0,87.0,7.0309,475000.0,NEAR BAY --122.18,37.41,21.0,1034.0,117.0,323.0,117.0,10.7237,500001.0,NEAR OCEAN --122.13,37.39,27.0,3385.0,427.0,1248.0,409.0,12.0372,500001.0,NEAR BAY --122.12,37.37,37.0,1446.0,181.0,549.0,190.0,10.7355,500001.0,NEAR BAY --122.11,37.36,34.0,1575.0,183.0,511.0,180.0,13.1867,500001.0,NEAR BAY --122.13,37.37,30.0,2139.0,260.0,742.0,242.0,11.806,500001.0,NEAR BAY --122.14,37.38,26.0,2859.0,343.0,951.0,336.0,10.4277,500001.0,NEAR BAY --122.1,37.36,32.0,1433.0,199.0,498.0,201.0,9.3586,500001.0,NEAR BAY --122.1,37.36,35.0,2063.0,266.0,676.0,252.0,8.5294,500001.0,NEAR BAY --122.09,37.35,37.0,1795.0,285.0,791.0,261.0,7.5794,500001.0,NEAR BAY --122.09,37.35,30.0,1502.0,186.0,501.0,180.0,10.0259,500001.0,NEAR BAY --122.14,37.36,23.0,11294.0,1377.0,3840.0,1367.0,12.1387,500001.0,NEAR BAY --122.15,37.35,23.0,3814.0,485.0,1344.0,464.0,12.9792,500001.0,NEAR BAY --122.11,37.31,7.0,189.0,26.0,84.0,29.0,13.8093,500001.0,<1H OCEAN --122.12,37.29,11.0,436.0,70.0,212.0,75.0,8.6196,500001.0,<1H OCEAN --122.12,37.28,21.0,349.0,64.0,149.0,56.0,5.8691,360000.0,<1H OCEAN --122.08,37.24,21.0,427.0,63.0,182.0,70.0,11.3283,500001.0,<1H OCEAN --122.01,37.18,37.0,3852.0,652.0,1534.0,567.0,5.8596,318700.0,<1H OCEAN --121.98,37.16,42.0,2533.0,433.0,957.0,398.0,5.3468,279900.0,<1H OCEAN --121.9,37.16,43.0,1529.0,311.0,570.0,250.0,5.2366,293300.0,<1H OCEAN --121.93,37.13,37.0,1150.0,203.0,511.0,179.0,5.7415,398500.0,<1H OCEAN --121.88,37.24,24.0,4420.0,996.0,2981.0,975.0,3.506,226400.0,<1H OCEAN --121.9,37.24,24.0,7521.0,1364.0,3970.0,1318.0,4.4004,255800.0,<1H OCEAN --121.86,37.22,18.0,7245.0,1029.0,2893.0,1049.0,6.9508,361200.0,<1H OCEAN --121.86,37.23,24.0,4337.0,670.0,1936.0,652.0,5.8904,271400.0,<1H OCEAN --121.85,37.22,21.0,6203.0,798.0,2494.0,800.0,7.7201,362700.0,<1H OCEAN --121.89,37.21,14.0,5636.0,697.0,2281.0,680.0,8.4262,459200.0,<1H OCEAN --121.84,37.18,6.0,9176.0,1201.0,3637.0,1138.0,8.3837,473400.0,<1H OCEAN --121.87,37.22,17.0,2825.0,365.0,1052.0,345.0,8.0595,485000.0,<1H OCEAN --121.87,37.22,26.0,1921.0,250.0,725.0,253.0,7.6933,405900.0,<1H OCEAN --121.86,37.21,23.0,2552.0,305.0,916.0,316.0,9.1974,500001.0,<1H OCEAN --121.87,37.21,18.0,1080.0,122.0,382.0,121.0,9.08,500001.0,<1H OCEAN --121.83,37.23,7.0,5389.0,903.0,2232.0,825.0,6.6659,500001.0,<1H OCEAN --121.8,37.19,45.0,1797.0,303.0,870.0,281.0,4.5417,434500.0,<1H OCEAN --121.84,37.21,15.0,5468.0,676.0,2221.0,675.0,8.3792,418300.0,<1H OCEAN --121.83,37.2,6.0,3694.0,574.0,1554.0,527.0,6.8333,348000.0,<1H OCEAN --121.83,37.21,14.0,2714.0,361.0,1259.0,375.0,7.7738,387500.0,<1H OCEAN --121.89,37.23,16.0,3574.0,466.0,1503.0,487.0,8.1988,355900.0,<1H OCEAN --121.89,37.23,20.0,7754.0,976.0,3094.0,941.0,8.19,361600.0,<1H OCEAN --121.88,37.24,14.0,7174.0,950.0,2782.0,899.0,8.3065,394200.0,<1H OCEAN --121.87,37.23,19.0,7357.0,963.0,3018.0,981.0,6.9473,361400.0,<1H OCEAN --121.87,37.27,16.0,3298.0,451.0,1542.0,423.0,6.7064,305600.0,<1H OCEAN --121.87,37.27,25.0,1730.0,226.0,721.0,243.0,7.5845,279300.0,<1H OCEAN --121.86,37.27,19.0,1852.0,268.0,866.0,272.0,5.6139,279500.0,<1H OCEAN --121.87,37.27,18.0,3561.0,560.0,1753.0,553.0,5.0292,269400.0,<1H OCEAN --121.86,37.27,17.0,4393.0,709.0,2292.0,692.0,5.6876,246500.0,<1H OCEAN --121.77,37.23,15.0,4713.0,769.0,2519.0,778.0,5.6958,253800.0,<1H OCEAN --121.77,37.22,16.0,1617.0,306.0,667.0,264.0,4.5221,191100.0,<1H OCEAN --121.77,37.22,16.0,3992.0,540.0,2097.0,555.0,6.7287,299300.0,<1H OCEAN --121.76,37.23,16.0,4274.0,715.0,2240.0,704.0,5.4218,233900.0,<1H OCEAN --121.84,37.25,25.0,5939.0,989.0,3275.0,954.0,5.6488,234600.0,<1H OCEAN --121.83,37.23,22.0,5507.0,841.0,2785.0,848.0,6.0889,245200.0,<1H OCEAN --121.84,37.24,18.0,3574.0,504.0,1803.0,536.0,6.7836,274100.0,<1H OCEAN --121.84,37.24,24.0,7991.0,1286.0,4017.0,1213.0,5.4741,238800.0,<1H OCEAN --121.85,37.24,17.0,6425.0,1268.0,3934.0,1238.0,5.1228,237600.0,<1H OCEAN --121.86,37.25,16.0,6958.0,1300.0,2965.0,1217.0,4.2885,262400.0,<1H OCEAN --121.83,37.28,17.0,3057.0,606.0,2030.0,602.0,5.2166,230900.0,<1H OCEAN --121.81,37.27,20.0,3244.0,520.0,1769.0,469.0,5.9214,224000.0,<1H OCEAN --121.8,37.27,17.0,3912.0,737.0,2693.0,746.0,5.0772,221500.0,<1H OCEAN --121.82,37.27,16.0,2030.0,321.0,1343.0,365.0,6.3566,279100.0,<1H OCEAN --121.81,37.27,22.0,2996.0,695.0,2169.0,607.0,4.3438,209700.0,<1H OCEAN --121.8,37.26,26.0,1394.0,238.0,990.0,315.0,4.8862,195000.0,<1H OCEAN --121.8,37.26,18.0,3631.0,947.0,2357.0,757.0,2.875,184400.0,<1H OCEAN --121.85,37.27,17.0,1957.0,261.0,863.0,269.0,7.3339,294200.0,<1H OCEAN --121.84,37.27,9.0,3624.0,812.0,1856.0,721.0,4.2083,198400.0,<1H OCEAN --121.84,37.27,17.0,2795.0,482.0,1904.0,506.0,5.0186,250800.0,<1H OCEAN --121.83,37.27,8.0,4454.0,1058.0,2595.0,1027.0,4.5615,282600.0,<1H OCEAN --121.84,37.27,16.0,2429.0,387.0,1293.0,363.0,5.5,253200.0,<1H OCEAN --121.83,37.27,14.0,2855.0,380.0,1420.0,383.0,6.6712,311500.0,<1H OCEAN --121.82,37.26,10.0,3030.0,574.0,1623.0,589.0,5.1356,218700.0,<1H OCEAN --121.83,37.26,11.0,2394.0,403.0,1393.0,409.0,5.5875,259300.0,<1H OCEAN --121.81,37.26,14.0,3379.0,683.0,1465.0,620.0,4.0547,236200.0,<1H OCEAN --121.81,37.26,16.0,1911.0,327.0,1158.0,332.0,5.9359,249500.0,<1H OCEAN --121.81,37.25,20.0,3398.0,771.0,1231.0,744.0,2.0288,350000.0,<1H OCEAN --121.81,37.25,12.0,2070.0,587.0,1216.0,532.0,4.1926,244500.0,<1H OCEAN --121.83,37.26,7.0,3609.0,751.0,1739.0,682.0,4.5033,213100.0,<1H OCEAN --121.82,37.25,16.0,2650.0,600.0,1969.0,586.0,3.9461,194300.0,<1H OCEAN --121.83,37.25,17.0,2332.0,637.0,1636.0,623.0,3.1932,123400.0,<1H OCEAN --121.87,37.26,17.0,1051.0,172.0,446.0,173.0,5.6652,234500.0,<1H OCEAN --121.86,37.26,16.0,2814.0,485.0,1305.0,465.0,5.5121,224100.0,<1H OCEAN --121.87,37.26,24.0,2383.0,343.0,1146.0,341.0,5.6223,265700.0,<1H OCEAN --121.85,37.26,16.0,1982.0,280.0,1030.0,297.0,6.4339,289200.0,<1H OCEAN --121.85,37.26,16.0,2312.0,303.0,1158.0,295.0,7.4323,311800.0,<1H OCEAN --121.85,37.26,16.0,1816.0,241.0,793.0,234.0,6.8194,291200.0,<1H OCEAN --121.84,37.26,5.0,1808.0,340.0,825.0,339.0,5.0509,184800.0,<1H OCEAN --121.83,37.26,15.0,3243.0,551.0,1752.0,551.0,5.5849,257400.0,<1H OCEAN --121.84,37.25,17.0,2363.0,473.0,1369.0,442.0,4.8355,141600.0,<1H OCEAN --121.87,37.25,4.0,2498.0,775.0,1213.0,631.0,3.7844,183900.0,<1H OCEAN --121.85,37.25,20.0,3773.0,624.0,1965.0,607.0,5.4939,241200.0,<1H OCEAN --121.83,37.24,23.0,2543.0,388.0,1297.0,385.0,5.9164,237400.0,<1H OCEAN --121.81,37.24,21.0,3250.0,610.0,1978.0,568.0,4.5,234400.0,<1H OCEAN --121.82,37.24,20.0,3671.0,567.0,1944.0,589.0,6.0538,241000.0,<1H OCEAN --121.82,37.25,24.0,3344.0,531.0,1768.0,541.0,5.8305,245600.0,<1H OCEAN --121.82,37.25,25.0,4021.0,634.0,2178.0,650.0,5.1663,241200.0,<1H OCEAN --121.81,37.25,5.0,1975.0,520.0,861.0,440.0,4.4565,159000.0,<1H OCEAN --121.81,37.25,25.0,4096.0,623.0,2128.0,618.0,6.2957,251800.0,<1H OCEAN --121.82,37.23,23.0,4487.0,584.0,2024.0,580.0,7.5218,291500.0,<1H OCEAN --121.82,37.23,25.0,2349.0,394.0,1266.0,383.0,4.9688,233100.0,<1H OCEAN --121.81,37.23,16.0,1674.0,281.0,850.0,254.0,5.3157,253300.0,<1H OCEAN --121.81,37.23,19.0,2635.0,427.0,1497.0,410.0,6.3178,248000.0,<1H OCEAN --121.81,37.23,24.0,2413.0,369.0,1237.0,381.0,6.4328,257200.0,<1H OCEAN --121.81,37.23,17.0,2319.0,324.0,1076.0,338.0,6.4664,278300.0,<1H OCEAN --121.78,37.24,17.0,2123.0,341.0,1067.0,339.0,6.0062,262700.0,<1H OCEAN --121.78,37.22,18.0,2127.0,387.0,1547.0,402.0,5.0958,217100.0,<1H OCEAN --121.78,37.23,18.0,1747.0,317.0,1055.0,285.0,5.898,229100.0,<1H OCEAN --121.79,37.23,16.0,2240.0,300.0,1221.0,305.0,6.0198,289600.0,<1H OCEAN --121.79,37.23,17.0,2281.0,359.0,1226.0,394.0,5.4193,259500.0,<1H OCEAN --121.8,37.23,18.0,3179.0,526.0,1663.0,507.0,5.9225,265800.0,<1H OCEAN --121.8,37.23,18.0,2581.0,358.0,1284.0,377.0,6.7385,272400.0,<1H OCEAN --121.8,37.27,10.0,3301.0,593.0,2190.0,575.0,6.223,260700.0,<1H OCEAN --121.8,37.26,16.0,1868.0,285.0,995.0,284.0,5.9053,260500.0,<1H OCEAN --121.76,37.26,17.0,250.0,52.0,141.0,51.0,4.6458,500001.0,<1H OCEAN --121.77,37.24,12.0,10236.0,1878.0,5674.0,1816.0,4.747,261100.0,<1H OCEAN --121.7,37.2,15.0,531.0,154.0,469.0,155.0,4.65,385700.0,<1H OCEAN --121.74,37.19,11.0,1290.0,197.0,881.0,191.0,4.2039,500001.0,<1H OCEAN --121.72,37.16,21.0,1062.0,179.0,631.0,185.0,4.7386,394100.0,<1H OCEAN --121.75,37.11,18.0,3167.0,,1414.0,482.0,6.8773,467700.0,<1H OCEAN --121.68,37.0,19.0,3754.0,588.0,1692.0,550.0,6.7644,412600.0,<1H OCEAN --121.61,37.15,16.0,5498.0,729.0,2051.0,694.0,7.8601,416300.0,<1H OCEAN --121.6,37.13,14.0,9483.0,1361.0,4108.0,1281.0,7.5,344500.0,<1H OCEAN --121.64,37.15,13.0,4780.0,798.0,2795.0,764.0,6.1684,288100.0,<1H OCEAN --121.64,37.14,14.0,5487.0,1024.0,2823.0,979.0,4.175,229800.0,<1H OCEAN --121.63,37.12,17.0,1830.0,398.0,1110.0,388.0,2.4821,248200.0,<1H OCEAN --121.69,37.14,12.0,4077.0,590.0,1618.0,540.0,5.2951,386200.0,<1H OCEAN --121.66,37.13,20.0,4477.0,924.0,2656.0,871.0,3.8788,226900.0,<1H OCEAN --121.65,37.12,14.0,4721.0,999.0,2648.0,888.0,3.6895,239300.0,<1H OCEAN --121.66,37.11,19.0,3785.0,611.0,2198.0,610.0,5.1514,436700.0,<1H OCEAN --121.65,37.11,14.0,6006.0,914.0,2915.0,898.0,5.9356,321700.0,<1H OCEAN --121.63,37.1,14.0,5034.0,797.0,2124.0,790.0,4.9028,335000.0,<1H OCEAN --121.67,37.13,19.0,3269.0,483.0,1383.0,452.0,5.6205,300800.0,<1H OCEAN --121.56,37.08,17.0,6725.0,1051.0,3439.0,1027.0,6.4313,393100.0,<1H OCEAN --121.61,37.06,21.0,5322.0,908.0,3011.0,895.0,5.5936,386800.0,<1H OCEAN --121.6,37.09,24.0,1511.0,318.0,1052.0,292.0,3.625,350000.0,<1H OCEAN --121.62,37.09,37.0,1593.0,303.0,1030.0,287.0,3.9306,260700.0,<1H OCEAN --121.58,37.01,44.0,3192.0,565.0,1439.0,568.0,4.3693,234000.0,INLAND --121.57,37.0,18.0,7241.0,1225.0,4168.0,1138.0,4.5714,260300.0,INLAND --121.57,36.98,14.0,5231.0,817.0,2634.0,799.0,4.9702,279800.0,INLAND --121.58,37.01,15.0,2873.0,547.0,1582.0,567.0,5.1519,264700.0,INLAND --121.59,36.97,16.0,865.0,123.0,403.0,130.0,5.7396,308700.0,INLAND --121.59,37.01,16.0,6637.0,1171.0,3575.0,1162.0,4.3227,251500.0,INLAND --121.61,37.03,5.0,6529.0,1010.0,3071.0,977.0,5.6754,298500.0,<1H OCEAN --121.58,37.03,16.0,3120.0,685.0,2383.0,681.0,3.5551,198600.0,INLAND --121.58,37.02,27.0,2303.0,471.0,1447.0,467.0,3.2019,203600.0,INLAND --121.59,37.02,14.0,6355.0,1279.0,3704.0,1224.0,4.4233,228600.0,INLAND --121.57,37.02,17.0,2889.0,624.0,2681.0,608.0,2.9417,178000.0,INLAND --121.57,37.01,44.0,1448.0,393.0,1066.0,357.0,2.0625,170300.0,INLAND --121.56,37.0,20.0,3976.0,953.0,3866.0,950.0,2.5387,160100.0,INLAND --121.54,36.99,27.0,2361.0,449.0,1782.0,397.0,3.2614,305000.0,INLAND --121.51,37.02,19.0,2372.0,394.0,1142.0,365.0,4.0238,374600.0,INLAND --121.74,37.35,34.0,440.0,90.0,217.0,93.0,5.2327,500001.0,<1H OCEAN --121.55,37.37,39.0,759.0,141.0,252.0,106.0,3.6964,262500.0,INLAND --121.59,37.19,52.0,220.0,32.0,55.0,26.0,15.0001,131300.0,<1H OCEAN --121.37,37.06,25.0,474.0,92.0,300.0,104.0,3.8062,340900.0,INLAND --122.03,37.18,10.0,212.0,38.0,78.0,21.0,6.0622,390000.0,<1H OCEAN --121.96,37.13,26.0,50.0,5.0,17.0,4.0,15.0001,400000.0,<1H OCEAN --121.98,37.14,37.0,74.0,19.0,63.0,17.0,9.5908,350000.0,<1H OCEAN --122.0,37.0,16.0,32.0,4.0,36.0,5.0,2.625,137500.0,NEAR OCEAN --122.01,36.99,29.0,227.0,45.0,112.0,41.0,6.4469,271400.0,NEAR OCEAN --122.01,36.99,28.0,1321.0,240.0,652.0,239.0,4.9808,263100.0,NEAR OCEAN --121.99,36.99,29.0,3119.0,507.0,1476.0,487.0,5.8123,281500.0,NEAR OCEAN --121.99,36.98,40.0,1104.0,224.0,669.0,215.0,4.3409,256300.0,NEAR OCEAN --122.0,36.98,43.0,1636.0,324.0,792.0,325.0,3.5562,239200.0,NEAR OCEAN --122.01,36.99,41.0,2548.0,508.0,1290.0,488.0,3.6902,233000.0,NEAR OCEAN --122.01,36.98,47.0,1250.0,249.0,607.0,234.0,4.0417,265300.0,NEAR OCEAN --122.02,36.99,30.0,2156.0,487.0,1023.0,458.0,2.7875,245000.0,NEAR OCEAN --122.02,36.98,21.0,1484.0,394.0,984.0,380.0,2.1734,187500.0,NEAR OCEAN --122.02,36.98,44.0,1153.0,238.0,657.0,219.0,3.2368,212500.0,NEAR OCEAN --122.04,36.98,35.0,2155.0,355.0,866.0,335.0,5.6188,404700.0,NEAR OCEAN --122.04,36.98,33.0,797.0,125.0,385.0,133.0,6.7974,367600.0,NEAR OCEAN --122.04,36.97,30.0,2695.0,424.0,1098.0,420.0,5.3972,362300.0,NEAR OCEAN --122.06,37.0,14.0,1547.0,374.0,4731.0,348.0,2.4732,131300.0,NEAR OCEAN --122.05,36.97,20.0,2428.0,473.0,1145.0,454.0,3.6797,263800.0,NEAR OCEAN --122.05,36.97,16.0,3363.0,611.0,1603.0,556.0,4.2542,294100.0,NEAR OCEAN --122.06,36.98,15.0,3385.0,669.0,1571.0,615.0,4.2254,320900.0,NEAR OCEAN --122.04,36.98,51.0,1076.0,206.0,495.0,201.0,2.9286,258300.0,NEAR OCEAN --122.04,36.97,45.0,1302.0,245.0,621.0,258.0,5.1806,266400.0,NEAR OCEAN --122.04,36.97,52.0,1901.0,335.0,955.0,301.0,3.8259,253100.0,NEAR OCEAN --122.04,36.97,49.0,792.0,136.0,331.0,137.0,5.2128,238600.0,NEAR OCEAN --122.04,36.96,44.0,1294.0,269.0,645.0,259.0,3.2437,223900.0,NEAR OCEAN --122.03,36.98,37.0,2817.0,716.0,1341.0,662.0,2.1553,255400.0,NEAR OCEAN --122.01,36.98,47.0,2403.0,517.0,1144.0,455.0,2.5954,229400.0,NEAR OCEAN --122.02,36.98,35.0,1053.0,263.0,552.0,237.0,2.7125,217500.0,NEAR OCEAN --122.02,36.98,21.0,607.0,155.0,226.0,136.0,1.9063,166700.0,NEAR OCEAN --122.02,36.97,29.0,2568.0,747.0,1743.0,659.0,1.9286,195300.0,NEAR OCEAN --122.01,36.97,43.0,2162.0,509.0,1208.0,464.0,2.5417,260900.0,NEAR OCEAN --122.01,36.97,52.0,920.0,202.0,525.0,264.0,2.9444,232800.0,NEAR OCEAN --122.01,36.97,35.0,1605.0,392.0,743.0,382.0,2.5368,240000.0,NEAR OCEAN --122.0,36.98,20.0,2502.0,454.0,981.0,399.0,4.3,275000.0,NEAR OCEAN --122.01,36.98,27.0,2820.0,730.0,1511.0,745.0,2.589,242400.0,NEAR OCEAN --122.0,36.97,30.0,1029.0,242.0,753.0,249.0,3.1205,240500.0,NEAR OCEAN --122.0,36.93,51.0,1616.0,374.0,608.0,302.0,3.1932,400000.0,NEAR OCEAN --122.01,36.95,52.0,1217.0,325.0,508.0,237.0,2.0547,326700.0,NEAR OCEAN --122.03,36.97,51.0,924.0,232.0,488.0,228.0,2.1964,234400.0,NEAR OCEAN --122.03,36.97,36.0,337.0,69.0,223.0,68.0,3.2404,225000.0,NEAR OCEAN --122.03,36.97,52.0,403.0,72.0,200.0,73.0,1.6923,262500.0,NEAR OCEAN --122.04,36.97,40.0,1193.0,227.0,570.0,204.0,4.4659,237500.0,NEAR OCEAN --122.03,36.96,18.0,2677.0,785.0,1391.0,656.0,2.5067,232600.0,NEAR OCEAN --122.02,36.97,44.0,594.0,169.0,325.0,139.0,1.1552,250000.0,NEAR OCEAN --122.02,36.97,39.0,2124.0,661.0,1365.0,606.0,1.6642,281300.0,NEAR OCEAN --122.02,36.96,52.0,775.0,305.0,1054.0,305.0,2.0172,112500.0,NEAR OCEAN --122.03,36.96,40.0,584.0,126.0,316.0,139.0,3.5938,243500.0,NEAR OCEAN --122.03,36.96,28.0,1607.0,421.0,926.0,385.0,2.425,216100.0,NEAR OCEAN --122.04,36.96,32.0,1438.0,306.0,802.0,293.0,4.1964,202000.0,NEAR OCEAN --122.04,36.96,42.0,538.0,107.0,200.0,104.0,2.1667,196400.0,NEAR OCEAN --122.04,36.96,42.0,1149.0,264.0,703.0,232.0,2.5865,206400.0,NEAR OCEAN --122.03,36.96,32.0,2182.0,406.0,1122.0,370.0,3.52,284200.0,NEAR OCEAN --122.04,36.95,36.0,1862.0,364.0,1080.0,364.0,4.4567,263800.0,NEAR OCEAN --122.01,36.91,19.0,691.0,191.0,324.0,167.0,3.1312,388500.0,NEAR OCEAN --122.05,36.96,30.0,971.0,185.0,644.0,173.0,4.2045,226500.0,NEAR OCEAN --122.06,36.96,52.0,65.0,17.0,24.0,10.0,4.5,258300.0,NEAR OCEAN --122.05,36.87,18.0,2232.0,440.0,1091.0,458.0,3.8269,276000.0,NEAR OCEAN --122.04,36.95,27.0,1987.0,374.0,961.0,343.0,3.9667,265800.0,NEAR OCEAN --122.04,37.0,52.0,3365.0,644.0,796.0,333.0,2.9712,116600.0,NEAR OCEAN --121.75,36.91,32.0,1461.0,422.0,1494.0,416.0,2.8056,173200.0,<1H OCEAN --121.74,36.92,29.0,1210.0,281.0,863.0,262.0,3.1062,156000.0,<1H OCEAN --121.74,36.92,17.0,2648.0,589.0,1193.0,540.0,2.4461,151700.0,<1H OCEAN --121.74,36.92,14.0,3355.0,695.0,1350.0,697.0,2.6506,164600.0,<1H OCEAN --121.75,36.93,24.0,4026.0,881.0,2264.0,863.0,3.1327,218100.0,<1H OCEAN --121.75,36.92,48.0,1801.0,353.0,1071.0,361.0,3.6,194500.0,<1H OCEAN --121.75,36.92,46.0,1362.0,321.0,1068.0,305.0,2.4615,177800.0,<1H OCEAN --121.76,36.92,36.0,2096.0,409.0,1454.0,394.0,3.2216,238300.0,<1H OCEAN --121.76,36.92,46.0,947.0,257.0,1120.0,264.0,3.4125,160700.0,<1H OCEAN --121.75,36.91,52.0,1211.0,447.0,1102.0,392.0,1.6875,161400.0,<1H OCEAN --121.76,36.91,23.0,1276.0,437.0,1359.0,376.0,1.9609,155000.0,<1H OCEAN --121.75,36.91,42.0,1368.0,468.0,2312.0,484.0,2.5599,151400.0,<1H OCEAN --121.77,36.91,8.0,2715.0,750.0,2580.0,718.0,2.8348,162000.0,<1H OCEAN --121.76,36.9,44.0,919.0,309.0,1321.0,301.0,2.0775,121400.0,<1H OCEAN --121.77,36.93,20.0,2587.0,547.0,1534.0,540.0,2.4375,190400.0,<1H OCEAN --121.77,36.93,24.0,1943.0,447.0,1844.0,461.0,3.0192,184300.0,<1H OCEAN --121.77,36.93,33.0,1406.0,317.0,1075.0,301.0,3.2813,190000.0,<1H OCEAN --121.76,36.92,20.0,2687.0,637.0,2154.0,610.0,2.6434,169700.0,<1H OCEAN --121.77,36.92,9.0,4934.0,1112.0,3198.0,977.0,3.5,194800.0,<1H OCEAN --121.79,36.93,19.0,2512.0,509.0,1856.0,537.0,3.1815,189100.0,<1H OCEAN --121.78,36.92,19.0,1515.0,253.0,975.0,266.0,4.3906,241200.0,<1H OCEAN --121.78,36.93,21.0,2794.0,662.0,2236.0,565.0,2.4053,178400.0,<1H OCEAN --121.77,36.94,18.0,1063.0,341.0,1033.0,313.0,2.0192,171300.0,<1H OCEAN --121.79,36.95,34.0,2152.0,430.0,1516.0,386.0,3.7863,192200.0,<1H OCEAN --121.8,36.94,29.0,2377.0,476.0,1669.0,499.0,2.8214,190100.0,<1H OCEAN --122.25,37.08,20.0,1201.0,282.0,601.0,234.0,2.5556,177500.0,NEAR OCEAN --122.14,37.08,18.0,2420.0,439.0,1278.0,416.0,5.2101,334000.0,NEAR OCEAN --122.11,37.05,18.0,3337.0,549.0,1449.0,519.0,5.1412,315800.0,NEAR OCEAN --122.13,36.97,27.0,991.0,194.0,543.0,155.0,4.7188,350000.0,NEAR OCEAN --122.07,37.13,26.0,1127.0,199.0,543.0,199.0,4.9792,240000.0,NEAR OCEAN --122.09,37.09,46.0,695.0,136.0,408.0,148.0,3.9408,222600.0,NEAR OCEAN --122.09,37.11,32.0,2637.0,489.0,1031.0,410.0,3.6474,231600.0,NEAR OCEAN --122.12,37.09,36.0,1397.0,289.0,661.0,243.0,4.125,239600.0,NEAR OCEAN --122.09,37.07,33.0,3581.0,734.0,1780.0,663.0,4.3429,214300.0,NEAR OCEAN --122.08,37.08,35.0,1541.0,297.0,791.0,277.0,4.425,204800.0,NEAR OCEAN --122.16,37.17,35.0,6422.0,1380.0,2755.0,1064.0,5.0165,202300.0,NEAR OCEAN --122.12,37.12,51.0,2419.0,485.0,1078.0,435.0,2.7933,206900.0,NEAR OCEAN --122.18,37.15,17.0,1457.0,289.0,591.0,235.0,5.5785,284100.0,NEAR OCEAN --122.12,37.16,32.0,1602.0,317.0,752.0,275.0,5.1664,185100.0,NEAR OCEAN --122.1,37.19,18.0,808.0,136.0,420.0,145.0,7.1831,273300.0,NEAR OCEAN --122.08,37.15,23.0,506.0,96.0,264.0,89.0,7.1366,273900.0,NEAR OCEAN --122.11,37.11,46.0,1993.0,404.0,850.0,327.0,5.208,206800.0,NEAR OCEAN --122.11,37.14,29.0,3201.0,640.0,1722.0,570.0,4.4597,204100.0,NEAR OCEAN --122.13,37.15,39.0,2854.0,613.0,1338.0,518.0,3.9423,180300.0,NEAR OCEAN --122.09,37.21,15.0,1969.0,332.0,822.0,324.0,7.8774,394900.0,<1H OCEAN --122.0,37.12,17.0,4413.0,672.0,1674.0,608.0,6.9772,383300.0,<1H OCEAN --122.04,37.12,30.0,1427.0,311.0,686.0,251.0,4.0781,154500.0,NEAR OCEAN --122.02,37.11,36.0,2066.0,401.0,942.0,344.0,5.2417,196400.0,NEAR OCEAN --122.05,37.11,39.0,1065.0,248.0,497.0,208.0,4.5972,146300.0,NEAR OCEAN --122.07,37.08,21.0,5639.0,894.0,2670.0,871.0,6.0809,270000.0,NEAR OCEAN --122.05,37.05,41.0,2422.0,502.0,915.0,366.0,4.1679,201300.0,NEAR OCEAN --122.07,37.06,31.0,1634.0,370.0,939.0,332.0,3.8625,232300.0,NEAR OCEAN --122.08,37.04,34.0,2800.0,577.0,1353.0,512.0,4.1161,220900.0,NEAR OCEAN --122.08,37.03,36.0,4682.0,899.0,2143.0,832.0,4.5096,203700.0,NEAR OCEAN --122.04,37.04,17.0,4977.0,994.0,1987.0,947.0,3.8854,312300.0,NEAR OCEAN --122.03,37.03,21.0,4650.0,733.0,2014.0,704.0,5.6233,322000.0,NEAR OCEAN --122.02,37.01,20.0,1005.0,138.0,345.0,129.0,10.0968,500001.0,NEAR OCEAN --122.03,37.0,30.0,2077.0,342.0,816.0,328.0,5.2078,440500.0,NEAR OCEAN --122.04,37.08,20.0,467.0,95.0,229.0,86.0,4.8,261500.0,NEAR OCEAN --122.02,37.09,35.0,1818.0,368.0,682.0,254.0,4.8611,240000.0,NEAR OCEAN --122.03,37.05,12.0,2010.0,422.0,784.0,407.0,3.9728,190900.0,NEAR OCEAN --122.01,37.06,19.0,4113.0,767.0,2006.0,732.0,5.1121,308100.0,NEAR OCEAN --122.0,37.08,17.0,4154.0,739.0,2149.0,693.0,5.5919,373400.0,NEAR OCEAN --121.95,37.11,21.0,2387.0,357.0,913.0,341.0,7.736,397700.0,<1H OCEAN --121.96,37.1,20.0,922.0,155.0,361.0,135.0,6.3617,331500.0,<1H OCEAN --121.87,37.1,20.0,1918.0,304.0,798.0,302.0,7.5755,402300.0,<1H OCEAN --121.9,37.1,23.0,1708.0,287.0,670.0,238.0,6.4517,356600.0,<1H OCEAN --121.93,37.04,36.0,1522.0,230.0,677.0,206.0,5.8642,363500.0,<1H OCEAN --121.96,37.03,17.0,1343.0,203.0,511.0,185.0,4.625,386400.0,NEAR OCEAN --121.93,37.05,14.0,679.0,108.0,306.0,113.0,6.4214,340600.0,<1H OCEAN --121.96,37.06,16.0,1321.0,224.0,650.0,206.0,6.3258,390000.0,NEAR OCEAN --121.99,37.05,19.0,2023.0,392.0,955.0,328.0,5.2486,353000.0,NEAR OCEAN --122.0,37.06,20.0,2403.0,376.0,1149.0,369.0,6.0621,304400.0,NEAR OCEAN --122.01,37.03,21.0,5904.0,956.0,2616.0,916.0,5.9039,355300.0,NEAR OCEAN --121.97,37.01,21.0,2073.0,357.0,1044.0,351.0,4.5682,371600.0,NEAR OCEAN --121.98,36.99,14.0,6787.0,1454.0,3416.0,1357.0,3.5943,262400.0,NEAR OCEAN --121.97,37.0,25.0,990.0,166.0,522.0,185.0,4.8269,272900.0,NEAR OCEAN --121.98,36.98,29.0,2681.0,632.0,1652.0,620.0,3.075,215800.0,NEAR OCEAN --121.99,36.99,16.0,1592.0,369.0,1039.0,351.0,3.6364,207000.0,NEAR OCEAN --121.99,36.98,25.0,2113.0,422.0,1365.0,439.0,4.6484,234600.0,NEAR OCEAN --121.99,36.98,19.0,5613.0,1321.0,3018.0,1268.0,3.1914,215600.0,NEAR OCEAN --121.98,36.97,21.0,3349.0,737.0,1952.0,718.0,3.7273,251900.0,NEAR OCEAN --121.98,36.96,20.0,3495.0,818.0,2186.0,772.0,3.1167,258300.0,NEAR OCEAN --121.99,36.97,15.0,3044.0,786.0,1306.0,693.0,2.1771,213200.0,NEAR OCEAN --122.0,36.97,39.0,2702.0,646.0,1136.0,491.0,2.8941,256700.0,NEAR OCEAN --121.99,36.96,42.0,1275.0,272.0,451.0,200.0,4.7321,422400.0,NEAR OCEAN --121.99,36.96,16.0,875.0,201.0,300.0,157.0,2.625,377300.0,NEAR OCEAN --121.96,36.88,37.0,2846.0,553.0,939.0,433.0,4.7468,294400.0,NEAR OCEAN --121.97,36.97,24.0,3665.0,870.0,1954.0,833.0,2.8036,228500.0,NEAR OCEAN --121.97,36.96,27.0,4001.0,999.0,1808.0,945.0,2.561,234600.0,NEAR OCEAN --121.98,36.96,31.0,3209.0,723.0,1489.0,692.0,3.6619,245100.0,NEAR OCEAN --121.96,36.98,16.0,4907.0,1117.0,2265.0,1048.0,2.6757,229200.0,NEAR OCEAN --121.97,36.98,17.0,2813.0,497.0,1337.0,477.0,3.7083,252400.0,NEAR OCEAN --121.97,36.97,15.0,2849.0,668.0,1546.0,582.0,2.7587,228600.0,NEAR OCEAN --121.96,36.97,23.0,4324.0,1034.0,1844.0,875.0,3.0777,263800.0,NEAR OCEAN --121.94,36.98,24.0,3010.0,562.0,1360.0,504.0,4.2006,290700.0,NEAR OCEAN --121.94,36.98,21.0,3520.0,831.0,1486.0,753.0,3.0905,264300.0,NEAR OCEAN --121.95,36.98,34.0,3745.0,958.0,1622.0,802.0,3.1546,261200.0,NEAR OCEAN --121.94,36.97,31.0,1738.0,422.0,746.0,355.0,2.5172,330800.0,NEAR OCEAN --121.93,36.99,19.0,6356.0,1100.0,2954.0,1070.0,4.7325,283500.0,NEAR OCEAN --121.94,37.0,32.0,2210.0,426.0,1082.0,396.0,4.1587,315200.0,NEAR OCEAN --121.96,37.0,20.0,3847.0,727.0,1725.0,737.0,3.3447,305200.0,NEAR OCEAN --121.96,36.99,23.0,3209.0,748.0,1423.0,666.0,2.7375,238000.0,NEAR OCEAN --121.94,36.99,11.0,4571.0,924.0,2004.0,847.0,4.2898,221700.0,NEAR OCEAN --121.86,37.0,16.0,8638.0,1392.0,3706.0,1251.0,5.503,351800.0,<1H OCEAN --121.91,36.99,23.0,5675.0,964.0,2197.0,880.0,4.8693,322300.0,NEAR OCEAN --121.91,36.98,16.0,1957.0,408.0,865.0,369.0,2.6875,233300.0,NEAR OCEAN --121.88,36.98,21.0,4117.0,752.0,2001.0,763.0,4.8953,289500.0,NEAR OCEAN --121.91,36.97,19.0,4920.0,1092.0,1807.0,922.0,3.5112,231900.0,NEAR OCEAN --121.92,36.95,29.0,3457.0,699.0,1327.0,563.0,3.6597,252300.0,NEAR OCEAN --121.88,36.96,18.0,4910.0,817.0,1971.0,773.0,5.8325,308800.0,NEAR OCEAN --121.9,36.97,21.0,3707.0,751.0,1420.0,608.0,4.4485,295200.0,NEAR OCEAN --121.88,36.96,18.0,6355.0,1100.0,2304.0,972.0,6.0281,321100.0,NEAR OCEAN --121.9,36.93,22.0,7281.0,1233.0,1849.0,832.0,5.3276,335500.0,NEAR OCEAN --121.87,36.95,7.0,3703.0,679.0,1375.0,608.0,4.9219,368400.0,NEAR OCEAN --121.84,36.94,29.0,4921.0,967.0,2319.0,823.0,4.9517,307900.0,NEAR OCEAN --121.89,36.89,18.0,2774.0,492.0,1283.0,353.0,5.368,352000.0,NEAR OCEAN --121.91,36.85,22.0,2442.0,624.0,1301.0,290.0,3.1563,300000.0,NEAR OCEAN --121.82,36.86,17.0,1573.0,272.0,142.0,55.0,2.1719,420000.0,NEAR OCEAN --121.79,37.0,28.0,2715.0,451.0,1154.0,386.0,4.8021,290400.0,<1H OCEAN --121.83,36.98,19.0,4431.0,705.0,1764.0,679.0,4.3321,298600.0,<1H OCEAN --121.82,36.95,16.0,2599.0,430.0,1417.0,445.0,4.6611,349300.0,<1H OCEAN --121.83,37.02,22.0,1903.0,350.0,760.0,322.0,2.9559,288400.0,<1H OCEAN --121.76,37.0,21.0,1416.0,269.0,779.0,200.0,3.1987,279800.0,<1H OCEAN --121.79,37.03,18.0,943.0,213.0,544.0,179.0,3.934,228600.0,<1H OCEAN --121.69,36.96,23.0,1229.0,254.0,687.0,232.0,5.1433,305600.0,<1H OCEAN --121.75,36.96,19.0,3461.0,634.0,2790.0,607.0,4.7569,190800.0,<1H OCEAN --121.75,36.95,27.0,1580.0,303.0,1066.0,306.0,4.7071,202700.0,<1H OCEAN --121.77,36.96,20.0,4228.0,816.0,2389.0,844.0,3.525,229100.0,<1H OCEAN --121.73,36.93,29.0,2931.0,535.0,1954.0,506.0,3.2917,224700.0,<1H OCEAN --121.67,36.93,22.0,569.0,132.0,542.0,125.0,2.1875,187500.0,<1H OCEAN --122.39,40.59,26.0,1279.0,438.0,1276.0,420.0,1.2404,81300.0,INLAND --122.39,40.58,44.0,1625.0,392.0,944.0,347.0,1.5972,68900.0,INLAND --122.37,40.58,25.0,2054.0,495.0,835.0,475.0,2.1538,76900.0,INLAND --122.38,40.58,34.0,1262.0,267.0,520.0,259.0,1.6983,72600.0,INLAND --122.38,40.58,36.0,1808.0,384.0,807.0,383.0,1.8375,74800.0,INLAND --122.36,40.58,17.0,1220.0,275.0,800.0,261.0,1.9181,118800.0,INLAND --122.34,40.58,7.0,4843.0,992.0,2223.0,932.0,3.0549,101700.0,INLAND --122.35,40.57,22.0,589.0,97.0,338.0,107.0,3.2639,87500.0,INLAND --122.34,40.57,24.0,1610.0,307.0,748.0,307.0,2.6591,82800.0,INLAND --122.38,40.57,43.0,2251.0,542.0,1479.0,512.0,1.5676,58200.0,INLAND --122.38,40.56,23.0,2281.0,408.0,1164.0,420.0,3.5347,101200.0,INLAND --122.38,40.54,36.0,1216.0,240.0,647.0,228.0,2.6944,75300.0,INLAND --122.37,40.54,28.0,2213.0,390.0,1096.0,378.0,3.6923,86900.0,INLAND --122.4,40.58,40.0,3895.0,929.0,1782.0,910.0,1.3329,78200.0,INLAND --122.41,40.58,35.0,2072.0,385.0,1029.0,375.0,2.8512,75600.0,INLAND --122.4,40.58,43.0,1455.0,300.0,747.0,279.0,2.7857,104200.0,INLAND --122.39,40.57,38.0,855.0,172.0,468.0,150.0,1.4091,84400.0,INLAND --122.42,40.59,24.0,5045.0,972.0,2220.0,979.0,2.6792,138900.0,INLAND --122.45,40.61,17.0,785.0,155.0,417.0,136.0,2.3289,58200.0,INLAND --122.45,40.56,17.0,1712.0,307.0,963.0,329.0,3.9375,148700.0,INLAND --122.42,40.57,10.0,7949.0,1309.0,3176.0,1163.0,4.1099,120100.0,INLAND --122.4,40.57,23.0,1321.0,259.0,749.0,222.0,1.655,90100.0,INLAND --122.4,40.62,9.0,4794.0,889.0,2162.0,865.0,3.1439,103100.0,INLAND --122.42,40.6,5.0,2614.0,433.0,1275.0,411.0,3.4464,122900.0,INLAND --122.39,40.6,22.0,2195.0,489.0,1021.0,460.0,1.4125,66500.0,INLAND --122.38,40.61,14.0,4773.0,1133.0,2101.0,1072.0,1.7227,105000.0,INLAND --122.37,40.6,7.0,5178.0,1336.0,2557.0,1283.0,2.4079,111400.0,INLAND --122.39,40.64,13.0,3604.0,704.0,1598.0,670.0,2.4141,78700.0,INLAND --122.36,40.62,11.0,3896.0,886.0,1902.0,843.0,2.2905,94200.0,INLAND --122.34,40.63,10.0,2183.0,369.0,1061.0,325.0,3.6853,151600.0,INLAND --122.33,40.6,5.0,6383.0,1206.0,2965.0,1141.0,3.8103,111100.0,INLAND --122.32,40.58,2.0,1937.0,350.0,756.0,274.0,3.0,114200.0,INLAND --122.3,40.58,19.0,1043.0,204.0,505.0,183.0,1.6033,98800.0,INLAND --122.36,40.56,20.0,3592.0,868.0,1865.0,781.0,2.0258,64800.0,INLAND --122.37,40.55,26.0,1435.0,234.0,544.0,232.0,2.6705,136700.0,INLAND --122.36,40.55,21.0,2500.0,466.0,1428.0,502.0,2.6513,113300.0,INLAND --122.46,40.52,13.0,2085.0,322.0,1077.0,333.0,5.2149,146500.0,INLAND --122.41,40.55,19.0,3753.0,761.0,1952.0,738.0,3.0954,86500.0,INLAND --122.41,40.53,28.0,1127.0,245.0,538.0,208.0,2.037,72000.0,INLAND --122.39,40.53,28.0,1427.0,304.0,692.0,285.0,2.125,80800.0,INLAND --122.39,40.52,24.0,2068.0,346.0,951.0,332.0,3.9306,85900.0,INLAND --122.4,40.51,20.0,1750.0,352.0,834.0,340.0,2.485,100600.0,INLAND --122.37,40.52,18.0,4547.0,774.0,2269.0,766.0,3.7896,98100.0,INLAND --122.35,40.56,16.0,2801.0,614.0,1695.0,563.0,1.9,81600.0,INLAND --122.35,40.56,12.0,3900.0,863.0,2145.0,864.0,1.9881,85200.0,INLAND --122.35,40.54,17.0,2280.0,453.0,976.0,434.0,2.71,97800.0,INLAND --122.36,40.57,31.0,431.0,90.0,231.0,78.0,2.184,77300.0,INLAND --122.35,40.57,18.0,2226.0,490.0,859.0,451.0,1.6821,69400.0,INLAND --122.34,40.57,26.0,2187.0,472.0,1339.0,463.0,2.0395,67900.0,INLAND --122.33,40.57,16.0,2777.0,503.0,1432.0,500.0,2.5592,75900.0,INLAND --122.32,40.57,15.0,2524.0,449.0,1374.0,467.0,3.3816,93800.0,INLAND --122.31,40.55,11.0,13714.0,2302.0,6511.0,2267.0,3.5522,100100.0,INLAND --122.34,40.51,16.0,2247.0,502.0,1206.0,463.0,1.9946,119200.0,INLAND --122.33,40.52,23.0,2801.0,507.0,1318.0,454.0,3.5081,116700.0,INLAND --122.31,40.49,18.0,4026.0,718.0,1731.0,705.0,3.35,118400.0,INLAND --122.28,40.5,21.0,2405.0,476.0,1197.0,412.0,2.6488,83100.0,INLAND --122.4,40.71,22.0,2390.0,484.0,1131.0,452.0,2.1458,84700.0,INLAND --122.43,40.66,15.0,2532.0,458.0,1183.0,450.0,2.5417,92200.0,INLAND --122.42,40.63,23.0,2248.0,489.0,1132.0,444.0,1.6429,80400.0,INLAND --122.38,40.69,21.0,1774.0,370.0,875.0,354.0,1.7422,61500.0,INLAND --122.36,40.69,32.0,3611.0,772.0,2060.0,759.0,1.7427,60600.0,INLAND --122.35,40.68,36.0,1822.0,449.0,930.0,399.0,1.3801,56600.0,INLAND --122.36,40.68,28.0,1745.0,379.0,1011.0,370.0,2.0391,59800.0,INLAND --122.38,40.67,10.0,2281.0,444.0,1274.0,438.0,2.212,65600.0,INLAND --122.36,40.66,17.0,2786.0,559.0,1528.0,517.0,2.0119,75800.0,INLAND --122.31,40.65,11.0,3664.0,647.0,1686.0,613.0,2.9338,141600.0,INLAND --122.25,40.6,16.0,2753.0,494.0,1414.0,459.0,3.8323,128300.0,INLAND --122.23,40.63,16.0,1141.0,220.0,563.0,200.0,2.3287,130700.0,INLAND --122.25,40.66,15.0,2771.0,546.0,1423.0,505.0,3.6413,108500.0,INLAND --122.32,40.71,18.0,2879.0,578.0,1399.0,586.0,2.4036,105400.0,INLAND --122.31,40.75,18.0,1411.0,330.0,494.0,227.0,1.4911,75800.0,INLAND --122.27,40.53,17.0,2255.0,416.0,1171.0,411.0,2.875,129800.0,INLAND --122.26,40.58,14.0,2539.0,466.0,1271.0,438.0,3.9762,138500.0,INLAND --122.23,40.57,18.0,1633.0,243.0,750.0,252.0,5.1585,150800.0,INLAND --122.24,40.51,23.0,2216.0,378.0,1006.0,338.0,4.559,116800.0,INLAND --122.31,40.45,10.0,1187.0,236.0,728.0,248.0,2.0469,66800.0,INLAND --122.31,40.45,25.0,2596.0,557.0,1536.0,549.0,2.0221,60400.0,INLAND --122.29,40.44,30.0,1270.0,365.0,840.0,324.0,1.3904,48100.0,INLAND --122.29,40.43,21.0,2842.0,640.0,1658.0,608.0,1.9943,59800.0,INLAND --122.29,40.47,20.0,2858.0,612.0,1422.0,589.0,1.9657,63000.0,INLAND --122.31,40.47,26.0,2723.0,551.0,1326.0,547.0,2.3594,66000.0,INLAND --122.3,40.45,32.0,1286.0,271.0,694.0,236.0,1.6579,68500.0,INLAND --122.27,40.46,14.0,2633.0,530.0,1324.0,513.0,2.2768,78600.0,INLAND --122.24,40.45,27.0,1804.0,321.0,782.0,300.0,3.5978,80600.0,INLAND --122.25,40.42,17.0,1429.0,265.0,692.0,245.0,2.8611,98700.0,INLAND --122.23,40.4,18.0,2102.0,377.0,1059.0,384.0,3.0556,95500.0,INLAND --122.27,40.39,26.0,1833.0,422.0,939.0,408.0,1.3571,59000.0,INLAND --122.29,40.39,17.0,1682.0,332.0,887.0,316.0,1.8438,76400.0,INLAND --122.33,40.48,26.0,695.0,126.0,319.0,124.0,3.2788,101600.0,INLAND --122.33,40.47,30.0,2502.0,523.0,1296.0,481.0,2.125,66100.0,INLAND --122.36,40.48,21.0,2333.0,514.0,1308.0,509.0,2.0899,74800.0,INLAND --122.37,40.45,18.0,1748.0,337.0,921.0,327.0,3.3315,85400.0,INLAND --122.42,40.44,16.0,994.0,,495.0,181.0,2.1875,76400.0,INLAND --122.43,40.47,16.0,3552.0,704.0,1801.0,658.0,2.1496,97700.0,INLAND --122.45,40.46,16.0,2734.0,501.0,1413.0,484.0,2.8085,105700.0,INLAND --122.37,40.39,12.0,3783.0,702.0,1970.0,639.0,3.3005,98500.0,INLAND --122.32,40.42,17.0,3019.0,578.0,1538.0,545.0,2.793,76500.0,INLAND --122.56,40.75,20.0,1182.0,250.0,512.0,210.0,1.7935,74500.0,INLAND --122.57,40.61,27.0,1540.0,315.0,883.0,321.0,2.8036,93400.0,INLAND --122.66,40.52,13.0,3013.0,486.0,1361.0,515.0,4.5357,171200.0,INLAND --122.76,40.4,22.0,2153.0,461.0,903.0,314.0,2.125,123200.0,INLAND --122.34,41.06,33.0,2149.0,498.0,631.0,273.0,1.8816,65800.0,INLAND --122.31,40.89,18.0,754.0,161.0,247.0,107.0,2.2583,78800.0,INLAND --122.45,40.85,20.0,2701.0,573.0,892.0,358.0,2.7736,107800.0,INLAND --122.07,40.95,14.0,2721.0,627.0,1356.0,468.0,3.0299,73200.0,INLAND --121.89,40.97,26.0,1183.0,276.0,513.0,206.0,2.225,52000.0,INLAND --121.86,40.77,17.0,2816.0,639.0,1027.0,406.0,2.503,65600.0,INLAND --121.83,40.69,14.0,821.0,170.0,477.0,129.0,3.15,87500.0,INLAND --122.08,40.64,14.0,3099.0,519.0,1447.0,494.0,4.0132,141200.0,INLAND --122.06,40.55,17.0,3057.0,577.0,1497.0,556.0,3.5189,101000.0,INLAND --121.92,40.52,13.0,4581.0,881.0,1799.0,734.0,2.2993,99500.0,INLAND --121.67,40.61,8.0,2411.0,463.0,786.0,297.0,2.1513,80400.0,INLAND --121.55,40.48,14.0,2413.0,524.0,805.0,329.0,2.7857,77400.0,INLAND --121.64,40.9,24.0,2237.0,434.0,834.0,318.0,1.7538,90300.0,INLAND --121.67,40.87,31.0,1581.0,299.0,776.0,287.0,2.9063,77800.0,INLAND --121.65,40.88,15.0,2909.0,549.0,1537.0,522.0,3.0179,61300.0,INLAND --121.67,40.89,17.0,2548.0,537.0,1118.0,461.0,2.267,57800.0,INLAND --121.63,40.92,23.0,1922.0,411.0,872.0,350.0,2.2337,64500.0,INLAND --121.41,40.82,16.0,2668.0,516.0,915.0,362.0,2.3393,90300.0,INLAND --121.47,41.12,22.0,2737.0,512.0,1168.0,442.0,2.83,88700.0,INLAND --121.45,41.04,33.0,2029.0,378.0,936.0,343.0,2.67,77500.0,INLAND --120.08,39.61,32.0,1404.0,247.0,544.0,201.0,2.7778,72900.0,INLAND --120.23,39.56,14.0,1781.0,346.0,734.0,287.0,2.46,93000.0,INLAND --120.48,39.66,32.0,1516.0,289.0,304.0,131.0,1.8839,71000.0,INLAND --120.24,39.67,40.0,690.0,129.0,305.0,110.0,2.3625,62500.0,INLAND --120.73,39.63,17.0,1791.0,356.0,432.0,190.0,3.8826,92400.0,INLAND --120.24,39.67,52.0,296.0,63.0,143.0,56.0,3.625,68600.0,INLAND --120.92,39.56,48.0,1276.0,292.0,358.0,145.0,1.875,66600.0,INLAND --120.51,39.52,26.0,2286.0,444.0,498.0,216.0,2.065,96100.0,INLAND --121.62,41.78,40.0,3272.0,663.0,1467.0,553.0,1.7885,43500.0,INLAND --121.93,41.86,28.0,4225.0,835.0,1908.0,686.0,1.74,44000.0,INLAND --122.33,41.86,19.0,3599.0,695.0,1572.0,601.0,2.234,58600.0,INLAND --122.53,41.81,21.0,2400.0,485.0,1109.0,443.0,1.7639,55400.0,INLAND --122.26,41.66,17.0,1885.0,350.0,953.0,328.0,2.1607,61400.0,INLAND --122.64,41.95,18.0,1867.0,424.0,802.0,314.0,1.8242,53500.0,INLAND --123.26,41.86,25.0,2344.0,532.0,1117.0,424.0,2.7222,64600.0,INLAND --123.38,41.8,25.0,1941.0,477.0,1000.0,390.0,2.2976,54400.0,INLAND --123.41,41.6,23.0,1654.0,369.0,669.0,273.0,1.965,65400.0,INLAND --122.92,41.7,23.0,4017.0,792.0,1634.0,619.0,2.3571,62000.0,INLAND --122.56,41.69,21.0,2010.0,360.0,947.0,306.0,2.4107,70100.0,INLAND --122.61,41.74,15.0,4206.0,922.0,1863.0,869.0,2.0591,55700.0,INLAND --122.64,41.74,33.0,2644.0,459.0,1113.0,483.0,3.3095,81300.0,INLAND --122.64,41.73,36.0,3319.0,664.0,1492.0,631.0,1.8694,71200.0,INLAND --122.64,41.73,50.0,1525.0,308.0,661.0,285.0,2.2206,63200.0,INLAND --122.65,41.72,15.0,3643.0,801.0,1784.0,743.0,1.8533,57500.0,INLAND --122.73,41.76,19.0,2200.0,414.0,950.0,367.0,2.5357,94200.0,INLAND --122.64,41.63,19.0,2722.0,479.0,1108.0,430.0,3.1062,100000.0,INLAND --122.56,41.53,29.0,1729.0,355.0,848.0,328.0,2.2024,60900.0,INLAND --122.93,41.48,20.0,4288.0,789.0,1800.0,660.0,2.723,79600.0,INLAND --122.9,41.46,31.0,1277.0,263.0,600.0,241.0,1.7292,61700.0,INLAND --123.08,41.26,34.0,2773.0,679.0,1066.0,424.0,1.6757,63300.0,INLAND --122.38,41.54,14.0,4453.0,797.0,1817.0,685.0,2.7468,81100.0,INLAND --122.49,41.43,19.0,3689.0,644.0,1544.0,566.0,3.125,76100.0,INLAND --122.38,41.43,45.0,2245.0,448.0,1155.0,421.0,1.6509,46200.0,INLAND --122.37,41.41,28.0,1729.0,419.0,929.0,370.0,1.27,53100.0,INLAND --122.39,41.41,23.0,910.0,199.0,370.0,169.0,1.7448,80100.0,INLAND --122.32,41.31,45.0,1393.0,294.0,521.0,249.0,1.1915,71900.0,INLAND --122.3,41.32,13.0,2300.0,513.0,1151.0,488.0,2.1571,81500.0,INLAND --122.3,41.31,29.0,4059.0,787.0,1700.0,702.0,2.4526,97100.0,INLAND --122.28,41.38,15.0,5266.0,1031.0,2147.0,885.0,2.8036,110100.0,INLAND --122.45,41.28,15.0,2740.0,503.0,1188.0,445.0,3.4519,128800.0,INLAND --122.34,41.21,26.0,178.0,40.0,55.0,25.0,2.0375,57500.0,INLAND --122.27,41.23,40.0,1958.0,386.0,725.0,331.0,2.1898,65500.0,INLAND --122.27,41.2,52.0,4513.0,985.0,1926.0,815.0,1.5923,56000.0,INLAND --121.76,41.5,31.0,602.0,153.0,112.0,47.0,1.0667,34200.0,INLAND --122.09,41.32,52.0,4019.0,824.0,1728.0,706.0,2.2462,62900.0,INLAND --122.22,38.12,15.0,14125.0,2344.0,6456.0,2147.0,5.1014,179500.0,NEAR BAY --122.19,38.13,5.0,7854.0,1446.0,4361.0,1395.0,4.9504,214800.0,NEAR BAY --122.21,38.11,31.0,2766.0,604.0,1441.0,552.0,3.1768,131000.0,NEAR BAY --122.21,38.11,35.0,2122.0,400.0,1189.0,408.0,3.0962,124600.0,NEAR BAY --122.21,38.1,36.0,3018.0,557.0,1445.0,556.0,3.8029,129900.0,NEAR BAY --122.22,38.11,43.0,1939.0,353.0,968.0,392.0,3.1848,112700.0,NEAR BAY --122.22,38.1,38.0,931.0,181.0,566.0,207.0,3.0221,93300.0,NEAR BAY --122.22,38.1,40.0,2549.0,478.0,1275.0,494.0,2.9469,111600.0,NEAR BAY --122.22,38.1,44.0,2256.0,451.0,1057.0,426.0,3.1204,110800.0,NEAR BAY --122.22,38.1,44.0,3013.0,563.0,1353.0,512.0,3.4559,111900.0,NEAR BAY --122.22,38.09,47.0,2161.0,440.0,966.0,360.0,2.2734,88700.0,NEAR BAY --122.21,38.09,37.0,4368.0,779.0,2083.0,741.0,3.8667,127000.0,NEAR BAY --122.2,38.09,18.0,6860.0,1079.0,3205.0,1058.0,5.2957,171900.0,NEAR BAY --122.22,38.08,37.0,2811.0,,1574.0,516.0,3.1053,96700.0,NEAR BAY --122.22,38.08,37.0,4590.0,857.0,2920.0,832.0,3.436,94800.0,NEAR BAY --122.22,38.07,4.0,15654.0,2394.0,7025.0,2168.0,5.8171,225200.0,NEAR BAY --122.25,38.09,48.0,833.0,188.0,652.0,165.0,2.2417,87900.0,NEAR BAY --122.23,38.09,26.0,4397.0,997.0,2539.0,965.0,2.4875,90000.0,NEAR BAY --122.24,38.07,13.0,5451.0,1194.0,2957.0,1081.0,2.6098,162500.0,NEAR BAY --122.26,38.1,24.0,1213.0,395.0,699.0,386.0,1.3007,94600.0,NEAR BAY --122.26,38.1,30.0,3317.0,1058.0,1794.0,990.0,1.1835,133300.0,NEAR BAY --122.25,38.1,52.0,248.0,86.0,173.0,69.0,2.3,109400.0,NEAR BAY --122.25,38.1,52.0,1780.0,373.0,824.0,317.0,2.75,109900.0,NEAR BAY --122.25,38.1,52.0,2315.0,556.0,1113.0,486.0,2.5042,147900.0,NEAR BAY --122.25,38.1,52.0,1591.0,372.0,817.0,357.0,2.1411,97200.0,NEAR BAY --122.23,38.1,46.0,4143.0,895.0,2240.0,847.0,2.4201,92800.0,NEAR BAY --122.24,38.1,49.0,1851.0,356.0,849.0,307.0,2.9432,103500.0,NEAR BAY --122.24,38.11,52.0,2050.0,492.0,1277.0,463.0,3.0507,107300.0,NEAR BAY --122.24,38.11,42.0,1743.0,388.0,889.0,341.0,2.3241,99200.0,NEAR BAY --122.23,38.1,47.0,1303.0,278.0,694.0,269.0,2.5969,92800.0,NEAR BAY --122.23,38.12,49.0,2715.0,435.0,1006.0,429.0,4.2308,145800.0,NEAR BAY --122.23,38.11,47.0,3007.0,524.0,1152.0,486.0,4.0,141500.0,NEAR BAY --122.24,38.11,52.0,2111.0,310.0,772.0,323.0,4.775,148200.0,NEAR BAY --122.23,38.13,29.0,5154.0,1084.0,2459.0,1019.0,3.2664,142900.0,NEAR BAY --122.24,38.13,37.0,3223.0,564.0,1325.0,539.0,4.0938,126900.0,NEAR BAY --122.24,38.12,39.0,2967.0,500.0,1243.0,523.0,4.2902,152400.0,NEAR BAY --122.24,38.12,42.0,1625.0,255.0,578.0,243.0,4.0114,166900.0,NEAR BAY --122.25,38.12,47.0,1339.0,298.0,794.0,286.0,2.5865,109800.0,NEAR BAY --122.25,38.11,49.0,2365.0,504.0,1131.0,458.0,2.6133,103100.0,NEAR BAY --122.25,38.11,52.0,2846.0,705.0,1519.0,620.0,2.1976,97900.0,NEAR BAY --122.26,38.11,52.0,793.0,216.0,505.0,194.0,1.9667,93800.0,NEAR BAY --122.26,38.11,52.0,1560.0,353.0,670.0,287.0,1.7411,98400.0,NEAR BAY --122.26,38.11,52.0,2573.0,639.0,1238.0,529.0,2.6708,109700.0,NEAR BAY --122.26,38.12,28.0,3102.0,734.0,1623.0,639.0,3.1025,103700.0,NEAR BAY --122.27,38.12,45.0,4423.0,1001.0,2109.0,874.0,2.6937,111800.0,NEAR BAY --122.27,38.12,42.0,5266.0,1167.0,3124.0,1025.0,2.7375,120000.0,NEAR BAY --122.26,38.15,26.0,3699.0,671.0,2388.0,699.0,4.0515,121900.0,NEAR BAY --122.26,38.14,34.0,963.0,159.0,392.0,176.0,4.0156,134700.0,NEAR BAY --122.26,38.15,16.0,3921.0,727.0,2830.0,680.0,4.5053,123700.0,NEAR BAY --122.32,38.12,12.0,5382.0,928.0,3928.0,921.0,5.3785,150600.0,NEAR BAY --122.26,38.13,28.0,3072.0,790.0,1375.0,705.0,1.6368,91200.0,NEAR BAY --122.24,38.14,15.0,8479.0,1759.0,5008.0,1646.0,3.724,131600.0,NEAR BAY --122.24,38.15,10.0,6817.0,1188.0,4163.0,1135.0,4.4529,144100.0,NEAR BAY --122.25,38.15,24.0,2917.0,543.0,1878.0,531.0,3.7014,123600.0,NEAR BAY --122.22,38.15,7.0,5129.0,,2824.0,738.0,5.5138,171100.0,NEAR BAY --122.23,38.15,33.0,1253.0,238.0,753.0,236.0,1.756,86400.0,NEAR BAY --122.23,38.14,36.0,1412.0,260.0,792.0,268.0,2.3056,90400.0,NEAR BAY --122.15,38.04,14.0,2804.0,587.0,1083.0,573.0,2.6466,168500.0,NEAR BAY --122.16,38.05,52.0,1888.0,457.0,830.0,408.0,3.1373,185100.0,NEAR BAY --122.16,38.05,34.0,2434.0,428.0,926.0,423.0,4.6776,208300.0,NEAR BAY --122.19,38.07,20.0,3000.0,525.0,1207.0,491.0,4.6406,217500.0,NEAR BAY --122.18,38.07,10.0,4976.0,849.0,2089.0,803.0,5.3288,201800.0,NEAR BAY --122.17,38.07,15.0,2125.0,278.0,857.0,272.0,6.4599,219700.0,NEAR BAY --122.16,38.07,14.0,6360.0,1236.0,2876.0,1127.0,4.5321,190300.0,NEAR BAY --122.17,38.06,16.0,3515.0,626.0,1764.0,626.0,4.4397,187100.0,NEAR BAY --122.15,38.06,10.0,3008.0,532.0,1381.0,522.0,5.3661,195800.0,NEAR BAY --122.17,38.08,7.0,18392.0,2782.0,8276.0,2742.0,6.4232,229200.0,NEAR BAY --122.2,38.1,5.0,9567.0,1729.0,4620.0,1580.0,4.4821,210000.0,NEAR BAY --122.19,38.09,8.0,614.0,118.0,278.0,115.0,6.3735,166300.0,NEAR BAY --122.14,38.05,27.0,3794.0,772.0,1756.0,724.0,3.2891,150600.0,NEAR BAY --122.14,38.07,31.0,3401.0,616.0,1750.0,602.0,4.6761,143100.0,NEAR BAY --122.11,38.09,11.0,673.0,145.0,318.0,137.0,2.3929,122500.0,NEAR BAY --122.13,38.26,40.0,1538.0,255.0,669.0,263.0,3.3281,170200.0,NEAR BAY --122.15,38.29,17.0,1625.0,239.0,703.0,224.0,6.5891,328800.0,NEAR BAY --122.18,38.29,18.0,1953.0,265.0,658.0,270.0,8.0113,393000.0,NEAR BAY --122.18,38.23,21.0,2475.0,341.0,812.0,308.0,7.2589,320400.0,NEAR BAY --122.14,38.16,4.0,3273.0,495.0,1497.0,454.0,5.3345,176100.0,NEAR BAY --122.18,38.17,7.0,4093.0,651.0,2228.0,646.0,5.2523,161300.0,NEAR BAY --122.07,38.26,15.0,1173.0,146.0,450.0,154.0,6.0487,197700.0,INLAND --122.1,38.24,13.0,7367.0,1042.0,3193.0,983.0,5.3102,195000.0,NEAR BAY --122.06,38.27,14.0,6920.0,996.0,3196.0,978.0,5.0672,171300.0,INLAND --122.07,38.27,8.0,6761.0,1234.0,3237.0,1177.0,4.3586,173400.0,INLAND --122.08,38.3,2.0,6718.0,858.0,2012.0,654.0,6.8872,305200.0,INLAND --122.04,38.28,12.0,3861.0,795.0,2129.0,806.0,3.676,135000.0,INLAND --122.04,38.28,25.0,3304.0,493.0,1464.0,488.0,5.2527,130600.0,INLAND --122.03,38.28,15.0,5114.0,833.0,2418.0,778.0,4.4882,144000.0,INLAND --122.03,38.3,5.0,1569.0,199.0,713.0,209.0,6.6779,223900.0,INLAND --122.0,38.28,3.0,7030.0,1191.0,3238.0,1055.0,4.962,161700.0,INLAND --121.98,38.29,4.0,8778.0,1291.0,4010.0,1188.0,5.4399,187100.0,INLAND --121.99,38.15,36.0,263.0,73.0,88.0,42.0,2.5313,162500.0,INLAND --122.05,38.26,32.0,1070.0,199.0,631.0,195.0,2.6827,98900.0,INLAND --122.05,38.25,37.0,1336.0,251.0,680.0,231.0,3.815,99000.0,INLAND --122.06,38.25,36.0,1818.0,323.0,953.0,298.0,3.3153,99000.0,INLAND --122.06,38.25,34.0,1562.0,289.0,898.0,307.0,3.3598,107200.0,INLAND --122.06,38.26,36.0,1248.0,221.0,672.0,222.0,3.3839,105900.0,INLAND --122.07,38.24,15.0,7937.0,1635.0,4390.0,1567.0,3.5464,129800.0,INLAND --122.04,38.25,38.0,1214.0,244.0,632.0,254.0,2.8438,94200.0,INLAND --122.05,38.25,39.0,199.0,36.0,101.0,38.0,6.2299,105400.0,INLAND --122.04,38.26,34.0,3082.0,702.0,1795.0,703.0,2.7885,105900.0,INLAND --122.04,38.25,37.0,1176.0,291.0,648.0,271.0,2.7167,92200.0,INLAND --122.04,38.25,32.0,1203.0,287.0,571.0,255.0,3.0938,110400.0,INLAND --122.04,38.25,52.0,582.0,131.0,241.0,106.0,2.4,125000.0,INLAND --122.05,38.26,21.0,7195.0,1416.0,3927.0,1377.0,3.0912,126300.0,INLAND --122.04,38.27,16.0,8517.0,1910.0,4508.0,1837.0,3.1853,129600.0,INLAND --122.03,38.27,24.0,3580.0,735.0,1959.0,731.0,2.7284,118500.0,INLAND --122.03,38.26,25.0,4617.0,1046.0,2685.0,1011.0,2.9576,108500.0,INLAND --122.02,38.26,27.0,3440.0,787.0,2085.0,748.0,2.5896,104700.0,INLAND --122.03,38.25,35.0,1940.0,384.0,1177.0,403.0,3.1389,101100.0,INLAND --122.02,38.27,20.0,2237.0,464.0,1169.0,425.0,3.2115,99100.0,INLAND --122.02,38.26,20.0,3899.0,763.0,2198.0,779.0,3.2061,120400.0,INLAND --122.01,38.27,17.0,9089.0,1542.0,4758.0,1520.0,4.0619,126600.0,INLAND --122.02,38.26,8.0,2894.0,602.0,1566.0,572.0,3.6335,131600.0,INLAND --122.0,38.23,1.0,2062.0,343.0,872.0,268.0,5.2636,191300.0,INLAND --122.03,38.24,16.0,1104.0,164.0,495.0,156.0,5.4074,157700.0,INLAND --122.04,38.24,22.0,2761.0,757.0,2612.0,641.0,1.6875,87500.0,INLAND --122.04,38.24,30.0,2081.0,456.0,1005.0,438.0,1.9954,92900.0,INLAND --122.03,38.25,13.0,3334.0,541.0,1923.0,538.0,4.0905,134800.0,INLAND --122.01,38.25,11.0,6550.0,1149.0,3570.0,1123.0,3.8583,137900.0,INLAND --122.01,38.25,16.0,1081.0,181.0,792.0,184.0,4.6779,131300.0,INLAND --122.02,38.25,10.0,2237.0,454.0,1255.0,429.0,3.1176,126500.0,INLAND --122.0,38.25,7.0,11768.0,1893.0,6657.0,1874.0,4.9222,142900.0,INLAND --121.98,38.25,4.0,2487.0,440.0,1545.0,452.0,4.9103,140400.0,INLAND --122.01,38.26,12.0,4132.0,710.0,2087.0,633.0,4.5987,139700.0,INLAND --121.99,38.27,16.0,4138.0,758.0,1762.0,723.0,3.1979,137500.0,INLAND --121.99,38.26,18.0,921.0,126.0,368.0,120.0,6.0842,261100.0,INLAND --121.94,38.27,35.0,10869.0,2226.0,9879.0,2152.0,2.5681,81300.0,INLAND --121.94,38.37,17.0,7973.0,1591.0,2899.0,1502.0,2.8357,120100.0,INLAND --121.94,38.37,14.0,1156.0,216.0,574.0,227.0,3.2396,143800.0,INLAND --121.94,38.38,25.0,182.0,48.0,71.0,52.0,1.0208,78600.0,INLAND --121.94,38.36,2.0,4953.0,735.0,1791.0,562.0,5.0346,205100.0,INLAND --121.99,38.48,17.0,1824.0,348.0,934.0,305.0,4.6719,250000.0,INLAND --122.01,38.44,12.0,2344.0,354.0,1035.0,321.0,4.9773,281200.0,INLAND --122.0,38.41,11.0,2838.0,429.0,1331.0,426.0,4.945,298400.0,INLAND --122.07,38.41,17.0,3053.0,595.0,1434.0,557.0,3.4741,245800.0,INLAND --121.95,38.43,19.0,3011.0,551.0,1665.0,535.0,5.1534,232800.0,INLAND --121.94,38.41,15.0,1263.0,211.0,665.0,208.0,4.5,260900.0,INLAND --121.92,38.37,26.0,2056.0,413.0,933.0,367.0,2.7051,193800.0,INLAND --121.96,38.34,15.0,2857.0,373.0,1325.0,359.0,6.0252,151700.0,INLAND --121.96,38.34,14.0,3035.0,680.0,1597.0,663.0,3.6036,143500.0,INLAND --121.95,38.35,16.0,2084.0,292.0,1099.0,292.0,5.8269,150200.0,INLAND --121.94,38.35,8.0,3157.0,559.0,1758.0,569.0,4.412,140100.0,INLAND --121.92,38.34,2.0,7747.0,1133.0,3481.0,1083.0,6.1112,181000.0,INLAND --121.95,38.34,9.0,4999.0,874.0,2687.0,817.0,4.2324,142100.0,INLAND --121.96,38.33,3.0,7985.0,1257.0,3664.0,1215.0,4.976,158300.0,INLAND --121.96,38.32,12.0,5127.0,998.0,2749.0,976.0,4.0458,130600.0,INLAND --121.93,38.31,25.0,185.0,32.0,85.0,32.0,4.875,250000.0,INLAND --121.98,38.32,45.0,19.0,5.0,7460.0,6.0,10.2264,137500.0,INLAND --121.98,38.36,33.0,1083.0,217.0,562.0,203.0,2.433,101700.0,INLAND --121.99,38.35,45.0,1778.0,339.0,839.0,319.0,2.4659,102900.0,INLAND --122.0,38.35,38.0,1918.0,364.0,745.0,348.0,2.5707,126000.0,INLAND --122.0,38.35,34.0,1084.0,187.0,561.0,198.0,4.2115,118900.0,INLAND --122.0,38.35,24.0,745.0,116.0,300.0,115.0,3.6176,158500.0,INLAND --122.01,38.35,18.0,4486.0,723.0,1600.0,697.0,3.8651,189700.0,INLAND --122.01,38.36,15.0,476.0,67.0,213.0,73.0,7.1053,315200.0,INLAND --121.98,38.36,30.0,140.0,35.0,103.0,35.0,4.163,112500.0,INLAND --121.97,38.35,17.0,5678.0,1116.0,3182.0,1135.0,3.7388,122000.0,INLAND --121.97,38.34,11.0,1500.0,319.0,899.0,304.0,4.5568,127200.0,INLAND --121.96,38.35,20.0,1415.0,266.0,667.0,250.0,4.0938,117300.0,INLAND --121.96,38.34,7.0,3292.0,698.0,1911.0,702.0,3.89,140300.0,INLAND --121.96,38.36,11.0,3208.0,790.0,1772.0,694.0,2.7434,218800.0,INLAND --121.98,38.35,16.0,1697.0,267.0,832.0,277.0,4.4375,132600.0,INLAND --121.98,38.34,13.0,3616.0,672.0,2022.0,652.0,4.0536,134800.0,INLAND --121.97,38.34,16.0,2331.0,450.0,1074.0,400.0,4.0329,126800.0,INLAND --121.98,38.34,18.0,3876.0,916.0,2386.0,867.0,2.5938,129500.0,INLAND --121.99,38.34,16.0,1470.0,261.0,748.0,256.0,4.0433,132200.0,INLAND --121.99,38.34,13.0,3252.0,610.0,1915.0,631.0,4.2137,151700.0,INLAND --122.0,38.35,34.0,432.0,65.0,208.0,71.0,5.5435,136000.0,INLAND --122.0,38.38,16.0,2509.0,366.0,1043.0,339.0,6.0704,173400.0,INLAND --122.01,38.37,16.0,3996.0,550.0,1673.0,539.0,5.778,175700.0,INLAND --122.01,38.36,28.0,1967.0,315.0,734.0,291.0,4.9583,146200.0,INLAND --122.02,38.38,16.0,808.0,137.0,371.0,145.0,6.0767,216400.0,INLAND --122.02,38.37,16.0,2495.0,331.0,1118.0,338.0,6.4894,198000.0,INLAND --122.01,38.36,15.0,1176.0,166.0,485.0,171.0,5.9441,228200.0,INLAND --121.98,38.39,3.0,9488.0,1417.0,4095.0,1335.0,5.1781,191900.0,INLAND --121.98,38.37,21.0,3027.0,675.0,2018.0,642.0,2.8438,111500.0,INLAND --121.98,38.36,24.0,2434.0,630.0,1538.0,574.0,2.1067,101100.0,INLAND --122.0,38.37,18.0,1048.0,185.0,469.0,162.0,3.625,125000.0,INLAND --121.99,38.36,35.0,2728.0,451.0,1290.0,452.0,3.2768,117600.0,INLAND --122.0,38.36,34.0,2735.0,539.0,1390.0,491.0,2.7262,118800.0,INLAND --121.99,38.36,33.0,146.0,31.0,75.0,31.0,3.5179,84400.0,INLAND --122.0,38.36,34.0,1502.0,282.0,860.0,297.0,3.3438,135600.0,INLAND --121.82,38.36,26.0,1974.0,364.0,1002.0,362.0,3.3036,210000.0,INLAND --121.81,38.49,18.0,4518.0,827.0,2230.0,715.0,3.9309,178500.0,INLAND --121.76,38.41,19.0,686.0,107.0,348.0,109.0,3.9306,93800.0,INLAND --121.81,38.45,24.0,1951.0,341.0,1140.0,338.0,3.7061,128500.0,INLAND --121.82,38.46,10.0,6331.0,1181.0,3419.0,1110.0,3.7083,154800.0,INLAND --121.85,38.43,2.0,790.0,135.0,235.0,87.0,5.0862,166500.0,INLAND --121.83,38.45,15.0,5115.0,776.0,2540.0,794.0,4.8611,146400.0,INLAND --121.83,38.45,32.0,2139.0,440.0,1154.0,411.0,3.2672,107500.0,INLAND --121.83,38.45,36.0,839.0,158.0,446.0,167.0,2.3438,122700.0,INLAND --121.83,38.43,24.0,1307.0,314.0,917.0,291.0,2.2244,98100.0,INLAND --121.81,38.43,30.0,1674.0,297.0,756.0,292.0,3.9286,133100.0,INLAND --121.76,38.25,32.0,1495.0,333.0,905.0,281.0,2.625,212500.0,INLAND --121.69,38.16,33.0,1808.0,363.0,824.0,340.0,3.2937,96400.0,INLAND --121.69,38.16,46.0,2292.0,472.0,970.0,431.0,2.2888,94900.0,INLAND --121.73,38.13,40.0,1266.0,257.0,547.0,247.0,3.0288,164400.0,INLAND --121.74,38.15,22.0,1910.0,326.0,1001.0,345.0,4.8173,115800.0,INLAND --121.84,38.13,33.0,596.0,105.0,212.0,94.0,4.2813,81300.0,INLAND --122.42,38.27,25.0,3282.0,566.0,1244.0,483.0,4.5313,308400.0,NEAR BAY --122.49,38.22,33.0,1486.0,290.0,781.0,274.0,3.5647,251800.0,NEAR BAY --122.41,38.16,37.0,1549.0,,863.0,275.0,2.7457,254700.0,NEAR BAY --122.45,38.3,24.0,1946.0,400.0,718.0,380.0,3.5507,257900.0,NEAR BAY --122.47,38.3,15.0,4885.0,988.0,2175.0,924.0,3.4031,209500.0,<1H OCEAN --122.42,38.31,18.0,1479.0,246.0,550.0,217.0,4.7356,333300.0,NEAR BAY --122.44,38.34,25.0,3106.0,715.0,1262.0,665.0,1.9487,233500.0,<1H OCEAN --122.46,38.29,21.0,2423.0,560.0,1098.0,503.0,2.364,173300.0,NEAR BAY --122.46,38.29,35.0,1762.0,350.0,686.0,339.0,3.5982,271700.0,NEAR BAY --122.45,38.28,20.0,3306.0,503.0,1374.0,460.0,5.7984,297600.0,NEAR BAY --122.47,38.29,14.0,3732.0,846.0,1277.0,775.0,2.5658,208000.0,NEAR BAY --122.45,38.27,25.0,5024.0,881.0,1994.0,838.0,4.2237,262300.0,NEAR BAY --122.52,38.27,18.0,2405.0,390.0,872.0,367.0,5.2155,248300.0,<1H OCEAN --122.53,38.32,22.0,3577.0,,1371.0,501.0,5.795,332300.0,<1H OCEAN --122.49,38.32,30.0,1631.0,284.0,788.0,284.0,3.3098,195500.0,<1H OCEAN --122.49,38.31,27.0,3078.0,597.0,1411.0,586.0,3.25,195500.0,<1H OCEAN --122.49,38.3,14.0,2844.0,602.0,1613.0,544.0,3.3571,193600.0,<1H OCEAN --122.48,38.3,17.0,2703.0,550.0,1241.0,515.0,2.652,171300.0,<1H OCEAN --122.49,38.29,26.0,1726.0,289.0,672.0,251.0,3.8,242100.0,<1H OCEAN --122.49,38.27,8.0,5092.0,988.0,1657.0,936.0,3.5625,213200.0,NEAR BAY --122.47,38.34,15.0,2411.0,446.0,1144.0,407.0,4.3472,261000.0,<1H OCEAN --122.49,38.32,17.0,3308.0,720.0,1587.0,632.0,3.2727,176000.0,<1H OCEAN --122.48,38.32,31.0,1701.0,363.0,680.0,324.0,3.1375,192100.0,<1H OCEAN --122.48,38.31,29.0,2375.0,560.0,1124.0,502.0,2.3276,166200.0,<1H OCEAN --122.48,38.31,19.0,2398.0,521.0,1266.0,471.0,2.7727,186800.0,<1H OCEAN --122.48,38.32,42.0,2106.0,533.0,1141.0,445.0,3.1129,149300.0,<1H OCEAN --122.55,38.42,24.0,2220.0,411.0,894.0,365.0,4.2891,211700.0,<1H OCEAN --122.58,38.38,27.0,3800.0,728.0,1587.0,605.0,4.7237,306600.0,<1H OCEAN --122.5,38.4,36.0,1860.0,364.0,777.0,339.0,4.1307,295700.0,<1H OCEAN --122.5,38.35,25.0,1566.0,352.0,784.0,362.0,3.075,165100.0,<1H OCEAN --122.54,38.36,40.0,2725.0,531.0,1167.0,458.0,3.7969,202800.0,<1H OCEAN --122.61,38.24,25.0,2990.0,450.0,1335.0,434.0,4.7,190100.0,<1H OCEAN --122.61,38.24,17.0,1728.0,271.0,897.0,284.0,3.4896,185900.0,<1H OCEAN --122.61,38.23,18.0,2042.0,420.0,914.0,400.0,2.9871,193800.0,<1H OCEAN --122.62,38.24,19.0,1687.0,253.0,893.0,257.0,6.204,201800.0,<1H OCEAN --122.61,38.25,18.0,2915.0,418.0,1340.0,421.0,5.2452,204900.0,<1H OCEAN --122.6,38.24,16.0,1410.0,209.0,741.0,229.0,4.725,204500.0,<1H OCEAN --122.61,38.24,18.0,2933.0,481.0,1279.0,443.0,5.0849,188500.0,<1H OCEAN --122.6,38.24,16.0,2621.0,416.0,1247.0,386.0,4.8603,198400.0,<1H OCEAN --122.63,38.25,20.0,3460.0,602.0,1707.0,568.0,3.7115,181900.0,<1H OCEAN --122.62,38.24,33.0,1369.0,280.0,758.0,246.0,4.0341,156500.0,<1H OCEAN --122.62,38.25,33.0,1453.0,250.0,677.0,237.0,4.0962,170200.0,<1H OCEAN --122.61,38.26,17.0,2864.0,487.0,1482.0,547.0,4.6833,215200.0,<1H OCEAN --122.62,38.25,20.0,1888.0,411.0,826.0,396.0,2.875,189100.0,<1H OCEAN --122.62,38.25,24.0,2388.0,358.0,1187.0,362.0,4.6534,196500.0,<1H OCEAN --122.57,38.27,7.0,6508.0,1028.0,2902.0,1010.0,5.3707,250500.0,<1H OCEAN --122.51,38.17,8.0,5875.0,1115.0,2808.0,1029.0,3.6392,246300.0,NEAR BAY --122.65,38.27,9.0,4764.0,816.0,2077.0,755.0,5.1391,234500.0,<1H OCEAN --122.63,38.26,7.0,7808.0,1390.0,3551.0,1392.0,4.6069,202300.0,<1H OCEAN --122.66,38.27,16.0,1523.0,308.0,477.0,315.0,2.1696,75000.0,<1H OCEAN --122.63,38.24,45.0,1615.0,338.0,823.0,327.0,2.5179,145500.0,<1H OCEAN --122.63,38.23,45.0,2264.0,504.0,1076.0,472.0,3.0139,194100.0,<1H OCEAN --122.64,38.23,52.0,1075.0,249.0,519.0,210.0,3.0769,230900.0,<1H OCEAN --122.64,38.23,49.0,2300.0,463.0,1061.0,429.0,4.075,228800.0,<1H OCEAN --122.63,38.22,34.0,878.0,160.0,372.0,167.0,4.0417,232100.0,<1H OCEAN --122.63,38.22,17.0,2652.0,342.0,1199.0,350.0,5.565,267100.0,<1H OCEAN --122.63,38.21,22.0,2933.0,461.0,1283.0,449.0,6.2034,291100.0,<1H OCEAN --122.63,38.23,37.0,1966.0,348.0,875.0,381.0,4.0703,223800.0,<1H OCEAN --122.65,38.23,52.0,1735.0,347.0,712.0,343.0,3.1711,200800.0,<1H OCEAN --122.64,38.23,52.0,2156.0,469.0,1070.0,467.0,3.3011,252300.0,<1H OCEAN --122.65,38.23,52.0,1923.0,393.0,910.0,345.0,3.45,200600.0,<1H OCEAN --122.66,38.2,39.0,2889.0,517.0,1351.0,489.0,4.3056,251300.0,<1H OCEAN --122.64,38.24,52.0,1621.0,393.0,635.0,349.0,2.5202,244000.0,<1H OCEAN --122.64,38.24,40.0,1974.0,410.0,1039.0,398.0,3.7917,151600.0,<1H OCEAN --122.65,38.25,23.0,4030.0,,1852.0,778.0,3.402,193300.0,<1H OCEAN --122.65,38.24,24.0,1948.0,310.0,922.0,313.0,4.95,243600.0,<1H OCEAN --122.65,38.24,49.0,3273.0,579.0,1431.0,539.0,4.275,227600.0,<1H OCEAN --122.64,38.25,31.0,2554.0,515.0,1507.0,533.0,3.8,162600.0,<1H OCEAN --122.69,38.27,32.0,2344.0,434.0,1066.0,384.0,4.0313,285000.0,<1H OCEAN --122.67,38.25,32.0,1333.0,235.0,660.0,206.0,4.0729,288500.0,<1H OCEAN --122.68,38.25,29.0,1315.0,240.0,650.0,228.0,3.8269,306000.0,<1H OCEAN --122.67,38.24,29.0,2644.0,464.0,1372.0,450.0,5.0544,261800.0,<1H OCEAN --122.77,38.29,32.0,3201.0,542.0,1869.0,519.0,3.2442,268000.0,<1H OCEAN --122.73,38.26,35.0,3941.0,645.0,1668.0,620.0,4.385,317700.0,<1H OCEAN --122.7,38.23,47.0,2090.0,387.0,1053.0,377.0,3.5673,310300.0,<1H OCEAN --122.72,38.35,16.0,3049.0,609.0,1675.0,618.0,2.4117,162500.0,<1H OCEAN --122.72,38.31,26.0,1644.0,294.0,801.0,291.0,4.3906,248000.0,<1H OCEAN --122.67,38.31,28.0,1915.0,419.0,930.0,342.0,3.7875,292700.0,<1H OCEAN --122.69,38.3,30.0,3919.0,743.0,1693.0,693.0,3.3827,292100.0,<1H OCEAN --122.73,38.34,44.0,743.0,155.0,434.0,162.0,2.5819,209600.0,<1H OCEAN --122.69,38.32,16.0,3741.0,698.0,1938.0,658.0,4.6324,183600.0,<1H OCEAN --122.71,38.33,13.0,4011.0,936.0,2064.0,914.0,3.6953,157600.0,<1H OCEAN --122.7,38.31,14.0,3155.0,580.0,1208.0,501.0,4.1964,258100.0,<1H OCEAN --122.7,38.33,16.0,1244.0,242.0,696.0,236.0,3.6369,158700.0,<1H OCEAN --122.69,38.32,15.0,2536.0,414.0,1400.0,426.0,5.6613,172400.0,<1H OCEAN --122.69,38.34,23.0,2846.0,516.0,1526.0,492.0,3.733,163500.0,<1H OCEAN --122.7,38.33,26.0,1887.0,381.0,1060.0,364.0,3.0078,160400.0,<1H OCEAN --122.71,38.34,22.0,1249.0,335.0,699.0,308.0,2.6033,121600.0,<1H OCEAN --122.7,38.33,26.0,1584.0,295.0,846.0,295.0,3.375,156300.0,<1H OCEAN --122.69,38.35,12.0,1550.0,187.0,685.0,188.0,7.226,255300.0,<1H OCEAN --122.69,38.34,15.0,3091.0,697.0,1602.0,682.0,4.0071,135500.0,<1H OCEAN --122.71,38.35,11.0,2242.0,699.0,1203.0,642.0,2.3464,104200.0,<1H OCEAN --122.7,38.35,14.0,2313.0,,954.0,397.0,3.7813,146500.0,<1H OCEAN --122.7,38.35,14.0,1555.0,369.0,493.0,335.0,1.6033,67500.0,<1H OCEAN --122.7,38.34,19.0,2987.0,676.0,1782.0,688.0,2.8261,154500.0,<1H OCEAN --122.71,38.34,23.0,2744.0,588.0,1493.0,557.0,3.1781,162000.0,<1H OCEAN --122.69,38.37,8.0,6322.0,1001.0,2969.0,1043.0,4.8233,214000.0,<1H OCEAN --122.71,38.37,16.0,2355.0,345.0,1014.0,348.0,5.6018,253000.0,<1H OCEAN --122.69,38.35,16.0,1689.0,254.0,921.0,270.0,4.4444,191800.0,<1H OCEAN --122.69,38.36,6.0,5496.0,1374.0,2502.0,1189.0,2.4827,177500.0,<1H OCEAN --122.7,38.35,16.0,1328.0,187.0,607.0,197.0,5.0366,257800.0,<1H OCEAN --122.7,38.36,11.0,5817.0,878.0,2538.0,876.0,4.221,227100.0,<1H OCEAN --122.63,38.34,15.0,2153.0,345.0,979.0,335.0,5.1966,325400.0,<1H OCEAN --122.68,38.36,8.0,7520.0,1336.0,3833.0,1287.0,4.3278,184100.0,<1H OCEAN --122.69,38.34,12.0,3876.0,782.0,2146.0,764.0,4.0844,165400.0,<1H OCEAN --122.67,38.33,4.0,8072.0,1606.0,4323.0,1475.0,3.9518,220300.0,<1H OCEAN --122.69,38.34,16.0,1683.0,341.0,880.0,327.0,3.2857,160200.0,<1H OCEAN --122.68,38.4,32.0,2826.0,627.0,1767.0,628.0,3.1047,141400.0,<1H OCEAN --122.7,38.43,28.0,1585.0,412.0,1362.0,424.0,1.6685,114100.0,<1H OCEAN --122.71,38.42,23.0,1569.0,414.0,1031.0,368.0,1.6267,129200.0,<1H OCEAN --122.71,38.4,17.0,1690.0,464.0,833.0,445.0,1.439,140600.0,<1H OCEAN --122.7,38.39,16.0,4922.0,1211.0,2557.0,1088.0,2.0915,168100.0,<1H OCEAN --122.62,38.4,10.0,9772.0,1308.0,3741.0,1242.0,6.5261,324700.0,<1H OCEAN --122.66,38.44,17.0,5815.0,898.0,2614.0,887.0,4.3657,215900.0,<1H OCEAN --122.67,38.44,29.0,2551.0,448.0,1165.0,456.0,4.3587,196400.0,<1H OCEAN --122.68,38.43,18.0,2723.0,529.0,1150.0,520.0,3.5885,191900.0,<1H OCEAN --122.65,38.4,21.0,1059.0,150.0,400.0,154.0,6.8586,343100.0,<1H OCEAN --122.65,38.37,15.0,1848.0,280.0,786.0,282.0,5.7204,344100.0,<1H OCEAN --122.67,38.43,17.0,1804.0,304.0,750.0,298.0,4.5588,196400.0,<1H OCEAN --122.67,38.43,17.0,2007.0,400.0,895.0,403.0,3.2813,202700.0,<1H OCEAN --122.66,38.42,14.0,5315.0,1037.0,2228.0,950.0,4.023,208400.0,<1H OCEAN --122.68,38.43,29.0,488.0,63.0,161.0,62.0,6.0774,334400.0,<1H OCEAN --122.58,38.46,15.0,2936.0,517.0,1182.0,501.0,3.3981,246900.0,<1H OCEAN --122.61,38.42,13.0,7731.0,1360.0,2543.0,1249.0,4.6957,259800.0,<1H OCEAN --122.58,38.43,10.0,3597.0,661.0,1132.0,639.0,3.9375,269200.0,<1H OCEAN --122.59,38.44,14.0,1665.0,390.0,505.0,348.0,3.183,201200.0,<1H OCEAN --122.59,38.43,20.0,2791.0,546.0,785.0,512.0,3.4561,216700.0,<1H OCEAN --122.56,38.41,20.0,1151.0,211.0,478.0,183.0,5.93,384600.0,<1H OCEAN --122.66,38.46,14.0,2364.0,631.0,1300.0,625.0,2.6023,221100.0,<1H OCEAN --122.66,38.45,26.0,2081.0,339.0,906.0,323.0,4.4375,293500.0,<1H OCEAN --122.67,38.45,24.0,2622.0,525.0,1027.0,510.0,2.9222,242600.0,<1H OCEAN --122.67,38.44,32.0,3771.0,741.0,1786.0,721.0,3.2415,172200.0,<1H OCEAN --122.68,38.44,29.0,2796.0,588.0,1346.0,562.0,2.9107,169700.0,<1H OCEAN --122.7,38.45,47.0,904.0,154.0,310.0,144.0,3.9766,190600.0,<1H OCEAN --122.68,38.45,36.0,1686.0,303.0,744.0,304.0,4.0139,163100.0,<1H OCEAN --122.69,38.44,40.0,1449.0,281.0,636.0,295.0,2.7222,161200.0,<1H OCEAN --122.69,38.44,35.0,1356.0,241.0,620.0,216.0,3.5521,168300.0,<1H OCEAN --122.68,38.44,36.0,1311.0,259.0,648.0,268.0,3.4545,161200.0,<1H OCEAN --122.7,38.44,45.0,883.0,202.0,401.0,194.0,3.2845,178300.0,<1H OCEAN --122.69,38.45,36.0,1943.0,337.0,711.0,318.0,3.9191,183000.0,<1H OCEAN --122.69,38.44,31.0,1808.0,315.0,691.0,280.0,3.8583,193200.0,<1H OCEAN --122.7,38.44,42.0,709.0,182.0,547.0,172.0,2.1912,165000.0,<1H OCEAN --122.7,38.44,35.0,1304.0,343.0,822.0,304.0,3.2935,157800.0,<1H OCEAN --122.71,38.43,52.0,1439.0,325.0,738.0,316.0,2.2262,129900.0,<1H OCEAN --122.71,38.43,38.0,1689.0,526.0,1071.0,529.0,1.5026,124000.0,<1H OCEAN --122.72,38.44,52.0,1059.0,281.0,627.0,273.0,1.5357,137500.0,<1H OCEAN --122.71,38.44,52.0,988.0,283.0,475.0,242.0,1.3684,258300.0,<1H OCEAN --122.71,38.44,27.0,966.0,251.0,462.0,230.0,1.7,350000.0,<1H OCEAN --122.72,38.47,29.0,1706.0,415.0,990.0,394.0,1.9932,164800.0,<1H OCEAN --122.72,38.46,35.0,1445.0,309.0,795.0,308.0,2.9073,157000.0,<1H OCEAN --122.72,38.45,41.0,1743.0,373.0,780.0,357.0,3.1467,175500.0,<1H OCEAN --122.71,38.46,42.0,1574.0,376.0,844.0,369.0,2.314,169400.0,<1H OCEAN --122.71,38.46,41.0,1974.0,482.0,965.0,458.0,2.905,159300.0,<1H OCEAN --122.71,38.46,36.0,2175.0,516.0,1087.0,477.0,3.0444,167200.0,<1H OCEAN --122.71,38.45,39.0,2739.0,573.0,1223.0,569.0,2.9663,185400.0,<1H OCEAN --122.71,38.45,48.0,3118.0,561.0,1275.0,530.0,3.455,222100.0,<1H OCEAN --122.7,38.45,26.0,2011.0,557.0,855.0,530.0,1.125,233300.0,<1H OCEAN --122.71,38.45,52.0,2259.0,537.0,957.0,520.0,2.1827,188800.0,<1H OCEAN --122.68,38.48,15.0,1575.0,262.0,716.0,259.0,5.3409,244600.0,<1H OCEAN --122.67,38.47,16.0,3452.0,791.0,1567.0,731.0,2.4722,194300.0,<1H OCEAN --122.68,38.46,17.0,3201.0,527.0,1244.0,495.0,4.7143,202900.0,<1H OCEAN --122.67,38.47,19.0,1848.0,428.0,1130.0,433.0,3.0568,190300.0,<1H OCEAN --122.68,38.46,15.0,1811.0,406.0,718.0,403.0,2.3929,141300.0,<1H OCEAN --122.71,38.46,23.0,3220.0,603.0,1299.0,591.0,3.9261,213300.0,<1H OCEAN --122.7,38.46,29.0,2891.0,459.0,1012.0,441.0,5.0415,240200.0,<1H OCEAN --122.69,38.46,32.0,2970.0,504.0,1117.0,512.0,5.0,275900.0,<1H OCEAN --122.7,38.45,39.0,2015.0,335.0,640.0,315.0,4.1734,240500.0,<1H OCEAN --122.72,38.48,23.0,2296.0,356.0,902.0,334.0,6.0298,289100.0,<1H OCEAN --122.68,38.46,19.0,4976.0,711.0,1926.0,625.0,7.3003,381300.0,<1H OCEAN --122.71,38.5,15.0,5645.0,830.0,2324.0,769.0,6.6104,330900.0,<1H OCEAN --122.66,38.48,16.0,2697.0,490.0,1462.0,515.0,4.2051,190300.0,<1H OCEAN --122.66,38.48,16.0,2724.0,593.0,1124.0,586.0,2.825,186200.0,<1H OCEAN --122.66,38.47,23.0,2246.0,437.0,1035.0,386.0,3.7617,172600.0,<1H OCEAN --122.65,38.46,14.0,2096.0,420.0,926.0,397.0,4.0647,187800.0,<1H OCEAN --122.66,38.48,21.0,2066.0,393.0,919.0,395.0,3.267,176200.0,<1H OCEAN --122.66,38.47,20.0,2806.0,477.0,1369.0,460.0,4.75,190500.0,<1H OCEAN --122.69,38.51,18.0,3364.0,501.0,1442.0,506.0,6.6854,313000.0,<1H OCEAN --122.64,38.48,19.0,3244.0,449.0,1174.0,454.0,5.8369,255700.0,<1H OCEAN --122.65,38.47,24.0,2268.0,330.0,847.0,296.0,3.858,214400.0,<1H OCEAN --122.6,38.48,17.0,1528.0,264.0,606.0,251.0,6.6004,341500.0,<1H OCEAN --122.62,38.54,24.0,2409.0,464.0,1006.0,403.0,4.5167,265200.0,<1H OCEAN --122.63,38.5,19.0,2107.0,332.0,874.0,341.0,5.7819,265600.0,<1H OCEAN --122.65,38.48,17.0,1090.0,164.0,473.0,163.0,5.5061,231800.0,<1H OCEAN --122.75,38.54,6.0,6719.0,1016.0,2699.0,997.0,5.4886,254200.0,<1H OCEAN --122.78,38.52,23.0,2511.0,549.0,1052.0,527.0,2.4922,192000.0,<1H OCEAN --122.79,38.5,18.0,4839.0,918.0,2755.0,841.0,3.75,248300.0,<1H OCEAN --122.76,38.52,6.0,2073.0,388.0,826.0,375.0,3.055,224100.0,<1H OCEAN --122.75,38.5,16.0,4196.0,638.0,1713.0,615.0,5.449,252100.0,<1H OCEAN --122.73,38.46,14.0,4042.0,1298.0,2323.0,1158.0,2.0651,135400.0,<1H OCEAN --122.73,38.47,16.0,1834.0,391.0,994.0,390.0,3.7266,156500.0,<1H OCEAN --122.74,38.47,16.0,1426.0,287.0,525.0,260.0,3.0714,161700.0,<1H OCEAN --122.74,38.46,9.0,2268.0,594.0,1311.0,585.0,2.6607,91500.0,<1H OCEAN --122.74,38.48,12.0,4174.0,670.0,1882.0,647.0,4.551,178300.0,<1H OCEAN --122.75,38.48,4.0,6487.0,1112.0,2958.0,1131.0,4.5417,197400.0,<1H OCEAN --122.79,38.48,7.0,6837.0,,3468.0,1405.0,3.1662,191000.0,<1H OCEAN --122.81,38.46,28.0,3580.0,611.0,1634.0,567.0,4.745,248600.0,<1H OCEAN --122.75,38.46,13.0,4323.0,1020.0,2566.0,728.0,3.0147,142800.0,<1H OCEAN --122.75,38.46,16.0,2653.0,606.0,1693.0,586.0,2.6384,146900.0,<1H OCEAN --122.76,38.46,14.0,4742.0,756.0,2149.0,732.0,4.5152,199200.0,<1H OCEAN --122.76,38.46,14.0,4794.0,767.0,2252.0,768.0,4.2061,213100.0,<1H OCEAN --122.73,38.46,14.0,2324.0,754.0,1026.0,677.0,1.722,150000.0,<1H OCEAN --122.74,38.45,17.0,3064.0,588.0,1704.0,590.0,3.9329,170900.0,<1H OCEAN --122.74,38.45,25.0,2696.0,496.0,1296.0,514.0,4.0798,179200.0,<1H OCEAN --122.74,38.44,23.0,2819.0,612.0,1644.0,546.0,2.6576,147900.0,<1H OCEAN --122.73,38.44,20.0,2919.0,508.0,1711.0,500.0,3.875,140300.0,<1H OCEAN --122.72,38.44,48.0,707.0,166.0,458.0,172.0,3.1797,140400.0,<1H OCEAN --122.73,38.44,35.0,1120.0,297.0,659.0,274.0,2.3824,145000.0,<1H OCEAN --122.73,38.44,28.0,1073.0,241.0,652.0,238.0,2.4,146200.0,<1H OCEAN --122.72,38.44,52.0,188.0,62.0,301.0,72.0,0.9437,129200.0,<1H OCEAN --122.74,38.44,17.0,2287.0,497.0,1240.0,493.0,3.5845,164300.0,<1H OCEAN --122.74,38.43,11.0,4670.0,1007.0,2430.0,962.0,3.0341,142300.0,<1H OCEAN --122.73,38.43,15.0,3265.0,690.0,1629.0,629.0,3.7132,167600.0,<1H OCEAN --122.76,38.45,8.0,5823.0,1104.0,2864.0,1041.0,3.6292,183600.0,<1H OCEAN --122.82,38.44,23.0,1551.0,236.0,555.0,243.0,4.6792,304700.0,<1H OCEAN --122.76,38.44,11.0,2895.0,524.0,1633.0,534.0,4.7283,170200.0,<1H OCEAN --122.76,38.44,14.0,4376.0,797.0,1809.0,746.0,3.8244,180000.0,<1H OCEAN --122.78,38.44,14.0,4143.0,656.0,1569.0,629.0,3.9766,345300.0,<1H OCEAN --122.79,38.42,9.0,4967.0,885.0,2581.0,915.0,5.038,185600.0,<1H OCEAN --122.74,38.42,42.0,2050.0,434.0,1073.0,416.0,2.375,141000.0,<1H OCEAN --122.73,38.43,29.0,2677.0,691.0,1880.0,664.0,2.1864,143200.0,<1H OCEAN --122.72,38.43,31.0,2020.0,476.0,1408.0,437.0,2.5735,131100.0,<1H OCEAN --122.72,38.42,26.0,1168.0,253.0,937.0,248.0,1.9458,146000.0,<1H OCEAN --122.72,38.42,26.0,3604.0,734.0,2605.0,704.0,3.0969,143800.0,<1H OCEAN --122.73,38.42,26.0,1446.0,296.0,884.0,295.0,4.3523,150000.0,<1H OCEAN --122.72,38.42,30.0,2099.0,406.0,1156.0,401.0,2.8036,152300.0,<1H OCEAN --122.73,38.4,30.0,3689.0,746.0,2250.0,697.0,2.975,157300.0,<1H OCEAN --122.73,38.37,40.0,1389.0,309.0,841.0,288.0,3.1094,183300.0,<1H OCEAN --122.75,38.43,36.0,1599.0,345.0,1086.0,314.0,2.6667,149100.0,<1H OCEAN --122.78,38.41,43.0,1351.0,277.0,1011.0,297.0,2.5917,144000.0,<1H OCEAN --122.77,38.39,35.0,2611.0,475.0,1293.0,463.0,2.75,197500.0,<1H OCEAN --122.75,38.41,17.0,3150.0,588.0,1857.0,610.0,3.9688,165000.0,<1H OCEAN --122.82,38.41,32.0,701.0,182.0,489.0,168.0,2.785,169300.0,<1H OCEAN --122.84,38.42,29.0,2756.0,551.0,1381.0,531.0,2.9625,237300.0,<1H OCEAN --122.86,38.42,38.0,1166.0,223.0,584.0,225.0,3.6667,244400.0,<1H OCEAN --122.84,38.41,19.0,2191.0,391.0,1065.0,404.0,4.125,204600.0,<1H OCEAN --122.83,38.4,37.0,2217.0,451.0,1019.0,428.0,3.1217,178500.0,<1H OCEAN --122.84,38.4,15.0,3080.0,617.0,1446.0,599.0,3.6696,194400.0,<1H OCEAN --122.78,38.37,21.0,795.0,163.0,414.0,162.0,3.7991,175000.0,<1H OCEAN --122.82,38.4,40.0,2406.0,423.0,1054.0,426.0,3.8846,215900.0,<1H OCEAN --122.8,38.37,26.0,1634.0,315.0,909.0,317.0,4.1731,257200.0,<1H OCEAN --122.8,38.39,26.0,2273.0,474.0,1124.0,420.0,2.9453,166700.0,<1H OCEAN --122.84,38.39,16.0,1688.0,292.0,793.0,280.0,4.4357,216900.0,<1H OCEAN --122.83,38.39,19.0,1765.0,394.0,868.0,388.0,2.462,260300.0,<1H OCEAN --122.82,38.39,22.0,1288.0,243.0,593.0,220.0,3.625,233700.0,<1H OCEAN --122.82,38.39,32.0,1437.0,257.0,752.0,245.0,4.7422,240900.0,<1H OCEAN --122.82,38.38,27.0,2565.0,479.0,1227.0,467.0,4.5132,259900.0,<1H OCEAN --122.76,38.35,30.0,2260.0,374.0,958.0,359.0,5.0323,222400.0,<1H OCEAN --122.87,38.39,34.0,1138.0,205.0,541.0,180.0,4.5147,271400.0,<1H OCEAN --122.77,38.33,32.0,2054.0,324.0,843.0,306.0,4.5875,290700.0,<1H OCEAN --122.82,38.33,25.0,3067.0,569.0,1602.0,550.0,3.9917,244100.0,<1H OCEAN --122.88,38.34,20.0,3404.0,628.0,1641.0,585.0,5.0574,276200.0,<1H OCEAN --122.81,38.36,18.0,2399.0,389.0,1131.0,391.0,5.2769,293900.0,<1H OCEAN --122.85,38.37,16.0,1762.0,293.0,810.0,297.0,4.4437,305000.0,<1H OCEAN --122.89,38.38,16.0,2017.0,369.0,931.0,336.0,5.7664,267500.0,<1H OCEAN --122.86,38.44,31.0,1534.0,292.0,716.0,288.0,3.4471,209500.0,<1H OCEAN --122.89,38.42,28.0,2388.0,437.0,1015.0,381.0,5.1512,268300.0,<1H OCEAN --122.87,38.43,36.0,1987.0,387.0,1065.0,347.0,4.0446,172200.0,<1H OCEAN --122.91,38.43,19.0,1968.0,350.0,852.0,308.0,4.6705,269800.0,<1H OCEAN --122.89,38.4,22.0,2900.0,538.0,1445.0,515.0,4.511,296800.0,<1H OCEAN --123.04,38.49,30.0,3977.0,930.0,1387.0,582.0,2.6161,132500.0,NEAR OCEAN --123.02,38.46,52.0,2154.0,499.0,524.0,259.0,2.0556,120000.0,NEAR OCEAN --122.98,38.44,29.0,4450.0,939.0,1328.0,590.0,3.1,162100.0,<1H OCEAN --123.01,38.48,37.0,1179.0,282.0,354.0,176.0,1.3712,118300.0,NEAR OCEAN --123.02,38.54,35.0,2157.0,487.0,768.0,322.0,3.2315,136900.0,<1H OCEAN --123.0,38.51,33.0,1565.0,390.0,759.0,311.0,2.6726,153100.0,NEAR OCEAN --122.97,38.5,44.0,3234.0,746.0,1112.0,470.0,1.9265,132700.0,<1H OCEAN --122.97,38.53,48.0,3939.0,860.0,1257.0,571.0,2.1165,98700.0,<1H OCEAN --122.94,38.53,49.0,1141.0,239.0,505.0,184.0,3.7143,148800.0,<1H OCEAN --122.94,38.5,46.0,2280.0,492.0,807.0,366.0,2.6316,117000.0,<1H OCEAN --122.91,38.49,37.0,2469.0,519.0,1137.0,474.0,3.6343,146500.0,<1H OCEAN --122.87,38.48,27.0,3894.0,776.0,1832.0,715.0,3.5085,187800.0,<1H OCEAN --122.88,38.46,25.0,1563.0,314.0,737.0,305.0,2.5687,249200.0,<1H OCEAN --122.85,38.46,22.0,3328.0,550.0,1309.0,512.0,4.7105,266200.0,<1H OCEAN --122.94,38.49,37.0,3169.0,719.0,777.0,344.0,2.7072,117100.0,<1H OCEAN --122.91,38.46,18.0,2021.0,,912.0,329.0,4.5,251900.0,<1H OCEAN --122.72,38.58,4.0,7042.0,1100.0,2936.0,1043.0,5.0555,240800.0,<1H OCEAN --122.82,38.55,8.0,6190.0,1088.0,2967.0,1000.0,3.8616,195100.0,<1H OCEAN --122.85,38.52,13.0,4808.0,848.0,2568.0,762.0,3.6583,183200.0,<1H OCEAN --122.78,38.53,9.0,3659.0,652.0,1889.0,632.0,4.2716,250800.0,<1H OCEAN --122.81,38.54,12.0,2289.0,611.0,919.0,540.0,1.1553,139300.0,<1H OCEAN --122.82,38.53,27.0,1823.0,360.0,907.0,317.0,3.276,172900.0,<1H OCEAN --122.79,38.54,5.0,3986.0,737.0,1887.0,687.0,3.7768,213800.0,<1H OCEAN --122.87,38.61,23.0,2676.0,521.0,1456.0,500.0,3.7361,173700.0,<1H OCEAN --122.87,38.62,52.0,1514.0,348.0,767.0,354.0,2.1903,160000.0,<1H OCEAN --122.86,38.61,52.0,1753.0,380.0,982.0,380.0,3.4013,183300.0,<1H OCEAN --122.86,38.62,35.0,2597.0,522.0,1231.0,499.0,2.7432,174000.0,<1H OCEAN --122.87,38.62,18.0,2721.0,557.0,1667.0,539.0,3.1875,176100.0,<1H OCEAN --122.82,38.64,29.0,2176.0,385.0,1117.0,374.0,3.8681,188600.0,<1H OCEAN --122.83,38.58,17.0,5199.0,1023.0,2036.0,890.0,3.2452,168800.0,<1H OCEAN --122.82,38.61,41.0,2720.0,501.0,987.0,364.0,4.0294,201700.0,<1H OCEAN --122.85,38.62,16.0,4418.0,704.0,1908.0,697.0,4.5913,244600.0,<1H OCEAN --123.01,38.67,33.0,914.0,147.0,394.0,132.0,4.6875,246200.0,<1H OCEAN --122.94,38.57,33.0,1530.0,266.0,728.0,250.0,5.1005,266700.0,<1H OCEAN --122.94,38.64,26.0,4050.0,712.0,2072.0,636.0,4.0781,287800.0,<1H OCEAN --122.95,38.73,37.0,1548.0,328.0,863.0,287.0,2.9792,151300.0,<1H OCEAN --122.87,38.68,32.0,4073.0,718.0,2053.0,629.0,3.7352,228000.0,<1H OCEAN --122.85,38.77,18.0,2856.0,513.0,1027.0,405.0,4.6953,241700.0,<1H OCEAN --122.7,38.66,43.0,1384.0,284.0,582.0,224.0,3.9063,210000.0,<1H OCEAN --123.03,38.79,16.0,4047.0,769.0,1998.0,673.0,3.375,171900.0,<1H OCEAN --123.02,38.81,35.0,956.0,213.0,488.0,215.0,3.025,140600.0,<1H OCEAN --123.02,38.81,45.0,1717.0,389.0,916.0,367.0,3.2425,138800.0,<1H OCEAN --123.01,38.8,21.0,360.0,96.0,131.0,74.0,3.5156,133300.0,<1H OCEAN --123.01,38.79,32.0,2697.0,529.0,1417.0,535.0,3.2546,134100.0,<1H OCEAN --123.1,38.79,20.0,3109.0,712.0,1643.0,638.0,2.8344,164400.0,<1H OCEAN --123.49,38.7,9.0,5409.0,1019.0,594.0,327.0,3.3125,295400.0,NEAR OCEAN --123.24,38.7,38.0,1460.0,311.0,569.0,176.0,2.7171,131300.0,NEAR OCEAN --123.25,38.54,27.0,3658.0,764.0,1278.0,518.0,3.3536,157500.0,NEAR OCEAN --123.08,38.38,28.0,3297.0,676.0,923.0,373.0,3.9167,232600.0,NEAR OCEAN --122.96,38.42,50.0,2530.0,524.0,940.0,361.0,2.9375,122900.0,<1H OCEAN --123.07,38.46,31.0,855.0,217.0,280.0,139.0,2.3611,112500.0,NEAR OCEAN --122.93,38.38,18.0,2562.0,500.0,1128.0,414.0,3.9336,262500.0,<1H OCEAN --123.02,38.36,16.0,1496.0,298.0,778.0,284.0,3.8589,268800.0,NEAR OCEAN --123.0,38.33,8.0,3223.0,637.0,851.0,418.0,5.6445,364800.0,NEAR OCEAN --120.84,37.92,27.0,471.0,84.0,195.0,72.0,3.3333,208300.0,INLAND --120.79,37.82,17.0,4227.0,729.0,1809.0,679.0,3.2667,269500.0,INLAND --120.9,37.81,27.0,4213.0,750.0,2142.0,746.0,3.7031,173300.0,INLAND --120.9,37.76,20.0,570.0,112.0,304.0,108.0,2.2024,156300.0,INLAND --120.86,37.73,27.0,508.0,93.0,263.0,81.0,3.1136,183300.0,INLAND --120.79,37.76,14.0,3531.0,508.0,1505.0,497.0,5.5228,275300.0,INLAND --120.76,37.73,16.0,1343.0,241.0,732.0,195.0,3.5833,187500.0,INLAND --120.69,37.77,46.0,431.0,86.0,239.0,80.0,3.3182,282100.0,INLAND --120.87,37.77,9.0,4838.0,920.0,2460.0,923.0,3.5959,142700.0,INLAND --120.85,37.77,52.0,436.0,81.0,197.0,68.0,1.8625,85400.0,INLAND --120.86,37.77,45.0,621.0,129.0,257.0,124.0,1.7188,109400.0,INLAND --120.86,37.77,38.0,1545.0,279.0,662.0,266.0,3.825,96400.0,INLAND --120.86,37.77,28.0,1208.0,232.0,535.0,232.0,2.3523,94700.0,INLAND --120.87,37.76,16.0,1174.0,249.0,601.0,242.0,1.7143,113300.0,INLAND --120.85,37.77,20.0,651.0,157.0,421.0,151.0,2.0833,77300.0,INLAND --120.85,37.77,37.0,1738.0,403.0,936.0,366.0,2.4717,77100.0,INLAND --120.86,37.76,32.0,964.0,198.0,623.0,201.0,3.0917,88900.0,INLAND --120.87,37.76,16.0,2022.0,413.0,1126.0,408.0,2.5655,116400.0,INLAND --120.85,37.75,26.0,28.0,4.0,9.0,5.0,1.625,85000.0,INLAND --120.85,37.78,15.0,3553.0,659.0,1684.0,611.0,3.3169,131200.0,INLAND --120.85,37.78,25.0,421.0,,303.0,106.0,2.2679,71300.0,INLAND --120.85,37.77,35.0,404.0,96.0,261.0,100.0,2.4583,75000.0,INLAND --120.85,37.78,30.0,1120.0,248.0,609.0,237.0,2.2386,87200.0,INLAND --120.83,37.77,20.0,1717.0,403.0,1062.0,401.0,1.6759,116700.0,INLAND --120.85,37.77,10.0,423.0,110.0,295.0,94.0,1.3583,85200.0,INLAND --120.83,37.76,21.0,435.0,96.0,219.0,83.0,2.9125,112500.0,INLAND --120.83,37.79,16.0,893.0,164.0,548.0,155.0,3.6875,121900.0,INLAND --120.93,37.74,37.0,1956.0,402.0,1265.0,397.0,2.3023,91900.0,INLAND --120.94,37.74,35.0,1166.0,268.0,515.0,266.0,2.3469,90200.0,INLAND --120.95,37.74,18.0,3453.0,666.0,1958.0,601.0,3.0043,156500.0,INLAND --120.95,37.73,12.0,3609.0,712.0,2650.0,742.0,2.8565,92700.0,INLAND --120.93,37.73,14.0,2799.0,,2294.0,596.0,2.6343,81500.0,INLAND --120.93,37.72,18.0,391.0,71.0,247.0,71.0,4.3864,179500.0,INLAND --120.98,37.71,22.0,434.0,89.0,195.0,86.0,2.4211,268800.0,INLAND --120.99,37.7,14.0,9849.0,1887.0,4356.0,1780.0,3.5877,160900.0,INLAND --120.97,37.69,14.0,5514.0,909.0,2819.0,970.0,3.8598,174400.0,INLAND --120.91,37.74,19.0,1690.0,327.0,855.0,296.0,3.25,176700.0,INLAND --120.91,37.73,31.0,840.0,154.0,429.0,150.0,2.4063,170200.0,INLAND --120.92,37.7,24.0,527.0,112.0,270.0,112.0,1.6172,156300.0,INLAND --120.94,37.7,25.0,1005.0,159.0,390.0,139.0,4.4,174100.0,INLAND --120.97,37.73,19.0,3725.0,543.0,1412.0,463.0,5.7476,248600.0,INLAND --121.01,37.74,14.0,2368.0,297.0,796.0,301.0,8.7783,435000.0,INLAND --121.01,37.72,23.0,1373.0,264.0,677.0,245.0,2.5486,161100.0,INLAND --121.06,37.73,5.0,2256.0,420.0,1246.0,397.0,4.9236,155900.0,INLAND --121.07,37.71,39.0,223.0,37.0,92.0,37.0,3.375,212500.0,INLAND --121.08,37.69,19.0,6473.0,1212.0,3559.0,1123.0,3.2246,129300.0,INLAND --121.14,37.7,29.0,1343.0,223.0,751.0,225.0,3.2391,187500.0,INLAND --121.09,37.67,30.0,1653.0,285.0,800.0,291.0,3.3482,220000.0,INLAND --121.09,37.61,42.0,1787.0,296.0,921.0,287.0,3.8864,171400.0,INLAND --121.18,37.64,43.0,1244.0,209.0,611.0,197.0,2.875,187500.0,INLAND --121.06,37.7,7.0,9374.0,1847.0,4827.0,1722.0,3.462,151900.0,INLAND --121.04,37.7,52.0,349.0,59.0,121.0,40.0,3.3036,197500.0,INLAND --121.04,37.69,5.0,9601.0,1639.0,4449.0,1575.0,4.5332,195500.0,INLAND --121.02,37.71,25.0,207.0,41.0,87.0,43.0,3.6023,131300.0,INLAND --121.03,37.69,6.0,2607.0,557.0,1266.0,475.0,3.4632,137700.0,INLAND --121.02,37.7,16.0,3476.0,650.0,2126.0,665.0,3.3438,125400.0,INLAND --121.0,37.71,52.0,102.0,23.0,35.0,33.0,2.25,175000.0,INLAND --121.01,37.7,12.0,9148.0,1906.0,4656.0,1853.0,3.2447,142200.0,INLAND --121.06,37.67,31.0,906.0,146.0,383.0,129.0,3.4167,196900.0,INLAND --121.06,37.66,6.0,3655.0,598.0,1993.0,596.0,4.6053,150100.0,INLAND --121.05,37.65,5.0,3096.0,545.0,1760.0,519.0,4.5701,146400.0,INLAND --121.04,37.66,11.0,1658.0,301.0,913.0,298.0,4.1705,162800.0,INLAND --121.04,37.65,8.0,1959.0,379.0,995.0,365.0,3.3567,129100.0,INLAND --121.03,37.65,37.0,375.0,58.0,120.0,37.0,3.9844,150000.0,INLAND --121.04,37.67,16.0,19.0,19.0,166.0,9.0,0.536,162500.0,INLAND --121.0,37.69,18.0,3469.0,661.0,1452.0,628.0,3.4079,147500.0,INLAND --121.01,37.69,20.0,3275.0,760.0,1538.0,705.0,2.48,135600.0,INLAND --121.01,37.68,33.0,828.0,123.0,373.0,133.0,5.5,146200.0,INLAND --121.0,37.68,15.0,1232.0,180.0,408.0,196.0,6.9682,182400.0,INLAND --121.0,37.68,29.0,2911.0,445.0,1170.0,460.0,4.9904,158100.0,INLAND --121.01,37.68,33.0,3230.0,587.0,1579.0,560.0,3.5775,109700.0,INLAND --121.0,37.67,26.0,90.0,18.0,47.0,18.0,1.125,87500.0,INLAND --121.04,37.68,18.0,5129.0,1171.0,3622.0,1128.0,2.0272,92700.0,INLAND --121.04,37.68,28.0,1909.0,398.0,1140.0,380.0,2.3783,81400.0,INLAND --121.02,37.69,19.0,3814.0,790.0,2219.0,804.0,3.5208,145000.0,INLAND --121.03,37.69,5.0,4034.0,771.0,1967.0,742.0,3.8065,146000.0,INLAND --121.04,37.69,9.0,6333.0,1355.0,3265.0,1265.0,3.0217,160900.0,INLAND --121.02,37.68,25.0,3262.0,588.0,1834.0,578.0,3.996,114500.0,INLAND --121.03,37.68,20.0,3204.0,625.0,2016.0,605.0,2.6567,110400.0,INLAND --121.03,37.68,27.0,1956.0,327.0,1004.0,307.0,3.7857,110500.0,INLAND --121.02,37.68,28.0,2875.0,560.0,1608.0,558.0,3.5489,106400.0,INLAND --120.94,37.68,4.0,13315.0,2424.0,6420.0,2289.0,4.2471,162100.0,INLAND --120.95,37.67,15.0,3062.0,584.0,1624.0,538.0,4.3864,137600.0,INLAND --120.96,37.66,16.0,4961.0,902.0,2654.0,804.0,4.2823,138300.0,INLAND --120.95,37.66,16.0,4478.0,647.0,1990.0,672.0,5.1473,188400.0,INLAND --120.95,37.65,37.0,136.0,20.0,72.0,22.0,2.2279,225000.0,INLAND --120.93,37.67,6.0,3491.0,657.0,2075.0,644.0,3.3844,138500.0,INLAND --120.93,37.66,10.0,7566.0,1348.0,3227.0,1199.0,4.744,148100.0,INLAND --120.94,37.66,17.0,1147.0,140.0,327.0,136.0,6.8654,290500.0,INLAND --120.98,37.69,18.0,3176.0,468.0,1296.0,471.0,5.5684,185100.0,INLAND --120.99,37.69,25.0,2773.0,384.0,1060.0,381.0,6.4788,199400.0,INLAND --120.99,37.68,30.0,1975.0,375.0,732.0,326.0,2.6932,94900.0,INLAND --120.98,37.68,24.0,705.0,114.0,347.0,141.0,3.1912,149600.0,INLAND --120.97,37.69,16.0,2793.0,476.0,1279.0,477.0,3.4667,160900.0,INLAND --120.97,37.69,15.0,4065.0,841.0,1986.0,680.0,3.072,114300.0,INLAND --120.97,37.68,16.0,2349.0,446.0,1302.0,392.0,3.1625,130300.0,INLAND --120.97,37.68,9.0,1114.0,172.0,529.0,174.0,4.7159,163700.0,INLAND --120.98,37.68,27.0,4006.0,762.0,1806.0,718.0,3.1848,112800.0,INLAND --120.99,37.68,28.0,3269.0,647.0,1595.0,617.0,2.2336,112700.0,INLAND --120.99,37.67,16.0,568.0,124.0,307.0,116.0,2.1518,107400.0,INLAND --120.98,37.67,13.0,1221.0,260.0,682.0,275.0,3.65,155500.0,INLAND --120.97,37.68,16.0,2493.0,535.0,1370.0,504.0,3.3368,121200.0,INLAND --120.98,37.68,18.0,4197.0,1006.0,2203.0,874.0,2.166,118600.0,INLAND --120.97,37.67,16.0,1499.0,250.0,1292.0,271.0,4.3851,117300.0,INLAND --120.96,37.67,17.0,2434.0,511.0,1558.0,546.0,2.9219,114300.0,INLAND --120.96,37.67,18.0,1442.0,229.0,538.0,220.0,4.2969,163200.0,INLAND --120.97,37.67,31.0,1648.0,293.0,792.0,294.0,2.4,121500.0,INLAND --120.97,37.66,19.0,1974.0,393.0,799.0,377.0,3.1286,137500.0,INLAND --120.96,37.66,15.0,2485.0,434.0,1296.0,434.0,3.8542,145200.0,INLAND --120.97,37.66,24.0,2930.0,588.0,1448.0,570.0,3.5395,127900.0,INLAND --120.97,37.66,21.0,2760.0,632.0,1260.0,576.0,2.0227,179800.0,INLAND --120.98,37.66,33.0,1959.0,342.0,984.0,356.0,4.5208,114200.0,INLAND --120.98,37.66,40.0,3012.0,616.0,1423.0,595.0,2.6346,100600.0,INLAND --120.98,37.65,36.0,826.0,167.0,432.0,150.0,2.5,103100.0,INLAND --120.98,37.66,10.0,934.0,,401.0,255.0,0.9336,127100.0,INLAND --120.98,37.67,33.0,1433.0,298.0,824.0,302.0,2.7621,109100.0,INLAND --120.99,37.67,28.0,1768.0,423.0,1066.0,392.0,1.8315,90500.0,INLAND --120.99,37.66,30.0,1718.0,395.0,914.0,400.0,1.933,107000.0,INLAND --120.99,37.66,39.0,1748.0,329.0,831.0,302.0,2.5938,135600.0,INLAND --120.99,37.66,46.0,1750.0,347.0,754.0,356.0,2.9137,106000.0,INLAND --120.99,37.65,44.0,2848.0,623.0,1408.0,576.0,2.1487,86600.0,INLAND --121.0,37.65,52.0,3887.0,803.0,1768.0,779.0,2.5089,119000.0,INLAND --121.0,37.67,27.0,2278.0,479.0,995.0,449.0,2.5148,110200.0,INLAND --121.01,37.67,37.0,2483.0,459.0,1072.0,445.0,3.0721,108100.0,INLAND --121.01,37.66,36.0,3679.0,613.0,1366.0,581.0,4.5,151400.0,INLAND --121.0,37.66,43.0,2369.0,413.0,944.0,422.0,3.2632,138100.0,INLAND --121.0,37.66,43.0,2039.0,331.0,875.0,342.0,3.9844,152000.0,INLAND --121.01,37.65,47.0,1713.0,334.0,570.0,297.0,2.1969,149400.0,INLAND --121.02,37.67,32.0,3951.0,797.0,1916.0,740.0,2.6722,111500.0,INLAND --121.03,37.67,24.0,2162.0,459.0,1468.0,441.0,3.1857,98300.0,INLAND --121.03,37.66,31.0,887.0,217.0,614.0,199.0,2.1528,75500.0,INLAND --121.02,37.66,36.0,3495.0,641.0,1688.0,684.0,3.1568,109900.0,INLAND --121.02,37.66,28.0,1437.0,400.0,806.0,338.0,1.6078,125000.0,INLAND --121.02,37.65,20.0,2973.0,620.0,1996.0,570.0,3.0645,106000.0,INLAND --121.03,37.64,22.0,2001.0,387.0,1520.0,387.0,3.148,102300.0,INLAND --121.03,37.63,5.0,2881.0,584.0,1490.0,570.0,3.0398,120000.0,INLAND --121.05,37.64,33.0,1438.0,237.0,569.0,208.0,3.3516,150000.0,INLAND --121.05,37.62,37.0,1043.0,196.0,555.0,197.0,3.4125,125000.0,INLAND --121.02,37.64,42.0,1437.0,307.0,1035.0,284.0,2.1036,88300.0,INLAND --121.02,37.63,35.0,1591.0,364.0,1290.0,352.0,1.564,81800.0,INLAND --121.02,37.62,30.0,1721.0,399.0,1878.0,382.0,2.5363,83900.0,INLAND --121.02,37.61,33.0,1469.0,370.0,1318.0,349.0,1.7104,59000.0,INLAND --121.03,37.62,43.0,1241.0,240.0,612.0,266.0,2.8194,81300.0,INLAND --121.03,37.62,46.0,2331.0,508.0,1210.0,484.0,2.5313,77700.0,INLAND --121.02,37.62,14.0,5737.0,1286.0,4722.0,1210.0,1.6731,95800.0,INLAND --121.01,37.64,52.0,201.0,35.0,74.0,22.0,1.3036,75000.0,INLAND --121.01,37.64,36.0,1981.0,507.0,1998.0,468.0,1.9013,69900.0,INLAND --121.01,37.64,33.0,693.0,207.0,598.0,192.0,1.0217,81300.0,INLAND --121.0,37.64,43.0,311.0,95.0,293.0,94.0,1.2902,67500.0,INLAND --120.99,37.64,41.0,1580.0,385.0,881.0,361.0,2.7538,99600.0,INLAND --120.99,37.64,50.0,683.0,189.0,459.0,195.0,1.8162,70000.0,INLAND --121.0,37.65,17.0,484.0,202.0,198.0,204.0,0.6825,187500.0,INLAND --121.01,37.65,52.0,178.0,53.0,152.0,62.0,0.4999,82500.0,INLAND --121.0,37.64,19.0,121.0,41.0,658.0,41.0,0.9573,162500.0,INLAND --121.0,37.64,52.0,530.0,177.0,325.0,158.0,1.1875,90600.0,INLAND --120.97,37.65,16.0,3960.0,716.0,1776.0,724.0,3.9886,137500.0,INLAND --120.96,37.64,41.0,1467.0,328.0,673.0,310.0,2.7917,90700.0,INLAND --120.97,37.64,42.0,2359.0,504.0,1131.0,480.0,2.0833,95500.0,INLAND --120.98,37.65,40.0,422.0,63.0,158.0,63.0,7.3841,172200.0,INLAND --120.98,37.64,45.0,1913.0,335.0,839.0,333.0,3.1397,110700.0,INLAND --120.98,37.64,40.0,1791.0,359.0,679.0,322.0,2.1458,130300.0,INLAND --120.9,37.66,19.0,3377.0,669.0,2426.0,663.0,2.9783,82500.0,INLAND --120.91,37.66,36.0,1320.0,255.0,720.0,232.0,2.6523,76300.0,INLAND --120.9,37.64,26.0,1762.0,418.0,855.0,308.0,1.6767,81300.0,INLAND --120.94,37.65,13.0,5075.0,978.0,3033.0,838.0,3.0577,119000.0,INLAND --120.93,37.65,1.0,2254.0,328.0,402.0,112.0,4.25,189200.0,INLAND --120.92,37.65,23.0,505.0,124.0,163.0,129.0,1.3696,275000.0,INLAND --120.95,37.65,14.0,5200.0,1119.0,3221.0,1102.0,2.6964,107000.0,INLAND --120.96,37.65,34.0,1700.0,325.0,972.0,326.0,2.4485,95500.0,INLAND --120.95,37.64,32.0,3487.0,740.0,1957.0,685.0,2.7209,88300.0,INLAND --120.94,37.63,43.0,244.0,52.0,176.0,60.0,1.425,69400.0,INLAND --120.92,37.63,39.0,45.0,8.0,22.0,9.0,1.7679,450000.0,INLAND --120.96,37.64,36.0,60.0,12.0,51.0,14.0,3.625,67500.0,INLAND --120.98,37.64,39.0,2617.0,659.0,2052.0,642.0,1.6952,65000.0,INLAND --120.97,37.63,39.0,2360.0,607.0,2047.0,605.0,1.7054,58800.0,INLAND --121.0,37.63,31.0,215.0,62.0,192.0,66.0,1.75,73800.0,INLAND --121.0,37.63,49.0,2051.0,500.0,1525.0,467.0,1.59,80900.0,INLAND --121.01,37.63,41.0,2764.0,639.0,2122.0,600.0,1.9643,74900.0,INLAND --121.01,37.62,35.0,568.0,150.0,622.0,145.0,1.8167,79500.0,INLAND --121.01,37.62,35.0,2074.0,477.0,1687.0,431.0,2.0885,73700.0,INLAND --120.98,37.62,26.0,3819.0,955.0,3010.0,932.0,1.9206,81300.0,INLAND --120.99,37.63,21.0,319.0,120.0,276.0,85.0,2.4792,60000.0,INLAND --121.0,37.62,28.0,1153.0,420.0,1043.0,357.0,1.0801,75000.0,INLAND --120.99,37.62,37.0,2014.0,505.0,1787.0,515.0,1.5515,54100.0,INLAND --121.01,37.61,5.0,3655.0,696.0,2316.0,647.0,3.4703,129300.0,INLAND --121.0,37.61,36.0,2647.0,604.0,2045.0,550.0,2.273,62900.0,INLAND --121.0,37.6,22.0,4412.0,925.0,3116.0,817.0,2.6899,82100.0,INLAND --121.02,37.6,33.0,1009.0,238.0,1027.0,246.0,2.5993,68000.0,INLAND --120.98,37.6,36.0,1437.0,,1073.0,320.0,2.1779,58400.0,INLAND --120.99,37.61,39.0,512.0,132.0,443.0,127.0,1.2857,60000.0,INLAND --120.98,37.59,2.0,5042.0,834.0,2784.0,787.0,4.6484,145900.0,INLAND --120.96,37.59,11.0,4236.0,879.0,2410.0,850.0,2.3849,122000.0,INLAND --120.95,37.59,29.0,1727.0,439.0,1063.0,386.0,1.8929,63600.0,INLAND --120.94,37.61,13.0,3309.0,603.0,1796.0,555.0,3.8372,129300.0,INLAND --120.95,37.61,17.0,4054.0,654.0,2034.0,667.0,4.6833,142200.0,INLAND --120.96,37.61,23.0,3497.0,887.0,2467.0,816.0,1.9444,93400.0,INLAND --120.97,37.61,16.0,1326.0,375.0,884.0,375.0,1.871,103900.0,INLAND --120.95,37.6,35.0,1493.0,278.0,729.0,268.0,2.9821,97400.0,INLAND --120.94,37.6,30.0,3257.0,574.0,1804.0,588.0,3.5331,102900.0,INLAND --120.95,37.59,43.0,1561.0,354.0,862.0,332.0,1.8466,81500.0,INLAND --120.94,37.59,16.0,3964.0,824.0,2622.0,766.0,2.3152,111300.0,INLAND --120.94,37.58,19.0,1549.0,369.0,770.0,370.0,2.0493,99500.0,INLAND --120.95,37.62,11.0,4981.0,814.0,1934.0,686.0,3.7041,174800.0,INLAND --120.97,37.62,7.0,8489.0,1673.0,5807.0,1575.0,2.9451,127800.0,INLAND --120.54,37.68,18.0,335.0,76.0,189.0,67.0,1.2273,87500.0,INLAND --120.64,37.7,16.0,284.0,51.0,239.0,46.0,1.8958,137500.0,INLAND --120.75,37.69,24.0,2282.0,423.0,1167.0,398.0,3.8214,116100.0,INLAND --120.86,37.69,5.0,6660.0,1217.0,3012.0,1087.0,3.0809,143600.0,INLAND --120.87,37.64,40.0,1010.0,155.0,488.0,157.0,3.8984,170500.0,INLAND --120.82,37.64,20.0,3375.0,630.0,1505.0,598.0,2.69,201300.0,INLAND --120.77,37.64,8.0,3294.0,667.0,2277.0,652.0,2.6417,96800.0,INLAND --120.76,37.65,25.0,3214.0,682.0,2319.0,640.0,2.0385,84300.0,INLAND --120.46,37.65,17.0,315.0,89.0,130.0,58.0,1.4464,79200.0,INLAND --120.59,37.59,36.0,291.0,48.0,124.0,47.0,5.6945,154200.0,INLAND --120.69,37.59,27.0,1170.0,227.0,660.0,222.0,2.3906,81800.0,INLAND --120.76,37.61,30.0,816.0,159.0,531.0,147.0,3.2604,87900.0,INLAND --120.8,37.61,30.0,918.0,154.0,469.0,139.0,3.9688,175000.0,INLAND --120.76,37.58,35.0,1395.0,264.0,756.0,253.0,3.6181,178600.0,INLAND --120.83,37.58,30.0,1527.0,256.0,757.0,240.0,3.6629,171400.0,INLAND --120.85,37.57,27.0,819.0,157.0,451.0,150.0,3.4934,193800.0,INLAND --120.88,37.57,22.0,1440.0,267.0,774.0,249.0,3.9821,204300.0,INLAND --120.87,37.62,30.0,455.0,70.0,220.0,69.0,4.8958,142500.0,INLAND --120.87,37.6,32.0,4579.0,914.0,2742.0,856.0,2.6619,86200.0,INLAND --120.86,37.6,25.0,1178.0,206.0,709.0,214.0,4.5625,133600.0,INLAND --120.89,37.59,33.0,1016.0,206.0,617.0,209.0,2.151,195800.0,INLAND --120.92,37.6,12.0,4485.0,805.0,2445.0,832.0,3.7611,123100.0,INLAND --120.92,37.59,26.0,1705.0,279.0,642.0,236.0,2.6591,180500.0,INLAND --120.91,37.57,26.0,3396.0,705.0,2446.0,694.0,2.0521,65400.0,INLAND --120.93,37.56,17.0,1812.0,361.0,672.0,334.0,1.55,166100.0,INLAND --120.95,37.57,29.0,1179.0,249.0,672.0,243.0,3.1125,154800.0,INLAND --120.98,37.57,27.0,925.0,176.0,449.0,168.0,2.6406,129700.0,INLAND --121.02,37.58,36.0,1285.0,270.0,706.0,273.0,1.7169,121400.0,INLAND --121.04,37.6,27.0,958.0,184.0,580.0,177.0,2.1875,82800.0,INLAND --121.09,37.56,32.0,1717.0,325.0,1356.0,307.0,2.6705,91900.0,INLAND --121.03,37.55,32.0,946.0,198.0,624.0,173.0,1.9728,97900.0,INLAND --121.04,37.5,33.0,613.0,123.0,343.0,116.0,3.1875,129200.0,INLAND --121.02,37.48,26.0,467.0,,244.0,83.0,4.1346,187500.0,INLAND --121.12,37.48,5.0,4109.0,820.0,3062.0,713.0,3.2396,125200.0,INLAND --121.14,37.47,38.0,2427.0,450.0,1272.0,474.0,2.8833,115200.0,INLAND --121.14,37.48,6.0,1772.0,332.0,1011.0,331.0,3.7045,128100.0,INLAND --121.13,37.47,37.0,1995.0,448.0,1559.0,443.0,2.1833,92700.0,INLAND --121.11,37.47,12.0,2263.0,410.0,913.0,330.0,3.5795,145600.0,INLAND --121.14,37.46,4.0,2919.0,503.0,1592.0,491.0,5.2452,161900.0,INLAND --121.2,37.6,30.0,2110.0,406.0,1301.0,345.0,2.3173,86500.0,INLAND --121.27,37.56,31.0,1223.0,330.0,1067.0,245.0,2.8558,100000.0,INLAND --121.31,37.44,33.0,69.0,28.0,47.0,14.0,0.536,112500.0,INLAND --121.21,37.5,34.0,294.0,49.0,147.0,47.0,3.0,162500.0,INLAND --121.14,37.52,37.0,1358.0,231.0,586.0,214.0,3.1645,170800.0,INLAND --121.06,37.45,33.0,1401.0,299.0,915.0,282.0,3.4464,162500.0,INLAND --121.06,37.42,52.0,504.0,96.0,295.0,97.0,3.5,73500.0,INLAND --121.11,37.43,42.0,412.0,75.0,227.0,75.0,2.5,74200.0,INLAND --121.29,37.33,36.0,48.0,12.0,27.0,8.0,4.0,75000.0,INLAND --121.09,37.33,40.0,524.0,112.0,329.0,96.0,1.7188,112500.0,INLAND --121.01,37.37,41.0,1045.0,233.0,632.0,230.0,2.3583,95000.0,INLAND --121.01,37.33,17.0,1926.0,410.0,1054.0,321.0,1.6214,71500.0,INLAND --121.03,37.33,27.0,1333.0,230.0,730.0,229.0,3.06,106000.0,INLAND --121.03,37.32,42.0,2905.0,561.0,1457.0,551.0,2.2566,82100.0,INLAND --121.04,37.3,6.0,2657.0,486.0,1409.0,392.0,3.3824,115500.0,INLAND --120.84,37.53,14.0,3643.0,706.0,2070.0,697.0,3.1523,141800.0,INLAND --120.86,37.53,18.0,2829.0,732.0,1751.0,712.0,1.6445,156900.0,INLAND --120.88,37.53,18.0,239.0,39.0,92.0,36.0,5.3168,175000.0,INLAND --120.85,37.55,45.0,350.0,62.0,187.0,63.0,2.5938,275000.0,INLAND --120.89,37.54,30.0,509.0,115.0,275.0,115.0,2.2679,250000.0,INLAND --120.89,37.52,42.0,1200.0,221.0,647.0,192.0,2.5402,157500.0,INLAND --120.96,37.54,29.0,1468.0,245.0,747.0,231.0,3.4643,125000.0,INLAND --120.96,37.51,30.0,1288.0,237.0,720.0,233.0,2.3864,139100.0,INLAND --120.96,37.48,32.0,1256.0,212.0,682.0,236.0,2.9844,135900.0,INLAND --120.97,37.43,27.0,1380.0,,810.0,262.0,2.1875,137500.0,INLAND --120.8,37.55,18.0,1802.0,335.0,1110.0,329.0,3.1641,96300.0,INLAND --120.79,37.53,20.0,1417.0,263.0,853.0,263.0,3.3083,108300.0,INLAND --120.8,37.53,29.0,1162.0,254.0,726.0,225.0,2.1932,90600.0,INLAND --120.81,37.53,15.0,570.0,123.0,189.0,107.0,1.875,181300.0,INLAND --120.82,37.54,20.0,707.0,114.0,282.0,86.0,6.1324,164800.0,INLAND --120.8,37.52,13.0,2920.0,481.0,1602.0,490.0,3.9286,145800.0,INLAND --120.72,37.54,17.0,729.0,134.0,431.0,121.0,4.2188,131300.0,INLAND --120.79,37.49,44.0,1186.0,225.0,687.0,234.0,3.4167,160700.0,INLAND --120.84,37.47,11.0,2285.0,499.0,1468.0,471.0,2.7857,110300.0,INLAND --120.89,37.48,27.0,1118.0,195.0,647.0,209.0,2.9135,159400.0,INLAND --120.89,37.45,29.0,1940.0,337.0,1070.0,332.0,3.6597,145600.0,INLAND --120.88,37.52,2.0,1871.0,409.0,707.0,256.0,2.6103,133600.0,INLAND --120.87,37.5,7.0,4966.0,985.0,2431.0,904.0,3.1042,122500.0,INLAND --120.86,37.5,34.0,4272.0,996.0,2916.0,962.0,1.9829,82800.0,INLAND --120.85,37.49,39.0,2840.0,733.0,2606.0,737.0,1.9429,76400.0,INLAND --120.86,37.49,37.0,1084.0,271.0,893.0,236.0,1.6213,69500.0,INLAND --120.86,37.49,22.0,2140.0,445.0,1441.0,409.0,2.4706,89400.0,INLAND --120.85,37.49,42.0,264.0,72.0,310.0,70.0,1.4063,61500.0,INLAND --120.84,37.48,10.0,2874.0,612.0,1960.0,596.0,2.7381,104600.0,INLAND --120.86,37.52,9.0,9885.0,1871.0,5372.0,1843.0,3.4821,127100.0,INLAND --120.85,37.51,5.0,2899.0,745.0,1593.0,633.0,2.2292,127500.0,INLAND --120.85,37.51,15.0,1131.0,285.0,728.0,281.0,1.5531,93100.0,INLAND --120.84,37.5,47.0,2310.0,484.0,1126.0,447.0,2.2083,97300.0,INLAND --120.85,37.5,52.0,1724.0,352.0,922.0,348.0,1.7227,85700.0,INLAND --120.84,37.49,25.0,2383.0,576.0,1234.0,583.0,1.4529,86100.0,INLAND --120.82,37.49,25.0,1611.0,285.0,882.0,261.0,3.5547,122400.0,INLAND --120.82,37.51,17.0,1664.0,253.0,736.0,254.0,4.4083,165800.0,INLAND --120.83,37.51,34.0,3078.0,477.0,1226.0,487.0,4.601,150000.0,INLAND --120.82,37.5,21.0,2974.0,495.0,1313.0,461.0,4.4886,135400.0,INLAND --120.83,37.5,30.0,1340.0,244.0,631.0,231.0,3.375,118500.0,INLAND --120.84,37.51,8.0,1191.0,242.0,688.0,260.0,2.7243,138400.0,INLAND --120.84,37.51,14.0,6337.0,1593.0,3909.0,1480.0,2.0643,106500.0,INLAND --120.83,37.52,6.0,1488.0,252.0,773.0,259.0,4.1859,150000.0,INLAND --120.84,37.52,16.0,4527.0,887.0,2531.0,825.0,3.7065,124800.0,INLAND --120.84,37.51,20.0,1901.0,313.0,1258.0,320.0,3.8958,126800.0,INLAND --120.83,37.51,13.0,3795.0,604.0,1639.0,609.0,4.6635,198400.0,INLAND --121.62,39.16,7.0,4480.0,776.0,2271.0,767.0,3.809,110700.0,INLAND --121.63,39.16,7.0,1879.0,444.0,1065.0,410.0,2.4183,103800.0,INLAND --121.63,39.15,27.0,336.0,60.0,195.0,68.0,5.3946,71800.0,INLAND --121.62,39.16,16.0,2037.0,464.0,1267.0,451.0,2.4556,97100.0,INLAND --121.63,39.15,16.0,1547.0,418.0,940.0,400.0,1.5613,72500.0,INLAND --121.63,39.15,27.0,2991.0,637.0,1419.0,606.0,1.8849,73500.0,INLAND --121.62,39.15,36.0,2321.0,455.0,1168.0,489.0,3.0962,74000.0,INLAND --121.62,39.15,23.0,1984.0,528.0,1043.0,452.0,1.9375,65300.0,INLAND --121.63,39.14,39.0,1874.0,411.0,822.0,377.0,2.5038,68300.0,INLAND --121.62,39.14,41.0,2183.0,559.0,1202.0,506.0,1.6902,61500.0,INLAND --121.61,39.14,44.0,2035.0,476.0,1030.0,453.0,1.4661,65200.0,INLAND --121.62,39.13,41.0,1317.0,309.0,856.0,337.0,1.6719,64100.0,INLAND --121.63,39.13,26.0,2355.0,531.0,1047.0,497.0,1.8208,79500.0,INLAND --121.62,39.13,41.0,1147.0,243.0,583.0,239.0,2.2431,63400.0,INLAND --121.61,39.13,21.0,1432.0,328.0,933.0,336.0,1.6823,83800.0,INLAND --121.63,39.12,34.0,1991.0,348.0,804.0,344.0,3.4492,98800.0,INLAND --121.62,39.12,35.0,2787.0,587.0,1431.0,601.0,2.5469,65900.0,INLAND --121.61,39.13,33.0,2559.0,539.0,1583.0,504.0,1.4727,53000.0,INLAND --121.6,39.12,21.0,1299.0,338.0,1494.0,311.0,1.3348,225000.0,INLAND --121.62,39.12,26.0,1405.0,204.0,627.0,215.0,4.2188,94200.0,INLAND --121.63,39.12,32.0,2574.0,425.0,1099.0,391.0,4.3864,117500.0,INLAND --121.62,39.11,5.0,2320.0,502.0,1245.0,489.0,3.2465,97200.0,INLAND --121.63,39.1,22.0,3585.0,548.0,1757.0,577.0,4.174,100100.0,INLAND --121.62,39.11,11.0,3519.0,577.0,1459.0,549.0,4.2792,123800.0,INLAND --121.62,39.09,21.0,2693.0,481.0,1337.0,435.0,3.8534,99700.0,INLAND --121.68,39.13,17.0,1969.0,297.0,717.0,268.0,3.4698,179700.0,INLAND --121.65,39.13,11.0,4833.0,944.0,2336.0,841.0,2.6842,89100.0,INLAND --121.68,39.11,19.0,1366.0,220.0,596.0,203.0,4.0625,141700.0,INLAND --121.64,39.12,13.0,6408.0,1087.0,3294.0,1106.0,4.2656,110700.0,INLAND --121.64,39.11,18.0,3212.0,542.0,1817.0,508.0,3.3793,92900.0,INLAND --121.66,39.09,27.0,2098.0,372.0,1090.0,333.0,4.45,96200.0,INLAND --121.67,39.18,26.0,2121.0,375.0,1125.0,366.0,3.3958,94600.0,INLAND --121.68,39.15,14.0,2774.0,451.0,1292.0,428.0,4.3833,115200.0,INLAND --121.67,39.14,22.0,2264.0,390.0,1056.0,403.0,3.6111,112300.0,INLAND --121.63,39.18,13.0,1907.0,347.0,821.0,367.0,2.0978,134000.0,INLAND --121.66,39.15,22.0,2144.0,376.0,1200.0,370.0,3.4426,102400.0,INLAND --121.65,39.16,16.0,5022.0,1103.0,2087.0,956.0,2.3963,114800.0,INLAND --121.64,39.15,15.0,2659.0,396.0,1159.0,407.0,5.234,124900.0,INLAND --121.71,39.25,37.0,1871.0,321.0,806.0,294.0,4.0,101400.0,INLAND --121.68,39.29,29.0,1860.0,400.0,1137.0,365.0,1.5281,61600.0,INLAND --121.64,39.28,25.0,2857.0,662.0,2076.0,685.0,1.8095,64100.0,INLAND --121.64,39.22,37.0,1189.0,248.0,627.0,219.0,3.8611,100000.0,INLAND --121.67,39.26,29.0,3041.0,683.0,2106.0,687.0,1.6315,58000.0,INLAND --121.83,39.23,25.0,3819.0,702.0,1983.0,658.0,2.4464,72500.0,INLAND --121.74,39.15,20.0,2302.0,412.0,1205.0,399.0,2.8,71200.0,INLAND --121.83,39.1,42.0,1282.0,198.0,451.0,159.0,3.2917,97900.0,INLAND --121.91,39.14,45.0,845.0,155.0,343.0,136.0,2.125,62000.0,INLAND --121.76,38.94,48.0,540.0,110.0,234.0,74.0,3.6111,67500.0,INLAND --121.67,38.85,46.0,645.0,131.0,410.0,122.0,1.7417,110400.0,INLAND --121.69,38.87,38.0,412.0,93.0,304.0,95.0,2.6597,86000.0,INLAND --121.62,38.96,36.0,1826.0,329.0,1068.0,318.0,1.9797,118800.0,INLAND --121.7,39.07,26.0,2668.0,510.0,1437.0,505.0,3.3125,100000.0,INLAND --121.47,38.95,34.0,2129.0,350.0,969.0,314.0,2.7039,106300.0,INLAND --121.52,38.9,32.0,1650.0,313.0,802.0,284.0,2.9048,98200.0,INLAND --121.58,38.81,25.0,778.0,135.0,340.0,155.0,1.7857,258300.0,INLAND --121.51,38.79,29.0,1716.0,323.0,850.0,282.0,2.9324,137500.0,INLAND --122.1,40.05,26.0,633.0,129.0,305.0,140.0,2.1827,72700.0,INLAND --122.08,40.09,19.0,2611.0,503.0,1185.0,483.0,2.3657,94000.0,INLAND --122.12,40.14,34.0,1950.0,407.0,1029.0,376.0,2.5197,82300.0,INLAND --122.17,40.2,28.0,1782.0,334.0,873.0,311.0,3.3594,79100.0,INLAND --121.8,40.34,26.0,4815.0,910.0,1341.0,539.0,2.881,79800.0,INLAND --121.78,40.12,14.0,388.0,108.0,35.0,17.0,6.1359,106300.0,INLAND --122.42,40.32,16.0,1978.0,375.0,961.0,333.0,2.6827,83900.0,INLAND --122.34,40.32,12.0,3848.0,689.0,2008.0,683.0,2.6352,92200.0,INLAND --122.23,40.32,10.0,2336.0,426.0,1003.0,368.0,3.0833,81300.0,INLAND --122.38,40.09,16.0,2077.0,388.0,1155.0,389.0,3.1361,84800.0,INLAND --122.57,39.9,15.0,3873.0,810.0,1697.0,627.0,2.4555,55600.0,INLAND --122.72,40.17,16.0,396.0,78.0,188.0,72.0,1.3889,87500.0,INLAND --122.2,40.26,15.0,2102.0,358.0,957.0,371.0,3.1908,137900.0,INLAND --122.38,40.2,16.0,2722.0,511.0,1366.0,495.0,2.8447,87700.0,INLAND --122.35,40.25,10.0,1621.0,318.0,866.0,283.0,3.5,104300.0,INLAND --122.26,40.19,35.0,2467.0,469.0,1194.0,444.0,2.0425,63700.0,INLAND --122.24,40.19,29.0,1912.0,336.0,859.0,325.0,3.7,70500.0,INLAND --122.23,40.2,17.0,762.0,138.0,322.0,139.0,4.2917,128800.0,INLAND --122.24,40.18,39.0,2191.0,493.0,1307.0,499.0,1.6483,60800.0,INLAND --122.24,40.17,51.0,2378.0,584.0,1083.0,494.0,1.577,51900.0,INLAND --122.25,40.17,47.0,1554.0,308.0,846.0,301.0,1.8077,54100.0,INLAND --122.22,40.18,13.0,3719.0,803.0,1754.0,764.0,2.3517,88900.0,INLAND --122.21,40.2,19.0,3404.0,731.0,1421.0,683.0,2.6149,84400.0,INLAND --122.19,40.2,30.0,2750.0,476.0,1296.0,464.0,3.5305,73600.0,INLAND --122.21,40.18,30.0,744.0,156.0,410.0,165.0,2.1898,63200.0,INLAND --122.25,40.17,19.0,3182.0,630.0,1741.0,642.0,1.9727,64900.0,INLAND --122.24,40.16,19.0,2500.0,509.0,1293.0,494.0,2.035,55100.0,INLAND --122.23,40.17,21.0,1401.0,331.0,651.0,299.0,2.225,64700.0,INLAND --122.23,40.15,14.0,2297.0,573.0,1637.0,551.0,1.787,51600.0,INLAND --122.25,40.15,15.0,1677.0,346.0,858.0,327.0,2.4375,59200.0,INLAND --122.17,40.11,24.0,1631.0,340.0,1042.0,333.0,1.7708,59000.0,INLAND --122.19,40.07,21.0,1548.0,290.0,744.0,265.0,1.9773,55000.0,INLAND --122.18,40.02,30.0,1952.0,397.0,961.0,333.0,2.25,68200.0,INLAND --122.14,40.07,31.0,2053.0,465.0,1193.0,447.0,1.4923,44400.0,INLAND --122.13,40.01,21.0,916.0,194.0,451.0,178.0,2.125,63300.0,INLAND --122.1,40.03,25.0,2516.0,,1266.0,494.0,1.7566,58400.0,INLAND --122.06,40.02,32.0,1435.0,277.0,690.0,254.0,2.3043,68400.0,INLAND --122.0,39.94,27.0,852.0,176.0,464.0,148.0,1.7125,58200.0,INLAND --122.11,39.82,27.0,1065.0,214.0,508.0,198.0,2.625,91700.0,INLAND --122.12,39.91,16.0,4006.0,797.0,2028.0,752.0,2.3929,77200.0,INLAND --122.17,39.92,16.0,1566.0,306.0,652.0,287.0,1.9038,60800.0,INLAND --122.17,39.94,32.0,2352.0,477.0,1316.0,447.0,2.2292,57400.0,INLAND --122.14,39.97,27.0,1079.0,222.0,625.0,197.0,3.1319,62700.0,INLAND --122.23,39.95,21.0,2087.0,382.0,888.0,361.0,2.207,86400.0,INLAND --122.2,39.93,9.0,1296.0,287.0,768.0,260.0,1.9191,54400.0,INLAND --122.23,39.86,21.0,1730.0,350.0,982.0,322.0,1.8375,79800.0,INLAND --122.19,39.92,20.0,2563.0,658.0,1363.0,611.0,1.023,54200.0,INLAND --122.18,39.93,35.0,1387.0,272.0,610.0,237.0,2.1759,59500.0,INLAND --122.19,39.91,39.0,2467.0,529.0,1433.0,502.0,1.8571,53500.0,INLAND --122.68,41.15,32.0,817.0,206.0,224.0,89.0,3.631,90400.0,INLAND --122.81,40.93,16.0,2050.0,471.0,588.0,195.0,2.7083,88900.0,INLAND --122.96,40.77,29.0,1637.0,297.0,753.0,270.0,3.2891,93100.0,INLAND --122.93,40.78,20.0,3758.0,798.0,1685.0,757.0,2.3667,91200.0,INLAND --122.89,40.76,14.0,712.0,131.0,270.0,90.0,2.3958,102100.0,INLAND --122.79,40.75,17.0,3851.0,818.0,1352.0,560.0,2.125,71700.0,INLAND --122.86,40.56,12.0,1350.0,300.0,423.0,172.0,1.7393,81300.0,INLAND --122.95,40.67,17.0,1498.0,331.0,574.0,242.0,2.0268,94200.0,INLAND --122.95,40.71,26.0,2231.0,421.0,987.0,364.0,2.4792,88800.0,INLAND --123.35,40.99,23.0,141.0,59.0,47.0,23.0,1.125,66000.0,INLAND --123.53,40.88,20.0,2680.0,599.0,918.0,345.0,2.2115,75000.0,INLAND --123.48,40.79,15.0,619.0,160.0,287.0,104.0,1.9107,79200.0,INLAND --123.28,40.77,25.0,767.0,206.0,301.0,121.0,1.625,79200.0,INLAND --123.13,40.85,18.0,1650.0,377.0,675.0,282.0,1.8933,84700.0,INLAND --123.41,40.61,17.0,769.0,205.0,301.0,126.0,1.7875,55000.0,INLAND --123.11,40.6,23.0,708.0,202.0,316.0,136.0,1.1602,65000.0,INLAND --123.18,40.58,18.0,1451.0,278.0,695.0,254.0,1.7262,73700.0,INLAND --123.22,40.54,27.0,1573.0,361.0,847.0,330.0,1.9034,49600.0,INLAND --123.12,40.54,23.0,1091.0,217.0,539.0,201.0,1.8696,61500.0,INLAND --123.21,40.51,16.0,241.0,84.0,152.0,61.0,1.375,48800.0,INLAND --123.32,40.43,15.0,661.0,146.0,131.0,57.0,0.4999,56700.0,INLAND --123.08,40.4,10.0,365.0,102.0,140.0,49.0,1.7969,37500.0,INLAND --123.17,40.31,36.0,98.0,28.0,18.0,8.0,0.536,14999.0,INLAND --123.22,40.16,27.0,1848.0,449.0,396.0,150.0,2.8472,41300.0,INLAND --123.48,40.34,19.0,518.0,108.0,216.0,80.0,2.7083,64500.0,INLAND --123.43,40.22,20.0,133.0,35.0,87.0,37.0,3.625,67500.0,INLAND --123.41,40.07,17.0,449.0,151.0,141.0,53.0,0.8362,87500.0,INLAND --118.96,36.66,18.0,1302.0,424.0,320.0,133.0,3.1964,80000.0,INLAND --119.12,36.54,30.0,2747.0,515.0,1368.0,453.0,2.9828,85200.0,INLAND --118.96,36.49,24.0,1268.0,269.0,636.0,183.0,1.742,118800.0,INLAND --118.65,36.57,20.0,1431.0,416.0,570.0,225.0,1.4821,143300.0,INLAND --118.86,36.41,20.0,2749.0,575.0,1195.0,491.0,3.0391,139700.0,INLAND --118.94,36.32,10.0,2271.0,398.0,986.0,358.0,4.0703,147100.0,INLAND --119.26,36.61,33.0,560.0,90.0,310.0,113.0,2.5417,118800.0,INLAND --119.25,36.56,35.0,1675.0,373.0,1131.0,316.0,1.6722,59100.0,INLAND --119.28,36.54,33.0,1470.0,330.0,1222.0,301.0,1.8163,57400.0,INLAND --119.29,36.54,18.0,2581.0,628.0,2732.0,592.0,1.8429,58300.0,INLAND --119.29,36.55,21.0,2467.0,520.0,1721.0,515.0,2.5521,65600.0,INLAND --119.3,36.57,32.0,728.0,,461.0,149.0,3.0156,109100.0,INLAND --119.44,36.48,27.0,1546.0,415.0,1704.0,395.0,1.1728,41700.0,INLAND --119.37,36.47,26.0,337.0,69.0,277.0,73.0,2.3438,100000.0,INLAND --119.45,36.48,38.0,402.0,86.0,311.0,87.0,3.1719,106300.0,INLAND --119.48,36.44,22.0,1389.0,290.0,1185.0,271.0,2.0857,49200.0,INLAND --119.35,36.52,39.0,3027.0,608.0,2199.0,592.0,2.6445,62000.0,INLAND --119.48,36.5,32.0,3451.0,625.0,1968.0,574.0,2.9554,110300.0,INLAND --119.43,36.55,27.0,1621.0,323.0,882.0,324.0,2.75,93500.0,INLAND --119.48,36.54,28.0,2112.0,363.0,1011.0,335.0,4.2222,108900.0,INLAND --119.4,36.55,19.0,3000.0,628.0,2202.0,590.0,2.5141,67400.0,INLAND --119.39,36.55,30.0,1669.0,314.0,837.0,325.0,3.3869,80400.0,INLAND --119.38,36.56,14.0,3965.0,804.0,1945.0,733.0,2.6906,95300.0,INLAND --119.38,36.55,31.0,2342.0,439.0,1411.0,465.0,3.017,72000.0,INLAND --119.38,36.56,25.0,1180.0,222.0,611.0,212.0,2.0729,84700.0,INLAND --119.38,36.54,33.0,2465.0,536.0,2030.0,522.0,1.5223,51800.0,INLAND --119.38,36.53,38.0,1281.0,,1423.0,293.0,1.9602,51400.0,INLAND --119.39,36.54,34.0,1590.0,422.0,1272.0,407.0,1.8068,59000.0,INLAND --119.39,36.54,30.0,1408.0,326.0,1184.0,324.0,1.7165,59100.0,INLAND --119.4,36.53,28.0,2201.0,429.0,1524.0,412.0,2.75,65000.0,INLAND --119.28,36.52,19.0,1402.0,324.0,1327.0,316.0,2.25,53200.0,INLAND --119.29,36.53,33.0,1509.0,352.0,1734.0,336.0,1.625,50300.0,INLAND --119.29,36.52,39.0,858.0,228.0,1222.0,224.0,1.5714,43000.0,INLAND --119.26,36.5,35.0,1689.0,371.0,1475.0,329.0,2.5719,74300.0,INLAND --119.1,36.43,24.0,1039.0,190.0,643.0,193.0,2.6711,71300.0,INLAND --119.1,36.42,26.0,1775.0,416.0,1217.0,383.0,1.8801,57600.0,INLAND --119.09,36.42,15.0,1517.0,361.0,1275.0,343.0,1.5875,55800.0,INLAND --119.09,36.42,17.0,877.0,219.0,966.0,218.0,2.0,52500.0,INLAND --119.1,36.4,31.0,1533.0,361.0,1518.0,386.0,1.5608,51700.0,INLAND --119.1,36.4,23.0,1885.0,363.0,1056.0,338.0,3.2159,92800.0,INLAND --119.23,36.45,36.0,1508.0,323.0,1283.0,312.0,2.1205,60000.0,INLAND --119.18,36.4,39.0,1730.0,310.0,899.0,309.0,2.6648,129200.0,INLAND --119.27,36.39,17.0,2076.0,350.0,998.0,340.0,4.3281,145700.0,INLAND --119.23,36.39,39.0,1660.0,349.0,1061.0,306.0,1.4812,53500.0,INLAND --119.21,36.39,31.0,1465.0,303.0,1013.0,297.0,2.0363,53500.0,INLAND --119.21,36.38,18.0,2158.0,413.0,1461.0,395.0,2.0216,58000.0,INLAND --119.35,36.42,18.0,1115.0,193.0,1742.0,176.0,2.7969,123800.0,INLAND --119.31,36.39,32.0,2293.0,466.0,1538.0,468.0,1.9342,68600.0,INLAND --119.45,36.35,22.0,1824.0,333.0,1076.0,282.0,2.3365,69600.0,INLAND --119.41,36.35,20.0,1743.0,340.0,1390.0,336.0,2.2222,52900.0,INLAND --119.42,36.35,20.0,1469.0,303.0,1031.0,259.0,1.6645,48000.0,INLAND --119.29,36.35,15.0,1740.0,319.0,1332.0,308.0,2.5743,60200.0,INLAND --119.29,36.34,10.0,1832.0,455.0,1664.0,429.0,2.0227,53300.0,INLAND --119.3,36.35,24.0,1855.0,416.0,1520.0,410.0,2.3304,64900.0,INLAND --119.3,36.34,27.0,1515.0,358.0,1178.0,309.0,1.4432,48100.0,INLAND --119.31,36.34,14.0,2985.0,607.0,2250.0,607.0,2.1602,65200.0,INLAND --119.32,36.36,18.0,2060.0,383.0,1348.0,397.0,3.4312,68400.0,INLAND --119.37,36.35,20.0,1132.0,177.0,518.0,178.0,5.3767,231300.0,INLAND --119.32,36.33,20.0,1896.0,266.0,674.0,277.0,9.0376,239100.0,INLAND --119.32,36.33,18.0,2603.0,478.0,1158.0,423.0,4.5938,150500.0,INLAND --119.34,36.34,5.0,4505.0,834.0,1917.0,775.0,4.0144,126600.0,INLAND --119.34,36.33,17.0,2250.0,430.0,1218.0,468.0,4.1812,93700.0,INLAND --119.35,36.33,14.0,1195.0,220.0,568.0,229.0,3.1486,105600.0,INLAND --119.36,36.33,11.0,3221.0,617.0,1351.0,565.0,2.9844,132000.0,INLAND --119.29,36.34,28.0,1440.0,431.0,2178.0,440.0,1.2634,50600.0,INLAND --119.29,36.34,35.0,1235.0,369.0,1246.0,341.0,1.474,71000.0,INLAND --119.3,36.34,45.0,3723.0,831.0,2256.0,770.0,1.8299,63100.0,INLAND --119.31,36.34,32.0,1893.0,453.0,1744.0,425.0,1.4729,54100.0,INLAND --119.29,36.33,19.0,792.0,232.0,641.0,222.0,0.7445,112500.0,INLAND --119.31,36.33,46.0,1636.0,338.0,772.0,332.0,2.425,84900.0,INLAND --119.25,36.36,16.0,3245.0,469.0,1471.0,450.0,5.8673,154800.0,INLAND --119.27,36.34,7.0,3433.0,626.0,1793.0,626.0,3.5296,83700.0,INLAND --119.28,36.35,7.0,3598.0,701.0,2080.0,678.0,3.1111,72400.0,INLAND --119.28,36.33,10.0,1051.0,297.0,927.0,274.0,0.78,55500.0,INLAND --119.27,36.34,26.0,2057.0,472.0,1453.0,439.0,2.4113,58600.0,INLAND --119.24,36.33,9.0,3289.0,621.0,1866.0,631.0,3.1599,95000.0,INLAND --119.19,36.34,33.0,2199.0,403.0,1245.0,394.0,2.73,96900.0,INLAND --119.09,36.35,21.0,3146.0,595.0,1580.0,513.0,2.7857,92700.0,INLAND --119.11,36.29,18.0,1666.0,294.0,859.0,301.0,2.6065,93800.0,INLAND --119.13,36.3,33.0,3379.0,612.0,1565.0,618.0,2.7321,76500.0,INLAND --119.12,36.29,29.0,1638.0,323.0,942.0,322.0,2.1731,66200.0,INLAND --119.16,36.28,18.0,2377.0,414.0,1359.0,424.0,4.4,79300.0,INLAND --119.16,36.31,7.0,2946.0,664.0,1608.0,622.0,1.6829,80200.0,INLAND --119.15,36.29,18.0,1435.0,,657.0,254.0,2.4281,72500.0,INLAND --119.14,36.29,32.0,2084.0,482.0,1410.0,420.0,1.5321,48300.0,INLAND --119.14,36.29,36.0,788.0,181.0,405.0,180.0,1.47,61900.0,INLAND --119.2,36.3,19.0,1427.0,311.0,1026.0,293.0,2.625,57000.0,INLAND --119.2,36.3,32.0,1355.0,363.0,1427.0,384.0,1.3444,45600.0,INLAND --119.21,36.3,23.0,951.0,235.0,806.0,222.0,1.7734,41400.0,INLAND --119.21,36.3,18.0,1433.0,265.0,1092.0,276.0,1.9135,49400.0,INLAND --119.22,36.31,17.0,2079.0,459.0,2022.0,462.0,1.5464,54100.0,INLAND --119.25,36.27,23.0,1494.0,275.0,678.0,235.0,2.6875,69100.0,INLAND --119.2,36.28,22.0,2295.0,508.0,1654.0,478.0,1.684,65900.0,INLAND --119.29,36.32,27.0,1513.0,374.0,839.0,350.0,1.2012,64600.0,INLAND --119.29,36.32,35.0,1898.0,481.0,1123.0,433.0,1.1419,62900.0,INLAND --119.28,36.32,29.0,2274.0,514.0,1234.0,521.0,1.9138,66900.0,INLAND --119.29,36.32,33.0,2107.0,451.0,1364.0,442.0,2.2024,67200.0,INLAND --119.28,36.32,16.0,2812.0,514.0,1620.0,523.0,3.7404,89200.0,INLAND --119.27,36.32,6.0,2881.0,518.0,1432.0,504.0,4.0806,110200.0,INLAND --119.27,36.32,9.0,3631.0,635.0,1881.0,628.0,4.7723,113100.0,INLAND --119.25,36.32,32.0,1821.0,345.0,812.0,299.0,2.75,72200.0,INLAND --119.26,36.3,18.0,3578.0,720.0,1540.0,640.0,2.425,84600.0,INLAND --119.3,36.33,44.0,2060.0,414.0,819.0,355.0,2.8795,77000.0,INLAND --119.3,36.32,23.0,3521.0,615.0,1712.0,636.0,3.3875,92500.0,INLAND --119.31,36.32,44.0,2032.0,308.0,791.0,336.0,4.0298,109000.0,INLAND --119.31,36.32,23.0,2945.0,592.0,1419.0,532.0,2.5733,88800.0,INLAND --119.29,36.31,14.0,2382.0,377.0,1278.0,386.0,5.1896,101900.0,INLAND --119.29,36.31,34.0,1439.0,253.0,607.0,223.0,3.0972,82800.0,INLAND --119.3,36.31,16.0,2234.0,357.0,1150.0,361.0,4.2778,97300.0,INLAND --119.31,36.31,18.0,3860.0,760.0,1643.0,664.0,2.0714,92600.0,INLAND --119.31,36.3,20.0,1256.0,209.0,566.0,195.0,4.0221,86300.0,INLAND --119.3,36.3,14.0,3023.0,469.0,1523.0,492.0,5.3602,118600.0,INLAND --119.29,36.3,20.0,1157.0,179.0,572.0,191.0,5.3495,177300.0,INLAND --119.33,36.32,16.0,3331.0,839.0,1955.0,763.0,1.6148,86600.0,INLAND --119.34,36.32,14.0,1204.0,227.0,633.0,247.0,3.925,83800.0,INLAND --119.35,36.32,10.0,3817.0,719.0,1686.0,714.0,3.8235,94600.0,INLAND --119.34,36.32,6.0,3266.0,604.0,1769.0,580.0,3.1574,89200.0,INLAND --119.33,36.32,20.0,2025.0,328.0,1039.0,346.0,3.5313,82800.0,INLAND --119.32,36.32,35.0,2316.0,387.0,849.0,378.0,4.3816,88600.0,INLAND --119.33,36.32,23.0,3137.0,628.0,1446.0,548.0,2.5,85500.0,INLAND --119.33,36.32,19.0,2778.0,431.0,1092.0,451.0,5.2561,121300.0,INLAND --119.32,36.32,29.0,2409.0,436.0,1142.0,440.0,3.6895,87700.0,INLAND --119.32,36.31,21.0,2309.0,424.0,1047.0,453.0,2.9886,87500.0,INLAND --119.33,36.31,17.0,2401.0,409.0,1100.0,409.0,4.0577,107300.0,INLAND --119.33,36.31,15.0,1472.0,228.0,892.0,257.0,5.3909,113000.0,INLAND --119.33,36.3,11.0,3045.0,,1563.0,516.0,5.4337,133800.0,INLAND --119.32,36.3,15.0,2864.0,571.0,1480.0,475.0,2.9698,93400.0,INLAND --119.34,36.31,14.0,1635.0,422.0,870.0,399.0,2.7,88900.0,INLAND --119.34,36.3,13.0,2394.0,458.0,1177.0,389.0,2.6875,74400.0,INLAND --119.33,36.3,12.0,2172.0,352.0,1013.0,354.0,4.9464,115600.0,INLAND --119.38,36.3,14.0,1932.0,330.0,997.0,291.0,3.6875,93200.0,INLAND --119.33,36.28,16.0,2624.0,527.0,1077.0,520.0,2.125,104200.0,INLAND --119.32,36.3,14.0,1680.0,343.0,931.0,350.0,2.7336,89200.0,INLAND --119.29,36.28,23.0,1895.0,340.0,749.0,313.0,2.2333,120100.0,INLAND --119.46,36.25,32.0,1702.0,348.0,1016.0,350.0,2.5,73600.0,INLAND --119.4,36.25,25.0,1696.0,279.0,909.0,291.0,2.3,132800.0,INLAND --119.36,36.22,10.0,2445.0,526.0,1262.0,476.0,1.9355,68300.0,INLAND --119.37,36.22,19.0,1673.0,318.0,1298.0,343.0,2.706,64800.0,INLAND --119.36,36.21,18.0,1082.0,202.0,793.0,213.0,2.4032,60000.0,INLAND --119.35,36.22,32.0,1290.0,304.0,852.0,309.0,1.4429,54600.0,INLAND --119.35,36.21,26.0,2481.0,586.0,1445.0,498.0,1.6378,60300.0,INLAND --119.36,36.21,25.0,1170.0,259.0,804.0,257.0,1.3889,50200.0,INLAND --119.37,36.21,35.0,2228.0,476.0,1567.0,449.0,1.4455,54100.0,INLAND --119.34,36.23,12.0,4965.0,872.0,2191.0,804.0,3.5611,90200.0,INLAND --119.35,36.22,29.0,2051.0,351.0,915.0,343.0,3.1944,106800.0,INLAND --119.34,36.22,38.0,2708.0,460.0,1260.0,455.0,3.0905,78200.0,INLAND --119.33,36.22,29.0,1735.0,323.0,805.0,293.0,3.5039,89900.0,INLAND --119.33,36.21,38.0,3115.0,622.0,1238.0,606.0,2.6083,67000.0,INLAND --119.34,36.21,30.0,749.0,214.0,537.0,199.0,0.8229,68400.0,INLAND --119.33,36.22,9.0,3748.0,644.0,1955.0,620.0,4.2011,108100.0,INLAND --119.32,36.22,5.0,2319.0,438.0,1283.0,423.0,3.6343,95400.0,INLAND --119.32,36.21,29.0,1220.0,232.0,619.0,246.0,3.3125,78300.0,INLAND --119.32,36.25,21.0,1231.0,,609.0,206.0,2.8365,90000.0,INLAND --119.25,36.23,24.0,2015.0,355.0,1031.0,351.0,3.4306,139200.0,INLAND --119.27,36.18,23.0,3180.0,547.0,1829.0,498.0,2.6098,66000.0,INLAND --119.29,36.12,24.0,1248.0,226.0,641.0,200.0,2.4722,129200.0,INLAND --119.14,36.23,22.0,2935.0,523.0,1927.0,530.0,2.5875,70400.0,INLAND --119.12,36.19,21.0,2645.0,464.0,1245.0,407.0,2.9145,114200.0,INLAND --119.08,36.22,28.0,1606.0,320.0,1158.0,317.0,3.0324,55600.0,INLAND --119.08,36.21,20.0,1911.0,389.0,1241.0,348.0,2.5156,59300.0,INLAND --119.09,36.22,34.0,1715.0,290.0,780.0,297.0,3.4306,74300.0,INLAND --119.09,36.21,43.0,1335.0,280.0,943.0,288.0,1.9861,47700.0,INLAND --119.09,36.21,38.0,1901.0,453.0,1613.0,400.0,1.8828,44600.0,INLAND --119.1,36.21,38.0,727.0,173.0,559.0,176.0,2.4653,49500.0,INLAND --119.11,36.21,10.0,1972.0,455.0,1469.0,442.0,1.5407,58400.0,INLAND --118.74,36.23,22.0,1033.0,232.0,442.0,136.0,2.6447,137500.0,INLAND --118.93,36.19,30.0,2685.0,546.0,951.0,523.0,2.6184,113900.0,INLAND --118.82,36.13,43.0,1281.0,287.0,534.0,231.0,2.8906,65700.0,INLAND --118.54,36.12,11.0,4103.0,882.0,356.0,171.0,2.1029,99100.0,INLAND --118.37,36.19,10.0,443.0,111.0,48.0,21.0,3.125,71300.0,INLAND --118.7,35.82,20.0,4642.0,1300.0,658.0,247.0,2.3937,82100.0,INLAND --118.86,35.9,38.0,298.0,55.0,161.0,47.0,4.125,71300.0,INLAND --118.73,36.01,14.0,3263.0,651.0,1910.0,594.0,2.8603,128900.0,INLAND --119.08,36.2,30.0,1677.0,358.0,1159.0,365.0,2.4554,61200.0,INLAND --119.1,36.19,17.0,1564.0,396.0,713.0,362.0,1.6186,77100.0,INLAND --119.34,36.21,22.0,3065.0,726.0,2165.0,738.0,1.4792,54400.0,INLAND --119.34,36.2,12.0,1632.0,378.0,1303.0,315.0,2.0333,54400.0,INLAND --119.33,36.19,27.0,418.0,163.0,332.0,141.0,1.0714,63800.0,INLAND --119.31,36.2,23.0,1837.0,332.0,1064.0,335.0,3.1453,74500.0,INLAND --119.32,36.21,25.0,2360.0,460.0,1424.0,436.0,2.3152,63100.0,INLAND --119.32,36.2,25.0,1427.0,246.0,772.0,221.0,2.2262,64500.0,INLAND --119.32,36.2,15.0,1562.0,275.0,961.0,287.0,3.4231,83300.0,INLAND --119.32,36.19,11.0,1281.0,291.0,861.0,313.0,1.0962,72300.0,INLAND --119.32,36.19,11.0,3136.0,620.0,2013.0,583.0,3.335,69700.0,INLAND --119.35,36.2,31.0,1783.0,382.0,1266.0,358.0,2.2264,50800.0,INLAND --119.35,36.2,29.0,1938.0,404.0,1487.0,414.0,1.7462,51100.0,INLAND --119.36,36.2,33.0,1955.0,398.0,1412.0,397.0,2.25,51500.0,INLAND --119.37,36.19,24.0,1306.0,266.0,889.0,276.0,2.4922,66100.0,INLAND --119.35,36.19,6.0,958.0,226.0,734.0,230.0,1.0349,67800.0,INLAND --119.45,36.16,27.0,2119.0,373.0,1268.0,345.0,2.8152,106900.0,INLAND --119.35,36.16,21.0,2751.0,602.0,1496.0,489.0,2.3882,49200.0,INLAND --119.45,36.09,18.0,408.0,82.0,253.0,75.0,2.0313,112500.0,INLAND --119.31,36.06,20.0,2236.0,434.0,1405.0,412.0,1.8827,48700.0,INLAND --119.4,36.04,39.0,915.0,199.0,580.0,175.0,1.8894,112500.0,INLAND --119.27,36.05,29.0,1016.0,174.0,481.0,140.0,2.2917,112500.0,INLAND --119.21,36.1,30.0,1471.0,373.0,1418.0,357.0,1.7432,42500.0,INLAND --119.19,36.06,29.0,1815.0,376.0,1421.0,339.0,1.9091,71300.0,INLAND --119.19,36.14,41.0,759.0,140.0,408.0,129.0,3.9,85900.0,INLAND --119.13,36.13,28.0,1673.0,385.0,1434.0,371.0,2.0586,40900.0,INLAND --119.08,36.13,21.0,2271.0,376.0,1145.0,372.0,3.1528,113700.0,INLAND --119.03,36.13,24.0,2259.0,408.0,1169.0,395.0,1.7106,95500.0,INLAND --119.06,36.15,20.0,1282.0,273.0,852.0,247.0,1.6354,49000.0,INLAND --119.06,36.15,25.0,2402.0,478.0,1527.0,461.0,2.3194,52900.0,INLAND --119.14,36.06,32.0,1838.0,441.0,1628.0,425.0,1.6452,41500.0,INLAND --119.12,36.05,27.0,1575.0,321.0,1063.0,317.0,2.1477,53900.0,INLAND --119.08,36.02,26.0,1748.0,346.0,891.0,303.0,1.9439,62100.0,INLAND --119.01,36.02,17.0,3915.0,742.0,1768.0,688.0,2.375,79800.0,INLAND --118.92,36.04,28.0,1148.0,233.0,521.0,212.0,2.9208,98500.0,INLAND --119.08,36.09,25.0,1880.0,339.0,1003.0,315.0,2.7298,103400.0,INLAND --119.06,36.1,21.0,1344.0,249.0,868.0,221.0,2.5893,63600.0,INLAND --119.06,36.09,11.0,2572.0,454.0,1402.0,415.0,3.6786,72900.0,INLAND --119.04,36.09,15.0,2288.0,401.0,1238.0,429.0,3.0278,77400.0,INLAND --119.05,36.09,9.0,3297.0,568.0,1749.0,568.0,4.0217,99200.0,INLAND --119.04,36.07,17.0,2623.0,659.0,1912.0,618.0,1.5893,52000.0,INLAND --119.06,36.08,19.0,2554.0,443.0,1301.0,419.0,4.1856,72100.0,INLAND --119.07,36.08,5.0,2693.0,508.0,1785.0,491.0,3.0,71000.0,INLAND --119.07,36.07,11.0,2265.0,382.0,1285.0,387.0,3.2042,76200.0,INLAND --119.06,36.07,20.0,2683.0,553.0,1497.0,548.0,1.7031,64600.0,INLAND --119.05,36.07,21.0,2472.0,523.0,1238.0,504.0,1.7756,62900.0,INLAND --119.05,36.06,23.0,2344.0,407.0,1184.0,406.0,3.1625,70600.0,INLAND --119.02,36.09,15.0,2234.0,415.0,1254.0,420.0,3.0234,88600.0,INLAND --119.01,36.08,31.0,1620.0,366.0,1154.0,348.0,1.8857,55500.0,INLAND --119.03,36.08,19.0,2736.0,549.0,1432.0,503.0,2.6944,67700.0,INLAND --119.03,36.08,19.0,2471.0,431.0,1040.0,426.0,3.25,80600.0,INLAND --119.04,36.07,26.0,2185.0,435.0,1108.0,419.0,2.2277,78000.0,INLAND --119.03,36.07,26.0,3210.0,646.0,1908.0,642.0,2.4167,77600.0,INLAND --119.02,36.07,29.0,2610.0,597.0,1659.0,571.0,1.5911,60800.0,INLAND --119.02,36.07,39.0,1173.0,269.0,702.0,232.0,1.6146,53100.0,INLAND --119.01,36.07,44.0,2450.0,575.0,1330.0,508.0,1.6103,50900.0,INLAND --118.93,36.1,19.0,2988.0,681.0,1654.0,576.0,2.3792,90000.0,INLAND --118.98,36.06,33.0,2043.0,443.0,1497.0,417.0,2.343,47400.0,INLAND --119.0,36.05,24.0,3208.0,691.0,1986.0,662.0,1.5506,52300.0,INLAND --118.97,36.06,26.0,1289.0,262.0,1100.0,244.0,1.975,51400.0,INLAND --118.99,36.07,21.0,983.0,165.0,672.0,169.0,2.975,63900.0,INLAND --118.99,36.06,19.0,2153.0,458.0,1317.0,386.0,1.7564,42600.0,INLAND --119.0,36.06,41.0,937.0,158.0,396.0,142.0,4.0833,81300.0,INLAND --119.0,36.07,20.0,1042.0,183.0,509.0,175.0,2.9815,73000.0,INLAND --119.03,36.06,36.0,1925.0,443.0,1405.0,422.0,2.162,51900.0,INLAND --119.02,36.06,41.0,2279.0,538.0,1908.0,511.0,1.3952,43100.0,INLAND --119.01,36.06,25.0,1505.0,,1392.0,359.0,1.6812,47700.0,INLAND --119.01,36.05,27.0,1127.0,294.0,839.0,276.0,1.3807,53100.0,INLAND --119.02,36.05,22.0,2078.0,431.0,1336.0,456.0,2.2202,65200.0,INLAND --119.42,35.97,21.0,554.0,121.0,426.0,122.0,2.3516,47500.0,INLAND --119.31,35.99,26.0,1460.0,316.0,880.0,286.0,1.3676,47800.0,INLAND --119.28,35.99,20.0,2911.0,597.0,1746.0,588.0,1.7372,51000.0,INLAND --119.19,35.96,25.0,2014.0,402.0,1160.0,362.0,1.881,52500.0,INLAND --119.46,35.86,22.0,1750.0,374.0,1113.0,338.0,1.505,42700.0,INLAND --119.3,35.87,20.0,1934.0,377.0,1341.0,336.0,2.1434,62600.0,INLAND --119.12,35.85,37.0,736.0,166.0,564.0,138.0,2.4167,58300.0,INLAND --119.1,35.79,19.0,1809.0,477.0,2051.0,416.0,1.8144,49800.0,INLAND --119.27,35.89,18.0,1855.0,424.0,1839.0,392.0,1.7572,53300.0,INLAND --119.27,35.88,32.0,1393.0,343.0,1282.0,336.0,1.5069,43700.0,INLAND --119.27,35.87,12.0,972.0,269.0,1134.0,286.0,1.63,49500.0,INLAND --119.26,35.87,24.0,1590.0,390.0,1686.0,372.0,1.6469,47600.0,INLAND --119.06,35.94,18.0,3501.0,721.0,2009.0,660.0,2.6576,65700.0,INLAND --119.04,35.96,18.0,1187.0,308.0,1343.0,277.0,1.875,51700.0,INLAND --119.04,35.95,25.0,1009.0,246.0,994.0,222.0,1.8462,55800.0,INLAND --118.96,35.87,17.0,1668.0,307.0,888.0,277.0,3.7794,96200.0,INLAND --120.4,38.0,17.0,2098.0,370.0,912.0,354.0,2.6544,112600.0,INLAND --120.39,38.0,33.0,2177.0,404.0,891.0,383.0,3.212,105200.0,INLAND --120.4,37.98,19.0,2010.0,433.0,910.0,390.0,2.6696,121200.0,INLAND --120.39,37.98,52.0,1056.0,274.0,584.0,255.0,2.1513,86700.0,INLAND --120.37,38.01,30.0,473.0,,242.0,93.0,2.5417,123200.0,INLAND --120.35,37.99,3.0,1167.0,306.0,422.0,186.0,2.4191,217500.0,INLAND --120.38,37.99,36.0,2864.0,603.0,1155.0,565.0,2.3571,113400.0,INLAND --120.37,37.98,29.0,2508.0,591.0,1112.0,550.0,1.6021,91400.0,INLAND --120.38,37.97,47.0,1060.0,219.0,496.0,205.0,2.5781,104800.0,INLAND --120.26,38.13,17.0,301.0,94.0,122.0,47.0,4.0583,87500.0,INLAND --120.28,38.07,13.0,1996.0,410.0,618.0,218.0,2.9083,104600.0,INLAND --120.4,38.06,12.0,1430.0,310.0,517.0,240.0,2.6544,128100.0,INLAND --120.35,38.04,16.0,1499.0,326.0,733.0,286.0,2.5729,118800.0,INLAND --120.39,38.03,20.0,1551.0,309.0,647.0,228.0,2.6094,139100.0,INLAND --120.41,38.03,14.0,2061.0,465.0,859.0,462.0,2.1289,115300.0,INLAND --120.43,38.02,15.0,1613.0,299.0,655.0,251.0,3.6875,186000.0,INLAND --120.31,38.02,11.0,2366.0,398.0,1046.0,387.0,3.8203,139700.0,INLAND --120.3,38.04,6.0,1281.0,245.0,422.0,160.0,3.2875,111300.0,INLAND --120.28,38.03,13.0,2095.0,391.0,860.0,331.0,3.6838,145700.0,INLAND --120.27,38.02,13.0,3839.0,715.0,1486.0,532.0,3.1875,99800.0,INLAND --120.29,38.01,12.0,3014.0,560.0,1424.0,485.0,3.0729,105100.0,INLAND --120.3,37.99,23.0,1908.0,383.0,984.0,374.0,2.517,153500.0,INLAND --120.33,38.0,14.0,1944.0,330.0,822.0,314.0,3.5,170700.0,INLAND --120.25,38.04,22.0,4173.0,763.0,1086.0,444.0,2.5562,136200.0,INLAND --120.25,38.03,21.0,4924.0,966.0,1175.0,454.0,2.9457,116500.0,INLAND --120.22,38.05,14.0,3803.0,689.0,1129.0,477.0,2.7188,137000.0,INLAND --120.19,38.07,43.0,102.0,19.0,44.0,13.0,0.4999,162500.0,INLAND --120.19,38.03,17.0,8651.0,1579.0,2071.0,757.0,3.1076,115800.0,INLAND --120.12,38.12,37.0,3355.0,666.0,338.0,136.0,2.0625,88900.0,INLAND --120.03,38.19,26.0,7005.0,1358.0,416.0,189.0,2.125,132500.0,INLAND --120.26,37.99,12.0,2726.0,517.0,1351.0,474.0,3.5,107100.0,INLAND --120.24,38.01,11.0,1214.0,228.0,633.0,199.0,3.125,148600.0,INLAND --120.23,37.98,14.0,1954.0,368.0,917.0,316.0,3.1523,93300.0,INLAND --120.28,37.9,17.0,1047.0,212.0,530.0,196.0,2.1538,153300.0,INLAND --120.24,37.96,34.0,1747.0,395.0,935.0,362.0,1.625,79400.0,INLAND --120.23,37.96,52.0,1230.0,262.0,609.0,243.0,2.0057,68200.0,INLAND --120.25,37.93,13.0,493.0,76.0,196.0,68.0,3.375,134100.0,INLAND --120.13,37.93,5.0,111.0,26.0,58.0,25.0,1.675,112500.0,INLAND --120.35,37.98,4.0,1658.0,301.0,676.0,278.0,3.5714,149500.0,INLAND --120.33,37.97,17.0,2530.0,526.0,1024.0,496.0,2.0057,118900.0,INLAND --120.3,37.97,17.0,3243.0,619.0,1408.0,566.0,2.474,120100.0,INLAND --120.29,37.94,17.0,1459.0,297.0,753.0,271.0,3.05,144800.0,INLAND --120.32,37.91,16.0,108.0,18.0,54.0,22.0,4.375,100000.0,INLAND --120.35,37.86,25.0,287.0,57.0,118.0,50.0,2.3056,162500.0,INLAND --120.23,37.86,16.0,324.0,61.0,135.0,61.0,2.4615,137500.0,INLAND --120.2,37.84,9.0,13670.0,2453.0,2811.0,1193.0,3.2589,137900.0,INLAND --120.2,37.8,30.0,1189.0,255.0,446.0,165.0,3.4838,112500.0,INLAND --119.93,37.85,18.0,473.0,115.0,88.0,41.0,4.0833,137500.0,INLAND --119.57,37.94,17.0,346.0,130.0,51.0,20.0,3.4861,137500.0,INLAND --120.47,37.96,25.0,2505.0,529.0,1145.0,483.0,2.006,103000.0,INLAND --120.42,37.98,18.0,3059.0,609.0,1335.0,581.0,2.5129,115900.0,INLAND --120.42,37.95,19.0,2787.0,578.0,1208.0,532.0,2.4922,98700.0,INLAND --120.39,37.96,10.0,2554.0,501.0,922.0,439.0,2.1094,164000.0,INLAND --120.4,37.92,22.0,1022.0,194.0,517.0,198.0,3.625,99400.0,INLAND --120.35,37.95,13.0,2104.0,407.0,960.0,401.0,2.4,177000.0,INLAND --120.41,37.88,16.0,744.0,141.0,311.0,122.0,4.4231,87500.0,INLAND --120.45,37.79,8.0,2687.0,495.0,5087.0,385.0,3.1719,115400.0,INLAND --119.31,34.7,19.0,961.0,218.0,479.0,138.0,3.3438,156300.0,INLAND --119.06,34.62,10.0,416.0,110.0,436.0,70.0,2.2222,262500.0,<1H OCEAN --118.75,34.42,28.0,1000.0,206.0,545.0,154.0,2.4167,191700.0,<1H OCEAN --118.8,34.41,45.0,1610.0,,1148.0,347.0,2.7,120400.0,<1H OCEAN --118.88,34.42,20.0,728.0,120.0,360.0,115.0,6.1244,375000.0,<1H OCEAN --118.98,34.4,34.0,1328.0,244.0,795.0,227.0,4.4219,338100.0,<1H OCEAN --118.93,34.36,33.0,1775.0,309.0,1071.0,296.0,4.6607,187900.0,<1H OCEAN --118.93,34.4,17.0,3275.0,599.0,2422.0,637.0,3.7092,190500.0,<1H OCEAN --118.92,34.4,23.0,1290.0,283.0,1060.0,279.0,3.3152,198000.0,<1H OCEAN --118.92,34.41,22.0,2702.0,655.0,2664.0,571.0,3.0893,173400.0,<1H OCEAN --118.9,34.41,35.0,4431.0,739.0,2304.0,720.0,4.2599,209100.0,<1H OCEAN --118.91,34.4,30.0,2861.0,613.0,2065.0,586.0,3.2024,176100.0,<1H OCEAN --118.9,34.4,16.0,2614.0,575.0,1163.0,524.0,1.5781,134400.0,<1H OCEAN --119.06,34.38,33.0,1465.0,262.0,731.0,266.0,3.9464,230300.0,<1H OCEAN --119.06,34.37,32.0,3885.0,759.0,2504.0,736.0,3.6453,201700.0,<1H OCEAN --119.05,34.36,22.0,1815.0,506.0,2428.0,473.0,2.8417,162500.0,<1H OCEAN --119.05,34.4,50.0,1236.0,282.0,1079.0,257.0,2.6991,181300.0,<1H OCEAN --119.1,34.31,21.0,2424.0,527.0,1379.0,484.0,2.6786,184000.0,<1H OCEAN --119.04,34.34,35.0,462.0,90.0,334.0,96.0,5.3582,281300.0,<1H OCEAN --119.06,34.36,52.0,1409.0,359.0,981.0,304.0,2.7951,199300.0,<1H OCEAN --119.06,34.36,52.0,1239.0,320.0,934.0,298.0,1.8618,183300.0,<1H OCEAN --119.06,34.35,34.0,2426.0,646.0,2116.0,631.0,2.0682,158300.0,<1H OCEAN --119.05,34.35,39.0,950.0,300.0,1366.0,312.0,2.2443,146600.0,<1H OCEAN --119.09,34.35,20.0,4725.0,881.0,2823.0,869.0,4.0122,214800.0,<1H OCEAN --119.08,34.35,24.0,3663.0,828.0,2718.0,778.0,3.2757,186000.0,<1H OCEAN --119.08,34.34,23.0,3065.0,723.0,2042.0,698.0,2.7593,194800.0,<1H OCEAN --119.11,34.33,14.0,4026.0,769.0,1825.0,671.0,3.5541,191800.0,<1H OCEAN --119.12,34.38,28.0,7200.0,1281.0,3793.0,1238.0,4.075,237900.0,<1H OCEAN --119.06,34.36,48.0,1459.0,324.0,902.0,350.0,2.4185,189900.0,<1H OCEAN --119.23,34.44,34.0,3193.0,664.0,1434.0,627.0,2.4777,260300.0,<1H OCEAN --119.26,34.46,30.0,3826.0,691.0,1656.0,657.0,4.0074,434700.0,<1H OCEAN --119.23,34.46,34.0,9280.0,1765.0,4514.0,1693.0,3.2026,227600.0,<1H OCEAN --119.19,34.46,39.0,2056.0,381.0,939.0,371.0,6.6257,427600.0,<1H OCEAN --119.23,34.42,16.0,630.0,117.0,343.0,100.0,5.75,325000.0,<1H OCEAN --119.27,34.45,15.0,1659.0,274.0,679.0,253.0,5.0,357900.0,<1H OCEAN --119.15,34.44,33.0,2005.0,392.0,1043.0,351.0,5.308,297900.0,<1H OCEAN --119.14,34.49,17.0,321.0,44.0,92.0,39.0,7.75,375000.0,<1H OCEAN --119.31,34.41,22.0,2612.0,494.0,1361.0,439.0,4.1319,245000.0,NEAR OCEAN --119.31,34.38,23.0,282.0,69.0,130.0,57.0,2.4375,225000.0,NEAR OCEAN --119.29,34.37,41.0,1408.0,311.0,793.0,264.0,2.5441,161200.0,NEAR OCEAN --119.34,34.39,27.0,669.0,131.0,314.0,106.0,2.4659,231300.0,NEAR OCEAN --119.31,34.44,5.0,403.0,48.0,208.0,54.0,12.632,500001.0,NEAR OCEAN --119.28,34.45,36.0,2376.0,541.0,1505.0,547.0,2.4595,197600.0,<1H OCEAN --119.29,34.45,26.0,2849.0,535.0,1383.0,532.0,2.6893,230800.0,<1H OCEAN --119.29,34.44,34.0,4314.0,878.0,2361.0,831.0,3.2279,243100.0,NEAR OCEAN --119.27,34.44,22.0,3527.0,711.0,1483.0,640.0,2.7019,234700.0,<1H OCEAN --119.28,34.42,23.0,4763.0,828.0,2198.0,771.0,4.8105,313000.0,NEAR OCEAN --119.3,34.42,18.0,5591.0,1042.0,2860.0,1026.0,3.5822,219900.0,NEAR OCEAN --119.29,34.4,22.0,3891.0,657.0,1727.0,581.0,4.2656,241400.0,NEAR OCEAN --119.3,34.39,35.0,3079.0,579.0,1807.0,589.0,4.69,199300.0,NEAR OCEAN --119.17,34.29,28.0,731.0,155.0,285.0,162.0,3.2917,225000.0,NEAR OCEAN --119.17,34.29,18.0,3932.0,724.0,1896.0,680.0,5.2953,279400.0,NEAR OCEAN --119.17,34.31,21.0,259.0,38.0,142.0,45.0,5.2681,500001.0,NEAR OCEAN --119.15,34.3,21.0,2475.0,502.0,1269.0,505.0,2.98,259200.0,NEAR OCEAN --119.19,34.28,28.0,3231.0,524.0,1665.0,540.0,4.8583,224200.0,NEAR OCEAN --119.18,34.28,17.0,4526.0,717.0,2088.0,655.0,5.6885,268200.0,NEAR OCEAN --119.19,34.3,25.0,2197.0,320.0,934.0,330.0,6.311,283200.0,NEAR OCEAN --119.22,34.34,29.0,3128.0,672.0,1815.0,648.0,2.9821,175700.0,NEAR OCEAN --119.39,34.32,19.0,3238.0,629.0,1195.0,443.0,4.8472,500001.0,NEAR OCEAN --119.32,34.35,16.0,52.0,16.0,51.0,15.0,2.475,225000.0,NEAR OCEAN --119.14,34.29,17.0,2754.0,577.0,1349.0,533.0,3.1618,154200.0,<1H OCEAN --119.16,34.28,30.0,413.0,98.0,400.0,112.0,4.0,219200.0,NEAR OCEAN --119.16,34.28,11.0,5330.0,1056.0,2801.0,1028.0,4.763,232700.0,NEAR OCEAN --119.16,34.27,24.0,1824.0,331.0,1049.0,320.0,5.9181,221100.0,NEAR OCEAN --119.14,34.28,31.0,790.0,241.0,1095.0,222.0,2.25,75000.0,NEAR OCEAN --119.18,34.27,6.0,2307.0,386.0,910.0,364.0,5.215,279500.0,NEAR OCEAN --119.17,34.27,24.0,4165.0,646.0,2194.0,658.0,6.0661,234800.0,NEAR OCEAN --119.17,34.27,18.0,8010.0,1539.0,3982.0,1483.0,4.0905,236500.0,NEAR OCEAN --119.17,34.26,10.0,3654.0,541.0,1638.0,551.0,6.1885,267300.0,NEAR OCEAN --119.22,34.27,11.0,4695.0,955.0,2065.0,982.0,3.2158,223600.0,NEAR OCEAN --119.21,34.26,31.0,224.0,88.0,326.0,88.0,2.375,55000.0,NEAR OCEAN --119.21,34.26,10.0,3150.0,781.0,1582.0,653.0,4.2448,157300.0,NEAR OCEAN --119.22,34.26,16.0,2596.0,625.0,1403.0,562.0,3.4018,145200.0,NEAR OCEAN --119.2,34.27,8.0,4942.0,1173.0,3012.0,1033.0,3.445,203400.0,NEAR OCEAN --119.21,34.26,23.0,2887.0,540.0,1508.0,518.0,3.3452,217600.0,NEAR OCEAN --119.2,34.26,13.0,3009.0,588.0,1439.0,607.0,4.1845,199500.0,NEAR OCEAN --119.19,34.26,16.0,5018.0,853.0,2524.0,830.0,5.1752,218000.0,NEAR OCEAN --119.18,34.26,22.0,2334.0,359.0,1298.0,363.0,5.5275,228900.0,NEAR OCEAN --119.19,34.25,12.0,232.0,37.0,79.0,35.0,4.1667,214600.0,NEAR OCEAN --119.21,34.26,26.0,2406.0,411.0,1313.0,391.0,4.9079,234100.0,NEAR OCEAN --119.2,34.26,25.0,2203.0,367.0,1194.0,377.0,5.4087,223200.0,NEAR OCEAN --119.2,34.25,18.0,3208.0,643.0,1973.0,614.0,3.8162,235000.0,NEAR OCEAN --119.2,34.25,25.0,195.0,59.0,140.0,43.0,3.8889,187500.0,NEAR OCEAN --119.2,34.28,22.0,2362.0,601.0,1127.0,499.0,3.4006,219400.0,NEAR OCEAN --119.22,34.27,30.0,1937.0,295.0,695.0,313.0,5.0679,234300.0,NEAR OCEAN --119.23,34.27,22.0,3536.0,615.0,1650.0,612.0,4.2381,229300.0,NEAR OCEAN --119.21,34.31,22.0,7548.0,1038.0,2855.0,1008.0,6.729,409300.0,NEAR OCEAN --119.21,34.28,27.0,2219.0,312.0,937.0,315.0,5.7601,281100.0,NEAR OCEAN --119.23,34.3,18.0,1713.0,244.0,690.0,239.0,6.9483,404300.0,NEAR OCEAN --119.23,34.28,24.0,4260.0,691.0,1581.0,607.0,5.5048,303600.0,NEAR OCEAN --119.22,34.28,24.0,2212.0,332.0,899.0,331.0,5.533,299700.0,NEAR OCEAN --119.22,34.28,33.0,2467.0,377.0,1052.0,363.0,4.7333,257500.0,NEAR OCEAN --119.25,34.28,36.0,1530.0,341.0,703.0,317.0,3.5819,231900.0,NEAR OCEAN --119.26,34.28,41.0,2822.0,564.0,1288.0,541.0,3.0799,254100.0,NEAR OCEAN --119.25,34.3,34.0,1189.0,220.0,445.0,203.0,4.8824,396400.0,NEAR OCEAN --119.25,34.28,36.0,2232.0,373.0,951.0,368.0,5.2261,303200.0,NEAR OCEAN --119.24,34.28,41.0,1280.0,240.0,608.0,252.0,4.4038,229100.0,NEAR OCEAN --119.26,34.28,41.0,1835.0,311.0,683.0,308.0,4.8977,358200.0,NEAR OCEAN --119.27,34.28,52.0,2239.0,420.0,941.0,397.0,4.125,349000.0,NEAR OCEAN --119.27,34.29,32.0,2274.0,406.0,982.0,393.0,5.3254,385200.0,NEAR OCEAN --119.29,34.29,33.0,3854.0,982.0,1835.0,894.0,3.5294,323900.0,NEAR OCEAN --119.29,34.3,24.0,7637.0,1705.0,4647.0,1623.0,3.5385,186800.0,NEAR OCEAN --119.3,34.29,41.0,1445.0,410.0,1052.0,388.0,2.6333,170800.0,NEAR OCEAN --119.3,34.29,50.0,3128.0,825.0,2535.0,783.0,2.3669,165300.0,NEAR OCEAN --119.3,34.29,26.0,3665.0,932.0,2775.0,870.0,1.9286,160500.0,NEAR OCEAN --119.29,34.31,25.0,1092.0,190.0,702.0,215.0,3.9063,192700.0,NEAR OCEAN --119.29,34.28,38.0,2387.0,748.0,1537.0,741.0,2.3147,192500.0,NEAR OCEAN --119.3,34.27,17.0,1527.0,503.0,688.0,423.0,1.6007,187500.0,NEAR OCEAN --119.29,34.26,32.0,3295.0,764.0,1344.0,600.0,3.6007,395500.0,NEAR OCEAN --119.27,34.26,23.0,3578.0,753.0,1455.0,649.0,4.1898,359100.0,NEAR OCEAN --119.29,34.23,22.0,2486.0,608.0,709.0,523.0,2.9018,275000.0,NEAR OCEAN --119.29,34.24,27.0,4742.0,775.0,1682.0,696.0,6.194,500001.0,NEAR OCEAN --119.27,34.27,44.0,1312.0,279.0,668.0,278.0,4.09,203800.0,NEAR OCEAN --119.27,34.28,50.0,1710.0,412.0,915.0,380.0,3.1757,206300.0,NEAR OCEAN --119.27,34.27,52.0,459.0,112.0,276.0,107.0,2.375,198400.0,NEAR OCEAN --119.27,34.27,52.0,1577.0,343.0,836.0,335.0,3.5893,206600.0,NEAR OCEAN --119.28,34.27,43.0,403.0,77.0,156.0,85.0,4.6667,384600.0,NEAR OCEAN --119.28,34.27,44.0,706.0,176.0,399.0,149.0,3.0089,166700.0,NEAR OCEAN --119.25,34.27,46.0,679.0,159.0,382.0,143.0,3.5,221200.0,NEAR OCEAN --119.24,34.27,32.0,4071.0,888.0,1900.0,874.0,3.2792,220500.0,NEAR OCEAN --119.23,34.27,29.0,3298.0,804.0,1509.0,711.0,3.8125,244500.0,NEAR OCEAN --119.25,34.26,30.0,2948.0,827.0,1635.0,750.0,2.67,214900.0,NEAR OCEAN --119.25,34.27,35.0,2532.0,407.0,1338.0,422.0,4.7727,219000.0,NEAR OCEAN --119.26,34.27,36.0,1972.0,382.0,1029.0,411.0,3.7337,209000.0,NEAR OCEAN --119.26,34.27,40.0,2528.0,572.0,1318.0,549.0,3.6413,212700.0,NEAR OCEAN --119.26,34.27,42.0,918.0,204.0,394.0,204.0,4.0069,214300.0,NEAR OCEAN --119.23,34.25,28.0,26.0,3.0,29.0,9.0,8.0,275000.0,NEAR OCEAN --119.25,34.21,12.0,15201.0,2418.0,7132.0,2251.0,5.6756,301800.0,NEAR OCEAN --119.18,34.24,17.0,629.0,221.0,514.0,186.0,3.2847,112500.0,NEAR OCEAN --119.18,34.23,16.0,4609.0,1220.0,2147.0,1007.0,3.375,218800.0,NEAR OCEAN --119.19,34.22,26.0,3175.0,736.0,2460.0,775.0,3.125,219900.0,NEAR OCEAN --119.19,34.23,17.0,3889.0,748.0,2415.0,739.0,4.5,234300.0,NEAR OCEAN --119.18,34.22,15.0,4615.0,1008.0,2549.0,973.0,3.9063,198700.0,NEAR OCEAN --119.17,34.22,29.0,4188.0,816.0,2783.0,790.0,4.1949,197100.0,NEAR OCEAN --119.17,34.21,33.0,1039.0,256.0,1432.0,272.0,3.1103,143500.0,NEAR OCEAN --119.16,34.2,35.0,2183.0,636.0,3504.0,623.0,1.9704,160300.0,NEAR OCEAN --119.17,34.2,36.0,2028.0,523.0,2751.0,496.0,3.015,149300.0,NEAR OCEAN --119.17,34.2,40.0,1083.0,319.0,1843.0,349.0,2.3077,106900.0,NEAR OCEAN --119.18,34.21,30.0,1096.0,231.0,741.0,229.0,3.8625,234700.0,NEAR OCEAN --119.18,34.21,29.0,4039.0,680.0,1677.0,644.0,4.3897,257600.0,NEAR OCEAN --119.19,34.21,28.0,4194.0,811.0,2556.0,856.0,4.2227,235400.0,NEAR OCEAN --119.19,34.21,27.0,1887.0,487.0,1339.0,428.0,2.9185,224500.0,NEAR OCEAN --119.19,34.2,36.0,1293.0,312.0,1128.0,335.0,2.1542,253900.0,NEAR OCEAN --119.19,34.21,34.0,3413.0,693.0,2223.0,651.0,3.8239,208200.0,NEAR OCEAN --119.18,34.21,46.0,2062.0,484.0,1522.0,469.0,3.087,213900.0,NEAR OCEAN --119.19,34.2,18.0,3620.0,,3171.0,779.0,3.3409,220500.0,NEAR OCEAN --119.18,34.19,19.0,2393.0,,1938.0,762.0,1.6953,167400.0,NEAR OCEAN --119.18,34.2,21.0,494.0,127.0,489.0,106.0,2.6964,170800.0,NEAR OCEAN --119.18,34.19,5.0,384.0,131.0,410.0,149.0,1.5625,87500.0,NEAR OCEAN --119.27,34.17,15.0,11403.0,2131.0,3327.0,1585.0,4.3693,423300.0,NEAR OCEAN --119.23,34.19,16.0,5297.0,810.0,1489.0,667.0,6.4522,500001.0,NEAR OCEAN --119.23,34.17,18.0,6171.0,1490.0,2164.0,1210.0,3.6875,500001.0,NEAR OCEAN --119.23,34.15,18.0,6213.0,1188.0,2679.0,1000.0,3.748,380400.0,NEAR OCEAN --119.21,34.19,15.0,3797.0,692.0,2216.0,675.0,4.7443,229500.0,NEAR OCEAN --119.21,34.19,15.0,5614.0,989.0,2754.0,994.0,5.035,242900.0,NEAR OCEAN --119.22,34.18,17.0,3332.0,762.0,1797.0,673.0,4.4292,231200.0,NEAR OCEAN --119.2,34.19,19.0,9503.0,1769.0,6370.0,1718.0,5.0016,218500.0,NEAR OCEAN --119.2,34.18,27.0,1035.0,229.0,782.0,222.0,4.2212,185400.0,NEAR OCEAN --119.19,34.19,35.0,2599.0,552.0,2726.0,543.0,3.2212,180500.0,NEAR OCEAN --119.19,34.18,32.0,3366.0,677.0,2857.0,669.0,4.6186,181100.0,NEAR OCEAN --119.18,34.19,36.0,4519.0,1081.0,4818.0,1061.0,2.8561,179100.0,NEAR OCEAN --119.18,34.18,31.0,2636.0,638.0,2695.0,614.0,3.2196,175800.0,NEAR OCEAN --119.17,34.18,38.0,3221.0,783.0,2792.0,736.0,2.9118,172400.0,NEAR OCEAN --119.17,34.17,34.0,2749.0,539.0,2330.0,559.0,4.2137,185600.0,NEAR OCEAN --119.17,34.17,32.0,1567.0,304.0,1482.0,308.0,3.5867,182100.0,NEAR OCEAN --119.17,34.17,42.0,1411.0,300.0,1295.0,339.0,2.6667,164900.0,NEAR OCEAN --119.17,34.17,25.0,1596.0,321.0,1378.0,308.0,4.0074,188000.0,NEAR OCEAN --119.17,34.17,21.0,2361.0,464.0,1146.0,396.0,3.6597,195100.0,NEAR OCEAN --119.19,34.17,31.0,1872.0,434.0,1511.0,405.0,3.2314,186800.0,NEAR OCEAN --119.19,34.17,35.0,4276.0,767.0,3295.0,708.0,4.2583,187300.0,NEAR OCEAN --119.18,34.17,32.0,2388.0,467.0,1746.0,483.0,3.9331,187600.0,NEAR OCEAN --119.18,34.16,30.0,2053.0,368.0,1496.0,391.0,3.6546,186200.0,NEAR OCEAN --119.19,34.17,27.0,2183.0,364.0,1458.0,388.0,4.4567,191100.0,NEAR OCEAN --119.19,34.16,34.0,2610.0,466.0,1543.0,433.0,3.9722,189000.0,NEAR OCEAN --119.19,34.16,35.0,2733.0,510.0,1814.0,511.0,4.4187,183400.0,NEAR OCEAN --119.22,34.15,32.0,3152.0,596.0,3490.0,526.0,2.725,450000.0,NEAR OCEAN --119.2,34.18,22.0,6465.0,1397.0,2694.0,1370.0,2.9832,165600.0,NEAR OCEAN --119.21,34.18,13.0,6103.0,1319.0,2986.0,1212.0,3.9718,215200.0,NEAR OCEAN --119.19,34.15,31.0,4175.0,1004.0,3310.0,954.0,3.1989,185400.0,NEAR OCEAN --119.2,34.15,27.0,2076.0,681.0,1904.0,647.0,1.4773,160800.0,NEAR OCEAN --119.21,34.12,15.0,5778.0,1285.0,1722.0,829.0,4.3427,305800.0,NEAR OCEAN --119.18,34.16,12.0,460.0,101.0,405.0,103.0,5.2783,167400.0,NEAR OCEAN --119.18,34.16,27.0,1832.0,415.0,1480.0,414.0,3.9643,186000.0,NEAR OCEAN --119.18,34.15,22.0,4769.0,1366.0,5534.0,1318.0,2.4167,192000.0,NEAR OCEAN --119.17,34.16,17.0,5276.0,1020.0,4066.0,984.0,4.5828,205400.0,NEAR OCEAN --119.17,34.15,18.0,2509.0,688.0,3129.0,677.0,2.6098,146100.0,NEAR OCEAN --119.13,34.19,16.0,6389.0,1330.0,6242.0,1340.0,4.0222,206800.0,NEAR OCEAN --119.15,34.17,22.0,1612.0,334.0,1431.0,335.0,4.8125,194400.0,NEAR OCEAN --119.14,34.17,16.0,1593.0,353.0,836.0,357.0,2.726,67500.0,NEAR OCEAN --119.11,34.17,37.0,470.0,105.0,522.0,83.0,2.0368,243800.0,NEAR OCEAN --119.17,34.19,28.0,1444.0,508.0,2145.0,437.0,1.6964,175000.0,NEAR OCEAN --119.14,34.15,25.0,2202.0,390.0,1415.0,412.0,4.43,207700.0,NEAR OCEAN --119.16,34.15,23.0,3204.0,644.0,2295.0,614.0,3.9485,196600.0,NEAR OCEAN --119.16,34.12,17.0,224.0,70.0,147.0,71.0,3.6167,280000.0,NEAR OCEAN --119.16,34.17,17.0,7982.0,1603.0,6437.0,1596.0,4.1279,223900.0,NEAR OCEAN --119.15,34.17,23.0,2239.0,537.0,784.0,497.0,1.6038,194300.0,NEAR OCEAN --119.15,34.2,25.0,3445.0,898.0,5558.0,894.0,3.0972,169300.0,NEAR OCEAN --119.17,34.25,15.0,1329.0,282.0,1001.0,284.0,3.65,189300.0,NEAR OCEAN --119.15,34.25,36.0,3511.0,664.0,2965.0,695.0,4.0878,186800.0,NEAR OCEAN --119.16,34.23,26.0,5444.0,1293.0,3700.0,1158.0,2.7556,213200.0,NEAR OCEAN --119.14,34.23,8.0,243.0,75.0,102.0,80.0,2.5714,500001.0,NEAR OCEAN --119.12,34.23,35.0,2028.0,554.0,2252.0,521.0,2.4643,182000.0,NEAR OCEAN --119.12,34.25,31.0,737.0,146.0,1436.0,168.0,3.5625,194100.0,NEAR OCEAN --119.04,34.28,21.0,1856.0,276.0,863.0,255.0,4.5833,500001.0,<1H OCEAN --118.96,34.3,16.0,3103.0,482.0,1567.0,467.0,6.907,500001.0,<1H OCEAN --119.06,34.24,21.0,7436.0,984.0,2982.0,988.0,7.6775,391200.0,<1H OCEAN --119.09,34.24,17.0,10214.0,1589.0,3409.0,1327.0,5.3806,452100.0,<1H OCEAN --119.02,34.26,40.0,1498.0,292.0,707.0,249.0,3.7974,228700.0,<1H OCEAN --119.03,34.25,25.0,3344.0,502.0,1483.0,496.0,6.196,340600.0,<1H OCEAN --119.04,34.24,20.0,7794.0,1192.0,4169.0,1188.0,5.9316,311900.0,<1H OCEAN --119.05,34.24,24.0,4341.0,646.0,1929.0,703.0,5.4298,279600.0,<1H OCEAN --118.99,34.23,9.0,10618.0,1617.0,4830.0,1606.0,6.6246,284200.0,<1H OCEAN --119.01,34.23,11.0,5785.0,1035.0,2760.0,985.0,4.693,232200.0,<1H OCEAN --118.94,34.24,5.0,10018.0,1233.0,4253.0,1120.0,8.9063,500001.0,<1H OCEAN --118.96,34.23,14.0,15207.0,2924.0,6301.0,2829.0,3.9699,217000.0,<1H OCEAN --119.03,34.24,25.0,3655.0,545.0,1776.0,544.0,5.687,238100.0,<1H OCEAN --119.03,34.23,16.0,5323.0,795.0,2493.0,779.0,5.6762,271300.0,<1H OCEAN --119.02,34.24,24.0,4650.0,748.0,2374.0,702.0,5.8838,232600.0,<1H OCEAN --119.03,34.23,21.0,3284.0,487.0,1832.0,521.0,5.2773,250800.0,<1H OCEAN --119.03,34.22,24.0,3421.0,656.0,2220.0,645.0,4.7831,214200.0,<1H OCEAN --119.04,34.23,21.0,9807.0,1614.0,4199.0,1554.0,5.0145,246600.0,<1H OCEAN --119.06,34.23,23.0,3471.0,510.0,2002.0,555.0,5.2742,257500.0,<1H OCEAN --119.06,34.23,29.0,3511.0,632.0,2591.0,596.0,3.0219,221700.0,<1H OCEAN --119.04,34.22,18.0,3117.0,583.0,2079.0,545.0,4.6458,222800.0,<1H OCEAN --119.06,34.22,13.0,4175.0,1321.0,2257.0,1271.0,3.1446,177100.0,<1H OCEAN --119.0,34.19,5.0,3634.0,718.0,1317.0,743.0,4.2917,227900.0,<1H OCEAN --119.05,34.19,39.0,143.0,36.0,113.0,33.0,2.8942,275000.0,NEAR OCEAN --119.08,34.17,32.0,166.0,22.0,63.0,29.0,7.3004,125000.0,NEAR OCEAN --119.03,34.21,11.0,4528.0,729.0,2398.0,684.0,5.3044,319000.0,<1H OCEAN --119.05,34.21,27.0,4357.0,926.0,2110.0,876.0,3.0119,218200.0,<1H OCEAN --119.09,34.22,8.0,40.0,10.0,309.0,16.0,4.0208,52500.0,NEAR OCEAN --119.05,34.13,12.0,57.0,22.0,69.0,15.0,5.0066,275000.0,NEAR OCEAN --118.97,34.18,18.0,7338.0,1020.0,3419.0,1058.0,7.0242,293100.0,<1H OCEAN --118.96,34.19,16.0,1807.0,346.0,587.0,296.0,1.9811,162500.0,<1H OCEAN --118.96,34.18,16.0,3137.0,462.0,1384.0,436.0,6.1306,258200.0,<1H OCEAN --118.98,34.16,16.0,2476.0,402.0,1251.0,387.0,5.7676,241300.0,<1H OCEAN --118.95,34.18,25.0,2237.0,331.0,1121.0,365.0,6.0994,254900.0,<1H OCEAN --118.95,34.17,9.0,2372.0,312.0,1039.0,321.0,7.6016,344900.0,<1H OCEAN --118.94,34.17,16.0,3746.0,508.0,1556.0,452.0,6.3303,299400.0,<1H OCEAN --118.94,34.17,15.0,1679.0,271.0,928.0,264.0,5.5681,235600.0,<1H OCEAN --118.95,34.17,23.0,2630.0,404.0,1184.0,385.0,5.2955,247600.0,<1H OCEAN --118.95,34.16,21.0,2953.0,419.0,1397.0,410.0,6.541,291500.0,<1H OCEAN --118.93,34.18,18.0,2730.0,415.0,1248.0,412.0,6.187,287900.0,<1H OCEAN --118.92,34.18,17.0,2400.0,352.0,1067.0,323.0,6.3522,259300.0,<1H OCEAN --118.92,34.17,17.0,1552.0,246.0,685.0,244.0,5.9836,294800.0,<1H OCEAN --118.94,34.16,3.0,1170.0,148.0,493.0,142.0,8.0428,500001.0,<1H OCEAN --118.91,34.18,17.0,3220.0,716.0,1381.0,733.0,2.8958,176000.0,<1H OCEAN --118.9,34.18,20.0,1288.0,179.0,539.0,181.0,5.8652,302600.0,<1H OCEAN --118.9,34.18,14.0,2627.0,328.0,1121.0,328.0,7.0504,333800.0,<1H OCEAN --118.9,34.17,14.0,4719.0,734.0,1880.0,731.0,5.3558,313800.0,<1H OCEAN --118.88,34.17,15.0,4260.0,,1701.0,669.0,5.1033,410700.0,<1H OCEAN --118.85,34.17,42.0,564.0,96.0,220.0,81.0,4.5625,318800.0,<1H OCEAN --118.84,34.16,18.0,6075.0,1056.0,2571.0,1018.0,5.22,399400.0,<1H OCEAN --118.84,34.15,17.0,3785.0,494.0,1527.0,507.0,8.4443,358500.0,<1H OCEAN --118.86,34.16,16.0,1509.0,216.0,578.0,235.0,10.2614,410800.0,<1H OCEAN --118.85,34.14,24.0,1999.0,244.0,759.0,247.0,8.7657,366300.0,<1H OCEAN --118.82,34.15,9.0,655.0,110.0,222.0,109.0,7.8528,337500.0,NEAR OCEAN --118.83,34.15,16.0,3380.0,731.0,1227.0,641.0,4.2857,233200.0,NEAR OCEAN --118.83,34.14,16.0,1316.0,194.0,450.0,173.0,10.1597,500001.0,NEAR OCEAN --118.83,34.14,16.0,1956.0,312.0,671.0,319.0,6.4001,321800.0,NEAR OCEAN --118.85,34.14,16.0,4109.0,543.0,1409.0,560.0,8.1064,423400.0,<1H OCEAN --118.95,34.19,24.0,2719.0,434.0,1318.0,424.0,4.675,228800.0,<1H OCEAN --118.94,34.18,24.0,3689.0,585.0,1898.0,581.0,5.9224,239400.0,<1H OCEAN --118.94,34.18,25.0,3502.0,508.0,1713.0,508.0,5.5181,242100.0,<1H OCEAN --118.93,34.2,17.0,2619.0,606.0,1655.0,557.0,3.886,281300.0,<1H OCEAN --118.92,34.19,16.0,3631.0,974.0,2585.0,923.0,3.0691,130400.0,<1H OCEAN --118.9,34.2,16.0,6510.0,817.0,2304.0,778.0,7.9943,452100.0,<1H OCEAN --118.9,34.19,26.0,1582.0,196.0,573.0,182.0,10.0595,500001.0,<1H OCEAN --118.91,34.22,15.0,5644.0,757.0,2659.0,783.0,6.7559,312000.0,<1H OCEAN --118.89,34.22,20.0,3878.0,665.0,1651.0,591.0,5.5402,264600.0,<1H OCEAN --118.87,34.23,14.0,4242.0,746.0,1858.0,689.0,6.0145,287100.0,<1H OCEAN --118.88,34.22,16.0,2343.0,393.0,2007.0,383.0,5.756,302700.0,<1H OCEAN --118.87,34.22,14.0,3108.0,451.0,1566.0,434.0,6.2423,305400.0,<1H OCEAN --118.85,34.25,17.0,5593.0,732.0,1992.0,660.0,7.2965,342900.0,<1H OCEAN --118.85,34.23,13.0,5094.0,764.0,2230.0,737.0,6.4823,290900.0,<1H OCEAN --118.86,34.22,26.0,1932.0,280.0,886.0,289.0,5.0855,232200.0,<1H OCEAN --118.86,34.22,26.0,1775.0,295.0,1004.0,323.0,5.5845,251700.0,<1H OCEAN --118.86,34.22,22.0,1230.0,200.0,673.0,195.0,6.2708,251400.0,<1H OCEAN --118.85,34.21,25.0,1328.0,209.0,691.0,228.0,4.9234,241400.0,<1H OCEAN --118.85,34.21,29.0,2195.0,414.0,1360.0,401.0,3.4773,206700.0,<1H OCEAN --118.86,34.21,26.0,3354.0,659.0,2020.0,648.0,4.1576,211800.0,<1H OCEAN --118.88,34.22,22.0,3654.0,517.0,1565.0,518.0,6.2748,274800.0,<1H OCEAN --118.87,34.21,26.0,4439.0,616.0,1881.0,592.0,6.2935,258000.0,<1H OCEAN --118.88,34.21,26.0,1590.0,196.0,654.0,199.0,6.5851,300000.0,<1H OCEAN --118.87,34.2,26.0,1924.0,245.0,775.0,244.0,7.001,286800.0,<1H OCEAN --118.88,34.2,23.0,4862.0,597.0,1938.0,594.0,7.3409,316000.0,<1H OCEAN --118.88,34.19,26.0,2296.0,275.0,842.0,263.0,7.7889,309900.0,<1H OCEAN --118.86,34.2,32.0,2399.0,384.0,1199.0,390.0,4.125,264600.0,<1H OCEAN --118.86,34.19,26.0,3135.0,480.0,1474.0,458.0,6.1949,243500.0,<1H OCEAN --118.87,34.19,23.0,2179.0,423.0,1338.0,406.0,5.5224,240700.0,<1H OCEAN --118.88,34.19,16.0,7268.0,1729.0,3232.0,1653.0,3.3703,228700.0,<1H OCEAN --118.87,34.18,21.0,5661.0,1369.0,3188.0,1308.0,3.4676,212800.0,<1H OCEAN --118.85,34.18,11.0,5873.0,1455.0,3089.0,1365.0,3.5504,173800.0,<1H OCEAN --118.84,34.17,16.0,3449.0,820.0,1877.0,816.0,3.2176,187500.0,<1H OCEAN --118.85,34.2,28.0,2040.0,297.0,848.0,280.0,6.7612,323700.0,<1H OCEAN --118.86,34.19,29.0,1326.0,185.0,586.0,187.0,6.5474,422900.0,<1H OCEAN --118.86,34.19,27.0,1931.0,261.0,736.0,244.0,6.7805,392900.0,<1H OCEAN --118.85,34.19,27.0,2287.0,320.0,967.0,321.0,6.5162,349400.0,<1H OCEAN --118.83,34.18,23.0,5647.0,786.0,2050.0,738.0,6.3586,348300.0,<1H OCEAN --118.83,34.17,17.0,4668.0,628.0,1917.0,624.0,8.1397,353900.0,<1H OCEAN --118.9,34.14,35.0,1503.0,263.0,576.0,216.0,5.1457,500001.0,<1H OCEAN --119.0,34.08,17.0,1822.0,438.0,578.0,291.0,5.4346,428600.0,NEAR OCEAN --118.75,34.18,4.0,16704.0,2704.0,6187.0,2207.0,6.6122,357600.0,NEAR OCEAN --118.75,34.17,18.0,6217.0,858.0,2703.0,834.0,6.8075,325900.0,NEAR OCEAN --118.69,34.18,11.0,1177.0,138.0,415.0,119.0,10.0472,500001.0,<1H OCEAN --118.8,34.19,4.0,15572.0,2222.0,5495.0,2152.0,8.6499,500001.0,<1H OCEAN --118.83,34.23,6.0,8803.0,1114.0,3385.0,1010.0,8.7288,425800.0,<1H OCEAN --118.84,34.22,11.0,3170.0,420.0,1418.0,432.0,7.5118,361900.0,<1H OCEAN --118.84,34.21,16.0,4975.0,949.0,2537.0,971.0,5.2361,224700.0,<1H OCEAN --118.8,34.21,16.0,1466.0,196.0,661.0,209.0,6.2893,282700.0,<1H OCEAN --118.74,34.25,25.0,1815.0,281.0,960.0,284.0,5.4243,214700.0,<1H OCEAN --118.74,34.26,22.0,4337.0,673.0,2347.0,636.0,5.4091,222400.0,<1H OCEAN --118.7,34.24,28.0,2405.0,462.0,1011.0,378.0,4.504,204300.0,<1H OCEAN --118.64,34.25,47.0,1315.0,290.0,581.0,268.0,5.4024,253000.0,<1H OCEAN --118.69,34.21,10.0,3663.0,409.0,1179.0,371.0,12.542,500001.0,<1H OCEAN --118.81,34.25,4.0,9147.0,1827.0,3950.0,1661.0,5.716,320800.0,<1H OCEAN --118.79,34.26,17.0,1986.0,249.0,761.0,241.0,7.2137,401900.0,<1H OCEAN --118.8,34.27,12.0,3330.0,600.0,1577.0,584.0,4.6985,264100.0,<1H OCEAN --118.77,34.24,6.0,16222.0,2309.0,6700.0,2080.0,6.4963,308100.0,<1H OCEAN --118.78,34.26,24.0,4072.0,582.0,1834.0,565.0,6.0487,254500.0,<1H OCEAN --118.78,34.25,13.0,1841.0,237.0,833.0,231.0,7.7785,404700.0,<1H OCEAN --118.85,34.27,50.0,187.0,33.0,130.0,35.0,3.3438,500001.0,<1H OCEAN --118.9,34.3,13.0,5591.0,1013.0,3188.0,971.0,5.5925,208600.0,<1H OCEAN --118.83,34.33,6.0,6679.0,1164.0,3196.0,1157.0,5.4493,242600.0,<1H OCEAN --118.89,34.29,28.0,1545.0,371.0,1334.0,318.0,3.4375,194100.0,<1H OCEAN --118.89,34.33,23.0,366.0,62.0,265.0,66.0,3.125,375000.0,<1H OCEAN --118.89,34.28,30.0,917.0,157.0,678.0,171.0,5.8133,195700.0,<1H OCEAN --118.88,34.28,22.0,3369.0,771.0,2751.0,710.0,4.0474,182100.0,<1H OCEAN --118.91,34.28,6.0,6106.0,1134.0,3246.0,1062.0,5.2206,280200.0,<1H OCEAN --118.9,34.26,5.0,25187.0,3521.0,11956.0,3478.0,6.9712,321300.0,<1H OCEAN --118.81,34.28,20.0,3678.0,684.0,1882.0,694.0,4.1607,196800.0,<1H OCEAN --118.78,34.27,20.0,2743.0,685.0,1798.0,613.0,3.6761,170900.0,<1H OCEAN --118.79,34.27,27.0,1146.0,189.0,595.0,197.0,4.5833,198500.0,<1H OCEAN --118.77,34.27,7.0,3074.0,794.0,1816.0,654.0,2.7137,196400.0,<1H OCEAN --118.77,34.27,10.0,1658.0,310.0,1053.0,333.0,4.7574,209900.0,<1H OCEAN --118.77,34.28,6.0,4685.0,965.0,2180.0,909.0,4.5458,208200.0,<1H OCEAN --118.77,34.28,27.0,1416.0,251.0,1024.0,268.0,5.1074,185200.0,<1H OCEAN --118.77,34.28,26.0,2873.0,480.0,1915.0,475.0,5.3681,187700.0,<1H OCEAN --118.75,34.29,17.0,5512.0,,2734.0,814.0,6.6073,258100.0,<1H OCEAN --118.75,34.28,22.0,3844.0,537.0,1665.0,492.0,6.2059,239900.0,<1H OCEAN --118.76,34.28,21.0,2786.0,342.0,1114.0,322.0,5.8578,266300.0,<1H OCEAN --118.75,34.27,20.0,3495.0,449.0,1629.0,428.0,5.8096,264400.0,<1H OCEAN --118.75,34.28,27.0,1452.0,251.0,928.0,259.0,4.6908,186600.0,<1H OCEAN --118.75,34.27,26.0,966.0,191.0,690.0,191.0,5.1698,188000.0,<1H OCEAN --118.75,34.27,24.0,3241.0,461.0,1567.0,446.0,5.5983,233300.0,<1H OCEAN --118.75,34.27,25.0,3371.0,502.0,1717.0,506.0,6.1253,225000.0,<1H OCEAN --118.71,34.27,26.0,990.0,223.0,719.0,232.0,3.163,179400.0,<1H OCEAN --118.73,34.27,23.0,4550.0,762.0,2301.0,744.0,4.556,205300.0,<1H OCEAN --118.74,34.27,23.0,2493.0,522.0,1488.0,505.0,4.18,215000.0,<1H OCEAN --118.77,34.26,26.0,3038.0,468.0,1825.0,468.0,5.6385,196900.0,<1H OCEAN --118.76,34.26,26.0,1750.0,284.0,962.0,278.0,4.5673,190400.0,<1H OCEAN --118.76,34.26,26.0,1929.0,293.0,1067.0,320.0,5.4038,222100.0,<1H OCEAN --118.75,34.26,26.0,1767.0,265.0,1040.0,250.0,5.4787,198100.0,<1H OCEAN --118.75,34.26,24.0,2234.0,373.0,1325.0,383.0,5.4604,193400.0,<1H OCEAN --118.74,34.26,27.0,3467.0,545.0,1798.0,493.0,4.8717,204100.0,<1H OCEAN --118.74,34.28,21.0,4056.0,637.0,1974.0,634.0,5.9024,221000.0,<1H OCEAN --118.73,34.27,25.0,3409.0,493.0,1699.0,484.0,5.653,225800.0,<1H OCEAN --118.71,34.28,27.0,2911.0,562.0,1773.0,580.0,4.6528,186600.0,<1H OCEAN --118.7,34.28,25.0,2377.0,491.0,1200.0,439.0,4.7083,196100.0,<1H OCEAN --118.7,34.28,27.0,727.0,136.0,467.0,144.0,3.7188,250000.0,<1H OCEAN --118.72,34.28,17.0,2654.0,478.0,1392.0,451.0,5.4459,223900.0,<1H OCEAN --118.72,34.28,18.0,2229.0,371.0,1283.0,379.0,5.5955,217700.0,<1H OCEAN --118.72,34.28,17.0,3051.0,,1705.0,495.0,5.7376,218600.0,<1H OCEAN --118.67,34.28,21.0,4059.0,598.0,2133.0,634.0,5.6949,235300.0,<1H OCEAN --118.68,34.28,17.0,6488.0,1102.0,3199.0,1070.0,5.0962,238000.0,<1H OCEAN --118.67,34.3,5.0,6123.0,825.0,2440.0,736.0,7.9013,393000.0,<1H OCEAN --118.68,34.28,5.0,6150.0,1265.0,3188.0,1266.0,4.7034,223000.0,<1H OCEAN --118.68,34.27,16.0,4637.0,941.0,2476.0,878.0,4.0568,225200.0,<1H OCEAN --118.68,34.27,26.0,1561.0,212.0,817.0,242.0,5.477,209100.0,<1H OCEAN --118.67,34.27,15.0,3221.0,659.0,1390.0,607.0,3.5313,191800.0,<1H OCEAN --118.67,34.27,10.0,3753.0,678.0,1859.0,660.0,4.9946,204600.0,<1H OCEAN --118.65,34.27,23.0,1724.0,265.0,934.0,306.0,6.0783,229200.0,<1H OCEAN --118.71,34.29,24.0,2983.0,406.0,1203.0,381.0,6.3236,302000.0,<1H OCEAN --118.71,34.29,21.0,2751.0,493.0,1432.0,483.0,5.2067,221200.0,<1H OCEAN --118.7,34.28,27.0,3536.0,646.0,1837.0,580.0,4.4964,238300.0,<1H OCEAN --118.7,34.3,23.0,2831.0,406.0,1284.0,393.0,6.1383,244100.0,<1H OCEAN --118.7,34.29,25.0,1678.0,252.0,862.0,268.0,6.1834,229800.0,<1H OCEAN --118.71,34.3,23.0,1983.0,280.0,978.0,287.0,6.3199,236700.0,<1H OCEAN --118.7,34.3,27.0,1527.0,220.0,756.0,226.0,6.1825,227000.0,<1H OCEAN --118.71,34.3,20.0,1586.0,187.0,699.0,209.0,6.5483,335000.0,<1H OCEAN --118.68,34.33,45.0,121.0,25.0,67.0,27.0,2.9821,325000.0,<1H OCEAN --118.75,34.33,27.0,534.0,85.0,243.0,77.0,8.2787,330000.0,<1H OCEAN --118.73,34.29,11.0,5451.0,736.0,2526.0,752.0,7.355,343900.0,<1H OCEAN --118.72,34.29,22.0,3266.0,529.0,1595.0,494.0,6.0368,248000.0,<1H OCEAN --118.73,34.29,8.0,4983.0,754.0,2510.0,725.0,6.9454,276500.0,<1H OCEAN --121.52,38.59,35.0,6418.0,1545.0,3814.0,1496.0,1.6647,69100.0,INLAND --121.51,38.58,42.0,1822.0,636.0,1372.0,560.0,1.2542,76000.0,INLAND --121.53,38.6,25.0,5154.0,1105.0,3196.0,1073.0,2.7566,80200.0,INLAND --121.54,38.59,29.0,2242.0,493.0,1481.0,478.0,2.0781,74800.0,INLAND --121.54,38.59,40.0,2120.0,504.0,1304.0,464.0,2.0368,67800.0,INLAND --121.55,38.59,36.0,435.0,95.0,285.0,90.0,1.2292,69600.0,INLAND --121.63,38.67,34.0,431.0,85.0,391.0,77.0,2.625,225000.0,INLAND --121.52,38.58,24.0,938.0,275.0,508.0,253.0,1.642,32500.0,INLAND --121.53,38.56,39.0,2438.0,483.0,1103.0,472.0,2.9375,86600.0,INLAND --121.52,38.57,43.0,2360.0,471.0,1041.0,452.0,2.89,86200.0,INLAND --121.54,38.58,30.0,4648.0,1252.0,2524.0,1089.0,1.3177,74300.0,INLAND --121.56,38.58,32.0,2070.0,561.0,2046.0,523.0,1.9426,82300.0,INLAND --121.53,38.58,33.0,4988.0,1169.0,2414.0,1075.0,1.9728,76400.0,INLAND --121.53,38.58,35.0,1316.0,321.0,732.0,336.0,2.1213,79200.0,INLAND --121.53,38.57,34.0,3395.0,592.0,1518.0,627.0,4.0833,118500.0,INLAND --121.54,38.54,36.0,1672.0,302.0,969.0,337.0,3.0536,73100.0,INLAND --121.55,38.51,22.0,2403.0,431.0,1088.0,421.0,3.9,146900.0,INLAND --121.55,38.55,10.0,6227.0,1164.0,2909.0,1077.0,4.106,115900.0,INLAND --121.56,38.44,43.0,1485.0,270.0,653.0,251.0,3.0,141700.0,INLAND --121.61,38.38,37.0,1365.0,276.0,952.0,268.0,4.037,156900.0,INLAND --121.79,38.54,7.0,1777.0,513.0,4479.0,504.0,1.4653,310000.0,INLAND --121.8,38.55,11.0,5121.0,899.0,2258.0,901.0,4.7168,223200.0,INLAND --121.78,38.55,12.0,10509.0,2186.0,5633.0,2138.0,2.9605,204300.0,INLAND --121.76,38.57,11.0,15018.0,3008.0,7984.0,2962.0,3.1371,201800.0,INLAND --121.81,38.58,17.0,1964.0,314.0,808.0,286.0,5.9629,286000.0,INLAND --121.7,38.6,16.0,2372.0,588.0,1400.0,583.0,2.8922,153600.0,INLAND --121.67,38.54,13.0,6141.0,1019.0,2553.0,967.0,4.2432,326500.0,INLAND --121.74,38.56,18.0,3960.0,1151.0,2248.0,1144.0,1.7257,179100.0,INLAND --121.74,38.55,34.0,2299.0,579.0,1300.0,536.0,1.6435,148500.0,INLAND --121.73,38.55,34.0,1717.0,393.0,1224.0,387.0,2.7917,130800.0,INLAND --121.73,38.54,18.0,974.0,317.0,521.0,317.0,1.0633,137500.0,INLAND --121.73,38.56,30.0,3306.0,629.0,1623.0,648.0,2.8614,145200.0,INLAND --121.71,38.56,20.0,8627.0,1516.0,4071.0,1466.0,4.2198,164100.0,INLAND --121.72,38.54,16.0,2790.0,624.0,1386.0,636.0,3.1908,194300.0,INLAND --121.7,38.54,13.0,6819.0,1158.0,2828.0,1115.0,4.6225,226500.0,INLAND --121.75,38.55,33.0,2479.0,382.0,979.0,377.0,4.7308,236200.0,INLAND --121.74,38.55,33.0,6861.0,1820.0,3717.0,1767.0,1.7311,182600.0,INLAND --121.76,38.55,23.0,8800.0,1857.0,6330.0,1832.0,2.065,219400.0,INLAND --121.75,38.55,26.0,4802.0,950.0,2199.0,939.0,3.7452,227700.0,INLAND --121.77,38.69,47.0,1697.0,318.0,775.0,276.0,3.4559,123100.0,INLAND --121.77,38.68,43.0,2559.0,598.0,1820.0,591.0,2.1927,107900.0,INLAND --121.76,38.68,38.0,674.0,178.0,701.0,189.0,1.3942,69400.0,INLAND --121.8,38.69,8.0,3544.0,691.0,2118.0,678.0,3.7477,122200.0,INLAND --121.79,38.69,23.0,1755.0,321.0,1061.0,313.0,2.8864,103100.0,INLAND --121.78,38.69,31.0,2547.0,535.0,1579.0,509.0,2.6774,95800.0,INLAND --121.8,38.68,11.0,3851.0,892.0,1847.0,747.0,3.4331,120600.0,INLAND --121.79,38.68,24.0,3794.0,848.0,2225.0,864.0,2.8068,95300.0,INLAND --121.78,38.68,39.0,2806.0,662.0,1659.0,638.0,1.9787,97800.0,INLAND --121.8,38.67,11.0,3251.0,623.0,1700.0,615.0,3.1875,172000.0,INLAND --121.79,38.67,17.0,2875.0,810.0,1876.0,749.0,1.951,152500.0,INLAND --121.78,38.68,43.0,3766.0,847.0,1855.0,817.0,2.3468,119400.0,INLAND --121.8,38.67,10.0,2086.0,380.0,1073.0,378.0,4.5526,154400.0,INLAND --121.79,38.67,30.0,2602.0,401.0,981.0,405.0,4.7222,167200.0,INLAND --121.78,38.67,38.0,2948.0,478.0,1123.0,460.0,4.0556,146900.0,INLAND --121.77,38.67,42.0,2670.0,518.0,1548.0,534.0,2.2794,108900.0,INLAND --121.77,38.67,45.0,2438.0,462.0,1415.0,510.0,2.8351,107200.0,INLAND --121.75,38.67,9.0,12139.0,2640.0,6837.0,2358.0,3.125,132500.0,INLAND --121.71,38.72,32.0,710.0,155.0,550.0,154.0,2.8882,151400.0,INLAND --121.7,38.65,22.0,1360.0,282.0,808.0,229.0,2.4167,225000.0,INLAND --121.84,38.65,29.0,3167.0,548.0,1554.0,534.0,4.3487,200700.0,INLAND --121.79,38.66,15.0,6809.0,1052.0,3060.0,1060.0,5.3064,165000.0,INLAND --121.78,38.66,18.0,4224.0,632.0,1907.0,641.0,4.8226,139900.0,INLAND --121.76,38.66,17.0,5320.0,984.0,2866.0,928.0,4.1997,133400.0,INLAND --121.96,38.54,6.0,1485.0,318.0,894.0,308.0,3.2222,139600.0,INLAND --121.99,38.53,6.0,4598.0,834.0,2561.0,812.0,3.4186,127300.0,INLAND --121.98,38.52,27.0,3044.0,565.0,1583.0,514.0,2.7989,126700.0,INLAND --122.05,38.56,20.0,1005.0,168.0,457.0,157.0,5.679,225000.0,INLAND --121.92,38.57,10.0,1320.0,246.0,898.0,228.0,1.9327,193800.0,INLAND --121.9,38.72,38.0,575.0,107.0,259.0,109.0,3.75,187500.0,INLAND --122.0,38.83,26.0,272.0,49.0,194.0,52.0,3.4187,98400.0,INLAND --121.94,38.89,15.0,1462.0,314.0,774.0,271.0,2.5478,91700.0,INLAND --121.81,38.84,37.0,352.0,65.0,238.0,67.0,2.8542,275000.0,INLAND --121.72,38.8,36.0,1069.0,228.0,567.0,190.0,1.9559,78400.0,INLAND --121.77,38.76,32.0,1950.0,385.0,1145.0,363.0,2.8365,87900.0,INLAND --122.21,38.83,20.0,1138.0,221.0,459.0,209.0,3.1534,123400.0,INLAND --122.16,38.9,33.0,1221.0,236.0,488.0,199.0,3.7574,92700.0,INLAND --122.0,38.73,31.0,371.0,74.0,208.0,84.0,3.875,137500.0,INLAND --121.95,38.65,19.0,1265.0,228.0,755.0,218.0,3.3472,69800.0,INLAND --122.04,38.68,26.0,1113.0,222.0,689.0,234.0,3.0486,83600.0,INLAND --122.03,38.69,23.0,1796.0,380.0,939.0,330.0,2.7955,96300.0,INLAND --121.6,39.15,19.0,1396.0,336.0,940.0,309.0,1.5208,70300.0,INLAND --121.59,39.15,5.0,1922.0,489.0,938.0,439.0,2.0474,61300.0,INLAND --121.59,39.15,48.0,1783.0,399.0,938.0,374.0,1.6652,58900.0,INLAND --121.59,39.14,41.0,1492.0,350.0,804.0,353.0,1.684,71300.0,INLAND --121.58,39.15,34.0,1376.0,376.0,702.0,317.0,1.4946,55500.0,INLAND --121.58,39.14,52.0,662.0,160.0,520.0,149.0,0.8928,55000.0,INLAND --121.58,39.16,36.0,1206.0,197.0,537.0,204.0,3.3611,79800.0,INLAND --121.57,39.16,21.0,1872.0,302.0,870.0,301.0,3.725,84700.0,INLAND --121.56,39.16,12.0,3349.0,642.0,2029.0,619.0,2.9647,88800.0,INLAND --121.57,39.16,33.0,2033.0,375.0,914.0,330.0,2.6964,68500.0,INLAND --121.58,39.16,33.0,1897.0,378.0,888.0,385.0,2.1111,68700.0,INLAND --121.58,39.15,38.0,1756.0,396.0,837.0,401.0,1.9122,55500.0,INLAND --121.56,39.16,35.0,2157.0,441.0,1009.0,409.0,1.5827,63000.0,INLAND --121.57,39.16,18.0,1632.0,367.0,769.0,330.0,3.1029,71700.0,INLAND --121.57,39.13,30.0,442.0,103.0,413.0,88.0,1.5694,57900.0,INLAND --121.56,39.13,17.0,2277.0,608.0,1607.0,562.0,1.5085,69700.0,INLAND --121.54,39.13,18.0,4289.0,1021.0,2707.0,939.0,1.3375,59600.0,INLAND --121.54,39.12,17.0,4251.0,899.0,3265.0,934.0,2.3496,65000.0,INLAND --121.58,39.12,26.0,2796.0,629.0,2017.0,632.0,1.8355,61200.0,INLAND --121.57,39.12,30.0,2601.0,534.0,1702.0,506.0,2.08,56600.0,INLAND --121.57,39.1,28.0,1442.0,333.0,832.0,286.0,1.8413,62300.0,INLAND --121.59,39.1,24.0,1107.0,261.0,768.0,205.0,1.7167,48800.0,INLAND --121.56,39.11,18.0,2171.0,480.0,1527.0,447.0,2.3011,57500.0,INLAND --121.56,39.1,28.0,2130.0,484.0,1195.0,439.0,1.3631,45500.0,INLAND --121.55,39.1,27.0,1783.0,441.0,1163.0,409.0,1.2857,47000.0,INLAND --121.56,39.08,26.0,1377.0,289.0,761.0,267.0,1.4934,48300.0,INLAND --121.55,39.09,31.0,1728.0,365.0,1167.0,384.0,1.4958,53400.0,INLAND --121.54,39.08,26.0,2276.0,460.0,1455.0,474.0,2.4695,58000.0,INLAND --121.54,39.08,23.0,1076.0,216.0,724.0,197.0,2.3598,57500.0,INLAND --121.53,39.08,15.0,1810.0,441.0,1157.0,375.0,2.0469,55100.0,INLAND --121.53,39.06,20.0,561.0,109.0,308.0,114.0,3.3021,70800.0,INLAND --121.55,39.06,25.0,1332.0,247.0,726.0,226.0,2.25,63400.0,INLAND --121.56,39.01,22.0,1891.0,340.0,1023.0,296.0,2.7303,99100.0,INLAND --121.48,39.05,40.0,198.0,41.0,151.0,48.0,4.5625,100000.0,INLAND --121.47,39.01,37.0,1244.0,247.0,484.0,157.0,2.3661,77500.0,INLAND --121.44,39.0,20.0,755.0,147.0,457.0,157.0,2.4167,67000.0,INLAND --121.37,39.03,32.0,1158.0,244.0,598.0,227.0,2.8235,65500.0,INLAND --121.41,39.04,16.0,1698.0,300.0,731.0,291.0,3.0739,87200.0,INLAND --121.52,39.12,37.0,102.0,17.0,29.0,14.0,4.125,72000.0,INLAND --121.43,39.18,36.0,1124.0,184.0,504.0,171.0,2.1667,93800.0,INLAND --121.32,39.13,5.0,358.0,65.0,169.0,59.0,3.0,162500.0,INLAND --121.48,39.1,19.0,2043.0,421.0,1018.0,390.0,2.5952,92400.0,INLAND --121.39,39.12,28.0,10035.0,1856.0,6912.0,1818.0,2.0943,108300.0,INLAND --121.32,39.29,11.0,2640.0,505.0,1257.0,445.0,3.5673,112000.0,INLAND --121.4,39.33,15.0,2655.0,493.0,1200.0,432.0,3.5179,107200.0,INLAND --121.45,39.26,15.0,2319.0,416.0,1047.0,385.0,3.125,115600.0,INLAND --121.53,39.19,27.0,2080.0,412.0,1082.0,382.0,2.5495,98300.0,INLAND --121.56,39.27,28.0,2332.0,395.0,1041.0,344.0,3.7125,116800.0,INLAND --121.09,39.48,25.0,1665.0,374.0,845.0,330.0,1.5603,78100.0,INLAND --121.21,39.49,18.0,697.0,150.0,356.0,114.0,2.5568,77100.0,INLAND --121.22,39.43,17.0,2254.0,485.0,1007.0,433.0,1.7,92300.0,INLAND --121.32,39.43,18.0,1860.0,409.0,741.0,349.0,1.8672,84700.0,INLAND --121.24,39.37,16.0,2785.0,616.0,1387.0,530.0,2.3886,89400.0,INLAND From 37a8f9284464903f028d8da970210e0c4a696295 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Tue, 21 Jan 2020 15:39:56 -0800 Subject: [PATCH 210/214] [RFC 1082] - uint type abbreviation (#8185) * Add uint type abbreviation * Add uint casting function and test * Update surface area tests * update --- src/fsharp/FSharp.Core/prim-types-prelude.fs | 1 + src/fsharp/FSharp.Core/prim-types-prelude.fsi | 3 +++ src/fsharp/FSharp.Core/prim-types.fs | 5 ++++- src/fsharp/FSharp.Core/prim-types.fsi | 9 +++++++++ tests/fsharp/Compiler/Language/UIntTests.fs | 10 ++++++++++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/fsharp/Compiler/Language/UIntTests.fs diff --git a/src/fsharp/FSharp.Core/prim-types-prelude.fs b/src/fsharp/FSharp.Core/prim-types-prelude.fs index 74c8410170..b95933a7aa 100644 --- a/src/fsharp/FSharp.Core/prim-types-prelude.fs +++ b/src/fsharp/FSharp.Core/prim-types-prelude.fs @@ -28,6 +28,7 @@ namespace Microsoft.FSharp.Core type bool = System.Boolean type decimal = System.Decimal type int = int32 + type uint = uint32 type ``[]``<'T> = (# "!0[]" #) type ``[,]``<'T> = (# "!0[0 ...,0 ...]" #) diff --git a/src/fsharp/FSharp.Core/prim-types-prelude.fsi b/src/fsharp/FSharp.Core/prim-types-prelude.fsi index ed68965bf2..f4dd023159 100644 --- a/src/fsharp/FSharp.Core/prim-types-prelude.fsi +++ b/src/fsharp/FSharp.Core/prim-types-prelude.fsi @@ -78,6 +78,9 @@ namespace Microsoft.FSharp.Core /// An abbreviation for the CLI type System.Int32. type int = int32 + /// An abbreviation for the CLI type System.UInt32. + type uint = uint32 + /// Single dimensional, zero-based arrays, written int[], string[] etc. /// Use the values in the Array module to manipulate values /// of this type, or the notation arr.[x] to get/set array diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 51c38a9642..4bff05856c 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -3731,7 +3731,10 @@ namespace Microsoft.FSharp.Core when ^T : byte = (# "conv.i4" value : int32 #) [] - let inline int value = int32 value + let inline int value = int32 value + + [] + let inline uint value = uint32 value [] let inline enum< ^T when ^T : enum > (value:int32) : ^T = EnumOfValue value diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index fd6c7557ef..afa0719602 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -2639,6 +2639,15 @@ namespace Microsoft.FSharp.Core [] val inline int : value:^T -> int when ^T : (static member op_Explicit : ^T -> int) and default ^T : int + /// Converts the argument to an unsigned 32-bit integer. This is a direct conversion for all + /// primitive numeric types. For strings, the input is converted using UInt32.Parse() + /// with InvariantCulture settings. Otherwise the operation requires an appropriate + /// static conversion method on the input type. + /// The input value. + /// The converted int + [] + val inline uint: value:^T -> uint when ^T: (static member op_Explicit: ^T -> uint) and default ^T: uint + /// Converts the argument to a particular enum type. /// The input value. /// The converted enum type. diff --git a/tests/fsharp/Compiler/Language/UIntTests.fs b/tests/fsharp/Compiler/Language/UIntTests.fs new file mode 100644 index 0000000000..c317f96e02 --- /dev/null +++ b/tests/fsharp/Compiler/Language/UIntTests.fs @@ -0,0 +1,10 @@ +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework + +[] +module UIntTests = + let ``uint type abbreviation works`` () = + let src = "let x = uint 12" + let expectedErrors = [||] + CompilerAssert.TypeCheckWithErrors src expectedErrors \ No newline at end of file From 4f1dd8cf2758cee865fdfa537fd657bde79432ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Cie=C5=9Blak?= Date: Wed, 22 Jan 2020 00:56:04 +0100 Subject: [PATCH 211/214] Expose more services (#8291) * Expose simplify name analyzer * Move IsPrivateToFile to the FSharpSymbolUse from extensions * Expose Unused Declarations analyzer * Update src/fsharp/symbols/Symbols.fsi Co-Authored-By: Phillip Carter * Apply feedback Co-authored-by: Phillip Carter --- src/fsharp/service/ServiceAnalysis.fs | 111 +++++++++++++++++++++++++ src/fsharp/service/ServiceAnalysis.fsi | 18 +++- src/fsharp/symbols/Symbols.fs | 25 ++++++ src/fsharp/symbols/Symbols.fsi | 2 + 4 files changed, 155 insertions(+), 1 deletion(-) diff --git a/src/fsharp/service/ServiceAnalysis.fs b/src/fsharp/service/ServiceAnalysis.fs index e568767a1e..33c5a45775 100644 --- a/src/fsharp/service/ServiceAnalysis.fs +++ b/src/fsharp/service/ServiceAnalysis.fs @@ -226,4 +226,115 @@ module UnusedOpens = let symbolUses = splitSymbolUses symbolUses let openStatements = getOpenStatements checkFileResults.OpenDeclarations return! filterOpenStatements symbolUses openStatements + } + +module SimplifyNames = + type SimplifiableRange = { + Range: range + RelativeName: string + } + + let getPlidLength (plid: string list) = (plid |> List.sumBy String.length) + plid.Length + + let getSimplifiableNames (checkFileResults: FSharpCheckFileResults, getSourceLineStr: int -> string) : Async = + async { + let result = ResizeArray() + let! symbolUses = checkFileResults.GetAllUsesOfAllSymbolsInFile() + let symbolUses = + symbolUses + |> Array.filter (fun symbolUse -> not symbolUse.IsFromOpenStatement) + |> Array.Parallel.map (fun symbolUse -> + let lineStr = getSourceLineStr symbolUse.RangeAlternate.StartLine + // for `System.DateTime.Now` it returns ([|"System"; "DateTime"|], "Now") + let partialName = QuickParse.GetPartialLongNameEx(lineStr, symbolUse.RangeAlternate.EndColumn - 1) + // `symbolUse.RangeAlternate.Start` does not point to the start of plid, it points to start of `name`, + // so we have to calculate plid's start ourselves. + let plidStartCol = symbolUse.RangeAlternate.EndColumn - partialName.PartialIdent.Length - (getPlidLength partialName.QualifyingIdents) + symbolUse, partialName.QualifyingIdents, plidStartCol, partialName.PartialIdent) + |> Array.filter (fun (_, plid, _, name) -> name <> "" && not (List.isEmpty plid)) + |> Array.groupBy (fun (symbolUse, _, plidStartCol, _) -> symbolUse.RangeAlternate.StartLine, plidStartCol) + |> Array.map (fun (_, xs) -> xs |> Array.maxBy (fun (symbolUse, _, _, _) -> symbolUse.RangeAlternate.EndColumn)) + + for symbolUse, plid, plidStartCol, name in symbolUses do + if not symbolUse.IsFromDefinition then + let posAtStartOfName = + let r = symbolUse.RangeAlternate + if r.StartLine = r.EndLine then Range.mkPos r.StartLine (r.EndColumn - name.Length) + else r.Start + + let getNecessaryPlid (plid: string list) : Async = + let rec loop (rest: string list) (current: string list) = + async { + match rest with + | [] -> return current + | headIdent :: restPlid -> + let! res = checkFileResults.IsRelativeNameResolvableFromSymbol(posAtStartOfName, current, symbolUse.Symbol) + if res then return current + else return! loop restPlid (headIdent :: current) + } + loop (List.rev plid) [] + + let! necessaryPlid = getNecessaryPlid plid + + match necessaryPlid with + | necessaryPlid when necessaryPlid = plid -> () + | necessaryPlid -> + let r = symbolUse.RangeAlternate + let necessaryPlidStartCol = r.EndColumn - name.Length - (getPlidLength necessaryPlid) + + let unnecessaryRange = + Range.mkRange r.FileName (Range.mkPos r.StartLine plidStartCol) (Range.mkPos r.EndLine necessaryPlidStartCol) + + let relativeName = (String.concat "." plid) + "." + name + result.Add({Range = unnecessaryRange; RelativeName = relativeName}) + + return List.ofSeq result + } + +module UnusedDeclarations = + let isPotentiallyUnusedDeclaration (symbol: FSharpSymbol) : bool = + match symbol with + // Determining that a record, DU or module is used anywhere requires inspecting all their enclosed entities (fields, cases and func / vals) + // for usages, which is too expensive to do. Hence we never gray them out. + | :? FSharpEntity as e when e.IsFSharpRecord || e.IsFSharpUnion || e.IsInterface || e.IsFSharpModule || e.IsClass || e.IsNamespace -> false + // FCS returns inconsistent results for override members; we're skipping these symbols. + | :? FSharpMemberOrFunctionOrValue as f when + f.IsOverrideOrExplicitInterfaceImplementation || + f.IsBaseValue || + f.IsConstructor -> false + // Usage of DU case parameters does not give any meaningful feedback; we never gray them out. + | :? FSharpParameter -> false + | _ -> true + + let getUnusedDeclarationRanges (symbolsUses: FSharpSymbolUse[]) (isScript: bool) = + let definitions = + symbolsUses + |> Array.filter (fun su -> + su.IsFromDefinition && + su.Symbol.DeclarationLocation.IsSome && + (isScript || su.IsPrivateToFile) && + not (su.Symbol.DisplayName.StartsWith "_") && + isPotentiallyUnusedDeclaration su.Symbol) + + let usages = + let usages = + symbolsUses + |> Array.filter (fun su -> not su.IsFromDefinition) + |> Array.choose (fun su -> su.Symbol.DeclarationLocation) + HashSet(usages) + + let unusedRanges = + definitions + |> Array.map (fun defSu -> defSu, usages.Contains defSu.Symbol.DeclarationLocation.Value) + |> Array.groupBy (fun (defSu, _) -> defSu.RangeAlternate) + |> Array.filter (fun (_, defSus) -> defSus |> Array.forall (fun (_, isUsed) -> not isUsed)) + |> Array.map (fun (m, _) -> m) + + Array.toList unusedRanges + + let getUnusedDeclarations(checkFileResults: FSharpCheckFileResults, isScriptFile: bool) : Async = + async { + let! allSymbolUsesInFile = checkFileResults.GetAllUsesOfAllSymbolsInFile() + let unusedRanges = getUnusedDeclarationRanges allSymbolUsesInFile isScriptFile + return unusedRanges } \ No newline at end of file diff --git a/src/fsharp/service/ServiceAnalysis.fsi b/src/fsharp/service/ServiceAnalysis.fsi index 8d97644389..eb277269ab 100644 --- a/src/fsharp/service/ServiceAnalysis.fsi +++ b/src/fsharp/service/ServiceAnalysis.fsi @@ -8,4 +8,20 @@ open FSharp.Compiler.Range module public UnusedOpens = /// Get all unused open declarations in a file - val getUnusedOpens : checkFileResults: FSharpCheckFileResults * getSourceLineStr: (int -> string) -> Async \ No newline at end of file + val getUnusedOpens : checkFileResults: FSharpCheckFileResults * getSourceLineStr: (int -> string) -> Async + +module public SimplifyNames = + /// Data for use in finding unnecessarily-qualified names and generating diagnostics to simplify them + type SimplifiableRange = { + /// The range of a name that can be simplified + Range: range + /// The relative name that can be applied to a simplifiable name + RelativeName: string + } + + /// Get all ranges that can be simplified in a file + val getSimplifiableNames : checkFileResults: FSharpCheckFileResults * getSourceLineStr: (int -> string) -> Async + +module public UnusedDeclarations = + /// Get all unused declarations in a file + val getUnusedDeclarations : checkFileResults: FSharpCheckFileResults * isScriptFile: bool -> Async \ No newline at end of file diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 295e42b02c..f4b2f6babe 100755 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -2518,5 +2518,30 @@ type FSharpSymbolUse(g:TcGlobals, denv: DisplayEnv, symbol:FSharpSymbol, itemOcc member __.Range = Range.toZ range member __.RangeAlternate = range + + member this.IsPrivateToFile = + let isPrivate = + match this.Symbol with + | :? FSharpMemberOrFunctionOrValue as m -> not m.IsModuleValueOrMember || m.Accessibility.IsPrivate + | :? FSharpEntity as m -> m.Accessibility.IsPrivate + | :? FSharpGenericParameter -> true + | :? FSharpUnionCase as m -> m.Accessibility.IsPrivate + | :? FSharpField as m -> m.Accessibility.IsPrivate + | _ -> false + + let declarationLocation = + match this.Symbol.SignatureLocation with + | Some x -> Some x + | _ -> + match this.Symbol.DeclarationLocation with + | Some x -> Some x + | _ -> this.Symbol.ImplementationLocation + + let declaredInTheFile = + match declarationLocation with + | Some declRange -> declRange.FileName = this.RangeAlternate.FileName + | _ -> false + + isPrivate && declaredInTheFile override __.ToString() = sprintf "%O, %O, %O" symbol itemOcc range diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index 6893097ed9..ad402418c6 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -1101,3 +1101,5 @@ type public FSharpSymbolUse = /// The range of text representing the reference to the symbol member RangeAlternate: range + /// Indicates if the FSharpSymbolUse is declared as private + member IsPrivateToFile : bool From 202f8f9861f8de8096825f676c9097db09c22487 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 21 Jan 2020 17:13:10 -0800 Subject: [PATCH 212/214] Fix nuget and ref assemblies (#8252) * Fix nuget and ref assemblies * Packaging fixes * tweaks * use substring rather than remove * Removed unused md * -1 means not found --- .../FSharp.DependencyManager.Utilities.fs | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs index 493a6ba789..d86ceb3dbb 100644 --- a/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager/FSharp.DependencyManager.Utilities.fs @@ -205,7 +205,7 @@ module Utilities = | None -> "" let arguments prefix = - sprintf "%s -restore %s %c%s%c /t:FSI-PackageManagement" prefix binLoggingArguments '\"' projectPath '\"' + sprintf "%s -restore %s %c%s%c /t:InteractivePackageManagement" prefix binLoggingArguments '\"' projectPath '\"' let workingDir = Path.GetDirectoryName projectPath @@ -230,6 +230,10 @@ namespace lib" $(TARGETFRAMEWORK) false + + + 4.7.0 + 4.7.1-* @@ -273,15 +277,31 @@ $(PACKAGEREFERENCES) - - - Pkg$([System.String]::Copy('%(ResolvedCompileFileDefinitions.NugetPackageId)').Replace('.','_')) - $([MSBuild]::EnsureTrailingSlash('$(%(FsxResolvedFile.PackageRootProperty))')) - $(%(FsxResolvedFile.PackageRootProperty))\content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx - + + + $([System.String]::Copy('%(Identity)').Replace('\', '/')) + $([System.String]::Copy('%(ResolvedCompileFileDefinitions.PathInPackage)').Replace('\', '/')) + $([System.String]::Copy('%(InteractiveResolvedFile.NormalizedIdentity)').IndexOf('%(InteractiveResolvedFile.NormalizedPathInPackage)')) + $([System.String]::Copy('%(InteractiveResolvedFile.NormalizedIdentity)').Substring(0, %(InteractiveResolvedFile.PositionPathInPackage))) + %(InteractiveResolvedFile.PackageRoot)content\%(ResolvedCompileFileDefinitions.FileName)%(ResolvedCompileFileDefinitions.Extension).fsx + $([System.String]::Copy('%(ResolvedCompileFileDefinitions.PathInPackage)').StartsWith('ref/')) + %(ResolvedCompileFileDefinitions.NuGetPackageId) + %(ResolvedCompileFileDefinitions.NuGetPackageVersion) + + + $([System.String]::Copy('%(Identity)').Replace('\', '/')) + $([System.String]::Copy('%(RuntimeCopyLocalItems.PathInPackage)').Replace('\', '/')) + $([System.String]::Copy('%(InteractiveResolvedFile.NormalizedIdentity)').IndexOf('%(InteractiveResolvedFile.NormalizedPathInPackage)')) + $([System.String]::Copy('%(InteractiveResolvedFile.NormalizedIdentity)').Substring(0, %(InteractiveResolvedFile.PositionPathInPackage))) + %(InteractiveResolvedFile.PackageRoot)content\%(RuntimeCopyLocalItems.FileName)%(RuntimeCopyLocalItems.Extension).fsx + $([System.String]::Copy('%(RuntimeCopyLocalItems.PathInPackage)').StartsWith('ref/')) + %(RuntimeCopyLocalItems.NuGetPackageId) + %(RuntimeCopyLocalItems.NuGetPackageVersion) + @@ -290,7 +310,7 @@ $(PACKAGEREFERENCES) - + @@ -300,12 +320,18 @@ $(PACKAGEREFERENCES) - + + + + + + + + - - + - + From 98612841861c52a25b49deff325ac631a181cf4b Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 22 Jan 2020 13:37:18 +0000 Subject: [PATCH 213/214] fix 5580 and better encapsulate constraint solver (#8294) * fix 5580 and better encapsulate constraint solver * fix 5580 and better encapsulate constraint solver * fix 5580 and better encapsulate constraint solver * fix 5580 and better encapsulate constraint solver * add new tests * nudge CI --- src/fsharp/ConstraintSolver.fs | 244 +++++++++++++++++++++++--------- src/fsharp/ConstraintSolver.fsi | 127 ++++++++++------- src/fsharp/IlxGen.fs | 1 - src/fsharp/TypeChecker.fs | 58 ++------ 4 files changed, 268 insertions(+), 162 deletions(-) diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index 0360d253dd..59b10f7be7 100755 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -27,9 +27,19 @@ // can-unify predicates used in method overload resolution and trait constraint // satisfaction. // +// The two main principles are: +// 1. Ensure any solution that is found is sound (no logic is skipped), +// 2. Because of method overloading and SRTP constraints and other constructs, processing of +// constraints is algorithmic and must proceed in a definite, fixed order. +// Once we start doing resolutions in a particular order we must keep doing them +// in the same order. +// +// There is little use of back-tracking/undo or "retry" in the constraint solver, except in the +// limited case ofs of SRTP solving and method overloading, and some other adhoc limited cases +// like checking for "printf" format strings. As a result there are cases involving +// method overloading and SRTP that the solver "can't solve". This is intentional and by-design. //------------------------------------------------------------------------- - module internal FSharp.Compiler.ConstraintSolver open Internal.Utilities.Collections @@ -429,8 +439,39 @@ let ShowAccessDomain ad = exception NonRigidTypar of displayEnv: DisplayEnv * string option * range * TType * TType * range -exception LocallyAbortOperationThatFailsToResolveOverload +/// Signal that there is still an unresolved overload in the constraint problem. The +/// unresolved overload constraint remains in the constraint state, and we skip any +/// further processing related to whichever overall adjustment to constraint solver state +/// is being processed. +/// +// NOTE: The addition of this abort+skip appears to be a mistake which has crept into F# type inference, +// and its status is currently under review. See https://github.com/dotnet/fsharp/pull/8294 and others. +// +// Here is the history: +// 1. The local abort was added as part of an attempted performance optimization https://github.com/dotnet/fsharp/pull/1650 +// This change was released in the VS2017 GA release. +// +// 2. However, it also impacts the logic of type inference, by skipping checking. +// Because of this an attempt was made to revert it in https://github.com/dotnet/fsharp/pull/4173. +// +// Unfortunately, existing code had begun to depend on the new behaviours enabled by the +// change, and the revert was abandoned before release in https://github.com/dotnet/fsharp/pull/4348 +// +// Comments on soundness: +// The use of the abort is normally sound because the SRTP constraint +// will be subject to further processing at a later point. +// +// However, it seems likely that the abort may result in other processing associated +// with an overall constraint being skipped (e.g. the processing related to subsequent elements +// of a tuple constraint). +exception AbortForFailedOverloadResolution + +/// This is used at (nearly all) entry points into the constraint solver to make sure that the +/// AbortForFailedOverloadResolution is caught and processing continues. +let inline TryD_IgnoreAbortForFailedOverloadResolution f1 f2 = + TryD f1 (function AbortForFailedOverloadResolution -> CompleteD | exn -> f2 exn) +/// Represents a very local condition where we prefer to report errors before stripping type abbreviations. exception LocallyAbortOperationThatLosesAbbrevs let localAbortD = ErrorD LocallyAbortOperationThatLosesAbbrevs @@ -929,8 +970,9 @@ and private SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln t // Back out of expansions of type abbreviations to give improved error messages. // Note: any "normalization" of equations on type variables must respect the trace parameter TryD (fun () -> SolveTypeEqualsType csenv ndeep m2 trace cxsln ty1 ty2) - (function LocallyAbortOperationThatLosesAbbrevs -> ErrorD(ConstraintSolverTypesNotInEqualityRelation(csenv.DisplayEnv, ty1, ty2, csenv.m, m2, csenv.eContextInfo)) - | err -> ErrorD err) + (function + | LocallyAbortOperationThatLosesAbbrevs -> ErrorD(ConstraintSolverTypesNotInEqualityRelation(csenv.DisplayEnv, ty1, ty2, csenv.m, m2, csenv.eContextInfo)) + | err -> ErrorD err) and SolveTypeEqualsTypeEqns csenv ndeep m2 trace cxsln origl1 origl2 = match origl1, origl2 with @@ -1059,8 +1101,9 @@ and SolveTypeSubsumesType (csenv: ConstraintSolverEnv) ndeep m2 (trace: Optional and SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m2 trace cxsln ty1 ty2 = let denv = csenv.DisplayEnv TryD (fun () -> SolveTypeSubsumesType csenv ndeep m2 trace cxsln ty1 ty2) - (function LocallyAbortOperationThatLosesAbbrevs -> ErrorD(ConstraintSolverTypesNotInSubsumptionRelation(denv, ty1, ty2, csenv.m, m2)) - | err -> ErrorD err) + (function + | LocallyAbortOperationThatLosesAbbrevs -> ErrorD(ConstraintSolverTypesNotInSubsumptionRelation(denv, ty1, ty2, csenv.m, m2)) + | err -> ErrorD err) //------------------------------------------------------------------------- // Solve and record non-equality constraints @@ -1451,7 +1494,9 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload Some(CalledMeth(csenv.InfoReader, None, false, FreshenMethInfo, m, AccessibleFromEverywhere, minfo, minst, minst, None, objtys, [(callerArgs, [])], false, false, None))) let methOverloadResult, errors = - trace.CollectThenUndoOrCommit (fun (a, _) -> Option.isSome a) (fun trace -> ResolveOverloading csenv (WithTrace trace) nm ndeep (Some traitInfo) (0, 0) AccessibleFromEverywhere calledMethGroup false (Some rty)) + trace.CollectThenUndoOrCommit + (fun (a, _) -> Option.isSome a) + (fun trace -> ResolveOverloading csenv (WithTrace trace) nm ndeep (Some traitInfo) (0, 0) AccessibleFromEverywhere calledMethGroup false (Some rty)) match anonRecdPropSearch, recdPropSearch, methOverloadResult with | Some (anonInfo, tinst, i), None, None -> @@ -1497,7 +1542,7 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload match errors with | ErrorResult (_, UnresolvedOverloading _) when not ignoreUnresolvedOverload && (not (nm = "op_Explicit" || nm = "op_Implicit")) -> - return! ErrorD LocallyAbortOperationThatFailsToResolveOverload + return! ErrorD AbortForFailedOverloadResolution | _ -> return TTraitUnsolved } @@ -2183,25 +2228,23 @@ and CanMemberSigsMatchUpToCheck // "ty2 casts to ty1" // "a value of type ty2 can be used where a value of type ty1 is expected" and private SolveTypeSubsumesTypeWithReport (csenv: ConstraintSolverEnv) ndeep m trace cxsln ty1 ty2 = - TryD (fun () -> SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m trace cxsln ty1 ty2) - (function - | LocallyAbortOperationThatFailsToResolveOverload -> CompleteD - | res -> - match csenv.eContextInfo with - | ContextInfo.RuntimeTypeTest isOperator -> - // test if we can cast other way around - match CollectThenUndo (fun newTrace -> SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m (OptionalTrace.WithTrace newTrace) cxsln ty2 ty1) with - | OkResult _ -> ErrorD (ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, ContextInfo.DowncastUsedInsteadOfUpcast isOperator, m)) - | _ -> ErrorD (ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, ContextInfo.NoContext, m)) - | _ -> ErrorD (ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, csenv.eContextInfo, m))) + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m trace cxsln ty1 ty2) + (fun res -> + match csenv.eContextInfo with + | ContextInfo.RuntimeTypeTest isOperator -> + // test if we can cast other way around + match CollectThenUndo (fun newTrace -> SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m (OptionalTrace.WithTrace newTrace) cxsln ty2 ty1) with + | OkResult _ -> ErrorD (ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, ContextInfo.DowncastUsedInsteadOfUpcast isOperator, m)) + | _ -> ErrorD (ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, ContextInfo.NoContext, m)) + | _ -> ErrorD (ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, csenv.eContextInfo, m))) // ty1: actual // ty2: expected and private SolveTypeEqualsTypeWithReport (csenv: ConstraintSolverEnv) ndeep m trace cxsln actual expected = - TryD (fun () -> SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m trace cxsln actual expected) - (function - | LocallyAbortOperationThatFailsToResolveOverload -> CompleteD - | res -> ErrorD (ErrorFromAddingTypeEquation(csenv.g, csenv.DisplayEnv, actual, expected, res, m))) + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m trace cxsln actual expected) + (fun res -> ErrorD (ErrorFromAddingTypeEquation(csenv.g, csenv.DisplayEnv, actual, expected, res, m))) and ArgsMustSubsumeOrConvert (csenv: ConstraintSolverEnv) @@ -2677,16 +2720,22 @@ and ResolveOverloading | None -> None, errors +let ResolveOverloadingForCall denv css m methodName ndeep cx callerArgCounts ad calledMethGroup permitOptArgs reqdRetTyOpt = + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + ResolveOverloading csenv NoTrace methodName ndeep cx callerArgCounts ad calledMethGroup permitOptArgs reqdRetTyOpt /// This is used before analyzing the types of arguments in a single overload resolution let UnifyUniqueOverloading - (csenv: ConstraintSolverEnv) + denv + css + m callerArgCounts methodName ad (calledMethGroup: CalledMeth list) reqdRetTy // The expected return type, if known = + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv let m = csenv.m // See what candidates we have based on name and arity let candidates = calledMethGroup |> List.filter (fun cmeth -> cmeth.IsCandidate(m, ad)) @@ -2716,15 +2765,17 @@ let UnifyUniqueOverloading | _ -> ResultD false -let EliminateConstraintsForGeneralizedTypars csenv (trace: OptionalTrace) (generalizedTypars: Typars) = - // Remove the global constraints where this type variable appears in the support of the constraint - generalizedTypars - |> List.iter (fun tp -> +/// Remove the global constraints where these type variables appear in the support of the constraint +let EliminateConstraintsForGeneralizedTypars denv css m (trace: OptionalTrace) (generalizedTypars: Typars) = + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + for tp in generalizedTypars do let tpn = tp.Stamp let cxst = csenv.SolverState.ExtraCxs let cxs = cxst.FindAll tpn - cxs |> List.iter (fun cx -> trace.Exec (fun () -> cxst.Remove tpn) (fun () -> (csenv.SolverState.ExtraCxs.Add (tpn, cx)))) - ) + for cx in cxs do + trace.Exec + (fun () -> cxst.Remove tpn) + (fun () -> (csenv.SolverState.ExtraCxs.Add (tpn, cx))) //------------------------------------------------------------------------- @@ -2735,7 +2786,8 @@ let EliminateConstraintsForGeneralizedTypars csenv (trace: OptionalTrace) (gener //------------------------------------------------------------------------- let AddCxTypeEqualsType contextInfo denv css m actual expected = - SolveTypeEqualsTypeWithReport (MakeConstraintSolverEnv contextInfo css m denv) 0 m NoTrace None actual expected + let csenv = MakeConstraintSolverEnv contextInfo css m denv + SolveTypeEqualsTypeWithReport csenv 0 m NoTrace None actual expected |> RaiseOperationResult let UndoIfFailed f = @@ -2770,17 +2822,23 @@ let UndoIfFailedOrWarnings f = false let AddCxTypeEqualsTypeUndoIfFailed denv css m ty1 ty2 = - UndoIfFailed (fun trace -> SolveTypeEqualsTypeKeepAbbrevs (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m (WithTrace trace) ty1 ty2) + UndoIfFailed (fun trace -> + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + SolveTypeEqualsTypeKeepAbbrevs csenv 0 m (WithTrace trace) ty1 ty2) let AddCxTypeEqualsTypeUndoIfFailedOrWarnings denv css m ty1 ty2 = - UndoIfFailedOrWarnings (fun trace -> SolveTypeEqualsTypeKeepAbbrevs (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m (WithTrace trace) ty1 ty2) + UndoIfFailedOrWarnings (fun trace -> + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + SolveTypeEqualsTypeKeepAbbrevs csenv 0 m (WithTrace trace) ty1 ty2) let AddCxTypeEqualsTypeMatchingOnlyUndoIfFailed denv css m ty1 ty2 = let csenv = { MakeConstraintSolverEnv ContextInfo.NoContext css m denv with MatchingOnly = true } UndoIfFailed (fun trace -> SolveTypeEqualsTypeKeepAbbrevs csenv 0 m (WithTrace trace) ty1 ty2) let AddCxTypeMustSubsumeTypeUndoIfFailed denv css m ty1 ty2 = - UndoIfFailed (fun trace -> SolveTypeSubsumesTypeKeepAbbrevs (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m (WithTrace trace) None ty1 ty2) + UndoIfFailed (fun trace -> + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + SolveTypeSubsumesTypeKeepAbbrevs csenv 0 m (WithTrace trace) None ty1 ty2) let AddCxTypeMustSubsumeTypeMatchingOnlyUndoIfFailed denv css m ty1 ty2 = let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv @@ -2788,64 +2846,114 @@ let AddCxTypeMustSubsumeTypeMatchingOnlyUndoIfFailed denv css m ty1 ty2 = UndoIfFailed (fun trace -> SolveTypeSubsumesTypeKeepAbbrevs csenv 0 m (WithTrace trace) None ty1 ty2) let AddCxTypeMustSubsumeType contextInfo denv css m trace ty1 ty2 = - SolveTypeSubsumesTypeWithReport (MakeConstraintSolverEnv contextInfo css m denv) 0 m trace None ty1 ty2 + let csenv = MakeConstraintSolverEnv contextInfo css m denv + SolveTypeSubsumesTypeWithReport csenv 0 m trace None ty1 ty2 |> RaiseOperationResult let AddCxMethodConstraint denv css m trace traitInfo = - TryD (fun () -> + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> trackErrors { do! - SolveMemberConstraint (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) true false 0 m trace traitInfo + SolveMemberConstraint csenv true false 0 m trace traitInfo |> OperationResult.ignore }) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeMustSupportNull denv css m trace ty = - TryD (fun () -> SolveTypeSupportsNull (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeSupportsNull csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeMustSupportComparison denv css m trace ty = - TryD (fun () -> SolveTypeSupportsComparison (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeSupportsComparison csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeMustSupportEquality denv css m trace ty = - TryD (fun () -> SolveTypeSupportsEquality (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeSupportsEquality csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeMustSupportDefaultCtor denv css m trace ty = - TryD (fun () -> SolveTypeRequiresDefaultConstructor (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeRequiresDefaultConstructor csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeIsReferenceType denv css m trace ty = - TryD (fun () -> SolveTypeIsReferenceType (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeIsReferenceType csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeIsValueType denv css m trace ty = - TryD (fun () -> SolveTypeIsNonNullableValueType (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeIsNonNullableValueType csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeIsUnmanaged denv css m trace ty = - TryD (fun () -> SolveTypeIsUnmanaged (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeIsUnmanaged csenv 0 m trace ty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeIsEnum denv css m trace ty underlying = - TryD (fun () -> SolveTypeIsEnum (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty underlying) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeIsEnum csenv 0 m trace ty underlying) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult let AddCxTypeIsDelegate denv css m trace ty aty bty = - TryD (fun () -> SolveTypeIsDelegate (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m trace ty aty bty) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTypeIsDelegate csenv 0 m trace ty aty bty) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + |> RaiseOperationResult + +let AddCxTyparDefaultsTo denv css m ctxtInfo tp ridx ty = + let csenv = MakeConstraintSolverEnv ctxtInfo css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> AddConstraint csenv 0 m NoTrace tp (TyparConstraint.DefaultsTo(ridx, ty, m))) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult +let SolveTypeAsError denv css m ty = + let ty2 = NewErrorType () + assert((destTyparTy css.g ty2).IsFromError) + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + SolveTypeEqualsTypeKeepAbbrevs csenv 0 m NoTrace ty ty2 |> ignore + +let ApplyTyparDefaultAtPriority denv css priority (tp: Typar) = + tp.Constraints |> List.iter (fun tpc -> + match tpc with + | TyparConstraint.DefaultsTo(priority2, ty2, m) when priority2 = priority -> + let ty1 = mkTyparTy tp + if not tp.IsSolved && not (typeEquiv css.g ty1 ty2) then + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> + SolveTyparEqualsType csenv 0 m NoTrace ty1 ty2) + (fun res -> + SolveTypeAsError denv css m ty1 + ErrorD(ErrorFromApplyingDefault(css.g, denv, tp, ty2, res, m))) + |> RaiseOperationResult + | _ -> ()) + let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo: TraitConstraintInfo) argExprs = trackErrors { let css = { g = g @@ -2952,24 +3060,34 @@ let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo: Tra | Choice5Of5 () -> ResultD None } - let ChooseTyparSolutionAndSolve css denv tp = let g = css.g let amap = css.amap let max, m = ChooseTyparSolutionAndRange g amap tp let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv - TryD (fun () -> SolveTyparEqualsType csenv 0 m NoTrace (mkTyparTy tp) max) - (fun err -> ErrorD(ErrorFromApplyingDefault(g, denv, tp, max, err, m))) + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> SolveTyparEqualsType csenv 0 m NoTrace (mkTyparTy tp) max) + (fun err -> ErrorD(ErrorFromApplyingDefault(g, denv, tp, max, err, m))) |> RaiseOperationResult - let CheckDeclaredTypars denv css m typars1 typars2 = - TryD (fun () -> + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> CollectThenUndo (fun trace -> - SolveTypeEqualsTypeEqns (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) 0 m (WithTrace trace) None + SolveTypeEqualsTypeEqns csenv 0 m (WithTrace trace) None (List.map mkTyparTy typars1) (List.map mkTyparTy typars2))) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) + (fun res -> + ErrorD (ErrorFromAddingConstraint(denv, res, m))) + |> RaiseOperationResult + +let CanonicalizePartialInferenceProblem css denv m tps = + // Canonicalize constraints prior to generalization + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv + TryD_IgnoreAbortForFailedOverloadResolution + (fun () -> CanonicalizeRelevantMemberConstraints csenv 0 NoTrace tps) + (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult /// An approximation used during name resolution for intellisense to eliminate extension members which will not diff --git a/src/fsharp/ConstraintSolver.fsi b/src/fsharp/ConstraintSolver.fsi index 6aa40c6ea9..8fdaabf82c 100755 --- a/src/fsharp/ConstraintSolver.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -17,32 +17,32 @@ open FSharp.Compiler.MethodCalls open FSharp.Compiler.InfoReader /// Create a type variable representing the use of a "_" in F# code -val NewAnonTypar : TyparKind * range * TyparRigidity * TyparStaticReq * TyparDynamicReq -> Typar +val NewAnonTypar: TyparKind * range * TyparRigidity * TyparStaticReq * TyparDynamicReq -> Typar /// Create an inference type variable -val NewInferenceType : unit -> TType +val NewInferenceType: unit -> TType /// Create an inference type variable for the kind of a byref pointer -val NewByRefKindInferenceType : TcGlobals -> range -> TType +val NewByRefKindInferenceType: TcGlobals -> range -> TType /// Create an inference type variable representing an error condition when checking an expression -val NewErrorType : unit -> TType +val NewErrorType: unit -> TType /// Create an inference type variable representing an error condition when checking a measure -val NewErrorMeasure : unit -> Measure +val NewErrorMeasure: unit -> Measure /// Create a list of inference type variables, one for each element in the input list -val NewInferenceTypes : 'a list -> TType list +val NewInferenceTypes: 'a list -> TType list /// Given a set of formal type parameters and their constraints, make new inference type variables for /// each and ensure that the constraints on the new type variables are adjusted to refer to these. -val FreshenAndFixupTypars : range -> TyparRigidity -> Typars -> TType list -> Typars -> Typars * TyparInst * TType list +val FreshenAndFixupTypars: range -> TyparRigidity -> Typars -> TType list -> Typars -> Typars * TyparInst * TType list -val FreshenTypeInst : range -> Typars -> Typars * TyparInst * TType list +val FreshenTypeInst: range -> Typars -> Typars * TyparInst * TType list -val FreshenTypars : range -> Typars -> TType list +val FreshenTypars: range -> Typars -> TType list -val FreshenMethInfo : range -> MethInfo -> TType list +val FreshenMethInfo: range -> MethInfo -> TType list [] /// Information about the context of a type equation. @@ -114,53 +114,70 @@ type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) type ConstraintSolverState = static member New: TcGlobals * Import.ImportMap * InfoReader * TcValF -> ConstraintSolverState -type ConstraintSolverEnv - -val BakedInTraitConstraintNames : Set - -val MakeConstraintSolverEnv : ContextInfo -> ConstraintSolverState -> range -> DisplayEnv -> ConstraintSolverEnv +val BakedInTraitConstraintNames: Set [] type Trace type OptionalTrace = -| NoTrace -| WithTrace of Trace - -val SimplifyMeasuresInTypeScheme : TcGlobals -> bool -> Typars -> TType -> TyparConstraint list -> Typars -val SolveTyparEqualsType : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult -val SolveTypeEqualsTypeKeepAbbrevs : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult - -/// Canonicalize constraints prior to generalization -val CanonicalizeRelevantMemberConstraints : ConstraintSolverEnv -> int -> OptionalTrace -> Typars -> OperationResult - -val ResolveOverloading : ConstraintSolverEnv -> OptionalTrace -> string -> ndeep: int -> TraitConstraintInfo option -> int * int -> AccessorDomain -> CalledMeth list -> bool -> TType option -> CalledMeth option * OperationResult -val UnifyUniqueOverloading : ConstraintSolverEnv -> int * int -> string -> AccessorDomain -> CalledMeth list -> TType -> OperationResult -val EliminateConstraintsForGeneralizedTypars : ConstraintSolverEnv -> OptionalTrace -> Typars -> unit - -val CheckDeclaredTypars : DisplayEnv -> ConstraintSolverState -> range -> Typars -> Typars -> unit - -val AddConstraint : ConstraintSolverEnv -> int -> Range.range -> OptionalTrace -> Typar -> TyparConstraint -> OperationResult -val AddCxTypeEqualsType : ContextInfo -> DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> unit -val AddCxTypeEqualsTypeUndoIfFailed : DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool -val AddCxTypeEqualsTypeUndoIfFailedOrWarnings : DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool -val AddCxTypeEqualsTypeMatchingOnlyUndoIfFailed : DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool -val AddCxTypeMustSubsumeType : ContextInfo -> DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> TType -> unit -val AddCxTypeMustSubsumeTypeUndoIfFailed : DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool -val AddCxTypeMustSubsumeTypeMatchingOnlyUndoIfFailed : DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool -val AddCxMethodConstraint : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TraitConstraintInfo -> unit -val AddCxTypeMustSupportNull : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeMustSupportComparison : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeMustSupportEquality : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeMustSupportDefaultCtor : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeIsReferenceType : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeIsValueType : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeIsUnmanaged : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit -val AddCxTypeIsEnum : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> TType -> unit -val AddCxTypeIsDelegate : DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> TType -> TType -> unit - -val CodegenWitnessThatTypeSupportsTraitConstraint : TcValF -> TcGlobals -> ImportMap -> range -> TraitConstraintInfo -> Expr list -> OperationResult - -val ChooseTyparSolutionAndSolve : ConstraintSolverState -> DisplayEnv -> Typar -> unit - -val IsApplicableMethApprox : TcGlobals -> ImportMap -> range -> MethInfo -> TType -> bool + | NoTrace + | WithTrace of Trace + +val SimplifyMeasuresInTypeScheme: TcGlobals -> bool -> Typars -> TType -> TyparConstraint list -> Typars + +val ResolveOverloadingForCall: DisplayEnv -> ConstraintSolverState -> range -> string -> ndeep: int -> TraitConstraintInfo option -> int * int -> AccessorDomain -> CalledMeth list -> bool -> TType option -> CalledMeth option * OperationResult + +val UnifyUniqueOverloading: DisplayEnv -> ConstraintSolverState -> range -> int * int -> string -> AccessorDomain -> CalledMeth list -> TType -> OperationResult + +/// Remove the global constraints where these type variables appear in the support of the constraint +val EliminateConstraintsForGeneralizedTypars: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> Typars -> unit + +val CheckDeclaredTypars: DisplayEnv -> ConstraintSolverState -> range -> Typars -> Typars -> unit + +val AddCxTypeEqualsType: ContextInfo -> DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> unit + +val AddCxTypeEqualsTypeUndoIfFailed: DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool + +val AddCxTypeEqualsTypeUndoIfFailedOrWarnings: DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool + +val AddCxTypeEqualsTypeMatchingOnlyUndoIfFailed: DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool + +val AddCxTypeMustSubsumeType: ContextInfo -> DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> TType -> unit + +val AddCxTypeMustSubsumeTypeUndoIfFailed: DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool + +val AddCxTypeMustSubsumeTypeMatchingOnlyUndoIfFailed: DisplayEnv -> ConstraintSolverState -> range -> TType -> TType -> bool + +val AddCxMethodConstraint: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TraitConstraintInfo -> unit + +val AddCxTypeMustSupportNull: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeMustSupportComparison: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeMustSupportEquality: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeMustSupportDefaultCtor: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeIsReferenceType: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeIsValueType: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeIsUnmanaged: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> unit + +val AddCxTypeIsEnum: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> TType -> unit + +val AddCxTypeIsDelegate: DisplayEnv -> ConstraintSolverState -> range -> OptionalTrace -> TType -> TType -> TType -> unit + +val AddCxTyparDefaultsTo: DisplayEnv -> ConstraintSolverState -> range -> ContextInfo -> Typar -> int -> TType -> unit + +val SolveTypeAsError: DisplayEnv -> ConstraintSolverState -> range -> TType -> unit + +val ApplyTyparDefaultAtPriority: DisplayEnv -> ConstraintSolverState -> priority: int -> Typar -> unit + +val CodegenWitnessThatTypeSupportsTraitConstraint: TcValF -> TcGlobals -> ImportMap -> range -> TraitConstraintInfo -> Expr list -> OperationResult + +val ChooseTyparSolutionAndSolve: ConstraintSolverState -> DisplayEnv -> Typar -> unit + +val IsApplicableMethApprox: TcGlobals -> ImportMap -> range -> MethInfo -> TType -> bool + +val CanonicalizePartialInferenceProblem: ConstraintSolverState -> DisplayEnv -> range -> Typars -> unit \ No newline at end of file diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index bae42ad081..412d1a62ac 100755 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -7754,4 +7754,3 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal: Constrai /// Invert the compilation of the given value and return its current dynamic value and its compiled System.Type member __.LookupGeneratedValue (ctxt, v) = LookupGeneratedValue amap ctxt ilxGenEnv v - diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 6609d5ad95..c888057686 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -2284,13 +2284,6 @@ module GeneralizationHelpers = ConstraintSolver.ChooseTyparSolutionAndSolve cenv.css denv tp) generalizedTypars - let CanonicalizePartialInferenceProblem (cenv, denv, m) tps = - // Canonicalize constraints prior to generalization - let csenv = (MakeConstraintSolverEnv ContextInfo.NoContext cenv.css m denv) - TryD (fun () -> ConstraintSolver.CanonicalizeRelevantMemberConstraints csenv 0 NoTrace tps) - (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) - |> RaiseOperationResult - let ComputeAndGeneralizeGenericTypars (cenv, denv: DisplayEnv, m, @@ -2333,8 +2326,7 @@ module GeneralizationHelpers = generalizedTypars |> List.iter (SetTyparRigid cenv.g denv m) // Generalization removes constraints related to generalized type variables - let csenv = MakeConstraintSolverEnv ContextInfo.NoContext cenv.css m denv - EliminateConstraintsForGeneralizedTypars csenv NoTrace generalizedTypars + EliminateConstraintsForGeneralizedTypars denv cenv.css m NoTrace generalizedTypars generalizedTypars @@ -4333,8 +4325,7 @@ let rec TcTyparConstraint ridx cenv newOk checkCxs occ (env: TcEnv) tpenv c = | WhereTyparDefaultsToType(tp, ty, m) -> let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty let tp', tpenv = TcTypar cenv env newOk tpenv tp - let csenv = MakeConstraintSolverEnv env.eContextInfo cenv.css m env.DisplayEnv - AddConstraint csenv 0 m NoTrace tp' (TyparConstraint.DefaultsTo(ridx, ty', m)) |> CommitOperationResult + AddCxTyparDefaultsTo env.DisplayEnv cenv.css m env.eContextInfo tp' ridx ty' tpenv | WhereTyparSubtypeOfType(tp, ty, m) -> @@ -5595,11 +5586,7 @@ and TcPatterns warnOnUpper cenv env vFlags s argTys args = assert (List.length args = List.length argTys) List.mapFold (fun s (ty, pat) -> TcPat warnOnUpper cenv env None vFlags s ty pat) s (List.zip argTys args) - -and solveTypAsError cenv denv m ty = - let ty2 = NewErrorType () - assert((destTyparTy cenv.g ty2).IsFromError) - SolveTypeEqualsTypeKeepAbbrevs (MakeConstraintSolverEnv ContextInfo.NoContext cenv.css m denv) 0 m NoTrace ty ty2 |> ignore +and solveTypAsError cenv denv m ty = ConstraintSolver.SolveTypeAsError denv cenv.css m ty and RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects cenv env tpenv expr = // This function is motivated by cases like @@ -6782,7 +6769,7 @@ and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo, bind) = | _ -> declaredTypars // Canonicalize constraints prior to generalization - GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, denv, m) declaredTypars + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv m declaredTypars let freeInEnv = GeneralizationHelpers.ComputeUngeneralizableTypars env @@ -9638,7 +9625,7 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela // Canonicalize inference problem prior to '.' lookup on variable types if isTyparTy cenv.g objExprTy then - GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, env.DisplayEnv, mExprAndLongId) (freeInTypeLeftToRight cenv.g false objExprTy) + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css env.DisplayEnv mExprAndLongId (freeInTypeLeftToRight cenv.g false objExprTy) let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver mExprAndLongId ad env.NameEnv objExprTy longId findFlag false let mExprAndItem = unionRanges mObjExpr mItem @@ -10089,8 +10076,7 @@ and TcMethodApplication yield makeOneCalledMeth (minfo, pinfoOpt, false) ] let uniquelyResolved = - let csenv = MakeConstraintSolverEnv ContextInfo.NoContext cenv.css mMethExpr denv - UnifyUniqueOverloading csenv callerArgCounts methodName ad preArgumentTypeCheckingCalledMethGroup returnTy + UnifyUniqueOverloading denv cenv.css mMethExpr callerArgCounts methodName ad preArgumentTypeCheckingCalledMethGroup returnTy uniquelyResolved, preArgumentTypeCheckingCalledMethGroup @@ -10182,17 +10168,15 @@ and TcMethodApplication CalledMeth(cenv.infoReader, Some(env.NameEnv), isCheckingAttributeCall, FreshenMethInfo, mMethExpr, ad, minfo, minst, callerTyArgs, pinfoOpt, callerObjArgTys, callerArgs, usesParamArrayConversion, true, objTyOpt)) let callerArgCounts = (unnamedCurriedCallerArgs.Length, namedCurriedCallerArgs.Length) - let csenv = MakeConstraintSolverEnv ContextInfo.NoContext cenv.css mMethExpr denv // Commit unassociated constraints prior to member overload resolution where there is ambiguity // about the possible target of the call. if not uniquelyResolved then - GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, denv, mItem) + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv mItem (//freeInTypeLeftToRight cenv.g false returnTy @ (unnamedCurriedCallerArgs |> List.collectSquared (fun callerArg -> freeInTypeLeftToRight cenv.g false callerArg.Type))) - let result, errors = - ResolveOverloading csenv NoTrace methodName 0 None callerArgCounts ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy) + let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgCounts ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy) match afterResolution, result with | AfterResolution.DoNothing, _ -> () @@ -11150,7 +11134,7 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds // Canonicalize constraints prior to generalization let denv = env.DisplayEnv - GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, denv, synBindsRange) + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv synBindsRange (checkedBinds |> List.collect (fun tbinfo -> let (CheckedBindingInfo(_, _, _, _, flex, _, _, _, tauTy, _, _, _, _, _)) = tbinfo let (ExplicitTyparInfo(_, declaredTypars, _)) = flex @@ -12025,7 +12009,7 @@ and TcIncrementalLetRecGeneralization cenv scopem else let supportForBindings = newGeneralizableBindings |> List.collect (TcLetrecComputeSupportForBinding cenv) - GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, denv, scopem) supportForBindings + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv scopem supportForBindings let generalizedTyparsL = newGeneralizableBindings |> List.map (TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv) @@ -17530,27 +17514,15 @@ let ApplyDefaults cenv g denvAtEnd m mexpr extraAttribs = try let unsolved = FSharp.Compiler.FindUnsolved.UnsolvedTyparsOfModuleDef g cenv.amap denvAtEnd (mexpr, extraAttribs) - GeneralizationHelpers.CanonicalizePartialInferenceProblem (cenv, denvAtEnd, m) unsolved + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denvAtEnd m unsolved - let applyDefaults priority = - unsolved |> List.iter (fun tp -> + // The priority order comes from the order of declaration of the defaults in FSharp.Core. + for priority = 10 downto 0 do + unsolved |> List.iter (fun tp -> if not tp.IsSolved then // Apply the first default. If we're defaulting one type variable to another then // the defaults will be propagated to the new type variable. - tp.Constraints |> List.iter (fun tpc -> - match tpc with - | TyparConstraint.DefaultsTo(priority2, ty2, m) when priority2 = priority -> - let ty1 = mkTyparTy tp - if not tp.IsSolved && not (typeEquiv cenv.g ty1 ty2) then - let csenv = MakeConstraintSolverEnv ContextInfo.NoContext cenv.css m denvAtEnd - TryD (fun () -> ConstraintSolver.SolveTyparEqualsType csenv 0 m NoTrace ty1 ty2) - (fun e -> solveTypAsError cenv denvAtEnd m ty1 - ErrorD(ErrorFromApplyingDefault(g, denvAtEnd, tp, ty2, e, m))) - |> RaiseOperationResult - | _ -> ())) - - for priority = 10 downto 0 do - applyDefaults priority + ConstraintSolver.ApplyTyparDefaultAtPriority denvAtEnd cenv.css priority tp) // OK, now apply defaults for any unsolved HeadTypeStaticReq unsolved |> List.iter (fun tp -> From 1ffccff7e22f339c7f4e1d261580eaf182d5fb42 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 22 Jan 2020 13:20:40 -0800 Subject: [PATCH 214/214] delete language server (#8241) --- eng/Build.ps1 | 2 - eng/Versions.props | 1 - eng/build.sh | 1 - eng/targets/Settings.props | 5 - .../Directory.Build.props | 9 - ...rp.Compiler.LanguageServer.DesignTime.proj | 49 ---- ...Compiler.LanguageServer.DesignTime.targets | 52 ---- .../FSharp.Compiler.LanguageServer.fsproj | 59 ----- .../JsonDUConverter.fs | 18 -- .../JsonOptionConverter.fs | 27 -- .../LspExternalAccess.fs | 30 --- .../LspTypes.fs | 87 ------- .../FSharp.Compiler.LanguageServer/Methods.fs | 72 ------ .../FSharp.Compiler.LanguageServer/Program.fs | 16 -- .../FSharp.Compiler.LanguageServer/Server.fs | 30 --- .../FSharp.Compiler.LanguageServer/State.fs | 233 ------------------ .../TextDocument.fs | 75 ------ 17 files changed, 766 deletions(-) delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/Program.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/Server.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/State.fs delete mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 72ea53f146..a7825b4d4f 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -343,7 +343,6 @@ try { if ($testDesktop -and -not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $desktopTargetFramework @@ -352,7 +351,6 @@ try { if ($testCoreClr) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $coreclrTargetFramework diff --git a/eng/Versions.props b/eng/Versions.props index 64a7ddd713..1ee1522072 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -122,7 +122,6 @@ 16.0.28226-alpha 16.1.28916.169 16.1.28917.181 - 16.1.3121 16.1.89 16.1.89 16.1.89 diff --git a/eng/build.sh b/eng/build.sh index 218f4ef977..994263ff7d 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -290,7 +290,6 @@ BuildSolution if [[ "$test_core_clr" == true ]]; then coreclrtestframework=netcoreapp3.0 TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework - TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj" --targetframework $coreclrtestframework diff --git a/eng/targets/Settings.props b/eng/targets/Settings.props index 474e5d22a8..77f7a0c704 100644 --- a/eng/targets/Settings.props +++ b/eng/targets/Settings.props @@ -11,9 +11,4 @@ false - - - false - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props b/src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props deleted file mode 100644 index 7cd41381b5..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - true - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj deleted file mode 100644 index d02ae419bc..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - $(MSBuildThisFileDirectory)FSharp.Compiler.LanguageServer.DesignTime.targets - - - - - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets deleted file mode 100644 index ea8f3e2866..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets +++ /dev/null @@ -1,52 +0,0 @@ - - - - - true - false - true - true - false - false - false - true - false - true - false - - - - - - - _ComputeTargetFrameworkItems - _PopulateTargetFrameworks - - - - - <_TargetFramework Include="$(TargetFramework)" /> - - - - - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj deleted file mode 100644 index 0bb0899140..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ /dev/null @@ -1,59 +0,0 @@ - - - - - Exe - .exe - net472;netcoreapp3.0 - netcoreapp3.0 - true - Implements the Language Server Protocol (LSP) for F#. - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_PublishedProjectOutputGroupFiles Include="$(PublishDir)\**" /> - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs b/src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs deleted file mode 100644 index ae8575195d..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open FSharp.Reflection -open Newtonsoft.Json - -type JsonDUConverter() = - inherit JsonConverter() - override __.CanConvert(typ) = FSharpType.IsUnion(typ) - override __.WriteJson(writer, value, _serializer) = - writer.WriteValue(value.ToString().ToLowerInvariant()) - override __.ReadJson(reader, typ, x, serializer) = - let cases = FSharpType.GetUnionCases(typ) - let str = serializer.Deserialize(reader, typeof) :?> string - let case = cases |> Array.find (fun c -> String.Compare(c.Name, str, StringComparison.OrdinalIgnoreCase) = 0) - FSharpValue.MakeUnion(case, [||]) diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs b/src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs deleted file mode 100644 index 937dda00e4..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open FSharp.Reflection -open Newtonsoft.Json - -type JsonOptionConverter() = - inherit JsonConverter() - override __.CanConvert(typ) = typ.IsGenericType && typ.GetGenericTypeDefinition() = typedefof> - override __.WriteJson(writer, value, serializer) = - let value = match value with - | null -> null - | _ -> - let _, fields = FSharpValue.GetUnionFields(value, value.GetType()) - fields.[0] - serializer.Serialize(writer, value) - override __.ReadJson(reader, typ, _, serializer) = - let innerType = typ.GetGenericArguments().[0] - let innerType = - if innerType.IsValueType then (typedefof>).MakeGenericType([|innerType|]) - else innerType - let value = serializer.Deserialize(reader, innerType) - let cases = FSharpType.GetUnionCases(typ) - if value = null then FSharpValue.MakeUnion(cases.[0], [||]) - else FSharpValue.MakeUnion(cases.[1], [|value|]) diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs b/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs deleted file mode 100644 index 48e4b0b405..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open StreamJsonRpc - -[] -module FunctionNames = - [] - let OptionsSet = "options/set" - - [] - let TextDocumentPublishDiagnostics = "textDocument/publishDiagnostics" - -type Options = - { usePreviewTextHover: bool - usePreviewDiagnostics: bool } - static member Default() = - { usePreviewTextHover = false - usePreviewDiagnostics = false } - static member AllOn() = - { usePreviewTextHover = true - usePreviewDiagnostics = true } - -module Extensions = - type JsonRpc with - member jsonRpc.SetOptionsAsync (options: Options) = - async { - do! jsonRpc.InvokeAsync(OptionsSet, options) |> Async.AwaitTask - } diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs b/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs deleted file mode 100644 index 264e526fcd..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open Newtonsoft.Json.Linq -open Newtonsoft.Json - -// Interfaces as defined at https://microsoft.github.io/language-server-protocol/specifications/specification-3-14/. -// The properties on these types are camlCased to match the underlying JSON properties to avoid attributes on every -// field: -// [] - -/// Represents a zero-based line and column of a text document. -type Position = - { line: int - character: int } - -type Range = - { start: Position - ``end``: Position } - -type DocumentUri = string - -type Location = - { uri: DocumentUri - range: Range } - -type DiagnosticRelatedInformation = - { location: Location - message: string } - -type Diagnostic = - { range: Range - severity: int option - code: string - source: string option - message: string - relatedInformation: DiagnosticRelatedInformation[] option } - static member Error = 1 - static member Warning = 2 - static member Information = 3 - static member Hint = 4 - -type PublishDiagnosticsParams = - { uri: DocumentUri - diagnostics: Diagnostic[] } - -type ClientCapabilities = - { workspace: JToken option // TODO: WorkspaceClientCapabilities - textDocument: JToken option // TODO: TextDocumentClientCapabilities, publishDiagnostics: { relatedInformation: bool option } - experimental: JToken option - supportsVisualStudioExtensions: bool option } - -[)>] -type Trace = - | Off - | Messages - | Verbose - -type WorkspaceFolder = - { uri: DocumentUri - name: string } - -/// Note, this type has many more optional values that can be expanded as support is added. -type ServerCapabilities = - { hoverProvider: bool } - static member DefaultCapabilities() = - { ServerCapabilities.hoverProvider = true } - -type InitializeResult = - { capabilities: ServerCapabilities } - -[)>] -type MarkupKind = - | PlainText - | Markdown - -type MarkupContent = - { kind: MarkupKind - value: string } - -type Hover = - { contents: MarkupContent - range: Range option } - -type TextDocumentIdentifier = - { uri: DocumentUri } diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs deleted file mode 100644 index 453b7f8228..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open System.Runtime.InteropServices -open System.Threading -open Newtonsoft.Json.Linq -open StreamJsonRpc - -// https://microsoft.github.io/language-server-protocol/specifications/specification-3-14/ -type Methods() = - - let state = State() - - /// Helper to run Async<'T> with a CancellationToken. - let runAsync (cancellationToken: CancellationToken) (computation: Async<'T>) = Async.StartAsTask(computation, cancellationToken=cancellationToken) - - member __.State = state - - //-------------------------------------------------------------------------- - // official LSP methods - //-------------------------------------------------------------------------- - - [] - member __.Initialize - ( - processId: Nullable, - [] rootPath: string, - [] rootUri: DocumentUri, - [] initializationOptions: JToken, - capabilities: ClientCapabilities, - [] trace: string, - [] workspaceFolders: WorkspaceFolder[], - [] cancellationToken: CancellationToken - ) = - state.Initialize rootPath rootUri (fun projectOptions -> TextDocument.PublishDiagnostics(state, projectOptions) |> Async.Start) - { InitializeResult.capabilities = ServerCapabilities.DefaultCapabilities() } - - [] - member __.Initialized () = () - - [] - member __.Shutdown(): obj = state.DoShutdown(); null - - [] - member __.Exit() = state.DoExit() - - [] - member __.cancelRequest (id: JToken) = state.DoCancel() - - [] - member __.TextDocumentHover - ( - textDocument: TextDocumentIdentifier, - position: Position, - [] cancellationToken: CancellationToken - ) = - TextDocument.Hover state textDocument position |> runAsync cancellationToken - - //-------------------------------------------------------------------------- - // unofficial LSP methods that we implement separately - //-------------------------------------------------------------------------- - - [] - member __.OptionsSet - ( - options: Options - ) = - eprintfn "got options %A" options - state.Options <- options - state.InvalidateAllProjects() diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Program.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Program.fs deleted file mode 100644 index 13d0c9709f..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Program.fs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System - -module Program = - - [] - let main(args: string[]) = - async { - let server = new Server(Console.OpenStandardOutput(), Console.OpenStandardInput()) - server.StartListening() - do! server.WaitForExitAsync() - return 0 - } |> Async.RunSynchronously diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs deleted file mode 100644 index 28d5e49a58..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open System.IO -open StreamJsonRpc - -type Server(sendingStream: Stream, receivingStream: Stream) = - - let formatter = JsonMessageFormatter() - let converter = JsonOptionConverter() // special handler to convert between `Option<'T>` and `obj/null`. - do formatter.JsonSerializer.Converters.Add(converter) - let handler = new HeaderDelimitedMessageHandler(sendingStream, receivingStream, formatter) - let methods = Methods() - let rpc = new JsonRpc(handler, methods) - do methods.State.JsonRpc <- Some rpc - - member __.StartListening() = - rpc.StartListening() - - member __.WaitForExitAsync() = - async { - do! Async.AwaitEvent (methods.State.Shutdown) - do! Async.AwaitEvent (methods.State.Exit) - } - - interface IDisposable with - member __.Dispose() = - rpc.Dispose() diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/State.fs b/src/fsharp/FSharp.Compiler.LanguageServer/State.fs deleted file mode 100644 index 0812bb9a7f..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/State.fs +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open System.Collections.Concurrent -open System.Collections.Generic -open System.Diagnostics -open System.IO -open System.Text.RegularExpressions -open FSharp.Compiler.SourceCodeServices -open StreamJsonRpc - -module internal Solution = - // easy unit testing - let getProjectPaths (solutionContent: string) (solutionDir: string) = - // This looks scary, but is much more lightweight than carrying along MSBuild just to have it parse the solution file. - // - // A valid line in .sln looks like: - // Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ConsoleApp2", "ConsoleApp2\ConsoleApp2.fsproj", "{60A4BE67-7E03-4200-AD38-B0E5E8E049C1}" - // and we're hoping to extract this: ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - // - // therefore: - // ^Project text 'Project' at the start of the line - // .* any number of characters - // \"" double quote character (it's doubled up to escape from the raw string literal here) - // ( start of capture group - // [^\""] not a quote - // * many of those - // \.fsproj literal string ".fsproj" - // ) end of capture group - // \"" double quote - let pattern = Regex(@"^Project.*\""([^\""]*\.fsproj)\""") - let lines = solutionContent.Split('\n') - let relativeProjects = - lines - |> Array.map pattern.Match - |> Array.filter (fun m -> m.Success) - |> Array.map (fun m -> m.Groups.[1].Value) - // .sln files by convention uses backslashes, which might not be appropriate at runtime - |> Array.map (fun p -> p.Replace('\\', Path.DirectorySeparatorChar)) - let projects = - relativeProjects - |> Array.map (fun p -> if Path.IsPathRooted(p) then p else Path.Combine(solutionDir, p)) - projects - -type State() = - - let checker = FSharpChecker.Create() - - let sourceFileToProjectMap = ConcurrentDictionary() - - let shutdownEvent = new Event<_>() - let exitEvent = new Event<_>() - let cancelEvent = new Event<_>() - let projectInvalidatedEvent = new Event<_>() - - let fileChanged (args: FileSystemEventArgs) = - match sourceFileToProjectMap.TryGetValue args.FullPath with - | true, projectOptions -> projectInvalidatedEvent.Trigger(projectOptions) - | false, _ -> () - let fileRenamed (args: RenamedEventArgs) = - match sourceFileToProjectMap.TryGetValue args.FullPath with - | true, projectOptions -> projectInvalidatedEvent.Trigger(projectOptions) - | false, _ -> () - let fileWatcher = new FileSystemWatcher() - do fileWatcher.IncludeSubdirectories <- true - do fileWatcher.Changed.Add(fileChanged) - do fileWatcher.Created.Add(fileChanged) - do fileWatcher.Deleted.Add(fileChanged) - do fileWatcher.Renamed.Add(fileRenamed) - - let execProcess (name: string) (args: string) = - let startInfo = ProcessStartInfo(name, args) - eprintfn "executing: %s %s" name args - startInfo.CreateNoWindow <- true - startInfo.RedirectStandardOutput <- true - startInfo.UseShellExecute <- false - let lines = List() - use proc = new Process() - proc.StartInfo <- startInfo - proc.OutputDataReceived.Add(fun args -> lines.Add(args.Data)) - proc.Start() |> ignore - proc.BeginOutputReadLine() - proc.WaitForExit() - lines.ToArray() - - let linesWithPrefixClean (prefix: string) (lines: string[]) = - lines - |> Array.filter (isNull >> not) - |> Array.map (fun line -> line.TrimStart(' ')) - |> Array.filter (fun line -> line.StartsWith(prefix)) - |> Array.map (fun line -> line.Substring(prefix.Length)) - - let getProjectOptions (rootDir: string) = - if isNull rootDir then [||] - else - fileWatcher.Path <- rootDir - fileWatcher.EnableRaisingEvents <- true - - /// This function is meant to be temporary. Until we figure out what a language server for a project - /// system looks like, we have to guess based on the files we find in the root. - let getProjectOptions (projectPath: string) = - let projectDir = Path.GetDirectoryName(projectPath) - let normalizePath (path: string) = - if Path.IsPathRooted(path) then path - else Path.Combine(projectDir, path) - - // To avoid essentially re-creating a copy of MSBuild alongside this tool, we instead fake a design- - // time build with this project. The output of building this helper project is text that's easily - // parsable. See the helper project for more information. - let reporterProject = Path.Combine(Path.GetDirectoryName(typeof.Assembly.Location), "FSharp.Compiler.LanguageServer.DesignTime.proj") - let detectedTfmSentinel = "DetectedTargetFramework=" - let detectedCommandLineArgSentinel = "DetectedCommandLineArg=" - - let execTfmReporter = - sprintf "build \"%s\" \"/p:ProjectFile=%s\"" reporterProject projectPath - |> execProcess "dotnet" - - let execArgReporter (tfm: string) = - sprintf "build \"%s\" \"/p:ProjectFile=%s\" \"/p:TargetFramework=%s\"" reporterProject projectPath tfm - |> execProcess "dotnet" - - // find the target frameworks - let targetFrameworks = - execTfmReporter - |> linesWithPrefixClean detectedTfmSentinel - - let getArgs (tfm: string) = - execArgReporter tfm - |> linesWithPrefixClean detectedCommandLineArgSentinel - - let tfmAndArgs = - targetFrameworks - |> Array.map (fun tfm -> tfm, getArgs tfm) - - let separateArgs (args: string[]) = - args - |> Array.partition (fun a -> a.StartsWith("-")) - |> (fun (options, files) -> - let normalizedFiles = files |> Array.map normalizePath - options, normalizedFiles) - - // TODO: for now we're only concerned with the first TFM - let _tfm, args = Array.head tfmAndArgs - - let otherOptions, sourceFiles = separateArgs args - - let projectOptions: FSharpProjectOptions = - { ProjectFileName = projectPath - ProjectId = None - SourceFiles = sourceFiles - OtherOptions = otherOptions - ReferencedProjects = [||] // TODO: populate from @(ProjectReference) - IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = false - LoadTime = DateTime.Now - UnresolvedReferences = None - OriginalLoadReferences = [] - ExtraProjectInfo = None - Stamp = None } - projectOptions - let topLevelProjects = Directory.GetFiles(rootDir, "*.fsproj") - let watchableProjectPaths = - match topLevelProjects with - | [||] -> - match Directory.GetFiles(rootDir, "*.sln") with - // TODO: what to do with multiple .sln or a combo of .sln/.fsproj? - | [| singleSolution |] -> - let content = File.ReadAllText(singleSolution) - let solutionDir = Path.GetDirectoryName(singleSolution) - Solution.getProjectPaths content solutionDir - | _ -> [||] - | _ -> topLevelProjects - let watchableProjectOptions = - watchableProjectPaths - |> Array.map getProjectOptions - - // associate source files with project options - let watchFile file projectOptions = - sourceFileToProjectMap.AddOrUpdate(file, projectOptions, fun _ _ -> projectOptions) - - for projectOptions in watchableProjectOptions do - // watch .fsproj - watchFile projectOptions.ProjectFileName projectOptions |> ignore - // TODO: watch .deps.json - for sourceFile in projectOptions.SourceFiles do - let sourceFileFullPath = - if Path.IsPathRooted(sourceFile) then sourceFile - else - let projectDir = Path.GetDirectoryName(projectOptions.ProjectFileName) - Path.Combine(projectDir, sourceFile) - watchFile sourceFileFullPath projectOptions |> ignore - - watchableProjectOptions - - member __.Checker = checker - - /// Initialize the LSP at the specified location. According to the spec, `rootUri` is to be preferred over `rootPath`. - member __.Initialize (rootPath: string) (rootUri: DocumentUri) (computeDiagnostics: FSharpProjectOptions -> unit) = - let rootDir = - if not (isNull rootUri) then Uri(rootUri).LocalPath - else rootPath - let projectOptions = getProjectOptions rootDir - projectInvalidatedEvent.Publish.Add computeDiagnostics // compute diagnostics on project invalidation - for projectOption in projectOptions do - computeDiagnostics projectOption // compute initial set of diagnostics - - [] - member __.Shutdown = shutdownEvent.Publish - - [] - member __.Exit = exitEvent.Publish - - [] - member __.Cancel = cancelEvent.Publish - - [] - member __.ProjectInvalidated = projectInvalidatedEvent.Publish - - member __.DoShutdown() = shutdownEvent.Trigger() - - member __.DoExit() = exitEvent.Trigger() - - member __.DoCancel() = cancelEvent.Trigger() - - member __.InvalidateAllProjects() = - for projectOptions in sourceFileToProjectMap.Values do - projectInvalidatedEvent.Trigger(projectOptions) - - member val Options = Options.Default() with get, set - - member val JsonRpc: JsonRpc option = None with get, set diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs b/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs deleted file mode 100644 index 489b55ebce..0000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System.Threading - -module TextDocument = - - let mutable publishDiagnosticsCancellationTokenSource = new CancellationTokenSource() - - let Hover (state: State) (textDocument: TextDocumentIdentifier) (position: Position) = - async { - eprintfn "hover at %d, %d" position.line position.character - if not state.Options.usePreviewTextHover then return None - else - let startCol, endCol = - if position.character = 0 then 0, 1 - else position.character, position.character + 1 - return Some { contents = { kind = MarkupKind.PlainText - value = "serving textDocument/hover from LSP" } - range = Some { start = { line = position.line; character = startCol } - ``end`` = { line = position.line; character = endCol } } - } - } - - let PublishDiagnostics(state: State, projectOptions: FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) = - // TODO: honor TextDocumentClientCapabilities.publishDiagnostics.relatedInformation - // cancel any existing request to publish diagnostics - publishDiagnosticsCancellationTokenSource.Cancel() - publishDiagnosticsCancellationTokenSource <- new CancellationTokenSource() - async { - if not state.Options.usePreviewDiagnostics then return () - else - eprintfn "starting diagnostics computation" - match state.JsonRpc with - | None -> eprintfn "state.JsonRpc was null; should not be?" - | Some jsonRpc -> - let! results = state.Checker.ParseAndCheckProject projectOptions - let diagnostics = results.Errors - let diagnosticsPerFile = - diagnostics - |> Array.fold (fun state t -> - let existing = Map.tryFind t.FileName state |> Option.defaultValue [] - Map.add t.FileName (t :: existing) state) Map.empty - for sourceFile in projectOptions.SourceFiles do - let diagnostics = - Map.tryFind sourceFile diagnosticsPerFile - |> Option.defaultValue [] - |> List.map (fun d -> - // F# errors count lines starting at 1, but LSP starts at 0 - let range: Range = - { start = { line = d.StartLineAlternate - 1; character = d.StartColumn } - ``end`` = { line = d.EndLineAlternate - 1; character = d.EndColumn } } - let severity = - match d.Severity with - | FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity.Warning -> Diagnostic.Warning - | FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity.Error -> Diagnostic.Error - let res: Diagnostic = - { range = range - severity = Some severity - code = "FS" + d.ErrorNumber.ToString("0000") - source = Some d.FileName - message = d.Message - relatedInformation = None } - res) - |> List.toArray - let args: PublishDiagnosticsParams = - { uri = System.Uri(sourceFile).AbsoluteUri - diagnostics = diagnostics } - - // fire each notification separately - jsonRpc.NotifyAsync(TextDocumentPublishDiagnostics, args) |> Async.AwaitTask |> Async.Start - } - |> (fun computation -> Async.StartAsTask(computation, cancellationToken=publishDiagnosticsCancellationTokenSource.Token)) - |> Async.AwaitTask